Файловый менеджер - Редактировать - /home/harasnat/www/mf/theme.tar
Назад
boost/cli/import-bootswatch.php 0000604 00000005773 15062070724 0012652 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Used to convert a bootswatch file from https://bootswatch.com/ to a Moodle preset. * * @package theme_boost * @subpackage cli * @copyright 2016 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ define('CLI_SCRIPT', true); require(__DIR__.'/../../../config.php'); require_once($CFG->libdir.'/clilib.php'); $usage = " Utility to convert a Bootswatch theme to a Moodle preset compatible with Bootstrap 4. Download _variables.scss and _bootswatch.scss files from https://bootswatch.com/ Run this script. It will generate a new file 'preset.scss' which can be used as a Moodle preset. Usage: # php import-bootswatch.php [--help|-h] # php import-bootswatch.php --variables=<path> --bootswatch=<path> --preset=<path> Options: -h --help Print this help. --variables=<path> Path to the input variables file, defaults to _variables.scss --bootswatch=<path> Path to the input bootswatch file, defauls to _bootswatch.scss --preset=<path> Path to the output preset file, defaults to preset.scss "; list($options, $unrecognised) = cli_get_params([ 'help' => false, 'variables' => '_variables.scss', 'bootswatch' => '_bootswatch.scss', 'preset' => 'preset.scss', ], [ 'h' => 'help', ]); if ($unrecognised) { $unrecognised = implode(PHP_EOL.' ', $unrecognised); cli_error(get_string('cliunknowoption', 'core_admin', $unrecognised)); } if ($options['help']) { cli_writeln($usage); exit(2); } if (is_readable($options['variables'])) { $sourcevariables = file_get_contents($options['variables']); } else { cli_writeln($usage); cli_error('Error reading the variables file: '.$options['variables']); } if (is_readable($options['bootswatch'])) { $sourcebootswatch = file_get_contents($options['bootswatch']); } else { cli_writeln($usage); cli_error('Error reading the bootswatch file: '.$options['bootswatch']); } // Write the preset file. $out = fopen($options['preset'], 'w'); if (!$out) { cli_error('Error writing to the preset file'); } fwrite($out, $sourcevariables); fwrite($out, ' // Import FontAwesome. @import "fontawesome"; // Import All of Bootstrap @import "bootstrap"; // Import Core moodle CSS @import "moodle"; '); // Add the bootswatch file. fwrite($out, $sourcebootswatch); fclose($out); boost/amd/src/sticky-footer.js 0000604 00000006762 15062070724 0012374 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Sticky footer module. * * @module theme_boost/sticky-footer * @copyright 2022 Ferran Recio <ferran@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import Pending from 'core/pending'; import {registerManager, init as defaultInit} from 'core/sticky-footer'; const SELECTORS = { STICKYFOOTER: '.stickyfooter', PAGE: '#page', }; const CLASSES = { HASSTICKYFOOTER: 'hasstickyfooter', }; let initialized = false; let previousScrollPosition = 0; let enabled = false; /** * Scroll handler. * @package */ const scrollSpy = () => { if (!enabled) { return; } // Ignore scroll if page size is not small. if (document.body.clientWidth >= 768) { return; } // Detect if scroll is going down. let scrollPosition = window.scrollY; if (scrollPosition > previousScrollPosition) { hideStickyFooter(); } else { showStickyFooter(); } previousScrollPosition = scrollPosition; }; /** * Return if the sticky footer must be enabled by default or not. * @returns {Boolean} true if the sticky footer is enabled automatic. */ const isDisabledByDefault = () => { const footer = document.querySelector(SELECTORS.STICKYFOOTER); if (!footer) { return false; } return !!footer.dataset.disable; }; /** * Show the sticky footer in the page. */ const showStickyFooter = () => { // We need some seconds to make sure the CSS animation is ready. const pendingPromise = new Pending('theme_boost/sticky-footer:enabling'); const footer = document.querySelector(SELECTORS.STICKYFOOTER); const page = document.querySelector(SELECTORS.PAGE); if (footer && page) { document.body.classList.add(CLASSES.HASSTICKYFOOTER); page.classList.add(CLASSES.HASSTICKYFOOTER); } setTimeout(() => pendingPromise.resolve(), 1000); }; /** * Hide the sticky footer in the page. */ const hideStickyFooter = () => { document.body.classList.remove(CLASSES.HASSTICKYFOOTER); const page = document.querySelector(SELECTORS.PAGE); page?.classList.remove(CLASSES.HASSTICKYFOOTER); }; /** * Enable sticky footer in the page. */ export const enableStickyFooter = () => { enabled = true; showStickyFooter(); }; /** * Disable sticky footer in the page. */ export const disableStickyFooter = () => { enabled = false; hideStickyFooter(); }; /** * Initialize the module. */ export const init = () => { // Prevent sticky footer in behat. if (initialized || document.body.classList.contains('behat-site')) { defaultInit(); return; } initialized = true; if (!isDisabledByDefault()) { enableStickyFooter(); } document.addEventListener("scroll", scrollSpy); registerManager({ enableStickyFooter, disableStickyFooter, }); }; boost/amd/src/courseindexdrawercontrols.js 0000604 00000005375 15062070724 0015112 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Controls for the course index drawer, such as expand-all/collapse-all sections. * * @module theme_boost/courseindexdrawercontrols * @copyright 2023 Stefan Topfstedt * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import {BaseComponent} from 'core/reactive'; import {getCurrentCourseEditor} from 'core_courseformat/courseeditor'; export default class Component extends BaseComponent { create() { this.name = 'courseindexdrawercontrols'; this.selectors = { COLLAPSEALL: `[data-action="collapseallcourseindexsections"]`, EXPANDALL: `[data-action="expandallcourseindexsections"]`, }; } /** * @param {element|string} target the DOM main element or its ID * @param {object} selectors optional css selector overrides * @return {Component} */ static init(target, selectors) { return new Component({ element: document.getElementById(target), reactive: getCurrentCourseEditor(), selectors, }); } /** * Initial state ready method. */ stateReady() { // Attach the on-click event handlers to the expand-all and collapse-all buttons, if present. const expandAllBtn = this.getElement(this.selectors.EXPANDALL); if (expandAllBtn) { this.addEventListener(expandAllBtn, 'click', this._expandAllSections); } const collapseAllBtn = this.getElement(this.selectors.COLLAPSEALL); if (collapseAllBtn) { this.addEventListener(collapseAllBtn, 'click', this._collapseAllSections); } } /** * On-click event handler for the collapse-all button. * @private */ _collapseAllSections() { this._toggleAllSections(true); } /** * On-click event handler for the expand-all button. * @private */ _expandAllSections() { this._toggleAllSections(false); } /** * Collapses or expands all sections in the course index. * @param {boolean} expandOrCollapse set to TRUE to collapse all, and FALSE to expand all. * @private */ _toggleAllSections(expandOrCollapse) { this.reactive.dispatch('allSectionsIndexCollapsed', expandOrCollapse); } } boost/amd/src/loader.js 0000604 00000007346 15062070724 0011037 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Template renderer for Moodle. Load and render Moodle templates with Mustache. * * @module theme_boost/loader * @copyright 2015 Damyon Wiese <damyon@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 2.9 */ import $ from 'jquery'; import * as Aria from './aria'; import Bootstrap from './index'; import Pending from 'core/pending'; import {DefaultWhitelist} from './bootstrap/tools/sanitizer'; import setupBootstrapPendingChecks from './pending'; /** * Rember the last visited tabs. */ const rememberTabs = () => { $('a[data-toggle="tab"]').on('shown.bs.tab', function(e) { var hash = $(e.target).attr('href'); if (history.replaceState) { history.replaceState(null, null, hash); } else { location.hash = hash; } }); const hash = window.location.hash; if (hash) { const tab = document.querySelector('[role="tablist"] [href="' + hash + '"]'); if (tab) { tab.click(); } } }; /** * Enable all popovers * */ const enablePopovers = () => { $('body').popover({ container: 'body', selector: '[data-toggle="popover"]', trigger: 'focus', whitelist: Object.assign(DefaultWhitelist, { table: [], thead: [], tbody: [], tr: [], th: [], td: [], }), }); document.addEventListener('keydown', e => { if (e.key === 'Escape' && e.target.closest('[data-toggle="popover"]')) { $(e.target).popover('hide'); } }); }; /** * Enable tooltips * */ const enableTooltips = () => { $('body').tooltip({ container: 'body', selector: '[data-toggle="tooltip"]', }); }; const pendingPromise = new Pending('theme_boost/loader:init'); // Add pending promise event listeners to relevant Bootstrap custom events. setupBootstrapPendingChecks(); // Setup Aria helpers for Bootstrap features. Aria.init(); // Remember the last visited tabs. rememberTabs(); // Enable all popovers. enablePopovers(); // Enable all tooltips. enableTooltips(); // Disables flipping the dropdowns up or dynamically repositioning them along the Y-axis (based on the viewport) // to prevent the dropdowns getting hidden behind the navbar or them covering the trigger element. $.fn.dropdown.Constructor.Default.popperConfig = { modifiers: { flip: { enabled: false, }, storeTopPosition: { enabled: true, // eslint-disable-next-line no-unused-vars fn(data, options) { data.storedTop = data.offsets.popper.top; return data; }, order: 299 }, restoreTopPosition: { enabled: true, // eslint-disable-next-line no-unused-vars fn(data, options) { data.offsets.popper.top = data.storedTop; return data; }, order: 301 } }, }; pendingPromise.resolve(); export { Bootstrap, }; boost/amd/src/drawer.js 0000604 00000016171 15062070724 0011051 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Contain the logic for a drawer. * * @module theme_boost/drawer * @copyright 2016 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ define(['jquery', 'core/custom_interaction_events', 'core/log', 'core/pubsub', 'core/aria', 'core_user/repository'], function($, CustomEvents, Log, PubSub, Aria, UserRepository) { var SELECTORS = { TOGGLE_REGION: '[data-region="drawer-toggle"]', TOGGLE_ACTION: '[data-action="toggle-drawer"]', TOGGLE_TARGET: 'aria-controls', TOGGLE_SIDE: 'left', BODY: 'body', SECTION: '.list-group-item[href*="#section-"]', DRAWER: '#nav-drawer' }; var small = $(document).width() < 768; /** * Constructor for the Drawer. */ var Drawer = function() { if (!$(SELECTORS.TOGGLE_REGION).length) { Log.debug('Page is missing a drawer region'); } if (!$(SELECTORS.TOGGLE_ACTION).length) { Log.debug('Page is missing a drawer toggle link'); } $(SELECTORS.TOGGLE_REGION).each(function(index, ele) { var trigger = $(ele).find(SELECTORS.TOGGLE_ACTION); var drawerid = trigger.attr('aria-controls'); var drawer = $(document.getElementById(drawerid)); var hidden = trigger.attr('aria-expanded') == 'false'; var side = trigger.attr('data-side'); var body = $(SELECTORS.BODY); var preference = trigger.attr('data-preference'); if (small) { UserRepository.setUserPreference(preference, false); } drawer.on('mousewheel DOMMouseScroll', this.preventPageScroll); if (!hidden) { body.addClass('drawer-open-' + side); trigger.attr('aria-expanded', 'true'); } else { trigger.attr('aria-expanded', 'false'); } }.bind(this)); this.registerEventListeners(); if (small) { this.closeAll(); } }; Drawer.prototype.closeAll = function() { $(SELECTORS.TOGGLE_REGION).each(function(index, ele) { var trigger = $(ele).find(SELECTORS.TOGGLE_ACTION); var side = trigger.attr('data-side'); var body = $(SELECTORS.BODY); var drawerid = trigger.attr('aria-controls'); var drawer = $(document.getElementById(drawerid)); var preference = trigger.attr('data-preference'); trigger.attr('aria-expanded', 'false'); body.removeClass('drawer-open-' + side); Aria.hide(drawer.get()); drawer.addClass('closed'); if (!small) { UserRepository.setUserPreference(preference, false); } }); }; /** * Open / close the blocks drawer. * * @method toggleDrawer * @param {Event} e */ Drawer.prototype.toggleDrawer = function(e) { var trigger = $(e.target).closest('[data-action=toggle-drawer]'); var drawerid = trigger.attr('aria-controls'); var drawer = $(document.getElementById(drawerid)); var body = $(SELECTORS.BODY); var side = trigger.attr('data-side'); var preference = trigger.attr('data-preference'); if (small) { UserRepository.setUserPreference(preference, false); } body.addClass('drawer-ease'); var open = trigger.attr('aria-expanded') == 'true'; if (!open) { // Open. trigger.attr('aria-expanded', 'true'); Aria.unhide(drawer.get()); drawer.focus(); body.addClass('drawer-open-' + side); drawer.removeClass('closed'); if (!small) { UserRepository.setUserPreference(preference, true); } } else { // Close. body.removeClass('drawer-open-' + side); trigger.attr('aria-expanded', 'false'); drawer.addClass('closed').delay(500).queue(function() { // Ensure that during the delay, the drawer wasn't re-opened. if ($(this).hasClass('closed')) { Aria.hide(this); } $(this).dequeue(); }); if (!small) { UserRepository.setUserPreference(preference, false); } } // Publish an event to tell everything that the drawer has been toggled. // The drawer transitions closed so another event will fire once teh transition // has completed. PubSub.publish('nav-drawer-toggle-start', open); }; /** * Prevent the page from scrolling when the drawer is at max scroll. * * @method preventPageScroll * @param {Event} e */ Drawer.prototype.preventPageScroll = function(e) { var delta = e.wheelDelta || (e.originalEvent && e.originalEvent.wheelDelta) || -e.originalEvent.detail, bottomOverflow = (this.scrollTop + $(this).outerHeight() - this.scrollHeight) >= 0, topOverflow = this.scrollTop <= 0; if ((delta < 0 && bottomOverflow) || (delta > 0 && topOverflow)) { e.preventDefault(); } }; /** * Set up all of the event handling for the modal. * * @method registerEventListeners */ Drawer.prototype.registerEventListeners = function() { $(SELECTORS.TOGGLE_ACTION).each(function(index, element) { CustomEvents.define($(element), [CustomEvents.events.activate]); $(element).on(CustomEvents.events.activate, function(e, data) { this.toggleDrawer(data.originalEvent); data.originalEvent.preventDefault(); }.bind(this)); }.bind(this)); $(SELECTORS.SECTION).click(function() { if (small) { this.closeAll(); } }.bind(this)); // Publish an event to tell everything that the drawer completed the transition // to either an open or closed state. $(SELECTORS.DRAWER).on('webkitTransitionEnd msTransitionEnd transitionend', function(e) { var drawer = $(e.target).closest(SELECTORS.DRAWER); // Note: aria-hidden is either present, or absent. It should not be set to false. var open = !!drawer.attr('aria-hidden'); PubSub.publish('nav-drawer-toggle-end', open); }); }; return { 'init': function() { return new Drawer(); } }; }); boost/amd/src/footer-popover.js 0000604 00000005762 15062070724 0012557 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Shows the footer content in a popover. * * @module theme_boost/footer-popover * @copyright 2021 Bas Brands * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import $ from 'jquery'; import Popover from './popover'; const SELECTORS = { FOOTERCONTAINER: '[data-region="footer-container-popover"]', FOOTERCONTENT: '[data-region="footer-content-popover"]', FOOTERBUTTON: '[data-action="footer-popover"]' }; let footerIsShown = false; export const init = () => { const container = document.querySelector(SELECTORS.FOOTERCONTAINER); const footerButton = document.querySelector(SELECTORS.FOOTERBUTTON); // All jQuery in this code can be replaced when MDL-71979 is integrated. $(footerButton).popover({ content: getFooterContent, container: container, html: true, placement: 'top', customClass: 'footer', trigger: 'click', boundary: 'viewport', popperConfig: { modifiers: { preventOverflow: { boundariesElement: 'viewport', padding: 48 }, offset: {}, flip: { behavior: 'flip' }, arrow: { element: '.arrow' }, } } }); document.addEventListener('click', e => { if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) { $(footerButton).popover('hide'); } }, true); document.addEventListener('keydown', e => { if (footerIsShown && e.key === 'Escape') { $(footerButton).popover('hide'); footerButton.focus(); } }); document.addEventListener('focus', e => { if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) { $(footerButton).popover('hide'); } }, true); $(footerButton).on('show.bs.popover', () => { footerIsShown = true; }); $(footerButton).on('hide.bs.popover', () => { footerIsShown = false; }); }; /** * Get the footer content for popover. * * @returns {String} HTML string * @private */ const getFooterContent = () => { return document.querySelector(SELECTORS.FOOTERCONTENT).innerHTML; }; export { Popover }; boost/amd/src/drawers.js 0000604 00000064615 15062070724 0011242 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Toggling the visibility of the secondary navigation on mobile. * * @module theme_boost/drawers * @copyright 2021 Bas Brands * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import ModalBackdrop from 'core/modal_backdrop'; import Templates from 'core/templates'; import * as Aria from 'core/aria'; import {dispatchEvent} from 'core/event_dispatcher'; import {debounce} from 'core/utils'; import {isSmall, isLarge} from 'core/pagehelpers'; import Pending from 'core/pending'; import {setUserPreference} from 'core_user/repository'; // The jQuery module is only used for interacting with Boostrap 4. It can we removed when MDL-71979 is integrated. import jQuery from 'jquery'; let backdropPromise = null; const drawerMap = new Map(); const SELECTORS = { BUTTONS: '[data-toggler="drawers"]', CLOSEBTN: '[data-toggler="drawers"][data-action="closedrawer"]', OPENBTN: '[data-toggler="drawers"][data-action="opendrawer"]', TOGGLEBTN: '[data-toggler="drawers"][data-action="toggle"]', DRAWERS: '[data-region="fixed-drawer"]', DRAWERCONTENT: '.drawercontent', PAGECONTENT: '#page-content', HEADERCONTENT: '.drawerheadercontent', }; const CLASSES = { SCROLLED: 'scrolled', SHOW: 'show', NOTINITIALISED: 'not-initialized', }; /** * Pixel thresshold to auto-hide drawers. * * @type {Number} */ const THRESHOLD = 20; /** * Try to get the drawer z-index from the page content. * * @returns {Number|null} the z-index of the drawer. * @private */ const getDrawerZIndex = () => { const drawer = document.querySelector(SELECTORS.DRAWERS); if (!drawer) { return null; } return parseInt(window.getComputedStyle(drawer).zIndex, 10); }; /** * Add a backdrop to the page. * * @returns {Promise} rendering of modal backdrop. * @private */ const getBackdrop = () => { if (!backdropPromise) { backdropPromise = Templates.render('core/modal_backdrop', {}) .then(html => new ModalBackdrop(html)) .then(modalBackdrop => { const drawerZindex = getDrawerZIndex(); if (drawerZindex) { modalBackdrop.setZIndex(getDrawerZIndex() - 1); } modalBackdrop.getAttachmentPoint().get(0).addEventListener('click', e => { e.preventDefault(); Drawers.closeAllDrawers(); }); return modalBackdrop; }) .catch(); } return backdropPromise; }; /** * Get the button element to open a specific drawer. * * @param {String} drawerId the drawer element Id * @return {HTMLElement|undefined} the open button element * @private */ const getDrawerOpenButton = (drawerId) => { let openButton = document.querySelector(`${SELECTORS.OPENBTN}[data-target="${drawerId}"]`); if (!openButton) { openButton = document.querySelector(`${SELECTORS.TOGGLEBTN}[data-target="${drawerId}"]`); } return openButton; }; /** * Disable drawer tooltips. * * @param {HTMLElement} drawerNode the drawer main node * @private */ const disableDrawerTooltips = (drawerNode) => { const buttons = [ drawerNode.querySelector(SELECTORS.CLOSEBTN), getDrawerOpenButton(drawerNode.id), ]; buttons.forEach(button => { if (!button) { return; } disableButtonTooltip(button); }); }; /** * Disable the button tooltips. * * @param {HTMLElement} button the button element * @param {boolean} enableOnBlur if the tooltip must be re-enabled on blur. * @private */ const disableButtonTooltip = (button, enableOnBlur) => { if (button.hasAttribute('data-original-title')) { // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated. jQuery(button).tooltip('disable'); button.setAttribute('title', button.dataset.originalTitle); } else { button.dataset.disabledToggle = button.dataset.toggle; button.removeAttribute('data-toggle'); } if (enableOnBlur) { button.dataset.restoreTooltipOnBlur = true; } }; /** * Enable drawer tooltips. * * @param {HTMLElement} drawerNode the drawer main node * @private */ const enableDrawerTooltips = (drawerNode) => { const buttons = [ drawerNode.querySelector(SELECTORS.CLOSEBTN), getDrawerOpenButton(drawerNode.id), ]; buttons.forEach(button => { if (!button) { return; } enableButtonTooltip(button); }); }; /** * Enable the button tooltips. * * @param {HTMLElement} button the button element * @private */ const enableButtonTooltip = (button) => { // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated. if (button.hasAttribute('data-original-title')) { jQuery(button).tooltip('enable'); button.removeAttribute('title'); } else if (button.dataset.disabledToggle) { button.dataset.toggle = button.dataset.disabledToggle; jQuery(button).tooltip(); } delete button.dataset.restoreTooltipOnBlur; }; /** * Add scroll listeners to a drawer element. * * @param {HTMLElement} drawerNode the drawer main node * @private */ const addInnerScrollListener = (drawerNode) => { const content = drawerNode.querySelector(SELECTORS.DRAWERCONTENT); if (!content) { return; } content.addEventListener("scroll", () => { drawerNode.classList.toggle( CLASSES.SCROLLED, content.scrollTop != 0 ); }); }; /** * The Drawers class is used to control on-screen drawer elements. * * It handles opening, and closing of drawer elements, as well as more detailed behaviours such as closing a drawer when * another drawer is opened, and supports closing a drawer when the screen is resized. * * Drawers are instantiated on page load, and can also be toggled lazily when toggling any drawer toggle, open button, * or close button. * * A range of show and hide events are also dispatched as detailed in the class * {@link module:theme_boost/drawers#eventTypes eventTypes} object. * * @example <caption>Standard usage</caption> * * // The module just needs to be included to add drawer support. * import 'theme_boost/drawers'; * * @example <caption>Manually open or close any drawer</caption> * * import Drawers from 'theme_boost/drawers'; * * const myDrawer = Drawers.getDrawerInstanceForNode(document.querySelector('.myDrawerNode'); * myDrawer.closeDrawer(); * * @example <caption>Listen to the before show event and cancel it</caption> * * import Drawers from 'theme_boost/drawers'; * * document.addEventListener(Drawers.eventTypes.drawerShow, e => { * // The drawer which will be shown. * window.console.log(e.target); * * // The instance of the Drawers class for this drawer. * window.console.log(e.detail.drawerInstance); * * // Prevent this drawer from being shown. * e.preventDefault(); * }); * * @example <caption>Listen to the shown event</caption> * * document.addEventListener(Drawers.eventTypes.drawerShown, e => { * // The drawer which was shown. * window.console.log(e.target); * * // The instance of the Drawers class for this drawer. * window.console.log(e.detail.drawerInstance); * }); */ export default class Drawers { /** * The underlying HTMLElement which is controlled. */ drawerNode = null; /** * The drawer page bounding box dimensions. * @var {DOMRect} boundingRect */ boundingRect = null; constructor(drawerNode) { // Some behat tests may use fake drawer divs to test components in drawers. if (drawerNode.dataset.behatFakeDrawer !== undefined) { return; } this.drawerNode = drawerNode; if (isSmall()) { this.closeDrawer({focusOnOpenButton: false, updatePreferences: false}); } if (this.drawerNode.classList.contains(CLASSES.SHOW)) { this.openDrawer({focusOnCloseButton: false}); } else if (this.drawerNode.dataset.forceopen == 1) { if (!isSmall()) { this.openDrawer({focusOnCloseButton: false}); } } else { Aria.hide(this.drawerNode); } // Disable tooltips in small screens. if (isSmall()) { disableDrawerTooltips(this.drawerNode); } addInnerScrollListener(this.drawerNode); drawerMap.set(drawerNode, this); drawerNode.classList.remove(CLASSES.NOTINITIALISED); } /** * Whether the drawer is open. * * @returns {boolean} */ get isOpen() { return this.drawerNode.classList.contains(CLASSES.SHOW); } /** * Whether the drawer should close when the window is resized * * @returns {boolean} */ get closeOnResize() { return !!parseInt(this.drawerNode.dataset.closeOnResize); } /** * The list of event types. * * @static * @property {String} drawerShow See {@link event:theme_boost/drawers:show} * @property {String} drawerShown See {@link event:theme_boost/drawers:shown} * @property {String} drawerHide See {@link event:theme_boost/drawers:hide} * @property {String} drawerHidden See {@link event:theme_boost/drawers:hidden} */ static eventTypes = { /** * An event triggered before a drawer is shown. * * @event theme_boost/drawers:show * @type {CustomEvent} * @property {HTMLElement} target The drawer that will be opened. */ drawerShow: 'theme_boost/drawers:show', /** * An event triggered after a drawer is shown. * * @event theme_boost/drawers:shown * @type {CustomEvent} * @property {HTMLElement} target The drawer that was be opened. */ drawerShown: 'theme_boost/drawers:shown', /** * An event triggered before a drawer is hidden. * * @event theme_boost/drawers:hide * @type {CustomEvent} * @property {HTMLElement} target The drawer that will be hidden. */ drawerHide: 'theme_boost/drawers:hide', /** * An event triggered after a drawer is hidden. * * @event theme_boost/drawers:hidden * @type {CustomEvent} * @property {HTMLElement} target The drawer that was be hidden. */ drawerHidden: 'theme_boost/drawers:hidden', }; /** * Get the drawer instance for the specified node * * @param {HTMLElement} drawerNode * @returns {module:theme_boost/drawers} */ static getDrawerInstanceForNode(drawerNode) { if (!drawerMap.has(drawerNode)) { new Drawers(drawerNode); } return drawerMap.get(drawerNode); } /** * Dispatch a drawer event. * * @param {string} eventname the event name * @param {boolean} cancelable if the event is cancelable * @returns {CustomEvent} the resulting custom event */ dispatchEvent(eventname, cancelable = false) { return dispatchEvent( eventname, { drawerInstance: this, }, this.drawerNode, { cancelable, } ); } /** * Open the drawer. * * By default, openDrawer sets the page focus to the close drawer button. However, when a drawer is open at page * load, this represents an accessibility problem as the initial focus changes without any user interaction. The * focusOnCloseButton parameter can be set to false to prevent this behaviour. * * @param {object} args * @param {boolean} [args.focusOnCloseButton=true] Whether to alter page focus when opening the drawer */ openDrawer({focusOnCloseButton = true} = {}) { const pendingPromise = new Pending('theme_boost/drawers:open'); const showEvent = this.dispatchEvent(Drawers.eventTypes.drawerShow, true); if (showEvent.defaultPrevented) { return; } // Hide close button and header content while the drawer is showing to prevent glitchy effects. this.drawerNode.querySelector(SELECTORS.CLOSEBTN)?.classList.toggle('hidden', true); this.drawerNode.querySelector(SELECTORS.HEADERCONTENT)?.classList.toggle('hidden', true); // Remove open tooltip if still visible. let openButton = getDrawerOpenButton(this.drawerNode.id); if (openButton && openButton.hasAttribute('data-original-title')) { // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated. jQuery(openButton)?.tooltip('hide'); } Aria.unhide(this.drawerNode); this.drawerNode.classList.add(CLASSES.SHOW); const preference = this.drawerNode.dataset.preference; if (preference && !isSmall() && (this.drawerNode.dataset.forceopen != 1)) { setUserPreference(preference, true); } const state = this.drawerNode.dataset.state; if (state) { const page = document.getElementById('page'); page.classList.add(state); } this.boundingRect = this.drawerNode.getBoundingClientRect(); if (isSmall()) { getBackdrop().then(backdrop => { backdrop.show(); const pageWrapper = document.getElementById('page'); pageWrapper.style.overflow = 'hidden'; return backdrop; }) .catch(); } // Show close button and header content once the drawer is fully opened. const closeButton = this.drawerNode.querySelector(SELECTORS.CLOSEBTN); const headerContent = this.drawerNode.querySelector(SELECTORS.HEADERCONTENT); if (focusOnCloseButton && closeButton) { disableButtonTooltip(closeButton, true); } setTimeout(() => { closeButton.classList.toggle('hidden', false); headerContent.classList.toggle('hidden', false); if (focusOnCloseButton) { closeButton.focus(); } pendingPromise.resolve(); }, 300); this.dispatchEvent(Drawers.eventTypes.drawerShown); } /** * Close the drawer. * * @param {object} args * @param {boolean} [args.focusOnOpenButton=true] Whether to alter page focus when opening the drawer * @param {boolean} [args.updatePreferences=true] Whether to update the user prewference */ closeDrawer({focusOnOpenButton = true, updatePreferences = true} = {}) { const pendingPromise = new Pending('theme_boost/drawers:close'); const hideEvent = this.dispatchEvent(Drawers.eventTypes.drawerHide, true); if (hideEvent.defaultPrevented) { return; } // Hide close button and header content while the drawer is hiding to prevent glitchy effects. const closeButton = this.drawerNode.querySelector(SELECTORS.CLOSEBTN); closeButton?.classList.toggle('hidden', true); const headerContent = this.drawerNode.querySelector(SELECTORS.HEADERCONTENT); headerContent?.classList.toggle('hidden', true); // Remove the close button tooltip if visible. if (closeButton.hasAttribute('data-original-title')) { // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated. jQuery(closeButton)?.tooltip('hide'); } const preference = this.drawerNode.dataset.preference; if (preference && updatePreferences && !isSmall()) { setUserPreference(preference, false); } const state = this.drawerNode.dataset.state; if (state) { const page = document.getElementById('page'); page.classList.remove(state); } Aria.hide(this.drawerNode); this.drawerNode.classList.remove(CLASSES.SHOW); getBackdrop().then(backdrop => { backdrop.hide(); if (isSmall()) { const pageWrapper = document.getElementById('page'); pageWrapper.style.overflow = 'visible'; } return backdrop; }) .catch(); // Move focus to the open drawer (or toggler) button once the drawer is hidden. let openButton = getDrawerOpenButton(this.drawerNode.id); if (openButton) { disableButtonTooltip(openButton, true); } setTimeout(() => { if (openButton && focusOnOpenButton) { openButton.focus(); } pendingPromise.resolve(); }, 300); this.dispatchEvent(Drawers.eventTypes.drawerHidden); } /** * Toggle visibility of the drawer. */ toggleVisibility() { if (this.drawerNode.classList.contains(CLASSES.SHOW)) { this.closeDrawer(); } else { this.openDrawer(); } } /** * Displaces the drawer outsite the page. * * @param {Number} scrollPosition the page current scroll position */ displace(scrollPosition) { let displace = scrollPosition; let openButton = getDrawerOpenButton(this.drawerNode.id); if (scrollPosition === 0) { this.drawerNode.style.transform = ''; if (openButton) { openButton.style.transform = ''; } return; } const state = this.drawerNode.dataset?.state; const drawrWidth = this.drawerNode.offsetWidth; let scrollThreshold = drawrWidth; let direction = -1; if (state === 'show-drawer-right') { direction = 1; scrollThreshold = THRESHOLD; } // LTR scroll is positive while RTL scroll is negative. if (Math.abs(scrollPosition) > scrollThreshold) { displace = Math.sign(scrollPosition) * (drawrWidth + THRESHOLD); } displace *= direction; const transform = `translateX(${displace}px)`; if (openButton) { openButton.style.transform = transform; } this.drawerNode.style.transform = transform; } /** * Prevent drawer from overlapping an element. * * @param {HTMLElement} currentFocus */ preventOverlap(currentFocus) { // Start position drawer (aka. left drawer) will never overlap with the page content. if (!this.isOpen || this.drawerNode.dataset?.state === 'show-drawer-left') { return; } const drawrWidth = this.drawerNode.offsetWidth; const element = currentFocus.getBoundingClientRect(); // The this.boundingRect is calculated only once and it is reliable // for horizontal overlapping (which is the most common). However, // it is not reliable for vertical overlapping because the drawer // height can be changed by other elements like sticky footer. // To prevent recalculating the boundingRect on every // focusin event, we use horizontal overlapping as first fast check. let overlapping = ( (element.right + THRESHOLD) > this.boundingRect.left && (element.left - THRESHOLD) < this.boundingRect.right ); if (overlapping) { const currentBoundingRect = this.drawerNode.getBoundingClientRect(); overlapping = ( (element.bottom) > currentBoundingRect.top && (element.top) < currentBoundingRect.bottom ); } if (overlapping) { // Force drawer to displace out of the page. let displaceOut = drawrWidth + 1; if (window.right_to_left()) { displaceOut *= -1; } this.displace(displaceOut); } else { // Reset drawer displacement. this.displace(window.scrollX); } } /** * Close all drawers. */ static closeAllDrawers() { drawerMap.forEach(drawerInstance => { drawerInstance.closeDrawer(); }); } /** * Close all drawers except for the specified drawer. * * @param {module:theme_boost/drawers} comparisonInstance */ static closeOtherDrawers(comparisonInstance) { drawerMap.forEach(drawerInstance => { if (drawerInstance === comparisonInstance) { return; } drawerInstance.closeDrawer(); }); } /** * Prevent drawers from covering the focused element. */ static preventCoveringFocusedElement() { const currentFocus = document.activeElement; // Focus on page layout elements should be ignored. const pagecontent = document.querySelector(SELECTORS.PAGECONTENT); if (!currentFocus || !pagecontent?.contains(currentFocus)) { Drawers.displaceDrawers(window.scrollX); return; } drawerMap.forEach(drawerInstance => { drawerInstance.preventOverlap(currentFocus); }); } /** * Prevent drawer from covering the content when the page content covers the full page. * * @param {Number} displace */ static displaceDrawers(displace) { drawerMap.forEach(drawerInstance => { drawerInstance.displace(displace); }); } } /** * Set the last used attribute for the last used toggle button for a drawer. * * @param {object} toggleButton The clicked button. */ const setLastUsedToggle = (toggleButton) => { if (toggleButton.dataset.target) { document.querySelectorAll(`${SELECTORS.BUTTONS}[data-target="${toggleButton.dataset.target}"]`) .forEach(btn => { btn.dataset.lastused = false; }); toggleButton.dataset.lastused = true; } }; /** * Set the focus to the last used button to open this drawer. * @param {string} target The drawer target. */ const focusLastUsedToggle = (target) => { const lastUsedButton = document.querySelector(`${SELECTORS.BUTTONS}[data-target="${target}"][data-lastused="true"`); if (lastUsedButton) { lastUsedButton.focus(); } }; /** * Register the event listeners for the drawer. * * @private */ const registerListeners = () => { // Listen for show/hide events. document.addEventListener('click', e => { const toggleButton = e.target.closest(SELECTORS.TOGGLEBTN); if (toggleButton && toggleButton.dataset.target) { e.preventDefault(); const targetDrawer = document.getElementById(toggleButton.dataset.target); const drawerInstance = Drawers.getDrawerInstanceForNode(targetDrawer); setLastUsedToggle(toggleButton); drawerInstance.toggleVisibility(); } const openDrawerButton = e.target.closest(SELECTORS.OPENBTN); if (openDrawerButton && openDrawerButton.dataset.target) { e.preventDefault(); const targetDrawer = document.getElementById(openDrawerButton.dataset.target); const drawerInstance = Drawers.getDrawerInstanceForNode(targetDrawer); setLastUsedToggle(toggleButton); drawerInstance.openDrawer(); } const closeDrawerButton = e.target.closest(SELECTORS.CLOSEBTN); if (closeDrawerButton && closeDrawerButton.dataset.target) { e.preventDefault(); const targetDrawer = document.getElementById(closeDrawerButton.dataset.target); const drawerInstance = Drawers.getDrawerInstanceForNode(targetDrawer); drawerInstance.closeDrawer(); focusLastUsedToggle(closeDrawerButton.dataset.target); } }); // Close drawer when another drawer opens. document.addEventListener(Drawers.eventTypes.drawerShow, e => { if (isLarge()) { return; } Drawers.closeOtherDrawers(e.detail.drawerInstance); }); // Tooglers and openers blur listeners. const btnSelector = `${SELECTORS.TOGGLEBTN}, ${SELECTORS.OPENBTN}, ${SELECTORS.CLOSEBTN}`; document.addEventListener('focusout', (e) => { const button = e.target.closest(btnSelector); if (button?.dataset.restoreTooltipOnBlur !== undefined) { enableButtonTooltip(button); } }); const closeOnResizeListener = () => { if (isSmall()) { let anyOpen = false; drawerMap.forEach(drawerInstance => { disableDrawerTooltips(drawerInstance.drawerNode); if (drawerInstance.isOpen) { if (drawerInstance.closeOnResize) { drawerInstance.closeDrawer(); } else { anyOpen = true; } } }); if (anyOpen) { getBackdrop().then(backdrop => backdrop.show()).catch(); } } else { drawerMap.forEach(drawerInstance => { enableDrawerTooltips(drawerInstance.drawerNode); }); getBackdrop().then(backdrop => backdrop.hide()).catch(); } }; document.addEventListener('scroll', () => { const body = document.querySelector('body'); if (window.scrollY >= window.innerHeight) { body.classList.add(CLASSES.SCROLLED); } else { body.classList.remove(CLASSES.SCROLLED); } // Horizontal scroll listener to displace the drawers to prevent covering // any possible sticky content. Drawers.displaceDrawers(window.scrollX); }); const preventOverlap = debounce(Drawers.preventCoveringFocusedElement, 100); document.addEventListener('focusin', preventOverlap); document.addEventListener('focusout', preventOverlap); window.addEventListener('resize', debounce(closeOnResizeListener, 400)); }; registerListeners(); const drawers = document.querySelectorAll(SELECTORS.DRAWERS); drawers.forEach(drawerNode => Drawers.getDrawerInstanceForNode(drawerNode)); boost/amd/src/aria.js 0000604 00000044046 15062070724 0010503 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Enhancements to Bootstrap components for accessibility. * * @module theme_boost/aria * @copyright 2018 Damyon Wiese <damyon@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import $ from 'jquery'; import Pending from 'core/pending'; /** * Drop downs from bootstrap don't support keyboard accessibility by default. */ const dropdownFix = () => { let focusEnd = false; const setFocusEnd = (end = true) => { focusEnd = end; }; const getFocusEnd = () => { const result = focusEnd; focusEnd = false; return result; }; // Special handling for navigation keys when menu is open. const shiftFocus = (element, focusCheck = null) => { const pendingPromise = new Pending('core/aria:delayed-focus'); setTimeout(() => { if (!focusCheck || focusCheck()) { element.focus(); } pendingPromise.resolve(); }, 50); }; // Event handling for the dropdown menu button. const handleMenuButton = e => { const trigger = e.key; let fixFocus = false; // Space key or Enter key opens the menu. if (trigger === ' ' || trigger === 'Enter') { fixFocus = true; // Cancel random scroll. e.preventDefault(); // Open the menu instead. e.target.click(); } // Up and Down keys also open the menu. if (trigger === 'ArrowUp' || trigger === 'ArrowDown') { fixFocus = true; } if (!fixFocus) { // No need to fix the focus. Return early. return; } // Fix the focus on the menu items when the menu is opened. const menu = e.target.parentElement.querySelector('[role="menu"]'); let menuItems = false; let foundMenuItem = false; let textInput = false; if (menu) { menuItems = menu.querySelectorAll('[role="menuitem"]'); textInput = e.target.parentElement.querySelector('[data-action="search"]'); } if (menuItems && menuItems.length > 0) { // Up key opens the menu at the end. if (trigger === 'ArrowUp') { setFocusEnd(); } else { setFocusEnd(false); } if (getFocusEnd()) { foundMenuItem = menuItems[menuItems.length - 1]; } else { // The first menu entry, pretty reasonable. foundMenuItem = menuItems[0]; } } if (textInput) { shiftFocus(textInput); } if (foundMenuItem && textInput === null) { shiftFocus(foundMenuItem); } }; // Search for menu items by finding the first item that has // text starting with the typed character (case insensitive). document.addEventListener('keypress', e => { if (e.target.matches('.dropdown [role="menu"] [role="menuitem"]')) { const menu = e.target.closest('[role="menu"]'); if (!menu) { return; } const menuItems = menu.querySelectorAll('[role="menuitem"]'); if (!menuItems) { return; } const trigger = e.key.toLowerCase(); for (let i = 0; i < menuItems.length; i++) { const item = menuItems[i]; const itemText = item.text.trim().toLowerCase(); if (itemText.indexOf(trigger) == 0) { shiftFocus(item); break; } } } }); // Keyboard navigation for arrow keys, home and end keys. document.addEventListener('keydown', e => { // We only want to set focus when users access the dropdown via keyboard as per // guidelines defined in w3 aria practices 1.1 menu-button. if (e.target.matches('[data-toggle="dropdown"]')) { handleMenuButton(e); } if (e.target.matches('.dropdown [role="menu"] [role="menuitem"]')) { const trigger = e.key; let next = false; const menu = e.target.closest('[role="menu"]'); if (!menu) { return; } const menuItems = menu.querySelectorAll('[role="menuitem"]'); if (!menuItems) { return; } // Down key. if (trigger == 'ArrowDown') { for (let i = 0; i < menuItems.length - 1; i++) { if (menuItems[i] == e.target) { next = menuItems[i + 1]; break; } } if (!next) { // Wrap to first item. next = menuItems[0]; } } else if (trigger == 'ArrowUp') { // Up key. for (let i = 1; i < menuItems.length; i++) { if (menuItems[i] == e.target) { next = menuItems[i - 1]; break; } } if (!next) { // Wrap to last item. next = menuItems[menuItems.length - 1]; } } else if (trigger == 'Home') { // Home key. next = menuItems[0]; } else if (trigger == 'End') { // End key. next = menuItems[menuItems.length - 1]; } // Variable next is set if we do want to act on the keypress. if (next) { e.preventDefault(); shiftFocus(next); } return; } }); $('.dropdown').on('hidden.bs.dropdown', e => { // We need to focus on the menu trigger. const trigger = e.target.querySelector('[data-toggle="dropdown"]'); const focused = document.activeElement != document.body ? document.activeElement : null; if (trigger && focused && e.target.contains(focused)) { shiftFocus(trigger, () => { if (document.activeElement === document.body) { // If the focus is currently on the body, then we can safely assume that the focus needs to be updated. return true; } // If the focus is on a child of the clicked element still, then update the focus. return e.target.contains(document.activeElement); }); } }); }; /** * A lot of Bootstrap's out of the box features don't work if dropdown items are not focusable. */ const comboboxFix = () => { $(document).on('show.bs.dropdown', e => { if (e.relatedTarget.matches('[role="combobox"]')) { const combobox = e.relatedTarget; const listbox = document.querySelector(`#${combobox.getAttribute('aria-controls')}[role="listbox"]`); if (listbox) { const selectedOption = listbox.querySelector('[role="option"][aria-selected="true"]'); // To make sure ArrowDown doesn't move the active option afterwards. setTimeout(() => { if (selectedOption) { selectedOption.classList.add('active'); combobox.setAttribute('aria-activedescendant', selectedOption.id); } else { const firstOption = listbox.querySelector('[role="option"]'); firstOption.setAttribute('aria-selected', 'true'); firstOption.classList.add('active'); combobox.setAttribute('aria-activedescendant', firstOption.id); } }, 0); } } }); $(document).on('hidden.bs.dropdown', e => { if (e.relatedTarget.matches('[role="combobox"]')) { const combobox = e.relatedTarget; const listbox = document.querySelector(`#${combobox.getAttribute('aria-controls')}[role="listbox"]`); combobox.removeAttribute('aria-activedescendant'); if (listbox) { setTimeout(() => { // Undo all previously highlighted options. listbox.querySelectorAll('.active[role="option"]').forEach(option => { option.classList.remove('active'); }); }, 0); } } }); // Handling keyboard events for both navigating through and selecting options. document.addEventListener('keydown', e => { if (e.target.matches('[role="combobox"][aria-controls]:not([aria-haspopup=dialog])')) { const combobox = e.target; const trigger = e.key; let next = null; const listbox = document.querySelector(`#${combobox.getAttribute('aria-controls')}[role="listbox"]`); const options = listbox.querySelectorAll('[role="option"]'); const activeOption = listbox.querySelector('.active[role="option"]'); const editable = combobox.hasAttribute('aria-autocomplete'); // Under the special case that the dropdown menu is being shown as a result of the key press (like when the user // presses ArrowDown or Enter or ... to open the dropdown menu), activeOption is not set yet. // It's because of a race condition with show.bs.dropdown event handler. if (options && (activeOption || editable)) { if (trigger == 'ArrowDown') { for (let i = 0; i < options.length - 1; i++) { if (options[i] == activeOption) { next = options[i + 1]; break; } } if (editable && !next) { next = options[0]; } } if (trigger == 'ArrowUp') { for (let i = 1; i < options.length; i++) { if (options[i] == activeOption) { next = options[i - 1]; break; } } if (editable && !next) { next = options[options.length - 1]; } } else if (trigger == 'Home') { next = options[0]; } else if (trigger == 'End') { next = options[options.length - 1]; } else if ((trigger == ' ' && !editable) || trigger == 'Enter') { e.preventDefault(); selectOption(combobox, activeOption); } else if (!editable) { // Search for options by finding the first option that has // text starting with the typed character (case insensitive). for (let i = 0; i < options.length; i++) { const option = options[i]; const optionText = option.textContent.trim().toLowerCase(); const keyPressed = e.key.toLowerCase(); if (optionText.indexOf(keyPressed) == 0) { next = option; break; } } } // Variable next is set if we do want to act on the keypress. if (next) { e.preventDefault(); if (activeOption) { activeOption.classList.remove('active'); } next.classList.add('active'); combobox.setAttribute('aria-activedescendant', next.id); next.scrollIntoView({block: 'nearest'}); } } } }); document.addEventListener('click', e => { const option = e.target.closest('[role="listbox"] [role="option"]'); if (option) { const listbox = option.closest('[role="listbox"]'); const combobox = document.querySelector(`[role="combobox"][aria-controls="${listbox.id}"]`); if (combobox) { combobox.focus(); selectOption(combobox, option); } } }); // In case some code somewhere else changes the value of the combobox. document.addEventListener('change', e => { if (e.target.matches('input[type="hidden"][id]')) { const combobox = document.querySelector(`[role="combobox"][data-input-element="${e.target.id}"]`); const option = e.target.parentElement.querySelector(`[role="option"][data-value="${e.target.value}"]`); if (combobox && option) { selectOption(combobox, option); } } }); const selectOption = (combobox, option) => { const listbox = option.closest('[role="listbox"]'); const oldSelectedOption = listbox.querySelector('[role="option"][aria-selected="true"]'); if (oldSelectedOption != option) { if (oldSelectedOption) { oldSelectedOption.removeAttribute('aria-selected'); } option.setAttribute('aria-selected', 'true'); } if (combobox.hasAttribute('value')) { combobox.value = option.textContent.replace(/[\n\r]+|[\s]{2,}/g, ' ').trim(); } else { combobox.textContent = option.textContent; } if (combobox.dataset.inputElement) { const inputElement = document.getElementById(combobox.dataset.inputElement); if (inputElement && (inputElement.value != option.dataset.value)) { inputElement.value = option.dataset.value; inputElement.dispatchEvent(new Event('change', {bubbles: true})); } } }; }; /** * After page load, focus on any element with special autofocus attribute. */ const autoFocus = () => { window.addEventListener("load", () => { const alerts = document.querySelectorAll('[data-aria-autofocus="true"][role="alert"]'); Array.prototype.forEach.call(alerts, autofocusElement => { // According to the specification an role="alert" region is only read out on change to the content // of that region. autofocusElement.innerHTML += ' '; autofocusElement.removeAttribute('data-aria-autofocus'); }); }); }; /** * Changes the focus to the correct tab based on the key that is pressed. * @param {KeyboardEvent} e */ const updateTabFocus = e => { const tabList = e.target.closest('[role="tablist"]'); const vertical = tabList.getAttribute('aria-orientation') == 'vertical'; const rtl = window.right_to_left(); const arrowNext = vertical ? 'ArrowDown' : (rtl ? 'ArrowLeft' : 'ArrowRight'); const arrowPrevious = vertical ? 'ArrowUp' : (rtl ? 'ArrowRight' : 'ArrowLeft'); const tabs = Array.prototype.filter.call( tabList.querySelectorAll('[role="tab"]'), tab => !!tab.offsetHeight); // We only work with the visible tabs. for (let i = 0; i < tabs.length; i++) { tabs[i].index = i; } switch (e.key) { case arrowNext: e.preventDefault(); if (e.target.index !== undefined && tabs[e.target.index + 1]) { tabs[e.target.index + 1].focus(); } else { tabs[0].focus(); } break; case arrowPrevious: e.preventDefault(); if (e.target.index !== undefined && tabs[e.target.index - 1]) { tabs[e.target.index - 1].focus(); } else { tabs[tabs.length - 1].focus(); } break; case 'Home': e.preventDefault(); tabs[0].focus(); break; case 'End': e.preventDefault(); tabs[tabs.length - 1].focus(); } }; /** * Fix accessibility issues regarding tab elements focus and their tab order in Bootstrap navs. */ const tabElementFix = () => { document.addEventListener('keydown', e => { if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key)) { if (e.target.matches('[role="tablist"] [role="tab"]')) { updateTabFocus(e); } } }); document.addEventListener('click', e => { if (e.target.matches('[role="tablist"] [data-toggle="tab"], [role="tablist"] [data-toggle="pill"]')) { const tabs = e.target.closest('[role="tablist"]').querySelectorAll('[data-toggle="tab"], [data-toggle="pill"]'); e.preventDefault(); $(e.target).tab('show'); tabs.forEach(tab => { tab.tabIndex = -1; }); e.target.tabIndex = 0; } }); }; /** * Fix keyboard interaction with Bootstrap Collapse elements. * * @see {@link https://www.w3.org/TR/wai-aria-practices-1.1/#disclosure|WAI-ARIA Authoring Practices 1.1 - Disclosure (Show/Hide)} */ const collapseFix = () => { document.addEventListener('keydown', e => { if (e.target.matches('[data-toggle="collapse"]')) { // Pressing space should toggle expand/collapse. if (e.key === ' ') { e.preventDefault(); e.target.click(); } } }); }; export const init = () => { dropdownFix(); comboboxFix(); autoFocus(); tabElementFix(); collapseFix(); }; boost/amd/src/index.js 0000604 00000001653 15062070724 0010673 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): index.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ export { default as Alert } from './bootstrap/alert' export { default as Button } from './bootstrap/button' export { default as Carousel } from './bootstrap/carousel' export { default as Collapse } from './bootstrap/collapse' export { default as Dropdown } from './bootstrap/dropdown' export { default as Modal } from './bootstrap/modal' export { default as Popover } from './bootstrap/popover' export { default as Scrollspy } from './bootstrap/scrollspy' export { default as Tab } from './bootstrap/tab' export { default as Toast } from './bootstrap/toast' export { default as Tooltip } from './bootstrap/tooltip' export { default as Util } from './bootstrap/util' boost/amd/src/popover.js 0000604 00000001715 15062070724 0011255 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Backward compatibility file for the old popover.js * * @module theme_boost/popover * @copyright 2020 Bas Brands <bas@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import Popover from './bootstrap/popover'; export { Popover }; boost/amd/src/pending.js 0000604 00000005506 15062070724 0011211 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Add Pending JS checks to stock Bootstrap transitions. * * @module theme_boost/pending * @copyright 2019 Andrew Nicols <andrew@nicols.co.uk> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import jQuery from 'jquery'; const moduleTransitions = { alert: [ // Alert. { start: 'close', end: 'closed', }, ], carousel: [ { start: 'slide', end: 'slid', }, ], collapse: [ { start: 'hide', end: 'hidden', }, { start: 'show', end: 'shown', }, ], dropdown: [ { start: 'hide', end: 'hidden', }, { start: 'show', end: 'shown', }, ], modal: [ { start: 'hide', end: 'hidden', }, { start: 'show', end: 'shown', }, ], popover: [ { start: 'hide', end: 'hidden', }, { start: 'show', end: 'shown', }, ], tab: [ { start: 'hide', end: 'hidden', }, { start: 'show', end: 'shown', }, ], toast: [ { start: 'hide', end: 'hidden', }, { start: 'show', end: 'shown', }, ], tooltip: [ { start: 'hide', end: 'hidden', }, { start: 'show', end: 'shown', }, ], }; export default () => { Object.entries(moduleTransitions).forEach(([key, pairs]) => { pairs.forEach(pair => { const eventStart = `${pair.start}.bs.${key}`; const eventEnd = `${pair.end}.bs.${key}`; jQuery(document.body).on(eventStart, e => { M.util.js_pending(eventEnd); jQuery(e.target).one(eventEnd, () => { M.util.js_complete(eventEnd); }); }); }); }); }; boost/amd/src/form-display-errors.js 0000604 00000013267 15062070724 0013510 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Custom form error event handler to manipulate the bootstrap markup and show * nicely styled errors in an mform. * * @module theme_boost/form-display-errors * @copyright 2016 Damyon Wiese <damyon@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ define(['jquery', 'core_form/events'], function($, FormEvent) { return { /** * Enhance the supplied element to handle form field errors. * * @method * @param {String} elementid * @listens event:formFieldValidationFailed */ enhance: function(elementid) { var element = document.getElementById(elementid); if (!element) { // Some elements (e.g. static) don't have a form field. // Hence there is no validation. So, no setup required here. return; } element.addEventListener(FormEvent.eventTypes.formFieldValidationFailed, e => { const msg = e.detail.message; e.preventDefault(); var parent = $(element).closest('.form-group'); var feedback = parent.find('.form-control-feedback'); const feedbackId = feedback.attr('id'); // Get current aria-describedby value. let describedBy = $(element).attr('aria-describedby'); if (typeof describedBy === "undefined") { describedBy = ''; } // Split aria-describedby attribute into an array of IDs if necessary. let describedByIds = []; if (describedBy.length) { describedByIds = describedBy.split(" "); } // Find the the feedback container in the aria-describedby attribute. const feedbackIndex = describedByIds.indexOf(feedbackId); // Sometimes (atto) we have a hidden textarea backed by a real contenteditable div. if (($(element).prop("tagName") == 'TEXTAREA') && parent.find('[contenteditable]').length > 0) { element = parent.find('[contenteditable]'); } if (msg !== '') { parent.addClass('has-danger'); parent.data('client-validation-error', true); $(element).addClass('is-invalid'); // Append the feedback ID to the aria-describedby attribute if it doesn't exist yet. if (feedbackIndex === -1) { describedByIds.push(feedbackId); $(element).attr('aria-describedby', describedByIds.join(" ")); } $(element).attr('aria-invalid', true); feedback.attr('tabindex', 0); feedback.html(msg); // Only display and focus when the error was not already visible. // This is so that, when tabbing around the form, you don't get stuck. if (!feedback.is(':visible')) { feedback.show(); feedback.focus(); } } else { if (parent.data('client-validation-error') === true) { parent.removeClass('has-danger'); parent.data('client-validation-error', false); $(element).removeClass('is-invalid'); // If the aria-describedby attribute contains the error container's ID, remove it. if (feedbackIndex > -1) { describedByIds.splice(feedbackIndex, 1); } // Check the remaining element IDs in the aria-describedby attribute. if (describedByIds.length) { // If there's at least one, combine them with a blank space and update the aria-describedby attribute. describedBy = describedByIds.join(" "); // Put back the new describedby attribute. $(element).attr('aria-describedby', describedBy); } else { // If there's none, remove the aria-describedby attribute. $(element).removeAttr('aria-describedby'); } $(element).attr('aria-invalid', false); feedback.hide(); } } }); var form = element.closest('form'); if (form && !('boostFormErrorsEnhanced' in form.dataset)) { form.addEventListener('submit', function() { var visibleError = $('.form-control-feedback:visible'); if (visibleError.length) { visibleError[0].focus(); } }); form.dataset.boostFormErrorsEnhanced = 1; } } }; }); boost/amd/src/bootstrap/carousel.js 0000604 00000037067 15062070724 0013426 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): carousel.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Util from './util' /** * Constants */ const NAME = 'carousel' const VERSION = '4.6.2' const DATA_KEY = 'bs.carousel' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch const SWIPE_THRESHOLD = 40 const CLASS_NAME_CAROUSEL = 'carousel' const CLASS_NAME_ACTIVE = 'active' const CLASS_NAME_SLIDE = 'slide' const CLASS_NAME_RIGHT = 'carousel-item-right' const CLASS_NAME_LEFT = 'carousel-item-left' const CLASS_NAME_NEXT = 'carousel-item-next' const CLASS_NAME_PREV = 'carousel-item-prev' const CLASS_NAME_POINTER_EVENT = 'pointer-event' const DIRECTION_NEXT = 'next' const DIRECTION_PREV = 'prev' const DIRECTION_LEFT = 'left' const DIRECTION_RIGHT = 'right' const EVENT_SLIDE = `slide${EVENT_KEY}` const EVENT_SLID = `slid${EVENT_KEY}` const EVENT_KEYDOWN = `keydown${EVENT_KEY}` const EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}` const EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}` const EVENT_TOUCHSTART = `touchstart${EVENT_KEY}` const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}` const EVENT_TOUCHEND = `touchend${EVENT_KEY}` const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}` const EVENT_POINTERUP = `pointerup${EVENT_KEY}` const EVENT_DRAG_START = `dragstart${EVENT_KEY}` const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const SELECTOR_ACTIVE = '.active' const SELECTOR_ACTIVE_ITEM = '.active.carousel-item' const SELECTOR_ITEM = '.carousel-item' const SELECTOR_ITEM_IMG = '.carousel-item img' const SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev' const SELECTOR_INDICATORS = '.carousel-indicators' const SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]' const SELECTOR_DATA_RIDE = '[data-ride="carousel"]' const Default = { interval: 5000, keyboard: true, slide: false, pause: 'hover', wrap: true, touch: true } const DefaultType = { interval: '(number|boolean)', keyboard: 'boolean', slide: '(boolean|string)', pause: '(string|boolean)', wrap: 'boolean', touch: 'boolean' } const PointerType = { TOUCH: 'touch', PEN: 'pen' } /** * Class definition */ class Carousel { constructor(element, config) { this._items = null this._interval = null this._activeElement = null this._isPaused = false this._isSliding = false this.touchTimeout = null this.touchStartX = 0 this.touchDeltaX = 0 this._config = this._getConfig(config) this._element = element this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS) this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0 this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent) this._addEventListeners() } // Getters static get VERSION() { return VERSION } static get Default() { return Default } // Public next() { if (!this._isSliding) { this._slide(DIRECTION_NEXT) } } nextWhenVisible() { const $element = $(this._element) // Don't call next when the page isn't visible // or the carousel or its parent isn't visible if (!document.hidden && ($element.is(':visible') && $element.css('visibility') !== 'hidden')) { this.next() } } prev() { if (!this._isSliding) { this._slide(DIRECTION_PREV) } } pause(event) { if (!event) { this._isPaused = true } if (this._element.querySelector(SELECTOR_NEXT_PREV)) { Util.triggerTransitionEnd(this._element) this.cycle(true) } clearInterval(this._interval) this._interval = null } cycle(event) { if (!event) { this._isPaused = false } if (this._interval) { clearInterval(this._interval) this._interval = null } if (this._config.interval && !this._isPaused) { this._updateInterval() this._interval = setInterval( (document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval ) } } to(index) { this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM) const activeIndex = this._getItemIndex(this._activeElement) if (index > this._items.length - 1 || index < 0) { return } if (this._isSliding) { $(this._element).one(EVENT_SLID, () => this.to(index)) return } if (activeIndex === index) { this.pause() this.cycle() return } const direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV this._slide(direction, this._items[index]) } dispose() { $(this._element).off(EVENT_KEY) $.removeData(this._element, DATA_KEY) this._items = null this._config = null this._element = null this._interval = null this._isPaused = null this._isSliding = null this._activeElement = null this._indicatorsElement = null } // Private _getConfig(config) { config = { ...Default, ...config } Util.typeCheckConfig(NAME, config, DefaultType) return config } _handleSwipe() { const absDeltax = Math.abs(this.touchDeltaX) if (absDeltax <= SWIPE_THRESHOLD) { return } const direction = absDeltax / this.touchDeltaX this.touchDeltaX = 0 // swipe left if (direction > 0) { this.prev() } // swipe right if (direction < 0) { this.next() } } _addEventListeners() { if (this._config.keyboard) { $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event)) } if (this._config.pause === 'hover') { $(this._element) .on(EVENT_MOUSEENTER, event => this.pause(event)) .on(EVENT_MOUSELEAVE, event => this.cycle(event)) } if (this._config.touch) { this._addTouchEventListeners() } } _addTouchEventListeners() { if (!this._touchSupported) { return } const start = event => { if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { this.touchStartX = event.originalEvent.clientX } else if (!this._pointerEvent) { this.touchStartX = event.originalEvent.touches[0].clientX } } const move = event => { // ensure swiping with one touch and not pinching this.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - this.touchStartX } const end = event => { if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { this.touchDeltaX = event.originalEvent.clientX - this.touchStartX } this._handleSwipe() if (this._config.pause === 'hover') { // If it's a touch-enabled device, mouseenter/leave are fired as // part of the mouse compatibility events on first tap - the carousel // would stop cycling until user tapped out of it; // here, we listen for touchend, explicitly pause the carousel // (as if it's the second time we tap on it, mouseenter compat event // is NOT fired) and after a timeout (to allow for mouse compatibility // events to fire) we explicitly restart cycling this.pause() if (this.touchTimeout) { clearTimeout(this.touchTimeout) } this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval) } } $(this._element.querySelectorAll(SELECTOR_ITEM_IMG)) .on(EVENT_DRAG_START, e => e.preventDefault()) if (this._pointerEvent) { $(this._element).on(EVENT_POINTERDOWN, event => start(event)) $(this._element).on(EVENT_POINTERUP, event => end(event)) this._element.classList.add(CLASS_NAME_POINTER_EVENT) } else { $(this._element).on(EVENT_TOUCHSTART, event => start(event)) $(this._element).on(EVENT_TOUCHMOVE, event => move(event)) $(this._element).on(EVENT_TOUCHEND, event => end(event)) } } _keydown(event) { if (/input|textarea/i.test(event.target.tagName)) { return } switch (event.which) { case ARROW_LEFT_KEYCODE: event.preventDefault() this.prev() break case ARROW_RIGHT_KEYCODE: event.preventDefault() this.next() break default: } } _getItemIndex(element) { this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [] return this._items.indexOf(element) } _getItemByDirection(direction, activeElement) { const isNextDirection = direction === DIRECTION_NEXT const isPrevDirection = direction === DIRECTION_PREV const activeIndex = this._getItemIndex(activeElement) const lastItemIndex = this._items.length - 1 const isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex if (isGoingToWrap && !this._config.wrap) { return activeElement } const delta = direction === DIRECTION_PREV ? -1 : 1 const itemIndex = (activeIndex + delta) % this._items.length return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex] } _triggerSlideEvent(relatedTarget, eventDirectionName) { const targetIndex = this._getItemIndex(relatedTarget) const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM)) const slideEvent = $.Event(EVENT_SLIDE, { relatedTarget, direction: eventDirectionName, from: fromIndex, to: targetIndex }) $(this._element).trigger(slideEvent) return slideEvent } _setActiveIndicatorElement(element) { if (this._indicatorsElement) { const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE)) $(indicators).removeClass(CLASS_NAME_ACTIVE) const nextIndicator = this._indicatorsElement.children[ this._getItemIndex(element) ] if (nextIndicator) { $(nextIndicator).addClass(CLASS_NAME_ACTIVE) } } } _updateInterval() { const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM) if (!element) { return } const elementInterval = parseInt(element.getAttribute('data-interval'), 10) if (elementInterval) { this._config.defaultInterval = this._config.defaultInterval || this._config.interval this._config.interval = elementInterval } else { this._config.interval = this._config.defaultInterval || this._config.interval } } _slide(direction, element) { const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM) const activeElementIndex = this._getItemIndex(activeElement) const nextElement = element || activeElement && this._getItemByDirection(direction, activeElement) const nextElementIndex = this._getItemIndex(nextElement) const isCycling = Boolean(this._interval) let directionalClassName let orderClassName let eventDirectionName if (direction === DIRECTION_NEXT) { directionalClassName = CLASS_NAME_LEFT orderClassName = CLASS_NAME_NEXT eventDirectionName = DIRECTION_LEFT } else { directionalClassName = CLASS_NAME_RIGHT orderClassName = CLASS_NAME_PREV eventDirectionName = DIRECTION_RIGHT } if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) { this._isSliding = false return } const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName) if (slideEvent.isDefaultPrevented()) { return } if (!activeElement || !nextElement) { // Some weirdness is happening, so we bail return } this._isSliding = true if (isCycling) { this.pause() } this._setActiveIndicatorElement(nextElement) this._activeElement = nextElement const slidEvent = $.Event(EVENT_SLID, { relatedTarget: nextElement, direction: eventDirectionName, from: activeElementIndex, to: nextElementIndex }) if ($(this._element).hasClass(CLASS_NAME_SLIDE)) { $(nextElement).addClass(orderClassName) Util.reflow(nextElement) $(activeElement).addClass(directionalClassName) $(nextElement).addClass(directionalClassName) const transitionDuration = Util.getTransitionDurationFromElement(activeElement) $(activeElement) .one(Util.TRANSITION_END, () => { $(nextElement) .removeClass(`${directionalClassName} ${orderClassName}`) .addClass(CLASS_NAME_ACTIVE) $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`) this._isSliding = false setTimeout(() => $(this._element).trigger(slidEvent), 0) }) .emulateTransitionEnd(transitionDuration) } else { $(activeElement).removeClass(CLASS_NAME_ACTIVE) $(nextElement).addClass(CLASS_NAME_ACTIVE) this._isSliding = false $(this._element).trigger(slidEvent) } if (isCycling) { this.cycle() } } // Static static _jQueryInterface(config) { return this.each(function () { let data = $(this).data(DATA_KEY) let _config = { ...Default, ...$(this).data() } if (typeof config === 'object') { _config = { ..._config, ...config } } const action = typeof config === 'string' ? config : _config.slide if (!data) { data = new Carousel(this, _config) $(this).data(DATA_KEY, data) } if (typeof config === 'number') { data.to(config) } else if (typeof action === 'string') { if (typeof data[action] === 'undefined') { throw new TypeError(`No method named "${action}"`) } data[action]() } else if (_config.interval && _config.ride) { data.pause() data.cycle() } }) } static _dataApiClickHandler(event) { const selector = Util.getSelectorFromElement(this) if (!selector) { return } const target = $(selector)[0] if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) { return } const config = { ...$(target).data(), ...$(this).data() } const slideIndex = this.getAttribute('data-slide-to') if (slideIndex) { config.interval = false } Carousel._jQueryInterface.call($(target), config) if (slideIndex) { $(target).data(DATA_KEY).to(slideIndex) } event.preventDefault() } } /** * Data API implementation */ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler) $(window).on(EVENT_LOAD_DATA_API, () => { const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE)) for (let i = 0, len = carousels.length; i < len; i++) { const $carousel = $(carousels[i]) Carousel._jQueryInterface.call($carousel, $carousel.data()) } }) /** * jQuery */ $.fn[NAME] = Carousel._jQueryInterface $.fn[NAME].Constructor = Carousel $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Carousel._jQueryInterface } export default Carousel boost/amd/src/bootstrap/tools/sanitizer.js 0000604 00000006534 15062070724 0014754 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): tools/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ const uriAttrs = [ 'background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href' ] const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i export const DefaultWhitelist = { // Global attributes allowed on any supplied element below. '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], a: ['target', 'href', 'title', 'rel'], area: [], b: [], br: [], col: [], code: [], div: [], em: [], hr: [], h1: [], h2: [], h3: [], h4: [], h5: [], h6: [], i: [], img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], li: [], ol: [], p: [], pre: [], s: [], small: [], span: [], sub: [], sup: [], strong: [], u: [], ul: [] } /** * A pattern that recognizes a commonly useful subset of URLs that are safe. * * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts */ const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i /** * A pattern that matches safe data URLs. Only matches image, video and audio types. * * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts */ const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i function allowedAttribute(attr, allowedAttributeList) { const attrName = attr.nodeName.toLowerCase() if (allowedAttributeList.indexOf(attrName) !== -1) { if (uriAttrs.indexOf(attrName) !== -1) { return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue)) } return true } const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp) // Check if a regular expression validates the attribute. for (let i = 0, len = regExp.length; i < len; i++) { if (regExp[i].test(attrName)) { return true } } return false } export function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { if (unsafeHtml.length === 0) { return unsafeHtml } if (sanitizeFn && typeof sanitizeFn === 'function') { return sanitizeFn(unsafeHtml) } const domParser = new window.DOMParser() const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html') const whitelistKeys = Object.keys(whiteList) const elements = [].slice.call(createdDocument.body.querySelectorAll('*')) for (let i = 0, len = elements.length; i < len; i++) { const el = elements[i] const elName = el.nodeName.toLowerCase() if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { el.parentNode.removeChild(el) continue } const attributeList = [].slice.call(el.attributes) // eslint-disable-next-line unicorn/prefer-spread const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []) attributeList.forEach(attr => { if (!allowedAttribute(attr, whitelistedAttributes)) { el.removeAttribute(attr.nodeName) } }) } return createdDocument.body.innerHTML } boost/amd/src/bootstrap/button.js 0000604 00000013142 15062070724 0013110 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): button.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' /** * Constants */ const NAME = 'button' const VERSION = '4.6.2' const DATA_KEY = 'bs.button' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] const CLASS_NAME_ACTIVE = 'active' const CLASS_NAME_BUTTON = 'btn' const CLASS_NAME_FOCUS = 'focus' const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` + `blur${EVENT_KEY}${DATA_API_KEY}` const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` const SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]' const SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]' const SELECTOR_DATA_TOGGLE = '[data-toggle="button"]' const SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn' const SELECTOR_INPUT = 'input:not([type="hidden"])' const SELECTOR_ACTIVE = '.active' const SELECTOR_BUTTON = '.btn' /** * Class definition */ class Button { constructor(element) { this._element = element this.shouldAvoidTriggerChange = false } // Getters static get VERSION() { return VERSION } // Public toggle() { let triggerChangeEvent = true let addAriaPressed = true const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0] if (rootElement) { const input = this._element.querySelector(SELECTOR_INPUT) if (input) { if (input.type === 'radio') { if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) { triggerChangeEvent = false } else { const activeElement = rootElement.querySelector(SELECTOR_ACTIVE) if (activeElement) { $(activeElement).removeClass(CLASS_NAME_ACTIVE) } } } if (triggerChangeEvent) { // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input if (input.type === 'checkbox' || input.type === 'radio') { input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE) } if (!this.shouldAvoidTriggerChange) { $(input).trigger('change') } } input.focus() addAriaPressed = false } } if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) { if (addAriaPressed) { this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE)) } if (triggerChangeEvent) { $(this._element).toggleClass(CLASS_NAME_ACTIVE) } } } dispose() { $.removeData(this._element, DATA_KEY) this._element = null } // Static static _jQueryInterface(config, avoidTriggerChange) { return this.each(function () { const $element = $(this) let data = $element.data(DATA_KEY) if (!data) { data = new Button(this) $element.data(DATA_KEY, data) } data.shouldAvoidTriggerChange = avoidTriggerChange if (config === 'toggle') { data[config]() } }) } } /** * Data API implementation */ $(document) .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => { let button = event.target const initialButton = button if (!$(button).hasClass(CLASS_NAME_BUTTON)) { button = $(button).closest(SELECTOR_BUTTON)[0] } if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) { event.preventDefault() // work around Firefox bug #1540995 } else { const inputBtn = button.querySelector(SELECTOR_INPUT) if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) { event.preventDefault() // work around Firefox bug #1540995 return } if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') { Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT') } } }) .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => { const button = $(event.target).closest(SELECTOR_BUTTON)[0] $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type)) }) $(window).on(EVENT_LOAD_DATA_API, () => { // ensure correct active class is set to match the controls' actual values/states // find all checkboxes/readio buttons inside data-toggle groups let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS)) for (let i = 0, len = buttons.length; i < len; i++) { const button = buttons[i] const input = button.querySelector(SELECTOR_INPUT) if (input.checked || input.hasAttribute('checked')) { button.classList.add(CLASS_NAME_ACTIVE) } else { button.classList.remove(CLASS_NAME_ACTIVE) } } // find all button toggles buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE)) for (let i = 0, len = buttons.length; i < len; i++) { const button = buttons[i] if (button.getAttribute('aria-pressed') === 'true') { button.classList.add(CLASS_NAME_ACTIVE) } else { button.classList.remove(CLASS_NAME_ACTIVE) } } }) /** * jQuery */ $.fn[NAME] = Button._jQueryInterface $.fn[NAME].Constructor = Button $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Button._jQueryInterface } export default Button boost/amd/src/bootstrap/dropdown.js 0000604 00000033352 15062070724 0013436 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): dropdown.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Popper from 'core/popper' import Util from './util' /** * Constants */ const NAME = 'dropdown' const VERSION = '4.6.2' const DATA_KEY = 'bs.dropdown' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse) const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`) const CLASS_NAME_DISABLED = 'disabled' const CLASS_NAME_SHOW = 'show' const CLASS_NAME_DROPUP = 'dropup' const CLASS_NAME_DROPRIGHT = 'dropright' const CLASS_NAME_DROPLEFT = 'dropleft' const CLASS_NAME_MENURIGHT = 'dropdown-menu-right' const CLASS_NAME_POSITION_STATIC = 'position-static' const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_CLICK = `click${EVENT_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}` const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}` const SELECTOR_DATA_TOGGLE = '[data-toggle="dropdown"]' const SELECTOR_FORM_CHILD = '.dropdown form' const SELECTOR_MENU = '.dropdown-menu' const SELECTOR_NAVBAR_NAV = '.navbar-nav' const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' const PLACEMENT_TOP = 'top-start' const PLACEMENT_TOPEND = 'top-end' const PLACEMENT_BOTTOM = 'bottom-start' const PLACEMENT_BOTTOMEND = 'bottom-end' const PLACEMENT_RIGHT = 'right-start' const PLACEMENT_LEFT = 'left-start' const Default = { offset: 0, flip: true, boundary: 'scrollParent', reference: 'toggle', display: 'dynamic', popperConfig: null } const DefaultType = { offset: '(number|string|function)', flip: 'boolean', boundary: '(string|element)', reference: '(string|element)', display: 'string', popperConfig: '(null|object)' } /** * Class definition */ class Dropdown { constructor(element, config) { this._element = element this._popper = null this._config = this._getConfig(config) this._menu = this._getMenuElement() this._inNavbar = this._detectNavbar() this._addEventListeners() } // Getters static get VERSION() { return VERSION } static get Default() { return Default } static get DefaultType() { return DefaultType } // Public toggle() { if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) { return } const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW) Dropdown._clearMenus() if (isActive) { return } this.show(true) } show(usePopper = false) { if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) { return } const relatedTarget = { relatedTarget: this._element } const showEvent = $.Event(EVENT_SHOW, relatedTarget) const parent = Dropdown._getParentFromElement(this._element) $(parent).trigger(showEvent) if (showEvent.isDefaultPrevented()) { return } // Totally disable Popper for Dropdowns in Navbar if (!this._inNavbar && usePopper) { // Check for Popper dependency if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)') } let referenceElement = this._element if (this._config.reference === 'parent') { referenceElement = parent } else if (Util.isElement(this._config.reference)) { referenceElement = this._config.reference // Check if it's jQuery element if (typeof this._config.reference.jquery !== 'undefined') { referenceElement = this._config.reference[0] } } // If boundary is not `scrollParent`, then set position to `static` // to allow the menu to "escape" the scroll parent's boundaries // https://github.com/twbs/bootstrap/issues/24251 if (this._config.boundary !== 'scrollParent') { $(parent).addClass(CLASS_NAME_POSITION_STATIC) } this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()) } // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html if ('ontouchstart' in document.documentElement && $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) { $(document.body).children().on('mouseover', null, $.noop) } this._element.focus() this._element.setAttribute('aria-expanded', true) $(this._menu).toggleClass(CLASS_NAME_SHOW) $(parent) .toggleClass(CLASS_NAME_SHOW) .trigger($.Event(EVENT_SHOWN, relatedTarget)) } hide() { if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) { return } const relatedTarget = { relatedTarget: this._element } const hideEvent = $.Event(EVENT_HIDE, relatedTarget) const parent = Dropdown._getParentFromElement(this._element) $(parent).trigger(hideEvent) if (hideEvent.isDefaultPrevented()) { return } if (this._popper) { this._popper.destroy() } $(this._menu).toggleClass(CLASS_NAME_SHOW) $(parent) .toggleClass(CLASS_NAME_SHOW) .trigger($.Event(EVENT_HIDDEN, relatedTarget)) } dispose() { $.removeData(this._element, DATA_KEY) $(this._element).off(EVENT_KEY) this._element = null this._menu = null if (this._popper !== null) { this._popper.destroy() this._popper = null } } update() { this._inNavbar = this._detectNavbar() if (this._popper !== null) { this._popper.scheduleUpdate() } } // Private _addEventListeners() { $(this._element).on(EVENT_CLICK, event => { event.preventDefault() event.stopPropagation() this.toggle() }) } _getConfig(config) { config = { ...this.constructor.Default, ...$(this._element).data(), ...config } Util.typeCheckConfig( NAME, config, this.constructor.DefaultType ) return config } _getMenuElement() { if (!this._menu) { const parent = Dropdown._getParentFromElement(this._element) if (parent) { this._menu = parent.querySelector(SELECTOR_MENU) } } return this._menu } _getPlacement() { const $parentDropdown = $(this._element.parentNode) let placement = PLACEMENT_BOTTOM // Handle dropup if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) { placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) { placement = PLACEMENT_RIGHT } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) { placement = PLACEMENT_LEFT } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) { placement = PLACEMENT_BOTTOMEND } return placement } _detectNavbar() { return $(this._element).closest('.navbar').length > 0 } _getOffset() { const offset = {} if (typeof this._config.offset === 'function') { offset.fn = data => { data.offsets = { ...data.offsets, ...this._config.offset(data.offsets, this._element) } return data } } else { offset.offset = this._config.offset } return offset } _getPopperConfig() { const popperConfig = { placement: this._getPlacement(), modifiers: { offset: this._getOffset(), flip: { enabled: this._config.flip }, preventOverflow: { boundariesElement: this._config.boundary } } } // Disable Popper if we have a static display if (this._config.display === 'static') { popperConfig.modifiers.applyStyle = { enabled: false } } return { ...popperConfig, ...this._config.popperConfig } } // Static static _jQueryInterface(config) { return this.each(function () { let data = $(this).data(DATA_KEY) const _config = typeof config === 'object' ? config : null if (!data) { data = new Dropdown(this, _config) $(this).data(DATA_KEY, data) } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`) } data[config]() } }) } static _clearMenus(event) { if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { return } const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE)) for (let i = 0, len = toggles.length; i < len; i++) { const parent = Dropdown._getParentFromElement(toggles[i]) const context = $(toggles[i]).data(DATA_KEY) const relatedTarget = { relatedTarget: toggles[i] } if (event && event.type === 'click') { relatedTarget.clickEvent = event } if (!context) { continue } const dropdownMenu = context._menu if (!$(parent).hasClass(CLASS_NAME_SHOW)) { continue } if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { continue } const hideEvent = $.Event(EVENT_HIDE, relatedTarget) $(parent).trigger(hideEvent) if (hideEvent.isDefaultPrevented()) { continue } // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { $(document.body).children().off('mouseover', null, $.noop) } toggles[i].setAttribute('aria-expanded', 'false') if (context._popper) { context._popper.destroy() } $(dropdownMenu).removeClass(CLASS_NAME_SHOW) $(parent) .removeClass(CLASS_NAME_SHOW) .trigger($.Event(EVENT_HIDDEN, relatedTarget)) } } static _getParentFromElement(element) { let parent const selector = Util.getSelectorFromElement(element) if (selector) { parent = document.querySelector(selector) } return parent || element.parentNode } // eslint-disable-next-line complexity static _dataApiKeydownHandler(event) { // If not input/textarea: // - And not a key in REGEXP_KEYDOWN => not a dropdown command // If input/textarea: // - If space key => not a dropdown command // - If key is other than escape // - If key is not up or down => not a dropdown command // - If trigger inside the menu => not a dropdown command if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { return } if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) { return } const parent = Dropdown._getParentFromElement(this) const isActive = $(parent).hasClass(CLASS_NAME_SHOW) if (!isActive && event.which === ESCAPE_KEYCODE) { return } event.preventDefault() event.stopPropagation() if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { if (event.which === ESCAPE_KEYCODE) { $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus') } $(this).trigger('click') return } const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)) .filter(item => $(item).is(':visible')) if (items.length === 0) { return } let index = items.indexOf(event.target) if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up index-- } if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down index++ } if (index < 0) { index = 0 } items[index].focus() } } /** * Data API implementation */ $(document) .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler) .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler) .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus) .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { event.preventDefault() event.stopPropagation() Dropdown._jQueryInterface.call($(this), 'toggle') }) .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => { e.stopPropagation() }) /** * jQuery */ $.fn[NAME] = Dropdown._jQueryInterface $.fn[NAME].Constructor = Dropdown $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Dropdown._jQueryInterface } export default Dropdown boost/amd/src/bootstrap/scrollspy.js 0000604 00000017740 15062070724 0013637 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): scrollspy.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Util from './util' /** * Constants */ const NAME = 'scrollspy' const VERSION = '4.6.2' const DATA_KEY = 'bs.scrollspy' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item' const CLASS_NAME_ACTIVE = 'active' const EVENT_ACTIVATE = `activate${EVENT_KEY}` const EVENT_SCROLL = `scroll${EVENT_KEY}` const EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}` const METHOD_OFFSET = 'offset' const METHOD_POSITION = 'position' const SELECTOR_DATA_SPY = '[data-spy="scroll"]' const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group' const SELECTOR_NAV_LINKS = '.nav-link' const SELECTOR_NAV_ITEMS = '.nav-item' const SELECTOR_LIST_ITEMS = '.list-group-item' const SELECTOR_DROPDOWN = '.dropdown' const SELECTOR_DROPDOWN_ITEMS = '.dropdown-item' const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle' const Default = { offset: 10, method: 'auto', target: '' } const DefaultType = { offset: 'number', method: 'string', target: '(string|element)' } /** * Class definition */ class ScrollSpy { constructor(element, config) { this._element = element this._scrollElement = element.tagName === 'BODY' ? window : element this._config = this._getConfig(config) this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` + `${this._config.target} ${SELECTOR_LIST_ITEMS},` + `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}` this._offsets = [] this._targets = [] this._activeTarget = null this._scrollHeight = 0 $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event)) this.refresh() this._process() } // Getters static get VERSION() { return VERSION } static get Default() { return Default } // Public refresh() { const autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION const offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method const offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0 this._offsets = [] this._targets = [] this._scrollHeight = this._getScrollHeight() const targets = [].slice.call(document.querySelectorAll(this._selector)) targets .map(element => { let target const targetSelector = Util.getSelectorFromElement(element) if (targetSelector) { target = document.querySelector(targetSelector) } if (target) { const targetBCR = target.getBoundingClientRect() if (targetBCR.width || targetBCR.height) { // TODO (fat): remove sketch reliance on jQuery position/offset return [ $(target)[offsetMethod]().top + offsetBase, targetSelector ] } } return null }) .filter(Boolean) .sort((a, b) => a[0] - b[0]) .forEach(item => { this._offsets.push(item[0]) this._targets.push(item[1]) }) } dispose() { $.removeData(this._element, DATA_KEY) $(this._scrollElement).off(EVENT_KEY) this._element = null this._scrollElement = null this._config = null this._selector = null this._offsets = null this._targets = null this._activeTarget = null this._scrollHeight = null } // Private _getConfig(config) { config = { ...Default, ...(typeof config === 'object' && config ? config : {}) } if (typeof config.target !== 'string' && Util.isElement(config.target)) { let id = $(config.target).attr('id') if (!id) { id = Util.getUID(NAME) $(config.target).attr('id', id) } config.target = `#${id}` } Util.typeCheckConfig(NAME, config, DefaultType) return config } _getScrollTop() { return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop } _getScrollHeight() { return this._scrollElement.scrollHeight || Math.max( document.body.scrollHeight, document.documentElement.scrollHeight ) } _getOffsetHeight() { return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height } _process() { const scrollTop = this._getScrollTop() + this._config.offset const scrollHeight = this._getScrollHeight() const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight() if (this._scrollHeight !== scrollHeight) { this.refresh() } if (scrollTop >= maxScroll) { const target = this._targets[this._targets.length - 1] if (this._activeTarget !== target) { this._activate(target) } return } if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { this._activeTarget = null this._clear() return } for (let i = this._offsets.length; i--;) { const isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]) if (isActiveTarget) { this._activate(this._targets[i]) } } } _activate(target) { this._activeTarget = target this._clear() const queries = this._selector .split(',') .map(selector => `${selector}[data-target="${target}"],${selector}[href="${target}"]`) const $link = $([].slice.call(document.querySelectorAll(queries.join(',')))) if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) { $link.closest(SELECTOR_DROPDOWN) .find(SELECTOR_DROPDOWN_TOGGLE) .addClass(CLASS_NAME_ACTIVE) $link.addClass(CLASS_NAME_ACTIVE) } else { // Set triggered link as active $link.addClass(CLASS_NAME_ACTIVE) // Set triggered links parents as active // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor $link.parents(SELECTOR_NAV_LIST_GROUP) .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`) .addClass(CLASS_NAME_ACTIVE) // Handle special case when .nav-link is inside .nav-item $link.parents(SELECTOR_NAV_LIST_GROUP) .prev(SELECTOR_NAV_ITEMS) .children(SELECTOR_NAV_LINKS) .addClass(CLASS_NAME_ACTIVE) } $(this._scrollElement).trigger(EVENT_ACTIVATE, { relatedTarget: target }) } _clear() { [].slice.call(document.querySelectorAll(this._selector)) .filter(node => node.classList.contains(CLASS_NAME_ACTIVE)) .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE)) } // Static static _jQueryInterface(config) { return this.each(function () { let data = $(this).data(DATA_KEY) const _config = typeof config === 'object' && config if (!data) { data = new ScrollSpy(this, _config) $(this).data(DATA_KEY, data) } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`) } data[config]() } }) } } /** * Data API implementation */ $(window).on(EVENT_LOAD_DATA_API, () => { const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY)) const scrollSpysLength = scrollSpys.length for (let i = scrollSpysLength; i--;) { const $spy = $(scrollSpys[i]) ScrollSpy._jQueryInterface.call($spy, $spy.data()) } }) /** * jQuery */ $.fn[NAME] = ScrollSpy._jQueryInterface $.fn[NAME].Constructor = ScrollSpy $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return ScrollSpy._jQueryInterface } export default ScrollSpy boost/amd/src/bootstrap/tab.js 0000604 00000014033 15062070724 0012343 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): tab.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Util from './util' /** * Constants */ const NAME = 'tab' const VERSION = '4.6.2' const DATA_KEY = 'bs.tab' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] const CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu' const CLASS_NAME_ACTIVE = 'active' const CLASS_NAME_DISABLED = 'disabled' const CLASS_NAME_FADE = 'fade' const CLASS_NAME_SHOW = 'show' const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const SELECTOR_DROPDOWN = '.dropdown' const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group' const SELECTOR_ACTIVE = '.active' const SELECTOR_ACTIVE_UL = '> li > .active' const SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]' const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle' const SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active' /** * Class definition */ class Tab { constructor(element) { this._element = element } // Getters static get VERSION() { return VERSION } // Public show() { if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(CLASS_NAME_ACTIVE) || $(this._element).hasClass(CLASS_NAME_DISABLED) || this._element.hasAttribute('disabled')) { return } let target let previous const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0] const selector = Util.getSelectorFromElement(this._element) if (listElement) { const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE previous = $.makeArray($(listElement).find(itemSelector)) previous = previous[previous.length - 1] } const hideEvent = $.Event(EVENT_HIDE, { relatedTarget: this._element }) const showEvent = $.Event(EVENT_SHOW, { relatedTarget: previous }) if (previous) { $(previous).trigger(hideEvent) } $(this._element).trigger(showEvent) if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { return } if (selector) { target = document.querySelector(selector) } this._activate( this._element, listElement ) const complete = () => { const hiddenEvent = $.Event(EVENT_HIDDEN, { relatedTarget: this._element }) const shownEvent = $.Event(EVENT_SHOWN, { relatedTarget: previous }) $(previous).trigger(hiddenEvent) $(this._element).trigger(shownEvent) } if (target) { this._activate(target, target.parentNode, complete) } else { complete() } } dispose() { $.removeData(this._element, DATA_KEY) this._element = null } // Private _activate(element, container, callback) { const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(SELECTOR_ACTIVE_UL) : $(container).children(SELECTOR_ACTIVE) const active = activeElements[0] const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE)) const complete = () => this._transitionComplete( element, active, callback ) if (active && isTransitioning) { const transitionDuration = Util.getTransitionDurationFromElement(active) $(active) .removeClass(CLASS_NAME_SHOW) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(transitionDuration) } else { complete() } } _transitionComplete(element, active, callback) { if (active) { $(active).removeClass(CLASS_NAME_ACTIVE) const dropdownChild = $(active.parentNode).find( SELECTOR_DROPDOWN_ACTIVE_CHILD )[0] if (dropdownChild) { $(dropdownChild).removeClass(CLASS_NAME_ACTIVE) } if (active.getAttribute('role') === 'tab') { active.setAttribute('aria-selected', false) } } $(element).addClass(CLASS_NAME_ACTIVE) if (element.getAttribute('role') === 'tab') { element.setAttribute('aria-selected', true) } Util.reflow(element) if (element.classList.contains(CLASS_NAME_FADE)) { element.classList.add(CLASS_NAME_SHOW) } let parent = element.parentNode if (parent && parent.nodeName === 'LI') { parent = parent.parentNode } if (parent && $(parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) { const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0] if (dropdownElement) { const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE)) $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE) } element.setAttribute('aria-expanded', true) } if (callback) { callback() } } // Static static _jQueryInterface(config) { return this.each(function () { const $this = $(this) let data = $this.data(DATA_KEY) if (!data) { data = new Tab(this) $this.data(DATA_KEY, data) } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`) } data[config]() } }) } } /** * Data API implementation */ $(document) .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { event.preventDefault() Tab._jQueryInterface.call($(this), 'show') }) /** * jQuery */ $.fn[NAME] = Tab._jQueryInterface $.fn[NAME].Constructor = Tab $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Tab._jQueryInterface } export default Tab boost/amd/src/bootstrap/tooltip.js 0000604 00000043472 15062070724 0013300 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): tooltip.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import { DefaultWhitelist, sanitizeHtml } from './tools/sanitizer' import $ from 'jquery' import Popper from 'core/popper' import Util from './util' /** * Constants */ const NAME = 'tooltip' const VERSION = '4.6.2' const DATA_KEY = 'bs.tooltip' const EVENT_KEY = `.${DATA_KEY}` const JQUERY_NO_CONFLICT = $.fn[NAME] const CLASS_PREFIX = 'bs-tooltip' const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') const DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'] const CLASS_NAME_FADE = 'fade' const CLASS_NAME_SHOW = 'show' const HOVER_STATE_SHOW = 'show' const HOVER_STATE_OUT = 'out' const SELECTOR_TOOLTIP_INNER = '.tooltip-inner' const SELECTOR_ARROW = '.arrow' const TRIGGER_HOVER = 'hover' const TRIGGER_FOCUS = 'focus' const TRIGGER_CLICK = 'click' const TRIGGER_MANUAL = 'manual' const AttachmentMap = { AUTO: 'auto', TOP: 'top', RIGHT: 'right', BOTTOM: 'bottom', LEFT: 'left' } const Default = { animation: true, template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', trigger: 'hover focus', title: '', delay: 0, html: false, selector: false, placement: 'top', offset: 0, container: false, fallbackPlacement: 'flip', boundary: 'scrollParent', customClass: '', sanitize: true, sanitizeFn: null, whiteList: DefaultWhitelist, popperConfig: null } const DefaultType = { animation: 'boolean', template: 'string', title: '(string|element|function)', trigger: 'string', delay: '(number|object)', html: 'boolean', selector: '(string|boolean)', placement: '(string|function)', offset: '(number|string|function)', container: '(string|element|boolean)', fallbackPlacement: '(string|array)', boundary: '(string|element)', customClass: '(string|function)', sanitize: 'boolean', sanitizeFn: '(null|function)', whiteList: 'object', popperConfig: '(null|object)' } const Event = { HIDE: `hide${EVENT_KEY}`, HIDDEN: `hidden${EVENT_KEY}`, SHOW: `show${EVENT_KEY}`, SHOWN: `shown${EVENT_KEY}`, INSERTED: `inserted${EVENT_KEY}`, CLICK: `click${EVENT_KEY}`, FOCUSIN: `focusin${EVENT_KEY}`, FOCUSOUT: `focusout${EVENT_KEY}`, MOUSEENTER: `mouseenter${EVENT_KEY}`, MOUSELEAVE: `mouseleave${EVENT_KEY}` } /** * Class definition */ class Tooltip { constructor(element, config) { if (typeof Popper === 'undefined') { throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)') } // Private this._isEnabled = true this._timeout = 0 this._hoverState = '' this._activeTrigger = {} this._popper = null // Protected this.element = element this.config = this._getConfig(config) this.tip = null this._setListeners() } // Getters static get VERSION() { return VERSION } static get Default() { return Default } static get NAME() { return NAME } static get DATA_KEY() { return DATA_KEY } static get Event() { return Event } static get EVENT_KEY() { return EVENT_KEY } static get DefaultType() { return DefaultType } // Public enable() { this._isEnabled = true } disable() { this._isEnabled = false } toggleEnabled() { this._isEnabled = !this._isEnabled } toggle(event) { if (!this._isEnabled) { return } if (event) { const dataKey = this.constructor.DATA_KEY let context = $(event.currentTarget).data(dataKey) if (!context) { context = new this.constructor( event.currentTarget, this._getDelegateConfig() ) $(event.currentTarget).data(dataKey, context) } context._activeTrigger.click = !context._activeTrigger.click if (context._isWithActiveTrigger()) { context._enter(null, context) } else { context._leave(null, context) } } else { if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) { this._leave(null, this) return } this._enter(null, this) } } dispose() { clearTimeout(this._timeout) $.removeData(this.element, this.constructor.DATA_KEY) $(this.element).off(this.constructor.EVENT_KEY) $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler) if (this.tip) { $(this.tip).remove() } this._isEnabled = null this._timeout = null this._hoverState = null this._activeTrigger = null if (this._popper) { this._popper.destroy() } this._popper = null this.element = null this.config = null this.tip = null } show() { if ($(this.element).css('display') === 'none') { throw new Error('Please use show on visible elements') } const showEvent = $.Event(this.constructor.Event.SHOW) if (this.isWithContent() && this._isEnabled) { $(this.element).trigger(showEvent) const shadowRoot = Util.findShadowRoot(this.element) const isInTheDom = $.contains( shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element ) if (showEvent.isDefaultPrevented() || !isInTheDom) { return } const tip = this.getTipElement() const tipId = Util.getUID(this.constructor.NAME) tip.setAttribute('id', tipId) this.element.setAttribute('aria-describedby', tipId) this.setContent() if (this.config.animation) { $(tip).addClass(CLASS_NAME_FADE) } const placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement const attachment = this._getAttachment(placement) this.addAttachmentClass(attachment) const container = this._getContainer() $(tip).data(this.constructor.DATA_KEY, this) if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { $(tip).appendTo(container) } $(this.element).trigger(this.constructor.Event.INSERTED) this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment)) $(tip).addClass(CLASS_NAME_SHOW) $(tip).addClass(this.config.customClass) // If this is a touch-enabled device we add extra // empty mouseover listeners to the body's immediate children; // only needed because of broken event delegation on iOS // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html if ('ontouchstart' in document.documentElement) { $(document.body).children().on('mouseover', null, $.noop) } const complete = () => { if (this.config.animation) { this._fixTransition() } const prevHoverState = this._hoverState this._hoverState = null $(this.element).trigger(this.constructor.Event.SHOWN) if (prevHoverState === HOVER_STATE_OUT) { this._leave(null, this) } } if ($(this.tip).hasClass(CLASS_NAME_FADE)) { const transitionDuration = Util.getTransitionDurationFromElement(this.tip) $(this.tip) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(transitionDuration) } else { complete() } } } hide(callback) { const tip = this.getTipElement() const hideEvent = $.Event(this.constructor.Event.HIDE) const complete = () => { if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { tip.parentNode.removeChild(tip) } this._cleanTipClass() this.element.removeAttribute('aria-describedby') $(this.element).trigger(this.constructor.Event.HIDDEN) if (this._popper !== null) { this._popper.destroy() } if (callback) { callback() } } $(this.element).trigger(hideEvent) if (hideEvent.isDefaultPrevented()) { return } $(tip).removeClass(CLASS_NAME_SHOW) // If this is a touch-enabled device we remove the extra // empty mouseover listeners we added for iOS support if ('ontouchstart' in document.documentElement) { $(document.body).children().off('mouseover', null, $.noop) } this._activeTrigger[TRIGGER_CLICK] = false this._activeTrigger[TRIGGER_FOCUS] = false this._activeTrigger[TRIGGER_HOVER] = false if ($(this.tip).hasClass(CLASS_NAME_FADE)) { const transitionDuration = Util.getTransitionDurationFromElement(tip) $(tip) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(transitionDuration) } else { complete() } this._hoverState = '' } update() { if (this._popper !== null) { this._popper.scheduleUpdate() } } // Protected isWithContent() { return Boolean(this.getTitle()) } addAttachmentClass(attachment) { $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) } getTipElement() { this.tip = this.tip || $(this.config.template)[0] return this.tip } setContent() { const tip = this.getTipElement() this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle()) $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`) } setElementContent($element, content) { if (typeof content === 'object' && (content.nodeType || content.jquery)) { // Content is a DOM node or a jQuery if (this.config.html) { if (!$(content).parent().is($element)) { $element.empty().append(content) } } else { $element.text($(content).text()) } return } if (this.config.html) { if (this.config.sanitize) { content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn) } $element.html(content) } else { $element.text(content) } } getTitle() { let title = this.element.getAttribute('data-original-title') if (!title) { title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title } return title } // Private _getPopperConfig(attachment) { const defaultBsConfig = { placement: attachment, modifiers: { offset: this._getOffset(), flip: { behavior: this.config.fallbackPlacement }, arrow: { element: SELECTOR_ARROW }, preventOverflow: { boundariesElement: this.config.boundary } }, onCreate: data => { if (data.originalPlacement !== data.placement) { this._handlePopperPlacementChange(data) } }, onUpdate: data => this._handlePopperPlacementChange(data) } return { ...defaultBsConfig, ...this.config.popperConfig } } _getOffset() { const offset = {} if (typeof this.config.offset === 'function') { offset.fn = data => { data.offsets = { ...data.offsets, ...this.config.offset(data.offsets, this.element) } return data } } else { offset.offset = this.config.offset } return offset } _getContainer() { if (this.config.container === false) { return document.body } if (Util.isElement(this.config.container)) { return $(this.config.container) } return $(document).find(this.config.container) } _getAttachment(placement) { return AttachmentMap[placement.toUpperCase()] } _setListeners() { const triggers = this.config.trigger.split(' ') triggers.forEach(trigger => { if (trigger === 'click') { $(this.element).on( this.constructor.Event.CLICK, this.config.selector, event => this.toggle(event) ) } else if (trigger !== TRIGGER_MANUAL) { const eventIn = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSEENTER : this.constructor.Event.FOCUSIN const eventOut = trigger === TRIGGER_HOVER ? this.constructor.Event.MOUSELEAVE : this.constructor.Event.FOCUSOUT $(this.element) .on(eventIn, this.config.selector, event => this._enter(event)) .on(eventOut, this.config.selector, event => this._leave(event)) } }) this._hideModalHandler = () => { if (this.element) { this.hide() } } $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler) if (this.config.selector) { this.config = { ...this.config, trigger: 'manual', selector: '' } } else { this._fixTitle() } } _fixTitle() { const titleType = typeof this.element.getAttribute('data-original-title') if (this.element.getAttribute('title') || titleType !== 'string') { this.element.setAttribute( 'data-original-title', this.element.getAttribute('title') || '' ) this.element.setAttribute('title', '') } } _enter(event, context) { const dataKey = this.constructor.DATA_KEY context = context || $(event.currentTarget).data(dataKey) if (!context) { context = new this.constructor( event.currentTarget, this._getDelegateConfig() ) $(event.currentTarget).data(dataKey, context) } if (event) { context._activeTrigger[ event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER ] = true } if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) { context._hoverState = HOVER_STATE_SHOW return } clearTimeout(context._timeout) context._hoverState = HOVER_STATE_SHOW if (!context.config.delay || !context.config.delay.show) { context.show() return } context._timeout = setTimeout(() => { if (context._hoverState === HOVER_STATE_SHOW) { context.show() } }, context.config.delay.show) } _leave(event, context) { const dataKey = this.constructor.DATA_KEY context = context || $(event.currentTarget).data(dataKey) if (!context) { context = new this.constructor( event.currentTarget, this._getDelegateConfig() ) $(event.currentTarget).data(dataKey, context) } if (event) { context._activeTrigger[ event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER ] = false } if (context._isWithActiveTrigger()) { return } clearTimeout(context._timeout) context._hoverState = HOVER_STATE_OUT if (!context.config.delay || !context.config.delay.hide) { context.hide() return } context._timeout = setTimeout(() => { if (context._hoverState === HOVER_STATE_OUT) { context.hide() } }, context.config.delay.hide) } _isWithActiveTrigger() { for (const trigger in this._activeTrigger) { if (this._activeTrigger[trigger]) { return true } } return false } _getConfig(config) { const dataAttributes = $(this.element).data() Object.keys(dataAttributes) .forEach(dataAttr => { if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { delete dataAttributes[dataAttr] } }) config = { ...this.constructor.Default, ...dataAttributes, ...(typeof config === 'object' && config ? config : {}) } if (typeof config.delay === 'number') { config.delay = { show: config.delay, hide: config.delay } } if (typeof config.title === 'number') { config.title = config.title.toString() } if (typeof config.content === 'number') { config.content = config.content.toString() } Util.typeCheckConfig( NAME, config, this.constructor.DefaultType ) if (config.sanitize) { config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn) } return config } _getDelegateConfig() { const config = {} if (this.config) { for (const key in this.config) { if (this.constructor.Default[key] !== this.config[key]) { config[key] = this.config[key] } } } return config } _cleanTipClass() { const $tip = $(this.getTipElement()) const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) if (tabClass !== null && tabClass.length) { $tip.removeClass(tabClass.join('')) } } _handlePopperPlacementChange(popperData) { this.tip = popperData.instance.popper this._cleanTipClass() this.addAttachmentClass(this._getAttachment(popperData.placement)) } _fixTransition() { const tip = this.getTipElement() const initConfigAnimation = this.config.animation if (tip.getAttribute('x-placement') !== null) { return } $(tip).removeClass(CLASS_NAME_FADE) this.config.animation = false this.hide() this.show() this.config.animation = initConfigAnimation } // Static static _jQueryInterface(config) { return this.each(function () { const $element = $(this) let data = $element.data(DATA_KEY) const _config = typeof config === 'object' && config if (!data && /dispose|hide/.test(config)) { return } if (!data) { data = new Tooltip(this, _config) $element.data(DATA_KEY, data) } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`) } data[config]() } }) } } /** * jQuery */ $.fn[NAME] = Tooltip._jQueryInterface $.fn[NAME].Constructor = Tooltip $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Tooltip._jQueryInterface } export default Tooltip boost/amd/src/bootstrap/popover.js 0000604 00000007347 15062070724 0013301 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): popover.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Tooltip from './tooltip' /** * Constants */ const NAME = 'popover' const VERSION = '4.6.2' const DATA_KEY = 'bs.popover' const EVENT_KEY = `.${DATA_KEY}` const JQUERY_NO_CONFLICT = $.fn[NAME] const CLASS_PREFIX = 'bs-popover' const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') const CLASS_NAME_FADE = 'fade' const CLASS_NAME_SHOW = 'show' const SELECTOR_TITLE = '.popover-header' const SELECTOR_CONTENT = '.popover-body' const Default = { ...Tooltip.Default, placement: 'right', trigger: 'click', content: '', template: '<div class="popover" role="tooltip">' + '<div class="arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div></div>' } const DefaultType = { ...Tooltip.DefaultType, content: '(string|element|function)' } const Event = { HIDE: `hide${EVENT_KEY}`, HIDDEN: `hidden${EVENT_KEY}`, SHOW: `show${EVENT_KEY}`, SHOWN: `shown${EVENT_KEY}`, INSERTED: `inserted${EVENT_KEY}`, CLICK: `click${EVENT_KEY}`, FOCUSIN: `focusin${EVENT_KEY}`, FOCUSOUT: `focusout${EVENT_KEY}`, MOUSEENTER: `mouseenter${EVENT_KEY}`, MOUSELEAVE: `mouseleave${EVENT_KEY}` } /** * Class definition */ class Popover extends Tooltip { // Getters static get VERSION() { return VERSION } static get Default() { return Default } static get NAME() { return NAME } static get DATA_KEY() { return DATA_KEY } static get Event() { return Event } static get EVENT_KEY() { return EVENT_KEY } static get DefaultType() { return DefaultType } // Overrides isWithContent() { return this.getTitle() || this._getContent() } addAttachmentClass(attachment) { $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) } getTipElement() { this.tip = this.tip || $(this.config.template)[0] return this.tip } setContent() { const $tip = $(this.getTipElement()) // We use append for html objects to maintain js events this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle()) let content = this._getContent() if (typeof content === 'function') { content = content.call(this.element) } this.setElementContent($tip.find(SELECTOR_CONTENT), content) $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`) } // Private _getContent() { return this.element.getAttribute('data-content') || this.config.content } _cleanTipClass() { const $tip = $(this.getTipElement()) const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) if (tabClass !== null && tabClass.length > 0) { $tip.removeClass(tabClass.join('')) } } // Static static _jQueryInterface(config) { return this.each(function () { let data = $(this).data(DATA_KEY) const _config = typeof config === 'object' ? config : null if (!data && /dispose|hide/.test(config)) { return } if (!data) { data = new Popover(this, _config) $(this).data(DATA_KEY, data) } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`) } data[config]() } }) } } /** * jQuery */ $.fn[NAME] = Popover._jQueryInterface $.fn[NAME].Constructor = Popover $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Popover._jQueryInterface } export default Popover boost/amd/src/bootstrap/collapse.js 0000604 00000022771 15062070724 0013407 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): collapse.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Util from './util' /** * Constants */ const NAME = 'collapse' const VERSION = '4.6.2' const DATA_KEY = 'bs.collapse' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] const CLASS_NAME_SHOW = 'show' const CLASS_NAME_COLLAPSE = 'collapse' const CLASS_NAME_COLLAPSING = 'collapsing' const CLASS_NAME_COLLAPSED = 'collapsed' const DIMENSION_WIDTH = 'width' const DIMENSION_HEIGHT = 'height' const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const SELECTOR_ACTIVES = '.show, .collapsing' const SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]' const Default = { toggle: true, parent: '' } const DefaultType = { toggle: 'boolean', parent: '(string|element)' } /** * Class definition */ class Collapse { constructor(element, config) { this._isTransitioning = false this._element = element this._config = this._getConfig(config) this._triggerArray = [].slice.call(document.querySelectorAll( `[data-toggle="collapse"][href="#${element.id}"],` + `[data-toggle="collapse"][data-target="#${element.id}"]` )) const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE)) for (let i = 0, len = toggleList.length; i < len; i++) { const elem = toggleList[i] const selector = Util.getSelectorFromElement(elem) const filterElement = [].slice.call(document.querySelectorAll(selector)) .filter(foundElem => foundElem === element) if (selector !== null && filterElement.length > 0) { this._selector = selector this._triggerArray.push(elem) } } this._parent = this._config.parent ? this._getParent() : null if (!this._config.parent) { this._addAriaAndCollapsedClass(this._element, this._triggerArray) } if (this._config.toggle) { this.toggle() } } // Getters static get VERSION() { return VERSION } static get Default() { return Default } // Public toggle() { if ($(this._element).hasClass(CLASS_NAME_SHOW)) { this.hide() } else { this.show() } } show() { if (this._isTransitioning || $(this._element).hasClass(CLASS_NAME_SHOW)) { return } let actives let activesData if (this._parent) { actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)) .filter(elem => { if (typeof this._config.parent === 'string') { return elem.getAttribute('data-parent') === this._config.parent } return elem.classList.contains(CLASS_NAME_COLLAPSE) }) if (actives.length === 0) { actives = null } } if (actives) { activesData = $(actives).not(this._selector).data(DATA_KEY) if (activesData && activesData._isTransitioning) { return } } const startEvent = $.Event(EVENT_SHOW) $(this._element).trigger(startEvent) if (startEvent.isDefaultPrevented()) { return } if (actives) { Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide') if (!activesData) { $(actives).data(DATA_KEY, null) } } const dimension = this._getDimension() $(this._element) .removeClass(CLASS_NAME_COLLAPSE) .addClass(CLASS_NAME_COLLAPSING) this._element.style[dimension] = 0 if (this._triggerArray.length) { $(this._triggerArray) .removeClass(CLASS_NAME_COLLAPSED) .attr('aria-expanded', true) } this.setTransitioning(true) const complete = () => { $(this._element) .removeClass(CLASS_NAME_COLLAPSING) .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`) this._element.style[dimension] = '' this.setTransitioning(false) $(this._element).trigger(EVENT_SHOWN) } const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1) const scrollSize = `scroll${capitalizedDimension}` const transitionDuration = Util.getTransitionDurationFromElement(this._element) $(this._element) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(transitionDuration) this._element.style[dimension] = `${this._element[scrollSize]}px` } hide() { if (this._isTransitioning || !$(this._element).hasClass(CLASS_NAME_SHOW)) { return } const startEvent = $.Event(EVENT_HIDE) $(this._element).trigger(startEvent) if (startEvent.isDefaultPrevented()) { return } const dimension = this._getDimension() this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px` Util.reflow(this._element) $(this._element) .addClass(CLASS_NAME_COLLAPSING) .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`) const triggerArrayLength = this._triggerArray.length if (triggerArrayLength > 0) { for (let i = 0; i < triggerArrayLength; i++) { const trigger = this._triggerArray[i] const selector = Util.getSelectorFromElement(trigger) if (selector !== null) { const $elem = $([].slice.call(document.querySelectorAll(selector))) if (!$elem.hasClass(CLASS_NAME_SHOW)) { $(trigger).addClass(CLASS_NAME_COLLAPSED) .attr('aria-expanded', false) } } } } this.setTransitioning(true) const complete = () => { this.setTransitioning(false) $(this._element) .removeClass(CLASS_NAME_COLLAPSING) .addClass(CLASS_NAME_COLLAPSE) .trigger(EVENT_HIDDEN) } this._element.style[dimension] = '' const transitionDuration = Util.getTransitionDurationFromElement(this._element) $(this._element) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(transitionDuration) } setTransitioning(isTransitioning) { this._isTransitioning = isTransitioning } dispose() { $.removeData(this._element, DATA_KEY) this._config = null this._parent = null this._element = null this._triggerArray = null this._isTransitioning = null } // Private _getConfig(config) { config = { ...Default, ...config } config.toggle = Boolean(config.toggle) // Coerce string values Util.typeCheckConfig(NAME, config, DefaultType) return config } _getDimension() { const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH) return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT } _getParent() { let parent if (Util.isElement(this._config.parent)) { parent = this._config.parent // It's a jQuery object if (typeof this._config.parent.jquery !== 'undefined') { parent = this._config.parent[0] } } else { parent = document.querySelector(this._config.parent) } const selector = `[data-toggle="collapse"][data-parent="${this._config.parent}"]` const children = [].slice.call(parent.querySelectorAll(selector)) $(children).each((i, element) => { this._addAriaAndCollapsedClass( Collapse._getTargetFromElement(element), [element] ) }) return parent } _addAriaAndCollapsedClass(element, triggerArray) { const isOpen = $(element).hasClass(CLASS_NAME_SHOW) if (triggerArray.length) { $(triggerArray) .toggleClass(CLASS_NAME_COLLAPSED, !isOpen) .attr('aria-expanded', isOpen) } } // Static static _getTargetFromElement(element) { const selector = Util.getSelectorFromElement(element) return selector ? document.querySelector(selector) : null } static _jQueryInterface(config) { return this.each(function () { const $element = $(this) let data = $element.data(DATA_KEY) const _config = { ...Default, ...$element.data(), ...(typeof config === 'object' && config ? config : {}) } if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { _config.toggle = false } if (!data) { data = new Collapse(this, _config) $element.data(DATA_KEY, data) } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`) } data[config]() } }) } } /** * Data API implementation */ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { // preventDefault only for <a> elements (which change the URL) not inside the collapsible element if (event.currentTarget.tagName === 'A') { event.preventDefault() } const $trigger = $(this) const selector = Util.getSelectorFromElement(this) const selectors = [].slice.call(document.querySelectorAll(selector)) $(selectors).each(function () { const $target = $(this) const data = $target.data(DATA_KEY) const config = data ? 'toggle' : $trigger.data() Collapse._jQueryInterface.call($target, config) }) }) /** * jQuery */ $.fn[NAME] = Collapse._jQueryInterface $.fn[NAME].Constructor = Collapse $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Collapse._jQueryInterface } export default Collapse boost/amd/src/bootstrap/modal.js 0000604 00000041046 15062070724 0012675 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): modal.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Util from './util' /** * Constants */ const NAME = 'modal' const VERSION = '4.6.2' const DATA_KEY = 'bs.modal' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key const CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable' const CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure' const CLASS_NAME_BACKDROP = 'modal-backdrop' const CLASS_NAME_OPEN = 'modal-open' const CLASS_NAME_FADE = 'fade' const CLASS_NAME_SHOW = 'show' const CLASS_NAME_STATIC = 'modal-static' const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}` const EVENT_FOCUSIN = `focusin${EVENT_KEY}` const EVENT_RESIZE = `resize${EVENT_KEY}` const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}` const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}` const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}` const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const SELECTOR_DIALOG = '.modal-dialog' const SELECTOR_MODAL_BODY = '.modal-body' const SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]' const SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]' const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top' const SELECTOR_STICKY_CONTENT = '.sticky-top' const Default = { backdrop: true, keyboard: true, focus: true, show: true } const DefaultType = { backdrop: '(boolean|string)', keyboard: 'boolean', focus: 'boolean', show: 'boolean' } /** * Class definition */ class Modal { constructor(element, config) { this._config = this._getConfig(config) this._element = element this._dialog = element.querySelector(SELECTOR_DIALOG) this._backdrop = null this._isShown = false this._isBodyOverflowing = false this._ignoreBackdropClick = false this._isTransitioning = false this._scrollbarWidth = 0 } // Getters static get VERSION() { return VERSION } static get Default() { return Default } // Public toggle(relatedTarget) { return this._isShown ? this.hide() : this.show(relatedTarget) } show(relatedTarget) { if (this._isShown || this._isTransitioning) { return } const showEvent = $.Event(EVENT_SHOW, { relatedTarget }) $(this._element).trigger(showEvent) if (showEvent.isDefaultPrevented()) { return } this._isShown = true if ($(this._element).hasClass(CLASS_NAME_FADE)) { this._isTransitioning = true } this._checkScrollbar() this._setScrollbar() this._adjustDialog() this._setEscapeEvent() this._setResizeEvent() $(this._element).on( EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, event => this.hide(event) ) $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => { $(this._element).one(EVENT_MOUSEUP_DISMISS, event => { if ($(event.target).is(this._element)) { this._ignoreBackdropClick = true } }) }) this._showBackdrop(() => this._showElement(relatedTarget)) } hide(event) { if (event) { event.preventDefault() } if (!this._isShown || this._isTransitioning) { return } const hideEvent = $.Event(EVENT_HIDE) $(this._element).trigger(hideEvent) if (!this._isShown || hideEvent.isDefaultPrevented()) { return } this._isShown = false const transition = $(this._element).hasClass(CLASS_NAME_FADE) if (transition) { this._isTransitioning = true } this._setEscapeEvent() this._setResizeEvent() $(document).off(EVENT_FOCUSIN) $(this._element).removeClass(CLASS_NAME_SHOW) $(this._element).off(EVENT_CLICK_DISMISS) $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS) if (transition) { const transitionDuration = Util.getTransitionDurationFromElement(this._element) $(this._element) .one(Util.TRANSITION_END, event => this._hideModal(event)) .emulateTransitionEnd(transitionDuration) } else { this._hideModal() } } dispose() { [window, this._element, this._dialog] .forEach(htmlElement => $(htmlElement).off(EVENT_KEY)) /** * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` * Do not move `document` in `htmlElements` array * It will remove `EVENT_CLICK_DATA_API` event that should remain */ $(document).off(EVENT_FOCUSIN) $.removeData(this._element, DATA_KEY) this._config = null this._element = null this._dialog = null this._backdrop = null this._isShown = null this._isBodyOverflowing = null this._ignoreBackdropClick = null this._isTransitioning = null this._scrollbarWidth = null } handleUpdate() { this._adjustDialog() } // Private _getConfig(config) { config = { ...Default, ...config } Util.typeCheckConfig(NAME, config, DefaultType) return config } _triggerBackdropTransition() { const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED) $(this._element).trigger(hideEventPrevented) if (hideEventPrevented.isDefaultPrevented()) { return } const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight if (!isModalOverflowing) { this._element.style.overflowY = 'hidden' } this._element.classList.add(CLASS_NAME_STATIC) const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog) $(this._element).off(Util.TRANSITION_END) $(this._element).one(Util.TRANSITION_END, () => { this._element.classList.remove(CLASS_NAME_STATIC) if (!isModalOverflowing) { $(this._element).one(Util.TRANSITION_END, () => { this._element.style.overflowY = '' }) .emulateTransitionEnd(this._element, modalTransitionDuration) } }) .emulateTransitionEnd(modalTransitionDuration) this._element.focus() } _showElement(relatedTarget) { const transition = $(this._element).hasClass(CLASS_NAME_FADE) const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { // Don't move modal's DOM position document.body.appendChild(this._element) } this._element.style.display = 'block' this._element.removeAttribute('aria-hidden') this._element.setAttribute('aria-modal', true) this._element.setAttribute('role', 'dialog') if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { modalBody.scrollTop = 0 } else { this._element.scrollTop = 0 } if (transition) { Util.reflow(this._element) } $(this._element).addClass(CLASS_NAME_SHOW) if (this._config.focus) { this._enforceFocus() } const shownEvent = $.Event(EVENT_SHOWN, { relatedTarget }) const transitionComplete = () => { if (this._config.focus) { this._element.focus() } this._isTransitioning = false $(this._element).trigger(shownEvent) } if (transition) { const transitionDuration = Util.getTransitionDurationFromElement(this._dialog) $(this._dialog) .one(Util.TRANSITION_END, transitionComplete) .emulateTransitionEnd(transitionDuration) } else { transitionComplete() } } _enforceFocus() { $(document) .off(EVENT_FOCUSIN) // Guard against infinite focus loop .on(EVENT_FOCUSIN, event => { if (document !== event.target && this._element !== event.target && $(this._element).has(event.target).length === 0) { this._element.focus() } }) } _setEscapeEvent() { if (this._isShown) { $(this._element).on(EVENT_KEYDOWN_DISMISS, event => { if (this._config.keyboard && event.which === ESCAPE_KEYCODE) { event.preventDefault() this.hide() } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) { this._triggerBackdropTransition() } }) } else if (!this._isShown) { $(this._element).off(EVENT_KEYDOWN_DISMISS) } } _setResizeEvent() { if (this._isShown) { $(window).on(EVENT_RESIZE, event => this.handleUpdate(event)) } else { $(window).off(EVENT_RESIZE) } } _hideModal() { this._element.style.display = 'none' this._element.setAttribute('aria-hidden', true) this._element.removeAttribute('aria-modal') this._element.removeAttribute('role') this._isTransitioning = false this._showBackdrop(() => { $(document.body).removeClass(CLASS_NAME_OPEN) this._resetAdjustments() this._resetScrollbar() $(this._element).trigger(EVENT_HIDDEN) }) } _removeBackdrop() { if (this._backdrop) { $(this._backdrop).remove() this._backdrop = null } } _showBackdrop(callback) { const animate = $(this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '' if (this._isShown && this._config.backdrop) { this._backdrop = document.createElement('div') this._backdrop.className = CLASS_NAME_BACKDROP if (animate) { this._backdrop.classList.add(animate) } $(this._backdrop).appendTo(document.body) $(this._element).on(EVENT_CLICK_DISMISS, event => { if (this._ignoreBackdropClick) { this._ignoreBackdropClick = false return } if (event.target !== event.currentTarget) { return } if (this._config.backdrop === 'static') { this._triggerBackdropTransition() } else { this.hide() } }) if (animate) { Util.reflow(this._backdrop) } $(this._backdrop).addClass(CLASS_NAME_SHOW) if (!callback) { return } if (!animate) { callback() return } const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop) $(this._backdrop) .one(Util.TRANSITION_END, callback) .emulateTransitionEnd(backdropTransitionDuration) } else if (!this._isShown && this._backdrop) { $(this._backdrop).removeClass(CLASS_NAME_SHOW) const callbackRemove = () => { this._removeBackdrop() if (callback) { callback() } } if ($(this._element).hasClass(CLASS_NAME_FADE)) { const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop) $(this._backdrop) .one(Util.TRANSITION_END, callbackRemove) .emulateTransitionEnd(backdropTransitionDuration) } else { callbackRemove() } } else if (callback) { callback() } } // ---------------------------------------------------------------------- // the following methods are used to handle overflowing modals // todo (fat): these should probably be refactored out of modal.js // ---------------------------------------------------------------------- _adjustDialog() { const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight if (!this._isBodyOverflowing && isModalOverflowing) { this._element.style.paddingLeft = `${this._scrollbarWidth}px` } if (this._isBodyOverflowing && !isModalOverflowing) { this._element.style.paddingRight = `${this._scrollbarWidth}px` } } _resetAdjustments() { this._element.style.paddingLeft = '' this._element.style.paddingRight = '' } _checkScrollbar() { const rect = document.body.getBoundingClientRect() this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth this._scrollbarWidth = this._getScrollbarWidth() } _setScrollbar() { if (this._isBodyOverflowing) { // Note: DOMNode.style.paddingRight returns the actual value or '' if not set // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)) const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)) // Adjust fixed content padding $(fixedContent).each((index, element) => { const actualPadding = element.style.paddingRight const calculatedPadding = $(element).css('padding-right') $(element) .data('padding-right', actualPadding) .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`) }) // Adjust sticky content margin $(stickyContent).each((index, element) => { const actualMargin = element.style.marginRight const calculatedMargin = $(element).css('margin-right') $(element) .data('margin-right', actualMargin) .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`) }) // Adjust body padding const actualPadding = document.body.style.paddingRight const calculatedPadding = $(document.body).css('padding-right') $(document.body) .data('padding-right', actualPadding) .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`) } $(document.body).addClass(CLASS_NAME_OPEN) } _resetScrollbar() { // Restore fixed content padding const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)) $(fixedContent).each((index, element) => { const padding = $(element).data('padding-right') $(element).removeData('padding-right') element.style.paddingRight = padding ? padding : '' }) // Restore sticky content const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`)) $(elements).each((index, element) => { const margin = $(element).data('margin-right') if (typeof margin !== 'undefined') { $(element).css('margin-right', margin).removeData('margin-right') } }) // Restore body padding const padding = $(document.body).data('padding-right') $(document.body).removeData('padding-right') document.body.style.paddingRight = padding ? padding : '' } _getScrollbarWidth() { // thx d.walsh const scrollDiv = document.createElement('div') scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER document.body.appendChild(scrollDiv) const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth document.body.removeChild(scrollDiv) return scrollbarWidth } // Static static _jQueryInterface(config, relatedTarget) { return this.each(function () { let data = $(this).data(DATA_KEY) const _config = { ...Default, ...$(this).data(), ...(typeof config === 'object' && config ? config : {}) } if (!data) { data = new Modal(this, _config) $(this).data(DATA_KEY, data) } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`) } data[config](relatedTarget) } else if (_config.show) { data.show(relatedTarget) } }) } } /** * Data API implementation */ $(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { let target const selector = Util.getSelectorFromElement(this) if (selector) { target = document.querySelector(selector) } const config = $(target).data(DATA_KEY) ? 'toggle' : { ...$(target).data(), ...$(this).data() } if (this.tagName === 'A' || this.tagName === 'AREA') { event.preventDefault() } const $target = $(target).one(EVENT_SHOW, showEvent => { if (showEvent.isDefaultPrevented()) { // Only register focus restorer if modal will actually get shown return } $target.one(EVENT_HIDDEN, () => { if ($(this).is(':visible')) { this.focus() } }) }) Modal._jQueryInterface.call($(target), config, this) }) /** * jQuery */ $.fn[NAME] = Modal._jQueryInterface $.fn[NAME].Constructor = Modal $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Modal._jQueryInterface } export default Modal boost/amd/src/bootstrap/alert.js 0000604 00000006165 15062070724 0012713 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): alert.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Util from './util' /** * Constants */ const NAME = 'alert' const VERSION = '4.6.2' const DATA_KEY = 'bs.alert' const EVENT_KEY = `.${DATA_KEY}` const DATA_API_KEY = '.data-api' const JQUERY_NO_CONFLICT = $.fn[NAME] const CLASS_NAME_ALERT = 'alert' const CLASS_NAME_FADE = 'fade' const CLASS_NAME_SHOW = 'show' const EVENT_CLOSE = `close${EVENT_KEY}` const EVENT_CLOSED = `closed${EVENT_KEY}` const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` const SELECTOR_DISMISS = '[data-dismiss="alert"]' /** * Class definition */ class Alert { constructor(element) { this._element = element } // Getters static get VERSION() { return VERSION } // Public close(element) { let rootElement = this._element if (element) { rootElement = this._getRootElement(element) } const customEvent = this._triggerCloseEvent(rootElement) if (customEvent.isDefaultPrevented()) { return } this._removeElement(rootElement) } dispose() { $.removeData(this._element, DATA_KEY) this._element = null } // Private _getRootElement(element) { const selector = Util.getSelectorFromElement(element) let parent = false if (selector) { parent = document.querySelector(selector) } if (!parent) { parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0] } return parent } _triggerCloseEvent(element) { const closeEvent = $.Event(EVENT_CLOSE) $(element).trigger(closeEvent) return closeEvent } _removeElement(element) { $(element).removeClass(CLASS_NAME_SHOW) if (!$(element).hasClass(CLASS_NAME_FADE)) { this._destroyElement(element) return } const transitionDuration = Util.getTransitionDurationFromElement(element) $(element) .one(Util.TRANSITION_END, event => this._destroyElement(element, event)) .emulateTransitionEnd(transitionDuration) } _destroyElement(element) { $(element) .detach() .trigger(EVENT_CLOSED) .remove() } // Static static _jQueryInterface(config) { return this.each(function () { const $element = $(this) let data = $element.data(DATA_KEY) if (!data) { data = new Alert(this) $element.data(DATA_KEY, data) } if (config === 'close') { data[config](this) } }) } static _handleDismiss(alertInstance) { return function (event) { if (event) { event.preventDefault() } alertInstance.close(this) } } } /** * Data API implementation */ $(document).on( EVENT_CLICK_DATA_API, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()) ) /** * jQuery */ $.fn[NAME] = Alert._jQueryInterface $.fn[NAME].Constructor = Alert $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Alert._jQueryInterface } export default Alert boost/amd/src/bootstrap/toast.js 0000604 00000011156 15062070724 0012732 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): toast.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' import Util from './util' /** * Constants */ const NAME = 'toast' const VERSION = '4.6.2' const DATA_KEY = 'bs.toast' const EVENT_KEY = `.${DATA_KEY}` const JQUERY_NO_CONFLICT = $.fn[NAME] const CLASS_NAME_FADE = 'fade' const CLASS_NAME_HIDE = 'hide' const CLASS_NAME_SHOW = 'show' const CLASS_NAME_SHOWING = 'showing' const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}` const EVENT_HIDE = `hide${EVENT_KEY}` const EVENT_HIDDEN = `hidden${EVENT_KEY}` const EVENT_SHOW = `show${EVENT_KEY}` const EVENT_SHOWN = `shown${EVENT_KEY}` const SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]' const Default = { animation: true, autohide: true, delay: 500 } const DefaultType = { animation: 'boolean', autohide: 'boolean', delay: 'number' } /** * Class definition */ class Toast { constructor(element, config) { this._element = element this._config = this._getConfig(config) this._timeout = null this._setListeners() } // Getters static get VERSION() { return VERSION } static get DefaultType() { return DefaultType } static get Default() { return Default } // Public show() { const showEvent = $.Event(EVENT_SHOW) $(this._element).trigger(showEvent) if (showEvent.isDefaultPrevented()) { return } this._clearTimeout() if (this._config.animation) { this._element.classList.add(CLASS_NAME_FADE) } const complete = () => { this._element.classList.remove(CLASS_NAME_SHOWING) this._element.classList.add(CLASS_NAME_SHOW) $(this._element).trigger(EVENT_SHOWN) if (this._config.autohide) { this._timeout = setTimeout(() => { this.hide() }, this._config.delay) } } this._element.classList.remove(CLASS_NAME_HIDE) Util.reflow(this._element) this._element.classList.add(CLASS_NAME_SHOWING) if (this._config.animation) { const transitionDuration = Util.getTransitionDurationFromElement(this._element) $(this._element) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(transitionDuration) } else { complete() } } hide() { if (!this._element.classList.contains(CLASS_NAME_SHOW)) { return } const hideEvent = $.Event(EVENT_HIDE) $(this._element).trigger(hideEvent) if (hideEvent.isDefaultPrevented()) { return } this._close() } dispose() { this._clearTimeout() if (this._element.classList.contains(CLASS_NAME_SHOW)) { this._element.classList.remove(CLASS_NAME_SHOW) } $(this._element).off(EVENT_CLICK_DISMISS) $.removeData(this._element, DATA_KEY) this._element = null this._config = null } // Private _getConfig(config) { config = { ...Default, ...$(this._element).data(), ...(typeof config === 'object' && config ? config : {}) } Util.typeCheckConfig( NAME, config, this.constructor.DefaultType ) return config } _setListeners() { $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide()) } _close() { const complete = () => { this._element.classList.add(CLASS_NAME_HIDE) $(this._element).trigger(EVENT_HIDDEN) } this._element.classList.remove(CLASS_NAME_SHOW) if (this._config.animation) { const transitionDuration = Util.getTransitionDurationFromElement(this._element) $(this._element) .one(Util.TRANSITION_END, complete) .emulateTransitionEnd(transitionDuration) } else { complete() } } _clearTimeout() { clearTimeout(this._timeout) this._timeout = null } // Static static _jQueryInterface(config) { return this.each(function () { const $element = $(this) let data = $element.data(DATA_KEY) const _config = typeof config === 'object' && config if (!data) { data = new Toast(this, _config) $element.data(DATA_KEY, data) } if (typeof config === 'string') { if (typeof data[config] === 'undefined') { throw new TypeError(`No method named "${config}"`) } data[config](this) } }) } } /** * jQuery */ $.fn[NAME] = Toast._jQueryInterface $.fn[NAME].Constructor = Toast $.fn[NAME].noConflict = () => { $.fn[NAME] = JQUERY_NO_CONFLICT return Toast._jQueryInterface } export default Toast boost/amd/src/bootstrap/util.js 0000604 00000011717 15062070724 0012560 0 ustar 00 /** * -------------------------------------------------------------------------- * Bootstrap (v4.6.2): util.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ import $ from 'jquery' /** * Private TransitionEnd Helpers */ const TRANSITION_END = 'transitionend' const MAX_UID = 1000000 const MILLISECONDS_MULTIPLIER = 1000 // Shoutout AngusCroll (https://goo.gl/pxwQGp) function toType(obj) { if (obj === null || typeof obj === 'undefined') { return `${obj}` } return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase() } function getSpecialTransitionEndEvent() { return { bindType: TRANSITION_END, delegateType: TRANSITION_END, handle(event) { if ($(event.target).is(this)) { return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params } return undefined } } } function transitionEndEmulator(duration) { let called = false $(this).one(Util.TRANSITION_END, () => { called = true }) setTimeout(() => { if (!called) { Util.triggerTransitionEnd(this) } }, duration) return this } function setTransitionEndSupport() { $.fn.emulateTransitionEnd = transitionEndEmulator $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent() } /** * Public Util API */ const Util = { TRANSITION_END: 'bsTransitionEnd', getUID(prefix) { do { // eslint-disable-next-line no-bitwise prefix += ~~(Math.random() * MAX_UID) // "~~" acts like a faster Math.floor() here } while (document.getElementById(prefix)) return prefix }, getSelectorFromElement(element) { let selector = element.getAttribute('data-target') if (!selector || selector === '#') { const hrefAttr = element.getAttribute('href') selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '' } try { return document.querySelector(selector) ? selector : null } catch (_) { return null } }, getTransitionDurationFromElement(element) { if (!element) { return 0 } // Get transition-duration of the element let transitionDuration = $(element).css('transition-duration') let transitionDelay = $(element).css('transition-delay') const floatTransitionDuration = parseFloat(transitionDuration) const floatTransitionDelay = parseFloat(transitionDelay) // Return 0 if element or transition duration is not found if (!floatTransitionDuration && !floatTransitionDelay) { return 0 } // If multiple durations are defined, take the first transitionDuration = transitionDuration.split(',')[0] transitionDelay = transitionDelay.split(',')[0] return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER }, reflow(element) { return element.offsetHeight }, triggerTransitionEnd(element) { $(element).trigger(TRANSITION_END) }, supportsTransitionEnd() { return Boolean(TRANSITION_END) }, isElement(obj) { return (obj[0] || obj).nodeType }, typeCheckConfig(componentName, config, configTypes) { for (const property in configTypes) { if (Object.prototype.hasOwnProperty.call(configTypes, property)) { const expectedTypes = configTypes[property] const value = config[property] const valueType = value && Util.isElement(value) ? 'element' : toType(value) if (!new RegExp(expectedTypes).test(valueType)) { throw new Error( `${componentName.toUpperCase()}: ` + `Option "${property}" provided type "${valueType}" ` + `but expected type "${expectedTypes}".`) } } } }, findShadowRoot(element) { if (!document.documentElement.attachShadow) { return null } // Can find the shadow root otherwise it'll return the document if (typeof element.getRootNode === 'function') { const root = element.getRootNode() return root instanceof ShadowRoot ? root : null } if (element instanceof ShadowRoot) { return element } // when we don't find a shadow root if (!element.parentNode) { return null } return Util.findShadowRoot(element.parentNode) }, jQueryDetection() { if (typeof $ === 'undefined') { throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.') } const version = $.fn.jquery.split(' ')[0].split('.') const minMajor = 1 const ltMajor = 2 const minMinor = 9 const minPatch = 1 const maxMajor = 4 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0') } } } Util.jQueryDetection() setTransitionEndSupport() export default Util boost/amd/src/toast.js 0000604 00000001703 15062070724 0010712 0 ustar 00 // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Backward compatibility file for the old toast.js * * @module theme_boost/toast * @copyright 2020 Bas Brands <bas@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ import Toast from './bootstrap/toast'; export { Toast }; boost/amd/build/drawer.min.js 0000604 00000007440 15062070724 0012142 0 ustar 00 /** * Contain the logic for a drawer. * * @module theme_boost/drawer * @copyright 2016 Damyon Wiese * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ define("theme_boost/drawer",["jquery","core/custom_interaction_events","core/log","core/pubsub","core/aria","core_user/repository"],(function($,CustomEvents,Log,PubSub,Aria,UserRepository){var SELECTORS_TOGGLE_REGION='[data-region="drawer-toggle"]',SELECTORS_TOGGLE_ACTION='[data-action="toggle-drawer"]',SELECTORS_BODY="body",SELECTORS_SECTION='.list-group-item[href*="#section-"]',SELECTORS_DRAWER="#nav-drawer",small=$(document).width()<768,Drawer=function(){$(SELECTORS_TOGGLE_REGION).length||Log.debug("Page is missing a drawer region"),$(SELECTORS_TOGGLE_ACTION).length||Log.debug("Page is missing a drawer toggle link"),$(SELECTORS_TOGGLE_REGION).each(function(index,ele){var trigger=$(ele).find(SELECTORS_TOGGLE_ACTION),drawerid=trigger.attr("aria-controls"),drawer=$(document.getElementById(drawerid)),hidden="false"==trigger.attr("aria-expanded"),side=trigger.attr("data-side"),body=$(SELECTORS_BODY),preference=trigger.attr("data-preference");small&&UserRepository.setUserPreference(preference,!1),drawer.on("mousewheel DOMMouseScroll",this.preventPageScroll),hidden?trigger.attr("aria-expanded","false"):(body.addClass("drawer-open-"+side),trigger.attr("aria-expanded","true"))}.bind(this)),this.registerEventListeners(),small&&this.closeAll()};return Drawer.prototype.closeAll=function(){$(SELECTORS_TOGGLE_REGION).each((function(index,ele){var trigger=$(ele).find(SELECTORS_TOGGLE_ACTION),side=trigger.attr("data-side"),body=$(SELECTORS_BODY),drawerid=trigger.attr("aria-controls"),drawer=$(document.getElementById(drawerid)),preference=trigger.attr("data-preference");trigger.attr("aria-expanded","false"),body.removeClass("drawer-open-"+side),Aria.hide(drawer.get()),drawer.addClass("closed"),small||UserRepository.setUserPreference(preference,!1)}))},Drawer.prototype.toggleDrawer=function(e){var trigger=$(e.target).closest("[data-action=toggle-drawer]"),drawerid=trigger.attr("aria-controls"),drawer=$(document.getElementById(drawerid)),body=$(SELECTORS_BODY),side=trigger.attr("data-side"),preference=trigger.attr("data-preference");small&&UserRepository.setUserPreference(preference,!1),body.addClass("drawer-ease");var open="true"==trigger.attr("aria-expanded");open?(body.removeClass("drawer-open-"+side),trigger.attr("aria-expanded","false"),drawer.addClass("closed").delay(500).queue((function(){$(this).hasClass("closed")&&Aria.hide(this),$(this).dequeue()})),small||UserRepository.setUserPreference(preference,!1)):(trigger.attr("aria-expanded","true"),Aria.unhide(drawer.get()),drawer.focus(),body.addClass("drawer-open-"+side),drawer.removeClass("closed"),small||UserRepository.setUserPreference(preference,!0)),PubSub.publish("nav-drawer-toggle-start",open)},Drawer.prototype.preventPageScroll=function(e){var delta=e.wheelDelta||e.originalEvent&&e.originalEvent.wheelDelta||-e.originalEvent.detail,bottomOverflow=this.scrollTop+$(this).outerHeight()-this.scrollHeight>=0,topOverflow=this.scrollTop<=0;(delta<0&&bottomOverflow||delta>0&&topOverflow)&&e.preventDefault()},Drawer.prototype.registerEventListeners=function(){$(SELECTORS_TOGGLE_ACTION).each(function(index,element){CustomEvents.define($(element),[CustomEvents.events.activate]),$(element).on(CustomEvents.events.activate,function(e,data){this.toggleDrawer(data.originalEvent),data.originalEvent.preventDefault()}.bind(this))}.bind(this)),$(SELECTORS_SECTION).click(function(){small&&this.closeAll()}.bind(this)),$(SELECTORS_DRAWER).on("webkitTransitionEnd msTransitionEnd transitionend",(function(e){var open=!!$(e.target).closest(SELECTORS_DRAWER).attr("aria-hidden");PubSub.publish("nav-drawer-toggle-end",open)}))},{init:function(){return new Drawer}}})); //# sourceMappingURL=drawer.min.js.map boost/amd/build/drawers.min.js 0000604 00000034107 15062070724 0012325 0 ustar 00 define("theme_boost/drawers",["exports","core/modal_backdrop","core/templates","core/aria","core/event_dispatcher","core/utils","core/pagehelpers","core/pending","core_user/repository","jquery"],(function(_exports,_modal_backdrop,_templates,Aria,_event_dispatcher,_utils,_pagehelpers,_pending,_repository,_jquery){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_modal_backdrop=_interopRequireDefault(_modal_backdrop),_templates=_interopRequireDefault(_templates),Aria=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(Aria),_pending=_interopRequireDefault(_pending),_jquery=_interopRequireDefault(_jquery);let backdropPromise=null;const drawerMap=new Map,SELECTORS_BUTTONS='[data-toggler="drawers"]',SELECTORS_CLOSEBTN='[data-toggler="drawers"][data-action="closedrawer"]',SELECTORS_OPENBTN='[data-toggler="drawers"][data-action="opendrawer"]',SELECTORS_TOGGLEBTN='[data-toggler="drawers"][data-action="toggle"]',SELECTORS_DRAWERS='[data-region="fixed-drawer"]',SELECTORS_DRAWERCONTENT=".drawercontent",SELECTORS_PAGECONTENT="#page-content",SELECTORS_HEADERCONTENT=".drawerheadercontent",CLASSES_SCROLLED="scrolled",CLASSES_SHOW="show",CLASSES_NOTINITIALISED="not-initialized",getDrawerZIndex=()=>{const drawer=document.querySelector(SELECTORS_DRAWERS);return drawer?parseInt(window.getComputedStyle(drawer).zIndex,10):null},getBackdrop=()=>(backdropPromise||(backdropPromise=_templates.default.render("core/modal_backdrop",{}).then((html=>new _modal_backdrop.default(html))).then((modalBackdrop=>(getDrawerZIndex()&&modalBackdrop.setZIndex(getDrawerZIndex()-1),modalBackdrop.getAttachmentPoint().get(0).addEventListener("click",(e=>{e.preventDefault(),Drawers.closeAllDrawers()})),modalBackdrop))).catch()),backdropPromise),getDrawerOpenButton=drawerId=>{let openButton=document.querySelector("".concat(SELECTORS_OPENBTN,'[data-target="').concat(drawerId,'"]'));return openButton||(openButton=document.querySelector("".concat(SELECTORS_TOGGLEBTN,'[data-target="').concat(drawerId,'"]'))),openButton},disableDrawerTooltips=drawerNode=>{[drawerNode.querySelector(SELECTORS_CLOSEBTN),getDrawerOpenButton(drawerNode.id)].forEach((button=>{button&&disableButtonTooltip(button)}))},disableButtonTooltip=(button,enableOnBlur)=>{button.hasAttribute("data-original-title")?((0,_jquery.default)(button).tooltip("disable"),button.setAttribute("title",button.dataset.originalTitle)):(button.dataset.disabledToggle=button.dataset.toggle,button.removeAttribute("data-toggle")),enableOnBlur&&(button.dataset.restoreTooltipOnBlur=!0)},enableButtonTooltip=button=>{button.hasAttribute("data-original-title")?((0,_jquery.default)(button).tooltip("enable"),button.removeAttribute("title")):button.dataset.disabledToggle&&(button.dataset.toggle=button.dataset.disabledToggle,(0,_jquery.default)(button).tooltip()),delete button.dataset.restoreTooltipOnBlur};class Drawers{constructor(drawerNode){_defineProperty(this,"drawerNode",null),_defineProperty(this,"boundingRect",null),void 0===drawerNode.dataset.behatFakeDrawer&&(this.drawerNode=drawerNode,(0,_pagehelpers.isSmall)()&&this.closeDrawer({focusOnOpenButton:!1,updatePreferences:!1}),this.drawerNode.classList.contains(CLASSES_SHOW)?this.openDrawer({focusOnCloseButton:!1}):1==this.drawerNode.dataset.forceopen?(0,_pagehelpers.isSmall)()||this.openDrawer({focusOnCloseButton:!1}):Aria.hide(this.drawerNode),(0,_pagehelpers.isSmall)()&&disableDrawerTooltips(this.drawerNode),(drawerNode=>{const content=drawerNode.querySelector(SELECTORS_DRAWERCONTENT);content&&content.addEventListener("scroll",(()=>{drawerNode.classList.toggle(CLASSES_SCROLLED,0!=content.scrollTop)}))})(this.drawerNode),drawerMap.set(drawerNode,this),drawerNode.classList.remove(CLASSES_NOTINITIALISED))}get isOpen(){return this.drawerNode.classList.contains(CLASSES_SHOW)}get closeOnResize(){return!!parseInt(this.drawerNode.dataset.closeOnResize)}static getDrawerInstanceForNode(drawerNode){return drawerMap.has(drawerNode)||new Drawers(drawerNode),drawerMap.get(drawerNode)}dispatchEvent(eventname){let cancelable=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return(0,_event_dispatcher.dispatchEvent)(eventname,{drawerInstance:this},this.drawerNode,{cancelable:cancelable})}openDrawer(){var _this$drawerNode$quer,_this$drawerNode$quer2;let{focusOnCloseButton:focusOnCloseButton=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const pendingPromise=new _pending.default("theme_boost/drawers:open");if(this.dispatchEvent(Drawers.eventTypes.drawerShow,!0).defaultPrevented)return;null===(_this$drawerNode$quer=this.drawerNode.querySelector(SELECTORS_CLOSEBTN))||void 0===_this$drawerNode$quer||_this$drawerNode$quer.classList.toggle("hidden",!0),null===(_this$drawerNode$quer2=this.drawerNode.querySelector(SELECTORS_HEADERCONTENT))||void 0===_this$drawerNode$quer2||_this$drawerNode$quer2.classList.toggle("hidden",!0);let openButton=getDrawerOpenButton(this.drawerNode.id);var _jQuery;openButton&&openButton.hasAttribute("data-original-title")&&(null===(_jQuery=(0,_jquery.default)(openButton))||void 0===_jQuery||_jQuery.tooltip("hide"));Aria.unhide(this.drawerNode),this.drawerNode.classList.add(CLASSES_SHOW);const preference=this.drawerNode.dataset.preference;preference&&!(0,_pagehelpers.isSmall)()&&1!=this.drawerNode.dataset.forceopen&&(0,_repository.setUserPreference)(preference,!0);const state=this.drawerNode.dataset.state;if(state){document.getElementById("page").classList.add(state)}this.boundingRect=this.drawerNode.getBoundingClientRect(),(0,_pagehelpers.isSmall)()&&getBackdrop().then((backdrop=>{backdrop.show();return document.getElementById("page").style.overflow="hidden",backdrop})).catch();const closeButton=this.drawerNode.querySelector(SELECTORS_CLOSEBTN),headerContent=this.drawerNode.querySelector(SELECTORS_HEADERCONTENT);focusOnCloseButton&&closeButton&&disableButtonTooltip(closeButton,!0),setTimeout((()=>{closeButton.classList.toggle("hidden",!1),headerContent.classList.toggle("hidden",!1),focusOnCloseButton&&closeButton.focus(),pendingPromise.resolve()}),300),this.dispatchEvent(Drawers.eventTypes.drawerShown)}closeDrawer(){let{focusOnOpenButton:focusOnOpenButton=!0,updatePreferences:updatePreferences=!0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};const pendingPromise=new _pending.default("theme_boost/drawers:close");if(this.dispatchEvent(Drawers.eventTypes.drawerHide,!0).defaultPrevented)return;const closeButton=this.drawerNode.querySelector(SELECTORS_CLOSEBTN);null==closeButton||closeButton.classList.toggle("hidden",!0);const headerContent=this.drawerNode.querySelector(SELECTORS_HEADERCONTENT);var _jQuery2;(null==headerContent||headerContent.classList.toggle("hidden",!0),closeButton.hasAttribute("data-original-title"))&&(null===(_jQuery2=(0,_jquery.default)(closeButton))||void 0===_jQuery2||_jQuery2.tooltip("hide"));const preference=this.drawerNode.dataset.preference;preference&&updatePreferences&&!(0,_pagehelpers.isSmall)()&&(0,_repository.setUserPreference)(preference,!1);const state=this.drawerNode.dataset.state;if(state){document.getElementById("page").classList.remove(state)}Aria.hide(this.drawerNode),this.drawerNode.classList.remove(CLASSES_SHOW),getBackdrop().then((backdrop=>{if(backdrop.hide(),(0,_pagehelpers.isSmall)()){document.getElementById("page").style.overflow="visible"}return backdrop})).catch();let openButton=getDrawerOpenButton(this.drawerNode.id);openButton&&disableButtonTooltip(openButton,!0),setTimeout((()=>{openButton&&focusOnOpenButton&&openButton.focus(),pendingPromise.resolve()}),300),this.dispatchEvent(Drawers.eventTypes.drawerHidden)}toggleVisibility(){this.drawerNode.classList.contains(CLASSES_SHOW)?this.closeDrawer():this.openDrawer()}displace(scrollPosition){var _this$drawerNode$data;let displace=scrollPosition,openButton=getDrawerOpenButton(this.drawerNode.id);if(0===scrollPosition)return this.drawerNode.style.transform="",void(openButton&&(openButton.style.transform=""));const state=null===(_this$drawerNode$data=this.drawerNode.dataset)||void 0===_this$drawerNode$data?void 0:_this$drawerNode$data.state,drawrWidth=this.drawerNode.offsetWidth;let scrollThreshold=drawrWidth,direction=-1;"show-drawer-right"===state&&(direction=1,scrollThreshold=20),Math.abs(scrollPosition)>scrollThreshold&&(displace=Math.sign(scrollPosition)*(drawrWidth+20)),displace*=direction;const transform="translateX(".concat(displace,"px)");openButton&&(openButton.style.transform=transform),this.drawerNode.style.transform=transform}preventOverlap(currentFocus){var _this$drawerNode$data2;if(!this.isOpen||"show-drawer-left"===(null===(_this$drawerNode$data2=this.drawerNode.dataset)||void 0===_this$drawerNode$data2?void 0:_this$drawerNode$data2.state))return;const drawrWidth=this.drawerNode.offsetWidth,element=currentFocus.getBoundingClientRect();let overlapping=element.right+20>this.boundingRect.left&&element.left-20<this.boundingRect.right;if(overlapping){const currentBoundingRect=this.drawerNode.getBoundingClientRect();overlapping=element.bottom>currentBoundingRect.top&&element.top<currentBoundingRect.bottom}if(overlapping){let displaceOut=drawrWidth+1;window.right_to_left()&&(displaceOut*=-1),this.displace(displaceOut)}else this.displace(window.scrollX)}static closeAllDrawers(){drawerMap.forEach((drawerInstance=>{drawerInstance.closeDrawer()}))}static closeOtherDrawers(comparisonInstance){drawerMap.forEach((drawerInstance=>{drawerInstance!==comparisonInstance&&drawerInstance.closeDrawer()}))}static preventCoveringFocusedElement(){const currentFocus=document.activeElement,pagecontent=document.querySelector(SELECTORS_PAGECONTENT);currentFocus&&null!=pagecontent&&pagecontent.contains(currentFocus)?drawerMap.forEach((drawerInstance=>{drawerInstance.preventOverlap(currentFocus)})):Drawers.displaceDrawers(window.scrollX)}static displaceDrawers(displace){drawerMap.forEach((drawerInstance=>{drawerInstance.displace(displace)}))}}_exports.default=Drawers,_defineProperty(Drawers,"eventTypes",{drawerShow:"theme_boost/drawers:show",drawerShown:"theme_boost/drawers:shown",drawerHide:"theme_boost/drawers:hide",drawerHidden:"theme_boost/drawers:hidden"});const setLastUsedToggle=toggleButton=>{toggleButton.dataset.target&&(document.querySelectorAll("".concat(SELECTORS_BUTTONS,'[data-target="').concat(toggleButton.dataset.target,'"]')).forEach((btn=>{btn.dataset.lastused=!1})),toggleButton.dataset.lastused=!0)};(()=>{document.addEventListener("click",(e=>{const toggleButton=e.target.closest(SELECTORS_TOGGLEBTN);if(toggleButton&&toggleButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(toggleButton.dataset.target),drawerInstance=Drawers.getDrawerInstanceForNode(targetDrawer);setLastUsedToggle(toggleButton),drawerInstance.toggleVisibility()}const openDrawerButton=e.target.closest(SELECTORS_OPENBTN);if(openDrawerButton&&openDrawerButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(openDrawerButton.dataset.target),drawerInstance=Drawers.getDrawerInstanceForNode(targetDrawer);setLastUsedToggle(toggleButton),drawerInstance.openDrawer()}const closeDrawerButton=e.target.closest(SELECTORS_CLOSEBTN);if(closeDrawerButton&&closeDrawerButton.dataset.target){e.preventDefault();const targetDrawer=document.getElementById(closeDrawerButton.dataset.target);Drawers.getDrawerInstanceForNode(targetDrawer).closeDrawer(),(target=>{const lastUsedButton=document.querySelector("".concat(SELECTORS_BUTTONS,'[data-target="').concat(target,'"][data-lastused="true"'));lastUsedButton&&lastUsedButton.focus()})(closeDrawerButton.dataset.target)}})),document.addEventListener(Drawers.eventTypes.drawerShow,(e=>{(0,_pagehelpers.isLarge)()||Drawers.closeOtherDrawers(e.detail.drawerInstance)}));const btnSelector="".concat(SELECTORS_TOGGLEBTN,", ").concat(SELECTORS_OPENBTN,", ").concat(SELECTORS_CLOSEBTN);document.addEventListener("focusout",(e=>{const button=e.target.closest(btnSelector);void 0!==(null==button?void 0:button.dataset.restoreTooltipOnBlur)&&enableButtonTooltip(button)}));document.addEventListener("scroll",(()=>{const body=document.querySelector("body");window.scrollY>=window.innerHeight?body.classList.add(CLASSES_SCROLLED):body.classList.remove(CLASSES_SCROLLED),Drawers.displaceDrawers(window.scrollX)}));const preventOverlap=(0,_utils.debounce)(Drawers.preventCoveringFocusedElement,100);document.addEventListener("focusin",preventOverlap),document.addEventListener("focusout",preventOverlap),window.addEventListener("resize",(0,_utils.debounce)((()=>{if((0,_pagehelpers.isSmall)()){let anyOpen=!1;drawerMap.forEach((drawerInstance=>{disableDrawerTooltips(drawerInstance.drawerNode),drawerInstance.isOpen&&(drawerInstance.closeOnResize?drawerInstance.closeDrawer():anyOpen=!0)})),anyOpen&&getBackdrop().then((backdrop=>backdrop.show())).catch()}else drawerMap.forEach((drawerInstance=>{var drawerNode;[(drawerNode=drawerInstance.drawerNode).querySelector(SELECTORS_CLOSEBTN),getDrawerOpenButton(drawerNode.id)].forEach((button=>{button&&enableButtonTooltip(button)}))})),getBackdrop().then((backdrop=>backdrop.hide())).catch()}),400))})();return document.querySelectorAll(SELECTORS_DRAWERS).forEach((drawerNode=>Drawers.getDrawerInstanceForNode(drawerNode))),_exports.default})); //# sourceMappingURL=drawers.min.js.map boost/amd/build/form-display-errors.min.js 0000604 00000004250 15062070724 0014572 0 ustar 00 /** * Custom form error event handler to manipulate the bootstrap markup and show * nicely styled errors in an mform. * * @module theme_boost/form-display-errors * @copyright 2016 Damyon Wiese <damyon@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ define("theme_boost/form-display-errors",["jquery","core_form/events"],(function($,FormEvent){return{enhance:function(elementid){var element=document.getElementById(elementid);if(element){element.addEventListener(FormEvent.eventTypes.formFieldValidationFailed,(e=>{const msg=e.detail.message;e.preventDefault();var parent=$(element).closest(".form-group"),feedback=parent.find(".form-control-feedback");const feedbackId=feedback.attr("id");let describedBy=$(element).attr("aria-describedby");void 0===describedBy&&(describedBy="");let describedByIds=[];describedBy.length&&(describedByIds=describedBy.split(" "));const feedbackIndex=describedByIds.indexOf(feedbackId);"TEXTAREA"==$(element).prop("tagName")&&parent.find("[contenteditable]").length>0&&(element=parent.find("[contenteditable]")),""!==msg?(parent.addClass("has-danger"),parent.data("client-validation-error",!0),$(element).addClass("is-invalid"),-1===feedbackIndex&&(describedByIds.push(feedbackId),$(element).attr("aria-describedby",describedByIds.join(" "))),$(element).attr("aria-invalid",!0),feedback.attr("tabindex",0),feedback.html(msg),feedback.is(":visible")||(feedback.show(),feedback.focus())):!0===parent.data("client-validation-error")&&(parent.removeClass("has-danger"),parent.data("client-validation-error",!1),$(element).removeClass("is-invalid"),feedbackIndex>-1&&describedByIds.splice(feedbackIndex,1),describedByIds.length?(describedBy=describedByIds.join(" "),$(element).attr("aria-describedby",describedBy)):$(element).removeAttr("aria-describedby"),$(element).attr("aria-invalid",!1),feedback.hide())}));var form=element.closest("form");form&&!("boostFormErrorsEnhanced"in form.dataset)&&(form.addEventListener("submit",(function(){var visibleError=$(".form-control-feedback:visible");visibleError.length&&visibleError[0].focus()})),form.dataset.boostFormErrorsEnhanced=1)}}}})); //# sourceMappingURL=form-display-errors.min.js.map boost/amd/build/courseindexdrawercontrols.min.js.map 0000604 00000007270 15062070724 0016754 0 ustar 00 {"version":3,"file":"courseindexdrawercontrols.min.js","sources":["../src/courseindexdrawercontrols.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Controls for the course index drawer, such as expand-all/collapse-all sections.\n *\n * @module theme_boost/courseindexdrawercontrols\n * @copyright 2023 Stefan Topfstedt\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport {BaseComponent} from 'core/reactive';\nimport {getCurrentCourseEditor} from 'core_courseformat/courseeditor';\n\nexport default class Component extends BaseComponent {\n\n create() {\n this.name = 'courseindexdrawercontrols';\n this.selectors = {\n COLLAPSEALL: `[data-action=\"collapseallcourseindexsections\"]`,\n EXPANDALL: `[data-action=\"expandallcourseindexsections\"]`,\n };\n }\n\n /**\n * @param {element|string} target the DOM main element or its ID\n * @param {object} selectors optional css selector overrides\n * @return {Component}\n */\n static init(target, selectors) {\n return new Component({\n element: document.getElementById(target),\n reactive: getCurrentCourseEditor(),\n selectors,\n });\n }\n\n /**\n * Initial state ready method.\n */\n stateReady() {\n // Attach the on-click event handlers to the expand-all and collapse-all buttons, if present.\n const expandAllBtn = this.getElement(this.selectors.EXPANDALL);\n if (expandAllBtn) {\n this.addEventListener(expandAllBtn, 'click', this._expandAllSections);\n\n }\n const collapseAllBtn = this.getElement(this.selectors.COLLAPSEALL);\n if (collapseAllBtn) {\n this.addEventListener(collapseAllBtn, 'click', this._collapseAllSections);\n }\n }\n\n /**\n * On-click event handler for the collapse-all button.\n * @private\n */\n _collapseAllSections() {\n this._toggleAllSections(true);\n }\n\n /**\n * On-click event handler for the expand-all button.\n * @private\n */\n _expandAllSections() {\n this._toggleAllSections(false);\n }\n\n /**\n * Collapses or expands all sections in the course index.\n * @param {boolean} expandOrCollapse set to TRUE to collapse all, and FALSE to expand all.\n * @private\n */\n _toggleAllSections(expandOrCollapse) {\n this.reactive.dispatch('allSectionsIndexCollapsed', expandOrCollapse);\n }\n}\n"],"names":["Component","BaseComponent","create","name","selectors","COLLAPSEALL","EXPANDALL","target","element","document","getElementById","reactive","stateReady","expandAllBtn","this","getElement","addEventListener","_expandAllSections","collapseAllBtn","_collapseAllSections","_toggleAllSections","expandOrCollapse","dispatch"],"mappings":";;;;;;;;MAyBqBA,kBAAkBC,wBAErCC,cACOC,KAAO,iCACPC,UAAY,CACfC,6DACAC,sEASQC,OAAQH,kBACX,IAAIJ,UAAU,CACnBQ,QAASC,SAASC,eAAeH,QACjCI,UAAU,0CACVP,UAAAA,YAOJQ,mBAEQC,aAAeC,KAAKC,WAAWD,KAAKV,UAAUE,WAChDO,mBACGG,iBAAiBH,aAAc,QAASC,KAAKG,0BAG9CC,eAAiBJ,KAAKC,WAAWD,KAAKV,UAAUC,aAClDa,qBACGF,iBAAiBE,eAAgB,QAASJ,KAAKK,sBAQxDA,4BACOC,oBAAmB,GAO1BH,0BACOG,oBAAmB,GAQ1BA,mBAAmBC,uBACZV,SAASW,SAAS,4BAA6BD"} boost/amd/build/sticky-footer.min.js.map 0000604 00000011621 15062070724 0014230 0 ustar 00 {"version":3,"file":"sticky-footer.min.js","sources":["../src/sticky-footer.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Sticky footer module.\n *\n * @module theme_boost/sticky-footer\n * @copyright 2022 Ferran Recio <ferran@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport Pending from 'core/pending';\nimport {registerManager, init as defaultInit} from 'core/sticky-footer';\n\nconst SELECTORS = {\n STICKYFOOTER: '.stickyfooter',\n PAGE: '#page',\n};\n\nconst CLASSES = {\n HASSTICKYFOOTER: 'hasstickyfooter',\n};\n\nlet initialized = false;\n\nlet previousScrollPosition = 0;\n\nlet enabled = false;\n\n/**\n * Scroll handler.\n * @package\n */\nconst scrollSpy = () => {\n if (!enabled) {\n return;\n }\n // Ignore scroll if page size is not small.\n if (document.body.clientWidth >= 768) {\n return;\n }\n // Detect if scroll is going down.\n let scrollPosition = window.scrollY;\n if (scrollPosition > previousScrollPosition) {\n hideStickyFooter();\n } else {\n showStickyFooter();\n }\n previousScrollPosition = scrollPosition;\n};\n\n/**\n * Return if the sticky footer must be enabled by default or not.\n * @returns {Boolean} true if the sticky footer is enabled automatic.\n */\nconst isDisabledByDefault = () => {\n const footer = document.querySelector(SELECTORS.STICKYFOOTER);\n if (!footer) {\n return false;\n }\n return !!footer.dataset.disable;\n};\n\n/**\n * Show the sticky footer in the page.\n */\nconst showStickyFooter = () => {\n // We need some seconds to make sure the CSS animation is ready.\n const pendingPromise = new Pending('theme_boost/sticky-footer:enabling');\n const footer = document.querySelector(SELECTORS.STICKYFOOTER);\n const page = document.querySelector(SELECTORS.PAGE);\n if (footer && page) {\n document.body.classList.add(CLASSES.HASSTICKYFOOTER);\n page.classList.add(CLASSES.HASSTICKYFOOTER);\n }\n setTimeout(() => pendingPromise.resolve(), 1000);\n};\n\n/**\n * Hide the sticky footer in the page.\n */\nconst hideStickyFooter = () => {\n document.body.classList.remove(CLASSES.HASSTICKYFOOTER);\n const page = document.querySelector(SELECTORS.PAGE);\n page?.classList.remove(CLASSES.HASSTICKYFOOTER);\n};\n\n/**\n * Enable sticky footer in the page.\n */\nexport const enableStickyFooter = () => {\n enabled = true;\n showStickyFooter();\n};\n\n/**\n * Disable sticky footer in the page.\n */\nexport const disableStickyFooter = () => {\n enabled = false;\n hideStickyFooter();\n};\n\n/**\n * Initialize the module.\n */\nexport const init = () => {\n // Prevent sticky footer in behat.\n if (initialized || document.body.classList.contains('behat-site')) {\n defaultInit();\n return;\n }\n initialized = true;\n if (!isDisabledByDefault()) {\n enableStickyFooter();\n }\n\n document.addEventListener(\"scroll\", scrollSpy);\n\n registerManager({\n enableStickyFooter,\n disableStickyFooter,\n });\n};\n"],"names":["SELECTORS","CLASSES","initialized","previousScrollPosition","enabled","scrollSpy","document","body","clientWidth","scrollPosition","window","scrollY","hideStickyFooter","showStickyFooter","pendingPromise","Pending","footer","querySelector","page","classList","add","setTimeout","resolve","remove","enableStickyFooter","disableStickyFooter","contains","dataset","disable","isDisabledByDefault","addEventListener"],"mappings":";;;;;;;2MA0BMA,uBACY,gBADZA,eAEI,QAGJC,wBACe,sBAGjBC,aAAc,EAEdC,uBAAyB,EAEzBC,SAAU,QAMRC,UAAY,SACTD,kBAIDE,SAASC,KAAKC,aAAe,eAI7BC,eAAiBC,OAAOC,QACxBF,eAAiBN,uBACjBS,mBAEAC,mBAEJV,uBAAyBM,gBAkBvBI,iBAAmB,WAEfC,eAAiB,IAAIC,iBAAQ,sCAC7BC,OAASV,SAASW,cAAcjB,wBAChCkB,KAAOZ,SAASW,cAAcjB,gBAChCgB,QAAUE,OACVZ,SAASC,KAAKY,UAAUC,IAAInB,yBAC5BiB,KAAKC,UAAUC,IAAInB,0BAEvBoB,YAAW,IAAMP,eAAeQ,WAAW,MAMzCV,iBAAmB,KACrBN,SAASC,KAAKY,UAAUI,OAAOtB,+BACzBiB,KAAOZ,SAASW,cAAcjB,gBACpCkB,MAAAA,MAAAA,KAAMC,UAAUI,OAAOtB,0BAMduB,mBAAqB,KAC9BpB,SAAU,EACVS,yEAMSY,oBAAsB,KAC/BrB,SAAU,EACVQ,mFAMgB,KAEZV,aAAeI,SAASC,KAAKY,UAAUO,SAAS,wCAIpDxB,aAAc,EAzDU,YAClBc,OAASV,SAASW,cAAcjB,gCACjCgB,UAGIA,OAAOW,QAAQC,SAqDnBC,IACDL,qBAGJlB,SAASwB,iBAAiB,SAAUzB,6CAEpB,CACZmB,mBAAAA,mBACAC,oBAAAA"} boost/amd/build/popover.min.js 0000604 00000000544 15062070724 0012346 0 ustar 00 define("theme_boost/popover",["exports","./bootstrap/popover"],(function(_exports,_popover){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Popover",{enumerable:!0,get:function(){return _popover.default}}),_popover=(obj=_popover)&&obj.__esModule?obj:{default:obj}})); //# sourceMappingURL=popover.min.js.map boost/amd/build/courseindexdrawercontrols.min.js 0000604 00000002766 15062070724 0016205 0 ustar 00 define("theme_boost/courseindexdrawercontrols",["exports","core/reactive","core_courseformat/courseeditor"],(function(_exports,_reactive,_courseeditor){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0; /** * Controls for the course index drawer, such as expand-all/collapse-all sections. * * @module theme_boost/courseindexdrawercontrols * @copyright 2023 Stefan Topfstedt * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class Component extends _reactive.BaseComponent{create(){this.name="courseindexdrawercontrols",this.selectors={COLLAPSEALL:'[data-action="collapseallcourseindexsections"]',EXPANDALL:'[data-action="expandallcourseindexsections"]'}}static init(target,selectors){return new Component({element:document.getElementById(target),reactive:(0,_courseeditor.getCurrentCourseEditor)(),selectors:selectors})}stateReady(){const expandAllBtn=this.getElement(this.selectors.EXPANDALL);expandAllBtn&&this.addEventListener(expandAllBtn,"click",this._expandAllSections);const collapseAllBtn=this.getElement(this.selectors.COLLAPSEALL);collapseAllBtn&&this.addEventListener(collapseAllBtn,"click",this._collapseAllSections)}_collapseAllSections(){this._toggleAllSections(!0)}_expandAllSections(){this._toggleAllSections(!1)}_toggleAllSections(expandOrCollapse){this.reactive.dispatch("allSectionsIndexCollapsed",expandOrCollapse)}}return _exports.default=Component,_exports.default})); //# sourceMappingURL=courseindexdrawercontrols.min.js.map boost/amd/build/toast.min.js 0000604 00000000524 15062070724 0012004 0 ustar 00 define("theme_boost/toast",["exports","./bootstrap/toast"],(function(_exports,_toast){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Toast",{enumerable:!0,get:function(){return _toast.default}}),_toast=(obj=_toast)&&obj.__esModule?obj:{default:obj}})); //# sourceMappingURL=toast.min.js.map boost/amd/build/loader.min.js 0000604 00000006026 15062070724 0012123 0 ustar 00 define("theme_boost/loader",["exports","jquery","./aria","./index","core/pending","./bootstrap/tools/sanitizer","./pending"],(function(_exports,_jquery,Aria,_index,_pending,_sanitizer,_pending2){function _getRequireWildcardCache(nodeInterop){if("function"!=typeof WeakMap)return null;var cacheBabelInterop=new WeakMap,cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} /** * Template renderer for Moodle. Load and render Moodle templates with Mustache. * * @module theme_boost/loader * @copyright 2015 Damyon Wiese <damyon@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @since 2.9 */Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Bootstrap",{enumerable:!0,get:function(){return _index.default}}),_jquery=_interopRequireDefault(_jquery),Aria=function(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule)return obj;if(null===obj||"object"!=typeof obj&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj)if("default"!==key&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;desc&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key]}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(Aria),_index=_interopRequireDefault(_index),_pending=_interopRequireDefault(_pending),_pending2=_interopRequireDefault(_pending2);const pendingPromise=new _pending.default("theme_boost/loader:init");(0,_pending2.default)(),Aria.init(),(()=>{(0,_jquery.default)('a[data-toggle="tab"]').on("shown.bs.tab",(function(e){var hash=(0,_jquery.default)(e.target).attr("href");history.replaceState?history.replaceState(null,null,hash):location.hash=hash}));const hash=window.location.hash;if(hash){const tab=document.querySelector('[role="tablist"] [href="'+hash+'"]');tab&&tab.click()}})(),(0,_jquery.default)("body").popover({container:"body",selector:'[data-toggle="popover"]',trigger:"focus",whitelist:Object.assign(_sanitizer.DefaultWhitelist,{table:[],thead:[],tbody:[],tr:[],th:[],td:[]})}),document.addEventListener("keydown",(e=>{"Escape"===e.key&&e.target.closest('[data-toggle="popover"]')&&(0,_jquery.default)(e.target).popover("hide")})),(0,_jquery.default)("body").tooltip({container:"body",selector:'[data-toggle="tooltip"]'}),_jquery.default.fn.dropdown.Constructor.Default.popperConfig={modifiers:{flip:{enabled:!1},storeTopPosition:{enabled:!0,fn:(data,options)=>(data.storedTop=data.offsets.popper.top,data),order:299},restoreTopPosition:{enabled:!0,fn:(data,options)=>(data.offsets.popper.top=data.storedTop,data),order:301}}},pendingPromise.resolve()})); //# sourceMappingURL=loader.min.js.map boost/amd/build/drawer.min.js.map 0000604 00000024672 15062070724 0012724 0 ustar 00 {"version":3,"file":"drawer.min.js","sources":["../src/drawer.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Contain the logic for a drawer.\n *\n * @module theme_boost/drawer\n * @copyright 2016 Damyon Wiese\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/custom_interaction_events', 'core/log', 'core/pubsub', 'core/aria', 'core_user/repository'],\n function($, CustomEvents, Log, PubSub, Aria, UserRepository) {\n\n var SELECTORS = {\n TOGGLE_REGION: '[data-region=\"drawer-toggle\"]',\n TOGGLE_ACTION: '[data-action=\"toggle-drawer\"]',\n TOGGLE_TARGET: 'aria-controls',\n TOGGLE_SIDE: 'left',\n BODY: 'body',\n SECTION: '.list-group-item[href*=\"#section-\"]',\n DRAWER: '#nav-drawer'\n };\n\n var small = $(document).width() < 768;\n\n /**\n * Constructor for the Drawer.\n */\n var Drawer = function() {\n\n if (!$(SELECTORS.TOGGLE_REGION).length) {\n Log.debug('Page is missing a drawer region');\n }\n if (!$(SELECTORS.TOGGLE_ACTION).length) {\n Log.debug('Page is missing a drawer toggle link');\n }\n $(SELECTORS.TOGGLE_REGION).each(function(index, ele) {\n var trigger = $(ele).find(SELECTORS.TOGGLE_ACTION);\n var drawerid = trigger.attr('aria-controls');\n var drawer = $(document.getElementById(drawerid));\n var hidden = trigger.attr('aria-expanded') == 'false';\n var side = trigger.attr('data-side');\n var body = $(SELECTORS.BODY);\n var preference = trigger.attr('data-preference');\n if (small) {\n UserRepository.setUserPreference(preference, false);\n }\n\n drawer.on('mousewheel DOMMouseScroll', this.preventPageScroll);\n\n if (!hidden) {\n body.addClass('drawer-open-' + side);\n trigger.attr('aria-expanded', 'true');\n } else {\n trigger.attr('aria-expanded', 'false');\n }\n }.bind(this));\n\n this.registerEventListeners();\n if (small) {\n this.closeAll();\n }\n };\n\n Drawer.prototype.closeAll = function() {\n $(SELECTORS.TOGGLE_REGION).each(function(index, ele) {\n var trigger = $(ele).find(SELECTORS.TOGGLE_ACTION);\n var side = trigger.attr('data-side');\n var body = $(SELECTORS.BODY);\n var drawerid = trigger.attr('aria-controls');\n var drawer = $(document.getElementById(drawerid));\n var preference = trigger.attr('data-preference');\n\n trigger.attr('aria-expanded', 'false');\n body.removeClass('drawer-open-' + side);\n Aria.hide(drawer.get());\n drawer.addClass('closed');\n if (!small) {\n UserRepository.setUserPreference(preference, false);\n }\n });\n };\n\n /**\n * Open / close the blocks drawer.\n *\n * @method toggleDrawer\n * @param {Event} e\n */\n Drawer.prototype.toggleDrawer = function(e) {\n var trigger = $(e.target).closest('[data-action=toggle-drawer]');\n var drawerid = trigger.attr('aria-controls');\n var drawer = $(document.getElementById(drawerid));\n var body = $(SELECTORS.BODY);\n var side = trigger.attr('data-side');\n var preference = trigger.attr('data-preference');\n if (small) {\n UserRepository.setUserPreference(preference, false);\n }\n\n body.addClass('drawer-ease');\n var open = trigger.attr('aria-expanded') == 'true';\n if (!open) {\n // Open.\n trigger.attr('aria-expanded', 'true');\n Aria.unhide(drawer.get());\n drawer.focus();\n body.addClass('drawer-open-' + side);\n drawer.removeClass('closed');\n if (!small) {\n UserRepository.setUserPreference(preference, true);\n }\n } else {\n // Close.\n body.removeClass('drawer-open-' + side);\n trigger.attr('aria-expanded', 'false');\n drawer.addClass('closed').delay(500).queue(function() {\n // Ensure that during the delay, the drawer wasn't re-opened.\n if ($(this).hasClass('closed')) {\n Aria.hide(this);\n }\n $(this).dequeue();\n });\n if (!small) {\n UserRepository.setUserPreference(preference, false);\n }\n }\n\n // Publish an event to tell everything that the drawer has been toggled.\n // The drawer transitions closed so another event will fire once teh transition\n // has completed.\n PubSub.publish('nav-drawer-toggle-start', open);\n };\n\n /**\n * Prevent the page from scrolling when the drawer is at max scroll.\n *\n * @method preventPageScroll\n * @param {Event} e\n */\n Drawer.prototype.preventPageScroll = function(e) {\n var delta = e.wheelDelta || (e.originalEvent && e.originalEvent.wheelDelta) || -e.originalEvent.detail,\n bottomOverflow = (this.scrollTop + $(this).outerHeight() - this.scrollHeight) >= 0,\n topOverflow = this.scrollTop <= 0;\n\n if ((delta < 0 && bottomOverflow) || (delta > 0 && topOverflow)) {\n e.preventDefault();\n }\n };\n\n /**\n * Set up all of the event handling for the modal.\n *\n * @method registerEventListeners\n */\n Drawer.prototype.registerEventListeners = function() {\n\n $(SELECTORS.TOGGLE_ACTION).each(function(index, element) {\n CustomEvents.define($(element), [CustomEvents.events.activate]);\n $(element).on(CustomEvents.events.activate, function(e, data) {\n this.toggleDrawer(data.originalEvent);\n data.originalEvent.preventDefault();\n }.bind(this));\n }.bind(this));\n\n $(SELECTORS.SECTION).click(function() {\n if (small) {\n this.closeAll();\n }\n }.bind(this));\n\n // Publish an event to tell everything that the drawer completed the transition\n // to either an open or closed state.\n $(SELECTORS.DRAWER).on('webkitTransitionEnd msTransitionEnd transitionend', function(e) {\n var drawer = $(e.target).closest(SELECTORS.DRAWER);\n // Note: aria-hidden is either present, or absent. It should not be set to false.\n var open = !!drawer.attr('aria-hidden');\n PubSub.publish('nav-drawer-toggle-end', open);\n });\n };\n\n return {\n 'init': function() {\n return new Drawer();\n }\n };\n});\n"],"names":["define","$","CustomEvents","Log","PubSub","Aria","UserRepository","SELECTORS","small","document","width","Drawer","length","debug","each","index","ele","trigger","find","drawerid","attr","drawer","getElementById","hidden","side","body","preference","setUserPreference","on","this","preventPageScroll","addClass","bind","registerEventListeners","closeAll","prototype","removeClass","hide","get","toggleDrawer","e","target","closest","open","delay","queue","hasClass","dequeue","unhide","focus","publish","delta","wheelDelta","originalEvent","detail","bottomOverflow","scrollTop","outerHeight","scrollHeight","topOverflow","preventDefault","element","events","activate","data","click"],"mappings":";;;;;;;AAsBAA,4BAAO,CAAC,SAAU,iCAAkC,WAAY,cAAe,YAAa,yBACvF,SAASC,EAAGC,aAAcC,IAAKC,OAAQC,KAAMC,oBAE1CC,wBACe,gCADfA,wBAEe,gCAFfA,eAKM,OALNA,kBAMS,sCANTA,iBAOQ,cAGRC,MAAQP,EAAEQ,UAAUC,QAAU,IAK9BC,OAAS,WAEJV,EAAEM,yBAAyBK,QAC5BT,IAAIU,MAAM,mCAETZ,EAAEM,yBAAyBK,QAC5BT,IAAIU,MAAM,wCAEdZ,EAAEM,yBAAyBO,KAAK,SAASC,MAAOC,SACxCC,QAAUhB,EAAEe,KAAKE,KAAKX,yBACtBY,SAAWF,QAAQG,KAAK,iBACxBC,OAASpB,EAAEQ,SAASa,eAAeH,WACnCI,OAA0C,SAAjCN,QAAQG,KAAK,iBACtBI,KAAOP,QAAQG,KAAK,aACpBK,KAAOxB,EAAEM,gBACTmB,WAAaT,QAAQG,KAAK,mBAC1BZ,OACAF,eAAeqB,kBAAkBD,YAAY,GAGjDL,OAAOO,GAAG,4BAA6BC,KAAKC,mBAEvCP,OAIDN,QAAQG,KAAK,gBAAiB,UAH9BK,KAAKM,SAAS,eAAiBP,MAC/BP,QAAQG,KAAK,gBAAiB,UAIpCY,KAAKH,YAEFI,yBACDzB,YACK0B,mBAIbvB,OAAOwB,UAAUD,SAAW,WACxBjC,EAAEM,yBAAyBO,MAAK,SAASC,MAAOC,SACxCC,QAAUhB,EAAEe,KAAKE,KAAKX,yBACtBiB,KAAOP,QAAQG,KAAK,aACpBK,KAAOxB,EAAEM,gBACTY,SAAWF,QAAQG,KAAK,iBACxBC,OAASpB,EAAEQ,SAASa,eAAeH,WACnCO,WAAaT,QAAQG,KAAK,mBAE9BH,QAAQG,KAAK,gBAAiB,SAC9BK,KAAKW,YAAY,eAAiBZ,MAClCnB,KAAKgC,KAAKhB,OAAOiB,OACjBjB,OAAOU,SAAS,UACXvB,OACDF,eAAeqB,kBAAkBD,YAAY,OAWzDf,OAAOwB,UAAUI,aAAe,SAASC,OACjCvB,QAAUhB,EAAEuC,EAAEC,QAAQC,QAAQ,+BAC9BvB,SAAWF,QAAQG,KAAK,iBACxBC,OAASpB,EAAEQ,SAASa,eAAeH,WACnCM,KAAOxB,EAAEM,gBACTiB,KAAOP,QAAQG,KAAK,aACpBM,WAAaT,QAAQG,KAAK,mBAC1BZ,OACAF,eAAeqB,kBAAkBD,YAAY,GAGjDD,KAAKM,SAAS,mBACVY,KAAwC,QAAjC1B,QAAQG,KAAK,iBACnBuB,MAYDlB,KAAKW,YAAY,eAAiBZ,MAClCP,QAAQG,KAAK,gBAAiB,SAC9BC,OAAOU,SAAS,UAAUa,MAAM,KAAKC,OAAM,WAEnC5C,EAAE4B,MAAMiB,SAAS,WACjBzC,KAAKgC,KAAKR,MAEd5B,EAAE4B,MAAMkB,aAEPvC,OACDF,eAAeqB,kBAAkBD,YAAY,KApBjDT,QAAQG,KAAK,gBAAiB,QAC9Bf,KAAK2C,OAAO3B,OAAOiB,OACnBjB,OAAO4B,QACPxB,KAAKM,SAAS,eAAiBP,MAC/BH,OAAOe,YAAY,UACd5B,OACDF,eAAeqB,kBAAkBD,YAAY,IAqBrDtB,OAAO8C,QAAQ,0BAA2BP,OAS9ChC,OAAOwB,UAAUL,kBAAoB,SAASU,OACtCW,MAAQX,EAAEY,YAAeZ,EAAEa,eAAiBb,EAAEa,cAAcD,aAAgBZ,EAAEa,cAAcC,OAC5FC,eAAkB1B,KAAK2B,UAAYvD,EAAE4B,MAAM4B,cAAgB5B,KAAK6B,cAAiB,EACjFC,YAAc9B,KAAK2B,WAAa,GAE/BL,MAAQ,GAAKI,gBAAoBJ,MAAQ,GAAKQ,cAC/CnB,EAAEoB,kBASVjD,OAAOwB,UAAUF,uBAAyB,WAEtChC,EAAEM,yBAAyBO,KAAK,SAASC,MAAO8C,SAC5C3D,aAAaF,OAAOC,EAAE4D,SAAU,CAAC3D,aAAa4D,OAAOC,WACrD9D,EAAE4D,SAASjC,GAAG1B,aAAa4D,OAAOC,SAAU,SAASvB,EAAGwB,WAC/CzB,aAAayB,KAAKX,eACvBW,KAAKX,cAAcO,kBACrB5B,KAAKH,QACTG,KAAKH,OAEP5B,EAAEM,mBAAmB0D,MAAM,WACnBzD,YACK0B,YAEXF,KAAKH,OAIP5B,EAAEM,kBAAkBqB,GAAG,qDAAqD,SAASY,OAG7EG,OAFS1C,EAAEuC,EAAEC,QAAQC,QAAQnC,kBAEba,KAAK,eACzBhB,OAAO8C,QAAQ,wBAAyBP,UAIzC,MACK,kBACG,IAAIhC"} boost/amd/build/sticky-footer.min.js 0000604 00000004163 15062070724 0013457 0 ustar 00 define("theme_boost/sticky-footer",["exports","core/pending","core/sticky-footer"],(function(_exports,_pending,_stickyFooter){var obj; /** * Sticky footer module. * * @module theme_boost/sticky-footer * @copyright 2022 Ferran Recio <ferran@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=_exports.enableStickyFooter=_exports.disableStickyFooter=void 0,_pending=(obj=_pending)&&obj.__esModule?obj:{default:obj};const SELECTORS_STICKYFOOTER=".stickyfooter",SELECTORS_PAGE="#page",CLASSES_HASSTICKYFOOTER="hasstickyfooter";let initialized=!1,previousScrollPosition=0,enabled=!1;const scrollSpy=()=>{if(!enabled)return;if(document.body.clientWidth>=768)return;let scrollPosition=window.scrollY;scrollPosition>previousScrollPosition?hideStickyFooter():showStickyFooter(),previousScrollPosition=scrollPosition},showStickyFooter=()=>{const pendingPromise=new _pending.default("theme_boost/sticky-footer:enabling"),footer=document.querySelector(SELECTORS_STICKYFOOTER),page=document.querySelector(SELECTORS_PAGE);footer&&page&&(document.body.classList.add(CLASSES_HASSTICKYFOOTER),page.classList.add(CLASSES_HASSTICKYFOOTER)),setTimeout((()=>pendingPromise.resolve()),1e3)},hideStickyFooter=()=>{document.body.classList.remove(CLASSES_HASSTICKYFOOTER);const page=document.querySelector(SELECTORS_PAGE);null==page||page.classList.remove(CLASSES_HASSTICKYFOOTER)},enableStickyFooter=()=>{enabled=!0,showStickyFooter()};_exports.enableStickyFooter=enableStickyFooter;const disableStickyFooter=()=>{enabled=!1,hideStickyFooter()};_exports.disableStickyFooter=disableStickyFooter;_exports.init=()=>{initialized||document.body.classList.contains("behat-site")?(0,_stickyFooter.init)():(initialized=!0,(()=>{const footer=document.querySelector(SELECTORS_STICKYFOOTER);return!!footer&&!!footer.dataset.disable})()||enableStickyFooter(),document.addEventListener("scroll",scrollSpy),(0,_stickyFooter.registerManager)({enableStickyFooter:enableStickyFooter,disableStickyFooter:disableStickyFooter}))}})); //# sourceMappingURL=sticky-footer.min.js.map boost/amd/build/toast.min.js.map 0000604 00000000135 15062070724 0012556 0 ustar 00 {"version":3,"file":"toast.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} boost/amd/build/pending.min.js.map 0000604 00000010151 15062070724 0013047 0 ustar 00 {"version":3,"file":"pending.min.js","sources":["../src/pending.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Add Pending JS checks to stock Bootstrap transitions.\n *\n * @module theme_boost/pending\n * @copyright 2019 Andrew Nicols <andrew@nicols.co.uk>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport jQuery from 'jquery';\nconst moduleTransitions = {\n alert: [\n // Alert.\n {\n start: 'close',\n end: 'closed',\n },\n ],\n\n carousel: [\n {\n start: 'slide',\n end: 'slid',\n },\n ],\n\n collapse: [\n {\n start: 'hide',\n end: 'hidden',\n },\n {\n start: 'show',\n end: 'shown',\n },\n ],\n\n dropdown: [\n {\n start: 'hide',\n end: 'hidden',\n },\n {\n start: 'show',\n end: 'shown',\n },\n ],\n\n modal: [\n {\n start: 'hide',\n end: 'hidden',\n },\n {\n start: 'show',\n end: 'shown',\n },\n ],\n\n popover: [\n {\n start: 'hide',\n end: 'hidden',\n },\n {\n start: 'show',\n end: 'shown',\n },\n ],\n\n tab: [\n {\n start: 'hide',\n end: 'hidden',\n },\n {\n start: 'show',\n end: 'shown',\n },\n ],\n\n toast: [\n {\n start: 'hide',\n end: 'hidden',\n },\n {\n start: 'show',\n end: 'shown',\n },\n ],\n\n tooltip: [\n {\n start: 'hide',\n end: 'hidden',\n },\n {\n start: 'show',\n end: 'shown',\n },\n ],\n};\n\nexport default () => {\n Object.entries(moduleTransitions).forEach(([key, pairs]) => {\n pairs.forEach(pair => {\n const eventStart = `${pair.start}.bs.${key}`;\n const eventEnd = `${pair.end}.bs.${key}`;\n jQuery(document.body).on(eventStart, e => {\n M.util.js_pending(eventEnd);\n jQuery(e.target).one(eventEnd, () => {\n M.util.js_complete(eventEnd);\n });\n });\n\n });\n });\n};\n"],"names":["moduleTransitions","alert","start","end","carousel","collapse","dropdown","modal","popover","tab","toast","tooltip","Object","entries","forEach","_ref","key","pairs","pair","eventStart","eventEnd","document","body","on","e","M","util","js_pending","target","one","js_complete"],"mappings":";;;;;;;mJAwBMA,kBAAoB,CACtBC,MAAO,CAEH,CACIC,MAAO,QACPC,IAAK,WAIbC,SAAU,CACN,CACIF,MAAO,QACPC,IAAK,SAIbE,SAAU,CACN,CACIH,MAAO,OACPC,IAAK,UAET,CACID,MAAO,OACPC,IAAK,UAIbG,SAAU,CACN,CACIJ,MAAO,OACPC,IAAK,UAET,CACID,MAAO,OACPC,IAAK,UAIbI,MAAO,CACH,CACIL,MAAO,OACPC,IAAK,UAET,CACID,MAAO,OACPC,IAAK,UAIbK,QAAS,CACL,CACIN,MAAO,OACPC,IAAK,UAET,CACID,MAAO,OACPC,IAAK,UAIbM,IAAK,CACD,CACIP,MAAO,OACPC,IAAK,UAET,CACID,MAAO,OACPC,IAAK,UAIbO,MAAO,CACH,CACIR,MAAO,OACPC,IAAK,UAET,CACID,MAAO,OACPC,IAAK,UAIbQ,QAAS,CACL,CACIT,MAAO,OACPC,IAAK,UAET,CACID,MAAO,OACPC,IAAK,mCAKF,KACXS,OAAOC,QAAQb,mBAAmBc,SAAQC,WAAEC,IAAKC,YAC7CA,MAAMH,SAAQI,aACJC,qBAAgBD,KAAKhB,qBAAYc,KACjCI,mBAAcF,KAAKf,mBAAUa,yBAC5BK,SAASC,MAAMC,GAAGJ,YAAYK,IACjCC,EAAEC,KAAKC,WAAWP,8BACXI,EAAEI,QAAQC,IAAIT,UAAU,KAC3BK,EAAEC,KAAKI,YAAYV"} boost/amd/build/form-display-errors.min.js.map 0000604 00000017130 15062070724 0015347 0 ustar 00 {"version":3,"file":"form-display-errors.min.js","sources":["../src/form-display-errors.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Custom form error event handler to manipulate the bootstrap markup and show\n * nicely styled errors in an mform.\n *\n * @module theme_boost/form-display-errors\n * @copyright 2016 Damyon Wiese <damyon@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core_form/events'], function($, FormEvent) {\n return {\n /**\n * Enhance the supplied element to handle form field errors.\n *\n * @method\n * @param {String} elementid\n * @listens event:formFieldValidationFailed\n */\n enhance: function(elementid) {\n var element = document.getElementById(elementid);\n if (!element) {\n // Some elements (e.g. static) don't have a form field.\n // Hence there is no validation. So, no setup required here.\n return;\n }\n\n element.addEventListener(FormEvent.eventTypes.formFieldValidationFailed, e => {\n const msg = e.detail.message;\n e.preventDefault();\n\n var parent = $(element).closest('.form-group');\n var feedback = parent.find('.form-control-feedback');\n const feedbackId = feedback.attr('id');\n\n // Get current aria-describedby value.\n let describedBy = $(element).attr('aria-describedby');\n if (typeof describedBy === \"undefined\") {\n describedBy = '';\n }\n // Split aria-describedby attribute into an array of IDs if necessary.\n let describedByIds = [];\n if (describedBy.length) {\n describedByIds = describedBy.split(\" \");\n }\n // Find the the feedback container in the aria-describedby attribute.\n const feedbackIndex = describedByIds.indexOf(feedbackId);\n\n // Sometimes (atto) we have a hidden textarea backed by a real contenteditable div.\n if (($(element).prop(\"tagName\") == 'TEXTAREA') && parent.find('[contenteditable]').length > 0) {\n element = parent.find('[contenteditable]');\n }\n if (msg !== '') {\n parent.addClass('has-danger');\n parent.data('client-validation-error', true);\n $(element).addClass('is-invalid');\n // Append the feedback ID to the aria-describedby attribute if it doesn't exist yet.\n if (feedbackIndex === -1) {\n describedByIds.push(feedbackId);\n $(element).attr('aria-describedby', describedByIds.join(\" \"));\n }\n $(element).attr('aria-invalid', true);\n feedback.attr('tabindex', 0);\n feedback.html(msg);\n\n // Only display and focus when the error was not already visible.\n // This is so that, when tabbing around the form, you don't get stuck.\n if (!feedback.is(':visible')) {\n feedback.show();\n feedback.focus();\n }\n\n } else {\n if (parent.data('client-validation-error') === true) {\n parent.removeClass('has-danger');\n parent.data('client-validation-error', false);\n $(element).removeClass('is-invalid');\n // If the aria-describedby attribute contains the error container's ID, remove it.\n if (feedbackIndex > -1) {\n describedByIds.splice(feedbackIndex, 1);\n }\n // Check the remaining element IDs in the aria-describedby attribute.\n if (describedByIds.length) {\n // If there's at least one, combine them with a blank space and update the aria-describedby attribute.\n describedBy = describedByIds.join(\" \");\n // Put back the new describedby attribute.\n $(element).attr('aria-describedby', describedBy);\n } else {\n // If there's none, remove the aria-describedby attribute.\n $(element).removeAttr('aria-describedby');\n }\n $(element).attr('aria-invalid', false);\n feedback.hide();\n }\n }\n });\n\n var form = element.closest('form');\n if (form && !('boostFormErrorsEnhanced' in form.dataset)) {\n form.addEventListener('submit', function() {\n var visibleError = $('.form-control-feedback:visible');\n if (visibleError.length) {\n visibleError[0].focus();\n }\n });\n form.dataset.boostFormErrorsEnhanced = 1;\n }\n }\n };\n});\n"],"names":["define","$","FormEvent","enhance","elementid","element","document","getElementById","addEventListener","eventTypes","formFieldValidationFailed","e","msg","detail","message","preventDefault","parent","closest","feedback","find","feedbackId","attr","describedBy","describedByIds","length","split","feedbackIndex","indexOf","prop","addClass","data","push","join","html","is","show","focus","removeClass","splice","removeAttr","hide","form","dataset","visibleError","boostFormErrorsEnhanced"],"mappings":";;;;;;;;AAuBAA,yCAAO,CAAC,SAAU,qBAAqB,SAASC,EAAGC,iBACxC,CAQHC,QAAS,SAASC,eACVC,QAAUC,SAASC,eAAeH,cACjCC,SAMLA,QAAQG,iBAAiBN,UAAUO,WAAWC,2BAA2BC,UAC/DC,IAAMD,EAAEE,OAAOC,QACrBH,EAAEI,qBAEEC,OAASf,EAAEI,SAASY,QAAQ,eAC5BC,SAAWF,OAAOG,KAAK,gCACrBC,WAAaF,SAASG,KAAK,UAG7BC,YAAcrB,EAAEI,SAASgB,KAAK,yBACP,IAAhBC,cACPA,YAAc,QAGdC,eAAiB,GACjBD,YAAYE,SACZD,eAAiBD,YAAYG,MAAM,YAGjCC,cAAgBH,eAAeI,QAAQP,YAGV,YAA9BnB,EAAEI,SAASuB,KAAK,YAA6BZ,OAAOG,KAAK,qBAAqBK,OAAS,IACxFnB,QAAUW,OAAOG,KAAK,sBAEd,KAARP,KACAI,OAAOa,SAAS,cAChBb,OAAOc,KAAK,2BAA2B,GACvC7B,EAAEI,SAASwB,SAAS,eAEG,IAAnBH,gBACAH,eAAeQ,KAAKX,YACpBnB,EAAEI,SAASgB,KAAK,mBAAoBE,eAAeS,KAAK,OAE5D/B,EAAEI,SAASgB,KAAK,gBAAgB,GAChCH,SAASG,KAAK,WAAY,GAC1BH,SAASe,KAAKrB,KAITM,SAASgB,GAAG,cACbhB,SAASiB,OACTjB,SAASkB,WAIkC,IAA3CpB,OAAOc,KAAK,6BACZd,OAAOqB,YAAY,cACnBrB,OAAOc,KAAK,2BAA2B,GACvC7B,EAAEI,SAASgC,YAAY,cAEnBX,eAAiB,GACjBH,eAAee,OAAOZ,cAAe,GAGrCH,eAAeC,QAEfF,YAAcC,eAAeS,KAAK,KAElC/B,EAAEI,SAASgB,KAAK,mBAAoBC,cAGpCrB,EAAEI,SAASkC,WAAW,oBAE1BtC,EAAEI,SAASgB,KAAK,gBAAgB,GAChCH,SAASsB,eAKjBC,KAAOpC,QAAQY,QAAQ,QACvBwB,QAAU,4BAA6BA,KAAKC,WAC5CD,KAAKjC,iBAAiB,UAAU,eACxBmC,aAAe1C,EAAE,kCACjB0C,aAAanB,QACbmB,aAAa,GAAGP,WAGxBK,KAAKC,QAAQE,wBAA0B"} boost/amd/build/popover.min.js.map 0000604 00000000137 15062070724 0013120 0 ustar 00 {"version":3,"file":"popover.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} boost/amd/build/aria.min.js.map 0000604 00000062505 15062070724 0012351 0 ustar 00 {"version":3,"file":"aria.min.js","sources":["../src/aria.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Enhancements to Bootstrap components for accessibility.\n *\n * @module theme_boost/aria\n * @copyright 2018 Damyon Wiese <damyon@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport Pending from 'core/pending';\n\n/**\n * Drop downs from bootstrap don't support keyboard accessibility by default.\n */\nconst dropdownFix = () => {\n let focusEnd = false;\n const setFocusEnd = (end = true) => {\n focusEnd = end;\n };\n const getFocusEnd = () => {\n const result = focusEnd;\n focusEnd = false;\n return result;\n };\n\n // Special handling for navigation keys when menu is open.\n const shiftFocus = (element, focusCheck = null) => {\n const pendingPromise = new Pending('core/aria:delayed-focus');\n setTimeout(() => {\n if (!focusCheck || focusCheck()) {\n element.focus();\n }\n\n pendingPromise.resolve();\n }, 50);\n };\n\n // Event handling for the dropdown menu button.\n const handleMenuButton = e => {\n const trigger = e.key;\n let fixFocus = false;\n\n // Space key or Enter key opens the menu.\n if (trigger === ' ' || trigger === 'Enter') {\n fixFocus = true;\n // Cancel random scroll.\n e.preventDefault();\n // Open the menu instead.\n e.target.click();\n }\n\n // Up and Down keys also open the menu.\n if (trigger === 'ArrowUp' || trigger === 'ArrowDown') {\n fixFocus = true;\n }\n\n if (!fixFocus) {\n // No need to fix the focus. Return early.\n return;\n }\n\n // Fix the focus on the menu items when the menu is opened.\n const menu = e.target.parentElement.querySelector('[role=\"menu\"]');\n let menuItems = false;\n let foundMenuItem = false;\n let textInput = false;\n\n if (menu) {\n menuItems = menu.querySelectorAll('[role=\"menuitem\"]');\n textInput = e.target.parentElement.querySelector('[data-action=\"search\"]');\n }\n\n if (menuItems && menuItems.length > 0) {\n // Up key opens the menu at the end.\n if (trigger === 'ArrowUp') {\n setFocusEnd();\n } else {\n setFocusEnd(false);\n }\n\n if (getFocusEnd()) {\n foundMenuItem = menuItems[menuItems.length - 1];\n } else {\n // The first menu entry, pretty reasonable.\n foundMenuItem = menuItems[0];\n }\n }\n\n if (textInput) {\n shiftFocus(textInput);\n }\n if (foundMenuItem && textInput === null) {\n shiftFocus(foundMenuItem);\n }\n };\n\n // Search for menu items by finding the first item that has\n // text starting with the typed character (case insensitive).\n document.addEventListener('keypress', e => {\n if (e.target.matches('.dropdown [role=\"menu\"] [role=\"menuitem\"]')) {\n const menu = e.target.closest('[role=\"menu\"]');\n if (!menu) {\n return;\n }\n const menuItems = menu.querySelectorAll('[role=\"menuitem\"]');\n if (!menuItems) {\n return;\n }\n\n const trigger = e.key.toLowerCase();\n\n for (let i = 0; i < menuItems.length; i++) {\n const item = menuItems[i];\n const itemText = item.text.trim().toLowerCase();\n if (itemText.indexOf(trigger) == 0) {\n shiftFocus(item);\n break;\n }\n }\n }\n });\n\n // Keyboard navigation for arrow keys, home and end keys.\n document.addEventListener('keydown', e => {\n\n // We only want to set focus when users access the dropdown via keyboard as per\n // guidelines defined in w3 aria practices 1.1 menu-button.\n if (e.target.matches('[data-toggle=\"dropdown\"]')) {\n handleMenuButton(e);\n }\n\n if (e.target.matches('.dropdown [role=\"menu\"] [role=\"menuitem\"]')) {\n const trigger = e.key;\n let next = false;\n const menu = e.target.closest('[role=\"menu\"]');\n\n if (!menu) {\n return;\n }\n const menuItems = menu.querySelectorAll('[role=\"menuitem\"]');\n if (!menuItems) {\n return;\n }\n // Down key.\n if (trigger == 'ArrowDown') {\n for (let i = 0; i < menuItems.length - 1; i++) {\n if (menuItems[i] == e.target) {\n next = menuItems[i + 1];\n break;\n }\n }\n if (!next) {\n // Wrap to first item.\n next = menuItems[0];\n }\n } else if (trigger == 'ArrowUp') {\n // Up key.\n for (let i = 1; i < menuItems.length; i++) {\n if (menuItems[i] == e.target) {\n next = menuItems[i - 1];\n break;\n }\n }\n if (!next) {\n // Wrap to last item.\n next = menuItems[menuItems.length - 1];\n }\n } else if (trigger == 'Home') {\n // Home key.\n next = menuItems[0];\n\n } else if (trigger == 'End') {\n // End key.\n next = menuItems[menuItems.length - 1];\n }\n\n // Variable next is set if we do want to act on the keypress.\n if (next) {\n e.preventDefault();\n shiftFocus(next);\n }\n return;\n }\n });\n\n $('.dropdown').on('hidden.bs.dropdown', e => {\n // We need to focus on the menu trigger.\n const trigger = e.target.querySelector('[data-toggle=\"dropdown\"]');\n const focused = document.activeElement != document.body ? document.activeElement : null;\n if (trigger && focused && e.target.contains(focused)) {\n shiftFocus(trigger, () => {\n if (document.activeElement === document.body) {\n // If the focus is currently on the body, then we can safely assume that the focus needs to be updated.\n return true;\n }\n\n // If the focus is on a child of the clicked element still, then update the focus.\n return e.target.contains(document.activeElement);\n });\n }\n });\n};\n\n/**\n * A lot of Bootstrap's out of the box features don't work if dropdown items are not focusable.\n */\nconst comboboxFix = () => {\n $(document).on('show.bs.dropdown', e => {\n if (e.relatedTarget.matches('[role=\"combobox\"]')) {\n const combobox = e.relatedTarget;\n const listbox = document.querySelector(`#${combobox.getAttribute('aria-controls')}[role=\"listbox\"]`);\n\n if (listbox) {\n const selectedOption = listbox.querySelector('[role=\"option\"][aria-selected=\"true\"]');\n\n // To make sure ArrowDown doesn't move the active option afterwards.\n setTimeout(() => {\n if (selectedOption) {\n selectedOption.classList.add('active');\n combobox.setAttribute('aria-activedescendant', selectedOption.id);\n } else {\n const firstOption = listbox.querySelector('[role=\"option\"]');\n firstOption.setAttribute('aria-selected', 'true');\n firstOption.classList.add('active');\n combobox.setAttribute('aria-activedescendant', firstOption.id);\n }\n }, 0);\n }\n }\n });\n\n $(document).on('hidden.bs.dropdown', e => {\n if (e.relatedTarget.matches('[role=\"combobox\"]')) {\n const combobox = e.relatedTarget;\n const listbox = document.querySelector(`#${combobox.getAttribute('aria-controls')}[role=\"listbox\"]`);\n\n combobox.removeAttribute('aria-activedescendant');\n\n if (listbox) {\n setTimeout(() => {\n // Undo all previously highlighted options.\n listbox.querySelectorAll('.active[role=\"option\"]').forEach(option => {\n option.classList.remove('active');\n });\n }, 0);\n }\n }\n });\n\n // Handling keyboard events for both navigating through and selecting options.\n document.addEventListener('keydown', e => {\n if (e.target.matches('[role=\"combobox\"][aria-controls]:not([aria-haspopup=dialog])')) {\n const combobox = e.target;\n const trigger = e.key;\n let next = null;\n const listbox = document.querySelector(`#${combobox.getAttribute('aria-controls')}[role=\"listbox\"]`);\n const options = listbox.querySelectorAll('[role=\"option\"]');\n const activeOption = listbox.querySelector('.active[role=\"option\"]');\n const editable = combobox.hasAttribute('aria-autocomplete');\n\n // Under the special case that the dropdown menu is being shown as a result of the key press (like when the user\n // presses ArrowDown or Enter or ... to open the dropdown menu), activeOption is not set yet.\n // It's because of a race condition with show.bs.dropdown event handler.\n if (options && (activeOption || editable)) {\n if (trigger == 'ArrowDown') {\n for (let i = 0; i < options.length - 1; i++) {\n if (options[i] == activeOption) {\n next = options[i + 1];\n break;\n }\n }\n if (editable && !next) {\n next = options[0];\n }\n } if (trigger == 'ArrowUp') {\n for (let i = 1; i < options.length; i++) {\n if (options[i] == activeOption) {\n next = options[i - 1];\n break;\n }\n }\n if (editable && !next) {\n next = options[options.length - 1];\n }\n } else if (trigger == 'Home') {\n next = options[0];\n } else if (trigger == 'End') {\n next = options[options.length - 1];\n } else if ((trigger == ' ' && !editable) || trigger == 'Enter') {\n e.preventDefault();\n selectOption(combobox, activeOption);\n } else if (!editable) {\n // Search for options by finding the first option that has\n // text starting with the typed character (case insensitive).\n for (let i = 0; i < options.length; i++) {\n const option = options[i];\n const optionText = option.textContent.trim().toLowerCase();\n const keyPressed = e.key.toLowerCase();\n if (optionText.indexOf(keyPressed) == 0) {\n next = option;\n break;\n }\n }\n }\n\n // Variable next is set if we do want to act on the keypress.\n if (next) {\n e.preventDefault();\n if (activeOption) {\n activeOption.classList.remove('active');\n }\n next.classList.add('active');\n combobox.setAttribute('aria-activedescendant', next.id);\n next.scrollIntoView({block: 'nearest'});\n }\n }\n }\n });\n\n document.addEventListener('click', e => {\n const option = e.target.closest('[role=\"listbox\"] [role=\"option\"]');\n if (option) {\n const listbox = option.closest('[role=\"listbox\"]');\n const combobox = document.querySelector(`[role=\"combobox\"][aria-controls=\"${listbox.id}\"]`);\n if (combobox) {\n combobox.focus();\n selectOption(combobox, option);\n }\n }\n });\n\n // In case some code somewhere else changes the value of the combobox.\n document.addEventListener('change', e => {\n if (e.target.matches('input[type=\"hidden\"][id]')) {\n const combobox = document.querySelector(`[role=\"combobox\"][data-input-element=\"${e.target.id}\"]`);\n const option = e.target.parentElement.querySelector(`[role=\"option\"][data-value=\"${e.target.value}\"]`);\n\n if (combobox && option) {\n selectOption(combobox, option);\n }\n }\n });\n\n const selectOption = (combobox, option) => {\n const listbox = option.closest('[role=\"listbox\"]');\n const oldSelectedOption = listbox.querySelector('[role=\"option\"][aria-selected=\"true\"]');\n\n if (oldSelectedOption != option) {\n if (oldSelectedOption) {\n oldSelectedOption.removeAttribute('aria-selected');\n }\n option.setAttribute('aria-selected', 'true');\n }\n\n if (combobox.hasAttribute('value')) {\n combobox.value = option.textContent.replace(/[\\n\\r]+|[\\s]{2,}/g, ' ').trim();\n } else {\n combobox.textContent = option.textContent;\n }\n\n if (combobox.dataset.inputElement) {\n const inputElement = document.getElementById(combobox.dataset.inputElement);\n if (inputElement && (inputElement.value != option.dataset.value)) {\n inputElement.value = option.dataset.value;\n inputElement.dispatchEvent(new Event('change', {bubbles: true}));\n }\n }\n };\n};\n\n/**\n * After page load, focus on any element with special autofocus attribute.\n */\nconst autoFocus = () => {\n window.addEventListener(\"load\", () => {\n const alerts = document.querySelectorAll('[data-aria-autofocus=\"true\"][role=\"alert\"]');\n Array.prototype.forEach.call(alerts, autofocusElement => {\n // According to the specification an role=\"alert\" region is only read out on change to the content\n // of that region.\n autofocusElement.innerHTML += ' ';\n autofocusElement.removeAttribute('data-aria-autofocus');\n });\n });\n};\n\n/**\n * Changes the focus to the correct tab based on the key that is pressed.\n * @param {KeyboardEvent} e\n */\nconst updateTabFocus = e => {\n const tabList = e.target.closest('[role=\"tablist\"]');\n const vertical = tabList.getAttribute('aria-orientation') == 'vertical';\n const rtl = window.right_to_left();\n const arrowNext = vertical ? 'ArrowDown' : (rtl ? 'ArrowLeft' : 'ArrowRight');\n const arrowPrevious = vertical ? 'ArrowUp' : (rtl ? 'ArrowRight' : 'ArrowLeft');\n const tabs = Array.prototype.filter.call(\n tabList.querySelectorAll('[role=\"tab\"]'),\n tab => !!tab.offsetHeight); // We only work with the visible tabs.\n\n for (let i = 0; i < tabs.length; i++) {\n tabs[i].index = i;\n }\n\n switch (e.key) {\n case arrowNext:\n e.preventDefault();\n if (e.target.index !== undefined && tabs[e.target.index + 1]) {\n tabs[e.target.index + 1].focus();\n } else {\n tabs[0].focus();\n }\n break;\n case arrowPrevious:\n e.preventDefault();\n if (e.target.index !== undefined && tabs[e.target.index - 1]) {\n tabs[e.target.index - 1].focus();\n } else {\n tabs[tabs.length - 1].focus();\n }\n break;\n case 'Home':\n e.preventDefault();\n tabs[0].focus();\n break;\n case 'End':\n e.preventDefault();\n tabs[tabs.length - 1].focus();\n }\n};\n\n/**\n * Fix accessibility issues regarding tab elements focus and their tab order in Bootstrap navs.\n */\nconst tabElementFix = () => {\n document.addEventListener('keydown', e => {\n if (['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(e.key)) {\n if (e.target.matches('[role=\"tablist\"] [role=\"tab\"]')) {\n updateTabFocus(e);\n }\n }\n });\n\n document.addEventListener('click', e => {\n if (e.target.matches('[role=\"tablist\"] [data-toggle=\"tab\"], [role=\"tablist\"] [data-toggle=\"pill\"]')) {\n const tabs = e.target.closest('[role=\"tablist\"]').querySelectorAll('[data-toggle=\"tab\"], [data-toggle=\"pill\"]');\n e.preventDefault();\n $(e.target).tab('show');\n tabs.forEach(tab => {\n tab.tabIndex = -1;\n });\n e.target.tabIndex = 0;\n }\n });\n};\n\n/**\n * Fix keyboard interaction with Bootstrap Collapse elements.\n *\n * @see {@link https://www.w3.org/TR/wai-aria-practices-1.1/#disclosure|WAI-ARIA Authoring Practices 1.1 - Disclosure (Show/Hide)}\n */\nconst collapseFix = () => {\n document.addEventListener('keydown', e => {\n if (e.target.matches('[data-toggle=\"collapse\"]')) {\n // Pressing space should toggle expand/collapse.\n if (e.key === ' ') {\n e.preventDefault();\n e.target.click();\n }\n }\n });\n};\n\nexport const init = () => {\n dropdownFix();\n comboboxFix();\n autoFocus();\n tabElementFix();\n collapseFix();\n};\n"],"names":["dropdownFix","focusEnd","setFocusEnd","end","shiftFocus","element","focusCheck","pendingPromise","Pending","setTimeout","focus","resolve","handleMenuButton","e","trigger","key","fixFocus","preventDefault","target","click","menu","parentElement","querySelector","menuItems","foundMenuItem","textInput","querySelectorAll","length","result","getFocusEnd","document","addEventListener","matches","closest","toLowerCase","i","item","text","trim","indexOf","next","on","focused","activeElement","body","contains","tabElementFix","includes","tabList","vertical","getAttribute","rtl","window","right_to_left","arrowNext","arrowPrevious","tabs","Array","prototype","filter","call","tab","offsetHeight","index","undefined","updateTabFocus","forEach","tabIndex","relatedTarget","combobox","listbox","selectedOption","classList","add","setAttribute","id","firstOption","removeAttribute","option","remove","options","activeOption","editable","hasAttribute","selectOption","optionText","textContent","keyPressed","scrollIntoView","block","value","oldSelectedOption","replace","dataset","inputElement","getElementById","dispatchEvent","Event","bubbles","comboboxFix","alerts","autofocusElement","innerHTML"],"mappings":";;;;;;;0KA6BMA,YAAc,SACZC,UAAW,QACTC,YAAc,eAACC,+DACjBF,SAAWE,KASTC,WAAa,SAACC,aAASC,kEAAa,WAChCC,eAAiB,IAAIC,iBAAQ,2BACnCC,YAAW,KACFH,aAAcA,cACfD,QAAQK,QAGZH,eAAeI,YAChB,KAIDC,iBAAmBC,UACfC,QAAUD,EAAEE,QACdC,UAAW,KAGC,MAAZF,SAA+B,UAAZA,UACnBE,UAAW,EAEXH,EAAEI,iBAEFJ,EAAEK,OAAOC,SAIG,YAAZL,SAAqC,cAAZA,UACzBE,UAAW,IAGVA,sBAMCI,KAAOP,EAAEK,OAAOG,cAAcC,cAAc,qBAC9CC,WAAY,EACZC,eAAgB,EAChBC,WAAY,EAEZL,OACAG,UAAYH,KAAKM,iBAAiB,qBAClCD,UAAYZ,EAAEK,OAAOG,cAAcC,cAAc,2BAGjDC,WAAaA,UAAUI,OAAS,IAEhB,YAAZb,QACAZ,cAEAA,aAAY,GAIZsB,cA9DQ,YACVI,OAAS3B,gBACfA,UAAW,EACJ2B,QA0DCC,GACgBN,UAAUA,UAAUI,OAAS,GAG7BJ,UAAU,IAI9BE,WACArB,WAAWqB,WAEXD,eAA+B,OAAdC,WACjBrB,WAAWoB,gBAMnBM,SAASC,iBAAiB,YAAYlB,OAC9BA,EAAEK,OAAOc,QAAQ,6CAA8C,OACzDZ,KAAOP,EAAEK,OAAOe,QAAQ,qBACzBb,kBAGCG,UAAYH,KAAKM,iBAAiB,yBACnCH,uBAICT,QAAUD,EAAEE,IAAImB,kBAEjB,IAAIC,EAAI,EAAGA,EAAIZ,UAAUI,OAAQQ,IAAK,OACjCC,KAAOb,UAAUY,MAEU,GADhBC,KAAKC,KAAKC,OAAOJ,cACrBK,QAAQzB,SAAe,CAChCV,WAAWgC,kBAQ3BN,SAASC,iBAAiB,WAAWlB,OAI7BA,EAAEK,OAAOc,QAAQ,6BACjBpB,iBAAiBC,GAGjBA,EAAEK,OAAOc,QAAQ,oDACXlB,QAAUD,EAAEE,QACdyB,MAAO,QACLpB,KAAOP,EAAEK,OAAOe,QAAQ,qBAEzBb,kBAGCG,UAAYH,KAAKM,iBAAiB,yBACnCH,oBAIU,aAAXT,QAAwB,KACnB,IAAIqB,EAAI,EAAGA,EAAIZ,UAAUI,OAAS,EAAGQ,OAClCZ,UAAUY,IAAMtB,EAAEK,OAAQ,CAC1BsB,KAAOjB,UAAUY,EAAI,SAIxBK,OAEDA,KAAOjB,UAAU,SAElB,GAAe,WAAXT,QAAsB,KAExB,IAAIqB,EAAI,EAAGA,EAAIZ,UAAUI,OAAQQ,OAC9BZ,UAAUY,IAAMtB,EAAEK,OAAQ,CAC1BsB,KAAOjB,UAAUY,EAAI,SAIxBK,OAEDA,KAAOjB,UAAUA,UAAUI,OAAS,QAEtB,QAAXb,QAEP0B,KAAOjB,UAAU,GAEC,OAAXT,UAEP0B,KAAOjB,UAAUA,UAAUI,OAAS,IAIpCa,OACA3B,EAAEI,iBACFb,WAAWoC,oCAMrB,aAAaC,GAAG,sBAAsB5B,UAE9BC,QAAUD,EAAEK,OAAOI,cAAc,4BACjCoB,QAAUZ,SAASa,eAAiBb,SAASc,KAAOd,SAASa,cAAgB,KAC/E7B,SAAW4B,SAAW7B,EAAEK,OAAO2B,SAASH,UACxCtC,WAAWU,SAAS,IACZgB,SAASa,gBAAkBb,SAASc,MAMjC/B,EAAEK,OAAO2B,SAASf,SAASa,qBA4O5CG,cAAgB,KAClBhB,SAASC,iBAAiB,WAAWlB,IAC7B,CAAC,UAAW,YAAa,YAAa,aAAc,OAAQ,OAAOkC,SAASlC,EAAEE,MAC1EF,EAAEK,OAAOc,QAAQ,kCA/CVnB,CAAAA,UACbmC,QAAUnC,EAAEK,OAAOe,QAAQ,oBAC3BgB,SAAuD,YAA5CD,QAAQE,aAAa,oBAChCC,IAAMC,OAAOC,gBACbC,UAAYL,SAAW,YAAeE,IAAM,YAAc,aAC1DI,cAAgBN,SAAW,UAAaE,IAAM,aAAe,YAC7DK,KAAOC,MAAMC,UAAUC,OAAOC,KAChCZ,QAAQtB,iBAAiB,iBACzBmC,OAASA,IAAIC,mBAEZ,IAAI3B,EAAI,EAAGA,EAAIqB,KAAK7B,OAAQQ,IAC7BqB,KAAKrB,GAAG4B,MAAQ5B,SAGZtB,EAAEE,UACDuC,UACDzC,EAAEI,sBACqB+C,IAAnBnD,EAAEK,OAAO6C,OAAuBP,KAAK3C,EAAEK,OAAO6C,MAAQ,GACtDP,KAAK3C,EAAEK,OAAO6C,MAAQ,GAAGrD,QAEzB8C,KAAK,GAAG9C,mBAGX6C,cACD1C,EAAEI,sBACqB+C,IAAnBnD,EAAEK,OAAO6C,OAAuBP,KAAK3C,EAAEK,OAAO6C,MAAQ,GACtDP,KAAK3C,EAAEK,OAAO6C,MAAQ,GAAGrD,QAEzB8C,KAAKA,KAAK7B,OAAS,GAAGjB,kBAGzB,OACDG,EAAEI,iBACFuC,KAAK,GAAG9C,kBAEP,MACDG,EAAEI,iBACFuC,KAAKA,KAAK7B,OAAS,GAAGjB,UAWlBuD,CAAepD,MAK3BiB,SAASC,iBAAiB,SAASlB,OAC3BA,EAAEK,OAAOc,QAAQ,+EAAgF,OAC3FwB,KAAO3C,EAAEK,OAAOe,QAAQ,oBAAoBP,iBAAiB,6CACnEb,EAAEI,qCACAJ,EAAEK,QAAQ2C,IAAI,QAChBL,KAAKU,SAAQL,MACTA,IAAIM,UAAY,KAEpBtD,EAAEK,OAAOiD,SAAW,qBAsBZ,KAChBnE,cA3QgB,0BACd8B,UAAUW,GAAG,oBAAoB5B,OAC3BA,EAAEuD,cAAcpC,QAAQ,qBAAsB,OACxCqC,SAAWxD,EAAEuD,cACbE,QAAUxC,SAASR,yBAAkB+C,SAASnB,aAAa,yCAE7DoB,QAAS,OACHC,eAAiBD,QAAQhD,cAAc,yCAG7Cb,YAAW,QACH8D,eACAA,eAAeC,UAAUC,IAAI,UAC7BJ,SAASK,aAAa,wBAAyBH,eAAeI,QAC3D,OACGC,YAAcN,QAAQhD,cAAc,mBAC1CsD,YAAYF,aAAa,gBAAiB,QAC1CE,YAAYJ,UAAUC,IAAI,UAC1BJ,SAASK,aAAa,wBAAyBE,YAAYD,OAEhE,4BAKb7C,UAAUW,GAAG,sBAAsB5B,OAC7BA,EAAEuD,cAAcpC,QAAQ,qBAAsB,OACxCqC,SAAWxD,EAAEuD,cACbE,QAAUxC,SAASR,yBAAkB+C,SAASnB,aAAa,sCAEjEmB,SAASQ,gBAAgB,yBAErBP,SACA7D,YAAW,KAEP6D,QAAQ5C,iBAAiB,0BAA0BwC,SAAQY,SACvDA,OAAON,UAAUO,OAAO,eAE7B,OAMfjD,SAASC,iBAAiB,WAAWlB,OAC7BA,EAAEK,OAAOc,QAAQ,gEAAiE,OAC5EqC,SAAWxD,EAAEK,OACbJ,QAAUD,EAAEE,QACdyB,KAAO,WACL8B,QAAUxC,SAASR,yBAAkB+C,SAASnB,aAAa,sCAC3D8B,QAAUV,QAAQ5C,iBAAiB,mBACnCuD,aAAeX,QAAQhD,cAAc,0BACrC4D,SAAWb,SAASc,aAAa,wBAKnCH,UAAYC,cAAgBC,UAAW,IACxB,aAAXpE,QAAwB,KACnB,IAAIqB,EAAI,EAAGA,EAAI6C,QAAQrD,OAAS,EAAGQ,OAChC6C,QAAQ7C,IAAM8C,aAAc,CAC5BzC,KAAOwC,QAAQ7C,EAAI,SAIvB+C,WAAa1C,OACbA,KAAOwC,QAAQ,OAEN,WAAXlE,QAAsB,KACnB,IAAIqB,EAAI,EAAGA,EAAI6C,QAAQrD,OAAQQ,OAC5B6C,QAAQ7C,IAAM8C,aAAc,CAC5BzC,KAAOwC,QAAQ7C,EAAI,SAIvB+C,WAAa1C,OACbA,KAAOwC,QAAQA,QAAQrD,OAAS,SAEjC,GAAe,QAAXb,QACP0B,KAAOwC,QAAQ,QACZ,GAAe,OAAXlE,QACP0B,KAAOwC,QAAQA,QAAQrD,OAAS,QAC7B,GAAgB,KAAXb,UAAmBoE,UAAwB,SAAXpE,QACxCD,EAAEI,iBACFmE,aAAaf,SAAUY,mBACpB,IAAKC,aAGH,IAAI/C,EAAI,EAAGA,EAAI6C,QAAQrD,OAAQQ,IAAK,OAC/B2C,OAASE,QAAQ7C,GACjBkD,WAAaP,OAAOQ,YAAYhD,OAAOJ,cACvCqD,WAAa1E,EAAEE,IAAImB,iBACa,GAAlCmD,WAAW9C,QAAQgD,YAAkB,CACrC/C,KAAOsC,cAOftC,OACA3B,EAAEI,iBACEgE,cACAA,aAAaT,UAAUO,OAAO,UAElCvC,KAAKgC,UAAUC,IAAI,UACnBJ,SAASK,aAAa,wBAAyBlC,KAAKmC,IACpDnC,KAAKgD,eAAe,CAACC,MAAO,kBAM5C3D,SAASC,iBAAiB,SAASlB,UACzBiE,OAASjE,EAAEK,OAAOe,QAAQ,uCAC5B6C,OAAQ,OACFR,QAAUQ,OAAO7C,QAAQ,oBACzBoC,SAAWvC,SAASR,yDAAkDgD,QAAQK,UAChFN,WACAA,SAAS3D,QACT0E,aAAaf,SAAUS,aAMnChD,SAASC,iBAAiB,UAAUlB,OAC5BA,EAAEK,OAAOc,QAAQ,4BAA6B,OACxCqC,SAAWvC,SAASR,8DAAuDT,EAAEK,OAAOyD,UACpFG,OAASjE,EAAEK,OAAOG,cAAcC,oDAA6CT,EAAEK,OAAOwE,aAExFrB,UAAYS,QACZM,aAAaf,SAAUS,kBAK7BM,aAAe,CAACf,SAAUS,gBAEtBa,kBADUb,OAAO7C,QAAQ,oBACGX,cAAc,4CAE5CqE,mBAAqBb,SACjBa,mBACAA,kBAAkBd,gBAAgB,iBAEtCC,OAAOJ,aAAa,gBAAiB,SAGrCL,SAASc,aAAa,SACtBd,SAASqB,MAAQZ,OAAOQ,YAAYM,QAAQ,oBAAqB,KAAKtD,OAEtE+B,SAASiB,YAAcR,OAAOQ,YAG9BjB,SAASwB,QAAQC,aAAc,OACzBA,aAAehE,SAASiE,eAAe1B,SAASwB,QAAQC,cAC1DA,cAAiBA,aAAaJ,OAASZ,OAAOe,QAAQH,QACtDI,aAAaJ,MAAQZ,OAAOe,QAAQH,MACpCI,aAAaE,cAAc,IAAIC,MAAM,SAAU,CAACC,SAAS,SA8GrEC,GApGA/C,OAAOrB,iBAAiB,QAAQ,WACtBqE,OAAStE,SAASJ,iBAAiB,8CACzC+B,MAAMC,UAAUQ,QAAQN,KAAKwC,QAAQC,mBAGjCA,iBAAiBC,WAAa,IAC9BD,iBAAiBxB,gBAAgB,6BAgGzC/B,gBAfAhB,SAASC,iBAAiB,WAAWlB,IAC7BA,EAAEK,OAAOc,QAAQ,6BAEH,MAAVnB,EAAEE,MACFF,EAAEI,iBACFJ,EAAEK,OAAOC"} boost/amd/build/footer-popover.min.js 0000604 00000004054 15062070724 0013642 0 ustar 00 define("theme_boost/footer-popover",["exports","jquery","./popover"],(function(_exports,_jquery,_popover){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} /** * Shows the footer content in a popover. * * @module theme_boost/footer-popover * @copyright 2021 Bas Brands * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Popover",{enumerable:!0,get:function(){return _popover.default}}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_popover=_interopRequireDefault(_popover);const SELECTORS_FOOTERCONTAINER='[data-region="footer-container-popover"]',SELECTORS_FOOTERCONTENT='[data-region="footer-content-popover"]',SELECTORS_FOOTERBUTTON='[data-action="footer-popover"]';let footerIsShown=!1;_exports.init=()=>{const container=document.querySelector(SELECTORS_FOOTERCONTAINER),footerButton=document.querySelector(SELECTORS_FOOTERBUTTON);(0,_jquery.default)(footerButton).popover({content:getFooterContent,container:container,html:!0,placement:"top",customClass:"footer",trigger:"click",boundary:"viewport",popperConfig:{modifiers:{preventOverflow:{boundariesElement:"viewport",padding:48},offset:{},flip:{behavior:"flip"},arrow:{element:".arrow"}}}}),document.addEventListener("click",(e=>{footerIsShown&&!e.target.closest(SELECTORS_FOOTERCONTAINER)&&(0,_jquery.default)(footerButton).popover("hide")}),!0),document.addEventListener("keydown",(e=>{footerIsShown&&"Escape"===e.key&&((0,_jquery.default)(footerButton).popover("hide"),footerButton.focus())})),document.addEventListener("focus",(e=>{footerIsShown&&!e.target.closest(SELECTORS_FOOTERCONTAINER)&&(0,_jquery.default)(footerButton).popover("hide")}),!0),(0,_jquery.default)(footerButton).on("show.bs.popover",(()=>{footerIsShown=!0})),(0,_jquery.default)(footerButton).on("hide.bs.popover",(()=>{footerIsShown=!1}))};const getFooterContent=()=>document.querySelector(SELECTORS_FOOTERCONTENT).innerHTML})); //# sourceMappingURL=footer-popover.min.js.map boost/amd/build/pending.min.js 0000604 00000002704 15062070724 0012300 0 ustar 00 define("theme_boost/pending",["exports","jquery"],(function(_exports,_jquery){var obj; /** * Add Pending JS checks to stock Bootstrap transitions. * * @module theme_boost/pending * @copyright 2019 Andrew Nicols <andrew@nicols.co.uk> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&&obj.__esModule?obj:{default:obj};const moduleTransitions={alert:[{start:"close",end:"closed"}],carousel:[{start:"slide",end:"slid"}],collapse:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],dropdown:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],modal:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],popover:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],tab:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],toast:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}],tooltip:[{start:"hide",end:"hidden"},{start:"show",end:"shown"}]};return _exports.default=()=>{Object.entries(moduleTransitions).forEach((_ref=>{let[key,pairs]=_ref;pairs.forEach((pair=>{const eventStart="".concat(pair.start,".bs.").concat(key),eventEnd="".concat(pair.end,".bs.").concat(key);(0,_jquery.default)(document.body).on(eventStart,(e=>{M.util.js_pending(eventEnd),(0,_jquery.default)(e.target).one(eventEnd,(()=>{M.util.js_complete(eventEnd)}))}))}))}))},_exports.default})); //# sourceMappingURL=pending.min.js.map boost/amd/build/drawers.min.js.map 0000604 00000107266 15062070724 0013110 0 ustar 00 {"version":3,"file":"drawers.min.js","sources":["../src/drawers.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Toggling the visibility of the secondary navigation on mobile.\n *\n * @module theme_boost/drawers\n * @copyright 2021 Bas Brands\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\nimport ModalBackdrop from 'core/modal_backdrop';\nimport Templates from 'core/templates';\nimport * as Aria from 'core/aria';\nimport {dispatchEvent} from 'core/event_dispatcher';\nimport {debounce} from 'core/utils';\nimport {isSmall, isLarge} from 'core/pagehelpers';\nimport Pending from 'core/pending';\nimport {setUserPreference} from 'core_user/repository';\n// The jQuery module is only used for interacting with Boostrap 4. It can we removed when MDL-71979 is integrated.\nimport jQuery from 'jquery';\n\nlet backdropPromise = null;\n\nconst drawerMap = new Map();\n\nconst SELECTORS = {\n BUTTONS: '[data-toggler=\"drawers\"]',\n CLOSEBTN: '[data-toggler=\"drawers\"][data-action=\"closedrawer\"]',\n OPENBTN: '[data-toggler=\"drawers\"][data-action=\"opendrawer\"]',\n TOGGLEBTN: '[data-toggler=\"drawers\"][data-action=\"toggle\"]',\n DRAWERS: '[data-region=\"fixed-drawer\"]',\n DRAWERCONTENT: '.drawercontent',\n PAGECONTENT: '#page-content',\n HEADERCONTENT: '.drawerheadercontent',\n};\n\nconst CLASSES = {\n SCROLLED: 'scrolled',\n SHOW: 'show',\n NOTINITIALISED: 'not-initialized',\n};\n\n/**\n * Pixel thresshold to auto-hide drawers.\n *\n * @type {Number}\n */\nconst THRESHOLD = 20;\n\n/**\n * Try to get the drawer z-index from the page content.\n *\n * @returns {Number|null} the z-index of the drawer.\n * @private\n */\nconst getDrawerZIndex = () => {\n const drawer = document.querySelector(SELECTORS.DRAWERS);\n if (!drawer) {\n return null;\n }\n return parseInt(window.getComputedStyle(drawer).zIndex, 10);\n};\n\n/**\n * Add a backdrop to the page.\n *\n * @returns {Promise} rendering of modal backdrop.\n * @private\n */\nconst getBackdrop = () => {\n if (!backdropPromise) {\n backdropPromise = Templates.render('core/modal_backdrop', {})\n .then(html => new ModalBackdrop(html))\n .then(modalBackdrop => {\n const drawerZindex = getDrawerZIndex();\n if (drawerZindex) {\n modalBackdrop.setZIndex(getDrawerZIndex() - 1);\n }\n modalBackdrop.getAttachmentPoint().get(0).addEventListener('click', e => {\n e.preventDefault();\n Drawers.closeAllDrawers();\n });\n return modalBackdrop;\n })\n .catch();\n }\n return backdropPromise;\n};\n\n/**\n * Get the button element to open a specific drawer.\n *\n * @param {String} drawerId the drawer element Id\n * @return {HTMLElement|undefined} the open button element\n * @private\n */\nconst getDrawerOpenButton = (drawerId) => {\n let openButton = document.querySelector(`${SELECTORS.OPENBTN}[data-target=\"${drawerId}\"]`);\n if (!openButton) {\n openButton = document.querySelector(`${SELECTORS.TOGGLEBTN}[data-target=\"${drawerId}\"]`);\n }\n return openButton;\n};\n\n/**\n * Disable drawer tooltips.\n *\n * @param {HTMLElement} drawerNode the drawer main node\n * @private\n */\nconst disableDrawerTooltips = (drawerNode) => {\n const buttons = [\n drawerNode.querySelector(SELECTORS.CLOSEBTN),\n getDrawerOpenButton(drawerNode.id),\n ];\n buttons.forEach(button => {\n if (!button) {\n return;\n }\n disableButtonTooltip(button);\n });\n};\n\n/**\n * Disable the button tooltips.\n *\n * @param {HTMLElement} button the button element\n * @param {boolean} enableOnBlur if the tooltip must be re-enabled on blur.\n * @private\n */\nconst disableButtonTooltip = (button, enableOnBlur) => {\n if (button.hasAttribute('data-original-title')) {\n // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated.\n jQuery(button).tooltip('disable');\n button.setAttribute('title', button.dataset.originalTitle);\n } else {\n button.dataset.disabledToggle = button.dataset.toggle;\n button.removeAttribute('data-toggle');\n }\n if (enableOnBlur) {\n button.dataset.restoreTooltipOnBlur = true;\n }\n};\n\n/**\n * Enable drawer tooltips.\n *\n * @param {HTMLElement} drawerNode the drawer main node\n * @private\n */\nconst enableDrawerTooltips = (drawerNode) => {\n const buttons = [\n drawerNode.querySelector(SELECTORS.CLOSEBTN),\n getDrawerOpenButton(drawerNode.id),\n ];\n buttons.forEach(button => {\n if (!button) {\n return;\n }\n enableButtonTooltip(button);\n });\n};\n\n/**\n * Enable the button tooltips.\n *\n * @param {HTMLElement} button the button element\n * @private\n */\nconst enableButtonTooltip = (button) => {\n // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated.\n if (button.hasAttribute('data-original-title')) {\n jQuery(button).tooltip('enable');\n button.removeAttribute('title');\n } else if (button.dataset.disabledToggle) {\n button.dataset.toggle = button.dataset.disabledToggle;\n jQuery(button).tooltip();\n }\n delete button.dataset.restoreTooltipOnBlur;\n};\n\n/**\n * Add scroll listeners to a drawer element.\n *\n * @param {HTMLElement} drawerNode the drawer main node\n * @private\n */\nconst addInnerScrollListener = (drawerNode) => {\n const content = drawerNode.querySelector(SELECTORS.DRAWERCONTENT);\n if (!content) {\n return;\n }\n content.addEventListener(\"scroll\", () => {\n drawerNode.classList.toggle(\n CLASSES.SCROLLED,\n content.scrollTop != 0\n );\n });\n};\n\n/**\n * The Drawers class is used to control on-screen drawer elements.\n *\n * It handles opening, and closing of drawer elements, as well as more detailed behaviours such as closing a drawer when\n * another drawer is opened, and supports closing a drawer when the screen is resized.\n *\n * Drawers are instantiated on page load, and can also be toggled lazily when toggling any drawer toggle, open button,\n * or close button.\n *\n * A range of show and hide events are also dispatched as detailed in the class\n * {@link module:theme_boost/drawers#eventTypes eventTypes} object.\n *\n * @example <caption>Standard usage</caption>\n *\n * // The module just needs to be included to add drawer support.\n * import 'theme_boost/drawers';\n *\n * @example <caption>Manually open or close any drawer</caption>\n *\n * import Drawers from 'theme_boost/drawers';\n *\n * const myDrawer = Drawers.getDrawerInstanceForNode(document.querySelector('.myDrawerNode');\n * myDrawer.closeDrawer();\n *\n * @example <caption>Listen to the before show event and cancel it</caption>\n *\n * import Drawers from 'theme_boost/drawers';\n *\n * document.addEventListener(Drawers.eventTypes.drawerShow, e => {\n * // The drawer which will be shown.\n * window.console.log(e.target);\n *\n * // The instance of the Drawers class for this drawer.\n * window.console.log(e.detail.drawerInstance);\n *\n * // Prevent this drawer from being shown.\n * e.preventDefault();\n * });\n *\n * @example <caption>Listen to the shown event</caption>\n *\n * document.addEventListener(Drawers.eventTypes.drawerShown, e => {\n * // The drawer which was shown.\n * window.console.log(e.target);\n *\n * // The instance of the Drawers class for this drawer.\n * window.console.log(e.detail.drawerInstance);\n * });\n */\nexport default class Drawers {\n /**\n * The underlying HTMLElement which is controlled.\n */\n drawerNode = null;\n\n /**\n * The drawer page bounding box dimensions.\n * @var {DOMRect} boundingRect\n */\n boundingRect = null;\n\n constructor(drawerNode) {\n // Some behat tests may use fake drawer divs to test components in drawers.\n if (drawerNode.dataset.behatFakeDrawer !== undefined) {\n return;\n }\n\n this.drawerNode = drawerNode;\n\n if (isSmall()) {\n this.closeDrawer({focusOnOpenButton: false, updatePreferences: false});\n }\n\n if (this.drawerNode.classList.contains(CLASSES.SHOW)) {\n this.openDrawer({focusOnCloseButton: false});\n } else if (this.drawerNode.dataset.forceopen == 1) {\n if (!isSmall()) {\n this.openDrawer({focusOnCloseButton: false});\n }\n } else {\n Aria.hide(this.drawerNode);\n }\n\n // Disable tooltips in small screens.\n if (isSmall()) {\n disableDrawerTooltips(this.drawerNode);\n }\n\n addInnerScrollListener(this.drawerNode);\n\n drawerMap.set(drawerNode, this);\n\n drawerNode.classList.remove(CLASSES.NOTINITIALISED);\n }\n\n /**\n * Whether the drawer is open.\n *\n * @returns {boolean}\n */\n get isOpen() {\n return this.drawerNode.classList.contains(CLASSES.SHOW);\n }\n\n /**\n * Whether the drawer should close when the window is resized\n *\n * @returns {boolean}\n */\n get closeOnResize() {\n return !!parseInt(this.drawerNode.dataset.closeOnResize);\n }\n\n /**\n * The list of event types.\n *\n * @static\n * @property {String} drawerShow See {@link event:theme_boost/drawers:show}\n * @property {String} drawerShown See {@link event:theme_boost/drawers:shown}\n * @property {String} drawerHide See {@link event:theme_boost/drawers:hide}\n * @property {String} drawerHidden See {@link event:theme_boost/drawers:hidden}\n */\n static eventTypes = {\n /**\n * An event triggered before a drawer is shown.\n *\n * @event theme_boost/drawers:show\n * @type {CustomEvent}\n * @property {HTMLElement} target The drawer that will be opened.\n */\n drawerShow: 'theme_boost/drawers:show',\n\n /**\n * An event triggered after a drawer is shown.\n *\n * @event theme_boost/drawers:shown\n * @type {CustomEvent}\n * @property {HTMLElement} target The drawer that was be opened.\n */\n drawerShown: 'theme_boost/drawers:shown',\n\n /**\n * An event triggered before a drawer is hidden.\n *\n * @event theme_boost/drawers:hide\n * @type {CustomEvent}\n * @property {HTMLElement} target The drawer that will be hidden.\n */\n drawerHide: 'theme_boost/drawers:hide',\n\n /**\n * An event triggered after a drawer is hidden.\n *\n * @event theme_boost/drawers:hidden\n * @type {CustomEvent}\n * @property {HTMLElement} target The drawer that was be hidden.\n */\n drawerHidden: 'theme_boost/drawers:hidden',\n };\n\n\n /**\n * Get the drawer instance for the specified node\n *\n * @param {HTMLElement} drawerNode\n * @returns {module:theme_boost/drawers}\n */\n static getDrawerInstanceForNode(drawerNode) {\n if (!drawerMap.has(drawerNode)) {\n new Drawers(drawerNode);\n }\n\n return drawerMap.get(drawerNode);\n }\n\n /**\n * Dispatch a drawer event.\n *\n * @param {string} eventname the event name\n * @param {boolean} cancelable if the event is cancelable\n * @returns {CustomEvent} the resulting custom event\n */\n dispatchEvent(eventname, cancelable = false) {\n return dispatchEvent(\n eventname,\n {\n drawerInstance: this,\n },\n this.drawerNode,\n {\n cancelable,\n }\n );\n }\n\n /**\n * Open the drawer.\n *\n * By default, openDrawer sets the page focus to the close drawer button. However, when a drawer is open at page\n * load, this represents an accessibility problem as the initial focus changes without any user interaction. The\n * focusOnCloseButton parameter can be set to false to prevent this behaviour.\n *\n * @param {object} args\n * @param {boolean} [args.focusOnCloseButton=true] Whether to alter page focus when opening the drawer\n */\n openDrawer({focusOnCloseButton = true} = {}) {\n\n const pendingPromise = new Pending('theme_boost/drawers:open');\n const showEvent = this.dispatchEvent(Drawers.eventTypes.drawerShow, true);\n if (showEvent.defaultPrevented) {\n return;\n }\n\n // Hide close button and header content while the drawer is showing to prevent glitchy effects.\n this.drawerNode.querySelector(SELECTORS.CLOSEBTN)?.classList.toggle('hidden', true);\n this.drawerNode.querySelector(SELECTORS.HEADERCONTENT)?.classList.toggle('hidden', true);\n\n\n // Remove open tooltip if still visible.\n let openButton = getDrawerOpenButton(this.drawerNode.id);\n if (openButton && openButton.hasAttribute('data-original-title')) {\n // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated.\n jQuery(openButton)?.tooltip('hide');\n }\n\n Aria.unhide(this.drawerNode);\n this.drawerNode.classList.add(CLASSES.SHOW);\n\n const preference = this.drawerNode.dataset.preference;\n if (preference && !isSmall() && (this.drawerNode.dataset.forceopen != 1)) {\n setUserPreference(preference, true);\n }\n\n const state = this.drawerNode.dataset.state;\n if (state) {\n const page = document.getElementById('page');\n page.classList.add(state);\n }\n\n this.boundingRect = this.drawerNode.getBoundingClientRect();\n\n if (isSmall()) {\n getBackdrop().then(backdrop => {\n backdrop.show();\n\n const pageWrapper = document.getElementById('page');\n pageWrapper.style.overflow = 'hidden';\n return backdrop;\n })\n .catch();\n }\n\n // Show close button and header content once the drawer is fully opened.\n const closeButton = this.drawerNode.querySelector(SELECTORS.CLOSEBTN);\n const headerContent = this.drawerNode.querySelector(SELECTORS.HEADERCONTENT);\n if (focusOnCloseButton && closeButton) {\n disableButtonTooltip(closeButton, true);\n }\n setTimeout(() => {\n closeButton.classList.toggle('hidden', false);\n headerContent.classList.toggle('hidden', false);\n if (focusOnCloseButton) {\n closeButton.focus();\n }\n pendingPromise.resolve();\n }, 300);\n\n this.dispatchEvent(Drawers.eventTypes.drawerShown);\n }\n\n /**\n * Close the drawer.\n *\n * @param {object} args\n * @param {boolean} [args.focusOnOpenButton=true] Whether to alter page focus when opening the drawer\n * @param {boolean} [args.updatePreferences=true] Whether to update the user prewference\n */\n closeDrawer({focusOnOpenButton = true, updatePreferences = true} = {}) {\n\n const pendingPromise = new Pending('theme_boost/drawers:close');\n\n const hideEvent = this.dispatchEvent(Drawers.eventTypes.drawerHide, true);\n if (hideEvent.defaultPrevented) {\n return;\n }\n\n // Hide close button and header content while the drawer is hiding to prevent glitchy effects.\n const closeButton = this.drawerNode.querySelector(SELECTORS.CLOSEBTN);\n closeButton?.classList.toggle('hidden', true);\n const headerContent = this.drawerNode.querySelector(SELECTORS.HEADERCONTENT);\n headerContent?.classList.toggle('hidden', true);\n // Remove the close button tooltip if visible.\n if (closeButton.hasAttribute('data-original-title')) {\n // The jQuery is still used in Boostrap 4. It can we removed when MDL-71979 is integrated.\n jQuery(closeButton)?.tooltip('hide');\n }\n\n const preference = this.drawerNode.dataset.preference;\n if (preference && updatePreferences && !isSmall()) {\n setUserPreference(preference, false);\n }\n\n const state = this.drawerNode.dataset.state;\n if (state) {\n const page = document.getElementById('page');\n page.classList.remove(state);\n }\n\n Aria.hide(this.drawerNode);\n this.drawerNode.classList.remove(CLASSES.SHOW);\n\n getBackdrop().then(backdrop => {\n backdrop.hide();\n\n if (isSmall()) {\n const pageWrapper = document.getElementById('page');\n pageWrapper.style.overflow = 'visible';\n }\n return backdrop;\n })\n .catch();\n\n // Move focus to the open drawer (or toggler) button once the drawer is hidden.\n let openButton = getDrawerOpenButton(this.drawerNode.id);\n if (openButton) {\n disableButtonTooltip(openButton, true);\n }\n setTimeout(() => {\n if (openButton && focusOnOpenButton) {\n openButton.focus();\n }\n pendingPromise.resolve();\n }, 300);\n\n this.dispatchEvent(Drawers.eventTypes.drawerHidden);\n }\n\n /**\n * Toggle visibility of the drawer.\n */\n toggleVisibility() {\n if (this.drawerNode.classList.contains(CLASSES.SHOW)) {\n this.closeDrawer();\n } else {\n this.openDrawer();\n }\n }\n\n /**\n * Displaces the drawer outsite the page.\n *\n * @param {Number} scrollPosition the page current scroll position\n */\n displace(scrollPosition) {\n let displace = scrollPosition;\n let openButton = getDrawerOpenButton(this.drawerNode.id);\n if (scrollPosition === 0) {\n this.drawerNode.style.transform = '';\n if (openButton) {\n openButton.style.transform = '';\n }\n return;\n }\n const state = this.drawerNode.dataset?.state;\n const drawrWidth = this.drawerNode.offsetWidth;\n let scrollThreshold = drawrWidth;\n let direction = -1;\n if (state === 'show-drawer-right') {\n direction = 1;\n scrollThreshold = THRESHOLD;\n }\n // LTR scroll is positive while RTL scroll is negative.\n if (Math.abs(scrollPosition) > scrollThreshold) {\n displace = Math.sign(scrollPosition) * (drawrWidth + THRESHOLD);\n }\n displace *= direction;\n const transform = `translateX(${displace}px)`;\n if (openButton) {\n openButton.style.transform = transform;\n }\n this.drawerNode.style.transform = transform;\n }\n\n /**\n * Prevent drawer from overlapping an element.\n *\n * @param {HTMLElement} currentFocus\n */\n preventOverlap(currentFocus) {\n // Start position drawer (aka. left drawer) will never overlap with the page content.\n if (!this.isOpen || this.drawerNode.dataset?.state === 'show-drawer-left') {\n return;\n }\n const drawrWidth = this.drawerNode.offsetWidth;\n const element = currentFocus.getBoundingClientRect();\n\n // The this.boundingRect is calculated only once and it is reliable\n // for horizontal overlapping (which is the most common). However,\n // it is not reliable for vertical overlapping because the drawer\n // height can be changed by other elements like sticky footer.\n // To prevent recalculating the boundingRect on every\n // focusin event, we use horizontal overlapping as first fast check.\n let overlapping = (\n (element.right + THRESHOLD) > this.boundingRect.left &&\n (element.left - THRESHOLD) < this.boundingRect.right\n );\n if (overlapping) {\n const currentBoundingRect = this.drawerNode.getBoundingClientRect();\n overlapping = (\n (element.bottom) > currentBoundingRect.top &&\n (element.top) < currentBoundingRect.bottom\n );\n }\n\n if (overlapping) {\n // Force drawer to displace out of the page.\n let displaceOut = drawrWidth + 1;\n if (window.right_to_left()) {\n displaceOut *= -1;\n }\n this.displace(displaceOut);\n } else {\n // Reset drawer displacement.\n this.displace(window.scrollX);\n }\n }\n\n /**\n * Close all drawers.\n */\n static closeAllDrawers() {\n drawerMap.forEach(drawerInstance => {\n drawerInstance.closeDrawer();\n });\n }\n\n /**\n * Close all drawers except for the specified drawer.\n *\n * @param {module:theme_boost/drawers} comparisonInstance\n */\n static closeOtherDrawers(comparisonInstance) {\n drawerMap.forEach(drawerInstance => {\n if (drawerInstance === comparisonInstance) {\n return;\n }\n\n drawerInstance.closeDrawer();\n });\n }\n\n /**\n * Prevent drawers from covering the focused element.\n */\n static preventCoveringFocusedElement() {\n const currentFocus = document.activeElement;\n // Focus on page layout elements should be ignored.\n const pagecontent = document.querySelector(SELECTORS.PAGECONTENT);\n if (!currentFocus || !pagecontent?.contains(currentFocus)) {\n Drawers.displaceDrawers(window.scrollX);\n return;\n }\n drawerMap.forEach(drawerInstance => {\n drawerInstance.preventOverlap(currentFocus);\n });\n }\n\n /**\n * Prevent drawer from covering the content when the page content covers the full page.\n *\n * @param {Number} displace\n */\n static displaceDrawers(displace) {\n drawerMap.forEach(drawerInstance => {\n drawerInstance.displace(displace);\n });\n }\n}\n\n/**\n * Set the last used attribute for the last used toggle button for a drawer.\n *\n * @param {object} toggleButton The clicked button.\n */\nconst setLastUsedToggle = (toggleButton) => {\n if (toggleButton.dataset.target) {\n document.querySelectorAll(`${SELECTORS.BUTTONS}[data-target=\"${toggleButton.dataset.target}\"]`)\n .forEach(btn => {\n btn.dataset.lastused = false;\n });\n toggleButton.dataset.lastused = true;\n }\n};\n\n/**\n * Set the focus to the last used button to open this drawer.\n * @param {string} target The drawer target.\n */\nconst focusLastUsedToggle = (target) => {\n const lastUsedButton = document.querySelector(`${SELECTORS.BUTTONS}[data-target=\"${target}\"][data-lastused=\"true\"`);\n if (lastUsedButton) {\n lastUsedButton.focus();\n }\n};\n\n/**\n * Register the event listeners for the drawer.\n *\n * @private\n */\nconst registerListeners = () => {\n // Listen for show/hide events.\n document.addEventListener('click', e => {\n const toggleButton = e.target.closest(SELECTORS.TOGGLEBTN);\n if (toggleButton && toggleButton.dataset.target) {\n e.preventDefault();\n const targetDrawer = document.getElementById(toggleButton.dataset.target);\n const drawerInstance = Drawers.getDrawerInstanceForNode(targetDrawer);\n setLastUsedToggle(toggleButton);\n\n drawerInstance.toggleVisibility();\n }\n\n const openDrawerButton = e.target.closest(SELECTORS.OPENBTN);\n if (openDrawerButton && openDrawerButton.dataset.target) {\n e.preventDefault();\n const targetDrawer = document.getElementById(openDrawerButton.dataset.target);\n const drawerInstance = Drawers.getDrawerInstanceForNode(targetDrawer);\n setLastUsedToggle(toggleButton);\n\n drawerInstance.openDrawer();\n }\n\n const closeDrawerButton = e.target.closest(SELECTORS.CLOSEBTN);\n if (closeDrawerButton && closeDrawerButton.dataset.target) {\n e.preventDefault();\n const targetDrawer = document.getElementById(closeDrawerButton.dataset.target);\n const drawerInstance = Drawers.getDrawerInstanceForNode(targetDrawer);\n\n drawerInstance.closeDrawer();\n focusLastUsedToggle(closeDrawerButton.dataset.target);\n }\n });\n\n // Close drawer when another drawer opens.\n document.addEventListener(Drawers.eventTypes.drawerShow, e => {\n if (isLarge()) {\n return;\n }\n Drawers.closeOtherDrawers(e.detail.drawerInstance);\n });\n\n // Tooglers and openers blur listeners.\n const btnSelector = `${SELECTORS.TOGGLEBTN}, ${SELECTORS.OPENBTN}, ${SELECTORS.CLOSEBTN}`;\n document.addEventListener('focusout', (e) => {\n const button = e.target.closest(btnSelector);\n if (button?.dataset.restoreTooltipOnBlur !== undefined) {\n enableButtonTooltip(button);\n }\n });\n\n const closeOnResizeListener = () => {\n if (isSmall()) {\n let anyOpen = false;\n drawerMap.forEach(drawerInstance => {\n disableDrawerTooltips(drawerInstance.drawerNode);\n if (drawerInstance.isOpen) {\n if (drawerInstance.closeOnResize) {\n drawerInstance.closeDrawer();\n } else {\n anyOpen = true;\n }\n }\n });\n\n if (anyOpen) {\n getBackdrop().then(backdrop => backdrop.show()).catch();\n }\n } else {\n drawerMap.forEach(drawerInstance => {\n enableDrawerTooltips(drawerInstance.drawerNode);\n });\n getBackdrop().then(backdrop => backdrop.hide()).catch();\n }\n };\n\n document.addEventListener('scroll', () => {\n const body = document.querySelector('body');\n if (window.scrollY >= window.innerHeight) {\n body.classList.add(CLASSES.SCROLLED);\n } else {\n body.classList.remove(CLASSES.SCROLLED);\n }\n // Horizontal scroll listener to displace the drawers to prevent covering\n // any possible sticky content.\n Drawers.displaceDrawers(window.scrollX);\n });\n\n const preventOverlap = debounce(Drawers.preventCoveringFocusedElement, 100);\n document.addEventListener('focusin', preventOverlap);\n document.addEventListener('focusout', preventOverlap);\n\n window.addEventListener('resize', debounce(closeOnResizeListener, 400));\n};\n\nregisterListeners();\n\nconst drawers = document.querySelectorAll(SELECTORS.DRAWERS);\ndrawers.forEach(drawerNode => Drawers.getDrawerInstanceForNode(drawerNode));\n"],"names":["backdropPromise","drawerMap","Map","SELECTORS","CLASSES","getDrawerZIndex","drawer","document","querySelector","parseInt","window","getComputedStyle","zIndex","getBackdrop","Templates","render","then","html","ModalBackdrop","modalBackdrop","setZIndex","getAttachmentPoint","get","addEventListener","e","preventDefault","Drawers","closeAllDrawers","catch","getDrawerOpenButton","drawerId","openButton","disableDrawerTooltips","drawerNode","id","forEach","button","disableButtonTooltip","enableOnBlur","hasAttribute","tooltip","setAttribute","dataset","originalTitle","disabledToggle","toggle","removeAttribute","restoreTooltipOnBlur","enableButtonTooltip","constructor","undefined","behatFakeDrawer","closeDrawer","focusOnOpenButton","updatePreferences","this","classList","contains","openDrawer","focusOnCloseButton","forceopen","Aria","hide","content","scrollTop","addInnerScrollListener","set","remove","isOpen","closeOnResize","has","dispatchEvent","eventname","cancelable","drawerInstance","pendingPromise","Pending","eventTypes","drawerShow","defaultPrevented","unhide","add","preference","state","getElementById","boundingRect","getBoundingClientRect","backdrop","show","style","overflow","closeButton","headerContent","setTimeout","focus","resolve","drawerShown","drawerHide","drawerHidden","toggleVisibility","displace","scrollPosition","transform","_this$drawerNode$data","drawrWidth","offsetWidth","scrollThreshold","direction","Math","abs","sign","preventOverlap","currentFocus","element","overlapping","right","left","currentBoundingRect","bottom","top","displaceOut","right_to_left","scrollX","comparisonInstance","activeElement","pagecontent","displaceDrawers","setLastUsedToggle","toggleButton","target","querySelectorAll","btn","lastused","closest","targetDrawer","getDrawerInstanceForNode","openDrawerButton","closeDrawerButton","lastUsedButton","focusLastUsedToggle","closeOtherDrawers","detail","btnSelector","body","scrollY","innerHeight","preventCoveringFocusedElement","anyOpen","registerListeners"],"mappings":"uuDAiCIA,gBAAkB,WAEhBC,UAAY,IAAIC,IAEhBC,kBACO,2BADPA,mBAEQ,sDAFRA,kBAGO,qDAHPA,oBAIS,iDAJTA,kBAKO,+BALPA,wBAMa,iBANbA,sBAOW,gBAPXA,wBAQa,uBAGbC,iBACQ,WADRA,aAEI,OAFJA,uBAGc,kBAgBdC,gBAAkB,WACdC,OAASC,SAASC,cAAcL,0BACjCG,OAGEG,SAASC,OAAOC,iBAAiBL,QAAQM,OAAQ,IAF7C,MAWTC,YAAc,KACXb,kBACDA,gBAAkBc,mBAAUC,OAAO,sBAAuB,IACzDC,MAAKC,MAAQ,IAAIC,wBAAcD,QAC/BD,MAAKG,gBACmBd,mBAEjBc,cAAcC,UAAUf,kBAAoB,GAEhDc,cAAcE,qBAAqBC,IAAI,GAAGC,iBAAiB,SAASC,IAChEA,EAAEC,iBACFC,QAAQC,qBAELR,iBAEVS,SAEE5B,iBAUL6B,oBAAuBC,eACrBC,WAAaxB,SAASC,wBAAiBL,2CAAkC2B,uBACxEC,aACDA,WAAaxB,SAASC,wBAAiBL,6CAAoC2B,iBAExEC,YASLC,sBAAyBC,aACX,CACZA,WAAWzB,cAAcL,oBACzB0B,oBAAoBI,WAAWC,KAE3BC,SAAQC,SACPA,QAGLC,qBAAqBD,YAWvBC,qBAAuB,CAACD,OAAQE,gBAC9BF,OAAOG,aAAa,4CAEbH,QAAQI,QAAQ,WACvBJ,OAAOK,aAAa,QAASL,OAAOM,QAAQC,iBAE5CP,OAAOM,QAAQE,eAAiBR,OAAOM,QAAQG,OAC/CT,OAAOU,gBAAgB,gBAEvBR,eACAF,OAAOM,QAAQK,sBAAuB,IA6BxCC,oBAAuBZ,SAErBA,OAAOG,aAAa,4CACbH,QAAQI,QAAQ,UACvBJ,OAAOU,gBAAgB,UAChBV,OAAOM,QAAQE,iBACtBR,OAAOM,QAAQG,OAAST,OAAOM,QAAQE,mCAChCR,QAAQI,kBAEZJ,OAAOM,QAAQK,4BAuELrB,QAYjBuB,YAAYhB,8CARC,0CAME,WAIgCiB,IAAvCjB,WAAWS,QAAQS,uBAIlBlB,WAAaA,YAEd,gCACKmB,YAAY,CAACC,mBAAmB,EAAOC,mBAAmB,IAG/DC,KAAKtB,WAAWuB,UAAUC,SAASrD,mBAC9BsD,WAAW,CAACC,oBAAoB,IACO,GAArCJ,KAAKtB,WAAWS,QAAQkB,WAC1B,gCACIF,WAAW,CAACC,oBAAoB,IAGzCE,KAAKC,KAAKP,KAAKtB,aAIf,2BACAD,sBAAsBuB,KAAKtB,YAlGPA,CAAAA,mBACtB8B,QAAU9B,WAAWzB,cAAcL,yBACpC4D,SAGLA,QAAQxC,iBAAiB,UAAU,KAC/BU,WAAWuB,UAAUX,OACjBzC,iBACqB,GAArB2D,QAAQC,eA6FZC,CAAuBV,KAAKtB,YAE5BhC,UAAUiE,IAAIjC,WAAYsB,MAE1BtB,WAAWuB,UAAUW,OAAO/D,yBAQ5BgE,oBACOb,KAAKtB,WAAWuB,UAAUC,SAASrD,cAQ1CiE,4BACS5D,SAAS8C,KAAKtB,WAAWS,QAAQ2B,+CAyDdpC,mBACvBhC,UAAUqE,IAAIrC,iBACXP,QAAQO,YAGThC,UAAUqB,IAAIW,YAUzBsC,cAAcC,eAAWC,0EACd,mCACHD,UACA,CACIE,eAAgBnB,MAEpBA,KAAKtB,WACL,CACIwC,WAAAA,aAeZf,kEAAWC,mBAACA,oBAAqB,0DAAQ,SAE/BgB,eAAiB,IAAIC,iBAAQ,+BACjBrB,KAAKgB,cAAc7C,QAAQmD,WAAWC,YAAY,GACtDC,2DAKT9C,WAAWzB,cAAcL,4EAAqBqD,UAAUX,OAAO,UAAU,uCACzEZ,WAAWzB,cAAcL,mFAA0BqD,UAAUX,OAAO,UAAU,OAI/Ed,WAAaF,oBAAoB0B,KAAKtB,WAAWC,gBACjDH,YAAcA,WAAWQ,aAAa,6DAE/BR,wCAAaS,QAAQ,SAGhCqB,KAAKmB,OAAOzB,KAAKtB,iBACZA,WAAWuB,UAAUyB,IAAI7E,oBAExB8E,WAAa3B,KAAKtB,WAAWS,QAAQwC,WACvCA,cAAe,2BAAmD,GAArC3B,KAAKtB,WAAWS,QAAQkB,6CACnCsB,YAAY,SAG5BC,MAAQ5B,KAAKtB,WAAWS,QAAQyC,SAClCA,MAAO,CACM5E,SAAS6E,eAAe,QAChC5B,UAAUyB,IAAIE,YAGlBE,aAAe9B,KAAKtB,WAAWqD,yBAEhC,2BACAzE,cAAcG,MAAKuE,WACfA,SAASC,cAEWjF,SAAS6E,eAAe,QAChCK,MAAMC,SAAW,SACtBH,YAEV3D,cAIC+D,YAAcpC,KAAKtB,WAAWzB,cAAcL,oBAC5CyF,cAAgBrC,KAAKtB,WAAWzB,cAAcL,yBAChDwD,oBAAsBgC,aACtBtD,qBAAqBsD,aAAa,GAEtCE,YAAW,KACPF,YAAYnC,UAAUX,OAAO,UAAU,GACvC+C,cAAcpC,UAAUX,OAAO,UAAU,GACrCc,oBACAgC,YAAYG,QAEhBnB,eAAeoB,YAChB,UAEExB,cAAc7C,QAAQmD,WAAWmB,aAU1C5C,kBAAYC,kBAACA,mBAAoB,EAArBC,kBAA2BA,mBAAoB,0DAAQ,SAEzDqB,eAAiB,IAAIC,iBAAQ,gCAEjBrB,KAAKgB,cAAc7C,QAAQmD,WAAWoB,YAAY,GACtDlB,8BAKRY,YAAcpC,KAAKtB,WAAWzB,cAAcL,oBAClDwF,MAAAA,aAAAA,YAAanC,UAAUX,OAAO,UAAU,SAClC+C,cAAgBrC,KAAKtB,WAAWzB,cAAcL,uCACpDyF,MAAAA,eAAAA,cAAepC,UAAUX,OAAO,UAAU,GAEtC8C,YAAYpD,aAAa,+DAElBoD,2CAAcnD,QAAQ,eAG3B0C,WAAa3B,KAAKtB,WAAWS,QAAQwC,WACvCA,YAAc5B,qBAAsB,6DAClB4B,YAAY,SAG5BC,MAAQ5B,KAAKtB,WAAWS,QAAQyC,SAClCA,MAAO,CACM5E,SAAS6E,eAAe,QAChC5B,UAAUW,OAAOgB,OAG1BtB,KAAKC,KAAKP,KAAKtB,iBACVA,WAAWuB,UAAUW,OAAO/D,cAEjCS,cAAcG,MAAKuE,cACfA,SAASzB,QAEL,0BAAW,CACSvD,SAAS6E,eAAe,QAChCK,MAAMC,SAAW,iBAE1BH,YAEV3D,YAGGG,WAAaF,oBAAoB0B,KAAKtB,WAAWC,IACjDH,YACAM,qBAAqBN,YAAY,GAErC8D,YAAW,KACH9D,YAAcsB,mBACdtB,WAAW+D,QAEfnB,eAAeoB,YAChB,UAEExB,cAAc7C,QAAQmD,WAAWqB,cAM1CC,mBACQ5C,KAAKtB,WAAWuB,UAAUC,SAASrD,mBAC9BgD,mBAEAM,aASb0C,SAASC,8CACDD,SAAWC,eACXtE,WAAaF,oBAAoB0B,KAAKtB,WAAWC,OAC9B,IAAnBmE,2BACKpE,WAAWwD,MAAMa,UAAY,QAC9BvE,aACAA,WAAW0D,MAAMa,UAAY,WAI/BnB,oCAAQ5B,KAAKtB,WAAWS,gDAAhB6D,sBAAyBpB,MACjCqB,WAAajD,KAAKtB,WAAWwE,gBAC/BC,gBAAkBF,WAClBG,WAAa,EACH,sBAAVxB,QACAwB,UAAY,EACZD,gBA1gBM,IA6gBNE,KAAKC,IAAIR,gBAAkBK,kBAC3BN,SAAWQ,KAAKE,KAAKT,iBAAmBG,WA9gBlC,KAghBVJ,UAAYO,gBACNL,+BAA0BF,gBAC5BrE,aACAA,WAAW0D,MAAMa,UAAYA,gBAE5BrE,WAAWwD,MAAMa,UAAYA,UAQtCS,eAAeC,6CAENzD,KAAKa,QAA6C,0DAA9BnC,WAAWS,wEAASyC,oBAGvCqB,WAAajD,KAAKtB,WAAWwE,YAC7BQ,QAAUD,aAAa1B,4BAQzB4B,YACCD,QAAQE,MA5iBH,GA4iBwB5D,KAAK8B,aAAa+B,MAC/CH,QAAQG,KA7iBH,GA6iBuB7D,KAAK8B,aAAa8B,SAE/CD,YAAa,OACPG,oBAAsB9D,KAAKtB,WAAWqD,wBAC5C4B,YACKD,QAAQK,OAAUD,oBAAoBE,KACtCN,QAAQM,IAAOF,oBAAoBC,UAIxCJ,YAAa,KAETM,YAAchB,WAAa,EAC3B9F,OAAO+G,kBACPD,cAAgB,QAEfpB,SAASoB,uBAGTpB,SAAS1F,OAAOgH,kCAQzBzH,UAAUkC,SAAQuC,iBACdA,eAAetB,0CASEuE,oBACrB1H,UAAUkC,SAAQuC,iBACVA,iBAAmBiD,oBAIvBjD,eAAetB,8DAQb4D,aAAezG,SAASqH,cAExBC,YAActH,SAASC,cAAcL,uBACtC6G,cAAiBa,MAAAA,aAAAA,YAAapE,SAASuD,cAI5C/G,UAAUkC,SAAQuC,iBACdA,eAAeqC,eAAeC,iBAJ9BtF,QAAQoG,gBAAgBpH,OAAOgH,gCAahBtB,UACnBnG,UAAUkC,SAAQuC,iBACdA,eAAe0B,SAASA,uDAzaf1E,qBAyEG,CAQhBoD,WAAY,2BASZkB,YAAa,4BASbC,WAAY,2BASZC,aAAc,qCAuUhB6B,kBAAqBC,eACnBA,aAAatF,QAAQuF,SACrB1H,SAAS2H,2BAAoB/H,2CAAkC6H,aAAatF,QAAQuF,cACnF9F,SAAQgG,MACLA,IAAIzF,QAAQ0F,UAAW,KAE3BJ,aAAatF,QAAQ0F,UAAW,IAoBd,MAEtB7H,SAASgB,iBAAiB,SAASC,UACzBwG,aAAexG,EAAEyG,OAAOI,QAAQlI,wBAClC6H,cAAgBA,aAAatF,QAAQuF,OAAQ,CAC7CzG,EAAEC,uBACI6G,aAAe/H,SAAS6E,eAAe4C,aAAatF,QAAQuF,QAC5DvD,eAAiBhD,QAAQ6G,yBAAyBD,cACxDP,kBAAkBC,cAElBtD,eAAeyB,yBAGbqC,iBAAmBhH,EAAEyG,OAAOI,QAAQlI,sBACtCqI,kBAAoBA,iBAAiB9F,QAAQuF,OAAQ,CACrDzG,EAAEC,uBACI6G,aAAe/H,SAAS6E,eAAeoD,iBAAiB9F,QAAQuF,QAChEvD,eAAiBhD,QAAQ6G,yBAAyBD,cACxDP,kBAAkBC,cAElBtD,eAAehB,mBAGb+E,kBAAoBjH,EAAEyG,OAAOI,QAAQlI,uBACvCsI,mBAAqBA,kBAAkB/F,QAAQuF,OAAQ,CACvDzG,EAAEC,uBACI6G,aAAe/H,SAAS6E,eAAeqD,kBAAkB/F,QAAQuF,QAChDvG,QAAQ6G,yBAAyBD,cAEzClF,cAzCE6E,CAAAA,eACnBS,eAAiBnI,SAASC,wBAAiBL,2CAAkC8H,mCAC/ES,gBACAA,eAAe5C,SAuCX6C,CAAoBF,kBAAkB/F,QAAQuF,YAKtD1H,SAASgB,iBAAiBG,QAAQmD,WAAWC,YAAYtD,KACjD,2BAGJE,QAAQkH,kBAAkBpH,EAAEqH,OAAOnE,yBAIjCoE,sBAAiB3I,iCAAwBA,+BAAsBA,oBACrEI,SAASgB,iBAAiB,YAAaC,UAC7BY,OAASZ,EAAEyG,OAAOI,QAAQS,kBACa5F,KAAzCd,MAAAA,cAAAA,OAAQM,QAAQK,uBAChBC,oBAAoBZ,WA6B5B7B,SAASgB,iBAAiB,UAAU,WAC1BwH,KAAOxI,SAASC,cAAc,QAChCE,OAAOsI,SAAWtI,OAAOuI,YACzBF,KAAKvF,UAAUyB,IAAI7E,kBAEnB2I,KAAKvF,UAAUW,OAAO/D,kBAI1BsB,QAAQoG,gBAAgBpH,OAAOgH,kBAG7BX,gBAAiB,mBAASrF,QAAQwH,8BAA+B,KACvE3I,SAASgB,iBAAiB,UAAWwF,gBACrCxG,SAASgB,iBAAiB,WAAYwF,gBAEtCrG,OAAOa,iBAAiB,UAAU,oBAzCJ,SACtB,0BAAW,KACP4H,SAAU,EACdlJ,UAAUkC,SAAQuC,iBACd1C,sBAAsB0C,eAAezC,YACjCyC,eAAeN,SACXM,eAAeL,cACfK,eAAetB,cAEf+F,SAAU,MAKlBA,SACAtI,cAAcG,MAAKuE,UAAYA,SAASC,SAAQ5D,aAGpD3B,UAAUkC,SAAQuC,iBArnBAzC,IAAAA,WACV,EADUA,WAsnBOyC,eAAezC,YApnBjCzB,cAAcL,oBACzB0B,oBAAoBI,WAAWC,KAE3BC,SAAQC,SACPA,QAGLY,oBAAoBZ,cA+mBhBvB,cAAcG,MAAKuE,UAAYA,SAASzB,SAAQlC,UAoBU,OAGtEwH,UAEgB7I,SAAS2H,iBAAiB/H,mBAClCgC,SAAQF,YAAcP,QAAQ6G,yBAAyBtG"} boost/amd/build/index.min.js 0000604 00000004275 15062070724 0011770 0 ustar 00 define("theme_boost/index",["exports","./bootstrap/alert","./bootstrap/button","./bootstrap/carousel","./bootstrap/collapse","./bootstrap/dropdown","./bootstrap/modal","./bootstrap/popover","./bootstrap/scrollspy","./bootstrap/tab","./bootstrap/toast","./bootstrap/tooltip","./bootstrap/util"],(function(_exports,_alert,_button,_carousel,_collapse,_dropdown,_modal,_popover,_scrollspy,_tab,_toast,_tooltip,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),Object.defineProperty(_exports,"Alert",{enumerable:!0,get:function(){return _alert.default}}),Object.defineProperty(_exports,"Button",{enumerable:!0,get:function(){return _button.default}}),Object.defineProperty(_exports,"Carousel",{enumerable:!0,get:function(){return _carousel.default}}),Object.defineProperty(_exports,"Collapse",{enumerable:!0,get:function(){return _collapse.default}}),Object.defineProperty(_exports,"Dropdown",{enumerable:!0,get:function(){return _dropdown.default}}),Object.defineProperty(_exports,"Modal",{enumerable:!0,get:function(){return _modal.default}}),Object.defineProperty(_exports,"Popover",{enumerable:!0,get:function(){return _popover.default}}),Object.defineProperty(_exports,"Scrollspy",{enumerable:!0,get:function(){return _scrollspy.default}}),Object.defineProperty(_exports,"Tab",{enumerable:!0,get:function(){return _tab.default}}),Object.defineProperty(_exports,"Toast",{enumerable:!0,get:function(){return _toast.default}}),Object.defineProperty(_exports,"Tooltip",{enumerable:!0,get:function(){return _tooltip.default}}),Object.defineProperty(_exports,"Util",{enumerable:!0,get:function(){return _util.default}}),_alert=_interopRequireDefault(_alert),_button=_interopRequireDefault(_button),_carousel=_interopRequireDefault(_carousel),_collapse=_interopRequireDefault(_collapse),_dropdown=_interopRequireDefault(_dropdown),_modal=_interopRequireDefault(_modal),_popover=_interopRequireDefault(_popover),_scrollspy=_interopRequireDefault(_scrollspy),_tab=_interopRequireDefault(_tab),_toast=_interopRequireDefault(_toast),_tooltip=_interopRequireDefault(_tooltip),_util=_interopRequireDefault(_util)})); //# sourceMappingURL=index.min.js.map boost/amd/build/loader.min.js.map 0000604 00000012561 15062070724 0012700 0 ustar 00 {"version":3,"file":"loader.min.js","sources":["../src/loader.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Template renderer for Moodle. Load and render Moodle templates with Mustache.\n *\n * @module theme_boost/loader\n * @copyright 2015 Damyon Wiese <damyon@moodle.com>\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 2.9\n */\n\nimport $ from 'jquery';\nimport * as Aria from './aria';\nimport Bootstrap from './index';\nimport Pending from 'core/pending';\nimport {DefaultWhitelist} from './bootstrap/tools/sanitizer';\nimport setupBootstrapPendingChecks from './pending';\n\n/**\n * Rember the last visited tabs.\n */\nconst rememberTabs = () => {\n $('a[data-toggle=\"tab\"]').on('shown.bs.tab', function(e) {\n var hash = $(e.target).attr('href');\n if (history.replaceState) {\n history.replaceState(null, null, hash);\n } else {\n location.hash = hash;\n }\n });\n const hash = window.location.hash;\n if (hash) {\n const tab = document.querySelector('[role=\"tablist\"] [href=\"' + hash + '\"]');\n if (tab) {\n tab.click();\n }\n }\n};\n\n/**\n * Enable all popovers\n *\n */\nconst enablePopovers = () => {\n $('body').popover({\n container: 'body',\n selector: '[data-toggle=\"popover\"]',\n trigger: 'focus',\n whitelist: Object.assign(DefaultWhitelist, {\n table: [],\n thead: [],\n tbody: [],\n tr: [],\n th: [],\n td: [],\n }),\n });\n\n document.addEventListener('keydown', e => {\n if (e.key === 'Escape' && e.target.closest('[data-toggle=\"popover\"]')) {\n $(e.target).popover('hide');\n }\n });\n};\n\n/**\n * Enable tooltips\n *\n */\nconst enableTooltips = () => {\n $('body').tooltip({\n container: 'body',\n selector: '[data-toggle=\"tooltip\"]',\n });\n};\n\nconst pendingPromise = new Pending('theme_boost/loader:init');\n\n// Add pending promise event listeners to relevant Bootstrap custom events.\nsetupBootstrapPendingChecks();\n\n// Setup Aria helpers for Bootstrap features.\nAria.init();\n\n// Remember the last visited tabs.\nrememberTabs();\n\n// Enable all popovers.\nenablePopovers();\n\n// Enable all tooltips.\nenableTooltips();\n\n// Disables flipping the dropdowns up or dynamically repositioning them along the Y-axis (based on the viewport)\n// to prevent the dropdowns getting hidden behind the navbar or them covering the trigger element.\n$.fn.dropdown.Constructor.Default.popperConfig = {\n modifiers: {\n flip: {\n enabled: false,\n },\n storeTopPosition: {\n enabled: true,\n // eslint-disable-next-line no-unused-vars\n fn(data, options) {\n data.storedTop = data.offsets.popper.top;\n return data;\n },\n order: 299\n },\n restoreTopPosition: {\n enabled: true,\n // eslint-disable-next-line no-unused-vars\n fn(data, options) {\n data.offsets.popper.top = data.storedTop;\n return data;\n },\n order: 301\n }\n },\n};\n\npendingPromise.resolve();\n\nexport {\n Bootstrap,\n};\n"],"names":["pendingPromise","Pending","Aria","init","on","e","hash","target","attr","history","replaceState","location","window","tab","document","querySelector","click","rememberTabs","popover","container","selector","trigger","whitelist","Object","assign","DefaultWhitelist","table","thead","tbody","tr","th","td","addEventListener","key","closest","tooltip","fn","dropdown","Constructor","Default","popperConfig","modifiers","flip","enabled","storeTopPosition","data","options","storedTop","offsets","popper","top","order","restoreTopPosition","resolve"],"mappings":";;;;;;;;i+BAyFMA,eAAiB,IAAIC,iBAAQ,mDAMnCC,KAAKC,OA7DgB,0BACf,wBAAwBC,GAAG,gBAAgB,SAASC,OAC9CC,MAAO,mBAAED,EAAEE,QAAQC,KAAK,QACxBC,QAAQC,aACRD,QAAQC,aAAa,KAAM,KAAMJ,MAEjCK,SAASL,KAAOA,cAGlBA,KAAOM,OAAOD,SAASL,QACzBA,KAAM,OACAO,IAAMC,SAASC,cAAc,2BAA6BT,KAAO,MACnEO,KACAA,IAAIG,UAmDhBC,uBAzCM,QAAQC,QAAQ,CACdC,UAAW,OACXC,SAAU,0BACVC,QAAS,QACTC,UAAWC,OAAOC,OAAOC,4BAAkB,CACvCC,MAAO,GACPC,MAAO,GACPC,MAAO,GACPC,GAAI,GACJC,GAAI,GACJC,GAAI,OAIZjB,SAASkB,iBAAiB,WAAW3B,IACnB,WAAVA,EAAE4B,KAAoB5B,EAAEE,OAAO2B,QAAQ,gDACrC7B,EAAEE,QAAQW,QAAQ,+BAU1B,QAAQiB,QAAQ,CACdhB,UAAW,OACXC,SAAU,4CAuBhBgB,GAAGC,SAASC,YAAYC,QAAQC,aAAe,CAC7CC,UAAW,CACPC,KAAM,CACFC,SAAS,GAEbC,iBAAkB,CACdD,SAAS,EAETP,GAAE,CAACS,KAAMC,WACLD,KAAKE,UAAYF,KAAKG,QAAQC,OAAOC,IAC9BL,MAEXM,MAAO,KAEXC,mBAAoB,CAChBT,SAAS,EAETP,GAAE,CAACS,KAAMC,WACLD,KAAKG,QAAQC,OAAOC,IAAML,KAAKE,UACxBF,MAEXM,MAAO,OAKnBnD,eAAeqD"} boost/amd/build/bootstrap/util.min.js 0000604 00000006463 15062070724 0013654 0 ustar 00 define("theme_boost/bootstrap/util",["exports","jquery"],(function(_exports,_jquery){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&&obj.__esModule?obj:{default:obj};function toType(obj){return null==obj?"".concat(obj):{}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase()}function transitionEndEmulator(duration){let called=!1;return(0,_jquery.default)(this).one(Util.TRANSITION_END,(()=>{called=!0})),setTimeout((()=>{called||Util.triggerTransitionEnd(this)}),duration),this}const Util={TRANSITION_END:"bsTransitionEnd",getUID(prefix){do{prefix+=~~(1e6*Math.random())}while(document.getElementById(prefix));return prefix},getSelectorFromElement(element){let selector=element.getAttribute("data-target");if(!selector||"#"===selector){const hrefAttr=element.getAttribute("href");selector=hrefAttr&&"#"!==hrefAttr?hrefAttr.trim():""}try{return document.querySelector(selector)?selector:null}catch(_){return null}},getTransitionDurationFromElement(element){if(!element)return 0;let transitionDuration=(0,_jquery.default)(element).css("transition-duration"),transitionDelay=(0,_jquery.default)(element).css("transition-delay");const floatTransitionDuration=parseFloat(transitionDuration),floatTransitionDelay=parseFloat(transitionDelay);return floatTransitionDuration||floatTransitionDelay?(transitionDuration=transitionDuration.split(",")[0],transitionDelay=transitionDelay.split(",")[0],1e3*(parseFloat(transitionDuration)+parseFloat(transitionDelay))):0},reflow:element=>element.offsetHeight,triggerTransitionEnd(element){(0,_jquery.default)(element).trigger("transitionend")},supportsTransitionEnd:()=>Boolean("transitionend"),isElement:obj=>(obj[0]||obj).nodeType,typeCheckConfig(componentName,config,configTypes){for(const property in configTypes)if(Object.prototype.hasOwnProperty.call(configTypes,property)){const expectedTypes=configTypes[property],value=config[property],valueType=value&&Util.isElement(value)?"element":toType(value);if(!new RegExp(expectedTypes).test(valueType))throw new Error("".concat(componentName.toUpperCase(),": ")+'Option "'.concat(property,'" provided type "').concat(valueType,'" ')+'but expected type "'.concat(expectedTypes,'".'))}},findShadowRoot(element){if(!document.documentElement.attachShadow)return null;if("function"==typeof element.getRootNode){const root=element.getRootNode();return root instanceof ShadowRoot?root:null}return element instanceof ShadowRoot?element:element.parentNode?Util.findShadowRoot(element.parentNode):null},jQueryDetection(){if(void 0===_jquery.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");const version=_jquery.default.fn.jquery.split(" ")[0].split(".");if(version[0]<2&&version[1]<9||1===version[0]&&9===version[1]&&version[2]<1||version[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};Util.jQueryDetection(),_jquery.default.fn.emulateTransitionEnd=transitionEndEmulator,_jquery.default.event.special[Util.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle(event){if((0,_jquery.default)(event.target).is(this))return event.handleObj.handler.apply(this,arguments)}};var _default=Util;return _exports.default=_default,_exports.default})); //# sourceMappingURL=util.min.js.map boost/amd/build/bootstrap/scrollspy.min.js 0000604 00000013246 15062070724 0014726 0 ustar 00 define("theme_boost/bootstrap/scrollspy",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="scrollspy",EVENT_KEY=".".concat("bs.scrollspy"),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_ACTIVATE="activate".concat(EVENT_KEY),EVENT_SCROLL="scroll".concat(EVENT_KEY),EVENT_LOAD_DATA_API="load".concat(EVENT_KEY).concat(".data-api"),Default={offset:10,method:"auto",target:""},DefaultType={offset:"number",method:"string",target:"(string|element)"};class ScrollSpy{constructor(element,config){this._element=element,this._scrollElement="BODY"===element.tagName?window:element,this._config=this._getConfig(config),this._selector="".concat(this._config.target," ").concat(".nav-link",",")+"".concat(this._config.target," ").concat(".list-group-item",",")+"".concat(this._config.target," ").concat(".dropdown-item"),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,(0,_jquery.default)(this._scrollElement).on(EVENT_SCROLL,(event=>this._process(event))),this.refresh(),this._process()}static get VERSION(){return"4.6.2"}static get Default(){return Default}refresh(){const autoMethod=this._scrollElement===this._scrollElement.window?"offset":"position",offsetMethod="auto"===this._config.method?autoMethod:this._config.method,offsetBase="position"===offsetMethod?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight();[].slice.call(document.querySelectorAll(this._selector)).map((element=>{let target;const targetSelector=_util.default.getSelectorFromElement(element);if(targetSelector&&(target=document.querySelector(targetSelector)),target){const targetBCR=target.getBoundingClientRect();if(targetBCR.width||targetBCR.height)return[(0,_jquery.default)(target)[offsetMethod]().top+offsetBase,targetSelector]}return null})).filter(Boolean).sort(((a,b)=>a[0]-b[0])).forEach((item=>{this._offsets.push(item[0]),this._targets.push(item[1])}))}dispose(){_jquery.default.removeData(this._element,"bs.scrollspy"),(0,_jquery.default)(this._scrollElement).off(EVENT_KEY),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null}_getConfig(config){if("string"!=typeof(config={...Default,..."object"==typeof config&&config?config:{}}).target&&_util.default.isElement(config.target)){let id=(0,_jquery.default)(config.target).attr("id");id||(id=_util.default.getUID(NAME),(0,_jquery.default)(config.target).attr("id",id)),config.target="#".concat(id)}return _util.default.typeCheckConfig(NAME,config,DefaultType),config}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const scrollTop=this._getScrollTop()+this._config.offset,scrollHeight=this._getScrollHeight(),maxScroll=this._config.offset+scrollHeight-this._getOffsetHeight();if(this._scrollHeight!==scrollHeight&&this.refresh(),scrollTop>=maxScroll){const target=this._targets[this._targets.length-1];this._activeTarget!==target&&this._activate(target)}else{if(this._activeTarget&&scrollTop<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(let i=this._offsets.length;i--;){this._activeTarget!==this._targets[i]&&scrollTop>=this._offsets[i]&&(void 0===this._offsets[i+1]||scrollTop<this._offsets[i+1])&&this._activate(this._targets[i])}}}_activate(target){this._activeTarget=target,this._clear();const queries=this._selector.split(",").map((selector=>"".concat(selector,'[data-target="').concat(target,'"],').concat(selector,'[href="').concat(target,'"]'))),$link=(0,_jquery.default)([].slice.call(document.querySelectorAll(queries.join(","))));$link.hasClass("dropdown-item")?($link.closest(".dropdown").find(".dropdown-toggle").addClass("active"),$link.addClass("active")):($link.addClass("active"),$link.parents(".nav, .list-group").prev("".concat(".nav-link",", ").concat(".list-group-item")).addClass("active"),$link.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),(0,_jquery.default)(this._scrollElement).trigger(EVENT_ACTIVATE,{relatedTarget:target})}_clear(){[].slice.call(document.querySelectorAll(this._selector)).filter((node=>node.classList.contains("active"))).forEach((node=>node.classList.remove("active")))}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data("bs.scrollspy");if(data||(data=new ScrollSpy(this,"object"==typeof config&&config),(0,_jquery.default)(this).data("bs.scrollspy",data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=>{const scrollSpys=[].slice.call(document.querySelectorAll('[data-spy="scroll"]'));for(let i=scrollSpys.length;i--;){const $spy=(0,_jquery.default)(scrollSpys[i]);ScrollSpy._jQueryInterface.call($spy,$spy.data())}})),_jquery.default.fn[NAME]=ScrollSpy._jQueryInterface,_jquery.default.fn[NAME].Constructor=ScrollSpy,_jquery.default.fn[NAME].noConflict=()=>(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,ScrollSpy._jQueryInterface);var _default=ScrollSpy;return _exports.default=_default,_exports.default})); //# sourceMappingURL=scrollspy.min.js.map boost/amd/build/bootstrap/tooltip.min.js.map 0000604 00000072225 15062070724 0015144 0 ustar 00 {"version":3,"file":"tooltip.min.js","sources":["../../src/bootstrap/tooltip.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tooltip.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport { DefaultWhitelist, sanitizeHtml } from './tools/sanitizer'\nimport $ from 'jquery'\nimport Popper from 'core/popper'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tooltip'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.tooltip'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-tooltip'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\nconst DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst HOVER_STATE_SHOW = 'show'\nconst HOVER_STATE_OUT = 'out'\n\nconst SELECTOR_TOOLTIP_INNER = '.tooltip-inner'\nconst SELECTOR_ARROW = '.arrow'\n\nconst TRIGGER_HOVER = 'hover'\nconst TRIGGER_FOCUS = 'focus'\nconst TRIGGER_CLICK = 'click'\nconst TRIGGER_MANUAL = 'manual'\n\nconst AttachmentMap = {\n AUTO: 'auto',\n TOP: 'top',\n RIGHT: 'right',\n BOTTOM: 'bottom',\n LEFT: 'left'\n}\n\nconst Default = {\n animation: true,\n template: '<div class=\"tooltip\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n selector: false,\n placement: 'top',\n offset: 0,\n container: false,\n fallbackPlacement: 'flip',\n boundary: 'scrollParent',\n customClass: '',\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist,\n popperConfig: null\n}\n\nconst DefaultType = {\n animation: 'boolean',\n template: 'string',\n title: '(string|element|function)',\n trigger: 'string',\n delay: '(number|object)',\n html: 'boolean',\n selector: '(string|boolean)',\n placement: '(string|function)',\n offset: '(number|string|function)',\n container: '(string|element|boolean)',\n fallbackPlacement: '(string|array)',\n boundary: '(string|element)',\n customClass: '(string|function)',\n sanitize: 'boolean',\n sanitizeFn: '(null|function)',\n whiteList: 'object',\n popperConfig: '(null|object)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Tooltip {\n constructor(element, config) {\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s tooltips require Popper (https://popper.js.org)')\n }\n\n // Private\n this._isEnabled = true\n this._timeout = 0\n this._hoverState = ''\n this._activeTrigger = {}\n this._popper = null\n\n // Protected\n this.element = element\n this.config = this._getConfig(config)\n this.tip = null\n\n this._setListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n enable() {\n this._isEnabled = true\n }\n\n disable() {\n this._isEnabled = false\n }\n\n toggleEnabled() {\n this._isEnabled = !this._isEnabled\n }\n\n toggle(event) {\n if (!this._isEnabled) {\n return\n }\n\n if (event) {\n const dataKey = this.constructor.DATA_KEY\n let context = $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n context._activeTrigger.click = !context._activeTrigger.click\n\n if (context._isWithActiveTrigger()) {\n context._enter(null, context)\n } else {\n context._leave(null, context)\n }\n } else {\n if ($(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) {\n this._leave(null, this)\n return\n }\n\n this._enter(null, this)\n }\n }\n\n dispose() {\n clearTimeout(this._timeout)\n\n $.removeData(this.element, this.constructor.DATA_KEY)\n\n $(this.element).off(this.constructor.EVENT_KEY)\n $(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler)\n\n if (this.tip) {\n $(this.tip).remove()\n }\n\n this._isEnabled = null\n this._timeout = null\n this._hoverState = null\n this._activeTrigger = null\n if (this._popper) {\n this._popper.destroy()\n }\n\n this._popper = null\n this.element = null\n this.config = null\n this.tip = null\n }\n\n show() {\n if ($(this.element).css('display') === 'none') {\n throw new Error('Please use show on visible elements')\n }\n\n const showEvent = $.Event(this.constructor.Event.SHOW)\n if (this.isWithContent() && this._isEnabled) {\n $(this.element).trigger(showEvent)\n\n const shadowRoot = Util.findShadowRoot(this.element)\n const isInTheDom = $.contains(\n shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement,\n this.element\n )\n\n if (showEvent.isDefaultPrevented() || !isInTheDom) {\n return\n }\n\n const tip = this.getTipElement()\n const tipId = Util.getUID(this.constructor.NAME)\n\n tip.setAttribute('id', tipId)\n this.element.setAttribute('aria-describedby', tipId)\n\n this.setContent()\n\n if (this.config.animation) {\n $(tip).addClass(CLASS_NAME_FADE)\n }\n\n const placement = typeof this.config.placement === 'function' ?\n this.config.placement.call(this, tip, this.element) :\n this.config.placement\n\n const attachment = this._getAttachment(placement)\n this.addAttachmentClass(attachment)\n\n const container = this._getContainer()\n $(tip).data(this.constructor.DATA_KEY, this)\n\n if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n $(tip).appendTo(container)\n }\n\n $(this.element).trigger(this.constructor.Event.INSERTED)\n\n this._popper = new Popper(this.element, tip, this._getPopperConfig(attachment))\n\n $(tip).addClass(CLASS_NAME_SHOW)\n $(tip).addClass(this.config.customClass)\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n const complete = () => {\n if (this.config.animation) {\n this._fixTransition()\n }\n\n const prevHoverState = this._hoverState\n this._hoverState = null\n\n $(this.element).trigger(this.constructor.Event.SHOWN)\n\n if (prevHoverState === HOVER_STATE_OUT) {\n this._leave(null, this)\n }\n }\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(this.tip)\n\n $(this.tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n }\n\n hide(callback) {\n const tip = this.getTipElement()\n const hideEvent = $.Event(this.constructor.Event.HIDE)\n const complete = () => {\n if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {\n tip.parentNode.removeChild(tip)\n }\n\n this._cleanTipClass()\n this.element.removeAttribute('aria-describedby')\n $(this.element).trigger(this.constructor.Event.HIDDEN)\n if (this._popper !== null) {\n this._popper.destroy()\n }\n\n if (callback) {\n callback()\n }\n }\n\n $(this.element).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_SHOW)\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n this._activeTrigger[TRIGGER_CLICK] = false\n this._activeTrigger[TRIGGER_FOCUS] = false\n this._activeTrigger[TRIGGER_HOVER] = false\n\n if ($(this.tip).hasClass(CLASS_NAME_FADE)) {\n const transitionDuration = Util.getTransitionDurationFromElement(tip)\n\n $(tip)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n\n this._hoverState = ''\n }\n\n update() {\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Protected\n isWithContent() {\n return Boolean(this.getTitle())\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const tip = this.getTipElement()\n this.setElementContent($(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle())\n $(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n setElementContent($element, content) {\n if (typeof content === 'object' && (content.nodeType || content.jquery)) {\n // Content is a DOM node or a jQuery\n if (this.config.html) {\n if (!$(content).parent().is($element)) {\n $element.empty().append(content)\n }\n } else {\n $element.text($(content).text())\n }\n\n return\n }\n\n if (this.config.html) {\n if (this.config.sanitize) {\n content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn)\n }\n\n $element.html(content)\n } else {\n $element.text(content)\n }\n }\n\n getTitle() {\n let title = this.element.getAttribute('data-original-title')\n\n if (!title) {\n title = typeof this.config.title === 'function' ?\n this.config.title.call(this.element) :\n this.config.title\n }\n\n return title\n }\n\n // Private\n _getPopperConfig(attachment) {\n const defaultBsConfig = {\n placement: attachment,\n modifiers: {\n offset: this._getOffset(),\n flip: {\n behavior: this.config.fallbackPlacement\n },\n arrow: {\n element: SELECTOR_ARROW\n },\n preventOverflow: {\n boundariesElement: this.config.boundary\n }\n },\n onCreate: data => {\n if (data.originalPlacement !== data.placement) {\n this._handlePopperPlacementChange(data)\n }\n },\n onUpdate: data => this._handlePopperPlacementChange(data)\n }\n\n return {\n ...defaultBsConfig,\n ...this.config.popperConfig\n }\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this.config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...this.config.offset(data.offsets, this.element)\n }\n\n return data\n }\n } else {\n offset.offset = this.config.offset\n }\n\n return offset\n }\n\n _getContainer() {\n if (this.config.container === false) {\n return document.body\n }\n\n if (Util.isElement(this.config.container)) {\n return $(this.config.container)\n }\n\n return $(document).find(this.config.container)\n }\n\n _getAttachment(placement) {\n return AttachmentMap[placement.toUpperCase()]\n }\n\n _setListeners() {\n const triggers = this.config.trigger.split(' ')\n\n triggers.forEach(trigger => {\n if (trigger === 'click') {\n $(this.element).on(\n this.constructor.Event.CLICK,\n this.config.selector,\n event => this.toggle(event)\n )\n } else if (trigger !== TRIGGER_MANUAL) {\n const eventIn = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSEENTER :\n this.constructor.Event.FOCUSIN\n const eventOut = trigger === TRIGGER_HOVER ?\n this.constructor.Event.MOUSELEAVE :\n this.constructor.Event.FOCUSOUT\n\n $(this.element)\n .on(eventIn, this.config.selector, event => this._enter(event))\n .on(eventOut, this.config.selector, event => this._leave(event))\n }\n })\n\n this._hideModalHandler = () => {\n if (this.element) {\n this.hide()\n }\n }\n\n $(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler)\n\n if (this.config.selector) {\n this.config = {\n ...this.config,\n trigger: 'manual',\n selector: ''\n }\n } else {\n this._fixTitle()\n }\n }\n\n _fixTitle() {\n const titleType = typeof this.element.getAttribute('data-original-title')\n\n if (this.element.getAttribute('title') || titleType !== 'string') {\n this.element.setAttribute(\n 'data-original-title',\n this.element.getAttribute('title') || ''\n )\n\n this.element.setAttribute('title', '')\n }\n }\n\n _enter(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = true\n }\n\n if ($(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) {\n context._hoverState = HOVER_STATE_SHOW\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_SHOW\n\n if (!context.config.delay || !context.config.delay.show) {\n context.show()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_SHOW) {\n context.show()\n }\n }, context.config.delay.show)\n }\n\n _leave(event, context) {\n const dataKey = this.constructor.DATA_KEY\n context = context || $(event.currentTarget).data(dataKey)\n\n if (!context) {\n context = new this.constructor(\n event.currentTarget,\n this._getDelegateConfig()\n )\n $(event.currentTarget).data(dataKey, context)\n }\n\n if (event) {\n context._activeTrigger[\n event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER\n ] = false\n }\n\n if (context._isWithActiveTrigger()) {\n return\n }\n\n clearTimeout(context._timeout)\n\n context._hoverState = HOVER_STATE_OUT\n\n if (!context.config.delay || !context.config.delay.hide) {\n context.hide()\n return\n }\n\n context._timeout = setTimeout(() => {\n if (context._hoverState === HOVER_STATE_OUT) {\n context.hide()\n }\n }, context.config.delay.hide)\n }\n\n _isWithActiveTrigger() {\n for (const trigger in this._activeTrigger) {\n if (this._activeTrigger[trigger]) {\n return true\n }\n }\n\n return false\n }\n\n _getConfig(config) {\n const dataAttributes = $(this.element).data()\n\n Object.keys(dataAttributes)\n .forEach(dataAttr => {\n if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n delete dataAttributes[dataAttr]\n }\n })\n\n config = {\n ...this.constructor.Default,\n ...dataAttributes,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.delay === 'number') {\n config.delay = {\n show: config.delay,\n hide: config.delay\n }\n }\n\n if (typeof config.title === 'number') {\n config.title = config.title.toString()\n }\n\n if (typeof config.content === 'number') {\n config.content = config.content.toString()\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n if (config.sanitize) {\n config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn)\n }\n\n return config\n }\n\n _getDelegateConfig() {\n const config = {}\n\n if (this.config) {\n for (const key in this.config) {\n if (this.constructor.Default[key] !== this.config[key]) {\n config[key] = this.config[key]\n }\n }\n }\n\n return config\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n _handlePopperPlacementChange(popperData) {\n this.tip = popperData.instance.popper\n this._cleanTipClass()\n this.addAttachmentClass(this._getAttachment(popperData.placement))\n }\n\n _fixTransition() {\n const tip = this.getTipElement()\n const initConfigAnimation = this.config.animation\n\n if (tip.getAttribute('x-placement') !== null) {\n return\n }\n\n $(tip).removeClass(CLASS_NAME_FADE)\n this.config.animation = false\n this.hide()\n this.show()\n this.config.animation = initConfigAnimation\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Tooltip(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Tooltip._jQueryInterface\n$.fn[NAME].Constructor = Tooltip\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tooltip._jQueryInterface\n}\n\nexport default Tooltip\n"],"names":["NAME","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","BSCLS_PREFIX_REGEX","RegExp","DISALLOWED_ATTRIBUTES","AttachmentMap","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default","animation","template","trigger","title","delay","html","selector","placement","offset","container","fallbackPlacement","boundary","customClass","sanitize","sanitizeFn","whiteList","DefaultWhitelist","popperConfig","DefaultType","Event","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Tooltip","constructor","element","config","Popper","TypeError","_isEnabled","_timeout","_hoverState","_activeTrigger","_popper","this","_getConfig","tip","_setListeners","VERSION","DATA_KEY","enable","disable","toggleEnabled","toggle","event","dataKey","context","currentTarget","data","_getDelegateConfig","click","_isWithActiveTrigger","_enter","_leave","getTipElement","hasClass","dispose","clearTimeout","removeData","off","closest","_hideModalHandler","remove","destroy","show","css","Error","showEvent","isWithContent","shadowRoot","Util","findShadowRoot","isInTheDom","contains","ownerDocument","documentElement","isDefaultPrevented","tipId","getUID","setAttribute","setContent","addClass","call","attachment","_getAttachment","addAttachmentClass","_getContainer","appendTo","_getPopperConfig","document","body","children","on","noop","complete","_fixTransition","prevHoverState","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","hide","callback","hideEvent","parentNode","removeChild","_cleanTipClass","removeAttribute","removeClass","update","scheduleUpdate","Boolean","getTitle","setElementContent","querySelectorAll","$element","content","nodeType","jquery","text","parent","is","empty","append","getAttribute","modifiers","_getOffset","flip","behavior","arrow","preventOverflow","boundariesElement","onCreate","originalPlacement","_handlePopperPlacementChange","onUpdate","offsets","isElement","find","toUpperCase","split","forEach","eventIn","eventOut","_fixTitle","titleType","type","setTimeout","dataAttributes","Object","keys","dataAttr","indexOf","toString","typeCheckConfig","key","$tip","tabClass","attr","match","length","join","popperData","instance","popper","initConfigAnimation","each","_config","test","_jQueryInterface","Constructor","noConflict"],"mappings":"wbAgBMA,KAAO,UAGPC,qBADW,cAEXC,mBAAqBC,gBAAEC,GAAGJ,MAE1BK,mBAAqB,IAAIC,wBADV,qBAC+C,KAC9DC,sBAAwB,CAAC,WAAY,YAAa,cAgBlDC,cAAgB,CACpBC,KAAM,OACNC,IAAK,MACLC,MAAO,QACPC,OAAQ,SACRC,KAAM,QAGFC,QAAU,CACdC,WAAW,EACXC,SAAU,uGAGVC,QAAS,cACTC,MAAO,GACPC,MAAO,EACPC,MAAM,EACNC,UAAU,EACVC,UAAW,MACXC,OAAQ,EACRC,WAAW,EACXC,kBAAmB,OACnBC,SAAU,eACVC,YAAa,GACbC,UAAU,EACVC,WAAY,KACZC,UAAWC,4BACXC,aAAc,MAGVC,YAAc,CAClBlB,UAAW,UACXC,SAAU,SACVE,MAAO,4BACPD,QAAS,SACTE,MAAO,kBACPC,KAAM,UACNC,SAAU,mBACVC,UAAW,oBACXC,OAAQ,2BACRC,UAAW,2BACXC,kBAAmB,iBACnBC,SAAU,mBACVC,YAAa,oBACbC,SAAU,UACVC,WAAY,kBACZC,UAAW,SACXE,aAAc,iBAGVE,MAAQ,CACZC,mBAAalC,WACbmC,uBAAiBnC,WACjBoC,mBAAapC,WACbqC,qBAAerC,WACfsC,2BAAqBtC,WACrBuC,qBAAevC,WACfwC,yBAAmBxC,WACnByC,2BAAqBzC,WACrB0C,+BAAyB1C,WACzB2C,+BAAyB3C,kBAOrB4C,QACJC,YAAYC,QAASC,gBACG,IAAXC,sBACH,IAAIC,UAAU,oEAIjBC,YAAa,OACbC,SAAW,OACXC,YAAc,QACdC,eAAiB,QACjBC,QAAU,UAGVR,QAAUA,aACVC,OAASQ,KAAKC,WAAWT,aACzBU,IAAM,UAENC,gBAIIC,2BA/GG,QAmHH9C,4BACFA,QAGEd,yBACFA,KAGE6D,4BA1HI,aA8HJ3B,0BACFA,MAGEjC,8BACFA,UAGEgC,gCACFA,YAIT6B,cACOX,YAAa,EAGpBY,eACOZ,YAAa,EAGpBa,qBACOb,YAAcK,KAAKL,WAG1Bc,OAAOC,UACAV,KAAKL,cAINe,MAAO,OACHC,QAAUX,KAAKV,YAAYe,aAC7BO,SAAU,mBAAEF,MAAMG,eAAeC,KAAKH,SAErCC,UACHA,QAAU,IAAIZ,KAAKV,YACjBoB,MAAMG,cACNb,KAAKe,0CAELL,MAAMG,eAAeC,KAAKH,QAASC,UAGvCA,QAAQd,eAAekB,OAASJ,QAAQd,eAAekB,MAEnDJ,QAAQK,uBACVL,QAAQM,OAAO,KAAMN,SAErBA,QAAQO,OAAO,KAAMP,aAElB,KACD,mBAAEZ,KAAKoB,iBAAiBC,SAxKV,yBAyKXF,OAAO,KAAMnB,WAIfkB,OAAO,KAAMlB,OAItBsB,UACEC,aAAavB,KAAKJ,0BAEhB4B,WAAWxB,KAAKT,QAASS,KAAKV,YAAYe,8BAE1CL,KAAKT,SAASkC,IAAIzB,KAAKV,YAAY7C,+BACnCuD,KAAKT,SAASmC,QAAQ,UAAUD,IAAI,gBAAiBzB,KAAK2B,mBAExD3B,KAAKE,yBACLF,KAAKE,KAAK0B,cAGTjC,WAAa,UACbC,SAAW,UACXC,YAAc,UACdC,eAAiB,KAClBE,KAAKD,cACFA,QAAQ8B,eAGV9B,QAAU,UACVR,QAAU,UACVC,OAAS,UACTU,IAAM,KAGb4B,UACyC,UAAnC,mBAAE9B,KAAKT,SAASwC,IAAI,iBAChB,IAAIC,MAAM,6CAGZC,UAAYtF,gBAAE+B,MAAMsB,KAAKV,YAAYZ,MAAMG,SAC7CmB,KAAKkC,iBAAmBlC,KAAKL,WAAY,qBACzCK,KAAKT,SAAS9B,QAAQwE,iBAElBE,WAAaC,cAAKC,eAAerC,KAAKT,SACtC+C,WAAa3F,gBAAE4F,SACJ,OAAfJ,WAAsBA,WAAanC,KAAKT,QAAQiD,cAAcC,gBAC9DzC,KAAKT,YAGH0C,UAAUS,uBAAyBJ,wBAIjCpC,IAAMF,KAAKoB,gBACXuB,MAAQP,cAAKQ,OAAO5C,KAAKV,YAAY9C,MAE3C0D,IAAI2C,aAAa,KAAMF,YAClBpD,QAAQsD,aAAa,mBAAoBF,YAEzCG,aAED9C,KAAKR,OAAOjC,+BACZ2C,KAAK6C,SAxOS,cA2OZjF,UAA6C,mBAA1BkC,KAAKR,OAAO1B,UACnCkC,KAAKR,OAAO1B,UAAUkF,KAAKhD,KAAME,IAAKF,KAAKT,SAC3CS,KAAKR,OAAO1B,UAERmF,WAAajD,KAAKkD,eAAepF,gBAClCqF,mBAAmBF,kBAElBjF,UAAYgC,KAAKoD,oCACrBlD,KAAKY,KAAKd,KAAKV,YAAYe,SAAUL,MAElCrD,gBAAE4F,SAASvC,KAAKT,QAAQiD,cAAcC,gBAAiBzC,KAAKE,0BAC7DA,KAAKmD,SAASrF,+BAGhBgC,KAAKT,SAAS9B,QAAQuC,KAAKV,YAAYZ,MAAMK,eAE1CgB,QAAU,IAAIN,gBAAOO,KAAKT,QAASW,IAAKF,KAAKsD,iBAAiBL,iCAEjE/C,KAAK6C,SA5PW,4BA6PhB7C,KAAK6C,SAAS/C,KAAKR,OAAOrB,aAMxB,iBAAkBoF,SAASd,qCAC3Bc,SAASC,MAAMC,WAAWC,GAAG,YAAa,KAAM/G,gBAAEgH,YAGhDC,SAAW,KACX5D,KAAKR,OAAOjC,gBACTsG,uBAGDC,eAAiB9D,KAAKH,iBACvBA,YAAc,yBAEjBG,KAAKT,SAAS9B,QAAQuC,KAAKV,YAAYZ,MAAMI,OA5Q/B,QA8QZgF,qBACG3C,OAAO,KAAMnB,WAIlB,mBAAEA,KAAKE,KAAKmB,SAvRE,QAuRyB,OACnC0C,mBAAqB3B,cAAK4B,iCAAiChE,KAAKE,yBAEpEF,KAAKE,KACJ+D,IAAI7B,cAAK8B,eAAgBN,UACzBO,qBAAqBJ,yBAExBH,YAKNQ,KAAKC,gBACGnE,IAAMF,KAAKoB,gBACXkD,UAAY3H,gBAAE+B,MAAMsB,KAAKV,YAAYZ,MAAMC,MAC3CiF,SAAW,KAnSI,SAoSf5D,KAAKH,aAAoCK,IAAIqE,YAC/CrE,IAAIqE,WAAWC,YAAYtE,UAGxBuE,sBACAlF,QAAQmF,gBAAgB,wCAC3B1E,KAAKT,SAAS9B,QAAQuC,KAAKV,YAAYZ,MAAME,QAC1B,OAAjBoB,KAAKD,cACFA,QAAQ8B,UAGXwC,UACFA,mCAIFrE,KAAKT,SAAS9B,QAAQ6G,YAEpBA,UAAU5B,6CAIZxC,KAAKyE,YA5Ta,QAgUhB,iBAAkBpB,SAASd,qCAC3Bc,SAASC,MAAMC,WAAWhC,IAAI,YAAa,KAAM9E,gBAAEgH,WAGlD7D,eAAL,OAAqC,OAChCA,eAAL,OAAqC,OAChCA,eAAL,OAAqC,GAEjC,mBAAEE,KAAKE,KAAKmB,SAzUI,QAyUuB,OACnC0C,mBAAqB3B,cAAK4B,iCAAiC9D,yBAE/DA,KACC+D,IAAI7B,cAAK8B,eAAgBN,UACzBO,qBAAqBJ,yBAExBH,gBAGG/D,YAAc,IAGrB+E,SACuB,OAAjB5E,KAAKD,cACFA,QAAQ8E,iBAKjB3C,uBACS4C,QAAQ9E,KAAK+E,YAGtB5B,mBAAmBF,gCACfjD,KAAKoB,iBAAiB2B,mBAtWP,yBAsWmCE,aAGtD7B,4BACOlB,IAAMF,KAAKE,MAAO,mBAAEF,KAAKR,OAAOhC,UAAU,GACxCwC,KAAKE,IAGd4C,mBACQ5C,IAAMF,KAAKoB,qBACZ4D,mBAAkB,mBAAE9E,IAAI+E,iBAtWF,mBAsW6CjF,KAAK+E,gCAC3E7E,KAAKyE,sBA7Wa,mBACA,SA+WtBK,kBAAkBE,SAAUC,SACH,iBAAZA,UAAyBA,QAAQC,WAAYD,QAAQE,OAa5DrF,KAAKR,OAAO5B,MACVoC,KAAKR,OAAOpB,WACd+G,SAAU,2BAAaA,QAASnF,KAAKR,OAAOlB,UAAW0B,KAAKR,OAAOnB,aAGrE6G,SAAStH,KAAKuH,UAEdD,SAASI,KAAKH,SAlBVnF,KAAKR,OAAO5B,MACT,mBAAEuH,SAASI,SAASC,GAAGN,WAC1BA,SAASO,QAAQC,OAAOP,SAG1BD,SAASI,MAAK,mBAAEH,SAASG,QAiB/BP,eACMrH,MAAQsC,KAAKT,QAAQoG,aAAa,8BAEjCjI,QACHA,MAAqC,mBAAtBsC,KAAKR,OAAO9B,MACzBsC,KAAKR,OAAO9B,MAAMsF,KAAKhD,KAAKT,SAC5BS,KAAKR,OAAO9B,OAGTA,MAIT4F,iBAAiBL,kBAuBR,IAtBiB,CACtBnF,UAAWmF,WACX2C,UAAW,CACT7H,OAAQiC,KAAK6F,aACbC,KAAM,CACJC,SAAU/F,KAAKR,OAAOvB,mBAExB+H,MAAO,CACLzG,QAxZa,UA0Zf0G,gBAAiB,CACfC,kBAAmBlG,KAAKR,OAAOtB,WAGnCiI,SAAUrF,OACJA,KAAKsF,oBAAsBtF,KAAKhD,gBAC7BuI,6BAA6BvF,OAGtCwF,SAAUxF,MAAQd,KAAKqG,6BAA6BvF,UAKjDd,KAAKR,OAAOhB,cAInBqH,mBACQ9H,OAAS,SAEmB,mBAAvBiC,KAAKR,OAAOzB,OACrBA,OAAOnB,GAAKkE,OACVA,KAAKyF,QAAU,IACVzF,KAAKyF,WACLvG,KAAKR,OAAOzB,OAAO+C,KAAKyF,QAASvG,KAAKT,UAGpCuB,MAGT/C,OAAOA,OAASiC,KAAKR,OAAOzB,OAGvBA,OAGTqF,uBACgC,IAA1BpD,KAAKR,OAAOxB,UACPuF,SAASC,KAGdpB,cAAKoE,UAAUxG,KAAKR,OAAOxB,YACtB,mBAAEgC,KAAKR,OAAOxB,YAGhB,mBAAEuF,UAAUkD,KAAKzG,KAAKR,OAAOxB,WAGtCkF,eAAepF,kBACNd,cAAcc,UAAU4I,eAGjCvG,gBACmBH,KAAKR,OAAO/B,QAAQkJ,MAAM,KAElCC,SAAQnJ,aACC,UAAZA,4BACAuC,KAAKT,SAASmE,GACd1D,KAAKV,YAAYZ,MAAMM,MACvBgB,KAAKR,OAAO3B,UACZ6C,OAASV,KAAKS,OAAOC,cAElB,GApdU,WAodNjD,QAA4B,OAC/BoJ,QAxdQ,UAwdEpJ,QACduC,KAAKV,YAAYZ,MAAMS,WACvBa,KAAKV,YAAYZ,MAAMO,QACnB6H,SA3dQ,UA2dGrJ,QACfuC,KAAKV,YAAYZ,MAAMU,WACvBY,KAAKV,YAAYZ,MAAMQ,6BAEvBc,KAAKT,SACJmE,GAAGmD,QAAS7G,KAAKR,OAAO3B,UAAU6C,OAASV,KAAKkB,OAAOR,SACvDgD,GAAGoD,SAAU9G,KAAKR,OAAO3B,UAAU6C,OAASV,KAAKmB,OAAOT,kBAI1DiB,kBAAoB,KACnB3B,KAAKT,cACF6E,4BAIPpE,KAAKT,SAASmC,QAAQ,UAAUgC,GAAG,gBAAiB1D,KAAK2B,mBAEvD3B,KAAKR,OAAO3B,cACT2B,OAAS,IACTQ,KAAKR,OACR/B,QAAS,SACTI,SAAU,SAGPkJ,YAITA,kBACQC,iBAAmBhH,KAAKT,QAAQoG,aAAa,wBAE/C3F,KAAKT,QAAQoG,aAAa,UAA0B,WAAdqB,kBACnCzH,QAAQsD,aACX,sBACA7C,KAAKT,QAAQoG,aAAa,UAAY,SAGnCpG,QAAQsD,aAAa,QAAS,KAIvC3B,OAAOR,MAAOE,eACND,QAAUX,KAAKV,YAAYe,UACjCO,QAAUA,UAAW,mBAAEF,MAAMG,eAAeC,KAAKH,YAG/CC,QAAU,IAAIZ,KAAKV,YACjBoB,MAAMG,cACNb,KAAKe,0CAELL,MAAMG,eAAeC,KAAKH,QAASC,UAGnCF,QACFE,QAAQd,eACS,YAAfY,MAAMuG,KAlhBQ,QADA,UAohBZ,IAGF,mBAAErG,QAAQQ,iBAAiBC,SA/hBX,SAEC,SA6hBuCT,QAAQf,YAClEe,QAAQf,YA9hBW,QAkiBrB0B,aAAaX,QAAQhB,UAErBgB,QAAQf,YApiBa,OAsiBhBe,QAAQpB,OAAO7B,OAAUiD,QAAQpB,OAAO7B,MAAMmE,KAKnDlB,QAAQhB,SAAWsH,YAAW,KA3iBT,SA4iBftG,QAAQf,aACVe,QAAQkB,SAETlB,QAAQpB,OAAO7B,MAAMmE,MARtBlB,QAAQkB,QAWZX,OAAOT,MAAOE,eACND,QAAUX,KAAKV,YAAYe,UACjCO,QAAUA,UAAW,mBAAEF,MAAMG,eAAeC,KAAKH,YAG/CC,QAAU,IAAIZ,KAAKV,YACjBoB,MAAMG,cACNb,KAAKe,0CAELL,MAAMG,eAAeC,KAAKH,QAASC,UAGnCF,QACFE,QAAQd,eACS,aAAfY,MAAMuG,KAzjBQ,QADA,UA2jBZ,GAGFrG,QAAQK,yBAIZM,aAAaX,QAAQhB,UAErBgB,QAAQf,YAzkBY,MA2kBfe,QAAQpB,OAAO7B,OAAUiD,QAAQpB,OAAO7B,MAAMyG,KAKnDxD,QAAQhB,SAAWsH,YAAW,KAhlBV,QAilBdtG,QAAQf,aACVe,QAAQwD,SAETxD,QAAQpB,OAAO7B,MAAMyG,MARtBxD,QAAQwD,QAWZnD,2BACO,MAAMxD,WAAWuC,KAAKF,kBACrBE,KAAKF,eAAerC,gBACf,SAIJ,EAGTwC,WAAWT,cACH2H,gBAAiB,mBAAEnH,KAAKT,SAASuB,cAEvCsG,OAAOC,KAAKF,gBACTP,SAAQU,YAC0C,IAA7CvK,sBAAsBwK,QAAQD,kBACzBH,eAAeG,aAUA,iBAN5B9H,OAAS,IACJQ,KAAKV,YAAYhC,WACjB6J,kBACmB,iBAAX3H,QAAuBA,OAASA,OAAS,KAGpC7B,QAChB6B,OAAO7B,MAAQ,CACbmE,KAAMtC,OAAO7B,MACbyG,KAAM5E,OAAO7B,QAIW,iBAAjB6B,OAAO9B,QAChB8B,OAAO9B,MAAQ8B,OAAO9B,MAAM8J,YAGA,iBAAnBhI,OAAO2F,UAChB3F,OAAO2F,QAAU3F,OAAO2F,QAAQqC,0BAG7BC,gBACHjL,KACAgD,OACAQ,KAAKV,YAAYb,aAGfe,OAAOpB,WACToB,OAAOhC,UAAW,2BAAagC,OAAOhC,SAAUgC,OAAOlB,UAAWkB,OAAOnB,aAGpEmB,OAGTuB,2BACQvB,OAAS,MAEXQ,KAAKR,WACF,MAAMkI,OAAO1H,KAAKR,OACjBQ,KAAKV,YAAYhC,QAAQoK,OAAS1H,KAAKR,OAAOkI,OAChDlI,OAAOkI,KAAO1H,KAAKR,OAAOkI,aAKzBlI,OAGTiF,uBACQkD,MAAO,mBAAE3H,KAAKoB,iBACdwG,SAAWD,KAAKE,KAAK,SAASC,MAAMjL,oBACzB,OAAb+K,UAAqBA,SAASG,QAChCJ,KAAKhD,YAAYiD,SAASI,KAAK,KAInC3B,6BAA6B4B,iBACtB/H,IAAM+H,WAAWC,SAASC,YAC1B1D,sBACAtB,mBAAmBnD,KAAKkD,eAAe+E,WAAWnK,YAGzD+F,uBACQ3D,IAAMF,KAAKoB,gBACXgH,oBAAsBpI,KAAKR,OAAOjC,UAEA,OAApC2C,IAAIyF,aAAa,qCAInBzF,KAAKyE,YArrBa,aAsrBfnF,OAAOjC,WAAY,OACnB6G,YACAtC,YACAtC,OAAOjC,UAAY6K,6CAIF5I,eACfQ,KAAKqI,MAAK,iBACTnD,UAAW,mBAAElF,UACfc,KAAOoE,SAASpE,KAvsBT,oBAwsBLwH,QAA4B,iBAAX9I,QAAuBA,WAEzCsB,OAAQ,eAAeyH,KAAK/I,WAI5BsB,OACHA,KAAO,IAAIzB,QAAQW,KAAMsI,SACzBpD,SAASpE,KAhtBA,aAgtBeA,OAGJ,iBAAXtB,QAAqB,SACF,IAAjBsB,KAAKtB,cACR,IAAIE,qCAA8BF,aAG1CsB,KAAKtB,+BAUX5C,GAAGJ,MAAQ6C,QAAQmJ,iCACnB5L,GAAGJ,MAAMiM,YAAcpJ,wBACvBzC,GAAGJ,MAAMkM,WAAa,qBACpB9L,GAAGJ,MAAQE,mBACN2C,QAAQmJ,+BAGFnJ"} boost/amd/build/bootstrap/popover.min.js 0000604 00000006117 15062070724 0014365 0 ustar 00 define("theme_boost/bootstrap/popover",["exports","jquery","./tooltip"],(function(_exports,_jquery,_tooltip){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_tooltip=_interopRequireDefault(_tooltip);const NAME="popover",EVENT_KEY=".".concat("bs.popover"),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],BSCLS_PREFIX_REGEX=new RegExp("(^|\\s)".concat("bs-popover","\\S+"),"g"),Default={..._tooltip.default.Default,placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'},DefaultType={..._tooltip.default.DefaultType,content:"(string|element|function)"},Event={HIDE:"hide".concat(EVENT_KEY),HIDDEN:"hidden".concat(EVENT_KEY),SHOW:"show".concat(EVENT_KEY),SHOWN:"shown".concat(EVENT_KEY),INSERTED:"inserted".concat(EVENT_KEY),CLICK:"click".concat(EVENT_KEY),FOCUSIN:"focusin".concat(EVENT_KEY),FOCUSOUT:"focusout".concat(EVENT_KEY),MOUSEENTER:"mouseenter".concat(EVENT_KEY),MOUSELEAVE:"mouseleave".concat(EVENT_KEY)};class Popover extends _tooltip.default{static get VERSION(){return"4.6.2"}static get Default(){return Default}static get NAME(){return NAME}static get DATA_KEY(){return"bs.popover"}static get Event(){return Event}static get EVENT_KEY(){return EVENT_KEY}static get DefaultType(){return DefaultType}isWithContent(){return this.getTitle()||this._getContent()}addAttachmentClass(attachment){(0,_jquery.default)(this.getTipElement()).addClass("".concat("bs-popover","-").concat(attachment))}getTipElement(){return this.tip=this.tip||(0,_jquery.default)(this.config.template)[0],this.tip}setContent(){const $tip=(0,_jquery.default)(this.getTipElement());this.setElementContent($tip.find(".popover-header"),this.getTitle());let content=this._getContent();"function"==typeof content&&(content=content.call(this.element)),this.setElementContent($tip.find(".popover-body"),content),$tip.removeClass("".concat("fade"," ").concat("show"))}_getContent(){return this.element.getAttribute("data-content")||this.config.content}_cleanTipClass(){const $tip=(0,_jquery.default)(this.getTipElement()),tabClass=$tip.attr("class").match(BSCLS_PREFIX_REGEX);null!==tabClass&&tabClass.length>0&&$tip.removeClass(tabClass.join(""))}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data("bs.popover");const _config="object"==typeof config?config:null;if((data||!/dispose|hide/.test(config))&&(data||(data=new Popover(this,_config),(0,_jquery.default)(this).data("bs.popover",data)),"string"==typeof config)){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}_jquery.default.fn[NAME]=Popover._jQueryInterface,_jquery.default.fn[NAME].Constructor=Popover,_jquery.default.fn[NAME].noConflict=()=>(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Popover._jQueryInterface);var _default=Popover;return _exports.default=_default,_exports.default})); //# sourceMappingURL=popover.min.js.map boost/amd/build/bootstrap/collapse.min.js 0000604 00000016667 15062070724 0014510 0 ustar 00 define("theme_boost/bootstrap/collapse",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="collapse",DATA_KEY="bs.collapse",EVENT_KEY=".".concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),Default={toggle:!0,parent:""},DefaultType={toggle:"boolean",parent:"(string|element)"};class Collapse{constructor(element,config){this._isTransitioning=!1,this._element=element,this._config=this._getConfig(config),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'.concat(element.id,'"],')+'[data-toggle="collapse"][data-target="#'.concat(element.id,'"]')));const toggleList=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]'));for(let i=0,len=toggleList.length;i<len;i++){const elem=toggleList[i],selector=_util.default.getSelectorFromElement(elem),filterElement=[].slice.call(document.querySelectorAll(selector)).filter((foundElem=>foundElem===element));null!==selector&&filterElement.length>0&&(this._selector=selector,this._triggerArray.push(elem))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}static get VERSION(){return"4.6.2"}static get Default(){return Default}toggle(){(0,_jquery.default)(this._element).hasClass("show")?this.hide():this.show()}show(){if(this._isTransitioning||(0,_jquery.default)(this._element).hasClass("show"))return;let actives,activesData;if(this._parent&&(actives=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((elem=>"string"==typeof this._config.parent?elem.getAttribute("data-parent")===this._config.parent:elem.classList.contains("collapse"))),0===actives.length&&(actives=null)),actives&&(activesData=(0,_jquery.default)(actives).not(this._selector).data(DATA_KEY),activesData&&activesData._isTransitioning))return;const startEvent=_jquery.default.Event(EVENT_SHOW);if((0,_jquery.default)(this._element).trigger(startEvent),startEvent.isDefaultPrevented())return;actives&&(Collapse._jQueryInterface.call((0,_jquery.default)(actives).not(this._selector),"hide"),activesData||(0,_jquery.default)(actives).data(DATA_KEY,null));const dimension=this._getDimension();(0,_jquery.default)(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[dimension]=0,this._triggerArray.length&&(0,_jquery.default)(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);const capitalizedDimension=dimension[0].toUpperCase()+dimension.slice(1),scrollSize="scroll".concat(capitalizedDimension),transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=>{(0,_jquery.default)(this._element).removeClass("collapsing").addClass("".concat("collapse"," ").concat("show")),this._element.style[dimension]="",this.setTransitioning(!1),(0,_jquery.default)(this._element).trigger(EVENT_SHOWN)})).emulateTransitionEnd(transitionDuration),this._element.style[dimension]="".concat(this._element[scrollSize],"px")}hide(){if(this._isTransitioning||!(0,_jquery.default)(this._element).hasClass("show"))return;const startEvent=_jquery.default.Event(EVENT_HIDE);if((0,_jquery.default)(this._element).trigger(startEvent),startEvent.isDefaultPrevented())return;const dimension=this._getDimension();this._element.style[dimension]="".concat(this._element.getBoundingClientRect()[dimension],"px"),_util.default.reflow(this._element),(0,_jquery.default)(this._element).addClass("collapsing").removeClass("".concat("collapse"," ").concat("show"));const triggerArrayLength=this._triggerArray.length;if(triggerArrayLength>0)for(let i=0;i<triggerArrayLength;i++){const trigger=this._triggerArray[i],selector=_util.default.getSelectorFromElement(trigger);if(null!==selector){(0,_jquery.default)([].slice.call(document.querySelectorAll(selector))).hasClass("show")||(0,_jquery.default)(trigger).addClass("collapsed").attr("aria-expanded",!1)}}this.setTransitioning(!0);this._element.style[dimension]="";const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=>{this.setTransitioning(!1),(0,_jquery.default)(this._element).removeClass("collapsing").addClass("collapse").trigger(EVENT_HIDDEN)})).emulateTransitionEnd(transitionDuration)}setTransitioning(isTransitioning){this._isTransitioning=isTransitioning}dispose(){_jquery.default.removeData(this._element,DATA_KEY),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null}_getConfig(config){return(config={...Default,...config}).toggle=Boolean(config.toggle),_util.default.typeCheckConfig(NAME,config,DefaultType),config}_getDimension(){return(0,_jquery.default)(this._element).hasClass("width")?"width":"height"}_getParent(){let parent;_util.default.isElement(this._config.parent)?(parent=this._config.parent,void 0!==this._config.parent.jquery&&(parent=this._config.parent[0])):parent=document.querySelector(this._config.parent);const selector='[data-toggle="collapse"][data-parent="'.concat(this._config.parent,'"]'),children=[].slice.call(parent.querySelectorAll(selector));return(0,_jquery.default)(children).each(((i,element)=>{this._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element),[element])})),parent}_addAriaAndCollapsedClass(element,triggerArray){const isOpen=(0,_jquery.default)(element).hasClass("show");triggerArray.length&&(0,_jquery.default)(triggerArray).toggleClass("collapsed",!isOpen).attr("aria-expanded",isOpen)}static _getTargetFromElement(element){const selector=_util.default.getSelectorFromElement(element);return selector?document.querySelector(selector):null}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data(DATA_KEY);const _config={...Default,...$element.data(),..."object"==typeof config&&config?config:{}};if(!data&&_config.toggle&&"string"==typeof config&&/show|hide/.test(config)&&(_config.toggle=!1),data||(data=new Collapse(this,_config),$element.data(DATA_KEY,data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-toggle="collapse"]',(function(event){"A"===event.currentTarget.tagName&&event.preventDefault();const $trigger=(0,_jquery.default)(this),selector=_util.default.getSelectorFromElement(this),selectors=[].slice.call(document.querySelectorAll(selector));(0,_jquery.default)(selectors).each((function(){const $target=(0,_jquery.default)(this),config=$target.data(DATA_KEY)?"toggle":$trigger.data();Collapse._jQueryInterface.call($target,config)}))})),_jquery.default.fn[NAME]=Collapse._jQueryInterface,_jquery.default.fn[NAME].Constructor=Collapse,_jquery.default.fn[NAME].noConflict=()=>(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Collapse._jQueryInterface);var _default=Collapse;return _exports.default=_default,_exports.default})); //# sourceMappingURL=collapse.min.js.map boost/amd/build/bootstrap/carousel.min.js.map 0000604 00000061462 15062070724 0015270 0 ustar 00 {"version":3,"file":"carousel.min.js","sources":["../../src/bootstrap/carousel.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): carousel.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'carousel'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.carousel'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key\nconst ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key\nconst TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch\nconst SWIPE_THRESHOLD = 40\n\nconst CLASS_NAME_CAROUSEL = 'carousel'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_SLIDE = 'slide'\nconst CLASS_NAME_RIGHT = 'carousel-item-right'\nconst CLASS_NAME_LEFT = 'carousel-item-left'\nconst CLASS_NAME_NEXT = 'carousel-item-next'\nconst CLASS_NAME_PREV = 'carousel-item-prev'\nconst CLASS_NAME_POINTER_EVENT = 'pointer-event'\n\nconst DIRECTION_NEXT = 'next'\nconst DIRECTION_PREV = 'prev'\nconst DIRECTION_LEFT = 'left'\nconst DIRECTION_RIGHT = 'right'\n\nconst EVENT_SLIDE = `slide${EVENT_KEY}`\nconst EVENT_SLID = `slid${EVENT_KEY}`\nconst EVENT_KEYDOWN = `keydown${EVENT_KEY}`\nconst EVENT_MOUSEENTER = `mouseenter${EVENT_KEY}`\nconst EVENT_MOUSELEAVE = `mouseleave${EVENT_KEY}`\nconst EVENT_TOUCHSTART = `touchstart${EVENT_KEY}`\nconst EVENT_TOUCHMOVE = `touchmove${EVENT_KEY}`\nconst EVENT_TOUCHEND = `touchend${EVENT_KEY}`\nconst EVENT_POINTERDOWN = `pointerdown${EVENT_KEY}`\nconst EVENT_POINTERUP = `pointerup${EVENT_KEY}`\nconst EVENT_DRAG_START = `dragstart${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_ITEM = '.active.carousel-item'\nconst SELECTOR_ITEM = '.carousel-item'\nconst SELECTOR_ITEM_IMG = '.carousel-item img'\nconst SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev'\nconst SELECTOR_INDICATORS = '.carousel-indicators'\nconst SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]'\nconst SELECTOR_DATA_RIDE = '[data-ride=\"carousel\"]'\n\nconst Default = {\n interval: 5000,\n keyboard: true,\n slide: false,\n pause: 'hover',\n wrap: true,\n touch: true\n}\n\nconst DefaultType = {\n interval: '(number|boolean)',\n keyboard: 'boolean',\n slide: '(boolean|string)',\n pause: '(string|boolean)',\n wrap: 'boolean',\n touch: 'boolean'\n}\n\nconst PointerType = {\n TOUCH: 'touch',\n PEN: 'pen'\n}\n\n/**\n * Class definition\n */\n\nclass Carousel {\n constructor(element, config) {\n this._items = null\n this._interval = null\n this._activeElement = null\n this._isPaused = false\n this._isSliding = false\n this.touchTimeout = null\n this.touchStartX = 0\n this.touchDeltaX = 0\n\n this._config = this._getConfig(config)\n this._element = element\n this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS)\n this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0\n this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)\n\n this._addEventListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n next() {\n if (!this._isSliding) {\n this._slide(DIRECTION_NEXT)\n }\n }\n\n nextWhenVisible() {\n const $element = $(this._element)\n // Don't call next when the page isn't visible\n // or the carousel or its parent isn't visible\n if (!document.hidden &&\n ($element.is(':visible') && $element.css('visibility') !== 'hidden')) {\n this.next()\n }\n }\n\n prev() {\n if (!this._isSliding) {\n this._slide(DIRECTION_PREV)\n }\n }\n\n pause(event) {\n if (!event) {\n this._isPaused = true\n }\n\n if (this._element.querySelector(SELECTOR_NEXT_PREV)) {\n Util.triggerTransitionEnd(this._element)\n this.cycle(true)\n }\n\n clearInterval(this._interval)\n this._interval = null\n }\n\n cycle(event) {\n if (!event) {\n this._isPaused = false\n }\n\n if (this._interval) {\n clearInterval(this._interval)\n this._interval = null\n }\n\n if (this._config.interval && !this._isPaused) {\n this._updateInterval()\n\n this._interval = setInterval(\n (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n this._config.interval\n )\n }\n }\n\n to(index) {\n this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n const activeIndex = this._getItemIndex(this._activeElement)\n\n if (index > this._items.length - 1 || index < 0) {\n return\n }\n\n if (this._isSliding) {\n $(this._element).one(EVENT_SLID, () => this.to(index))\n return\n }\n\n if (activeIndex === index) {\n this.pause()\n this.cycle()\n return\n }\n\n const direction = index > activeIndex ?\n DIRECTION_NEXT :\n DIRECTION_PREV\n\n this._slide(direction, this._items[index])\n }\n\n dispose() {\n $(this._element).off(EVENT_KEY)\n $.removeData(this._element, DATA_KEY)\n\n this._items = null\n this._config = null\n this._element = null\n this._interval = null\n this._isPaused = null\n this._isSliding = null\n this._activeElement = null\n this._indicatorsElement = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _handleSwipe() {\n const absDeltax = Math.abs(this.touchDeltaX)\n\n if (absDeltax <= SWIPE_THRESHOLD) {\n return\n }\n\n const direction = absDeltax / this.touchDeltaX\n\n this.touchDeltaX = 0\n\n // swipe left\n if (direction > 0) {\n this.prev()\n }\n\n // swipe right\n if (direction < 0) {\n this.next()\n }\n }\n\n _addEventListeners() {\n if (this._config.keyboard) {\n $(this._element).on(EVENT_KEYDOWN, event => this._keydown(event))\n }\n\n if (this._config.pause === 'hover') {\n $(this._element)\n .on(EVENT_MOUSEENTER, event => this.pause(event))\n .on(EVENT_MOUSELEAVE, event => this.cycle(event))\n }\n\n if (this._config.touch) {\n this._addTouchEventListeners()\n }\n }\n\n _addTouchEventListeners() {\n if (!this._touchSupported) {\n return\n }\n\n const start = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchStartX = event.originalEvent.clientX\n } else if (!this._pointerEvent) {\n this.touchStartX = event.originalEvent.touches[0].clientX\n }\n }\n\n const move = event => {\n // ensure swiping with one touch and not pinching\n this.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ?\n 0 :\n event.originalEvent.touches[0].clientX - this.touchStartX\n }\n\n const end = event => {\n if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n this.touchDeltaX = event.originalEvent.clientX - this.touchStartX\n }\n\n this._handleSwipe()\n if (this._config.pause === 'hover') {\n // If it's a touch-enabled device, mouseenter/leave are fired as\n // part of the mouse compatibility events on first tap - the carousel\n // would stop cycling until user tapped out of it;\n // here, we listen for touchend, explicitly pause the carousel\n // (as if it's the second time we tap on it, mouseenter compat event\n // is NOT fired) and after a timeout (to allow for mouse compatibility\n // events to fire) we explicitly restart cycling\n\n this.pause()\n if (this.touchTimeout) {\n clearTimeout(this.touchTimeout)\n }\n\n this.touchTimeout = setTimeout(event => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval)\n }\n }\n\n $(this._element.querySelectorAll(SELECTOR_ITEM_IMG))\n .on(EVENT_DRAG_START, e => e.preventDefault())\n\n if (this._pointerEvent) {\n $(this._element).on(EVENT_POINTERDOWN, event => start(event))\n $(this._element).on(EVENT_POINTERUP, event => end(event))\n\n this._element.classList.add(CLASS_NAME_POINTER_EVENT)\n } else {\n $(this._element).on(EVENT_TOUCHSTART, event => start(event))\n $(this._element).on(EVENT_TOUCHMOVE, event => move(event))\n $(this._element).on(EVENT_TOUCHEND, event => end(event))\n }\n }\n\n _keydown(event) {\n if (/input|textarea/i.test(event.target.tagName)) {\n return\n }\n\n switch (event.which) {\n case ARROW_LEFT_KEYCODE:\n event.preventDefault()\n this.prev()\n break\n case ARROW_RIGHT_KEYCODE:\n event.preventDefault()\n this.next()\n break\n default:\n }\n }\n\n _getItemIndex(element) {\n this._items = element && element.parentNode ?\n [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) :\n []\n return this._items.indexOf(element)\n }\n\n _getItemByDirection(direction, activeElement) {\n const isNextDirection = direction === DIRECTION_NEXT\n const isPrevDirection = direction === DIRECTION_PREV\n const activeIndex = this._getItemIndex(activeElement)\n const lastItemIndex = this._items.length - 1\n const isGoingToWrap = isPrevDirection && activeIndex === 0 ||\n isNextDirection && activeIndex === lastItemIndex\n\n if (isGoingToWrap && !this._config.wrap) {\n return activeElement\n }\n\n const delta = direction === DIRECTION_PREV ? -1 : 1\n const itemIndex = (activeIndex + delta) % this._items.length\n\n return itemIndex === -1 ?\n this._items[this._items.length - 1] : this._items[itemIndex]\n }\n\n _triggerSlideEvent(relatedTarget, eventDirectionName) {\n const targetIndex = this._getItemIndex(relatedTarget)\n const fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM))\n const slideEvent = $.Event(EVENT_SLIDE, {\n relatedTarget,\n direction: eventDirectionName,\n from: fromIndex,\n to: targetIndex\n })\n\n $(this._element).trigger(slideEvent)\n\n return slideEvent\n }\n\n _setActiveIndicatorElement(element) {\n if (this._indicatorsElement) {\n const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE))\n $(indicators).removeClass(CLASS_NAME_ACTIVE)\n\n const nextIndicator = this._indicatorsElement.children[\n this._getItemIndex(element)\n ]\n\n if (nextIndicator) {\n $(nextIndicator).addClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n _updateInterval() {\n const element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n\n if (!element) {\n return\n }\n\n const elementInterval = parseInt(element.getAttribute('data-interval'), 10)\n\n if (elementInterval) {\n this._config.defaultInterval = this._config.defaultInterval || this._config.interval\n this._config.interval = elementInterval\n } else {\n this._config.interval = this._config.defaultInterval || this._config.interval\n }\n }\n\n _slide(direction, element) {\n const activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM)\n const activeElementIndex = this._getItemIndex(activeElement)\n const nextElement = element || activeElement &&\n this._getItemByDirection(direction, activeElement)\n const nextElementIndex = this._getItemIndex(nextElement)\n const isCycling = Boolean(this._interval)\n\n let directionalClassName\n let orderClassName\n let eventDirectionName\n\n if (direction === DIRECTION_NEXT) {\n directionalClassName = CLASS_NAME_LEFT\n orderClassName = CLASS_NAME_NEXT\n eventDirectionName = DIRECTION_LEFT\n } else {\n directionalClassName = CLASS_NAME_RIGHT\n orderClassName = CLASS_NAME_PREV\n eventDirectionName = DIRECTION_RIGHT\n }\n\n if (nextElement && $(nextElement).hasClass(CLASS_NAME_ACTIVE)) {\n this._isSliding = false\n return\n }\n\n const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName)\n if (slideEvent.isDefaultPrevented()) {\n return\n }\n\n if (!activeElement || !nextElement) {\n // Some weirdness is happening, so we bail\n return\n }\n\n this._isSliding = true\n\n if (isCycling) {\n this.pause()\n }\n\n this._setActiveIndicatorElement(nextElement)\n this._activeElement = nextElement\n\n const slidEvent = $.Event(EVENT_SLID, {\n relatedTarget: nextElement,\n direction: eventDirectionName,\n from: activeElementIndex,\n to: nextElementIndex\n })\n\n if ($(this._element).hasClass(CLASS_NAME_SLIDE)) {\n $(nextElement).addClass(orderClassName)\n\n Util.reflow(nextElement)\n\n $(activeElement).addClass(directionalClassName)\n $(nextElement).addClass(directionalClassName)\n\n const transitionDuration = Util.getTransitionDurationFromElement(activeElement)\n\n $(activeElement)\n .one(Util.TRANSITION_END, () => {\n $(nextElement)\n .removeClass(`${directionalClassName} ${orderClassName}`)\n .addClass(CLASS_NAME_ACTIVE)\n\n $(activeElement).removeClass(`${CLASS_NAME_ACTIVE} ${orderClassName} ${directionalClassName}`)\n\n this._isSliding = false\n\n setTimeout(() => $(this._element).trigger(slidEvent), 0)\n })\n .emulateTransitionEnd(transitionDuration)\n } else {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n $(nextElement).addClass(CLASS_NAME_ACTIVE)\n\n this._isSliding = false\n $(this._element).trigger(slidEvent)\n }\n\n if (isCycling) {\n this.cycle()\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n let _config = {\n ...Default,\n ...$(this).data()\n }\n\n if (typeof config === 'object') {\n _config = {\n ..._config,\n ...config\n }\n }\n\n const action = typeof config === 'string' ? config : _config.slide\n\n if (!data) {\n data = new Carousel(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'number') {\n data.to(config)\n } else if (typeof action === 'string') {\n if (typeof data[action] === 'undefined') {\n throw new TypeError(`No method named \"${action}\"`)\n }\n\n data[action]()\n } else if (_config.interval && _config.ride) {\n data.pause()\n data.cycle()\n }\n })\n }\n\n static _dataApiClickHandler(event) {\n const selector = Util.getSelectorFromElement(this)\n\n if (!selector) {\n return\n }\n\n const target = $(selector)[0]\n\n if (!target || !$(target).hasClass(CLASS_NAME_CAROUSEL)) {\n return\n }\n\n const config = {\n ...$(target).data(),\n ...$(this).data()\n }\n const slideIndex = this.getAttribute('data-slide-to')\n\n if (slideIndex) {\n config.interval = false\n }\n\n Carousel._jQueryInterface.call($(target), config)\n\n if (slideIndex) {\n $(target).data(DATA_KEY).to(slideIndex)\n }\n\n event.preventDefault()\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler)\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE))\n for (let i = 0, len = carousels.length; i < len; i++) {\n const $carousel = $(carousels[i])\n Carousel._jQueryInterface.call($carousel, $carousel.data())\n }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Carousel._jQueryInterface\n$.fn[NAME].Constructor = Carousel\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Carousel._jQueryInterface\n}\n\nexport default Carousel\n"],"names":["NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_SLIDE","EVENT_SLID","EVENT_KEYDOWN","EVENT_MOUSEENTER","EVENT_MOUSELEAVE","EVENT_TOUCHSTART","EVENT_TOUCHMOVE","EVENT_TOUCHEND","EVENT_POINTERDOWN","EVENT_POINTERUP","EVENT_DRAG_START","EVENT_LOAD_DATA_API","EVENT_CLICK_DATA_API","Default","interval","keyboard","slide","pause","wrap","touch","DefaultType","PointerType","TOUCH","PEN","Carousel","constructor","element","config","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","this","_getConfig","_element","_indicatorsElement","querySelector","_touchSupported","document","documentElement","navigator","maxTouchPoints","_pointerEvent","Boolean","window","PointerEvent","MSPointerEvent","_addEventListeners","VERSION","next","_slide","nextWhenVisible","$element","hidden","is","css","prev","event","triggerTransitionEnd","cycle","clearInterval","_updateInterval","setInterval","visibilityState","bind","to","index","activeIndex","_getItemIndex","length","one","direction","dispose","off","removeData","typeCheckConfig","_handleSwipe","absDeltax","Math","abs","on","_keydown","_addTouchEventListeners","start","originalEvent","pointerType","toUpperCase","clientX","touches","move","end","clearTimeout","setTimeout","querySelectorAll","e","preventDefault","classList","add","test","target","tagName","which","parentNode","slice","call","indexOf","_getItemByDirection","activeElement","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","relatedTarget","eventDirectionName","targetIndex","fromIndex","slideEvent","Event","from","trigger","_setActiveIndicatorElement","indicators","removeClass","nextIndicator","children","addClass","elementInterval","parseInt","getAttribute","defaultInterval","activeElementIndex","nextElement","nextElementIndex","isCycling","directionalClassName","orderClassName","hasClass","isDefaultPrevented","slidEvent","reflow","transitionDuration","Util","getTransitionDurationFromElement","TRANSITION_END","emulateTransitionEnd","each","data","action","TypeError","ride","selector","getSelectorFromElement","slideIndex","_jQueryInterface","_dataApiClickHandler","carousels","i","len","$carousel","Constructor","noConflict"],"mappings":"4VAcMA,KAAO,WAEPC,SAAW,cACXC,qBAAgBD,UAEhBE,mBAAqBC,gBAAEC,GAAGL,MAoB1BM,2BAAsBJ,WACtBK,yBAAoBL,WACpBM,+BAA0BN,WAC1BO,qCAAgCP,WAChCQ,qCAAgCR,WAChCS,qCAAgCT,WAChCU,mCAA8BV,WAC9BW,iCAA4BX,WAC5BY,uCAAkCZ,WAClCa,mCAA8Bb,WAC9Bc,oCAA+Bd,WAC/Be,kCAA6Bf,kBAhCd,aAiCfgB,oCAA+BhB,kBAjChB,aA4CfiB,QAAU,CACdC,SAAU,IACVC,UAAU,EACVC,OAAO,EACPC,MAAO,QACPC,MAAM,EACNC,OAAO,GAGHC,YAAc,CAClBN,SAAU,mBACVC,SAAU,UACVC,MAAO,mBACPC,MAAO,mBACPC,KAAM,UACNC,MAAO,WAGHE,YAAc,CAClBC,MAAO,QACPC,IAAK,aAODC,SACJC,YAAYC,QAASC,aACdC,OAAS,UACTC,UAAY,UACZC,eAAiB,UACjBC,WAAY,OACZC,YAAa,OACbC,aAAe,UACfC,YAAc,OACdC,YAAc,OAEdC,QAAUC,KAAKC,WAAWX,aAC1BY,SAAWb,aACXc,mBAAqBH,KAAKE,SAASE,cA5ChB,6BA6CnBC,gBAAkB,iBAAkBC,SAASC,iBAAmBC,UAAUC,eAAiB,OAC3FC,cAAgBC,QAAQC,OAAOC,cAAgBD,OAAOE,qBAEtDC,qBAIIC,2BA/FG,QAmGHxC,4BACFA,QAITyC,OACOjB,KAAKL,iBACHuB,OAvFY,QA2FrBC,wBACQC,UAAW,mBAAEpB,KAAKE,WAGnBI,SAASe,QACXD,SAASE,GAAG,aAA8C,WAA/BF,SAASG,IAAI,oBACpCN,OAITO,OACOxB,KAAKL,iBACHuB,OAtGY,QA0GrBtC,MAAM6C,OACCA,aACE/B,WAAY,GAGfM,KAAKE,SAASE,cAzFK,4DA0FhBsB,qBAAqB1B,KAAKE,eAC1ByB,OAAM,IAGbC,cAAc5B,KAAKR,gBACdA,UAAY,KAGnBmC,MAAMF,OACCA,aACE/B,WAAY,GAGfM,KAAKR,YACPoC,cAAc5B,KAAKR,gBACdA,UAAY,MAGfQ,KAAKD,QAAQtB,WAAauB,KAAKN,iBAC5BmC,uBAEArC,UAAYsC,aACdxB,SAASyB,gBAAkB/B,KAAKmB,gBAAkBnB,KAAKiB,MAAMe,KAAKhC,MACnEA,KAAKD,QAAQtB,WAKnBwD,GAAGC,YACIzC,eAAiBO,KAAKE,SAASE,cA1HX,+BA4HnB+B,YAAcnC,KAAKoC,cAAcpC,KAAKP,mBAExCyC,MAAQlC,KAAKT,OAAO8C,OAAS,GAAKH,MAAQ,YAI1ClC,KAAKL,0CACLK,KAAKE,UAAUoC,IAAI1E,YAAY,IAAMoC,KAAKiC,GAAGC,YAI7CC,cAAgBD,kBACbtD,kBACA+C,cAIDY,UAAYL,MAAQC,YAjKP,OACA,YAoKdjB,OAAOqB,UAAWvC,KAAKT,OAAO2C,QAGrCM,8BACIxC,KAAKE,UAAUuC,IAAIlF,2BACnBmF,WAAW1C,KAAKE,SAAU5C,eAEvBiC,OAAS,UACTQ,QAAU,UACVG,SAAW,UACXV,UAAY,UACZE,UAAY,UACZC,WAAa,UACbF,eAAiB,UACjBU,mBAAqB,KAI5BF,WAAWX,eACTA,OAAS,IACJd,WACAc,sBAEAqD,gBAAgBtF,KAAMiC,OAAQP,aAC5BO,OAGTsD,qBACQC,UAAYC,KAAKC,IAAI/C,KAAKF,gBAE5B+C,WA9MgB,gBAkNdN,UAAYM,UAAY7C,KAAKF,iBAE9BA,YAAc,EAGfyC,UAAY,QACTf,OAIHe,UAAY,QACTtB,OAITF,qBACMf,KAAKD,QAAQrB,8BACbsB,KAAKE,UAAU8C,GAAGnF,eAAe4D,OAASzB,KAAKiD,SAASxB,SAGjC,UAAvBzB,KAAKD,QAAQnB,2BACboB,KAAKE,UACJ8C,GAAGlF,kBAAkB2D,OAASzB,KAAKpB,MAAM6C,SACzCuB,GAAGjF,kBAAkB0D,OAASzB,KAAK2B,MAAMF,SAG1CzB,KAAKD,QAAQjB,YACVoE,0BAITA,8BACOlD,KAAKK,6BAIJ8C,MAAQ1B,QACRzB,KAAKU,eAAiB1B,YAAYyC,MAAM2B,cAAcC,YAAYC,oBAC/DzD,YAAc4B,MAAM2B,cAAcG,QAC7BvD,KAAKU,qBACVb,YAAc4B,MAAM2B,cAAcI,QAAQ,GAAGD,UAIhDE,KAAOhC,aAEN3B,YAAc2B,MAAM2B,cAAcI,SAAW/B,MAAM2B,cAAcI,QAAQnB,OAAS,EACrF,EACAZ,MAAM2B,cAAcI,QAAQ,GAAGD,QAAUvD,KAAKH,aAG5C6D,IAAMjC,QACNzB,KAAKU,eAAiB1B,YAAYyC,MAAM2B,cAAcC,YAAYC,sBAC/DxD,YAAc2B,MAAM2B,cAAcG,QAAUvD,KAAKH,kBAGnD+C,eACsB,UAAvB5C,KAAKD,QAAQnB,aASVA,QACDoB,KAAKJ,cACP+D,aAAa3D,KAAKJ,mBAGfA,aAAegE,YAAWnC,OAASzB,KAAK2B,MAAMF,QA1R5B,IA0R6DzB,KAAKD,QAAQtB,gCAInGuB,KAAKE,SAAS2D,iBA5PM,uBA6PnBb,GAAG3E,kBAAkByF,GAAKA,EAAEC,mBAE3B/D,KAAKU,mCACLV,KAAKE,UAAU8C,GAAG7E,mBAAmBsD,OAAS0B,MAAM1B,6BACpDzB,KAAKE,UAAU8C,GAAG5E,iBAAiBqD,OAASiC,IAAIjC,cAE7CvB,SAAS8D,UAAUC,IA3RG,uCA6RzBjE,KAAKE,UAAU8C,GAAGhF,kBAAkByD,OAAS0B,MAAM1B,6BACnDzB,KAAKE,UAAU8C,GAAG/E,iBAAiBwD,OAASgC,KAAKhC,6BACjDzB,KAAKE,UAAU8C,GAAG9E,gBAAgBuD,OAASiC,IAAIjC,UAIrDwB,SAASxB,WACH,kBAAkByC,KAAKzC,MAAM0C,OAAOC,gBAIhC3C,MAAM4C,YApTS,GAsTnB5C,MAAMsC,sBACDvC,kBAtTe,GAyTpBC,MAAMsC,sBACD9C,QAMXmB,cAAc/C,qBACPE,OAASF,SAAWA,QAAQiF,WAC/B,GAAGC,MAAMC,KAAKnF,QAAQiF,WAAWT,iBAhSjB,mBAiShB,GACK7D,KAAKT,OAAOkF,QAAQpF,SAG7BqF,oBAAoBnC,UAAWoC,qBACvBC,gBA3Ta,SA2TKrC,UAClBsC,gBA3Ta,SA2TKtC,UAClBJ,YAAcnC,KAAKoC,cAAcuC,eACjCG,cAAgB9E,KAAKT,OAAO8C,OAAS,MACrBwC,iBAAmC,IAAhB1C,aACjByC,iBAAmBzC,cAAgB2C,iBAErC9E,KAAKD,QAAQlB,YAC1B8F,oBAIHI,WAAa5C,aAtUA,SAqULI,WAAgC,EAAI,IACRvC,KAAKT,OAAO8C,cAEhC,IAAf0C,UACL/E,KAAKT,OAAOS,KAAKT,OAAO8C,OAAS,GAAKrC,KAAKT,OAAOwF,WAGtDC,mBAAmBC,cAAeC,0BAC1BC,YAAcnF,KAAKoC,cAAc6C,eACjCG,UAAYpF,KAAKoC,cAAcpC,KAAKE,SAASE,cA3T1B,0BA4TnBiF,WAAa5H,gBAAE6H,MAAM3H,YAAa,CACtCsH,cAAAA,cACA1C,UAAW2C,mBACXK,KAAMH,UACNnD,GAAIkD,wCAGJnF,KAAKE,UAAUsF,QAAQH,YAElBA,WAGTI,2BAA2BpG,YACrBW,KAAKG,mBAAoB,OACrBuF,WAAa,GAAGnB,MAAMC,KAAKxE,KAAKG,mBAAmB0D,iBA3UvC,gCA4UhB6B,YAAYC,YAvWM,gBAyWdC,cAAgB5F,KAAKG,mBAAmB0F,SAC5C7F,KAAKoC,cAAc/C,UAGjBuG,mCACAA,eAAeE,SA9WC,WAmXxBjE,wBACQxC,QAAUW,KAAKP,gBAAkBO,KAAKE,SAASE,cAxV5B,6BA0VpBf,qBAIC0G,gBAAkBC,SAAS3G,QAAQ4G,aAAa,iBAAkB,IAEpEF,sBACGhG,QAAQmG,gBAAkBlG,KAAKD,QAAQmG,iBAAmBlG,KAAKD,QAAQtB,cACvEsB,QAAQtB,SAAWsH,sBAEnBhG,QAAQtB,SAAWuB,KAAKD,QAAQmG,iBAAmBlG,KAAKD,QAAQtB,SAIzEyC,OAAOqB,UAAWlD,eACVsF,cAAgB3E,KAAKE,SAASE,cAzWX,yBA0WnB+F,mBAAqBnG,KAAKoC,cAAcuC,eACxCyB,YAAc/G,SAAWsF,eAC7B3E,KAAK0E,oBAAoBnC,UAAWoC,eAChC0B,iBAAmBrG,KAAKoC,cAAcgE,aACtCE,UAAY3F,QAAQX,KAAKR,eAE3B+G,qBACAC,eACAtB,sBAtYe,SAwYf3C,WACFgE,qBA9YkB,qBA+YlBC,eA9YkB,qBA+YlBtB,mBAzYiB,SA2YjBqB,qBAnZmB,sBAoZnBC,eAjZkB,qBAkZlBtB,mBA5YkB,SA+YhBkB,cAAe,mBAAEA,aAAaK,SA1ZZ,2BA2Zf9G,YAAa,MAIDK,KAAKgF,mBAAmBoB,YAAalB,oBACzCwB,gCAIV/B,gBAAkByB,wBAKlBzG,YAAa,EAEd2G,gBACG1H,aAGF6G,2BAA2BW,kBAC3B3G,eAAiB2G,kBAEhBO,UAAYlJ,gBAAE6H,MAAM1H,WAAY,CACpCqH,cAAemB,YACf7D,UAAW2C,mBACXK,KAAMY,mBACNlE,GAAIoE,uBAGF,mBAAErG,KAAKE,UAAUuG,SAxbA,SAwb4B,qBAC7CL,aAAaN,SAASU,8BAEnBI,OAAOR,iCAEVzB,eAAemB,SAASS,0CACxBH,aAAaN,SAASS,4BAElBM,mBAAqBC,cAAKC,iCAAiCpC,mCAE/DA,eACCrC,IAAIwE,cAAKE,gBAAgB,yBACtBZ,aACCT,sBAAeY,iCAAwBC,iBACvCV,SAvca,8BAycdnB,eAAegB,sBAzcD,qBAycqCa,2BAAkBD,4BAElE5G,YAAa,EAElBiE,YAAW,KAAM,mBAAE5D,KAAKE,UAAUsF,QAAQmB,YAAY,MAEvDM,qBAAqBJ,4CAEtBlC,eAAegB,YAjdG,8BAkdlBS,aAAaN,SAldK,eAodfnG,YAAa,sBAChBK,KAAKE,UAAUsF,QAAQmB,WAGvBL,gBACG3E,gCAKerC,eACfU,KAAKkH,MAAK,eACXC,MAAO,mBAAEnH,MAAMmH,KAAK7J,UACpByC,QAAU,IACTvB,YACA,mBAAEwB,MAAMmH,QAGS,iBAAX7H,SACTS,QAAU,IACLA,WACAT,eAID8H,OAA2B,iBAAX9H,OAAsBA,OAASS,QAAQpB,SAExDwI,OACHA,KAAO,IAAIhI,SAASa,KAAMD,6BACxBC,MAAMmH,KAAK7J,SAAU6J,OAGH,iBAAX7H,OACT6H,KAAKlF,GAAG3C,aACH,GAAsB,iBAAX8H,OAAqB,SACT,IAAjBD,KAAKC,cACR,IAAIC,qCAA8BD,aAG1CD,KAAKC,eACIrH,QAAQtB,UAAYsB,QAAQuH,OACrCH,KAAKvI,QACLuI,KAAKxF,wCAKiBF,aACpB8F,SAAWT,cAAKU,uBAAuBxH,UAExCuH,sBAICpD,QAAS,mBAAEoD,UAAU,OAEtBpD,UAAW,mBAAEA,QAAQsC,SA7gBF,yBAihBlBnH,OAAS,KACV,mBAAE6E,QAAQgD,WACV,mBAAEnH,MAAMmH,QAEPM,WAAazH,KAAKiG,aAAa,iBAEjCwB,aACFnI,OAAOb,UAAW,GAGpBU,SAASuI,iBAAiBlD,MAAK,mBAAEL,QAAS7E,QAEtCmI,gCACAtD,QAAQgD,KAAK7J,UAAU2E,GAAGwF,YAG9BhG,MAAMsC,sCAQRzD,UAAU0C,GAAGzE,qBAvgBa,gCAugB8BY,SAASwI,0CAEjE/G,QAAQoC,GAAG1E,qBAAqB,WAC1BsJ,UAAY,GAAGrD,MAAMC,KAAKlE,SAASuD,iBAzgBhB,+BA0gBpB,IAAIgE,EAAI,EAAGC,IAAMF,UAAUvF,OAAQwF,EAAIC,IAAKD,IAAK,OAC9CE,WAAY,mBAAEH,UAAUC,IAC9B1I,SAASuI,iBAAiBlD,KAAKuD,UAAWA,UAAUZ,4BAQtDzJ,GAAGL,MAAQ8B,SAASuI,iCACpBhK,GAAGL,MAAM2K,YAAc7I,yBACvBzB,GAAGL,MAAM4K,WAAa,qBACpBvK,GAAGL,MAAQG,mBACN2B,SAASuI,+BAGHvI"} boost/amd/build/bootstrap/dropdown.min.js.map 0000604 00000052262 15062070724 0015305 0 ustar 00 {"version":3,"file":"dropdown.min.js","sources":["../../src/bootstrap/dropdown.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): dropdown.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Popper from 'core/popper'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'dropdown'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.dropdown'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\nconst SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key\nconst TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key\nconst ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key\nconst ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key\nconst RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse)\nconst REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`)\n\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_DROPUP = 'dropup'\nconst CLASS_NAME_DROPRIGHT = 'dropright'\nconst CLASS_NAME_DROPLEFT = 'dropleft'\nconst CLASS_NAME_MENURIGHT = 'dropdown-menu-right'\nconst CLASS_NAME_POSITION_STATIC = 'position-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK = `click${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"dropdown\"]'\nconst SELECTOR_FORM_CHILD = '.dropdown form'\nconst SELECTOR_MENU = '.dropdown-menu'\nconst SELECTOR_NAVBAR_NAV = '.navbar-nav'\nconst SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n\nconst PLACEMENT_TOP = 'top-start'\nconst PLACEMENT_TOPEND = 'top-end'\nconst PLACEMENT_BOTTOM = 'bottom-start'\nconst PLACEMENT_BOTTOMEND = 'bottom-end'\nconst PLACEMENT_RIGHT = 'right-start'\nconst PLACEMENT_LEFT = 'left-start'\n\nconst Default = {\n offset: 0,\n flip: true,\n boundary: 'scrollParent',\n reference: 'toggle',\n display: 'dynamic',\n popperConfig: null\n}\n\nconst DefaultType = {\n offset: '(number|string|function)',\n flip: 'boolean',\n boundary: '(string|element)',\n reference: '(string|element)',\n display: 'string',\n popperConfig: '(null|object)'\n}\n\n/**\n * Class definition\n */\n\nclass Dropdown {\n constructor(element, config) {\n this._element = element\n this._popper = null\n this._config = this._getConfig(config)\n this._menu = this._getMenuElement()\n this._inNavbar = this._detectNavbar()\n\n this._addEventListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Public\n toggle() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const isActive = $(this._menu).hasClass(CLASS_NAME_SHOW)\n\n Dropdown._clearMenus()\n\n if (isActive) {\n return\n }\n\n this.show(true)\n }\n\n show(usePopper = false) {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || $(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const showEvent = $.Event(EVENT_SHOW, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n // Totally disable Popper for Dropdowns in Navbar\n if (!this._inNavbar && usePopper) {\n // Check for Popper dependency\n if (typeof Popper === 'undefined') {\n throw new TypeError('Bootstrap\\'s dropdowns require Popper (https://popper.js.org)')\n }\n\n let referenceElement = this._element\n\n if (this._config.reference === 'parent') {\n referenceElement = parent\n } else if (Util.isElement(this._config.reference)) {\n referenceElement = this._config.reference\n\n // Check if it's jQuery element\n if (typeof this._config.reference.jquery !== 'undefined') {\n referenceElement = this._config.reference[0]\n }\n }\n\n // If boundary is not `scrollParent`, then set position to `static`\n // to allow the menu to \"escape\" the scroll parent's boundaries\n // https://github.com/twbs/bootstrap/issues/24251\n if (this._config.boundary !== 'scrollParent') {\n $(parent).addClass(CLASS_NAME_POSITION_STATIC)\n }\n\n this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig())\n }\n\n // If this is a touch-enabled device we add extra\n // empty mouseover listeners to the body's immediate children;\n // only needed because of broken event delegation on iOS\n // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n if ('ontouchstart' in document.documentElement &&\n $(parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {\n $(document.body).children().on('mouseover', null, $.noop)\n }\n\n this._element.focus()\n this._element.setAttribute('aria-expanded', true)\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_SHOWN, relatedTarget))\n }\n\n hide() {\n if (this._element.disabled || $(this._element).hasClass(CLASS_NAME_DISABLED) || !$(this._menu).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const relatedTarget = {\n relatedTarget: this._element\n }\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n const parent = Dropdown._getParentFromElement(this._element)\n\n $(parent).trigger(hideEvent)\n\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (this._popper) {\n this._popper.destroy()\n }\n\n $(this._menu).toggleClass(CLASS_NAME_SHOW)\n $(parent)\n .toggleClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._element).off(EVENT_KEY)\n this._element = null\n this._menu = null\n if (this._popper !== null) {\n this._popper.destroy()\n this._popper = null\n }\n }\n\n update() {\n this._inNavbar = this._detectNavbar()\n if (this._popper !== null) {\n this._popper.scheduleUpdate()\n }\n }\n\n // Private\n _addEventListeners() {\n $(this._element).on(EVENT_CLICK, event => {\n event.preventDefault()\n event.stopPropagation()\n this.toggle()\n })\n }\n\n _getConfig(config) {\n config = {\n ...this.constructor.Default,\n ...$(this._element).data(),\n ...config\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _getMenuElement() {\n if (!this._menu) {\n const parent = Dropdown._getParentFromElement(this._element)\n\n if (parent) {\n this._menu = parent.querySelector(SELECTOR_MENU)\n }\n }\n\n return this._menu\n }\n\n _getPlacement() {\n const $parentDropdown = $(this._element.parentNode)\n let placement = PLACEMENT_BOTTOM\n\n // Handle dropup\n if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {\n placement = $(this._menu).hasClass(CLASS_NAME_MENURIGHT) ?\n PLACEMENT_TOPEND :\n PLACEMENT_TOP\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {\n placement = PLACEMENT_RIGHT\n } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {\n placement = PLACEMENT_LEFT\n } else if ($(this._menu).hasClass(CLASS_NAME_MENURIGHT)) {\n placement = PLACEMENT_BOTTOMEND\n }\n\n return placement\n }\n\n _detectNavbar() {\n return $(this._element).closest('.navbar').length > 0\n }\n\n _getOffset() {\n const offset = {}\n\n if (typeof this._config.offset === 'function') {\n offset.fn = data => {\n data.offsets = {\n ...data.offsets,\n ...this._config.offset(data.offsets, this._element)\n }\n\n return data\n }\n } else {\n offset.offset = this._config.offset\n }\n\n return offset\n }\n\n _getPopperConfig() {\n const popperConfig = {\n placement: this._getPlacement(),\n modifiers: {\n offset: this._getOffset(),\n flip: {\n enabled: this._config.flip\n },\n preventOverflow: {\n boundariesElement: this._config.boundary\n }\n }\n }\n\n // Disable Popper if we have a static display\n if (this._config.display === 'static') {\n popperConfig.modifiers.applyStyle = {\n enabled: false\n }\n }\n\n return {\n ...popperConfig,\n ...this._config.popperConfig\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data) {\n data = new Dropdown(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n\n static _clearMenus(event) {\n if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH ||\n event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n return\n }\n\n const toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n\n for (let i = 0, len = toggles.length; i < len; i++) {\n const parent = Dropdown._getParentFromElement(toggles[i])\n const context = $(toggles[i]).data(DATA_KEY)\n const relatedTarget = {\n relatedTarget: toggles[i]\n }\n\n if (event && event.type === 'click') {\n relatedTarget.clickEvent = event\n }\n\n if (!context) {\n continue\n }\n\n const dropdownMenu = context._menu\n if (!$(parent).hasClass(CLASS_NAME_SHOW)) {\n continue\n }\n\n if (event && (event.type === 'click' &&\n /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) &&\n $.contains(parent, event.target)) {\n continue\n }\n\n const hideEvent = $.Event(EVENT_HIDE, relatedTarget)\n $(parent).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n continue\n }\n\n // If this is a touch-enabled device we remove the extra\n // empty mouseover listeners we added for iOS support\n if ('ontouchstart' in document.documentElement) {\n $(document.body).children().off('mouseover', null, $.noop)\n }\n\n toggles[i].setAttribute('aria-expanded', 'false')\n\n if (context._popper) {\n context._popper.destroy()\n }\n\n $(dropdownMenu).removeClass(CLASS_NAME_SHOW)\n $(parent)\n .removeClass(CLASS_NAME_SHOW)\n .trigger($.Event(EVENT_HIDDEN, relatedTarget))\n }\n }\n\n static _getParentFromElement(element) {\n let parent\n const selector = Util.getSelectorFromElement(element)\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n return parent || element.parentNode\n }\n\n // eslint-disable-next-line complexity\n static _dataApiKeydownHandler(event) {\n // If not input/textarea:\n // - And not a key in REGEXP_KEYDOWN => not a dropdown command\n // If input/textarea:\n // - If space key => not a dropdown command\n // - If key is other than escape\n // - If key is not up or down => not a dropdown command\n // - If trigger inside the menu => not a dropdown command\n if (/input|textarea/i.test(event.target.tagName) ?\n event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE &&\n (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE ||\n $(event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n return\n }\n\n if (this.disabled || $(this).hasClass(CLASS_NAME_DISABLED)) {\n return\n }\n\n const parent = Dropdown._getParentFromElement(this)\n const isActive = $(parent).hasClass(CLASS_NAME_SHOW)\n\n if (!isActive && event.which === ESCAPE_KEYCODE) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n\n if (!isActive || (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n if (event.which === ESCAPE_KEYCODE) {\n $(parent.querySelector(SELECTOR_DATA_TOGGLE)).trigger('focus')\n }\n\n $(this).trigger('click')\n return\n }\n\n const items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS))\n .filter(item => $(item).is(':visible'))\n\n if (items.length === 0) {\n return\n }\n\n let index = items.indexOf(event.target)\n\n if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up\n index--\n }\n\n if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down\n index++\n }\n\n if (index < 0) {\n index = 0\n }\n\n items[index].focus()\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE, Dropdown._dataApiKeydownHandler)\n .on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler)\n .on(`${EVENT_CLICK_DATA_API} ${EVENT_KEYUP_DATA_API}`, Dropdown._clearMenus)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n event.stopPropagation()\n Dropdown._jQueryInterface.call($(this), 'toggle')\n })\n .on(EVENT_CLICK_DATA_API, SELECTOR_FORM_CHILD, e => {\n e.stopPropagation()\n })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Dropdown._jQueryInterface\n$.fn[NAME].Constructor = Dropdown\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Dropdown._jQueryInterface\n}\n\nexport default Dropdown\n"],"names":["NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","REGEXP_KEYDOWN","RegExp","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK","EVENT_CLICK_DATA_API","EVENT_KEYDOWN_DATA_API","EVENT_KEYUP_DATA_API","Default","offset","flip","boundary","reference","display","popperConfig","DefaultType","Dropdown","constructor","element","config","_element","_popper","_config","this","_getConfig","_menu","_getMenuElement","_inNavbar","_detectNavbar","_addEventListeners","VERSION","toggle","disabled","hasClass","isActive","_clearMenus","show","usePopper","relatedTarget","showEvent","Event","parent","_getParentFromElement","trigger","isDefaultPrevented","Popper","TypeError","referenceElement","Util","isElement","jquery","addClass","_getPopperConfig","document","documentElement","closest","length","body","children","on","noop","focus","setAttribute","toggleClass","hide","hideEvent","destroy","dispose","removeData","off","update","scheduleUpdate","event","preventDefault","stopPropagation","data","typeCheckConfig","querySelector","_getPlacement","$parentDropdown","parentNode","placement","_getOffset","offsets","modifiers","enabled","preventOverflow","boundariesElement","applyStyle","each","which","type","toggles","slice","call","querySelectorAll","i","len","context","clickEvent","dropdownMenu","test","target","tagName","contains","removeClass","selector","getSelectorFromElement","items","filter","item","is","index","indexOf","_dataApiKeydownHandler","_jQueryInterface","e","Constructor","noConflict"],"mappings":"0ZAeMA,KAAO,WAEPC,SAAW,cACXC,qBAAgBD,UAEhBE,mBAAqBC,gBAAEC,GAAGL,MAO1BM,eAAiB,IAAIC,iBAHF,eACE,eAJJ,KAgBjBC,yBAAoBN,WACpBO,6BAAwBP,WACxBQ,yBAAoBR,WACpBS,2BAAsBT,WACtBU,2BAAsBV,WACtBW,oCAA+BX,kBAvBhB,aAwBfY,wCAAmCZ,kBAxBpB,aAyBfa,oCAA+Bb,kBAzBhB,aAwCfc,QAAU,CACdC,OAAQ,EACRC,MAAM,EACNC,SAAU,eACVC,UAAW,SACXC,QAAS,UACTC,aAAc,MAGVC,YAAc,CAClBN,OAAQ,2BACRC,KAAM,UACNC,SAAU,mBACVC,UAAW,mBACXC,QAAS,SACTC,aAAc,uBAOVE,SACJC,YAAYC,QAASC,aACdC,SAAWF,aACXG,QAAU,UACVC,QAAUC,KAAKC,WAAWL,aAC1BM,MAAQF,KAAKG,uBACbC,UAAYJ,KAAKK,qBAEjBC,qBAIIC,2BA7EG,QAiFHtB,4BACFA,QAGEO,gCACFA,YAITgB,YACMR,KAAKH,SAASY,WAAY,mBAAET,KAAKH,UAAUa,SA9EvB,yBAkFlBC,UAAW,mBAAEX,KAAKE,OAAOQ,SAjFX,QAmFpBjB,SAASmB,cAELD,eAICE,MAAK,GAGZA,WAAKC,qEACCd,KAAKH,SAASY,WAAY,mBAAET,KAAKH,UAAUa,SA9FvB,cA8FwD,mBAAEV,KAAKE,OAAOQ,SA7F1E,qBAiGdK,cAAgB,CACpBA,cAAef,KAAKH,UAEhBmB,UAAY3C,gBAAE4C,MAAMtC,WAAYoC,eAChCG,OAASzB,SAAS0B,sBAAsBnB,KAAKH,iCAEjDqB,QAAQE,QAAQJ,YAEdA,UAAUK,0BAKTrB,KAAKI,WAAaU,UAAW,SAEV,IAAXQ,sBACH,IAAIC,UAAU,oEAGlBC,iBAAmBxB,KAAKH,SAEG,WAA3BG,KAAKD,QAAQV,UACfmC,iBAAmBN,OACVO,cAAKC,UAAU1B,KAAKD,QAAQV,aACrCmC,iBAAmBxB,KAAKD,QAAQV,eAGa,IAAlCW,KAAKD,QAAQV,UAAUsC,SAChCH,iBAAmBxB,KAAKD,QAAQV,UAAU,KAOhB,iBAA1BW,KAAKD,QAAQX,8BACb8B,QAAQU,SAhIiB,wBAmIxB9B,QAAU,IAAIwB,gBAAOE,iBAAkBxB,KAAKE,MAAOF,KAAK6B,oBAO3D,iBAAkBC,SAASC,iBACuB,KAAlD,mBAAEb,QAAQc,QA7HU,eA6HmBC,4BACvCH,SAASI,MAAMC,WAAWC,GAAG,YAAa,KAAM/D,gBAAEgE,WAGjDxC,SAASyC,aACTzC,SAAS0C,aAAa,iBAAiB,uBAE1CvC,KAAKE,OAAOsC,YAvJM,4BAwJlBtB,QACCsB,YAzJiB,QA0JjBpB,QAAQ/C,gBAAE4C,MAAMrC,YAAamC,iBAGlC0B,UACMzC,KAAKH,SAASY,WAAY,mBAAET,KAAKH,UAAUa,SA/JvB,eA+JyD,mBAAEV,KAAKE,OAAOQ,SA9J3E,qBAkKdK,cAAgB,CACpBA,cAAef,KAAKH,UAEhB6C,UAAYrE,gBAAE4C,MAAMxC,WAAYsC,eAChCG,OAASzB,SAAS0B,sBAAsBnB,KAAKH,8BAEjDqB,QAAQE,QAAQsB,WAEdA,UAAUrB,uBAIVrB,KAAKF,cACFA,QAAQ6C,8BAGb3C,KAAKE,OAAOsC,YAlLM,4BAmLlBtB,QACCsB,YApLiB,QAqLjBpB,QAAQ/C,gBAAE4C,MAAMvC,aAAcqC,iBAGnC6B,0BACIC,WAAW7C,KAAKH,SAAU3B,8BAC1B8B,KAAKH,UAAUiD,IAAI3E,gBAChB0B,SAAW,UACXK,MAAQ,KACQ,OAAjBF,KAAKF,eACFA,QAAQ6C,eACR7C,QAAU,MAInBiD,cACO3C,UAAYJ,KAAKK,gBACD,OAAjBL,KAAKF,cACFA,QAAQkD,iBAKjB1C,yCACIN,KAAKH,UAAUuC,GAAGvD,aAAaoE,QAC/BA,MAAMC,iBACND,MAAME,uBACD3C,YAITP,WAAWL,eACTA,OAAS,IACJI,KAAKN,YAAYT,YACjB,mBAAEe,KAAKH,UAAUuD,UACjBxD,sBAGAyD,gBACHpF,KACA2B,OACAI,KAAKN,YAAYF,aAGZI,OAGTO,sBACOH,KAAKE,MAAO,OACTgB,OAASzB,SAAS0B,sBAAsBnB,KAAKH,UAE/CqB,cACGhB,MAAQgB,OAAOoC,cAtNN,0BA0NXtD,KAAKE,MAGdqD,sBACQC,iBAAkB,mBAAExD,KAAKH,SAAS4D,gBACpCC,UAzNiB,sBA4NjBF,gBAAgB9C,SAnPE,UAoPpBgD,WAAY,mBAAE1D,KAAKE,OAAOQ,SAjPH,uBAmBJ,UADH,YAkOP8C,gBAAgB9C,SAtPF,aAuPvBgD,UA/NkB,cAgOTF,gBAAgB9C,SAvPH,YAwPtBgD,UAhOiB,cAiOR,mBAAE1D,KAAKE,OAAOQ,SAxPA,yBAyPvBgD,UApOsB,cAuOjBA,UAGTrD,uBACS,mBAAEL,KAAKH,UAAUmC,QAAQ,WAAWC,OAAS,EAGtD0B,mBACQzE,OAAS,SAEoB,mBAAxBc,KAAKD,QAAQb,OACtBA,OAAOZ,GAAK8E,OACVA,KAAKQ,QAAU,IACVR,KAAKQ,WACL5D,KAAKD,QAAQb,OAAOkE,KAAKQ,QAAS5D,KAAKH,WAGrCuD,MAGTlE,OAAOA,OAASc,KAAKD,QAAQb,OAGxBA,OAGT2C,yBACQtC,aAAe,CACnBmE,UAAW1D,KAAKuD,gBAChBM,UAAW,CACT3E,OAAQc,KAAK2D,aACbxE,KAAM,CACJ2E,QAAS9D,KAAKD,QAAQZ,MAExB4E,gBAAiB,CACfC,kBAAmBhE,KAAKD,QAAQX,kBAMT,WAAzBY,KAAKD,QAAQT,UACfC,aAAasE,UAAUI,WAAa,CAClCH,SAAS,IAIN,IACFvE,gBACAS,KAAKD,QAAQR,sCAKIK,eACfI,KAAKkE,MAAK,eACXd,MAAO,mBAAEpD,MAAMoD,KAAKlF,aAGnBkF,OACHA,KAAO,IAAI3D,SAASO,KAHY,iBAAXJ,OAAsBA,OAAS,0BAIlDI,MAAMoD,KAAKlF,SAAUkF,OAGH,iBAAXxD,OAAqB,SACF,IAAjBwD,KAAKxD,cACR,IAAI2B,qCAA8B3B,aAG1CwD,KAAKxD,iCAKQqD,UACbA,QA/UyB,IA+UfA,MAAMkB,OACH,UAAflB,MAAMmB,MAnVQ,IAmVYnB,MAAMkB,oBAI5BE,QAAU,GAAGC,MAAMC,KAAKzC,SAAS0C,iBAhUd,iCAkUpB,IAAIC,EAAI,EAAGC,IAAML,QAAQpC,OAAQwC,EAAIC,IAAKD,IAAK,OAC5CvD,OAASzB,SAAS0B,sBAAsBkD,QAAQI,IAChDE,SAAU,mBAAEN,QAAQI,IAAIrB,KAAKlF,UAC7B6C,cAAgB,CACpBA,cAAesD,QAAQI,OAGrBxB,OAAwB,UAAfA,MAAMmB,OACjBrD,cAAc6D,WAAa3B,QAGxB0B,uBAICE,aAAeF,QAAQzE,WACxB,mBAAEgB,QAAQR,SAlWG,oBAsWduC,QAAyB,UAAfA,MAAMmB,MAChB,kBAAkBU,KAAK7B,MAAM8B,OAAOC,UAA2B,UAAf/B,MAAMmB,MA9W5C,IA8WgEnB,MAAMkB,QAChF9F,gBAAE4G,SAAS/D,OAAQ+B,MAAM8B,uBAIvBrC,UAAYrE,gBAAE4C,MAAMxC,WAAYsC,mCACpCG,QAAQE,QAAQsB,WACdA,UAAUrB,uBAMV,iBAAkBS,SAASC,qCAC3BD,SAASI,MAAMC,WAAWW,IAAI,YAAa,KAAMzE,gBAAEgE,MAGvDgC,QAAQI,GAAGlC,aAAa,gBAAiB,SAErCoC,QAAQ7E,SACV6E,QAAQ7E,QAAQ6C,8BAGhBkC,cAAcK,YA9XE,4BA+XhBhE,QACCgE,YAhYe,QAiYf9D,QAAQ/C,gBAAE4C,MAAMvC,aAAcqC,+CAIRpB,aACvBuB,aACEiE,SAAW1D,cAAK2D,uBAAuBzF,gBAEzCwF,WACFjE,OAASY,SAASwB,cAAc6B,WAG3BjE,QAAUvB,QAAQ8D,yCAIGR,UAQxB,kBAAkB6B,KAAK7B,MAAM8B,OAAOC,SAjatB,KAkahB/B,MAAMkB,OAnaW,KAmagBlB,MAAMkB,QA/ZlB,KAgapBlB,MAAMkB,OAjaY,KAiaoBlB,MAAMkB,QAC3C,mBAAElB,MAAM8B,QAAQ/C,QA1YF,kBA0YyBC,SAAW1D,eAAeuG,KAAK7B,MAAMkB,iBAI5EnE,KAAKS,WAAY,mBAAET,MAAMU,SAjaL,yBAqalBQ,OAASzB,SAAS0B,sBAAsBnB,MACxCW,UAAW,mBAAEO,QAAQR,SAraP,YAuafC,UAhbc,KAgbFsC,MAAMkB,gBAIvBlB,MAAMC,iBACND,MAAME,mBAEDxC,UAvbc,KAubDsC,MAAMkB,OAtbN,KAsbkClB,MAAMkB,aAvbvC,KAwbblB,MAAMkB,2BACNjD,OAAOoC,cAhaY,6BAgayBlC,QAAQ,iCAGtDpB,MAAMoB,QAAQ,eAIZiE,MAAQ,GAAGf,MAAMC,KAAKrD,OAAOsD,iBAnaR,gEAoaxBc,QAAOC,OAAQ,mBAAEA,MAAMC,GAAG,iBAER,IAAjBH,MAAMpD,kBAINwD,MAAQJ,MAAMK,QAAQzC,MAAM8B,QApcX,KAscjB9B,MAAMkB,OAA8BsB,MAAQ,GAC9CA,QAtcqB,KAycnBxC,MAAMkB,OAAgCsB,MAAQJ,MAAMpD,OAAS,GAC/DwD,QAGEA,MAAQ,IACVA,MAAQ,GAGVJ,MAAMI,OAAOnD,6BAQfR,UACCM,GAAGrD,uBArcuB,2BAqcuBU,SAASkG,wBAC1DvD,GAAGrD,uBApcgB,iBAocuBU,SAASkG,wBACnDvD,aAAMtD,iCAAwBE,sBAAwBS,SAASmB,aAC/DwB,GAAGtD,qBAxcuB,4BAwcqB,SAAUmE,OACxDA,MAAMC,iBACND,MAAME,kBACN1D,SAASmG,iBAAiBrB,MAAK,mBAAEvE,MAAO,aAEzCoC,GAAGtD,qBA5csB,kBA4cqB+G,IAC7CA,EAAE1C,qCAOJ7E,GAAGL,MAAQwB,SAASmG,iCACpBtH,GAAGL,MAAM6H,YAAcrG,yBACvBnB,GAAGL,MAAM8H,WAAa,qBACpBzH,GAAGL,MAAQG,mBACNqB,SAASmG,+BAGHnG"} boost/amd/build/bootstrap/toast.min.js 0000604 00000007332 15062070724 0014025 0 ustar 00 define("theme_boost/bootstrap/toast",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="toast",EVENT_KEY=".".concat("bs.toast"),JQUERY_NO_CONFLICT=_jquery.default.fn.toast,EVENT_CLICK_DISMISS="click.dismiss".concat(EVENT_KEY),EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),Default={animation:!0,autohide:!0,delay:500},DefaultType={animation:"boolean",autohide:"boolean",delay:"number"};class Toast{constructor(element,config){this._element=element,this._config=this._getConfig(config),this._timeout=null,this._setListeners()}static get VERSION(){return"4.6.2"}static get DefaultType(){return DefaultType}static get Default(){return Default}show(){const showEvent=_jquery.default.Event(EVENT_SHOW);if((0,_jquery.default)(this._element).trigger(showEvent),showEvent.isDefaultPrevented())return;this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");const complete=()=>{this._element.classList.remove("showing"),this._element.classList.add("show"),(0,_jquery.default)(this._element).trigger(EVENT_SHOWN),this._config.autohide&&(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay))};if(this._element.classList.remove("hide"),_util.default.reflow(this._element),this._element.classList.add("showing"),this._config.animation){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}hide(){if(!this._element.classList.contains("show"))return;const hideEvent=_jquery.default.Event(EVENT_HIDE);(0,_jquery.default)(this._element).trigger(hideEvent),hideEvent.isDefaultPrevented()||this._close()}dispose(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),(0,_jquery.default)(this._element).off(EVENT_CLICK_DISMISS),_jquery.default.removeData(this._element,"bs.toast"),this._element=null,this._config=null}_getConfig(config){return config={...Default,...(0,_jquery.default)(this._element).data(),..."object"==typeof config&&config?config:{}},_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config}_setListeners(){(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,'[data-dismiss="toast"]',(()=>this.hide()))}_close(){const complete=()=>{this._element.classList.add("hide"),(0,_jquery.default)(this._element).trigger(EVENT_HIDDEN)};if(this._element.classList.remove("show"),this._config.animation){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data("bs.toast");if(data||(data=new Toast(this,"object"==typeof config&&config),$element.data("bs.toast",data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config](this)}}))}}_jquery.default.fn.toast=Toast._jQueryInterface,_jquery.default.fn.toast.Constructor=Toast,_jquery.default.fn.toast.noConflict=()=>(_jquery.default.fn.toast=JQUERY_NO_CONFLICT,Toast._jQueryInterface);var _default=Toast;return _exports.default=_default,_exports.default})); //# sourceMappingURL=toast.min.js.map boost/amd/build/bootstrap/carousel.min.js 0000604 00000026342 15062070724 0014512 0 ustar 00 define("theme_boost/bootstrap/carousel",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="carousel",DATA_KEY="bs.carousel",EVENT_KEY=".".concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_SLIDE="slide".concat(EVENT_KEY),EVENT_SLID="slid".concat(EVENT_KEY),EVENT_KEYDOWN="keydown".concat(EVENT_KEY),EVENT_MOUSEENTER="mouseenter".concat(EVENT_KEY),EVENT_MOUSELEAVE="mouseleave".concat(EVENT_KEY),EVENT_TOUCHSTART="touchstart".concat(EVENT_KEY),EVENT_TOUCHMOVE="touchmove".concat(EVENT_KEY),EVENT_TOUCHEND="touchend".concat(EVENT_KEY),EVENT_POINTERDOWN="pointerdown".concat(EVENT_KEY),EVENT_POINTERUP="pointerup".concat(EVENT_KEY),EVENT_DRAG_START="dragstart".concat(EVENT_KEY),EVENT_LOAD_DATA_API="load".concat(EVENT_KEY).concat(".data-api"),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),Default={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},DefaultType={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},PointerType={TOUCH:"touch",PEN:"pen"};class Carousel{constructor(element,config){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(config),this._element=element,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}static get VERSION(){return"4.6.2"}static get Default(){return Default}next(){this._isSliding||this._slide("next")}nextWhenVisible(){const $element=(0,_jquery.default)(this._element);!document.hidden&&$element.is(":visible")&&"hidden"!==$element.css("visibility")&&this.next()}prev(){this._isSliding||this._slide("prev")}pause(event){event||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(_util.default.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(event){event||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(index){this._activeElement=this._element.querySelector(".active.carousel-item");const activeIndex=this._getItemIndex(this._activeElement);if(index>this._items.length-1||index<0)return;if(this._isSliding)return void(0,_jquery.default)(this._element).one(EVENT_SLID,(()=>this.to(index)));if(activeIndex===index)return this.pause(),void this.cycle();const direction=index>activeIndex?"next":"prev";this._slide(direction,this._items[index])}dispose(){(0,_jquery.default)(this._element).off(EVENT_KEY),_jquery.default.removeData(this._element,DATA_KEY),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null}_getConfig(config){return config={...Default,...config},_util.default.typeCheckConfig(NAME,config,DefaultType),config}_handleSwipe(){const absDeltax=Math.abs(this.touchDeltaX);if(absDeltax<=40)return;const direction=absDeltax/this.touchDeltaX;this.touchDeltaX=0,direction>0&&this.prev(),direction<0&&this.next()}_addEventListeners(){this._config.keyboard&&(0,_jquery.default)(this._element).on(EVENT_KEYDOWN,(event=>this._keydown(event))),"hover"===this._config.pause&&(0,_jquery.default)(this._element).on(EVENT_MOUSEENTER,(event=>this.pause(event))).on(EVENT_MOUSELEAVE,(event=>this.cycle(event))),this._config.touch&&this._addTouchEventListeners()}_addTouchEventListeners(){if(!this._touchSupported)return;const start=event=>{this._pointerEvent&&PointerType[event.originalEvent.pointerType.toUpperCase()]?this.touchStartX=event.originalEvent.clientX:this._pointerEvent||(this.touchStartX=event.originalEvent.touches[0].clientX)},move=event=>{this.touchDeltaX=event.originalEvent.touches&&event.originalEvent.touches.length>1?0:event.originalEvent.touches[0].clientX-this.touchStartX},end=event=>{this._pointerEvent&&PointerType[event.originalEvent.pointerType.toUpperCase()]&&(this.touchDeltaX=event.originalEvent.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((event=>this.cycle(event)),500+this._config.interval))};(0,_jquery.default)(this._element.querySelectorAll(".carousel-item img")).on(EVENT_DRAG_START,(e=>e.preventDefault())),this._pointerEvent?((0,_jquery.default)(this._element).on(EVENT_POINTERDOWN,(event=>start(event))),(0,_jquery.default)(this._element).on(EVENT_POINTERUP,(event=>end(event))),this._element.classList.add("pointer-event")):((0,_jquery.default)(this._element).on(EVENT_TOUCHSTART,(event=>start(event))),(0,_jquery.default)(this._element).on(EVENT_TOUCHMOVE,(event=>move(event))),(0,_jquery.default)(this._element).on(EVENT_TOUCHEND,(event=>end(event))))}_keydown(event){if(!/input|textarea/i.test(event.target.tagName))switch(event.which){case 37:event.preventDefault(),this.prev();break;case 39:event.preventDefault(),this.next()}}_getItemIndex(element){return this._items=element&&element.parentNode?[].slice.call(element.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(element)}_getItemByDirection(direction,activeElement){const isNextDirection="next"===direction,isPrevDirection="prev"===direction,activeIndex=this._getItemIndex(activeElement),lastItemIndex=this._items.length-1;if((isPrevDirection&&0===activeIndex||isNextDirection&&activeIndex===lastItemIndex)&&!this._config.wrap)return activeElement;const itemIndex=(activeIndex+("prev"===direction?-1:1))%this._items.length;return-1===itemIndex?this._items[this._items.length-1]:this._items[itemIndex]}_triggerSlideEvent(relatedTarget,eventDirectionName){const targetIndex=this._getItemIndex(relatedTarget),fromIndex=this._getItemIndex(this._element.querySelector(".active.carousel-item")),slideEvent=_jquery.default.Event(EVENT_SLIDE,{relatedTarget:relatedTarget,direction:eventDirectionName,from:fromIndex,to:targetIndex});return(0,_jquery.default)(this._element).trigger(slideEvent),slideEvent}_setActiveIndicatorElement(element){if(this._indicatorsElement){const indicators=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));(0,_jquery.default)(indicators).removeClass("active");const nextIndicator=this._indicatorsElement.children[this._getItemIndex(element)];nextIndicator&&(0,_jquery.default)(nextIndicator).addClass("active")}}_updateInterval(){const element=this._activeElement||this._element.querySelector(".active.carousel-item");if(!element)return;const elementInterval=parseInt(element.getAttribute("data-interval"),10);elementInterval?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=elementInterval):this._config.interval=this._config.defaultInterval||this._config.interval}_slide(direction,element){const activeElement=this._element.querySelector(".active.carousel-item"),activeElementIndex=this._getItemIndex(activeElement),nextElement=element||activeElement&&this._getItemByDirection(direction,activeElement),nextElementIndex=this._getItemIndex(nextElement),isCycling=Boolean(this._interval);let directionalClassName,orderClassName,eventDirectionName;if("next"===direction?(directionalClassName="carousel-item-left",orderClassName="carousel-item-next",eventDirectionName="left"):(directionalClassName="carousel-item-right",orderClassName="carousel-item-prev",eventDirectionName="right"),nextElement&&(0,_jquery.default)(nextElement).hasClass("active"))return void(this._isSliding=!1);if(this._triggerSlideEvent(nextElement,eventDirectionName).isDefaultPrevented())return;if(!activeElement||!nextElement)return;this._isSliding=!0,isCycling&&this.pause(),this._setActiveIndicatorElement(nextElement),this._activeElement=nextElement;const slidEvent=_jquery.default.Event(EVENT_SLID,{relatedTarget:nextElement,direction:eventDirectionName,from:activeElementIndex,to:nextElementIndex});if((0,_jquery.default)(this._element).hasClass("slide")){(0,_jquery.default)(nextElement).addClass(orderClassName),_util.default.reflow(nextElement),(0,_jquery.default)(activeElement).addClass(directionalClassName),(0,_jquery.default)(nextElement).addClass(directionalClassName);const transitionDuration=_util.default.getTransitionDurationFromElement(activeElement);(0,_jquery.default)(activeElement).one(_util.default.TRANSITION_END,(()=>{(0,_jquery.default)(nextElement).removeClass("".concat(directionalClassName," ").concat(orderClassName)).addClass("active"),(0,_jquery.default)(activeElement).removeClass("".concat("active"," ").concat(orderClassName," ").concat(directionalClassName)),this._isSliding=!1,setTimeout((()=>(0,_jquery.default)(this._element).trigger(slidEvent)),0)})).emulateTransitionEnd(transitionDuration)}else(0,_jquery.default)(activeElement).removeClass("active"),(0,_jquery.default)(nextElement).addClass("active"),this._isSliding=!1,(0,_jquery.default)(this._element).trigger(slidEvent);isCycling&&this.cycle()}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data(DATA_KEY),_config={...Default,...(0,_jquery.default)(this).data()};"object"==typeof config&&(_config={..._config,...config});const action="string"==typeof config?config:_config.slide;if(data||(data=new Carousel(this,_config),(0,_jquery.default)(this).data(DATA_KEY,data)),"number"==typeof config)data.to(config);else if("string"==typeof action){if(void 0===data[action])throw new TypeError('No method named "'.concat(action,'"'));data[action]()}else _config.interval&&_config.ride&&(data.pause(),data.cycle())}))}static _dataApiClickHandler(event){const selector=_util.default.getSelectorFromElement(this);if(!selector)return;const target=(0,_jquery.default)(selector)[0];if(!target||!(0,_jquery.default)(target).hasClass("carousel"))return;const config={...(0,_jquery.default)(target).data(),...(0,_jquery.default)(this).data()},slideIndex=this.getAttribute("data-slide-to");slideIndex&&(config.interval=!1),Carousel._jQueryInterface.call((0,_jquery.default)(target),config),slideIndex&&(0,_jquery.default)(target).data(DATA_KEY).to(slideIndex),event.preventDefault()}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,"[data-slide], [data-slide-to]",Carousel._dataApiClickHandler),(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=>{const carousels=[].slice.call(document.querySelectorAll('[data-ride="carousel"]'));for(let i=0,len=carousels.length;i<len;i++){const $carousel=(0,_jquery.default)(carousels[i]);Carousel._jQueryInterface.call($carousel,$carousel.data())}})),_jquery.default.fn[NAME]=Carousel._jQueryInterface,_jquery.default.fn[NAME].Constructor=Carousel,_jquery.default.fn[NAME].noConflict=()=>(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Carousel._jQueryInterface);var _default=Carousel;return _exports.default=_default,_exports.default})); //# sourceMappingURL=carousel.min.js.map boost/amd/build/bootstrap/alert.min.js 0000604 00000005032 15062070724 0013775 0 ustar 00 define("theme_boost/bootstrap/alert",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const EVENT_KEY=".".concat("bs.alert"),JQUERY_NO_CONFLICT=_jquery.default.fn.alert,EVENT_CLOSE="close".concat(EVENT_KEY),EVENT_CLOSED="closed".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api");class Alert{constructor(element){this._element=element}static get VERSION(){return"4.6.2"}close(element){let rootElement=this._element;element&&(rootElement=this._getRootElement(element));this._triggerCloseEvent(rootElement).isDefaultPrevented()||this._removeElement(rootElement)}dispose(){_jquery.default.removeData(this._element,"bs.alert"),this._element=null}_getRootElement(element){const selector=_util.default.getSelectorFromElement(element);let parent=!1;return selector&&(parent=document.querySelector(selector)),parent||(parent=(0,_jquery.default)(element).closest(".".concat("alert"))[0]),parent}_triggerCloseEvent(element){const closeEvent=_jquery.default.Event(EVENT_CLOSE);return(0,_jquery.default)(element).trigger(closeEvent),closeEvent}_removeElement(element){if((0,_jquery.default)(element).removeClass("show"),!(0,_jquery.default)(element).hasClass("fade"))return void this._destroyElement(element);const transitionDuration=_util.default.getTransitionDurationFromElement(element);(0,_jquery.default)(element).one(_util.default.TRANSITION_END,(event=>this._destroyElement(element,event))).emulateTransitionEnd(transitionDuration)}_destroyElement(element){(0,_jquery.default)(element).detach().trigger(EVENT_CLOSED).remove()}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data("bs.alert");data||(data=new Alert(this),$element.data("bs.alert",data)),"close"===config&&data[config](this)}))}static _handleDismiss(alertInstance){return function(event){event&&event.preventDefault(),alertInstance.close(this)}}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-dismiss="alert"]',Alert._handleDismiss(new Alert)),_jquery.default.fn.alert=Alert._jQueryInterface,_jquery.default.fn.alert.Constructor=Alert,_jquery.default.fn.alert.noConflict=()=>(_jquery.default.fn.alert=JQUERY_NO_CONFLICT,Alert._jQueryInterface);var _default=Alert;return _exports.default=_default,_exports.default})); //# sourceMappingURL=alert.min.js.map boost/amd/build/bootstrap/toast.min.js.map 0000604 00000016777 15062070724 0014616 0 ustar 00 {"version":3,"file":"toast.min.js","sources":["../../src/bootstrap/toast.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): toast.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'toast'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.toast'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_HIDE = 'hide'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_SHOWING = 'showing'\n\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\n\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"toast\"]'\n\nconst Default = {\n animation: true,\n autohide: true,\n delay: 500\n}\n\nconst DefaultType = {\n animation: 'boolean',\n autohide: 'boolean',\n delay: 'number'\n}\n\n/**\n * Class definition\n */\n\nclass Toast {\n constructor(element, config) {\n this._element = element\n this._config = this._getConfig(config)\n this._timeout = null\n this._setListeners()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n show() {\n const showEvent = $.Event(EVENT_SHOW)\n\n $(this._element).trigger(showEvent)\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._clearTimeout()\n\n if (this._config.animation) {\n this._element.classList.add(CLASS_NAME_FADE)\n }\n\n const complete = () => {\n this._element.classList.remove(CLASS_NAME_SHOWING)\n this._element.classList.add(CLASS_NAME_SHOW)\n\n $(this._element).trigger(EVENT_SHOWN)\n\n if (this._config.autohide) {\n this._timeout = setTimeout(() => {\n this.hide()\n }, this._config.delay)\n }\n }\n\n this._element.classList.remove(CLASS_NAME_HIDE)\n Util.reflow(this._element)\n this._element.classList.add(CLASS_NAME_SHOWING)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n hide() {\n if (!this._element.classList.contains(CLASS_NAME_SHOW)) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n if (hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._close()\n }\n\n dispose() {\n this._clearTimeout()\n\n if (this._element.classList.contains(CLASS_NAME_SHOW)) {\n this._element.classList.remove(CLASS_NAME_SHOW)\n }\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n\n $.removeData(this._element, DATA_KEY)\n this._element = null\n this._config = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...$(this._element).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n Util.typeCheckConfig(\n NAME,\n config,\n this.constructor.DefaultType\n )\n\n return config\n }\n\n _setListeners() {\n $(this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, () => this.hide())\n }\n\n _close() {\n const complete = () => {\n this._element.classList.add(CLASS_NAME_HIDE)\n $(this._element).trigger(EVENT_HIDDEN)\n }\n\n this._element.classList.remove(CLASS_NAME_SHOW)\n if (this._config.animation) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _clearTimeout() {\n clearTimeout(this._timeout)\n this._timeout = null\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new Toast(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](this)\n }\n })\n }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Toast._jQueryInterface\n$.fn[NAME].Constructor = Toast\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Toast._jQueryInterface\n}\n\nexport default Toast\n"],"names":["NAME","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_CLICK_DISMISS","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","Default","animation","autohide","delay","DefaultType","Toast","constructor","element","config","_element","_config","this","_getConfig","_timeout","_setListeners","VERSION","show","showEvent","Event","trigger","isDefaultPrevented","_clearTimeout","classList","add","complete","remove","setTimeout","hide","reflow","transitionDuration","Util","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","contains","hideEvent","_close","dispose","off","removeData","data","typeCheckConfig","on","clearTimeout","each","$element","TypeError","_jQueryInterface","Constructor","noConflict"],"mappings":"yVAcMA,KAAO,QAGPC,qBADW,YAEXC,mBAAqBC,gBAAEC,GAAF,MAOrBC,2CAAsCJ,WACtCK,yBAAoBL,WACpBM,6BAAwBN,WACxBO,yBAAoBP,WACpBQ,2BAAsBR,WAItBS,QAAU,CACdC,WAAW,EACXC,UAAU,EACVC,MAAO,KAGHC,YAAc,CAClBH,UAAW,UACXC,SAAU,UACVC,MAAO,gBAOHE,MACJC,YAAYC,QAASC,aACdC,SAAWF,aACXG,QAAUC,KAAKC,WAAWJ,aAC1BK,SAAW,UACXC,gBAIIC,2BA3CG,QA+CHX,gCACFA,YAGEJ,4BACFA,QAITgB,aACQC,UAAYxB,gBAAEyB,MAAMpB,mCAExBa,KAAKF,UAAUU,QAAQF,WACrBA,UAAUG,iCAITC,gBAEDV,KAAKD,QAAQT,gBACVQ,SAASa,UAAUC,IA9DN,cAiEdC,SAAW,UACVf,SAASa,UAAUG,OA/DH,gBAgEhBhB,SAASa,UAAUC,IAjEN,4BAmEhBZ,KAAKF,UAAUU,QAAQpB,aAErBY,KAAKD,QAAQR,gBACVW,SAAWa,YAAW,UACpBC,SACJhB,KAAKD,QAAQP,iBAIfM,SAASa,UAAUG,OA7EJ,sBA8EfG,OAAOjB,KAAKF,eACZA,SAASa,UAAUC,IA7ED,WA8EnBZ,KAAKD,QAAQT,UAAW,OACpB4B,mBAAqBC,cAAKC,iCAAiCpB,KAAKF,8BAEpEE,KAAKF,UACJuB,IAAIF,cAAKG,eAAgBT,UACzBU,qBAAqBL,yBAExBL,WAIJG,WACOhB,KAAKF,SAASa,UAAUa,SA3FT,qBA+FdC,UAAY3C,gBAAEyB,MAAMtB,gCAExBe,KAAKF,UAAUU,QAAQiB,WACrBA,UAAUhB,2BAITiB,SAGPC,eACOjB,gBAEDV,KAAKF,SAASa,UAAUa,SA5GR,cA6Gb1B,SAASa,UAAUG,OA7GN,4BAgHlBd,KAAKF,UAAU8B,IAAI5C,qCAEnB6C,WAAW7B,KAAKF,SAxHL,iBAyHRA,SAAW,UACXC,QAAU,KAIjBE,WAAWJ,eACTA,OAAS,IACJR,YACA,mBAAEW,KAAKF,UAAUgC,UACE,iBAAXjC,QAAuBA,OAASA,OAAS,kBAGjDkC,gBACHpD,KACAkB,OACAG,KAAKL,YAAYF,aAGZI,OAGTM,oCACIH,KAAKF,UAAUkC,GAAGhD,oBAhIM,0BAgIsC,IAAMgB,KAAKgB,SAG7EU,eACQb,SAAW,UACVf,SAASa,UAAUC,IA/IN,4BAgJhBZ,KAAKF,UAAUU,QAAQtB,uBAGtBY,SAASa,UAAUG,OAlJJ,QAmJhBd,KAAKD,QAAQT,UAAW,OACpB4B,mBAAqBC,cAAKC,iCAAiCpB,KAAKF,8BAEpEE,KAAKF,UACJuB,IAAIF,cAAKG,eAAgBT,UACzBU,qBAAqBL,yBAExBL,WAIJH,gBACEuB,aAAajC,KAAKE,eACbA,SAAW,6BAIML,eACfG,KAAKkC,MAAK,iBACTC,UAAW,mBAAEnC,UACf8B,KAAOK,SAASL,KA7KT,eAgLNA,OACHA,KAAO,IAAIpC,MAAMM,KAHe,iBAAXH,QAAuBA,QAI5CsC,SAASL,KAlLA,WAkLeA,OAGJ,iBAAXjC,OAAqB,SACF,IAAjBiC,KAAKjC,cACR,IAAIuC,qCAA8BvC,aAG1CiC,KAAKjC,QAAQG,2BAUnBjB,GAAF,MAAaW,MAAM2C,iCACjBtD,GAAF,MAAWuD,YAAc5C,sBACvBX,GAAF,MAAWwD,WAAa,qBACpBxD,GAAF,MAAaF,mBACNa,MAAM2C,+BAGA3C"} boost/amd/build/bootstrap/tools/sanitizer.min.js 0000604 00000004233 15062070724 0016040 0 ustar 00 define("theme_boost/bootstrap/tools/sanitizer",["exports"],(function(_exports){Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.DefaultWhitelist=void 0,_exports.sanitizeHtml=function(unsafeHtml,whiteList,sanitizeFn){if(0===unsafeHtml.length)return unsafeHtml;if(sanitizeFn&&"function"==typeof sanitizeFn)return sanitizeFn(unsafeHtml);const createdDocument=(new window.DOMParser).parseFromString(unsafeHtml,"text/html"),whitelistKeys=Object.keys(whiteList),elements=[].slice.call(createdDocument.body.querySelectorAll("*"));for(let i=0,len=elements.length;i<len;i++){const el=elements[i],elName=el.nodeName.toLowerCase();if(-1===whitelistKeys.indexOf(el.nodeName.toLowerCase())){el.parentNode.removeChild(el);continue}const attributeList=[].slice.call(el.attributes),whitelistedAttributes=[].concat(whiteList["*"]||[],whiteList[elName]||[]);attributeList.forEach((attr=>{allowedAttribute(attr,whitelistedAttributes)||el.removeAttribute(attr.nodeName)}))}return createdDocument.body.innerHTML};const uriAttrs=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],DefaultWhitelist={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]};_exports.DefaultWhitelist=DefaultWhitelist;const SAFE_URL_PATTERN=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,DATA_URL_PATTERN=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function allowedAttribute(attr,allowedAttributeList){const attrName=attr.nodeName.toLowerCase();if(-1!==allowedAttributeList.indexOf(attrName))return-1===uriAttrs.indexOf(attrName)||Boolean(SAFE_URL_PATTERN.test(attr.nodeValue)||DATA_URL_PATTERN.test(attr.nodeValue));const regExp=allowedAttributeList.filter((attrRegex=>attrRegex instanceof RegExp));for(let i=0,len=regExp.length;i<len;i++)if(regExp[i].test(attrName))return!0;return!1}})); //# sourceMappingURL=sanitizer.min.js.map boost/amd/build/bootstrap/tools/sanitizer.min.js.map 0000604 00000013234 15062070724 0016615 0 ustar 00 {"version":3,"file":"sanitizer.min.js","sources":["../../../src/bootstrap/tools/sanitizer.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tools/sanitizer.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n]\n\nconst ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\nexport const DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n}\n\n/**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i\n\n/**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts\n */\nconst DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i\n\nfunction allowedAttribute(attr, allowedAttributeList) {\n const attrName = attr.nodeName.toLowerCase()\n\n if (allowedAttributeList.indexOf(attrName) !== -1) {\n if (uriAttrs.indexOf(attrName) !== -1) {\n return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue))\n }\n\n return true\n }\n\n const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp)\n\n // Check if a regular expression validates the attribute.\n for (let i = 0, len = regExp.length; i < len; i++) {\n if (regExp[i].test(attrName)) {\n return true\n }\n }\n\n return false\n}\n\nexport function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n const domParser = new window.DOMParser()\n const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html')\n const whitelistKeys = Object.keys(whiteList)\n const elements = [].slice.call(createdDocument.body.querySelectorAll('*'))\n\n for (let i = 0, len = elements.length; i < len; i++) {\n const el = elements[i]\n const elName = el.nodeName.toLowerCase()\n\n if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n const attributeList = [].slice.call(el.attributes)\n // eslint-disable-next-line unicorn/prefer-spread\n const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n attributeList.forEach(attr => {\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName)\n }\n })\n }\n\n return createdDocument.body.innerHTML\n}\n"],"names":["unsafeHtml","whiteList","sanitizeFn","length","createdDocument","window","DOMParser","parseFromString","whitelistKeys","Object","keys","elements","slice","call","body","querySelectorAll","i","len","el","elName","nodeName","toLowerCase","indexOf","parentNode","removeChild","attributeList","attributes","whitelistedAttributes","concat","forEach","attr","allowedAttribute","removeAttribute","innerHTML","uriAttrs","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","p","pre","s","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttributeList","attrName","Boolean","test","nodeValue","regExp","filter","attrRegex","RegExp"],"mappings":"uMA2F6BA,WAAYC,UAAWC,eACxB,IAAtBF,WAAWG,cACNH,cAGLE,YAAoC,mBAAfA,kBAChBA,WAAWF,kBAIdI,iBADY,IAAIC,OAAOC,WACKC,gBAAgBP,WAAY,aACxDQ,cAAgBC,OAAOC,KAAKT,WAC5BU,SAAW,GAAGC,MAAMC,KAAKT,gBAAgBU,KAAKC,iBAAiB,UAEhE,IAAIC,EAAI,EAAGC,IAAMN,SAASR,OAAQa,EAAIC,IAAKD,IAAK,OAC7CE,GAAKP,SAASK,GACdG,OAASD,GAAGE,SAASC,kBAE+B,IAAtDb,cAAcc,QAAQJ,GAAGE,SAASC,eAAuB,CAC3DH,GAAGK,WAAWC,YAAYN,mBAKtBO,cAAgB,GAAGb,MAAMC,KAAKK,GAAGQ,YAEjCC,sBAAwB,GAAGC,OAAO3B,UAAU,MAAQ,GAAIA,UAAUkB,SAAW,IAEnFM,cAAcI,SAAQC,OACfC,iBAAiBD,KAAMH,wBAC1BT,GAAGc,gBAAgBF,KAAKV,oBAKvBhB,gBAAgBU,KAAKmB,iBAvHxBC,SAAW,CACf,aACA,OACA,OACA,WACA,WACA,SACA,MACA,cAKWC,iBAAmB,KAEzB,CAAC,QAAS,MAAO,KAAM,OAAQ,OAJP,kBAK7BC,EAAG,CAAC,SAAU,OAAQ,QAAS,OAC/BC,KAAM,GACNC,EAAG,GACHC,GAAI,GACJC,IAAK,GACLC,KAAM,GACNC,IAAK,GACLC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJlC,EAAG,GACHmC,IAAK,CAAC,MAAO,SAAU,MAAO,QAAS,QAAS,UAChDC,GAAI,GACJC,GAAI,GACJC,EAAG,GACHC,IAAK,GACLC,EAAG,GACHC,MAAO,GACPC,KAAM,GACNC,IAAK,GACLC,IAAK,GACLC,OAAQ,GACRC,EAAG,GACHC,GAAI,qDAQAC,iBAAmB,iEAOnBC,iBAAmB,8IAEhBlC,iBAAiBD,KAAMoC,4BACxBC,SAAWrC,KAAKV,SAASC,kBAEiB,IAA5C6C,qBAAqB5C,QAAQ6C,iBACK,IAAhCjC,SAASZ,QAAQ6C,WACZC,QAAQJ,iBAAiBK,KAAKvC,KAAKwC,YAAcL,iBAAiBI,KAAKvC,KAAKwC,kBAMjFC,OAASL,qBAAqBM,QAAOC,WAAaA,qBAAqBC,aAGxE,IAAI1D,EAAI,EAAGC,IAAMsD,OAAOpE,OAAQa,EAAIC,IAAKD,OACxCuD,OAAOvD,GAAGqD,KAAKF,iBACV,SAIJ"} boost/amd/build/bootstrap/util.min.js.map 0000604 00000017740 15062070724 0014430 0 ustar 00 {"version":3,"file":"util.min.js","sources":["../../src/bootstrap/util.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): util.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Private TransitionEnd Helpers\n */\n\nconst TRANSITION_END = 'transitionend'\nconst MAX_UID = 1000000\nconst MILLISECONDS_MULTIPLIER = 1000\n\n// Shoutout AngusCroll (https://goo.gl/pxwQGp)\nfunction toType(obj) {\n if (obj === null || typeof obj === 'undefined') {\n return `${obj}`\n }\n\n return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase()\n}\n\nfunction getSpecialTransitionEndEvent() {\n return {\n bindType: TRANSITION_END,\n delegateType: TRANSITION_END,\n handle(event) {\n if ($(event.target).is(this)) {\n return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params\n }\n\n return undefined\n }\n }\n}\n\nfunction transitionEndEmulator(duration) {\n let called = false\n\n $(this).one(Util.TRANSITION_END, () => {\n called = true\n })\n\n setTimeout(() => {\n if (!called) {\n Util.triggerTransitionEnd(this)\n }\n }, duration)\n\n return this\n}\n\nfunction setTransitionEndSupport() {\n $.fn.emulateTransitionEnd = transitionEndEmulator\n $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent()\n}\n\n/**\n * Public Util API\n */\n\nconst Util = {\n TRANSITION_END: 'bsTransitionEnd',\n\n getUID(prefix) {\n do {\n // eslint-disable-next-line no-bitwise\n prefix += ~~(Math.random() * MAX_UID) // \"~~\" acts like a faster Math.floor() here\n } while (document.getElementById(prefix))\n\n return prefix\n },\n\n getSelectorFromElement(element) {\n let selector = element.getAttribute('data-target')\n\n if (!selector || selector === '#') {\n const hrefAttr = element.getAttribute('href')\n selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''\n }\n\n try {\n return document.querySelector(selector) ? selector : null\n } catch (_) {\n return null\n }\n },\n\n getTransitionDurationFromElement(element) {\n if (!element) {\n return 0\n }\n\n // Get transition-duration of the element\n let transitionDuration = $(element).css('transition-duration')\n let transitionDelay = $(element).css('transition-delay')\n\n const floatTransitionDuration = parseFloat(transitionDuration)\n const floatTransitionDelay = parseFloat(transitionDelay)\n\n // Return 0 if element or transition duration is not found\n if (!floatTransitionDuration && !floatTransitionDelay) {\n return 0\n }\n\n // If multiple durations are defined, take the first\n transitionDuration = transitionDuration.split(',')[0]\n transitionDelay = transitionDelay.split(',')[0]\n\n return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER\n },\n\n reflow(element) {\n return element.offsetHeight\n },\n\n triggerTransitionEnd(element) {\n $(element).trigger(TRANSITION_END)\n },\n\n supportsTransitionEnd() {\n return Boolean(TRANSITION_END)\n },\n\n isElement(obj) {\n return (obj[0] || obj).nodeType\n },\n\n typeCheckConfig(componentName, config, configTypes) {\n for (const property in configTypes) {\n if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n const expectedTypes = configTypes[property]\n const value = config[property]\n const valueType = value && Util.isElement(value) ?\n 'element' : toType(value)\n\n if (!new RegExp(expectedTypes).test(valueType)) {\n throw new Error(\n `${componentName.toUpperCase()}: ` +\n `Option \"${property}\" provided type \"${valueType}\" ` +\n `but expected type \"${expectedTypes}\".`)\n }\n }\n }\n },\n\n findShadowRoot(element) {\n if (!document.documentElement.attachShadow) {\n return null\n }\n\n // Can find the shadow root otherwise it'll return the document\n if (typeof element.getRootNode === 'function') {\n const root = element.getRootNode()\n return root instanceof ShadowRoot ? root : null\n }\n\n if (element instanceof ShadowRoot) {\n return element\n }\n\n // when we don't find a shadow root\n if (!element.parentNode) {\n return null\n }\n\n return Util.findShadowRoot(element.parentNode)\n },\n\n jQueryDetection() {\n if (typeof $ === 'undefined') {\n throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.')\n }\n\n const version = $.fn.jquery.split(' ')[0].split('.')\n const minMajor = 1\n const ltMajor = 2\n const minMinor = 9\n const minPatch = 1\n const maxMajor = 4\n\n if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0')\n }\n }\n}\n\nUtil.jQueryDetection()\nsetTransitionEndSupport()\n\nexport default Util\n"],"names":["toType","obj","toString","call","match","toLowerCase","transitionEndEmulator","duration","called","this","one","Util","TRANSITION_END","setTimeout","triggerTransitionEnd","getUID","prefix","Math","random","document","getElementById","getSelectorFromElement","element","selector","getAttribute","hrefAttr","trim","querySelector","_","getTransitionDurationFromElement","transitionDuration","css","transitionDelay","floatTransitionDuration","parseFloat","floatTransitionDelay","split","reflow","offsetHeight","trigger","supportsTransitionEnd","Boolean","isElement","nodeType","typeCheckConfig","componentName","config","configTypes","property","Object","prototype","hasOwnProperty","expectedTypes","value","valueType","RegExp","test","Error","toUpperCase","findShadowRoot","documentElement","attachShadow","getRootNode","root","ShadowRoot","parentNode","jQueryDetection","$","TypeError","version","fn","jquery","emulateTransitionEnd","event","special","bindType","delegateType","handle","target","is","handleObj","handler","apply","arguments"],"mappings":"8OAkBSA,OAAOC,YACVA,MAAAA,cACQA,KAGL,GAAGC,SAASC,KAAKF,KAAKG,MAAM,eAAe,GAAGC,uBAiB9CC,sBAAsBC,cACzBC,QAAS,4BAEXC,MAAMC,IAAIC,KAAKC,gBAAgB,KAC/BJ,QAAS,KAGXK,YAAW,KACJL,QACHG,KAAKG,qBAAqBL,QAE3BF,UAEIE,WAYHE,KAAO,CACXC,eAAgB,kBAEhBG,OAAOC,WAGHA,WAzDU,IAyDGC,KAAKC,gBACXC,SAASC,eAAeJ,gBAE1BA,QAGTK,uBAAuBC,aACjBC,SAAWD,QAAQE,aAAa,mBAE/BD,UAAyB,MAAbA,SAAkB,OAC3BE,SAAWH,QAAQE,aAAa,QACtCD,SAAWE,UAAyB,MAAbA,SAAmBA,SAASC,OAAS,cAIrDP,SAASQ,cAAcJ,UAAYA,SAAW,KACrD,MAAOK,UACA,OAIXC,iCAAiCP,aAC1BA,eACI,MAILQ,oBAAqB,mBAAER,SAASS,IAAI,uBACpCC,iBAAkB,mBAAEV,SAASS,IAAI,0BAE/BE,wBAA0BC,WAAWJ,oBACrCK,qBAAuBD,WAAWF,wBAGnCC,yBAA4BE,sBAKjCL,mBAAqBA,mBAAmBM,MAAM,KAAK,GACnDJ,gBAAkBA,gBAAgBI,MAAM,KAAK,GAhGjB,KAkGpBF,WAAWJ,oBAAsBI,WAAWF,mBAP3C,GAUXK,OAAOf,SACEA,QAAQgB,aAGjBxB,qBAAqBQ,6BACjBA,SAASiB,QA5GQ,kBA+GrBC,sBAAqB,IACZC,QAhHY,iBAmHrBC,UAAUzC,MACAA,IAAI,IAAMA,KAAK0C,SAGzBC,gBAAgBC,cAAeC,OAAQC,iBAChC,MAAMC,YAAYD,eACjBE,OAAOC,UAAUC,eAAehD,KAAK4C,YAAaC,UAAW,OACzDI,cAAgBL,YAAYC,UAC5BK,MAAQP,OAAOE,UACfM,UAAYD,OAAS1C,KAAK+B,UAAUW,OACxC,UAAYrD,OAAOqD,WAEhB,IAAIE,OAAOH,eAAeI,KAAKF,iBAC5B,IAAIG,MACR,UAAGZ,cAAca,sCACNV,qCAA4BM,6CACjBF,uBAMhCO,eAAerC,aACRH,SAASyC,gBAAgBC,oBACrB,QAI0B,mBAAxBvC,QAAQwC,YAA4B,OACvCC,KAAOzC,QAAQwC,qBACdC,gBAAgBC,WAAaD,KAAO,YAGzCzC,mBAAmB0C,WACd1C,QAIJA,QAAQ2C,WAINtD,KAAKgD,eAAerC,QAAQ2C,YAH1B,MAMXC,0BACmB,IAANC,sBACH,IAAIC,UAAU,wGAGhBC,QAAUF,gBAAEG,GAAGC,OAAOnC,MAAM,KAAK,GAAGA,MAAM,QAO5CiC,QAAQ,GALI,GAKYA,QAAQ,GAJnB,GAFA,IAMoCA,QAAQ,IAJ5C,IAI+DA,QAAQ,IAAmBA,QAAQ,GAHlG,GAGmHA,QAAQ,IAF3H,QAGT,IAAIZ,MAAM,iFAKtB9C,KAAKuD,kCAtIDI,GAAGE,qBAAuBlE,sCAC1BmE,MAAMC,QAAQ/D,KAAKC,gBA/Bd,CACL+D,SAfmB,gBAgBnBC,aAhBmB,gBAiBnBC,OAAOJ,WACD,mBAAEA,MAAMK,QAAQC,GAAGtE,aACdgE,MAAMO,UAAUC,QAAQC,MAAMzE,KAAM0E,0BAkKpCxE"} boost/amd/build/bootstrap/alert.min.js.map 0000604 00000012271 15062070724 0014554 0 ustar 00 {"version":3,"file":"alert.min.js","sources":["../../src/bootstrap/alert.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): alert.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'alert'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.alert'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ALERT = 'alert'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_CLOSE = `close${EVENT_KEY}`\nconst EVENT_CLOSED = `closed${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DISMISS = '[data-dismiss=\"alert\"]'\n\n/**\n * Class definition\n */\n\nclass Alert {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n // Public\n close(element) {\n let rootElement = this._element\n if (element) {\n rootElement = this._getRootElement(element)\n }\n\n const customEvent = this._triggerCloseEvent(rootElement)\n\n if (customEvent.isDefaultPrevented()) {\n return\n }\n\n this._removeElement(rootElement)\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n _getRootElement(element) {\n const selector = Util.getSelectorFromElement(element)\n let parent = false\n\n if (selector) {\n parent = document.querySelector(selector)\n }\n\n if (!parent) {\n parent = $(element).closest(`.${CLASS_NAME_ALERT}`)[0]\n }\n\n return parent\n }\n\n _triggerCloseEvent(element) {\n const closeEvent = $.Event(EVENT_CLOSE)\n\n $(element).trigger(closeEvent)\n return closeEvent\n }\n\n _removeElement(element) {\n $(element).removeClass(CLASS_NAME_SHOW)\n\n if (!$(element).hasClass(CLASS_NAME_FADE)) {\n this._destroyElement(element)\n return\n }\n\n const transitionDuration = Util.getTransitionDurationFromElement(element)\n\n $(element)\n .one(Util.TRANSITION_END, event => this._destroyElement(element, event))\n .emulateTransitionEnd(transitionDuration)\n }\n\n _destroyElement(element) {\n $(element)\n .detach()\n .trigger(EVENT_CLOSED)\n .remove()\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Alert(this)\n $element.data(DATA_KEY, data)\n }\n\n if (config === 'close') {\n data[config](this)\n }\n })\n }\n\n static _handleDismiss(alertInstance) {\n return function (event) {\n if (event) {\n event.preventDefault()\n }\n\n alertInstance.close(this)\n }\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(\n EVENT_CLICK_DATA_API,\n SELECTOR_DISMISS,\n Alert._handleDismiss(new Alert())\n)\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Alert._jQueryInterface\n$.fn[NAME].Constructor = Alert\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Alert._jQueryInterface\n}\n\nexport default Alert\n"],"names":["EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_CLOSE","EVENT_CLOSED","EVENT_CLICK_DATA_API","Alert","constructor","element","_element","VERSION","close","rootElement","this","_getRootElement","_triggerCloseEvent","isDefaultPrevented","_removeElement","dispose","removeData","selector","Util","getSelectorFromElement","parent","document","querySelector","closest","closeEvent","Event","trigger","removeClass","hasClass","_destroyElement","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","event","emulateTransitionEnd","detach","remove","config","each","$element","data","alertInstance","preventDefault","on","_handleDismiss","_jQueryInterface","Constructor","noConflict"],"mappings":"yVAiBMA,qBADW,YAGXC,mBAAqBC,gBAAEC,GAAF,MAMrBC,2BAAsBJ,WACtBK,6BAAwBL,WACxBM,oCAA+BN,kBAThB,mBAiBfO,MACJC,YAAYC,cACLC,SAAWD,QAIPE,2BA1BG,QA+BdC,MAAMH,aACAI,YAAcC,KAAKJ,SACnBD,UACFI,YAAcC,KAAKC,gBAAgBN,UAGjBK,KAAKE,mBAAmBH,aAE5BI,2BAIXC,eAAeL,aAGtBM,0BACIC,WAAWN,KAAKJ,SA9CL,iBA+CRA,SAAW,KAIlBK,gBAAgBN,eACRY,SAAWC,cAAKC,uBAAuBd,aACzCe,QAAS,SAETH,WACFG,OAASC,SAASC,cAAcL,WAG7BG,SACHA,QAAS,mBAAEf,SAASkB,mBAvDD,UAuDiC,IAG/CH,OAGTR,mBAAmBP,eACXmB,WAAa1B,gBAAE2B,MAAMzB,uCAEzBK,SAASqB,QAAQF,YACZA,WAGTV,eAAeT,gCACXA,SAASsB,YAnES,UAqEf,mBAAEtB,SAASuB,SAtEI,yBAuEbC,gBAAgBxB,eAIjByB,mBAAqBZ,cAAKa,iCAAiC1B,6BAE/DA,SACC2B,IAAId,cAAKe,gBAAgBC,OAASxB,KAAKmB,gBAAgBxB,QAAS6B,SAChEC,qBAAqBL,oBAG1BD,gBAAgBxB,6BACZA,SACC+B,SACAV,QAAQzB,cACRoC,iCAImBC,eACf5B,KAAK6B,MAAK,iBACTC,UAAW,mBAAE9B,UACf+B,KAAOD,SAASC,KAnGT,YAqGNA,OACHA,KAAO,IAAItC,MAAMO,MACjB8B,SAASC,KAvGA,WAuGeA,OAGX,UAAXH,QACFG,KAAKH,QAAQ5B,+BAKGgC,sBACb,SAAUR,OACXA,OACFA,MAAMS,iBAGRD,cAAclC,MAAME,4BASxBW,UAAUuB,GACV1C,qBAnHuB,yBAqHvBC,MAAM0C,eAAe,IAAI1C,wBAOzBJ,GAAF,MAAaI,MAAM2C,iCACjB/C,GAAF,MAAWgD,YAAc5C,sBACvBJ,GAAF,MAAWiD,WAAa,qBACpBjD,GAAF,MAAaF,mBACNM,MAAM2C,+BAGA3C"} boost/amd/build/bootstrap/dropdown.min.js 0000604 00000022531 15062070724 0014525 0 ustar 00 define("theme_boost/bootstrap/dropdown",["exports","jquery","core/popper","./util"],(function(_exports,_jquery,_popper,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_popper=_interopRequireDefault(_popper),_util=_interopRequireDefault(_util);const NAME="dropdown",DATA_KEY="bs.dropdown",EVENT_KEY=".".concat(DATA_KEY),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],REGEXP_KEYDOWN=new RegExp("".concat(38,"|").concat(40,"|").concat(27)),EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),EVENT_CLICK="click".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),EVENT_KEYDOWN_DATA_API="keydown".concat(EVENT_KEY).concat(".data-api"),EVENT_KEYUP_DATA_API="keyup".concat(EVENT_KEY).concat(".data-api"),Default={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},DefaultType={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"};class Dropdown{constructor(element,config){this._element=element,this._popper=null,this._config=this._getConfig(config),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}static get VERSION(){return"4.6.2"}static get Default(){return Default}static get DefaultType(){return DefaultType}toggle(){if(this._element.disabled||(0,_jquery.default)(this._element).hasClass("disabled"))return;const isActive=(0,_jquery.default)(this._menu).hasClass("show");Dropdown._clearMenus(),isActive||this.show(!0)}show(){let usePopper=arguments.length>0&&void 0!==arguments[0]&&arguments[0];if(this._element.disabled||(0,_jquery.default)(this._element).hasClass("disabled")||(0,_jquery.default)(this._menu).hasClass("show"))return;const relatedTarget={relatedTarget:this._element},showEvent=_jquery.default.Event(EVENT_SHOW,relatedTarget),parent=Dropdown._getParentFromElement(this._element);if((0,_jquery.default)(parent).trigger(showEvent),!showEvent.isDefaultPrevented()){if(!this._inNavbar&&usePopper){if(void 0===_popper.default)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let referenceElement=this._element;"parent"===this._config.reference?referenceElement=parent:_util.default.isElement(this._config.reference)&&(referenceElement=this._config.reference,void 0!==this._config.reference.jquery&&(referenceElement=this._config.reference[0])),"scrollParent"!==this._config.boundary&&(0,_jquery.default)(parent).addClass("position-static"),this._popper=new _popper.default(referenceElement,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===(0,_jquery.default)(parent).closest(".navbar-nav").length&&(0,_jquery.default)(document.body).children().on("mouseover",null,_jquery.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),(0,_jquery.default)(this._menu).toggleClass("show"),(0,_jquery.default)(parent).toggleClass("show").trigger(_jquery.default.Event(EVENT_SHOWN,relatedTarget))}}hide(){if(this._element.disabled||(0,_jquery.default)(this._element).hasClass("disabled")||!(0,_jquery.default)(this._menu).hasClass("show"))return;const relatedTarget={relatedTarget:this._element},hideEvent=_jquery.default.Event(EVENT_HIDE,relatedTarget),parent=Dropdown._getParentFromElement(this._element);(0,_jquery.default)(parent).trigger(hideEvent),hideEvent.isDefaultPrevented()||(this._popper&&this._popper.destroy(),(0,_jquery.default)(this._menu).toggleClass("show"),(0,_jquery.default)(parent).toggleClass("show").trigger(_jquery.default.Event(EVENT_HIDDEN,relatedTarget)))}dispose(){_jquery.default.removeData(this._element,DATA_KEY),(0,_jquery.default)(this._element).off(EVENT_KEY),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)}update(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()}_addEventListeners(){(0,_jquery.default)(this._element).on(EVENT_CLICK,(event=>{event.preventDefault(),event.stopPropagation(),this.toggle()}))}_getConfig(config){return config={...this.constructor.Default,...(0,_jquery.default)(this._element).data(),...config},_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config}_getMenuElement(){if(!this._menu){const parent=Dropdown._getParentFromElement(this._element);parent&&(this._menu=parent.querySelector(".dropdown-menu"))}return this._menu}_getPlacement(){const $parentDropdown=(0,_jquery.default)(this._element.parentNode);let placement="bottom-start";return $parentDropdown.hasClass("dropup")?placement=(0,_jquery.default)(this._menu).hasClass("dropdown-menu-right")?"top-end":"top-start":$parentDropdown.hasClass("dropright")?placement="right-start":$parentDropdown.hasClass("dropleft")?placement="left-start":(0,_jquery.default)(this._menu).hasClass("dropdown-menu-right")&&(placement="bottom-end"),placement}_detectNavbar(){return(0,_jquery.default)(this._element).closest(".navbar").length>0}_getOffset(){const offset={};return"function"==typeof this._config.offset?offset.fn=data=>(data.offsets={...data.offsets,...this._config.offset(data.offsets,this._element)},data):offset.offset=this._config.offset,offset}_getPopperConfig(){const popperConfig={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(popperConfig.modifiers.applyStyle={enabled:!1}),{...popperConfig,...this._config.popperConfig}}static _jQueryInterface(config){return this.each((function(){let data=(0,_jquery.default)(this).data(DATA_KEY);if(data||(data=new Dropdown(this,"object"==typeof config?config:null),(0,_jquery.default)(this).data(DATA_KEY,data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}static _clearMenus(event){if(event&&(3===event.which||"keyup"===event.type&&9!==event.which))return;const toggles=[].slice.call(document.querySelectorAll('[data-toggle="dropdown"]'));for(let i=0,len=toggles.length;i<len;i++){const parent=Dropdown._getParentFromElement(toggles[i]),context=(0,_jquery.default)(toggles[i]).data(DATA_KEY),relatedTarget={relatedTarget:toggles[i]};if(event&&"click"===event.type&&(relatedTarget.clickEvent=event),!context)continue;const dropdownMenu=context._menu;if(!(0,_jquery.default)(parent).hasClass("show"))continue;if(event&&("click"===event.type&&/input|textarea/i.test(event.target.tagName)||"keyup"===event.type&&9===event.which)&&_jquery.default.contains(parent,event.target))continue;const hideEvent=_jquery.default.Event(EVENT_HIDE,relatedTarget);(0,_jquery.default)(parent).trigger(hideEvent),hideEvent.isDefaultPrevented()||("ontouchstart"in document.documentElement&&(0,_jquery.default)(document.body).children().off("mouseover",null,_jquery.default.noop),toggles[i].setAttribute("aria-expanded","false"),context._popper&&context._popper.destroy(),(0,_jquery.default)(dropdownMenu).removeClass("show"),(0,_jquery.default)(parent).removeClass("show").trigger(_jquery.default.Event(EVENT_HIDDEN,relatedTarget)))}}static _getParentFromElement(element){let parent;const selector=_util.default.getSelectorFromElement(element);return selector&&(parent=document.querySelector(selector)),parent||element.parentNode}static _dataApiKeydownHandler(event){if(/input|textarea/i.test(event.target.tagName)?32===event.which||27!==event.which&&(40!==event.which&&38!==event.which||(0,_jquery.default)(event.target).closest(".dropdown-menu").length):!REGEXP_KEYDOWN.test(event.which))return;if(this.disabled||(0,_jquery.default)(this).hasClass("disabled"))return;const parent=Dropdown._getParentFromElement(this),isActive=(0,_jquery.default)(parent).hasClass("show");if(!isActive&&27===event.which)return;if(event.preventDefault(),event.stopPropagation(),!isActive||27===event.which||32===event.which)return 27===event.which&&(0,_jquery.default)(parent.querySelector('[data-toggle="dropdown"]')).trigger("focus"),void(0,_jquery.default)(this).trigger("click");const items=[].slice.call(parent.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((item=>(0,_jquery.default)(item).is(":visible")));if(0===items.length)return;let index=items.indexOf(event.target);38===event.which&&index>0&&index--,40===event.which&&index<items.length-1&&index++,index<0&&(index=0),items[index].focus()}}(0,_jquery.default)(document).on(EVENT_KEYDOWN_DATA_API,'[data-toggle="dropdown"]',Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API,".dropdown-menu",Dropdown._dataApiKeydownHandler).on("".concat(EVENT_CLICK_DATA_API," ").concat(EVENT_KEYUP_DATA_API),Dropdown._clearMenus).on(EVENT_CLICK_DATA_API,'[data-toggle="dropdown"]',(function(event){event.preventDefault(),event.stopPropagation(),Dropdown._jQueryInterface.call((0,_jquery.default)(this),"toggle")})).on(EVENT_CLICK_DATA_API,".dropdown form",(e=>{e.stopPropagation()})),_jquery.default.fn[NAME]=Dropdown._jQueryInterface,_jquery.default.fn[NAME].Constructor=Dropdown,_jquery.default.fn[NAME].noConflict=()=>(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Dropdown._jQueryInterface);var _default=Dropdown;return _exports.default=_default,_exports.default})); //# sourceMappingURL=dropdown.min.js.map boost/amd/build/bootstrap/popover.min.js.map 0000604 00000014056 15062070724 0015142 0 ustar 00 {"version":3,"file":"popover.min.js","sources":["../../src/bootstrap/popover.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): popover.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Tooltip from './tooltip'\n\n/**\n * Constants\n */\n\nconst NAME = 'popover'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.popover'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst CLASS_PREFIX = 'bs-popover'\nconst BSCLS_PREFIX_REGEX = new RegExp(`(^|\\\\s)${CLASS_PREFIX}\\\\S+`, 'g')\n\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst SELECTOR_TITLE = '.popover-header'\nconst SELECTOR_CONTENT = '.popover-body'\n\nconst Default = {\n ...Tooltip.Default,\n placement: 'right',\n trigger: 'click',\n content: '',\n template: '<div class=\"popover\" role=\"tooltip\">' +\n '<div class=\"arrow\"></div>' +\n '<h3 class=\"popover-header\"></h3>' +\n '<div class=\"popover-body\"></div></div>'\n}\n\nconst DefaultType = {\n ...Tooltip.DefaultType,\n content: '(string|element|function)'\n}\n\nconst Event = {\n HIDE: `hide${EVENT_KEY}`,\n HIDDEN: `hidden${EVENT_KEY}`,\n SHOW: `show${EVENT_KEY}`,\n SHOWN: `shown${EVENT_KEY}`,\n INSERTED: `inserted${EVENT_KEY}`,\n CLICK: `click${EVENT_KEY}`,\n FOCUSIN: `focusin${EVENT_KEY}`,\n FOCUSOUT: `focusout${EVENT_KEY}`,\n MOUSEENTER: `mouseenter${EVENT_KEY}`,\n MOUSELEAVE: `mouseleave${EVENT_KEY}`\n}\n\n/**\n * Class definition\n */\n\nclass Popover extends Tooltip {\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n static get NAME() {\n return NAME\n }\n\n static get DATA_KEY() {\n return DATA_KEY\n }\n\n static get Event() {\n return Event\n }\n\n static get EVENT_KEY() {\n return EVENT_KEY\n }\n\n static get DefaultType() {\n return DefaultType\n }\n\n // Overrides\n isWithContent() {\n return this.getTitle() || this._getContent()\n }\n\n addAttachmentClass(attachment) {\n $(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`)\n }\n\n getTipElement() {\n this.tip = this.tip || $(this.config.template)[0]\n return this.tip\n }\n\n setContent() {\n const $tip = $(this.getTipElement())\n\n // We use append for html objects to maintain js events\n this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle())\n let content = this._getContent()\n if (typeof content === 'function') {\n content = content.call(this.element)\n }\n\n this.setElementContent($tip.find(SELECTOR_CONTENT), content)\n\n $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`)\n }\n\n // Private\n _getContent() {\n return this.element.getAttribute('data-content') ||\n this.config.content\n }\n\n _cleanTipClass() {\n const $tip = $(this.getTipElement())\n const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX)\n if (tabClass !== null && tabClass.length > 0) {\n $tip.removeClass(tabClass.join(''))\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' ? config : null\n\n if (!data && /dispose|hide/.test(config)) {\n return\n }\n\n if (!data) {\n data = new Popover(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Popover._jQueryInterface\n$.fn[NAME].Constructor = Popover\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Popover._jQueryInterface\n}\n\nexport default Popover\n"],"names":["NAME","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","BSCLS_PREFIX_REGEX","RegExp","Default","Tooltip","placement","trigger","content","template","DefaultType","Event","HIDE","HIDDEN","SHOW","SHOWN","INSERTED","CLICK","FOCUSIN","FOCUSOUT","MOUSEENTER","MOUSELEAVE","Popover","VERSION","DATA_KEY","isWithContent","this","getTitle","_getContent","addAttachmentClass","attachment","getTipElement","addClass","tip","config","setContent","$tip","setElementContent","find","call","element","removeClass","getAttribute","_cleanTipClass","tabClass","attr","match","length","join","each","data","_config","test","TypeError","_jQueryInterface","Constructor","noConflict"],"mappings":"uWAcMA,KAAO,UAGPC,qBADW,cAEXC,mBAAqBC,gBAAEC,GAAGJ,MAE1BK,mBAAqB,IAAIC,wBADV,qBAC+C,KAQ9DC,QAAU,IACXC,iBAAQD,QACXE,UAAW,QACXC,QAAS,QACTC,QAAS,GACTC,SAAU,uIAMNC,YAAc,IACfL,iBAAQK,YACXF,QAAS,6BAGLG,MAAQ,CACZC,mBAAad,WACbe,uBAAiBf,WACjBgB,mBAAahB,WACbiB,qBAAejB,WACfkB,2BAAqBlB,WACrBmB,qBAAenB,WACfoB,yBAAmBpB,WACnBqB,2BAAqBrB,WACrBsB,+BAAyBtB,WACzBuB,+BAAyBvB,kBAOrBwB,gBAAgBjB,iBAETkB,2BAhDG,QAoDHnB,4BACFA,QAGEP,yBACFA,KAGE2B,4BA3DI,aA+DJb,0BACFA,MAGEb,8BACFA,UAGEY,gCACFA,YAITe,uBACSC,KAAKC,YAAcD,KAAKE,cAGjCC,mBAAmBC,gCACfJ,KAAKK,iBAAiBC,mBA9EP,yBA8EmCF,aAGtDC,4BACOE,IAAMP,KAAKO,MAAO,mBAAEP,KAAKQ,OAAOzB,UAAU,GACxCiB,KAAKO,IAGdE,mBACQC,MAAO,mBAAEV,KAAKK,sBAGfM,kBAAkBD,KAAKE,KApFT,mBAoF+BZ,KAAKC,gBACnDnB,QAAUkB,KAAKE,cACI,mBAAZpB,UACTA,QAAUA,QAAQ+B,KAAKb,KAAKc,eAGzBH,kBAAkBD,KAAKE,KAzFP,iBAyF+B9B,SAEpD4B,KAAKK,sBA/Fe,mBACA,SAkGtBb,qBACSF,KAAKc,QAAQE,aAAa,iBAC/BhB,KAAKQ,OAAO1B,QAGhBmC,uBACQP,MAAO,mBAAEV,KAAKK,iBACda,SAAWR,KAAKS,KAAK,SAASC,MAAM5C,oBACzB,OAAb0C,UAAqBA,SAASG,OAAS,GACzCX,KAAKK,YAAYG,SAASI,KAAK,6BAKXd,eACfR,KAAKuB,MAAK,eACXC,MAAO,mBAAExB,MAAMwB,KAzHR,oBA0HLC,QAA4B,iBAAXjB,OAAsBA,OAAS,SAEjDgB,OAAQ,eAAeE,KAAKlB,WAI5BgB,OACHA,KAAO,IAAI5B,QAAQI,KAAMyB,6BACvBzB,MAAMwB,KAlIC,aAkIcA,OAGH,iBAAXhB,QAAqB,SACF,IAAjBgB,KAAKhB,cACR,IAAImB,qCAA8BnB,aAG1CgB,KAAKhB,+BAUXjC,GAAGJ,MAAQyB,QAAQgC,iCACnBrD,GAAGJ,MAAM0D,YAAcjC,wBACvBrB,GAAGJ,MAAM2D,WAAa,qBACpBvD,GAAGJ,MAAQE,mBACNuB,QAAQgC,+BAGFhC"} boost/amd/build/bootstrap/scrollspy.min.js.map 0000604 00000031631 15062070724 0015500 0 ustar 00 {"version":3,"file":"scrollspy.min.js","sources":["../../src/bootstrap/scrollspy.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): scrollspy.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'scrollspy'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.scrollspy'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'\nconst CLASS_NAME_ACTIVE = 'active'\n\nconst EVENT_ACTIVATE = `activate${EVENT_KEY}`\nconst EVENT_SCROLL = `scroll${EVENT_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst METHOD_OFFSET = 'offset'\nconst METHOD_POSITION = 'position'\n\nconst SELECTOR_DATA_SPY = '[data-spy=\"scroll\"]'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_NAV_LINKS = '.nav-link'\nconst SELECTOR_NAV_ITEMS = '.nav-item'\nconst SELECTOR_LIST_ITEMS = '.list-group-item'\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_DROPDOWN_ITEMS = '.dropdown-item'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\n\nconst Default = {\n offset: 10,\n method: 'auto',\n target: ''\n}\n\nconst DefaultType = {\n offset: 'number',\n method: 'string',\n target: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass ScrollSpy {\n constructor(element, config) {\n this._element = element\n this._scrollElement = element.tagName === 'BODY' ? window : element\n this._config = this._getConfig(config)\n this._selector = `${this._config.target} ${SELECTOR_NAV_LINKS},` +\n `${this._config.target} ${SELECTOR_LIST_ITEMS},` +\n `${this._config.target} ${SELECTOR_DROPDOWN_ITEMS}`\n this._offsets = []\n this._targets = []\n this._activeTarget = null\n this._scrollHeight = 0\n\n $(this._scrollElement).on(EVENT_SCROLL, event => this._process(event))\n\n this.refresh()\n this._process()\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n refresh() {\n const autoMethod = this._scrollElement === this._scrollElement.window ?\n METHOD_OFFSET : METHOD_POSITION\n\n const offsetMethod = this._config.method === 'auto' ?\n autoMethod : this._config.method\n\n const offsetBase = offsetMethod === METHOD_POSITION ?\n this._getScrollTop() : 0\n\n this._offsets = []\n this._targets = []\n\n this._scrollHeight = this._getScrollHeight()\n\n const targets = [].slice.call(document.querySelectorAll(this._selector))\n\n targets\n .map(element => {\n let target\n const targetSelector = Util.getSelectorFromElement(element)\n\n if (targetSelector) {\n target = document.querySelector(targetSelector)\n }\n\n if (target) {\n const targetBCR = target.getBoundingClientRect()\n if (targetBCR.width || targetBCR.height) {\n // TODO (fat): remove sketch reliance on jQuery position/offset\n return [\n $(target)[offsetMethod]().top + offsetBase,\n targetSelector\n ]\n }\n }\n\n return null\n })\n .filter(Boolean)\n .sort((a, b) => a[0] - b[0])\n .forEach(item => {\n this._offsets.push(item[0])\n this._targets.push(item[1])\n })\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n $(this._scrollElement).off(EVENT_KEY)\n\n this._element = null\n this._scrollElement = null\n this._config = null\n this._selector = null\n this._offsets = null\n this._targets = null\n this._activeTarget = null\n this._scrollHeight = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (typeof config.target !== 'string' && Util.isElement(config.target)) {\n let id = $(config.target).attr('id')\n if (!id) {\n id = Util.getUID(NAME)\n $(config.target).attr('id', id)\n }\n\n config.target = `#${id}`\n }\n\n Util.typeCheckConfig(NAME, config, DefaultType)\n\n return config\n }\n\n _getScrollTop() {\n return this._scrollElement === window ?\n this._scrollElement.pageYOffset : this._scrollElement.scrollTop\n }\n\n _getScrollHeight() {\n return this._scrollElement.scrollHeight || Math.max(\n document.body.scrollHeight,\n document.documentElement.scrollHeight\n )\n }\n\n _getOffsetHeight() {\n return this._scrollElement === window ?\n window.innerHeight : this._scrollElement.getBoundingClientRect().height\n }\n\n _process() {\n const scrollTop = this._getScrollTop() + this._config.offset\n const scrollHeight = this._getScrollHeight()\n const maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight()\n\n if (this._scrollHeight !== scrollHeight) {\n this.refresh()\n }\n\n if (scrollTop >= maxScroll) {\n const target = this._targets[this._targets.length - 1]\n\n if (this._activeTarget !== target) {\n this._activate(target)\n }\n\n return\n }\n\n if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n this._activeTarget = null\n this._clear()\n return\n }\n\n for (let i = this._offsets.length; i--;) {\n const isActiveTarget = this._activeTarget !== this._targets[i] &&\n scrollTop >= this._offsets[i] &&\n (typeof this._offsets[i + 1] === 'undefined' ||\n scrollTop < this._offsets[i + 1])\n\n if (isActiveTarget) {\n this._activate(this._targets[i])\n }\n }\n }\n\n _activate(target) {\n this._activeTarget = target\n\n this._clear()\n\n const queries = this._selector\n .split(',')\n .map(selector => `${selector}[data-target=\"${target}\"],${selector}[href=\"${target}\"]`)\n\n const $link = $([].slice.call(document.querySelectorAll(queries.join(','))))\n\n if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {\n $link.closest(SELECTOR_DROPDOWN)\n .find(SELECTOR_DROPDOWN_TOGGLE)\n .addClass(CLASS_NAME_ACTIVE)\n $link.addClass(CLASS_NAME_ACTIVE)\n } else {\n // Set triggered link as active\n $link.addClass(CLASS_NAME_ACTIVE)\n // Set triggered links parents as active\n // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(`${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`)\n .addClass(CLASS_NAME_ACTIVE)\n // Handle special case when .nav-link is inside .nav-item\n $link.parents(SELECTOR_NAV_LIST_GROUP)\n .prev(SELECTOR_NAV_ITEMS)\n .children(SELECTOR_NAV_LINKS)\n .addClass(CLASS_NAME_ACTIVE)\n }\n\n $(this._scrollElement).trigger(EVENT_ACTIVATE, {\n relatedTarget: target\n })\n }\n\n _clear() {\n [].slice.call(document.querySelectorAll(this._selector))\n .filter(node => node.classList.contains(CLASS_NAME_ACTIVE))\n .forEach(node => node.classList.remove(CLASS_NAME_ACTIVE))\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = typeof config === 'object' && config\n\n if (!data) {\n data = new ScrollSpy(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n const scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY))\n const scrollSpysLength = scrollSpys.length\n\n for (let i = scrollSpysLength; i--;) {\n const $spy = $(scrollSpys[i])\n ScrollSpy._jQueryInterface.call($spy, $spy.data())\n }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = ScrollSpy._jQueryInterface\n$.fn[NAME].Constructor = ScrollSpy\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return ScrollSpy._jQueryInterface\n}\n\nexport default ScrollSpy\n"],"names":["NAME","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_ACTIVATE","EVENT_SCROLL","EVENT_LOAD_DATA_API","Default","offset","method","target","DefaultType","ScrollSpy","constructor","element","config","_element","_scrollElement","tagName","window","_config","this","_getConfig","_selector","_offsets","_targets","_activeTarget","_scrollHeight","on","event","_process","refresh","VERSION","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","slice","call","document","querySelectorAll","map","targetSelector","Util","getSelectorFromElement","querySelector","targetBCR","getBoundingClientRect","width","height","top","filter","Boolean","sort","a","b","forEach","item","push","dispose","removeData","off","isElement","id","attr","getUID","typeCheckConfig","pageYOffset","scrollTop","scrollHeight","Math","max","body","documentElement","_getOffsetHeight","innerHeight","maxScroll","length","_activate","_clear","i","queries","split","selector","$link","join","hasClass","closest","find","addClass","parents","prev","children","trigger","relatedTarget","node","classList","contains","remove","each","data","TypeError","scrollSpys","$spy","_jQueryInterface","Constructor","noConflict"],"mappings":"6VAcMA,KAAO,YAGPC,qBADW,gBAGXC,mBAAqBC,gBAAEC,GAAGJ,MAK1BK,iCAA4BJ,WAC5BK,6BAAwBL,WACxBM,kCAA6BN,kBARd,aAsBfO,QAAU,CACdC,OAAQ,GACRC,OAAQ,OACRC,OAAQ,IAGJC,YAAc,CAClBH,OAAQ,SACRC,OAAQ,SACRC,OAAQ,0BAOJE,UACJC,YAAYC,QAASC,aACdC,SAAWF,aACXG,eAAqC,SAApBH,QAAQI,QAAqBC,OAASL,aACvDM,QAAUC,KAAKC,WAAWP,aAC1BQ,UAAY,UAAGF,KAAKD,QAAQV,mBA5BV,2BA6BEW,KAAKD,QAAQV,mBA3Bd,kCA4BCW,KAAKD,QAAQV,mBA1BV,uBA2BvBc,SAAW,QACXC,SAAW,QACXC,cAAgB,UAChBC,cAAgB,sBAEnBN,KAAKJ,gBAAgBW,GAAGvB,cAAcwB,OAASR,KAAKS,SAASD,cAE1DE,eACAD,WAIIE,2BA7DG,QAiEHzB,4BACFA,QAITwB,gBACQE,WAAaZ,KAAKJ,iBAAmBI,KAAKJ,eAAeE,OA1D7C,SACE,WA4Dde,aAAuC,SAAxBb,KAAKD,QAAQX,OAChCwB,WAAaZ,KAAKD,QAAQX,OAEtB0B,WA/Dc,aA+DDD,aACjBb,KAAKe,gBAAkB,OAEpBZ,SAAW,QACXC,SAAW,QAEXE,cAAgBN,KAAKgB,mBAEV,GAAGC,MAAMC,KAAKC,SAASC,iBAAiBpB,KAAKE,YAG1DmB,KAAI5B,cACCJ,aACEiC,eAAiBC,cAAKC,uBAAuB/B,YAE/C6B,iBACFjC,OAAS8B,SAASM,cAAcH,iBAG9BjC,OAAQ,OACJqC,UAAYrC,OAAOsC,2BACrBD,UAAUE,OAASF,UAAUG,aAExB,EACL,mBAAExC,QAAQwB,gBAAgBiB,IAAMhB,WAChCQ,uBAKC,QAERS,OAAOC,SACPC,MAAK,CAACC,EAAGC,IAAMD,EAAE,GAAKC,EAAE,KACxBC,SAAQC,YACFlC,SAASmC,KAAKD,KAAK,SACnBjC,SAASkC,KAAKD,KAAK,OAI9BE,0BACIC,WAAWxC,KAAKL,SArHL,oCAsHXK,KAAKJ,gBAAgB6C,IAAI9D,gBAEtBgB,SAAW,UACXC,eAAiB,UACjBG,QAAU,UACVG,UAAY,UACZC,SAAW,UACXC,SAAW,UACXC,cAAgB,UAChBC,cAAgB,KAIvBL,WAAWP,WAMoB,iBAL7BA,OAAS,IACJR,WACmB,iBAAXQ,QAAuBA,OAASA,OAAS,KAGpCL,QAAuBkC,cAAKmB,UAAUhD,OAAOL,QAAS,KAClEsD,IAAK,mBAAEjD,OAAOL,QAAQuD,KAAK,MAC1BD,KACHA,GAAKpB,cAAKsB,OAAOnE,0BACfgB,OAAOL,QAAQuD,KAAK,KAAMD,KAG9BjD,OAAOL,kBAAasD,yBAGjBG,gBAAgBpE,KAAMgB,OAAQJ,aAE5BI,OAGTqB,uBACSf,KAAKJ,iBAAmBE,OAC7BE,KAAKJ,eAAemD,YAAc/C,KAAKJ,eAAeoD,UAG1DhC,0BACShB,KAAKJ,eAAeqD,cAAgBC,KAAKC,IAC9ChC,SAASiC,KAAKH,aACd9B,SAASkC,gBAAgBJ,cAI7BK,0BACStD,KAAKJ,iBAAmBE,OAC7BA,OAAOyD,YAAcvD,KAAKJ,eAAe+B,wBAAwBE,OAGrEpB,iBACQuC,UAAYhD,KAAKe,gBAAkBf,KAAKD,QAAQZ,OAChD8D,aAAejD,KAAKgB,mBACpBwC,UAAYxD,KAAKD,QAAQZ,OAAS8D,aAAejD,KAAKsD,sBAExDtD,KAAKM,gBAAkB2C,mBACpBvC,UAGHsC,WAAaQ,iBACTnE,OAASW,KAAKI,SAASJ,KAAKI,SAASqD,OAAS,GAEhDzD,KAAKK,gBAAkBhB,aACpBqE,UAAUrE,gBAMfW,KAAKK,eAAiB2C,UAAYhD,KAAKG,SAAS,IAAMH,KAAKG,SAAS,GAAK,cACtEE,cAAgB,eAChBsD,aAIF,IAAIC,EAAI5D,KAAKG,SAASsD,OAAQG,KAAM,CAChB5D,KAAKK,gBAAkBL,KAAKI,SAASwD,IACxDZ,WAAahD,KAAKG,SAASyD,UACM,IAAzB5D,KAAKG,SAASyD,EAAI,IACtBZ,UAAYhD,KAAKG,SAASyD,EAAI,UAG/BF,UAAU1D,KAAKI,SAASwD,MAKnCF,UAAUrE,aACHgB,cAAgBhB,YAEhBsE,eAECE,QAAU7D,KAAKE,UAClB4D,MAAM,KACNzC,KAAI0C,oBAAeA,kCAAyB1E,qBAAY0E,2BAAkB1E,eAEvE2E,OAAQ,mBAAE,GAAG/C,MAAMC,KAAKC,SAASC,iBAAiByC,QAAQI,KAAK,QAEjED,MAAME,SApNmB,kBAqN3BF,MAAMG,QAtMc,aAuMjBC,KArMwB,oBAsMxBC,SAtNiB,UAuNpBL,MAAMK,SAvNc,YA0NpBL,MAAMK,SA1Nc,UA6NpBL,MAAMM,QAnNoB,qBAoNvBC,eAnNkB,yBAEC,qBAkNnBF,SA/NiB,UAiOpBL,MAAMM,QAvNoB,qBAwNvBC,KAtNkB,aAuNlBC,SAxNkB,aAyNlBH,SApOiB,+BAuOpBrE,KAAKJ,gBAAgB6E,QAAQ1F,eAAgB,CAC7C2F,cAAerF,SAInBsE,YACK1C,MAAMC,KAAKC,SAASC,iBAAiBpB,KAAKE,YAC1C6B,QAAO4C,MAAQA,KAAKC,UAAUC,SA9OX,YA+OnBzC,SAAQuC,MAAQA,KAAKC,UAAUE,OA/OZ,oCAmPApF,eACfM,KAAK+E,MAAK,eACXC,MAAO,mBAAEhF,MAAMgF,KA3PR,mBA8PNA,OACHA,KAAO,IAAIzF,UAAUS,KAHW,iBAAXN,QAAuBA,4BAI1CM,MAAMgF,KAhQC,eAgQcA,OAGH,iBAAXtF,OAAqB,SACF,IAAjBsF,KAAKtF,cACR,IAAIuF,qCAA8BvF,aAG1CsF,KAAKtF,mCAUXI,QAAQS,GAAGtB,qBAAqB,WAC1BiG,WAAa,GAAGjE,MAAMC,KAAKC,SAASC,iBApQlB,4BAuQnB,IAAIwC,EAFgBsB,WAAWzB,OAELG,KAAM,OAC7BuB,MAAO,mBAAED,WAAWtB,IAC1BrE,UAAU6F,iBAAiBlE,KAAKiE,KAAMA,KAAKH,4BAQ7ClG,GAAGJ,MAAQa,UAAU6F,iCACrBtG,GAAGJ,MAAM2G,YAAc9F,0BACvBT,GAAGJ,MAAM4G,WAAa,qBACpBxG,GAAGJ,MAAQE,mBACNW,UAAU6F,+BAGJ7F"} boost/amd/build/bootstrap/modal.min.js 0000604 00000031714 15062070724 0013770 0 ustar 00 define("theme_boost/bootstrap/modal",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const NAME="modal",EVENT_KEY=".".concat("bs.modal"),JQUERY_NO_CONFLICT=_jquery.default.fn.modal,EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDE_PREVENTED="hidePrevented".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),EVENT_FOCUSIN="focusin".concat(EVENT_KEY),EVENT_RESIZE="resize".concat(EVENT_KEY),EVENT_CLICK_DISMISS="click.dismiss".concat(EVENT_KEY),EVENT_KEYDOWN_DISMISS="keydown.dismiss".concat(EVENT_KEY),EVENT_MOUSEUP_DISMISS="mouseup.dismiss".concat(EVENT_KEY),EVENT_MOUSEDOWN_DISMISS="mousedown.dismiss".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),Default={backdrop:!0,keyboard:!0,focus:!0,show:!0},DefaultType={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"};class Modal{constructor(element,config){this._config=this._getConfig(config),this._element=element,this._dialog=element.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}static get VERSION(){return"4.6.2"}static get Default(){return Default}toggle(relatedTarget){return this._isShown?this.hide():this.show(relatedTarget)}show(relatedTarget){if(this._isShown||this._isTransitioning)return;const showEvent=_jquery.default.Event(EVENT_SHOW,{relatedTarget:relatedTarget});(0,_jquery.default)(this._element).trigger(showEvent),showEvent.isDefaultPrevented()||(this._isShown=!0,(0,_jquery.default)(this._element).hasClass("fade")&&(this._isTransitioning=!0),this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,'[data-dismiss="modal"]',(event=>this.hide(event))),(0,_jquery.default)(this._dialog).on(EVENT_MOUSEDOWN_DISMISS,(()=>{(0,_jquery.default)(this._element).one(EVENT_MOUSEUP_DISMISS,(event=>{(0,_jquery.default)(event.target).is(this._element)&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(relatedTarget))))}hide(event){if(event&&event.preventDefault(),!this._isShown||this._isTransitioning)return;const hideEvent=_jquery.default.Event(EVENT_HIDE);if((0,_jquery.default)(this._element).trigger(hideEvent),!this._isShown||hideEvent.isDefaultPrevented())return;this._isShown=!1;const transition=(0,_jquery.default)(this._element).hasClass("fade");if(transition&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),(0,_jquery.default)(document).off(EVENT_FOCUSIN),(0,_jquery.default)(this._element).removeClass("show"),(0,_jquery.default)(this._element).off(EVENT_CLICK_DISMISS),(0,_jquery.default)(this._dialog).off(EVENT_MOUSEDOWN_DISMISS),transition){const transitionDuration=_util.default.getTransitionDurationFromElement(this._element);(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(event=>this._hideModal(event))).emulateTransitionEnd(transitionDuration)}else this._hideModal()}dispose(){[window,this._element,this._dialog].forEach((htmlElement=>(0,_jquery.default)(htmlElement).off(EVENT_KEY))),(0,_jquery.default)(document).off(EVENT_FOCUSIN),_jquery.default.removeData(this._element,"bs.modal"),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null}handleUpdate(){this._adjustDialog()}_getConfig(config){return config={...Default,...config},_util.default.typeCheckConfig(NAME,config,DefaultType),config}_triggerBackdropTransition(){const hideEventPrevented=_jquery.default.Event(EVENT_HIDE_PREVENTED);if((0,_jquery.default)(this._element).trigger(hideEventPrevented),hideEventPrevented.isDefaultPrevented())return;const isModalOverflowing=this._element.scrollHeight>document.documentElement.clientHeight;isModalOverflowing||(this._element.style.overflowY="hidden"),this._element.classList.add("modal-static");const modalTransitionDuration=_util.default.getTransitionDurationFromElement(this._dialog);(0,_jquery.default)(this._element).off(_util.default.TRANSITION_END),(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=>{this._element.classList.remove("modal-static"),isModalOverflowing||(0,_jquery.default)(this._element).one(_util.default.TRANSITION_END,(()=>{this._element.style.overflowY=""})).emulateTransitionEnd(this._element,modalTransitionDuration)})).emulateTransitionEnd(modalTransitionDuration),this._element.focus()}_showElement(relatedTarget){const transition=(0,_jquery.default)(this._element).hasClass("fade"),modalBody=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),(0,_jquery.default)(this._dialog).hasClass("modal-dialog-scrollable")&&modalBody?modalBody.scrollTop=0:this._element.scrollTop=0,transition&&_util.default.reflow(this._element),(0,_jquery.default)(this._element).addClass("show"),this._config.focus&&this._enforceFocus();const shownEvent=_jquery.default.Event(EVENT_SHOWN,{relatedTarget:relatedTarget}),transitionComplete=()=>{this._config.focus&&this._element.focus(),this._isTransitioning=!1,(0,_jquery.default)(this._element).trigger(shownEvent)};if(transition){const transitionDuration=_util.default.getTransitionDurationFromElement(this._dialog);(0,_jquery.default)(this._dialog).one(_util.default.TRANSITION_END,transitionComplete).emulateTransitionEnd(transitionDuration)}else transitionComplete()}_enforceFocus(){(0,_jquery.default)(document).off(EVENT_FOCUSIN).on(EVENT_FOCUSIN,(event=>{document!==event.target&&this._element!==event.target&&0===(0,_jquery.default)(this._element).has(event.target).length&&this._element.focus()}))}_setEscapeEvent(){this._isShown?(0,_jquery.default)(this._element).on(EVENT_KEYDOWN_DISMISS,(event=>{this._config.keyboard&&27===event.which?(event.preventDefault(),this.hide()):this._config.keyboard||27!==event.which||this._triggerBackdropTransition()})):this._isShown||(0,_jquery.default)(this._element).off(EVENT_KEYDOWN_DISMISS)}_setResizeEvent(){this._isShown?(0,_jquery.default)(window).on(EVENT_RESIZE,(event=>this.handleUpdate(event))):(0,_jquery.default)(window).off(EVENT_RESIZE)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((()=>{(0,_jquery.default)(document.body).removeClass("modal-open"),this._resetAdjustments(),this._resetScrollbar(),(0,_jquery.default)(this._element).trigger(EVENT_HIDDEN)}))}_removeBackdrop(){this._backdrop&&((0,_jquery.default)(this._backdrop).remove(),this._backdrop=null)}_showBackdrop(callback){const animate=(0,_jquery.default)(this._element).hasClass("fade")?"fade":"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",animate&&this._backdrop.classList.add(animate),(0,_jquery.default)(this._backdrop).appendTo(document.body),(0,_jquery.default)(this._element).on(EVENT_CLICK_DISMISS,(event=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:event.target===event.currentTarget&&("static"===this._config.backdrop?this._triggerBackdropTransition():this.hide())})),animate&&_util.default.reflow(this._backdrop),(0,_jquery.default)(this._backdrop).addClass("show"),!callback)return;if(!animate)return void callback();const backdropTransitionDuration=_util.default.getTransitionDurationFromElement(this._backdrop);(0,_jquery.default)(this._backdrop).one(_util.default.TRANSITION_END,callback).emulateTransitionEnd(backdropTransitionDuration)}else if(!this._isShown&&this._backdrop){(0,_jquery.default)(this._backdrop).removeClass("show");const callbackRemove=()=>{this._removeBackdrop(),callback&&callback()};if((0,_jquery.default)(this._element).hasClass("fade")){const backdropTransitionDuration=_util.default.getTransitionDurationFromElement(this._backdrop);(0,_jquery.default)(this._backdrop).one(_util.default.TRANSITION_END,callbackRemove).emulateTransitionEnd(backdropTransitionDuration)}else callbackRemove()}else callback&&callback()}_adjustDialog(){const isModalOverflowing=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&isModalOverflowing&&(this._element.style.paddingLeft="".concat(this._scrollbarWidth,"px")),this._isBodyOverflowing&&!isModalOverflowing&&(this._element.style.paddingRight="".concat(this._scrollbarWidth,"px"))}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}_checkScrollbar(){const rect=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(rect.left+rect.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()}_setScrollbar(){if(this._isBodyOverflowing){const fixedContent=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top")),stickyContent=[].slice.call(document.querySelectorAll(".sticky-top"));(0,_jquery.default)(fixedContent).each(((index,element)=>{const actualPadding=element.style.paddingRight,calculatedPadding=(0,_jquery.default)(element).css("padding-right");(0,_jquery.default)(element).data("padding-right",actualPadding).css("padding-right","".concat(parseFloat(calculatedPadding)+this._scrollbarWidth,"px"))})),(0,_jquery.default)(stickyContent).each(((index,element)=>{const actualMargin=element.style.marginRight,calculatedMargin=(0,_jquery.default)(element).css("margin-right");(0,_jquery.default)(element).data("margin-right",actualMargin).css("margin-right","".concat(parseFloat(calculatedMargin)-this._scrollbarWidth,"px"))}));const actualPadding=document.body.style.paddingRight,calculatedPadding=(0,_jquery.default)(document.body).css("padding-right");(0,_jquery.default)(document.body).data("padding-right",actualPadding).css("padding-right","".concat(parseFloat(calculatedPadding)+this._scrollbarWidth,"px"))}(0,_jquery.default)(document.body).addClass("modal-open")}_resetScrollbar(){const fixedContent=[].slice.call(document.querySelectorAll(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top"));(0,_jquery.default)(fixedContent).each(((index,element)=>{const padding=(0,_jquery.default)(element).data("padding-right");(0,_jquery.default)(element).removeData("padding-right"),element.style.paddingRight=padding||""}));const elements=[].slice.call(document.querySelectorAll("".concat(".sticky-top")));(0,_jquery.default)(elements).each(((index,element)=>{const margin=(0,_jquery.default)(element).data("margin-right");void 0!==margin&&(0,_jquery.default)(element).css("margin-right",margin).removeData("margin-right")}));const padding=(0,_jquery.default)(document.body).data("padding-right");(0,_jquery.default)(document.body).removeData("padding-right"),document.body.style.paddingRight=padding||""}_getScrollbarWidth(){const scrollDiv=document.createElement("div");scrollDiv.className="modal-scrollbar-measure",document.body.appendChild(scrollDiv);const scrollbarWidth=scrollDiv.getBoundingClientRect().width-scrollDiv.clientWidth;return document.body.removeChild(scrollDiv),scrollbarWidth}static _jQueryInterface(config,relatedTarget){return this.each((function(){let data=(0,_jquery.default)(this).data("bs.modal");const _config={...Default,...(0,_jquery.default)(this).data(),..."object"==typeof config&&config?config:{}};if(data||(data=new Modal(this,_config),(0,_jquery.default)(this).data("bs.modal",data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config](relatedTarget)}else _config.show&&data.show(relatedTarget)}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-toggle="modal"]',(function(event){let target;const selector=_util.default.getSelectorFromElement(this);selector&&(target=document.querySelector(selector));const config=(0,_jquery.default)(target).data("bs.modal")?"toggle":{...(0,_jquery.default)(target).data(),...(0,_jquery.default)(this).data()};"A"!==this.tagName&&"AREA"!==this.tagName||event.preventDefault();const $target=(0,_jquery.default)(target).one(EVENT_SHOW,(showEvent=>{showEvent.isDefaultPrevented()||$target.one(EVENT_HIDDEN,(()=>{(0,_jquery.default)(this).is(":visible")&&this.focus()}))}));Modal._jQueryInterface.call((0,_jquery.default)(target),config,this)})),_jquery.default.fn.modal=Modal._jQueryInterface,_jquery.default.fn.modal.Constructor=Modal,_jquery.default.fn.modal.noConflict=()=>(_jquery.default.fn.modal=JQUERY_NO_CONFLICT,Modal._jQueryInterface);var _default=Modal;return _exports.default=_default,_exports.default})); //# sourceMappingURL=modal.min.js.map boost/amd/build/bootstrap/tab.min.js.map 0000604 00000023507 15062070724 0014217 0 ustar 00 {"version":3,"file":"tab.min.js","sources":["../../src/bootstrap/tab.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'tab'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.tab'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu'\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_DISABLED = 'disabled'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DROPDOWN = '.dropdown'\nconst SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_ACTIVE_UL = '> li > .active'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]'\nconst SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'\nconst SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active'\n\n/**\n * Class definition\n */\n\nclass Tab {\n constructor(element) {\n this._element = element\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n // Public\n show() {\n if (this._element.parentNode &&\n this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n $(this._element).hasClass(CLASS_NAME_ACTIVE) ||\n $(this._element).hasClass(CLASS_NAME_DISABLED) ||\n this._element.hasAttribute('disabled')) {\n return\n }\n\n let target\n let previous\n const listElement = $(this._element).closest(SELECTOR_NAV_LIST_GROUP)[0]\n const selector = Util.getSelectorFromElement(this._element)\n\n if (listElement) {\n const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE\n previous = $.makeArray($(listElement).find(itemSelector))\n previous = previous[previous.length - 1]\n }\n\n const hideEvent = $.Event(EVENT_HIDE, {\n relatedTarget: this._element\n })\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget: previous\n })\n\n if (previous) {\n $(previous).trigger(hideEvent)\n }\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented() ||\n hideEvent.isDefaultPrevented()) {\n return\n }\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n this._activate(\n this._element,\n listElement\n )\n\n const complete = () => {\n const hiddenEvent = $.Event(EVENT_HIDDEN, {\n relatedTarget: this._element\n })\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget: previous\n })\n\n $(previous).trigger(hiddenEvent)\n $(this._element).trigger(shownEvent)\n }\n\n if (target) {\n this._activate(target, target.parentNode, complete)\n } else {\n complete()\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Private\n _activate(element, container, callback) {\n const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ?\n $(container).find(SELECTOR_ACTIVE_UL) :\n $(container).children(SELECTOR_ACTIVE)\n\n const active = activeElements[0]\n const isTransitioning = callback && (active && $(active).hasClass(CLASS_NAME_FADE))\n const complete = () => this._transitionComplete(\n element,\n active,\n callback\n )\n\n if (active && isTransitioning) {\n const transitionDuration = Util.getTransitionDurationFromElement(active)\n\n $(active)\n .removeClass(CLASS_NAME_SHOW)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n complete()\n }\n }\n\n _transitionComplete(element, active, callback) {\n if (active) {\n $(active).removeClass(CLASS_NAME_ACTIVE)\n\n const dropdownChild = $(active.parentNode).find(\n SELECTOR_DROPDOWN_ACTIVE_CHILD\n )[0]\n\n if (dropdownChild) {\n $(dropdownChild).removeClass(CLASS_NAME_ACTIVE)\n }\n\n if (active.getAttribute('role') === 'tab') {\n active.setAttribute('aria-selected', false)\n }\n }\n\n $(element).addClass(CLASS_NAME_ACTIVE)\n if (element.getAttribute('role') === 'tab') {\n element.setAttribute('aria-selected', true)\n }\n\n Util.reflow(element)\n\n if (element.classList.contains(CLASS_NAME_FADE)) {\n element.classList.add(CLASS_NAME_SHOW)\n }\n\n let parent = element.parentNode\n if (parent && parent.nodeName === 'LI') {\n parent = parent.parentNode\n }\n\n if (parent && $(parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {\n const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]\n\n if (dropdownElement) {\n const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE))\n\n $(dropdownToggleList).addClass(CLASS_NAME_ACTIVE)\n }\n\n element.setAttribute('aria-expanded', true)\n }\n\n if (callback) {\n callback()\n }\n }\n\n // Static\n static _jQueryInterface(config) {\n return this.each(function () {\n const $this = $(this)\n let data = $this.data(DATA_KEY)\n\n if (!data) {\n data = new Tab(this)\n $this.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n event.preventDefault()\n Tab._jQueryInterface.call($(this), 'show')\n })\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Tab._jQueryInterface\n$.fn[NAME].Constructor = Tab\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Tab._jQueryInterface\n}\n\nexport default Tab\n"],"names":["EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_HIDE","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_CLICK_DATA_API","Tab","constructor","element","_element","VERSION","show","this","parentNode","nodeType","Node","ELEMENT_NODE","hasClass","hasAttribute","target","previous","listElement","closest","selector","Util","getSelectorFromElement","itemSelector","nodeName","makeArray","find","length","hideEvent","Event","relatedTarget","showEvent","trigger","isDefaultPrevented","document","querySelector","_activate","complete","hiddenEvent","shownEvent","dispose","removeData","container","callback","active","children","isTransitioning","_transitionComplete","transitionDuration","getTransitionDurationFromElement","removeClass","one","TRANSITION_END","emulateTransitionEnd","dropdownChild","getAttribute","setAttribute","addClass","reflow","classList","contains","add","parent","dropdownElement","dropdownToggleList","slice","call","querySelectorAll","config","each","$this","data","TypeError","on","event","preventDefault","_jQueryInterface","Constructor","noConflict"],"mappings":"uVAiBMA,qBADW,UAGXC,mBAAqBC,gBAAEC,GAAF,IAQrBC,yBAAoBJ,WACpBK,6BAAwBL,WACxBM,yBAAoBN,WACpBO,2BAAsBP,WACtBQ,oCAA+BR,kBAbhB,mBA2BfS,IACJC,YAAYC,cACLC,SAAWD,QAIPE,2BApCG,QAyCdC,UACMC,KAAKH,SAASI,YACdD,KAAKH,SAASI,WAAWC,WAAaC,KAAKC,eAC3C,mBAAEJ,KAAKH,UAAUQ,SArCC,YAsClB,mBAAEL,KAAKH,UAAUQ,SArCG,aAsCpBL,KAAKH,SAASS,aAAa,uBAI3BC,OACAC,eACEC,aAAc,mBAAET,KAAKH,UAAUa,QAjCT,qBAiC0C,GAChEC,SAAWC,cAAKC,uBAAuBb,KAAKH,aAE9CY,YAAa,OACTK,aAAwC,OAAzBL,YAAYM,UAA8C,OAAzBN,YAAYM,SAnC7C,iBADH,UAqClBP,SAAWrB,gBAAE6B,WAAU,mBAAEP,aAAaQ,KAAKH,eAC3CN,SAAWA,SAASA,SAASU,OAAS,SAGlCC,UAAYhC,gBAAEiC,MAAM/B,WAAY,CACpCgC,cAAerB,KAAKH,WAGhByB,UAAYnC,gBAAEiC,MAAM7B,WAAY,CACpC8B,cAAeb,cAGbA,8BACAA,UAAUe,QAAQJ,+BAGpBnB,KAAKH,UAAU0B,QAAQD,WAErBA,UAAUE,sBACVL,UAAUK,4BAIVb,WACFJ,OAASkB,SAASC,cAAcf,gBAG7BgB,UACH3B,KAAKH,SACLY,mBAGImB,SAAW,WACTC,YAAc1C,gBAAEiC,MAAM9B,aAAc,CACxC+B,cAAerB,KAAKH,WAGhBiC,WAAa3C,gBAAEiC,MAAM5B,YAAa,CACtC6B,cAAeb,+BAGfA,UAAUe,QAAQM,iCAClB7B,KAAKH,UAAU0B,QAAQO,aAGvBvB,YACGoB,UAAUpB,OAAQA,OAAON,WAAY2B,UAE1CA,WAIJG,0BACIC,WAAWhC,KAAKH,SA7GL,eA8GRA,SAAW,KAIlB8B,UAAU/B,QAASqC,UAAWC,gBAKtBC,SAJiBF,WAAqC,OAAvBA,UAAUlB,UAA4C,OAAvBkB,UAAUlB,UAE5E,mBAAEkB,WAAWG,SAlGK,YAiGlB,mBAAEH,WAAWhB,KAhGQ,mBAmGO,GACxBoB,gBAAkBH,UAAaC,SAAU,mBAAEA,QAAQ9B,SAhHrC,QAiHduB,SAAW,IAAM5B,KAAKsC,oBAC1B1C,QACAuC,OACAD,aAGEC,QAAUE,gBAAiB,OACvBE,mBAAqB3B,cAAK4B,iCAAiCL,4BAE/DA,QACCM,YA1He,QA2HfC,IAAI9B,cAAK+B,eAAgBf,UACzBgB,qBAAqBL,yBAExBX,WAIJU,oBAAoB1C,QAASuC,OAAQD,aAC/BC,OAAQ,qBACRA,QAAQM,YAvIU,gBAyIdI,eAAgB,mBAAEV,OAAOlC,YAAYgB,KAxHV,4BA0H/B,GAEE4B,mCACAA,eAAeJ,YA9IC,UAiJgB,QAAhCN,OAAOW,aAAa,SACtBX,OAAOY,aAAa,iBAAiB,uBAIvCnD,SAASoD,SAtJW,UAuJe,QAAjCpD,QAAQkD,aAAa,SACvBlD,QAAQmD,aAAa,iBAAiB,iBAGnCE,OAAOrD,SAERA,QAAQsD,UAAUC,SA3JF,SA4JlBvD,QAAQsD,UAAUE,IA3JA,YA8JhBC,OAASzD,QAAQK,cACjBoD,QAA8B,OAApBA,OAAOtC,WACnBsC,OAASA,OAAOpD,YAGdoD,SAAU,mBAAEA,QAAQhD,SAvKK,iBAuK+B,OACpDiD,iBAAkB,mBAAE1D,SAASc,QA5Jf,aA4J0C,MAE1D4C,gBAAiB,OACbC,mBAAqB,GAAGC,MAAMC,KAAKH,gBAAgBI,iBA1JhC,yCA4JvBH,oBAAoBP,SA5KJ,UA+KpBpD,QAAQmD,aAAa,iBAAiB,GAGpCb,UACFA,mCAKoByB,eACf3D,KAAK4D,MAAK,iBACTC,OAAQ,mBAAE7D,UACZ8D,KAAOD,MAAMC,KAjMN,aAmMNA,OACHA,KAAO,IAAIpE,IAAIM,MACf6D,MAAMC,KArMG,SAqMYA,OAGD,iBAAXH,OAAqB,SACF,IAAjBG,KAAKH,cACR,IAAII,qCAA8BJ,aAG1CG,KAAKH,mCAUXlC,UACCuC,GAAGvE,qBAnMuB,mEAmMqB,SAAUwE,OACxDA,MAAMC,iBACNxE,IAAIyE,iBAAiBV,MAAK,mBAAEzD,MAAO,2BAOrCZ,GAAF,IAAaM,IAAIyE,iCACf/E,GAAF,IAAWgF,YAAc1E,oBACvBN,GAAF,IAAWiF,WAAa,qBACpBjF,GAAF,IAAaF,mBACNQ,IAAIyE,+BAGEzE"} boost/amd/build/bootstrap/button.min.js 0000604 00000007553 15062070724 0014213 0 ustar 00 define("theme_boost/bootstrap/button",["exports","jquery"],(function(_exports,_jquery){var obj;Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=(obj=_jquery)&&obj.__esModule?obj:{default:obj};const NAME="button",EVENT_KEY=".".concat("bs.button"),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api"),EVENT_FOCUS_BLUR_DATA_API="focus".concat(EVENT_KEY).concat(".data-api"," ")+"blur".concat(EVENT_KEY).concat(".data-api"),EVENT_LOAD_DATA_API="load".concat(EVENT_KEY).concat(".data-api");class Button{constructor(element){this._element=element,this.shouldAvoidTriggerChange=!1}static get VERSION(){return"4.6.2"}toggle(){let triggerChangeEvent=!0,addAriaPressed=!0;const rootElement=(0,_jquery.default)(this._element).closest('[data-toggle="buttons"]')[0];if(rootElement){const input=this._element.querySelector('input:not([type="hidden"])');if(input){if("radio"===input.type)if(input.checked&&this._element.classList.contains("active"))triggerChangeEvent=!1;else{const activeElement=rootElement.querySelector(".active");activeElement&&(0,_jquery.default)(activeElement).removeClass("active")}triggerChangeEvent&&("checkbox"!==input.type&&"radio"!==input.type||(input.checked=!this._element.classList.contains("active")),this.shouldAvoidTriggerChange||(0,_jquery.default)(input).trigger("change")),input.focus(),addAriaPressed=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(addAriaPressed&&this._element.setAttribute("aria-pressed",!this._element.classList.contains("active")),triggerChangeEvent&&(0,_jquery.default)(this._element).toggleClass("active"))}dispose(){_jquery.default.removeData(this._element,"bs.button"),this._element=null}static _jQueryInterface(config,avoidTriggerChange){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data("bs.button");data||(data=new Button(this),$element.data("bs.button",data)),data.shouldAvoidTriggerChange=avoidTriggerChange,"toggle"===config&&data[config]()}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-toggle^="button"]',(event=>{let button=event.target;const initialButton=button;if((0,_jquery.default)(button).hasClass("btn")||(button=(0,_jquery.default)(button).closest(".btn")[0]),!button||button.hasAttribute("disabled")||button.classList.contains("disabled"))event.preventDefault();else{const inputBtn=button.querySelector('input:not([type="hidden"])');if(inputBtn&&(inputBtn.hasAttribute("disabled")||inputBtn.classList.contains("disabled")))return void event.preventDefault();"INPUT"!==initialButton.tagName&&"LABEL"===button.tagName||Button._jQueryInterface.call((0,_jquery.default)(button),"toggle","INPUT"===initialButton.tagName)}})).on(EVENT_FOCUS_BLUR_DATA_API,'[data-toggle^="button"]',(event=>{const button=(0,_jquery.default)(event.target).closest(".btn")[0];(0,_jquery.default)(button).toggleClass("focus",/^focus(in)?$/.test(event.type))})),(0,_jquery.default)(window).on(EVENT_LOAD_DATA_API,(()=>{let buttons=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn'));for(let i=0,len=buttons.length;i<len;i++){const button=buttons[i],input=button.querySelector('input:not([type="hidden"])');input.checked||input.hasAttribute("checked")?button.classList.add("active"):button.classList.remove("active")}buttons=[].slice.call(document.querySelectorAll('[data-toggle="button"]'));for(let i=0,len=buttons.length;i<len;i++){const button=buttons[i];"true"===button.getAttribute("aria-pressed")?button.classList.add("active"):button.classList.remove("active")}})),_jquery.default.fn[NAME]=Button._jQueryInterface,_jquery.default.fn[NAME].Constructor=Button,_jquery.default.fn[NAME].noConflict=()=>(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Button._jQueryInterface);var _default=Button;return _exports.default=_default,_exports.default})); //# sourceMappingURL=button.min.js.map boost/amd/build/bootstrap/tab.min.js 0000604 00000011173 15062070724 0013437 0 ustar 00 define("theme_boost/bootstrap/tab",["exports","jquery","./util"],(function(_exports,_jquery,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_util=_interopRequireDefault(_util);const EVENT_KEY=".".concat("bs.tab"),JQUERY_NO_CONFLICT=_jquery.default.fn.tab,EVENT_HIDE="hide".concat(EVENT_KEY),EVENT_HIDDEN="hidden".concat(EVENT_KEY),EVENT_SHOW="show".concat(EVENT_KEY),EVENT_SHOWN="shown".concat(EVENT_KEY),EVENT_CLICK_DATA_API="click".concat(EVENT_KEY).concat(".data-api");class Tab{constructor(element){this._element=element}static get VERSION(){return"4.6.2"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&(0,_jquery.default)(this._element).hasClass("active")||(0,_jquery.default)(this._element).hasClass("disabled")||this._element.hasAttribute("disabled"))return;let target,previous;const listElement=(0,_jquery.default)(this._element).closest(".nav, .list-group")[0],selector=_util.default.getSelectorFromElement(this._element);if(listElement){const itemSelector="UL"===listElement.nodeName||"OL"===listElement.nodeName?"> li > .active":".active";previous=_jquery.default.makeArray((0,_jquery.default)(listElement).find(itemSelector)),previous=previous[previous.length-1]}const hideEvent=_jquery.default.Event(EVENT_HIDE,{relatedTarget:this._element}),showEvent=_jquery.default.Event(EVENT_SHOW,{relatedTarget:previous});if(previous&&(0,_jquery.default)(previous).trigger(hideEvent),(0,_jquery.default)(this._element).trigger(showEvent),showEvent.isDefaultPrevented()||hideEvent.isDefaultPrevented())return;selector&&(target=document.querySelector(selector)),this._activate(this._element,listElement);const complete=()=>{const hiddenEvent=_jquery.default.Event(EVENT_HIDDEN,{relatedTarget:this._element}),shownEvent=_jquery.default.Event(EVENT_SHOWN,{relatedTarget:previous});(0,_jquery.default)(previous).trigger(hiddenEvent),(0,_jquery.default)(this._element).trigger(shownEvent)};target?this._activate(target,target.parentNode,complete):complete()}dispose(){_jquery.default.removeData(this._element,"bs.tab"),this._element=null}_activate(element,container,callback){const active=(!container||"UL"!==container.nodeName&&"OL"!==container.nodeName?(0,_jquery.default)(container).children(".active"):(0,_jquery.default)(container).find("> li > .active"))[0],isTransitioning=callback&&active&&(0,_jquery.default)(active).hasClass("fade"),complete=()=>this._transitionComplete(element,active,callback);if(active&&isTransitioning){const transitionDuration=_util.default.getTransitionDurationFromElement(active);(0,_jquery.default)(active).removeClass("show").one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}_transitionComplete(element,active,callback){if(active){(0,_jquery.default)(active).removeClass("active");const dropdownChild=(0,_jquery.default)(active.parentNode).find("> .dropdown-menu .active")[0];dropdownChild&&(0,_jquery.default)(dropdownChild).removeClass("active"),"tab"===active.getAttribute("role")&&active.setAttribute("aria-selected",!1)}(0,_jquery.default)(element).addClass("active"),"tab"===element.getAttribute("role")&&element.setAttribute("aria-selected",!0),_util.default.reflow(element),element.classList.contains("fade")&&element.classList.add("show");let parent=element.parentNode;if(parent&&"LI"===parent.nodeName&&(parent=parent.parentNode),parent&&(0,_jquery.default)(parent).hasClass("dropdown-menu")){const dropdownElement=(0,_jquery.default)(element).closest(".dropdown")[0];if(dropdownElement){const dropdownToggleList=[].slice.call(dropdownElement.querySelectorAll(".dropdown-toggle"));(0,_jquery.default)(dropdownToggleList).addClass("active")}element.setAttribute("aria-expanded",!0)}callback&&callback()}static _jQueryInterface(config){return this.each((function(){const $this=(0,_jquery.default)(this);let data=$this.data("bs.tab");if(data||(data=new Tab(this),$this.data("bs.tab",data)),"string"==typeof config){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}(0,_jquery.default)(document).on(EVENT_CLICK_DATA_API,'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(event){event.preventDefault(),Tab._jQueryInterface.call((0,_jquery.default)(this),"show")})),_jquery.default.fn.tab=Tab._jQueryInterface,_jquery.default.fn.tab.Constructor=Tab,_jquery.default.fn.tab.noConflict=()=>(_jquery.default.fn.tab=JQUERY_NO_CONFLICT,Tab._jQueryInterface);var _default=Tab;return _exports.default=_default,_exports.default})); //# sourceMappingURL=tab.min.js.map boost/amd/build/bootstrap/collapse.min.js.map 0000604 00000036636 15062070724 0015262 0 ustar 00 {"version":3,"file":"collapse.min.js","sources":["../../src/bootstrap/collapse.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): collapse.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'collapse'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.collapse'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_COLLAPSE = 'collapse'\nconst CLASS_NAME_COLLAPSING = 'collapsing'\nconst CLASS_NAME_COLLAPSED = 'collapsed'\n\nconst DIMENSION_WIDTH = 'width'\nconst DIMENSION_HEIGHT = 'height'\n\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_ACTIVES = '.show, .collapsing'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"collapse\"]'\n\nconst Default = {\n toggle: true,\n parent: ''\n}\n\nconst DefaultType = {\n toggle: 'boolean',\n parent: '(string|element)'\n}\n\n/**\n * Class definition\n */\n\nclass Collapse {\n constructor(element, config) {\n this._isTransitioning = false\n this._element = element\n this._config = this._getConfig(config)\n this._triggerArray = [].slice.call(document.querySelectorAll(\n `[data-toggle=\"collapse\"][href=\"#${element.id}\"],` +\n `[data-toggle=\"collapse\"][data-target=\"#${element.id}\"]`\n ))\n\n const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = toggleList.length; i < len; i++) {\n const elem = toggleList[i]\n const selector = Util.getSelectorFromElement(elem)\n const filterElement = [].slice.call(document.querySelectorAll(selector))\n .filter(foundElem => foundElem === element)\n\n if (selector !== null && filterElement.length > 0) {\n this._selector = selector\n this._triggerArray.push(elem)\n }\n }\n\n this._parent = this._config.parent ? this._getParent() : null\n\n if (!this._config.parent) {\n this._addAriaAndCollapsedClass(this._element, this._triggerArray)\n }\n\n if (this._config.toggle) {\n this.toggle()\n }\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n toggle() {\n if ($(this._element).hasClass(CLASS_NAME_SHOW)) {\n this.hide()\n } else {\n this.show()\n }\n }\n\n show() {\n if (this._isTransitioning ||\n $(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n let actives\n let activesData\n\n if (this._parent) {\n actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES))\n .filter(elem => {\n if (typeof this._config.parent === 'string') {\n return elem.getAttribute('data-parent') === this._config.parent\n }\n\n return elem.classList.contains(CLASS_NAME_COLLAPSE)\n })\n\n if (actives.length === 0) {\n actives = null\n }\n }\n\n if (actives) {\n activesData = $(actives).not(this._selector).data(DATA_KEY)\n if (activesData && activesData._isTransitioning) {\n return\n }\n }\n\n const startEvent = $.Event(EVENT_SHOW)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n if (actives) {\n Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide')\n if (!activesData) {\n $(actives).data(DATA_KEY, null)\n }\n }\n\n const dimension = this._getDimension()\n\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSE)\n .addClass(CLASS_NAME_COLLAPSING)\n\n this._element.style[dimension] = 0\n\n if (this._triggerArray.length) {\n $(this._triggerArray)\n .removeClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', true)\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n this._element.style[dimension] = ''\n\n this.setTransitioning(false)\n\n $(this._element).trigger(EVENT_SHOWN)\n }\n\n const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1)\n const scrollSize = `scroll${capitalizedDimension}`\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n\n this._element.style[dimension] = `${this._element[scrollSize]}px`\n }\n\n hide() {\n if (this._isTransitioning ||\n !$(this._element).hasClass(CLASS_NAME_SHOW)) {\n return\n }\n\n const startEvent = $.Event(EVENT_HIDE)\n $(this._element).trigger(startEvent)\n if (startEvent.isDefaultPrevented()) {\n return\n }\n\n const dimension = this._getDimension()\n\n this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`\n\n Util.reflow(this._element)\n\n $(this._element)\n .addClass(CLASS_NAME_COLLAPSING)\n .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`)\n\n const triggerArrayLength = this._triggerArray.length\n if (triggerArrayLength > 0) {\n for (let i = 0; i < triggerArrayLength; i++) {\n const trigger = this._triggerArray[i]\n const selector = Util.getSelectorFromElement(trigger)\n\n if (selector !== null) {\n const $elem = $([].slice.call(document.querySelectorAll(selector)))\n if (!$elem.hasClass(CLASS_NAME_SHOW)) {\n $(trigger).addClass(CLASS_NAME_COLLAPSED)\n .attr('aria-expanded', false)\n }\n }\n }\n }\n\n this.setTransitioning(true)\n\n const complete = () => {\n this.setTransitioning(false)\n $(this._element)\n .removeClass(CLASS_NAME_COLLAPSING)\n .addClass(CLASS_NAME_COLLAPSE)\n .trigger(EVENT_HIDDEN)\n }\n\n this._element.style[dimension] = ''\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, complete)\n .emulateTransitionEnd(transitionDuration)\n }\n\n setTransitioning(isTransitioning) {\n this._isTransitioning = isTransitioning\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._parent = null\n this._element = null\n this._triggerArray = null\n this._isTransitioning = null\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n config.toggle = Boolean(config.toggle) // Coerce string values\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _getDimension() {\n const hasWidth = $(this._element).hasClass(DIMENSION_WIDTH)\n return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT\n }\n\n _getParent() {\n let parent\n\n if (Util.isElement(this._config.parent)) {\n parent = this._config.parent\n\n // It's a jQuery object\n if (typeof this._config.parent.jquery !== 'undefined') {\n parent = this._config.parent[0]\n }\n } else {\n parent = document.querySelector(this._config.parent)\n }\n\n const selector = `[data-toggle=\"collapse\"][data-parent=\"${this._config.parent}\"]`\n const children = [].slice.call(parent.querySelectorAll(selector))\n\n $(children).each((i, element) => {\n this._addAriaAndCollapsedClass(\n Collapse._getTargetFromElement(element),\n [element]\n )\n })\n\n return parent\n }\n\n _addAriaAndCollapsedClass(element, triggerArray) {\n const isOpen = $(element).hasClass(CLASS_NAME_SHOW)\n\n if (triggerArray.length) {\n $(triggerArray)\n .toggleClass(CLASS_NAME_COLLAPSED, !isOpen)\n .attr('aria-expanded', isOpen)\n }\n }\n\n // Static\n static _getTargetFromElement(element) {\n const selector = Util.getSelectorFromElement(element)\n return selector ? document.querySelector(selector) : null\n }\n\n static _jQueryInterface(config) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n const _config = {\n ...Default,\n ...$element.data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {\n _config.toggle = false\n }\n\n if (!data) {\n data = new Collapse(this, _config)\n $element.data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n if (event.currentTarget.tagName === 'A') {\n event.preventDefault()\n }\n\n const $trigger = $(this)\n const selector = Util.getSelectorFromElement(this)\n const selectors = [].slice.call(document.querySelectorAll(selector))\n\n $(selectors).each(function () {\n const $target = $(this)\n const data = $target.data(DATA_KEY)\n const config = data ? 'toggle' : $trigger.data()\n Collapse._jQueryInterface.call($target, config)\n })\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Collapse._jQueryInterface\n$.fn[NAME].Constructor = Collapse\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Collapse._jQueryInterface\n}\n\nexport default Collapse\n"],"names":["NAME","DATA_KEY","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_SHOW","EVENT_SHOWN","EVENT_HIDE","EVENT_HIDDEN","EVENT_CLICK_DATA_API","Default","toggle","parent","DefaultType","Collapse","constructor","element","config","_isTransitioning","_element","_config","this","_getConfig","_triggerArray","slice","call","document","querySelectorAll","id","toggleList","i","len","length","elem","selector","Util","getSelectorFromElement","filterElement","filter","foundElem","_selector","push","_parent","_getParent","_addAriaAndCollapsedClass","VERSION","hasClass","hide","show","actives","activesData","getAttribute","classList","contains","not","data","startEvent","Event","trigger","isDefaultPrevented","_jQueryInterface","dimension","_getDimension","removeClass","addClass","style","attr","setTransitioning","capitalizedDimension","toUpperCase","scrollSize","transitionDuration","getTransitionDurationFromElement","one","TRANSITION_END","emulateTransitionEnd","getBoundingClientRect","reflow","triggerArrayLength","isTransitioning","dispose","removeData","Boolean","typeCheckConfig","isElement","jquery","querySelector","children","each","_getTargetFromElement","triggerArray","isOpen","toggleClass","$element","test","TypeError","on","event","currentTarget","tagName","preventDefault","$trigger","selectors","$target","Constructor","noConflict"],"mappings":"4VAcMA,KAAO,WAEPC,SAAW,cACXC,qBAAgBD,UAEhBE,mBAAqBC,gBAAEC,GAAGL,MAU1BM,yBAAoBJ,WACpBK,2BAAsBL,WACtBM,yBAAoBN,WACpBO,6BAAwBP,WACxBQ,oCAA+BR,kBAfhB,aAoBfS,QAAU,CACdC,QAAQ,EACRC,OAAQ,IAGJC,YAAc,CAClBF,OAAQ,UACRC,OAAQ,0BAOJE,SACJC,YAAYC,QAASC,aACdC,kBAAmB,OACnBC,SAAWH,aACXI,QAAUC,KAAKC,WAAWL,aAC1BM,cAAgB,GAAGC,MAAMC,KAAKC,SAASC,iBAC1C,0CAAmCX,QAAQY,2DACDZ,QAAQY,iBAG9CC,WAAa,GAAGL,MAAMC,KAAKC,SAASC,iBA1BjB,iCA2BpB,IAAIG,EAAI,EAAGC,IAAMF,WAAWG,OAAQF,EAAIC,IAAKD,IAAK,OAC/CG,KAAOJ,WAAWC,GAClBI,SAAWC,cAAKC,uBAAuBH,MACvCI,cAAgB,GAAGb,MAAMC,KAAKC,SAASC,iBAAiBO,WAC3DI,QAAOC,WAAaA,YAAcvB,UAEpB,OAAbkB,UAAqBG,cAAcL,OAAS,SACzCQ,UAAYN,cACZX,cAAckB,KAAKR,YAIvBS,QAAUrB,KAAKD,QAAQR,OAASS,KAAKsB,aAAe,KAEpDtB,KAAKD,QAAQR,aACXgC,0BAA0BvB,KAAKF,SAAUE,KAAKE,eAGjDF,KAAKD,QAAQT,aACVA,SAKEkC,2BAxEG,QA4EHnC,4BACFA,QAITC,UACM,mBAAEU,KAAKF,UAAU2B,SA5ED,aA6EbC,YAEAC,OAITA,UACM3B,KAAKH,mBACP,mBAAEG,KAAKF,UAAU2B,SArFC,mBAyFhBG,QACAC,eAEA7B,KAAKqB,UACPO,QAAU,GAAGzB,MAAMC,KAAKJ,KAAKqB,QAAQf,iBA/ElB,uBAgFhBW,QAAOL,MAC6B,iBAAxBZ,KAAKD,QAAQR,OACfqB,KAAKkB,aAAa,iBAAmB9B,KAAKD,QAAQR,OAGpDqB,KAAKmB,UAAUC,SAlGJ,cAqGC,IAAnBJ,QAAQjB,SACViB,QAAU,OAIVA,UACFC,aAAc,mBAAED,SAASK,IAAIjC,KAAKmB,WAAWe,KAAKvD,UAC9CkD,aAAeA,YAAYhC,+BAK3BsC,WAAarD,gBAAEsD,MAAMpD,mCACzBgB,KAAKF,UAAUuC,QAAQF,YACrBA,WAAWG,4BAIXV,UACFnC,SAAS8C,iBAAiBnC,MAAK,mBAAEwB,SAASK,IAAIjC,KAAKmB,WAAY,QAC1DU,iCACDD,SAASM,KAAKvD,SAAU,aAIxB6D,UAAYxC,KAAKyC,oCAErBzC,KAAKF,UACJ4C,YAjIqB,YAkIrBC,SAjIuB,mBAmIrB7C,SAAS8C,MAAMJ,WAAa,EAE7BxC,KAAKE,cAAcS,4BACnBX,KAAKE,eACJwC,YAtIoB,aAuIpBG,KAAK,iBAAiB,QAGtBC,kBAAiB,SAchBC,qBAAuBP,UAAU,GAAGQ,cAAgBR,UAAUrC,MAAM,GACpE8C,2BAAsBF,sBACtBG,mBAAqBpC,cAAKqC,iCAAiCnD,KAAKF,8BAEpEE,KAAKF,UACJsD,IAAItC,cAAKuC,gBAjBK,yBACbrD,KAAKF,UACJ4C,YA/IqB,cAgJrBC,mBAjJmB,uBADJ,cAoJb7C,SAAS8C,MAAMJ,WAAa,QAE5BM,kBAAiB,uBAEpB9C,KAAKF,UAAUuC,QAAQpD,gBASxBqE,qBAAqBJ,yBAEnBpD,SAAS8C,MAAMJ,qBAAgBxC,KAAKF,SAASmD,kBAGpDvB,UACM1B,KAAKH,oBACN,mBAAEG,KAAKF,UAAU2B,SAxKA,qBA4KdU,WAAarD,gBAAEsD,MAAMlD,mCACzBc,KAAKF,UAAUuC,QAAQF,YACrBA,WAAWG,kCAITE,UAAYxC,KAAKyC,qBAElB3C,SAAS8C,MAAMJ,qBAAgBxC,KAAKF,SAASyD,wBAAwBf,+BAErEgB,OAAOxD,KAAKF,8BAEfE,KAAKF,UACJ6C,SAvLuB,cAwLvBD,sBAzLqB,uBADJ,eA4Lde,mBAAqBzD,KAAKE,cAAcS,UAC1C8C,mBAAqB,MAClB,IAAIhD,EAAI,EAAGA,EAAIgD,mBAAoBhD,IAAK,OACrC4B,QAAUrC,KAAKE,cAAcO,GAC7BI,SAAWC,cAAKC,uBAAuBsB,YAE5B,OAAbxB,SAAmB,EACP,mBAAE,GAAGV,MAAMC,KAAKC,SAASC,iBAAiBO,YAC7CY,SApMG,6BAqMVY,SAASM,SAlMM,aAmMdE,KAAK,iBAAiB,SAM5BC,kBAAiB,QAUjBhD,SAAS8C,MAAMJ,WAAa,SAC3BU,mBAAqBpC,cAAKqC,iCAAiCnD,KAAKF,8BAEpEE,KAAKF,UACJsD,IAAItC,cAAKuC,gBAZK,UACVP,kBAAiB,uBACpB9C,KAAKF,UACJ4C,YA/MqB,cAgNrBC,SAjNmB,YAkNnBN,QAAQlD,iBAQVmE,qBAAqBJ,oBAG1BJ,iBAAiBY,sBACV7D,iBAAmB6D,gBAG1BC,0BACIC,WAAW5D,KAAKF,SAAUnB,eAEvBoB,QAAU,UACVsB,QAAU,UACVvB,SAAW,UACXI,cAAgB,UAChBL,iBAAmB,KAI1BI,WAAWL,eACTA,OAAS,IACJP,WACAO,SAEEN,OAASuE,QAAQjE,OAAON,sBAC1BwE,gBAAgBpF,KAAMkB,OAAQJ,aAC5BI,OAGT6C,uBACmB,mBAAEzC,KAAKF,UAAU2B,SAnPd,SAAA,QACC,SAsPvBH,iBACM/B,OAEAuB,cAAKiD,UAAU/D,KAAKD,QAAQR,SAC9BA,OAASS,KAAKD,QAAQR,YAGoB,IAA/BS,KAAKD,QAAQR,OAAOyE,SAC7BzE,OAASS,KAAKD,QAAQR,OAAO,KAG/BA,OAASc,SAAS4D,cAAcjE,KAAKD,QAAQR,cAGzCsB,yDAAoDb,KAAKD,QAAQR,aACjE2E,SAAW,GAAG/D,MAAMC,KAAKb,OAAOe,iBAAiBO,qCAErDqD,UAAUC,MAAK,CAAC1D,EAAGd,gBACd4B,0BACH9B,SAAS2E,sBAAsBzE,SAC/B,CAACA,aAIEJ,OAGTgC,0BAA0B5B,QAAS0E,oBAC3BC,QAAS,mBAAE3E,SAAS8B,SAxRN,QA0RhB4C,aAAa1D,4BACb0D,cACCE,YAzRoB,aAyReD,QACnCzB,KAAK,gBAAiByB,qCAKA3E,eACrBkB,SAAWC,cAAKC,uBAAuBpB,gBACtCkB,SAAWR,SAAS4D,cAAcpD,UAAY,6BAG/BjB,eACfI,KAAKmE,MAAK,iBACTK,UAAW,mBAAExE,UACfkC,KAAOsC,SAAStC,KAAKvD,gBACnBoB,QAAU,IACXV,WACAmF,SAAStC,UACU,iBAAXtC,QAAuBA,OAASA,OAAS,QAGjDsC,MAAQnC,QAAQT,QAA4B,iBAAXM,QAAuB,YAAY6E,KAAK7E,UAC5EG,QAAQT,QAAS,GAGd4C,OACHA,KAAO,IAAIzC,SAASO,KAAMD,SAC1ByE,SAAStC,KAAKvD,SAAUuD,OAGJ,iBAAXtC,OAAqB,SACF,IAAjBsC,KAAKtC,cACR,IAAI8E,qCAA8B9E,aAG1CsC,KAAKtC,mCAUXS,UAAUsE,GAAGvF,qBA1Tc,4BA0T8B,SAAUwF,OAE/B,MAAhCA,MAAMC,cAAcC,SACtBF,MAAMG,uBAGFC,UAAW,mBAAEhF,MACba,SAAWC,cAAKC,uBAAuBf,MACvCiF,UAAY,GAAG9E,MAAMC,KAAKC,SAASC,iBAAiBO,+BAExDoE,WAAWd,MAAK,iBACVe,SAAU,mBAAElF,MAEZJ,OADOsF,QAAQhD,KAAKvD,UACJ,SAAWqG,SAAS9C,OAC1CzC,SAAS8C,iBAAiBnC,KAAK8E,QAAStF,8BAQ1Cb,GAAGL,MAAQe,SAAS8C,iCACpBxD,GAAGL,MAAMyG,YAAc1F,yBACvBV,GAAGL,MAAM0G,WAAa,qBACpBrG,GAAGL,MAAQG,mBACNY,SAAS8C,+BAGH9C"} boost/amd/build/bootstrap/tooltip.min.js 0000604 00000032711 15062070724 0014364 0 ustar 00 define("theme_boost/bootstrap/tooltip",["exports","./tools/sanitizer","jquery","core/popper","./util"],(function(_exports,_sanitizer,_jquery,_popper,_util){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_popper=_interopRequireDefault(_popper),_util=_interopRequireDefault(_util);const NAME="tooltip",EVENT_KEY=".".concat("bs.tooltip"),JQUERY_NO_CONFLICT=_jquery.default.fn[NAME],BSCLS_PREFIX_REGEX=new RegExp("(^|\\s)".concat("bs-tooltip","\\S+"),"g"),DISALLOWED_ATTRIBUTES=["sanitize","whiteList","sanitizeFn"],AttachmentMap={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Default={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:_sanitizer.DefaultWhitelist,popperConfig:null},DefaultType={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Event={HIDE:"hide".concat(EVENT_KEY),HIDDEN:"hidden".concat(EVENT_KEY),SHOW:"show".concat(EVENT_KEY),SHOWN:"shown".concat(EVENT_KEY),INSERTED:"inserted".concat(EVENT_KEY),CLICK:"click".concat(EVENT_KEY),FOCUSIN:"focusin".concat(EVENT_KEY),FOCUSOUT:"focusout".concat(EVENT_KEY),MOUSEENTER:"mouseenter".concat(EVENT_KEY),MOUSELEAVE:"mouseleave".concat(EVENT_KEY)};class Tooltip{constructor(element,config){if(void 0===_popper.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=element,this.config=this._getConfig(config),this.tip=null,this._setListeners()}static get VERSION(){return"4.6.2"}static get Default(){return Default}static get NAME(){return NAME}static get DATA_KEY(){return"bs.tooltip"}static get Event(){return Event}static get EVENT_KEY(){return EVENT_KEY}static get DefaultType(){return DefaultType}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(event){if(this._isEnabled)if(event){const dataKey=this.constructor.DATA_KEY;let context=(0,_jquery.default)(event.currentTarget).data(dataKey);context||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),context._activeTrigger.click=!context._activeTrigger.click,context._isWithActiveTrigger()?context._enter(null,context):context._leave(null,context)}else{if((0,_jquery.default)(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),_jquery.default.removeData(this.element,this.constructor.DATA_KEY),(0,_jquery.default)(this.element).off(this.constructor.EVENT_KEY),(0,_jquery.default)(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&(0,_jquery.default)(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null}show(){if("none"===(0,_jquery.default)(this.element).css("display"))throw new Error("Please use show on visible elements");const showEvent=_jquery.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){(0,_jquery.default)(this.element).trigger(showEvent);const shadowRoot=_util.default.findShadowRoot(this.element),isInTheDom=_jquery.default.contains(null!==shadowRoot?shadowRoot:this.element.ownerDocument.documentElement,this.element);if(showEvent.isDefaultPrevented()||!isInTheDom)return;const tip=this.getTipElement(),tipId=_util.default.getUID(this.constructor.NAME);tip.setAttribute("id",tipId),this.element.setAttribute("aria-describedby",tipId),this.setContent(),this.config.animation&&(0,_jquery.default)(tip).addClass("fade");const placement="function"==typeof this.config.placement?this.config.placement.call(this,tip,this.element):this.config.placement,attachment=this._getAttachment(placement);this.addAttachmentClass(attachment);const container=this._getContainer();(0,_jquery.default)(tip).data(this.constructor.DATA_KEY,this),_jquery.default.contains(this.element.ownerDocument.documentElement,this.tip)||(0,_jquery.default)(tip).appendTo(container),(0,_jquery.default)(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new _popper.default(this.element,tip,this._getPopperConfig(attachment)),(0,_jquery.default)(tip).addClass("show"),(0,_jquery.default)(tip).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&(0,_jquery.default)(document.body).children().on("mouseover",null,_jquery.default.noop);const complete=()=>{this.config.animation&&this._fixTransition();const prevHoverState=this._hoverState;this._hoverState=null,(0,_jquery.default)(this.element).trigger(this.constructor.Event.SHOWN),"out"===prevHoverState&&this._leave(null,this)};if((0,_jquery.default)(this.tip).hasClass("fade")){const transitionDuration=_util.default.getTransitionDurationFromElement(this.tip);(0,_jquery.default)(this.tip).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete()}}hide(callback){const tip=this.getTipElement(),hideEvent=_jquery.default.Event(this.constructor.Event.HIDE),complete=()=>{"show"!==this._hoverState&&tip.parentNode&&tip.parentNode.removeChild(tip),this._cleanTipClass(),this.element.removeAttribute("aria-describedby"),(0,_jquery.default)(this.element).trigger(this.constructor.Event.HIDDEN),null!==this._popper&&this._popper.destroy(),callback&&callback()};if((0,_jquery.default)(this.element).trigger(hideEvent),!hideEvent.isDefaultPrevented()){if((0,_jquery.default)(tip).removeClass("show"),"ontouchstart"in document.documentElement&&(0,_jquery.default)(document.body).children().off("mouseover",null,_jquery.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,(0,_jquery.default)(this.tip).hasClass("fade")){const transitionDuration=_util.default.getTransitionDurationFromElement(tip);(0,_jquery.default)(tip).one(_util.default.TRANSITION_END,complete).emulateTransitionEnd(transitionDuration)}else complete();this._hoverState=""}}update(){null!==this._popper&&this._popper.scheduleUpdate()}isWithContent(){return Boolean(this.getTitle())}addAttachmentClass(attachment){(0,_jquery.default)(this.getTipElement()).addClass("".concat("bs-tooltip","-").concat(attachment))}getTipElement(){return this.tip=this.tip||(0,_jquery.default)(this.config.template)[0],this.tip}setContent(){const tip=this.getTipElement();this.setElementContent((0,_jquery.default)(tip.querySelectorAll(".tooltip-inner")),this.getTitle()),(0,_jquery.default)(tip).removeClass("".concat("fade"," ").concat("show"))}setElementContent($element,content){"object"!=typeof content||!content.nodeType&&!content.jquery?this.config.html?(this.config.sanitize&&(content=(0,_sanitizer.sanitizeHtml)(content,this.config.whiteList,this.config.sanitizeFn)),$element.html(content)):$element.text(content):this.config.html?(0,_jquery.default)(content).parent().is($element)||$element.empty().append(content):$element.text((0,_jquery.default)(content).text())}getTitle(){let title=this.element.getAttribute("data-original-title");return title||(title="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),title}_getPopperConfig(attachment){return{...{placement:attachment,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:data=>{data.originalPlacement!==data.placement&&this._handlePopperPlacementChange(data)},onUpdate:data=>this._handlePopperPlacementChange(data)},...this.config.popperConfig}}_getOffset(){const offset={};return"function"==typeof this.config.offset?offset.fn=data=>(data.offsets={...data.offsets,...this.config.offset(data.offsets,this.element)},data):offset.offset=this.config.offset,offset}_getContainer(){return!1===this.config.container?document.body:_util.default.isElement(this.config.container)?(0,_jquery.default)(this.config.container):(0,_jquery.default)(document).find(this.config.container)}_getAttachment(placement){return AttachmentMap[placement.toUpperCase()]}_setListeners(){this.config.trigger.split(" ").forEach((trigger=>{if("click"===trigger)(0,_jquery.default)(this.element).on(this.constructor.Event.CLICK,this.config.selector,(event=>this.toggle(event)));else if("manual"!==trigger){const eventIn="hover"===trigger?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,eventOut="hover"===trigger?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;(0,_jquery.default)(this.element).on(eventIn,this.config.selector,(event=>this._enter(event))).on(eventOut,this.config.selector,(event=>this._leave(event)))}})),this._hideModalHandler=()=>{this.element&&this.hide()},(0,_jquery.default)(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config={...this.config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const titleType=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==titleType)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))}_enter(event,context){const dataKey=this.constructor.DATA_KEY;(context=context||(0,_jquery.default)(event.currentTarget).data(dataKey))||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),event&&(context._activeTrigger["focusin"===event.type?"focus":"hover"]=!0),(0,_jquery.default)(context.getTipElement()).hasClass("show")||"show"===context._hoverState?context._hoverState="show":(clearTimeout(context._timeout),context._hoverState="show",context.config.delay&&context.config.delay.show?context._timeout=setTimeout((()=>{"show"===context._hoverState&&context.show()}),context.config.delay.show):context.show())}_leave(event,context){const dataKey=this.constructor.DATA_KEY;(context=context||(0,_jquery.default)(event.currentTarget).data(dataKey))||(context=new this.constructor(event.currentTarget,this._getDelegateConfig()),(0,_jquery.default)(event.currentTarget).data(dataKey,context)),event&&(context._activeTrigger["focusout"===event.type?"focus":"hover"]=!1),context._isWithActiveTrigger()||(clearTimeout(context._timeout),context._hoverState="out",context.config.delay&&context.config.delay.hide?context._timeout=setTimeout((()=>{"out"===context._hoverState&&context.hide()}),context.config.delay.hide):context.hide())}_isWithActiveTrigger(){for(const trigger in this._activeTrigger)if(this._activeTrigger[trigger])return!0;return!1}_getConfig(config){const dataAttributes=(0,_jquery.default)(this.element).data();return Object.keys(dataAttributes).forEach((dataAttr=>{-1!==DISALLOWED_ATTRIBUTES.indexOf(dataAttr)&&delete dataAttributes[dataAttr]})),"number"==typeof(config={...this.constructor.Default,...dataAttributes,..."object"==typeof config&&config?config:{}}).delay&&(config.delay={show:config.delay,hide:config.delay}),"number"==typeof config.title&&(config.title=config.title.toString()),"number"==typeof config.content&&(config.content=config.content.toString()),_util.default.typeCheckConfig(NAME,config,this.constructor.DefaultType),config.sanitize&&(config.template=(0,_sanitizer.sanitizeHtml)(config.template,config.whiteList,config.sanitizeFn)),config}_getDelegateConfig(){const config={};if(this.config)for(const key in this.config)this.constructor.Default[key]!==this.config[key]&&(config[key]=this.config[key]);return config}_cleanTipClass(){const $tip=(0,_jquery.default)(this.getTipElement()),tabClass=$tip.attr("class").match(BSCLS_PREFIX_REGEX);null!==tabClass&&tabClass.length&&$tip.removeClass(tabClass.join(""))}_handlePopperPlacementChange(popperData){this.tip=popperData.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(popperData.placement))}_fixTransition(){const tip=this.getTipElement(),initConfigAnimation=this.config.animation;null===tip.getAttribute("x-placement")&&((0,_jquery.default)(tip).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=initConfigAnimation)}static _jQueryInterface(config){return this.each((function(){const $element=(0,_jquery.default)(this);let data=$element.data("bs.tooltip");const _config="object"==typeof config&&config;if((data||!/dispose|hide/.test(config))&&(data||(data=new Tooltip(this,_config),$element.data("bs.tooltip",data)),"string"==typeof config)){if(void 0===data[config])throw new TypeError('No method named "'.concat(config,'"'));data[config]()}}))}}_jquery.default.fn[NAME]=Tooltip._jQueryInterface,_jquery.default.fn[NAME].Constructor=Tooltip,_jquery.default.fn[NAME].noConflict=()=>(_jquery.default.fn[NAME]=JQUERY_NO_CONFLICT,Tooltip._jQueryInterface);var _default=Tooltip;return _exports.default=_default,_exports.default})); //# sourceMappingURL=tooltip.min.js.map boost/amd/build/bootstrap/modal.min.js.map 0000604 00000064453 15062070724 0014552 0 ustar 00 {"version":3,"file":"modal.min.js","sources":["../../src/bootstrap/modal.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): modal.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\nimport Util from './util'\n\n/**\n * Constants\n */\n\nconst NAME = 'modal'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.modal'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\nconst ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key\n\nconst CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'\nconst CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'\nconst CLASS_NAME_BACKDROP = 'modal-backdrop'\nconst CLASS_NAME_OPEN = 'modal-open'\nconst CLASS_NAME_FADE = 'fade'\nconst CLASS_NAME_SHOW = 'show'\nconst CLASS_NAME_STATIC = 'modal-static'\n\nconst EVENT_HIDE = `hide${EVENT_KEY}`\nconst EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`\nconst EVENT_HIDDEN = `hidden${EVENT_KEY}`\nconst EVENT_SHOW = `show${EVENT_KEY}`\nconst EVENT_SHOWN = `shown${EVENT_KEY}`\nconst EVENT_FOCUSIN = `focusin${EVENT_KEY}`\nconst EVENT_RESIZE = `resize${EVENT_KEY}`\nconst EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`\nconst EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`\nconst EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DIALOG = '.modal-dialog'\nconst SELECTOR_MODAL_BODY = '.modal-body'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"modal\"]'\nconst SELECTOR_DATA_DISMISS = '[data-dismiss=\"modal\"]'\nconst SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'\nconst SELECTOR_STICKY_CONTENT = '.sticky-top'\n\nconst Default = {\n backdrop: true,\n keyboard: true,\n focus: true,\n show: true\n}\n\nconst DefaultType = {\n backdrop: '(boolean|string)',\n keyboard: 'boolean',\n focus: 'boolean',\n show: 'boolean'\n}\n\n/**\n * Class definition\n */\n\nclass Modal {\n constructor(element, config) {\n this._config = this._getConfig(config)\n this._element = element\n this._dialog = element.querySelector(SELECTOR_DIALOG)\n this._backdrop = null\n this._isShown = false\n this._isBodyOverflowing = false\n this._ignoreBackdropClick = false\n this._isTransitioning = false\n this._scrollbarWidth = 0\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n static get Default() {\n return Default\n }\n\n // Public\n toggle(relatedTarget) {\n return this._isShown ? this.hide() : this.show(relatedTarget)\n }\n\n show(relatedTarget) {\n if (this._isShown || this._isTransitioning) {\n return\n }\n\n const showEvent = $.Event(EVENT_SHOW, {\n relatedTarget\n })\n\n $(this._element).trigger(showEvent)\n\n if (showEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = true\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n this._isTransitioning = true\n }\n\n this._checkScrollbar()\n this._setScrollbar()\n\n this._adjustDialog()\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(this._element).on(\n EVENT_CLICK_DISMISS,\n SELECTOR_DATA_DISMISS,\n event => this.hide(event)\n )\n\n $(this._dialog).on(EVENT_MOUSEDOWN_DISMISS, () => {\n $(this._element).one(EVENT_MOUSEUP_DISMISS, event => {\n if ($(event.target).is(this._element)) {\n this._ignoreBackdropClick = true\n }\n })\n })\n\n this._showBackdrop(() => this._showElement(relatedTarget))\n }\n\n hide(event) {\n if (event) {\n event.preventDefault()\n }\n\n if (!this._isShown || this._isTransitioning) {\n return\n }\n\n const hideEvent = $.Event(EVENT_HIDE)\n\n $(this._element).trigger(hideEvent)\n\n if (!this._isShown || hideEvent.isDefaultPrevented()) {\n return\n }\n\n this._isShown = false\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n\n if (transition) {\n this._isTransitioning = true\n }\n\n this._setEscapeEvent()\n this._setResizeEvent()\n\n $(document).off(EVENT_FOCUSIN)\n\n $(this._element).removeClass(CLASS_NAME_SHOW)\n\n $(this._element).off(EVENT_CLICK_DISMISS)\n $(this._dialog).off(EVENT_MOUSEDOWN_DISMISS)\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._element)\n\n $(this._element)\n .one(Util.TRANSITION_END, event => this._hideModal(event))\n .emulateTransitionEnd(transitionDuration)\n } else {\n this._hideModal()\n }\n }\n\n dispose() {\n [window, this._element, this._dialog]\n .forEach(htmlElement => $(htmlElement).off(EVENT_KEY))\n\n /**\n * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`\n * Do not move `document` in `htmlElements` array\n * It will remove `EVENT_CLICK_DATA_API` event that should remain\n */\n $(document).off(EVENT_FOCUSIN)\n\n $.removeData(this._element, DATA_KEY)\n\n this._config = null\n this._element = null\n this._dialog = null\n this._backdrop = null\n this._isShown = null\n this._isBodyOverflowing = null\n this._ignoreBackdropClick = null\n this._isTransitioning = null\n this._scrollbarWidth = null\n }\n\n handleUpdate() {\n this._adjustDialog()\n }\n\n // Private\n _getConfig(config) {\n config = {\n ...Default,\n ...config\n }\n Util.typeCheckConfig(NAME, config, DefaultType)\n return config\n }\n\n _triggerBackdropTransition() {\n const hideEventPrevented = $.Event(EVENT_HIDE_PREVENTED)\n\n $(this._element).trigger(hideEventPrevented)\n if (hideEventPrevented.isDefaultPrevented()) {\n return\n }\n\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!isModalOverflowing) {\n this._element.style.overflowY = 'hidden'\n }\n\n this._element.classList.add(CLASS_NAME_STATIC)\n\n const modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n $(this._element).off(Util.TRANSITION_END)\n\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.classList.remove(CLASS_NAME_STATIC)\n if (!isModalOverflowing) {\n $(this._element).one(Util.TRANSITION_END, () => {\n this._element.style.overflowY = ''\n })\n .emulateTransitionEnd(this._element, modalTransitionDuration)\n }\n })\n .emulateTransitionEnd(modalTransitionDuration)\n this._element.focus()\n }\n\n _showElement(relatedTarget) {\n const transition = $(this._element).hasClass(CLASS_NAME_FADE)\n const modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null\n\n if (!this._element.parentNode ||\n this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n // Don't move modal's DOM position\n document.body.appendChild(this._element)\n }\n\n this._element.style.display = 'block'\n this._element.removeAttribute('aria-hidden')\n this._element.setAttribute('aria-modal', true)\n this._element.setAttribute('role', 'dialog')\n\n if ($(this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {\n modalBody.scrollTop = 0\n } else {\n this._element.scrollTop = 0\n }\n\n if (transition) {\n Util.reflow(this._element)\n }\n\n $(this._element).addClass(CLASS_NAME_SHOW)\n\n if (this._config.focus) {\n this._enforceFocus()\n }\n\n const shownEvent = $.Event(EVENT_SHOWN, {\n relatedTarget\n })\n\n const transitionComplete = () => {\n if (this._config.focus) {\n this._element.focus()\n }\n\n this._isTransitioning = false\n $(this._element).trigger(shownEvent)\n }\n\n if (transition) {\n const transitionDuration = Util.getTransitionDurationFromElement(this._dialog)\n\n $(this._dialog)\n .one(Util.TRANSITION_END, transitionComplete)\n .emulateTransitionEnd(transitionDuration)\n } else {\n transitionComplete()\n }\n }\n\n _enforceFocus() {\n $(document)\n .off(EVENT_FOCUSIN) // Guard against infinite focus loop\n .on(EVENT_FOCUSIN, event => {\n if (document !== event.target &&\n this._element !== event.target &&\n $(this._element).has(event.target).length === 0) {\n this._element.focus()\n }\n })\n }\n\n _setEscapeEvent() {\n if (this._isShown) {\n $(this._element).on(EVENT_KEYDOWN_DISMISS, event => {\n if (this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n event.preventDefault()\n this.hide()\n } else if (!this._config.keyboard && event.which === ESCAPE_KEYCODE) {\n this._triggerBackdropTransition()\n }\n })\n } else if (!this._isShown) {\n $(this._element).off(EVENT_KEYDOWN_DISMISS)\n }\n }\n\n _setResizeEvent() {\n if (this._isShown) {\n $(window).on(EVENT_RESIZE, event => this.handleUpdate(event))\n } else {\n $(window).off(EVENT_RESIZE)\n }\n }\n\n _hideModal() {\n this._element.style.display = 'none'\n this._element.setAttribute('aria-hidden', true)\n this._element.removeAttribute('aria-modal')\n this._element.removeAttribute('role')\n this._isTransitioning = false\n this._showBackdrop(() => {\n $(document.body).removeClass(CLASS_NAME_OPEN)\n this._resetAdjustments()\n this._resetScrollbar()\n $(this._element).trigger(EVENT_HIDDEN)\n })\n }\n\n _removeBackdrop() {\n if (this._backdrop) {\n $(this._backdrop).remove()\n this._backdrop = null\n }\n }\n\n _showBackdrop(callback) {\n const animate = $(this._element).hasClass(CLASS_NAME_FADE) ?\n CLASS_NAME_FADE : ''\n\n if (this._isShown && this._config.backdrop) {\n this._backdrop = document.createElement('div')\n this._backdrop.className = CLASS_NAME_BACKDROP\n\n if (animate) {\n this._backdrop.classList.add(animate)\n }\n\n $(this._backdrop).appendTo(document.body)\n\n $(this._element).on(EVENT_CLICK_DISMISS, event => {\n if (this._ignoreBackdropClick) {\n this._ignoreBackdropClick = false\n return\n }\n\n if (event.target !== event.currentTarget) {\n return\n }\n\n if (this._config.backdrop === 'static') {\n this._triggerBackdropTransition()\n } else {\n this.hide()\n }\n })\n\n if (animate) {\n Util.reflow(this._backdrop)\n }\n\n $(this._backdrop).addClass(CLASS_NAME_SHOW)\n\n if (!callback) {\n return\n }\n\n if (!animate) {\n callback()\n return\n }\n\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callback)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else if (!this._isShown && this._backdrop) {\n $(this._backdrop).removeClass(CLASS_NAME_SHOW)\n\n const callbackRemove = () => {\n this._removeBackdrop()\n if (callback) {\n callback()\n }\n }\n\n if ($(this._element).hasClass(CLASS_NAME_FADE)) {\n const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop)\n\n $(this._backdrop)\n .one(Util.TRANSITION_END, callbackRemove)\n .emulateTransitionEnd(backdropTransitionDuration)\n } else {\n callbackRemove()\n }\n } else if (callback) {\n callback()\n }\n }\n\n // ----------------------------------------------------------------------\n // the following methods are used to handle overflowing modals\n // todo (fat): these should probably be refactored out of modal.js\n // ----------------------------------------------------------------------\n\n _adjustDialog() {\n const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight\n\n if (!this._isBodyOverflowing && isModalOverflowing) {\n this._element.style.paddingLeft = `${this._scrollbarWidth}px`\n }\n\n if (this._isBodyOverflowing && !isModalOverflowing) {\n this._element.style.paddingRight = `${this._scrollbarWidth}px`\n }\n }\n\n _resetAdjustments() {\n this._element.style.paddingLeft = ''\n this._element.style.paddingRight = ''\n }\n\n _checkScrollbar() {\n const rect = document.body.getBoundingClientRect()\n this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth\n this._scrollbarWidth = this._getScrollbarWidth()\n }\n\n _setScrollbar() {\n if (this._isBodyOverflowing) {\n // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n const stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT))\n\n // Adjust fixed content padding\n $(fixedContent).each((index, element) => {\n const actualPadding = element.style.paddingRight\n const calculatedPadding = $(element).css('padding-right')\n $(element)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n })\n\n // Adjust sticky content margin\n $(stickyContent).each((index, element) => {\n const actualMargin = element.style.marginRight\n const calculatedMargin = $(element).css('margin-right')\n $(element)\n .data('margin-right', actualMargin)\n .css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`)\n })\n\n // Adjust body padding\n const actualPadding = document.body.style.paddingRight\n const calculatedPadding = $(document.body).css('padding-right')\n $(document.body)\n .data('padding-right', actualPadding)\n .css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`)\n }\n\n $(document.body).addClass(CLASS_NAME_OPEN)\n }\n\n _resetScrollbar() {\n // Restore fixed content padding\n const fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT))\n $(fixedContent).each((index, element) => {\n const padding = $(element).data('padding-right')\n $(element).removeData('padding-right')\n element.style.paddingRight = padding ? padding : ''\n })\n\n // Restore sticky content\n const elements = [].slice.call(document.querySelectorAll(`${SELECTOR_STICKY_CONTENT}`))\n $(elements).each((index, element) => {\n const margin = $(element).data('margin-right')\n if (typeof margin !== 'undefined') {\n $(element).css('margin-right', margin).removeData('margin-right')\n }\n })\n\n // Restore body padding\n const padding = $(document.body).data('padding-right')\n $(document.body).removeData('padding-right')\n document.body.style.paddingRight = padding ? padding : ''\n }\n\n _getScrollbarWidth() { // thx d.walsh\n const scrollDiv = document.createElement('div')\n scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER\n document.body.appendChild(scrollDiv)\n const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth\n document.body.removeChild(scrollDiv)\n return scrollbarWidth\n }\n\n // Static\n static _jQueryInterface(config, relatedTarget) {\n return this.each(function () {\n let data = $(this).data(DATA_KEY)\n const _config = {\n ...Default,\n ...$(this).data(),\n ...(typeof config === 'object' && config ? config : {})\n }\n\n if (!data) {\n data = new Modal(this, _config)\n $(this).data(DATA_KEY, data)\n }\n\n if (typeof config === 'string') {\n if (typeof data[config] === 'undefined') {\n throw new TypeError(`No method named \"${config}\"`)\n }\n\n data[config](relatedTarget)\n } else if (_config.show) {\n data.show(relatedTarget)\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {\n let target\n const selector = Util.getSelectorFromElement(this)\n\n if (selector) {\n target = document.querySelector(selector)\n }\n\n const config = $(target).data(DATA_KEY) ?\n 'toggle' : {\n ...$(target).data(),\n ...$(this).data()\n }\n\n if (this.tagName === 'A' || this.tagName === 'AREA') {\n event.preventDefault()\n }\n\n const $target = $(target).one(EVENT_SHOW, showEvent => {\n if (showEvent.isDefaultPrevented()) {\n // Only register focus restorer if modal will actually get shown\n return\n }\n\n $target.one(EVENT_HIDDEN, () => {\n if ($(this).is(':visible')) {\n this.focus()\n }\n })\n })\n\n Modal._jQueryInterface.call($(target), config, this)\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Modal._jQueryInterface\n$.fn[NAME].Constructor = Modal\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Modal._jQueryInterface\n}\n\nexport default Modal\n"],"names":["NAME","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_HIDE","EVENT_HIDE_PREVENTED","EVENT_HIDDEN","EVENT_SHOW","EVENT_SHOWN","EVENT_FOCUSIN","EVENT_RESIZE","EVENT_CLICK_DISMISS","EVENT_KEYDOWN_DISMISS","EVENT_MOUSEUP_DISMISS","EVENT_MOUSEDOWN_DISMISS","EVENT_CLICK_DATA_API","Default","backdrop","keyboard","focus","show","DefaultType","Modal","constructor","element","config","_config","this","_getConfig","_element","_dialog","querySelector","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_isTransitioning","_scrollbarWidth","VERSION","toggle","relatedTarget","hide","showEvent","Event","trigger","isDefaultPrevented","hasClass","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","on","event","one","target","is","_showBackdrop","_showElement","preventDefault","hideEvent","transition","document","off","removeClass","transitionDuration","Util","getTransitionDurationFromElement","TRANSITION_END","_hideModal","emulateTransitionEnd","dispose","window","forEach","htmlElement","removeData","handleUpdate","typeCheckConfig","_triggerBackdropTransition","hideEventPrevented","isModalOverflowing","scrollHeight","documentElement","clientHeight","style","overflowY","classList","add","modalTransitionDuration","remove","modalBody","parentNode","nodeType","Node","ELEMENT_NODE","body","appendChild","display","removeAttribute","setAttribute","scrollTop","reflow","addClass","_enforceFocus","shownEvent","transitionComplete","has","length","which","_resetAdjustments","_resetScrollbar","_removeBackdrop","callback","animate","createElement","className","appendTo","currentTarget","backdropTransitionDuration","callbackRemove","paddingLeft","paddingRight","rect","getBoundingClientRect","Math","round","left","right","innerWidth","_getScrollbarWidth","fixedContent","slice","call","querySelectorAll","stickyContent","each","index","actualPadding","calculatedPadding","css","data","parseFloat","actualMargin","marginRight","calculatedMargin","padding","elements","margin","scrollDiv","scrollbarWidth","width","clientWidth","removeChild","TypeError","selector","getSelectorFromElement","tagName","$target","_jQueryInterface","Constructor","noConflict"],"mappings":"yVAcMA,KAAO,QAGPC,qBADW,YAGXC,mBAAqBC,gBAAEC,GAAF,MAWrBC,yBAAoBJ,WACpBK,4CAAuCL,WACvCM,6BAAwBN,WACxBO,yBAAoBP,WACpBQ,2BAAsBR,WACtBS,+BAA0BT,WAC1BU,6BAAwBV,WACxBW,2CAAsCX,WACtCY,+CAA0CZ,WAC1Ca,+CAA0Cb,WAC1Cc,mDAA8Cd,WAC9Ce,oCAA+Bf,kBAvBhB,aAgCfgB,QAAU,CACdC,UAAU,EACVC,UAAU,EACVC,OAAO,EACPC,MAAM,GAGFC,YAAc,CAClBJ,SAAU,mBACVC,SAAU,UACVC,MAAO,UACPC,KAAM,iBAOFE,MACJC,YAAYC,QAASC,aACdC,QAAUC,KAAKC,WAAWH,aAC1BI,SAAWL,aACXM,QAAUN,QAAQO,cA7BH,sBA8BfC,UAAY,UACZC,UAAW,OACXC,oBAAqB,OACrBC,sBAAuB,OACvBC,kBAAmB,OACnBC,gBAAkB,EAIdC,2BAnEG,QAuEHtB,4BACFA,QAITuB,OAAOC,sBACEb,KAAKM,SAAWN,KAAKc,OAASd,KAAKP,KAAKoB,eAGjDpB,KAAKoB,kBACCb,KAAKM,UAAYN,KAAKS,8BAIpBM,UAAYxC,gBAAEyC,MAAMpC,WAAY,CACpCiC,cAAAA,oCAGAb,KAAKE,UAAUe,QAAQF,WAErBA,UAAUG,4BAITZ,UAAW,GAEZ,mBAAEN,KAAKE,UAAUiB,SAtFD,eAuFbV,kBAAmB,QAGrBW,uBACAC,qBAEAC,qBAEAC,uBACAC,sCAEHxB,KAAKE,UAAUuB,GACfzC,oBA/EwB,0BAiFxB0C,OAAS1B,KAAKc,KAAKY,6BAGnB1B,KAAKG,SAASsB,GAAGtC,yBAAyB,yBACxCa,KAAKE,UAAUyB,IAAIzC,uBAAuBwC,SACtC,mBAAEA,MAAME,QAAQC,GAAG7B,KAAKE,iBACrBM,sBAAuB,cAK7BsB,eAAc,IAAM9B,KAAK+B,aAAalB,kBAG7CC,KAAKY,UACCA,OACFA,MAAMM,kBAGHhC,KAAKM,UAAYN,KAAKS,8BAIrBwB,UAAY1D,gBAAEyC,MAAMvC,mCAExBuB,KAAKE,UAAUe,QAAQgB,YAEpBjC,KAAKM,UAAY2B,UAAUf,iCAI3BZ,UAAW,QACV4B,YAAa,mBAAElC,KAAKE,UAAUiB,SArIhB,WAuIhBe,kBACGzB,kBAAmB,QAGrBc,uBACAC,sCAEHW,UAAUC,IAAItD,mCAEdkB,KAAKE,UAAUmC,YA/IG,4BAiJlBrC,KAAKE,UAAUkC,IAAIpD,yCACnBgB,KAAKG,SAASiC,IAAIjD,yBAEhB+C,WAAY,OACRI,mBAAqBC,cAAKC,iCAAiCxC,KAAKE,8BAEpEF,KAAKE,UACJyB,IAAIY,cAAKE,gBAAgBf,OAAS1B,KAAK0C,WAAWhB,SAClDiB,qBAAqBL,8BAEnBI,aAITE,WACGC,OAAQ7C,KAAKE,SAAUF,KAAKG,SAC1B2C,SAAQC,cAAe,mBAAEA,aAAaX,IAAI/D,iCAO3C8D,UAAUC,IAAItD,+BAEdkE,WAAWhD,KAAKE,SArLL,iBAuLRH,QAAU,UACVG,SAAW,UACXC,QAAU,UACVE,UAAY,UACZC,SAAW,UACXC,mBAAqB,UACrBC,qBAAuB,UACvBC,iBAAmB,UACnBC,gBAAkB,KAGzBuC,oBACO3B,gBAIPrB,WAAWH,eACTA,OAAS,IACJT,WACAS,sBAEAoD,gBAAgB9E,KAAM0B,OAAQJ,aAC5BI,OAGTqD,mCACQC,mBAAqB7E,gBAAEyC,MAAMtC,6CAEjCsB,KAAKE,UAAUe,QAAQmC,oBACrBA,mBAAmBlC,kCAIjBmC,mBAAqBrD,KAAKE,SAASoD,aAAenB,SAASoB,gBAAgBC,aAE5EH,0BACEnD,SAASuD,MAAMC,UAAY,eAG7BxD,SAASyD,UAAUC,IAlNF,sBAoNhBC,wBAA0BtB,cAAKC,iCAAiCxC,KAAKG,6BACzEH,KAAKE,UAAUkC,IAAIG,cAAKE,oCAExBzC,KAAKE,UAAUyB,IAAIY,cAAKE,gBAAgB,UACnCvC,SAASyD,UAAUG,OAxNJ,gBAyNfT,wCACDrD,KAAKE,UAAUyB,IAAIY,cAAKE,gBAAgB,UACnCvC,SAASuD,MAAMC,UAAY,MAE/Bf,qBAAqB3C,KAAKE,SAAU2D,4BAGxClB,qBAAqBkB,8BACnB3D,SAASV,QAGhBuC,aAAalB,qBACLqB,YAAa,mBAAElC,KAAKE,UAAUiB,SAvOhB,QAwOd4C,UAAY/D,KAAKG,QAAUH,KAAKG,QAAQC,cAtNtB,eAsN2D,KAE9EJ,KAAKE,SAAS8D,YACfhE,KAAKE,SAAS8D,WAAWC,WAAaC,KAAKC,cAE7ChC,SAASiC,KAAKC,YAAYrE,KAAKE,eAG5BA,SAASuD,MAAMa,QAAU,aACzBpE,SAASqE,gBAAgB,oBACzBrE,SAASsE,aAAa,cAAc,QACpCtE,SAASsE,aAAa,OAAQ,WAE/B,mBAAExE,KAAKG,SAASgB,SAzPM,4BAyP6B4C,UACrDA,UAAUU,UAAY,OAEjBvE,SAASuE,UAAY,EAGxBvC,0BACGwC,OAAO1E,KAAKE,8BAGjBF,KAAKE,UAAUyE,SA9PG,QAgQhB3E,KAAKD,QAAQP,YACVoF,sBAGDC,WAAatG,gBAAEyC,MAAMnC,YAAa,CACtCgC,cAAAA,gBAGIiE,mBAAqB,KACrB9E,KAAKD,QAAQP,YACVU,SAASV,aAGXiB,kBAAmB,sBACtBT,KAAKE,UAAUe,QAAQ4D,gBAGvB3C,WAAY,OACRI,mBAAqBC,cAAKC,iCAAiCxC,KAAKG,6BAEpEH,KAAKG,SACJwB,IAAIY,cAAKE,eAAgBqC,oBACzBnC,qBAAqBL,yBAExBwC,qBAIJF,oCACIzC,UACCC,IAAItD,eACJ2C,GAAG3C,eAAe4C,QACbS,WAAaT,MAAME,QACnB5B,KAAKE,WAAawB,MAAME,QACsB,KAA9C,mBAAE5B,KAAKE,UAAU6E,IAAIrD,MAAME,QAAQoD,aAChC9E,SAASV,WAKtB+B,kBACMvB,KAAKM,6BACLN,KAAKE,UAAUuB,GAAGxC,uBAAuByC,QACrC1B,KAAKD,QAAQR,UAlTF,KAkTcmC,MAAMuD,OACjCvD,MAAMM,sBACDlB,QACKd,KAAKD,QAAQR,UArTV,KAqTsBmC,MAAMuD,YACpC9B,gCAGCnD,KAAKM,8BACbN,KAAKE,UAAUkC,IAAInD,uBAIzBuC,kBACMxB,KAAKM,6BACLuC,QAAQpB,GAAG1C,cAAc2C,OAAS1B,KAAKiD,aAAavB,6BAEpDmB,QAAQT,IAAIrD,cAIlB2D,kBACOxC,SAASuD,MAAMa,QAAU,YACzBpE,SAASsE,aAAa,eAAe,QACrCtE,SAASqE,gBAAgB,mBACzBrE,SAASqE,gBAAgB,aACzB9D,kBAAmB,OACnBqB,eAAc,yBACfK,SAASiC,MAAM/B,YAxUC,mBAyUb6C,yBACAC,sCACHnF,KAAKE,UAAUe,QAAQtC,iBAI7ByG,kBACMpF,KAAKK,gCACLL,KAAKK,WAAWyD,cACbzD,UAAY,MAIrByB,cAAcuD,gBACNC,SAAU,mBAAEtF,KAAKE,UAAUiB,SAtVb,QAAA,OAuVA,MAEhBnB,KAAKM,UAAYN,KAAKD,QAAQT,SAAU,SACrCe,UAAY8B,SAASoD,cAAc,YACnClF,UAAUmF,UA7VO,iBA+VlBF,cACGjF,UAAUsD,UAAUC,IAAI0B,6BAG7BtF,KAAKK,WAAWoF,SAAStD,SAASiC,0BAElCpE,KAAKE,UAAUuB,GAAGzC,qBAAqB0C,QACnC1B,KAAKQ,0BACFA,sBAAuB,EAI1BkB,MAAME,SAAWF,MAAMgE,gBAIG,WAA1B1F,KAAKD,QAAQT,cACV6D,kCAEArC,WAILwE,uBACGZ,OAAO1E,KAAKK,+BAGjBL,KAAKK,WAAWsE,SAvXA,SAyXbU,oBAIAC,oBACHD,iBAIIM,2BAA6BpD,cAAKC,iCAAiCxC,KAAKK,+BAE5EL,KAAKK,WACJsB,IAAIY,cAAKE,eAAgB4C,UACzB1C,qBAAqBgD,iCACnB,IAAK3F,KAAKM,UAAYN,KAAKK,UAAW,qBACzCL,KAAKK,WAAWgC,YAxYA,cA0YZuD,eAAiB,UAChBR,kBACDC,UACFA,gBAIA,mBAAErF,KAAKE,UAAUiB,SAlZH,QAkZ8B,OACxCwE,2BAA6BpD,cAAKC,iCAAiCxC,KAAKK,+BAE5EL,KAAKK,WACJsB,IAAIY,cAAKE,eAAgBmD,gBACzBjD,qBAAqBgD,iCAExBC,sBAEOP,UACTA,WASJ/D,sBACQ+B,mBAAqBrD,KAAKE,SAASoD,aAAenB,SAASoB,gBAAgBC,cAE5ExD,KAAKO,oBAAsB8C,0BACzBnD,SAASuD,MAAMoC,sBAAiB7F,KAAKU,uBAGxCV,KAAKO,qBAAuB8C,0BACzBnD,SAASuD,MAAMqC,uBAAkB9F,KAAKU,uBAI/CwE,yBACOhF,SAASuD,MAAMoC,YAAc,QAC7B3F,SAASuD,MAAMqC,aAAe,GAGrC1E,wBACQ2E,KAAO5D,SAASiC,KAAK4B,6BACtBzF,mBAAqB0F,KAAKC,MAAMH,KAAKI,KAAOJ,KAAKK,OAASvD,OAAOwD,gBACjE3F,gBAAkBV,KAAKsG,qBAG9BjF,mBACMrB,KAAKO,mBAAoB,OAGrBgG,aAAe,GAAGC,MAAMC,KAAKtE,SAASuE,iBA3anB,sDA4anBC,cAAgB,GAAGH,MAAMC,KAAKtE,SAASuE,iBA3anB,oCA8axBH,cAAcK,MAAK,CAACC,MAAOhH,iBACrBiH,cAAgBjH,QAAQ4D,MAAMqC,aAC9BiB,mBAAoB,mBAAElH,SAASmH,IAAI,qCACvCnH,SACCoH,KAAK,gBAAiBH,eACtBE,IAAI,0BAAoBE,WAAWH,mBAAqB/G,KAAKU,8CAIhEiG,eAAeC,MAAK,CAACC,MAAOhH,iBACtBsH,aAAetH,QAAQ4D,MAAM2D,YAC7BC,kBAAmB,mBAAExH,SAASmH,IAAI,oCACtCnH,SACCoH,KAAK,eAAgBE,cACrBH,IAAI,yBAAmBE,WAAWG,kBAAoBrH,KAAKU,gCAI1DoG,cAAgB3E,SAASiC,KAAKX,MAAMqC,aACpCiB,mBAAoB,mBAAE5E,SAASiC,MAAM4C,IAAI,qCAC7C7E,SAASiC,MACR6C,KAAK,gBAAiBH,eACtBE,IAAI,0BAAoBE,WAAWH,mBAAqB/G,KAAKU,2CAGhEyB,SAASiC,MAAMO,SA9dG,cAietBQ,wBAEQoB,aAAe,GAAGC,MAAMC,KAAKtE,SAASuE,iBA7cjB,0EA8czBH,cAAcK,MAAK,CAACC,MAAOhH,iBACrByH,SAAU,mBAAEzH,SAASoH,KAAK,qCAC9BpH,SAASmD,WAAW,iBACtBnD,QAAQ4D,MAAMqC,aAAewB,SAAoB,YAI7CC,SAAW,GAAGf,MAAMC,KAAKtE,SAASuE,2BApdZ,qCAqd1Ba,UAAUX,MAAK,CAACC,MAAOhH,iBACjB2H,QAAS,mBAAE3H,SAASoH,KAAK,qBACT,IAAXO,4BACP3H,SAASmH,IAAI,eAAgBQ,QAAQxE,WAAW,yBAKhDsE,SAAU,mBAAEnF,SAASiC,MAAM6C,KAAK,qCACpC9E,SAASiC,MAAMpB,WAAW,iBAC5Bb,SAASiC,KAAKX,MAAMqC,aAAewB,SAAoB,GAGzDhB,2BACQmB,UAAYtF,SAASoD,cAAc,OACzCkC,UAAUjC,UA7fwB,0BA8flCrD,SAASiC,KAAKC,YAAYoD,iBACpBC,eAAiBD,UAAUzB,wBAAwB2B,MAAQF,UAAUG,mBAC3EzF,SAASiC,KAAKyD,YAAYJ,WACnBC,uCAIe5H,OAAQe,sBACvBb,KAAK4G,MAAK,eACXK,MAAO,mBAAEjH,MAAMiH,KA9gBR,kBA+gBLlH,QAAU,IACXV,YACA,mBAAEW,MAAMiH,UACW,iBAAXnH,QAAuBA,OAASA,OAAS,OAGjDmH,OACHA,KAAO,IAAItH,MAAMK,KAAMD,6BACrBC,MAAMiH,KAvhBC,WAuhBcA,OAGH,iBAAXnH,OAAqB,SACF,IAAjBmH,KAAKnH,cACR,IAAIgI,qCAA8BhI,aAG1CmH,KAAKnH,QAAQe,oBACJd,QAAQN,MACjBwH,KAAKxH,KAAKoB,uCAUhBsB,UAAUV,GAAGrC,qBA9gBc,yBA8gB8B,SAAUsC,WAC/DE,aACEmG,SAAWxF,cAAKyF,uBAAuBhI,MAEzC+H,WACFnG,OAASO,SAAS/B,cAAc2H,iBAG5BjI,QAAS,mBAAE8B,QAAQqF,KAnjBV,YAojBb,SAAW,KACN,mBAAErF,QAAQqF,WACV,mBAAEjH,MAAMiH,QAGM,MAAjBjH,KAAKiI,SAAoC,SAAjBjI,KAAKiI,SAC/BvG,MAAMM,uBAGFkG,SAAU,mBAAEtG,QAAQD,IAAI/C,YAAYmC,YACpCA,UAAUG,sBAKdgH,QAAQvG,IAAIhD,cAAc,MACpB,mBAAEqB,MAAM6B,GAAG,kBACRrC,cAKXG,MAAMwI,iBAAiB1B,MAAK,mBAAE7E,QAAS9B,OAAQE,yBAO/CxB,GAAF,MAAamB,MAAMwI,iCACjB3J,GAAF,MAAW4J,YAAczI,sBACvBnB,GAAF,MAAW6J,WAAa,qBACpB7J,GAAF,MAAaF,mBACNqB,MAAMwI,+BAGAxI"} boost/amd/build/bootstrap/button.min.js.map 0000604 00000021355 15062070724 0014763 0 ustar 00 {"version":3,"file":"button.min.js","sources":["../../src/bootstrap/button.js"],"sourcesContent":["/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.6.2): button.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nimport $ from 'jquery'\n\n/**\n * Constants\n */\n\nconst NAME = 'button'\nconst VERSION = '4.6.2'\nconst DATA_KEY = 'bs.button'\nconst EVENT_KEY = `.${DATA_KEY}`\nconst DATA_API_KEY = '.data-api'\nconst JQUERY_NO_CONFLICT = $.fn[NAME]\n\nconst CLASS_NAME_ACTIVE = 'active'\nconst CLASS_NAME_BUTTON = 'btn'\nconst CLASS_NAME_FOCUS = 'focus'\n\nconst EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_FOCUS_BLUR_DATA_API = `focus${EVENT_KEY}${DATA_API_KEY} ` +\n `blur${EVENT_KEY}${DATA_API_KEY}`\nconst EVENT_LOAD_DATA_API = `load${EVENT_KEY}${DATA_API_KEY}`\n\nconst SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^=\"button\"]'\nconst SELECTOR_DATA_TOGGLES = '[data-toggle=\"buttons\"]'\nconst SELECTOR_DATA_TOGGLE = '[data-toggle=\"button\"]'\nconst SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle=\"buttons\"] .btn'\nconst SELECTOR_INPUT = 'input:not([type=\"hidden\"])'\nconst SELECTOR_ACTIVE = '.active'\nconst SELECTOR_BUTTON = '.btn'\n\n/**\n * Class definition\n */\n\nclass Button {\n constructor(element) {\n this._element = element\n this.shouldAvoidTriggerChange = false\n }\n\n // Getters\n static get VERSION() {\n return VERSION\n }\n\n // Public\n toggle() {\n let triggerChangeEvent = true\n let addAriaPressed = true\n const rootElement = $(this._element).closest(SELECTOR_DATA_TOGGLES)[0]\n\n if (rootElement) {\n const input = this._element.querySelector(SELECTOR_INPUT)\n\n if (input) {\n if (input.type === 'radio') {\n if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE)) {\n triggerChangeEvent = false\n } else {\n const activeElement = rootElement.querySelector(SELECTOR_ACTIVE)\n\n if (activeElement) {\n $(activeElement).removeClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n if (triggerChangeEvent) {\n // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input\n if (input.type === 'checkbox' || input.type === 'radio') {\n input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE)\n }\n\n if (!this.shouldAvoidTriggerChange) {\n $(input).trigger('change')\n }\n }\n\n input.focus()\n addAriaPressed = false\n }\n }\n\n if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {\n if (addAriaPressed) {\n this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE))\n }\n\n if (triggerChangeEvent) {\n $(this._element).toggleClass(CLASS_NAME_ACTIVE)\n }\n }\n }\n\n dispose() {\n $.removeData(this._element, DATA_KEY)\n this._element = null\n }\n\n // Static\n static _jQueryInterface(config, avoidTriggerChange) {\n return this.each(function () {\n const $element = $(this)\n let data = $element.data(DATA_KEY)\n\n if (!data) {\n data = new Button(this)\n $element.data(DATA_KEY, data)\n }\n\n data.shouldAvoidTriggerChange = avoidTriggerChange\n\n if (config === 'toggle') {\n data[config]()\n }\n })\n }\n}\n\n/**\n * Data API implementation\n */\n\n$(document)\n .on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n let button = event.target\n const initialButton = button\n\n if (!$(button).hasClass(CLASS_NAME_BUTTON)) {\n button = $(button).closest(SELECTOR_BUTTON)[0]\n }\n\n if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {\n event.preventDefault() // work around Firefox bug #1540995\n } else {\n const inputBtn = button.querySelector(SELECTOR_INPUT)\n\n if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {\n event.preventDefault() // work around Firefox bug #1540995\n return\n }\n\n if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {\n Button._jQueryInterface.call($(button), 'toggle', initialButton.tagName === 'INPUT')\n }\n }\n })\n .on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, event => {\n const button = $(event.target).closest(SELECTOR_BUTTON)[0]\n $(button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type))\n })\n\n$(window).on(EVENT_LOAD_DATA_API, () => {\n // ensure correct active class is set to match the controls' actual values/states\n\n // find all checkboxes/readio buttons inside data-toggle groups\n let buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n const input = button.querySelector(SELECTOR_INPUT)\n if (input.checked || input.hasAttribute('checked')) {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n\n // find all button toggles\n buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE))\n for (let i = 0, len = buttons.length; i < len; i++) {\n const button = buttons[i]\n if (button.getAttribute('aria-pressed') === 'true') {\n button.classList.add(CLASS_NAME_ACTIVE)\n } else {\n button.classList.remove(CLASS_NAME_ACTIVE)\n }\n }\n})\n\n/**\n * jQuery\n */\n\n$.fn[NAME] = Button._jQueryInterface\n$.fn[NAME].Constructor = Button\n$.fn[NAME].noConflict = () => {\n $.fn[NAME] = JQUERY_NO_CONFLICT\n return Button._jQueryInterface\n}\n\nexport default Button\n"],"names":["NAME","EVENT_KEY","JQUERY_NO_CONFLICT","$","fn","EVENT_CLICK_DATA_API","EVENT_FOCUS_BLUR_DATA_API","EVENT_LOAD_DATA_API","Button","constructor","element","_element","shouldAvoidTriggerChange","VERSION","toggle","triggerChangeEvent","addAriaPressed","rootElement","this","closest","input","querySelector","type","checked","classList","contains","activeElement","removeClass","trigger","focus","hasAttribute","setAttribute","toggleClass","dispose","removeData","config","avoidTriggerChange","each","$element","data","document","on","event","button","target","initialButton","hasClass","preventDefault","inputBtn","tagName","_jQueryInterface","call","test","window","buttons","slice","querySelectorAll","i","len","length","add","remove","getAttribute","Constructor","noConflict"],"mappings":"6OAaMA,KAAO,SAGPC,qBADW,aAGXC,mBAAqBC,gBAAEC,GAAGJ,MAM1BK,oCAA+BJ,kBAPhB,aAQfK,0BAA4B,eAAQL,kBARrB,+BASYA,kBATZ,aAUfM,kCAA6BN,kBAVd,mBAwBfO,OACJC,YAAYC,cACLC,SAAWD,aACXE,0BAA2B,EAIvBC,2BAlCG,QAuCdC,aACMC,oBAAqB,EACrBC,gBAAiB,QACfC,aAAc,mBAAEC,KAAKP,UAAUQ,QA1BX,2BA0B0C,MAEhEF,YAAa,OACTG,MAAQF,KAAKP,SAASU,cA1BX,iCA4BbD,MAAO,IACU,UAAfA,MAAME,QACJF,MAAMG,SAAWL,KAAKP,SAASa,UAAUC,SA3C7B,UA4CdV,oBAAqB,MAChB,OACCW,cAAgBT,YAAYI,cAhCtB,WAkCRK,mCACAA,eAAeC,YAjDL,UAsDdZ,qBAEiB,aAAfK,MAAME,MAAsC,UAAfF,MAAME,OACrCF,MAAMG,SAAWL,KAAKP,SAASa,UAAUC,SAzD3B,WA4DXP,KAAKN,8CACNQ,OAAOQ,QAAQ,WAIrBR,MAAMS,QACNb,gBAAiB,GAIfE,KAAKP,SAASmB,aAAa,aAAeZ,KAAKP,SAASa,UAAUC,SAAS,cAC3ET,qBACGL,SAASoB,aAAa,gBAAiBb,KAAKP,SAASa,UAAUC,SAxElD,WA2EhBV,wCACAG,KAAKP,UAAUqB,YA5EC,WAiFxBC,0BACIC,WAAWhB,KAAKP,SAvFL,kBAwFRA,SAAW,6BAIMwB,OAAQC,2BACvBlB,KAAKmB,MAAK,iBACTC,UAAW,mBAAEpB,UACfqB,KAAOD,SAASC,KA/FT,aAiGNA,OACHA,KAAO,IAAI/B,OAAOU,MAClBoB,SAASC,KAnGA,YAmGeA,OAG1BA,KAAK3B,yBAA2BwB,mBAEjB,WAAXD,QACFI,KAAKJ,kCAUXK,UACCC,GAAGpC,qBAtG8B,2BAsGqBqC,YACjDC,OAASD,MAAME,aACbC,cAAgBF,WAEjB,mBAAEA,QAAQG,SAlHO,SAmHpBH,QAAS,mBAAEA,QAAQxB,QArGD,QAqG0B,KAGzCwB,QAAUA,OAAOb,aAAa,aAAea,OAAOnB,UAAUC,SAAS,YAC1EiB,MAAMK,qBACD,OACCC,SAAWL,OAAOtB,cA7GP,iCA+Gb2B,WAAaA,SAASlB,aAAa,aAAekB,SAASxB,UAAUC,SAAS,yBAChFiB,MAAMK,iBAIsB,UAA1BF,cAAcI,SAA0C,UAAnBN,OAAOM,SAC9CzC,OAAO0C,iBAAiBC,MAAK,mBAAER,QAAS,SAAoC,UAA1BE,cAAcI,aAIrER,GAAGnC,0BA7H8B,2BA6H0BoC,cACpDC,QAAS,mBAAED,MAAME,QAAQzB,QAxHX,QAwHoC,uBACtDwB,QAAQX,YAtIW,QAsImB,eAAeoB,KAAKV,MAAMpB,8BAGpE+B,QAAQZ,GAAGlC,qBAAqB,SAI5B+C,QAAU,GAAGC,MAAMJ,KAAKX,SAASgB,iBAnID,qCAoI/B,IAAIC,EAAI,EAAGC,IAAMJ,QAAQK,OAAQF,EAAIC,IAAKD,IAAK,OAC5Cd,OAASW,QAAQG,GACjBrC,MAAQuB,OAAOtB,cArIF,8BAsIfD,MAAMG,SAAWH,MAAMU,aAAa,WACtCa,OAAOnB,UAAUoC,IApJG,UAsJpBjB,OAAOnB,UAAUqC,OAtJG,UA2JxBP,QAAU,GAAGC,MAAMJ,KAAKX,SAASgB,iBAhJN,+BAiJtB,IAAIC,EAAI,EAAGC,IAAMJ,QAAQK,OAAQF,EAAIC,IAAKD,IAAK,OAC5Cd,OAASW,QAAQG,GACqB,SAAxCd,OAAOmB,aAAa,gBACtBnB,OAAOnB,UAAUoC,IA/JG,UAiKpBjB,OAAOnB,UAAUqC,OAjKG,8BA0KxBzD,GAAGJ,MAAQQ,OAAO0C,iCAClB9C,GAAGJ,MAAM+D,YAAcvD,uBACvBJ,GAAGJ,MAAMgE,WAAa,qBACpB5D,GAAGJ,MAAQE,mBACNM,OAAO0C,+BAGD1C"} boost/amd/build/aria.min.js 0000604 00000021713 15062070724 0011571 0 ustar 00 define("theme_boost/aria",["exports","jquery","core/pending"],(function(_exports,_jquery,_pending){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}} /** * Enhancements to Bootstrap components for accessibility. * * @module theme_boost/aria * @copyright 2018 Damyon Wiese <damyon@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=void 0,_jquery=_interopRequireDefault(_jquery),_pending=_interopRequireDefault(_pending);const dropdownFix=()=>{let focusEnd=!1;const setFocusEnd=function(){let end=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];focusEnd=end},shiftFocus=function(element){let focusCheck=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const pendingPromise=new _pending.default("core/aria:delayed-focus");setTimeout((()=>{focusCheck&&!focusCheck()||element.focus(),pendingPromise.resolve()}),50)},handleMenuButton=e=>{const trigger=e.key;let fixFocus=!1;if(" "!==trigger&&"Enter"!==trigger||(fixFocus=!0,e.preventDefault(),e.target.click()),"ArrowUp"!==trigger&&"ArrowDown"!==trigger||(fixFocus=!0),!fixFocus)return;const menu=e.target.parentElement.querySelector('[role="menu"]');let menuItems=!1,foundMenuItem=!1,textInput=!1;menu&&(menuItems=menu.querySelectorAll('[role="menuitem"]'),textInput=e.target.parentElement.querySelector('[data-action="search"]')),menuItems&&menuItems.length>0&&("ArrowUp"===trigger?setFocusEnd():setFocusEnd(!1),foundMenuItem=(()=>{const result=focusEnd;return focusEnd=!1,result})()?menuItems[menuItems.length-1]:menuItems[0]),textInput&&shiftFocus(textInput),foundMenuItem&&null===textInput&&shiftFocus(foundMenuItem)};document.addEventListener("keypress",(e=>{if(e.target.matches('.dropdown [role="menu"] [role="menuitem"]')){const menu=e.target.closest('[role="menu"]');if(!menu)return;const menuItems=menu.querySelectorAll('[role="menuitem"]');if(!menuItems)return;const trigger=e.key.toLowerCase();for(let i=0;i<menuItems.length;i++){const item=menuItems[i];if(0==item.text.trim().toLowerCase().indexOf(trigger)){shiftFocus(item);break}}}})),document.addEventListener("keydown",(e=>{if(e.target.matches('[data-toggle="dropdown"]')&&handleMenuButton(e),e.target.matches('.dropdown [role="menu"] [role="menuitem"]')){const trigger=e.key;let next=!1;const menu=e.target.closest('[role="menu"]');if(!menu)return;const menuItems=menu.querySelectorAll('[role="menuitem"]');if(!menuItems)return;if("ArrowDown"==trigger){for(let i=0;i<menuItems.length-1;i++)if(menuItems[i]==e.target){next=menuItems[i+1];break}next||(next=menuItems[0])}else if("ArrowUp"==trigger){for(let i=1;i<menuItems.length;i++)if(menuItems[i]==e.target){next=menuItems[i-1];break}next||(next=menuItems[menuItems.length-1])}else"Home"==trigger?next=menuItems[0]:"End"==trigger&&(next=menuItems[menuItems.length-1]);next&&(e.preventDefault(),shiftFocus(next))}else;})),(0,_jquery.default)(".dropdown").on("hidden.bs.dropdown",(e=>{const trigger=e.target.querySelector('[data-toggle="dropdown"]'),focused=document.activeElement!=document.body?document.activeElement:null;trigger&&focused&&e.target.contains(focused)&&shiftFocus(trigger,(()=>document.activeElement===document.body||e.target.contains(document.activeElement)))}))},tabElementFix=()=>{document.addEventListener("keydown",(e=>{["ArrowUp","ArrowDown","ArrowLeft","ArrowRight","Home","End"].includes(e.key)&&e.target.matches('[role="tablist"] [role="tab"]')&&(e=>{const tabList=e.target.closest('[role="tablist"]'),vertical="vertical"==tabList.getAttribute("aria-orientation"),rtl=window.right_to_left(),arrowNext=vertical?"ArrowDown":rtl?"ArrowLeft":"ArrowRight",arrowPrevious=vertical?"ArrowUp":rtl?"ArrowRight":"ArrowLeft",tabs=Array.prototype.filter.call(tabList.querySelectorAll('[role="tab"]'),(tab=>!!tab.offsetHeight));for(let i=0;i<tabs.length;i++)tabs[i].index=i;switch(e.key){case arrowNext:e.preventDefault(),void 0!==e.target.index&&tabs[e.target.index+1]?tabs[e.target.index+1].focus():tabs[0].focus();break;case arrowPrevious:e.preventDefault(),void 0!==e.target.index&&tabs[e.target.index-1]?tabs[e.target.index-1].focus():tabs[tabs.length-1].focus();break;case"Home":e.preventDefault(),tabs[0].focus();break;case"End":e.preventDefault(),tabs[tabs.length-1].focus()}})(e)})),document.addEventListener("click",(e=>{if(e.target.matches('[role="tablist"] [data-toggle="tab"], [role="tablist"] [data-toggle="pill"]')){const tabs=e.target.closest('[role="tablist"]').querySelectorAll('[data-toggle="tab"], [data-toggle="pill"]');e.preventDefault(),(0,_jquery.default)(e.target).tab("show"),tabs.forEach((tab=>{tab.tabIndex=-1})),e.target.tabIndex=0}}))};_exports.init=()=>{dropdownFix(),(()=>{(0,_jquery.default)(document).on("show.bs.dropdown",(e=>{if(e.relatedTarget.matches('[role="combobox"]')){const combobox=e.relatedTarget,listbox=document.querySelector("#".concat(combobox.getAttribute("aria-controls"),'[role="listbox"]'));if(listbox){const selectedOption=listbox.querySelector('[role="option"][aria-selected="true"]');setTimeout((()=>{if(selectedOption)selectedOption.classList.add("active"),combobox.setAttribute("aria-activedescendant",selectedOption.id);else{const firstOption=listbox.querySelector('[role="option"]');firstOption.setAttribute("aria-selected","true"),firstOption.classList.add("active"),combobox.setAttribute("aria-activedescendant",firstOption.id)}}),0)}}})),(0,_jquery.default)(document).on("hidden.bs.dropdown",(e=>{if(e.relatedTarget.matches('[role="combobox"]')){const combobox=e.relatedTarget,listbox=document.querySelector("#".concat(combobox.getAttribute("aria-controls"),'[role="listbox"]'));combobox.removeAttribute("aria-activedescendant"),listbox&&setTimeout((()=>{listbox.querySelectorAll('.active[role="option"]').forEach((option=>{option.classList.remove("active")}))}),0)}})),document.addEventListener("keydown",(e=>{if(e.target.matches('[role="combobox"][aria-controls]:not([aria-haspopup=dialog])')){const combobox=e.target,trigger=e.key;let next=null;const listbox=document.querySelector("#".concat(combobox.getAttribute("aria-controls"),'[role="listbox"]')),options=listbox.querySelectorAll('[role="option"]'),activeOption=listbox.querySelector('.active[role="option"]'),editable=combobox.hasAttribute("aria-autocomplete");if(options&&(activeOption||editable)){if("ArrowDown"==trigger){for(let i=0;i<options.length-1;i++)if(options[i]==activeOption){next=options[i+1];break}editable&&!next&&(next=options[0])}if("ArrowUp"==trigger){for(let i=1;i<options.length;i++)if(options[i]==activeOption){next=options[i-1];break}editable&&!next&&(next=options[options.length-1])}else if("Home"==trigger)next=options[0];else if("End"==trigger)next=options[options.length-1];else if(" "==trigger&&!editable||"Enter"==trigger)e.preventDefault(),selectOption(combobox,activeOption);else if(!editable)for(let i=0;i<options.length;i++){const option=options[i],optionText=option.textContent.trim().toLowerCase(),keyPressed=e.key.toLowerCase();if(0==optionText.indexOf(keyPressed)){next=option;break}}next&&(e.preventDefault(),activeOption&&activeOption.classList.remove("active"),next.classList.add("active"),combobox.setAttribute("aria-activedescendant",next.id),next.scrollIntoView({block:"nearest"}))}}})),document.addEventListener("click",(e=>{const option=e.target.closest('[role="listbox"] [role="option"]');if(option){const listbox=option.closest('[role="listbox"]'),combobox=document.querySelector('[role="combobox"][aria-controls="'.concat(listbox.id,'"]'));combobox&&(combobox.focus(),selectOption(combobox,option))}})),document.addEventListener("change",(e=>{if(e.target.matches('input[type="hidden"][id]')){const combobox=document.querySelector('[role="combobox"][data-input-element="'.concat(e.target.id,'"]')),option=e.target.parentElement.querySelector('[role="option"][data-value="'.concat(e.target.value,'"]'));combobox&&option&&selectOption(combobox,option)}}));const selectOption=(combobox,option)=>{const oldSelectedOption=option.closest('[role="listbox"]').querySelector('[role="option"][aria-selected="true"]');if(oldSelectedOption!=option&&(oldSelectedOption&&oldSelectedOption.removeAttribute("aria-selected"),option.setAttribute("aria-selected","true")),combobox.hasAttribute("value")?combobox.value=option.textContent.replace(/[\n\r]+|[\s]{2,}/g," ").trim():combobox.textContent=option.textContent,combobox.dataset.inputElement){const inputElement=document.getElementById(combobox.dataset.inputElement);inputElement&&inputElement.value!=option.dataset.value&&(inputElement.value=option.dataset.value,inputElement.dispatchEvent(new Event("change",{bubbles:!0})))}}})(),window.addEventListener("load",(()=>{const alerts=document.querySelectorAll('[data-aria-autofocus="true"][role="alert"]');Array.prototype.forEach.call(alerts,(autofocusElement=>{autofocusElement.innerHTML+=" ",autofocusElement.removeAttribute("data-aria-autofocus")}))})),tabElementFix(),document.addEventListener("keydown",(e=>{e.target.matches('[data-toggle="collapse"]')&&" "===e.key&&(e.preventDefault(),e.target.click())}))}})); //# sourceMappingURL=aria.min.js.map boost/amd/build/index.min.js.map 0000604 00000000135 15062070724 0012533 0 ustar 00 {"version":3,"file":"index.min.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} boost/amd/build/footer-popover.min.js.map 0000604 00000010441 15062070724 0014413 0 ustar 00 {"version":3,"file":"footer-popover.min.js","sources":["../src/footer-popover.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Shows the footer content in a popover.\n *\n * @module theme_boost/footer-popover\n * @copyright 2021 Bas Brands\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\nimport $ from 'jquery';\nimport Popover from './popover';\n\nconst SELECTORS = {\n FOOTERCONTAINER: '[data-region=\"footer-container-popover\"]',\n FOOTERCONTENT: '[data-region=\"footer-content-popover\"]',\n FOOTERBUTTON: '[data-action=\"footer-popover\"]'\n};\n\nlet footerIsShown = false;\n\nexport const init = () => {\n const container = document.querySelector(SELECTORS.FOOTERCONTAINER);\n const footerButton = document.querySelector(SELECTORS.FOOTERBUTTON);\n\n // All jQuery in this code can be replaced when MDL-71979 is integrated.\n $(footerButton).popover({\n content: getFooterContent,\n container: container,\n html: true,\n placement: 'top',\n customClass: 'footer',\n trigger: 'click',\n boundary: 'viewport',\n popperConfig: {\n modifiers: {\n preventOverflow: {\n boundariesElement: 'viewport',\n padding: 48\n },\n offset: {},\n flip: {\n behavior: 'flip'\n },\n arrow: {\n element: '.arrow'\n },\n }\n }\n });\n\n document.addEventListener('click', e => {\n if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) {\n $(footerButton).popover('hide');\n }\n },\n true);\n\n document.addEventListener('keydown', e => {\n if (footerIsShown && e.key === 'Escape') {\n $(footerButton).popover('hide');\n footerButton.focus();\n }\n });\n\n document.addEventListener('focus', e => {\n if (footerIsShown && !e.target.closest(SELECTORS.FOOTERCONTAINER)) {\n $(footerButton).popover('hide');\n }\n },\n true);\n\n $(footerButton).on('show.bs.popover', () => {\n footerIsShown = true;\n });\n\n $(footerButton).on('hide.bs.popover', () => {\n footerIsShown = false;\n });\n};\n\n/**\n * Get the footer content for popover.\n *\n * @returns {String} HTML string\n * @private\n */\nconst getFooterContent = () => {\n return document.querySelector(SELECTORS.FOOTERCONTENT).innerHTML;\n};\n\nexport {\n Popover\n};\n"],"names":["SELECTORS","footerIsShown","container","document","querySelector","footerButton","popover","content","getFooterContent","html","placement","customClass","trigger","boundary","popperConfig","modifiers","preventOverflow","boundariesElement","padding","offset","flip","behavior","arrow","element","addEventListener","e","target","closest","key","focus","on","innerHTML"],"mappings":";;;;;;;4QA0BMA,0BACe,2CADfA,wBAEa,yCAFbA,uBAGY,qCAGdC,eAAgB,gBAEA,WACVC,UAAYC,SAASC,cAAcJ,2BACnCK,aAAeF,SAASC,cAAcJ,4CAG1CK,cAAcC,QAAQ,CACpBC,QAASC,iBACTN,UAAWA,UACXO,MAAM,EACNC,UAAW,MACXC,YAAa,SACbC,QAAS,QACTC,SAAU,WACVC,aAAc,CACVC,UAAW,CACPC,gBAAiB,CACbC,kBAAmB,WACnBC,QAAS,IAEbC,OAAQ,GACRC,KAAM,CACFC,SAAU,QAEdC,MAAO,CACHC,QAAS,cAMzBpB,SAASqB,iBAAiB,SAASC,IAC3BxB,gBAAkBwB,EAAEC,OAAOC,QAAQ3B,gDACjCK,cAAcC,QAAQ,WAGhC,GAEAH,SAASqB,iBAAiB,WAAWC,IAC7BxB,eAA2B,WAAVwB,EAAEG,0BACjBvB,cAAcC,QAAQ,QACxBD,aAAawB,YAIrB1B,SAASqB,iBAAiB,SAASC,IAC3BxB,gBAAkBwB,EAAEC,OAAOC,QAAQ3B,gDACjCK,cAAcC,QAAQ,WAGhC,uBAEED,cAAcyB,GAAG,mBAAmB,KAClC7B,eAAgB,yBAGlBI,cAAcyB,GAAG,mBAAmB,KAClC7B,eAAgB,YAUlBO,iBAAmB,IACdL,SAASC,cAAcJ,yBAAyB+B"} boost/readme_moodle.txt 0000604 00000003226 15062070724 0011231 0 ustar 00 Description of Twitter bootstrap import into Moodle Twitter bootstrap ----------------- Sass: This theme uses Bootstrap frontend toolkit. The Bootstrap repository is available on: https://github.com/twbs/bootstrap To update to the latest release of twitter bootstrap: * download bootstrap to your home folder * remove folder theme/boost/scss/bootstrap * copy the scss files from ~/bootstrap/scss to theme/boost/scss/bootstrap * comment out left: 0; from .popover {} in scss/bootstrap/_popover.scss. In RTL mode this prevents popovers from showing and it is not required in LTR mode. * comment out this line in theme/boost/scss/_print.scss @page { size: $print-page-size; } It breaks when compiled with phpscss. * update ./thirdpartylibs.xml * follow the instructions in admin/tool/component_library/readme_moodle.txt to update the Bootstrap documentation there. Javascript: * remove folder theme/boost/amd/src/bootstrap * copy the js files from ~/bootstrap/js/src to theme/boost/amd/src/bootstrap (including the subfolder) * copy index.js from ~/bootstrap/js to theme/boost/amd/src * edit theme/boost/amd/src/index.js and update import path (src -> bootstrap) * Moodle core includes the popper.js library, make sure each of the new Bootstrap js files includes the 'core/popper' library instead of 'popper.js'. For current version these files were: tooltip.js and dropdown.js * update ./thirdpartylibs.xml to include all new Bootstrap js files * run "grunt ignorefiles" to prevent linting errors appearing from the new Bootstrap js files. * in folder theme/boost run "grunt amd" to compile the bootstrap JS * in folder theme/boost run "grunt css" to compile scss boost/tests/boostnavbar_test.php 0000604 00000052333 15062070724 0013131 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. namespace theme_boost; /** * Test the boostnavbar file * * @package theme_boost * @covers \theme_boost\boostnavbar * @copyright 2021 Peter Dias * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class boostnavbar_test extends \advanced_testcase { /** * Provider for test_remove_no_link_items * The setup and expected arrays are defined as an array of 'nodekey' => $hasaction * * @return array */ public function remove_no_link_items_provider(): array { return [ 'All nodes have links links including leaf node. Set to remove section nodes.' => [ [ 'node1' => ['hasaction' => true, 'issection' => false], 'node2' => ['hasaction' => true, 'issection' => false], 'node3' => ['hasaction' => true, 'issection' => false], ], true, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node1' => true, 'node2' => true, 'node3' => true, ] ], 'Only some parent nodes have links. Leaf node has a link. Set to remove section nodes.' => [ [ 'node1' => ['hasaction' => false, 'issection' => false], 'node2' => ['hasaction' => true, 'issection' => false], 'node3' => ['hasaction' => true, 'issection' => false], ], true, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node2' => true, 'node3' => true, ] ], 'All parent nodes do not have links. Leaf node has a link. Set to remove section nodes.' => [ [ 'node1' => ['hasaction' => false, 'issection' => false], 'node2' => ['hasaction' => false, 'issection' => false], 'node3' => ['hasaction' => true, 'issection' => false], ], true, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node3' => true, ] ], 'All parent nodes have links. Leaf node does not has a link. Set to remove section nodes.' => [ [ 'node1' => ['hasaction' => true, 'issection' => false], 'node2' => ['hasaction' => true, 'issection' => false], 'node3' => ['hasaction' => false, 'issection' => false], ], true, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node1' => true, 'node2' => true, 'node3' => false, ] ], 'All parent nodes do not have links. Leaf node does not has a link. Set to remove section nodes.' => [ [ 'node1' => ['hasaction' => false, 'issection' => false], 'node2' => ['hasaction' => false, 'issection' => false], 'node3' => ['hasaction' => false, 'issection' => false], ], true, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node3' => false, ] ], 'Some parent nodes do not have links. Leaf node does not has a link. Set to remove section nodes.' => [ [ 'node1' => ['hasaction' => true, 'issection' => false], 'node2' => ['hasaction' => false, 'issection' => false], 'node3' => ['hasaction' => false, 'issection' => false], ], true, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node1' => true, 'node3' => false, ] ], 'All nodes have links links including leaf node and section nodes. Set to remove section nodes.' => [ [ 'node1' => ['hasaction' => true, 'issection' => false], 'node2' => ['hasaction' => true, 'issection' => false], 'sectionnode1' => ['hasaction' => true, 'issection' => true], 'node3' => ['hasaction' => true, 'issection' => false], ], true, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node1' => true, 'node2' => true, 'node3' => true, ] ], 'All nodes have links links including leaf node and section nodes. Set to not remove section nodes.' => [ [ 'node1' => ['hasaction' => true, 'issection' => false], 'node2' => ['hasaction' => true, 'issection' => false], 'sectionnode1' => ['hasaction' => true, 'issection' => true], 'node3' => ['hasaction' => true, 'issection' => false], ], false, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node1' => true, 'node2' => true, 'sectionnode1' => true, 'node3' => true, ] ], 'Only some parent nodes have links. Section node does not have a link. Set to not remove section nodes.' => [ [ 'node1' => ['hasaction' => false, 'issection' => false], 'node2' => ['hasaction' => true, 'issection' => false], 'sectionnode1' => ['hasaction' => false, 'issection' => true], 'node3' => ['hasaction' => true, 'issection' => false], ], true, [ 'Home' => true, 'Courses' => true, 'tc_1' => true, 'node2' => true, 'node3' => true, ] ] ]; } /** * Test the remove_no_link_items function * * @dataProvider remove_no_link_items_provider * @param array $setup * @param bool $removesectionnodes Whether to remove the section nodes with an associated action. * @param array $expected * @throws \ReflectionException */ public function test_remove_no_link_items(array $setup, bool $removesectionnodes, array $expected) { global $PAGE; $this->resetAfterTest(); // Unfortunate hack needed because people use global $PAGE around the place. $PAGE->set_url('/'); $course = $this->getDataGenerator()->create_course(); $page = new \moodle_page(); $page->set_course($course); $page->set_url(new \moodle_url('/course/view.php', array('id' => $course->id))); // A dummy url to use. We don't care where it's pointing to. $url = new \moodle_url('/'); foreach ($setup as $key => $value) { $page->navbar->add($key, $value['hasaction'] ? $url : null, $value['issection'] ? \navigation_node::TYPE_SECTION : null); } $boostnavbar = $this->getMockBuilder(boostnavbar::class) ->disableOriginalConstructor() ->onlyMethods([]) ->getMock(); $rc = new \ReflectionClass(boostnavbar::class); $rcp = $rc->getProperty('items'); $rcp->setAccessible(true); $rcp->setValue($boostnavbar, $page->navbar->get_items()); // Make the call to the function. $rcm = $rc->getMethod('remove_no_link_items'); $rcm->setAccessible(true); $rcm->invoke($boostnavbar, $removesectionnodes); // Get the value for the class variable that the function modifies. $values = $rcp->getValue($boostnavbar); $actual = []; foreach ($values as $value) { $actual[$value->text] = $value->has_action(); } $this->assertEquals($expected, $actual); } /** * Provider for test_remove_duplicate_items. * * @return array */ public function remove_duplicate_items_provider(): array { global $CFG; return [ 'Breadcrumb items with identical text and action url (actions of same type moodle_url).' => [ [ [ 'text' => 'Node 1', 'action' => new \moodle_url('/page1.php') ], [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php', ['id' => 1]) ], [ 'text' => 'Node 4', 'action' => new \moodle_url('/page4.php', ['id' => 1]) ], [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php', ['id' => 1]) ], ], ['Home', 'Node 1', 'Node 4', 'Node 2'] ], 'Breadcrumb items with identical text and action url (actions of different type moodle_url/text).' => [ [ [ 'text' => 'Node 1', 'action' => new \moodle_url('/page1.php') ], [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php', ['id' => 1]) ], [ 'text' => 'Node 4', 'action' => new \moodle_url('/page4.php', ['id' => 1]) ], [ 'text' => 'Node 2', 'action' => "{$CFG->wwwroot}/page2.php?id=1" ], ], ['Home', 'Node 1', 'Node 4', 'Node 2'] ], 'Breadcrumb items with identical text and action url (actions of different type moodle_url/action_link).' => [ [ [ 'text' => 'Node 1', 'action' => new \moodle_url('/page1.php') ], [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php', ['id' => 1]) ], [ 'text' => 'Node 4', 'action' => new \moodle_url('/page4.php', ['id' => 1]) ], [ 'text' => 'Node 2', 'action' => new \action_link(new \moodle_url('/page2.php', ['id' => 1]), 'Action link') ], ], ['Home', 'Node 1', 'Node 4', 'Node 2'] ], 'Breadcrumbs items with identical text but not identical action url.' => [ [ [ 'text' => 'Node 1', 'action' => new \moodle_url('/page1.php') ], [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php', ['id' => 1]) ], [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php', ['id' => 2]) ], [ 'text' => 'Node 4', 'action' => new \moodle_url('/page4.php', ['id' => 1]) ], ], ['Home', 'Node 1', 'Node 2', 'Node 2', 'Node 4'] ], 'Breadcrumb items with identical action url but not identical text.' => [ [ [ 'text' => 'Node 1', 'action' => new \moodle_url('/page1.php') ], [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php', ['id' => 1]) ], [ 'text' => 'Node 3', 'action' => new \moodle_url('/page2.php', ['id' => 1]) ], [ 'text' => 'Node 4', 'action' => new \moodle_url('/page4.php', ['id' => 1]) ], ], ['Home', 'Node 1', 'Node 2', 'Node 3', 'Node 4'] ], 'Breadcrumb items without any identical action url or text.' => [ [ [ 'text' => 'Node 1', 'action' => new \moodle_url('/page1.php') ], [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php', ['id' => 1]) ], [ 'text' => 'Node 3', 'action' => new \moodle_url('/page3.php', ['id' => 1]) ], [ 'text' => 'Node 4', 'action' => new \moodle_url('/page4.php', ['id' => 1]) ], ], ['Home', 'Node 1', 'Node 2', 'Node 3', 'Node 4'] ], ]; } /** * Test the remove_duplicate_items function. * * @dataProvider remove_duplicate_items_provider * @param array $navbarnodes The array containing the text and action of the nodes to be added to the navbar * @param array $expected The array containing the text of the expected navbar nodes */ public function test_remove_duplicate_items(array $navbarnodes, array $expected) { $this->resetAfterTest(); $page = new \moodle_page(); $page->set_url('/'); // Add the navbar nodes. foreach ($navbarnodes as $node) { $page->navbar->add($node['text'], $node['action'], \navigation_node::TYPE_CUSTOM); } $boostnavbar = $this->getMockBuilder(boostnavbar::class) ->disableOriginalConstructor() ->onlyMethods([]) ->getMock(); $rc = new \ReflectionClass(boostnavbar::class); $rcp = $rc->getProperty('items'); $rcp->setAccessible(true); $rcp->setValue($boostnavbar, $page->navbar->get_items()); // Make the call to the function. $rcm = $rc->getMethod('remove_duplicate_items'); $rcm->setAccessible(true); $rcm->invoke($boostnavbar); // Get the value for the class variable that the function modifies. $values = $rcp->getValue($boostnavbar); $actual = []; foreach ($values as $value) { $actual[] = $value->text; } $this->assertEquals($expected, $actual); } /** * Provider for test_remove_items_that_exist_in_navigation. * * @return array */ public function remove_items_that_exist_in_navigation_provider(): array { global $CFG; return [ 'Item with identical action url and text exists in the primary navigation menu.' => [ 'primary', [ [ 'text' => 'Node 1', 'action' => new \moodle_url('/page1.php') ], ], [ 'Node 1' => new \moodle_url('/page1.php'), 'Node 2' => new \moodle_url('/page2.php'), 'Node 3' => new \moodle_url('/page1.php'), ], ['Node 2', 'Node 3'] ], 'Item with identical action url and text exists in the secondary navigation menu.' => [ 'secondary', [ [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php') ], ], [ 'Node 1' => new \moodle_url('/page1.php'), 'Node 2' => new \moodle_url('/page2.php'), 'Node 3' => new \moodle_url('/page1.php'), ], ['Home', 'Node 1', 'Node 3'] ], 'Multiple items with identical action url and text exist in the secondary navigation menu.' => [ 'secondary', [ [ 'text' => 'Node 2', 'action' => new \moodle_url('/page2.php') ], [ 'text' => 'Node 3', 'action' => new \moodle_url('/page3.php') ], ], [ 'Node 1' => new \moodle_url('/page1.php'), 'Node 2' => "{$CFG->wwwroot}/page2.php", 'Node 3' => new \action_link(new \moodle_url('/page3.php'), 'Action link'), ], ['Home', 'Node 1'] ], 'No items with identical action url and text in the secondary navigation menu.' => [ 'secondary', [ [ 'text' => 'Node 4', 'action' => new \moodle_url('/page4.php') ], ], [ 'Node 1' => new \moodle_url('/page1.php'), 'Node 2' => new \moodle_url('/page2.php'), 'Node 3' => new \moodle_url('/page1.php'), ], ['Home', 'Node 1', 'Node 2', 'Node 3'] ], ]; } /** * Test the remove_items_that_exist_in_navigation function. * * @dataProvider remove_items_that_exist_in_navigation_provider * @param string $navmenu The name of the navigation menu we would like to use (primary or secondary) * @param array $navmenunodes The array containing the text and action of the nodes to be added to the navigation menu * @param array $navbarnodes Array containing the text => action of the nodes to be added to the navbar * @param array $expected Array containing the text of the expected navbar nodes after the filtering */ public function test_remove_items_that_exist_in_navigation(string $navmenu, array $navmenunodes, array $navbarnodes, array $expected) { global $PAGE; // Unfortunate hack needed because people use global $PAGE around the place. $PAGE->set_url('/'); $this->resetAfterTest(); $page = new \moodle_page(); $page->set_url('/'); switch ($navmenu) { case 'primary': $navigationmenu = new \core\navigation\views\primary($page); break; case 'secondary': $navigationmenu = new \core\navigation\views\secondary($page); } $navigationmenu->initialise(); // Add the additional nodes to the navigation menu. foreach ($navmenunodes as $navmenunode) { $navigationmenu->add($navmenunode['text'], $navmenunode['action'], \navigation_node::TYPE_CUSTOM); } // Add the additional navbar nodes. foreach ($navbarnodes as $text => $action) { $page->navbar->add($text, $action, \navigation_node::TYPE_CUSTOM); } $boostnavbar = $this->getMockBuilder(boostnavbar::class) ->disableOriginalConstructor() ->onlyMethods([]) ->getMock(); $rc = new \ReflectionClass(boostnavbar::class); $rcp = $rc->getProperty('items'); $rcp->setAccessible(true); $rcp->setValue($boostnavbar, $page->navbar->get_items()); // Make the call to the function. $rcm = $rc->getMethod('remove_items_that_exist_in_navigation'); $rcm->setAccessible(true); $rcm->invoke($boostnavbar, $navigationmenu); // Get the value for the class variable that the function modifies. $values = $rcp->getValue($boostnavbar); $actual = []; foreach ($values as $value) { $actual[] = $value->text; } $this->assertEquals($expected, $actual); } } boost/tests/scss_test.php 0000604 00000002650 15062070724 0011561 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. namespace theme_boost; /** * Unit tests for scss compilation. * * @package theme_boost * @copyright 2016 onwards Ankit Agarwal * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class scss_test extends \advanced_testcase { /** * Test that boost can be compiled using SassC (the defacto implemention). */ public function test_scss_compilation_with_sassc() { if (!defined('PHPUNIT_PATH_TO_SASSC')) { $this->markTestSkipped('Path to SassC not provided'); } $this->resetAfterTest(); set_config('pathtosassc', PHPUNIT_PATH_TO_SASSC); $this->assertNotEmpty( \theme_config::load('boost')->get_css_content_debug('scss', null, null) ); } } boost/tests/privacy/provider_test.php 0000604 00000005637 15062070724 0014125 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. namespace theme_boost\privacy; use context_user; use core_privacy\local\request\writer; /** * Privacy tests for theme_boost. * * @package theme_boost * @category test * @covers \theme_boost\privacy\provider * @copyright 2018 Adrian Greeve <adriangreeve.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class provider_test extends \core_privacy\tests\provider_testcase { /** * Data provider for {@see test_export_user_preferences} * * @return array[] */ public function export_user_preference_provider(): array { return [ 'Index drawer open' => [provider::DRAWER_OPEN_INDEX, true, 'privacy:drawerindexopen'], 'Index drawer closed' => [provider::DRAWER_OPEN_INDEX, false, 'privacy:drawerindexclosed'], 'Block drawer open' => [provider::DRAWER_OPEN_BLOCK, true, 'privacy:drawerblockopen'], 'Block drawer closed' => [provider::DRAWER_OPEN_BLOCK, false, 'privacy:drawerblockclosed'], ]; } /** * Test for provider::test_export_user_preferences(). * * @param string $preference * @param bool $value * @param string $expectdescription * * @dataProvider export_user_preference_provider */ public function test_export_user_preferences(string $preference, bool $value, string $expectdescription): void { $this->resetAfterTest(); // Test setup. $user = $this->getDataGenerator()->create_user(); $this->setUser($user); // Add a user home page preference for the User. set_user_preference($preference, $value, $user); // Test the user preferences export contains 1 user preference record for the User. provider::export_user_preferences($user->id); $writer = writer::with_context(context_user::instance($user->id)); $this->assertTrue($writer->has_any_data()); $exportedpreferences = $writer->get_user_preferences('theme_boost'); $this->assertCount(1, (array) $exportedpreferences); $this->assertEquals($value, (bool) $exportedpreferences->{$preference}->value); $this->assertEquals(get_string($expectdescription, 'theme_boost'), $exportedpreferences->{$preference}->description); } } boost/tests/behat/category_role_assignment.feature 0000604 00000003370 15062070724 0016564 0 ustar 00 @core @core_course @theme_boost Feature: Role assignments can be made at the category level In order to grant a user different capabilities As a user I can assign roles in categories Background: Given the following "users" exist: | username | firstname | lastname | | manager | Manager | Manager | And the following "categories" exist: | name | category | idnumber | | Cat 1 | 0 | CAT1 | And the following "role assigns" exist: | user | role | contextlevel | reference | | manager | manager | Category | CAT1 | And I log in as "admin" @javascript Scenario: A user with a category role can assign roles Given I define the allowed role assignments for the "Manager" role as: | Teacher | Assignable | And I log out And I log in as "manager" And I am on course index When I follow "Cat 1" And I navigate to "Permissions" in current page administration Then "Assign roles" "text" should exist in the ".tertiary-navigation" "css_element" @javascript Scenario: A user with a category role cannot assign roles if there are no roles to assign Given I define the allowed role assignments for the "Manager" role as: | Manager | Not assignable | | Course creator | Not assignable | | Teacher | Not assignable | | Non-editing teacher | Not assignable | | Student | Not assignable | And I change window size to "large" And I log out And I log in as "manager" And I am on course index When I follow "Cat 1" And I navigate to "Permissions" in current page administration Then "Assign roles" "text" should not exist in the ".tertiary-navigation" "css_element" boost/tests/behat/reset_tour.feature 0000604 00000002270 15062070724 0013667 0 ustar 00 @tool @tool_usertours @theme_boost Feature: Reset a tour for Boost In order to test a tour As an administrator I can reset the tour to force it to display again Background: Given I log in as "admin" And I add a new user tour with: | Name | First tour | | Description | My first tour | | Apply to URL match | FRONTPAGE | | Tour is enabled | 1 | | Show with backdrop | 1 | And I add steps to the "First tour" tour: | targettype | Title | id_content | Content type | | Display in middle of page | Welcome | Welcome tour. | Manual | @javascript Scenario: Reset the tour with desktop view # Changing the window size to large so we will have the footer button. Given I change window size to "large" And I am on site homepage And I should see "Welcome" And I press "Got it" And I should not see "Welcome" When I click on ".btn-footer-popover" "css_element" in the "#page-footer" "css_element" Then I should see "Reset user tour on this page" And I click on "Reset user tour on this page" "link" And I should see "Welcome" boost/tests/behat/welcome_to_moodle.feature 0000604 00000003050 15062070724 0015165 0 ustar 00 @javascript @theme_boost Feature: Welcome message on boost To be welcome in moodle As a User I need to see a welcome message on the first page Scenario: Login and be welcomed on the homepage Given the following config values are set as admin: | defaulthomepage | 0 | When I log in as "admin" Then I should not see "Acceptance test site" in the "page-header" "region" And I should see "Welcome, Admin!" in the "page-header" "region" And I reload the page And I should not see "Welcome, Admin!" in the "page-header" "region" And I should see "Acceptance test site" in the "page-header" "region" Scenario: Login and be welcomed on the dashboard Given the following config values are set as admin: | defaulthomepage | 1 | When I log in as "admin" Then I should not see "Dashboard" in the "page-header" "region" And I should see "Welcome, Admin!" in the "page-header" "region" And I reload the page And I should not see "Welcome, Admin!" in the "page-header" "region" And I should see "Dashboard" in the "page-header" "region" Scenario: Login and be welcomed on the my courses page Given the following config values are set as admin: | defaulthomepage | 3 | When I log in as "admin" Then I should not see "My courses" in the "page-header" "region" And I should see "Welcome, Admin!" in the "page-header" "region" And I reload the page And I should not see "Welcome, Admin!" in the "page-header" "region" And I should see "My courses" in the "page-header" "region" boost/tests/behat/tour_filter.feature 0000604 00000004017 15062070724 0014033 0 ustar 00 @tool @tool_usertours @theme_boost Feature: Apply tour filters to a tour for Classic In order to give more directed tours As an administrator I need to create a user tour specific to theme Classic @javascript Scenario: Add a tour for theme Classic Given I log in as "admin" And I add a new user tour with: | Name | First tour | | Description | My first tour | | Apply to URL match | /my/% | | Tour is enabled | 1 | | Theme | Classic | And I add steps to the "First tour" tour: | targettype | Title | id_content | Content type | | Display in middle of page | Welcome | Welcome to your personal learning space. We'd like to give you a quick tour to show you some of the areas you may find helpful | Manual | When I am on homepage Then I should not see "Welcome to your personal learning space. We'd like to give you a quick tour to show you some of the areas you may find helpful" @javascript Scenario: Add a tour for theme Boost Given I log in as "admin" And I add a new user tour with: | Name | First tour | | Description | My first tour | | Apply to URL match | /my/% | | Tour is enabled | 1 | | Theme | Boost | And I add steps to the "First tour" tour: | targettype | Title | id_content | Content type | | Display in middle of page | Welcome | Welcome to your personal learning space. We'd like to give you a quick tour to show you some of the areas you may find helpful | Manual | When I am on homepage Then I should see "Welcome to your personal learning space. We'd like to give you a quick tour to show you some of the areas you may find helpful" boost/tests/behat/languagemenu.feature 0000604 00000007576 15062070724 0014162 0 ustar 00 @javascript @theme_boost Feature: Language selector menu To be able to set the preferred language for the site As a user I need to be presented with a language selector menu Background: Given remote langimport tests are enabled And the following "courses" exist: | fullname | shortname | | Course 1 | C1 | And the following "users" exist: | username | firstname | lastname | email | | teacher1 | Teacher | 1 | teacher1@example.com | And the following "course enrolments" exist: | user | course | role | | teacher1 | C1 | editingteacher | And the following "language pack" exists: | language | en_ar | Scenario: Logged user is presented with a language selector which is placed within the user menu Given I log in as "teacher1" And I am on site homepage # The language selector menu is not present in the navbar when a user is logged in. And language selector menu should not exist in the navbar # The language selector is present within the user menu. And "Language" "link" should exist in the user menu When I follow "Language" in the user menu Then I should see "Language selector" user submenu And "English (en)" "link" should exist in the "Language selector" user submenu And "English (pirate) (en_ar)" "link" should exist in the "Language selector" user submenu Scenario: Non-logged user is presented with a language selector which is placed within the navbar Given I am on site homepage # The language selector menu is present in the navbar when a user is not logged in. And language selector menu should exist in the navbar And "English (en)" "link" should exist in the language selector menu And "English (pirate) (en_ar)" "link" should exist in the language selector menu Scenario: Logged user is not presented with a language selector in a course if a language is forced in that context Given I log in as "teacher1" And I am on "Course 1" course homepage And I navigate to "Settings" in current page administration And I expand all fieldsets And I set the following fields to these values: | id_lang | en | And I press "Save and display" # The language selector is not present within the user menu in the course context when a language is enforced. When I am on "Course 1" course homepage And "Language" "link" should not exist in the user menu # The language selector is present within the user menu in other contexts. And I am on site homepage And "Language" "link" should exist in the user menu Scenario: Logged user is not presented with a language selector if there is less than two installed languages Given I log in as "admin" And I navigate to "Language > Language packs" in site administration And I set the field "Installed language packs" to "en_ar" And I press "Uninstall selected language pack(s)" And I click on "Yes" "button" in the "Uninstall selected language pack(s)" "dialogue" And the "Installed language packs" select box should not contain "en_ar" When I am on site homepage # The language selector is not present within the user menu. And "Language" "link" should not exist in the user menu Scenario: Non-logged user is not presented with a language selector if there is less than two installed languages Given I log in as "admin" And I navigate to "Language > Language packs" in site administration And I set the field "Installed language packs" to "en_ar" And I press "Uninstall selected language pack(s)" And I click on "Yes" "button" in the "Uninstall selected language pack(s)" "dialogue" And the "Installed language packs" select box should not contain "en_ar" And I log out When I am on site homepage # The language selector menu is not present in the navbar. Then language selector menu should not exist in the navbar boost/tests/behat/contextmenu.feature 0000604 00000002077 15062070724 0014052 0 ustar 00 @javascript @theme_boost Feature: Context settings menu To navigate in boost theme I need to use the context settings menu Background: Given the following "courses" exist: | fullname | shortname | | Course 1 | C1 | And the following "users" exist: | username | firstname | lastname | email | | teacher1 | Teacher | 1 | teacher1@example.com | | student1 | Student | 1 | student1@example.com | And the following "course enrolments" exist: | user | course | role | | teacher1 | C1 | editingteacher | | student1 | C1 | student | Scenario: Teacher can use the context settings menu And I log in as "teacher1" And I am on "Course 1" course homepage And I navigate to "Settings" in current page administration And I should see "Edit course settings" And I log out Scenario: Student cannot use the context settings menu And I log in as "student1" And I am on "Course 1" course homepage And ".context-header-settings-menu [role=button]" "css_element" should not exist And I log out boost/tests/behat/mycoursesblocks.feature 0000604 00000002660 15062070724 0014726 0 ustar 00 @javascript @theme_boost Feature: My courses page block layout in Boost theme In order to have a clear and consistent view on the my courses page As a student I need to see the blocks in the expected placement Background: Given the following "users" exist: | username | firstname | lastname | email | | student1 | Student | 1 | student@example.com | And I log in as "admin" And I am on site homepage And I turn editing mode on And I add the "Text" block to the default region with: | Text block title | Text on all pages | | Content | This is visible on all pages | And I configure the "Text on all pages" block And I set the following fields to these values: | Page contexts | Display throughout the entire site | | Default region | Right | And I click on "Save changes" "button" in the "Configure Text on all pages block" "dialogue" Scenario: Student can see relevant blocks with correct placement on my courses page When I log in as "student1" And I am on the "My courses" page Then "Course overview" "text" should exist in the "region-main" "region" And I should see "This is visible on all pages" And I press "Close block drawer" And "Course overview" "text" should exist in the "region-main" "region" And I should not see "This is visible on all pages" boost/tests/behat/addblock.feature 0000604 00000003256 15062070724 0013244 0 ustar 00 @javascript @theme_boost Feature: Add a block using boost theme In order to decide the blocks to display in the Add a block list for a theme As an administrator I need to define them using the unaddableblocks setting Background: Given the following "courses" exist: | fullname | shortname | | Course 1 | C1 | And I log in as "admin" Scenario: Default blocks defined in unaddableblocks settings are not displayed in the Add a block list Given I am on "Course 1" course homepage with editing mode on When I click on "Add a block" "link" Then I should not see "Administration" And I should not see "Navigation" And I should not see "Courses" And I should not see "Section links" And I should see "Online users" Scenario: Admins can change unaddable blocks using the unaddableblocks setting Given the following config values are set as admin: | unaddableblocks | settings,private_files | theme_boost| And I am on "Course 1" course homepage with editing mode on When I click on "Add a block" "link" Then I should not see "Administration" And I should not see "Private files" And I should see "Navigation" And I should see "Courses" And I should see "Section links" Scenario: If unaddableblocks settting is empty, no block is excluded from the Add a block list Given the following config values are set as admin: | unaddableblocks | | theme_boost| And I am on "Course 1" course homepage with editing mode on When I click on "Add a block" "link" Then I should see "Administration" And I should see "Navigation" And I should see "Courses" And I should see "Section links" boost/tests/behat/regionmainsettingsmenu.feature 0000604 00000002325 15062070724 0016273 0 ustar 00 @javascript @theme_boost Feature: Region main settings menu To navigate in boost theme I need to use the region main settings menu Background: Given the following "courses" exist: | fullname | shortname | newsitems | | Course 1 | C1 | 5 | And the following "users" exist: | username | firstname | lastname | email | | teacher1 | Teacher | 1 | teacher1@example.com | | student1 | Student | 1 | student1@example.com | And the following "course enrolments" exist: | user | course | role | | teacher1 | C1 | editingteacher | | student1 | C1 | student | And the following "activities" exist: | activity | name | intro | course | idnumber | option | | choice | Choice name | Test choice description | C1 | choice1 | Option 1, Option 2, Option 3 | Scenario: Student cannot use all options in the region main settings menu Given I log in as "student1" When I am on "Course 1" course homepage Then "#region-main-settings-menu [role=button]" "css_element" should not exist And I am on the "Choice name" "Choice activity" page And "#region-main-settings-menu [role=button]" "css_element" should not exist boost/tests/behat/settingstabs.feature 0000604 00000001660 15062070724 0014210 0 ustar 00 @javascript @theme_boost Feature: Administration nav tabs Scenario: See last opened tab in site admin when returning to the page Given I log in as "admin" And I am on site homepage And I click on "Site administration" "link" And I click on "Users" "link" And I click on "Browse list of users" "link" And I should see "New filter" When I press the "back" button in the browser Then I should see "Cohorts" Scenario: Navigate back to specific tab after search Given I log in as "admin" And I am on site homepage And I click on "Site administration" "link" And I set the field "Search" to "assignment" And I press "Search" # I should be redirected to the site admin tab with the complete list under it. # Testing the existence of at least one of the options in the node is sufficient. When I select "Users" from secondary navigation Then I should see "Browse list of users" boost/tests/behat/behat_theme_boost_behat_navigation.php 0000604 00000010402 15062070724 0017661 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. // NOTE: no MOODLE_INTERNAL test here, this file may be required by behat before including /config.php. // For that reason, we can't even rely on $CFG->admin being available here. require_once(__DIR__ . '/../../../../lib/tests/behat/behat_navigation.php'); use Behat\Mink\Exception\ElementNotFoundException as ElementNotFoundException; use Behat\Mink\Exception\ExpectationException as ExpectationException; /** * Step definitions related to the navigation in the Boost theme. * * @package theme_boost * @category test * @copyright 2021 Mihail Geshoski * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class behat_theme_boost_behat_navigation extends behat_navigation { /** * Checks whether a node is active in the navbar. * * @override i should see :name is active in navigation * * @throws ElementNotFoundException * @param string $element The name of the nav elemnent to look for. * @return void */ public function i_should_see_is_active_in_navigation($element) { $this->execute("behat_general::assert_element_contains_text", [$element, '.navbar .nav-link.active', 'css_element']); } /** * Checks whether a node is active in the secondary nav. * * @Given i should see :name is active in secondary navigation * @throws ElementNotFoundException * @param string $element The name of the nav elemnent to look for. * @return void */ public function i_should_see_is_active_in_secondary_navigation($element) { $this->execute("behat_general::assert_element_contains_text", [$element, '.secondary-navigation .nav-link.active', 'css_element']); } /** * Checks whether the language selector menu is present in the navbar. * * @Given language selector menu should exist in the navbar * @Given language selector menu should :not exist in the navbar * * @throws ElementNotFoundException * @param string|null $not Instructs to checks whether the element does not exist in the user menu, if defined * @return void */ public function lang_menu_should_exist($not = null) { $callfunction = is_null($not) ? 'should_exist' : 'should_not_exist'; $this->execute("behat_general::{$callfunction}", [$this->get_lang_menu_xpath(), 'xpath_element']); } /** * Checks whether an item exists in the language selector menu. * * @Given :itemtext :selectortype should exist in the language selector menu * @Given :itemtext :selectortype should :not exist in the language selector menu * * @throws ElementNotFoundException * @param string $itemtext The menu item to find * @param string $selectortype The selector type * @param string|null $not Instructs to checks whether the element does not exist in the user menu, if defined * @return void */ public function should_exist_in_lang_menu($itemtext, $selectortype, $not = null) { $callfunction = is_null($not) ? 'should_exist_in_the' : 'should_not_exist_in_the'; $this->execute("behat_general::{$callfunction}", [$itemtext, $selectortype, $this->get_lang_menu_xpath(), 'xpath_element']); } /** * Return the xpath for the language selector menu element. * * @return string The xpath */ protected function get_lang_menu_xpath() { return "//nav[contains(concat(' ', @class, ' '), ' navbar ')]" . "//div[contains(concat(' ', @class, ' '), ' langmenu ')]" . "//div[contains(concat(' ', @class, ' '), ' dropdown-menu ')]"; } } boost/tests/behat/blacklist.json 0000604 00000000743 15062070724 0012765 0 ustar 00 { "features": [ "lib/tests/behat/action_menu.feature", "blocks/tests/behat/hide_blocks.feature", "blocks/tests/behat/move_blocks.feature", "course/tests/behat/activity_navigation.feature", "course/tests/behat/activity_navigation_with_restrictions.feature", "course/tests/behat/paged_course_navigation.feature", "course/tests/behat/section_visibility.feature", "mod/page/tests/behat/page_appearance.feature" ] } boost/tests/behat/primarynav.feature 0000604 00000012677 15062070724 0013700 0 ustar 00 @javascript @theme_boost Feature: Primary navigation To navigate in boost theme As a user I need to use the primary navigation Background: Given the following "users" exist: | username | firstname | lastname | email | | user1 | User | One | user1@example.com | @javascript @theme_boost Scenario Outline: Admin sets defaulthomepage and verify the landing page and site home link Given I log in as "admin" And the following config values are set as admin: | defaulthomepage | <defaulthomepageset> | And I am on homepage And I should see "<homepage>" in the "a.nav-link.active:not([tabindex])" "css_element" And I should see "<sitehome>" in the "<linkelement>" "css_element" Examples: | defaulthomepageset | homepage | sitehome | linkelement | | 0 | Home | Home | a.nav-link.active:not([tabindex]):not([href*='redirect=0']) | | 1 | Dashboard | Home | a.nav-link[tabindex='-1'][href$='redirect=0'] | | 3 | My courses | Home | a.nav-link[tabindex='-1'][href$='redirect=0'] | @javascript @theme_boost Scenario Outline: Admin sets defaulthomepage to user preference and verifies the landing page based on it Given I log in as "admin" And I navigate to "Appearance > Navigation" in site administration And I set the field "Start page for users" to "User preference" And I press "Save changes" And I follow "Preferences" in the user menu And I follow "Start page" And I set the field "Start page" to "<userpreference>" And I press "Save changes" And the following config values are set as admin: | defaulthomepage | 2 | And I log out And I log in as "admin" And I should see "<homepage>" in the "a.nav-link.active:not([tabindex])" "css_element" Examples: | userpreference | homepage | | Home | Home | | Dashboard | Dashboard | | My courses | My courses | @javascript @theme_boost Scenario: Users could use primary nav menu on mobile size screens Given I change window size to "mobile" And I am on the "My courses" page logged in as "user1" Then "Home" "link" should not be visible And "Side panel" "button" should exist And I click on "Side panel" "button" And I should see "Home" in the "theme_boost-drawers-primary" "region" @theme_boost Scenario: Guest users can only see the Home item in the primary navigation menu Given I log in as "guest" When I am on site homepage Then I should see "Home" in the ".primary-navigation" "css_element" And I should not see "Dashboard" in the ".primary-navigation" "css_element" And I should not see "My courses" in the ".primary-navigation" "css_element" And I should not see "Site administration" in the ".primary-navigation" "css_element" Scenario: Dashboard is not displayed in the primary navigation when it is disabled Given the following config values are set as admin: | enabledashboard | 0 | When I am on the "My courses" page logged in as "user1" Then I should not see "Dashboard" And the following config values are set as admin: | enabledashboard | 1 | # We need to reload the page to skip the "Welcome, xxxx!" and display the real page title. And I reload the page And I should see "Dashboard" Scenario: Start page when default home is dashboard but dashboard is disabled Given the following config values are set as admin: | enabledashboard | 0 | # 1 = Dashboard. | defaulthomepage | 1 | When I log in as "admin" # We need to reload the page to skip the "Welcome, xxxx!" and display the real page title. And I reload the page Then I should not see "Dashboard" in the "page-header" "region" And I should see "My courses" in the "page-header" "region" And I log out # Check dashboard is displayed when it's re-enabled. And the following config values are set as admin: | enabledashboard | 1 | And I log in as "admin" # We need to reload the page to skip the "Welcome, xxxx!" and display the real page title. And I reload the page And I should see "Dashboard" in the "page-header" "region" And I should not see "My courses" in the "page-header" "region" Scenario: Start page when default home is user preference set to dashboard but dashboard is disabled Given the following config values are set as admin: | enabledashboard | 0 | # 2 = User preference. | defaulthomepage | 2 | # 1 = Dashboard. And the following "user preferences" exist: | user | preference | value | | admin | user_home_page_preference | 1 | When I log in as "admin" # We need to reload the page to skip the "Welcome, xxxx!" and display the real page title. And I reload the page Then I should not see "Dashboard" And I should see "My courses" in the "page-header" "region" And I log out # Check dashboard is displayed when it's re-enabled. And the following config values are set as admin: | enabledashboard | 1 | And I log in as "admin" # We need to reload the page to skip the "Welcome, xxxx!" and display the real page title. And I reload the page And I should see "Dashboard" in the "page-header" "region" And I should not see "My courses" in the "page-header" "region" boost/tests/behat/breadcrumb.feature 0000604 00000010622 15062070724 0013602 0 ustar 00 @javascript @theme_boost Feature: Breadcrumbs navigation To navigate in boost theme As an admin user I should see breadcrumbs Scenario: Admin user navigates to site administrations plugins assignment settings Given I log in as "admin" When I navigate to "Plugins > Activity modules > Assignment > Assignment settings" in site administration Then I should see "Activity modules" in the ".breadcrumb" "css_element" And I should see "Assignment" in the ".breadcrumb" "css_element" And I should see "Assignment settings" in the ".breadcrumb" "css_element" Scenario: Admin user navigates to site adminsitrations plugins assignment feedback offline grading worksheet Given I log in as "admin" When I navigate to "Plugins > Activity modules > Assignment > Feedback plugins > Offline grading worksheet" in site administration Then I should see "Activity modules" in the ".breadcrumb" "css_element" And I should see "Assignment" in the ".breadcrumb" "css_element" And I should see "Feedback plugins" in the ".breadcrumb" "css_element" And I should see "Offline grading worksheet" in the ".breadcrumb" "css_element" Scenario: Admin user navigates to site adminsitrations plugins badges manage backpacks page Given I log in as "admin" When I navigate to "Badges > Manage backpacks" in site administration Then I should see "Badges" in the ".breadcrumb" "css_element" And I should see "Manage backpacks" in the ".breadcrumb" "css_element" Scenario: Admin user changes the default home page and navigates to 'course category management' page Given the following config values are set as admin: | defaulthomepage | 3 | And the following "categories" exist: | name | category | idnumber | | Cat 1 | 0 | CAT1 | And I log in as "admin" And I navigate to "Courses > Manage courses and categories" in site administration When I follow "Cat 1" Then I should not see "My courses" in the ".breadcrumb" "css_element" And I should see "Cat 1" in the ".breadcrumb" "css_element" And I should see "Manage courses and categories" in the ".breadcrumb" "css_element" Scenario: Admin user sets the default home page to 'Site' and navigates to its 'Preferences' and 'Private files' page Given the following config values are set as admin: | defaulthomepage | 0 | And I log in as "admin" When I follow "Preferences" in the user menu # There should be no breadcrumbs on this page. Then ".breadcrumb-item" "css_element" should not exist in the ".breadcrumb" "css_element" Scenario: Admin user sets the default home page to 'Dashboard' and navigates to its 'Preferences' and 'Private files' page Given the following config values are set as admin: | defaulthomepage | 1 | And I log in as "admin" When I follow "Preferences" in the user menu # There should be no breadcrumbs on this page. Then ".breadcrumb-item" "css_element" should not exist in the ".breadcrumb" "css_element" And I follow "Private files" in the user menu # There should be no breadcrumbs on this page. And ".breadcrumb-item" "css_element" should not exist in the ".breadcrumb" "css_element" Scenario: Admin user sets the default home page to 'User preference' and navigates to its 'Preferences' and 'Private files' page Given the following config values are set as admin: | defaulthomepage | 2 | And I log in as "admin" When I follow "Preferences" in the user menu # There should be no breadcrumbs on this page. Then ".breadcrumb-item" "css_element" should not exist in the ".breadcrumb" "css_element" And I follow "Private files" in the user menu # There should be no breadcrumbs on this page. And ".breadcrumb-item" "css_element" should not exist in the ".breadcrumb" "css_element" Scenario: Admin user sets the default home page to 'My courses' and navigates to its 'Preferences' and 'Private files' page Given the following config values are set as admin: | defaulthomepage | 3 | And I log in as "admin" When I follow "Preferences" in the user menu # There should be no breadcrumbs on this page. Then ".breadcrumb-item" "css_element" should not exist in the ".breadcrumb" "css_element" And I follow "Private files" in the user menu # There should be no breadcrumbs on this page. And ".breadcrumb-item" "css_element" should not exist in the ".breadcrumb" "css_element" boost/tests/behat/course_reuse.feature 0000604 00000003347 15062070724 0014205 0 ustar 00 @javascript @theme_boost Feature: Course reuse navigation As a teacher I can navigate to course reuse pages Background: Given the following "courses" exist: | fullname | shortname | newsitems | | Course 1 | C1 | 5 | And the following "users" exist: | username | firstname | lastname | email | | teacher1 | Teacher | 1 | teacher1@example.com | And the following "course enrolments" exist: | user | course | role | | teacher1 | C1 | editingteacher | Scenario: A Teacher can navigate to the course Import page. Given I log in as "teacher1" When I am on "Course 1" course homepage And I navigate to "Course reuse" in current page administration Then I should see "Find a course to import data from:" Scenario Outline: A Teacher can navigate to other Course reuse pages. Given I log in as "teacher1" When I am on "Course 1" course homepage And I navigate to "Course reuse" in current page administration And I select "<adminpage>" from the "jump" singleselect Then I should see "<title>" Examples: | adminpage | title | | Backup | Backup settings | | Restore | Import a backup file | | Import | Find a course to import data from: | | Reset | Reset course | Scenario: An Administrator can view the course copy page. Given I log in as "admin" When I am on "Course 1" course homepage And I navigate to "Course reuse" in current page administration And I select "Copy course" from the "jump" singleselect Then I should see "This course will be duplicated and put into the selected course category" boost/scss/bootstrap.scss 0000604 00000000063 15062070724 0011555 0 ustar 00 // Import Bootstrap. @import "bootstrap/bootstrap"; boost/scss/fontawesome/LICENSE.txt 0000604 00000016403 15062070724 0013022 0 ustar 00 Fonticons, Inc. (https://fontawesome.com) -------------------------------------------------------------------------------- Font Awesome Free License Font Awesome Free is free, open source, and GPL friendly. You can use it for commercial projects, open source projects, or really almost whatever you want. Full Font Awesome Free license: https://fontawesome.com/license/free. -------------------------------------------------------------------------------- # Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) The Font Awesome Free download is licensed under a Creative Commons Attribution 4.0 International License and applies to all icons packaged as SVG and JS file types. -------------------------------------------------------------------------------- # Fonts: SIL OFL 1.1 License In the Font Awesome Free download, the SIL OFL license applies to all icons packaged as web and desktop font files. Copyright (c) 2023 Fonticons, Inc. (https://fontawesome.com) with Reserved Font Name: "Font Awesome". This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting — in part or in whole — any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. -------------------------------------------------------------------------------- # Code: MIT License (https://opensource.org/licenses/MIT) In the Font Awesome Free download, the MIT license applies to all non-font and non-icon files. Copyright 2023 Fonticons, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- # Attribution Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font Awesome Free files already contain embedded comments with sufficient attribution, so you shouldn't need to do anything additional when using these files normally. We've kept attribution comments terse, so we ask that you do not actively work to remove them from files, especially code. They're a great way for folks to learn about Font Awesome. -------------------------------------------------------------------------------- # Brand Icons All brand icons are trademarks of their respective owners. The use of these trademarks does not indicate endorsement of the trademark holder by Font Awesome, nor vice versa. **Please do not use brand logos for any purpose except to represent the company, product, or service to which they refer.** boost/scss/fontawesome/solid.scss 0000604 00000001344 15062070724 0013204 0 ustar 00 /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ @import 'functions'; @import 'variables'; :root, :host { --#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }'; --#{$fa-css-prefix}-font-solid: normal 900 1em/1 '#{ $fa-style-family }'; } @font-face { font-family: 'Font Awesome 6 Free'; font-style: normal; font-weight: 900; font-display: $fa-font-display; src: url('[[font:core|fa-solid-900.woff2]]') format('woff2'), url('[[font:core|fa-solid-900.ttf]]') format('truetype'); } .fas, .#{$fa-css-prefix}-solid { font-weight: 900; } boost/scss/fontawesome/fontawesome.scss 0000604 00000001064 15062070724 0014420 0 ustar 00 /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ // Font Awesome core compile (Web Fonts-based) // ------------------------- @import 'functions'; @import 'variables'; @import 'mixins'; @import 'core'; @import 'sizing'; @import 'fixed-width'; @import 'list'; @import 'bordered-pulled'; @import 'animated'; @import 'rotated-flipped'; @import 'stacked'; @import 'icons'; @import 'screen-reader'; boost/scss/fontawesome/_variables.scss 0000604 00000473553 15062070724 0014220 0 ustar 00 // variables // -------------------------- $fa-css-prefix : fa !default; $fa-style : 900 !default; $fa-style-family : "Font Awesome 6 Free" !default; $fa-display : inline-block !default; $fa-fw-width : fa-divide(20em, 16) !default; $fa-inverse : #fff !default; $fa-border-color : #eee !default; $fa-border-padding : .2em .25em .15em !default; $fa-border-radius : .1em !default; $fa-border-style : solid !default; $fa-border-width : .08em !default; $fa-size-scale-2xs : 10 !default; $fa-size-scale-xs : 12 !default; $fa-size-scale-sm : 14 !default; $fa-size-scale-base : 16 !default; $fa-size-scale-lg : 20 !default; $fa-size-scale-xl : 24 !default; $fa-size-scale-2xl : 32 !default; $fa-sizes: ( "2xs" : $fa-size-scale-2xs, "xs" : $fa-size-scale-xs, "sm" : $fa-size-scale-sm, "lg" : $fa-size-scale-lg, "xl" : $fa-size-scale-xl, "2xl" : $fa-size-scale-2xl ) !default; $fa-li-width : 2em !default; $fa-li-margin : $fa-li-width * fa-divide(5, 4) !default; $fa-pull-margin : .3em !default; $fa-primary-opacity : 1 !default; $fa-secondary-opacity : .4 !default; $fa-stack-vertical-align: middle !default; $fa-stack-width : ($fa-fw-width * 2) !default; $fa-stack-z-index : auto !default; $fa-font-display : block !default; $fa-font-path : "../webfonts" !default; $fa-var-0: \30; $fa-var-1: \31; $fa-var-2: \32; $fa-var-3: \33; $fa-var-4: \34; $fa-var-5: \35; $fa-var-6: \36; $fa-var-7: \37; $fa-var-8: \38; $fa-var-9: \39; $fa-var-fill-drip: \f576; $fa-var-arrows-to-circle: \e4bd; $fa-var-circle-chevron-right: \f138; $fa-var-chevron-circle-right: \f138; $fa-var-at: \40; $fa-var-trash-can: \f2ed; $fa-var-trash-alt: \f2ed; $fa-var-text-height: \f034; $fa-var-user-xmark: \f235; $fa-var-user-times: \f235; $fa-var-stethoscope: \f0f1; $fa-var-message: \f27a; $fa-var-comment-alt: \f27a; $fa-var-info: \f129; $fa-var-down-left-and-up-right-to-center: \f422; $fa-var-compress-alt: \f422; $fa-var-explosion: \e4e9; $fa-var-file-lines: \f15c; $fa-var-file-alt: \f15c; $fa-var-file-text: \f15c; $fa-var-wave-square: \f83e; $fa-var-ring: \f70b; $fa-var-building-un: \e4d9; $fa-var-dice-three: \f527; $fa-var-calendar-days: \f073; $fa-var-calendar-alt: \f073; $fa-var-anchor-circle-check: \e4aa; $fa-var-building-circle-arrow-right: \e4d1; $fa-var-volleyball: \f45f; $fa-var-volleyball-ball: \f45f; $fa-var-arrows-up-to-line: \e4c2; $fa-var-sort-down: \f0dd; $fa-var-sort-desc: \f0dd; $fa-var-circle-minus: \f056; $fa-var-minus-circle: \f056; $fa-var-door-open: \f52b; $fa-var-right-from-bracket: \f2f5; $fa-var-sign-out-alt: \f2f5; $fa-var-atom: \f5d2; $fa-var-soap: \e06e; $fa-var-icons: \f86d; $fa-var-heart-music-camera-bolt: \f86d; $fa-var-microphone-lines-slash: \f539; $fa-var-microphone-alt-slash: \f539; $fa-var-bridge-circle-check: \e4c9; $fa-var-pump-medical: \e06a; $fa-var-fingerprint: \f577; $fa-var-hand-point-right: \f0a4; $fa-var-magnifying-glass-location: \f689; $fa-var-search-location: \f689; $fa-var-forward-step: \f051; $fa-var-step-forward: \f051; $fa-var-face-smile-beam: \f5b8; $fa-var-smile-beam: \f5b8; $fa-var-flag-checkered: \f11e; $fa-var-football: \f44e; $fa-var-football-ball: \f44e; $fa-var-school-circle-exclamation: \e56c; $fa-var-crop: \f125; $fa-var-angles-down: \f103; $fa-var-angle-double-down: \f103; $fa-var-users-rectangle: \e594; $fa-var-people-roof: \e537; $fa-var-people-line: \e534; $fa-var-beer-mug-empty: \f0fc; $fa-var-beer: \f0fc; $fa-var-diagram-predecessor: \e477; $fa-var-arrow-up-long: \f176; $fa-var-long-arrow-up: \f176; $fa-var-fire-flame-simple: \f46a; $fa-var-burn: \f46a; $fa-var-person: \f183; $fa-var-male: \f183; $fa-var-laptop: \f109; $fa-var-file-csv: \f6dd; $fa-var-menorah: \f676; $fa-var-truck-plane: \e58f; $fa-var-record-vinyl: \f8d9; $fa-var-face-grin-stars: \f587; $fa-var-grin-stars: \f587; $fa-var-bong: \f55c; $fa-var-spaghetti-monster-flying: \f67b; $fa-var-pastafarianism: \f67b; $fa-var-arrow-down-up-across-line: \e4af; $fa-var-spoon: \f2e5; $fa-var-utensil-spoon: \f2e5; $fa-var-jar-wheat: \e517; $fa-var-envelopes-bulk: \f674; $fa-var-mail-bulk: \f674; $fa-var-file-circle-exclamation: \e4eb; $fa-var-circle-h: \f47e; $fa-var-hospital-symbol: \f47e; $fa-var-pager: \f815; $fa-var-address-book: \f2b9; $fa-var-contact-book: \f2b9; $fa-var-strikethrough: \f0cc; $fa-var-k: \4b; $fa-var-landmark-flag: \e51c; $fa-var-pencil: \f303; $fa-var-pencil-alt: \f303; $fa-var-backward: \f04a; $fa-var-caret-right: \f0da; $fa-var-comments: \f086; $fa-var-paste: \f0ea; $fa-var-file-clipboard: \f0ea; $fa-var-code-pull-request: \e13c; $fa-var-clipboard-list: \f46d; $fa-var-truck-ramp-box: \f4de; $fa-var-truck-loading: \f4de; $fa-var-user-check: \f4fc; $fa-var-vial-virus: \e597; $fa-var-sheet-plastic: \e571; $fa-var-blog: \f781; $fa-var-user-ninja: \f504; $fa-var-person-arrow-up-from-line: \e539; $fa-var-scroll-torah: \f6a0; $fa-var-torah: \f6a0; $fa-var-broom-ball: \f458; $fa-var-quidditch: \f458; $fa-var-quidditch-broom-ball: \f458; $fa-var-toggle-off: \f204; $fa-var-box-archive: \f187; $fa-var-archive: \f187; $fa-var-person-drowning: \e545; $fa-var-arrow-down-9-1: \f886; $fa-var-sort-numeric-desc: \f886; $fa-var-sort-numeric-down-alt: \f886; $fa-var-face-grin-tongue-squint: \f58a; $fa-var-grin-tongue-squint: \f58a; $fa-var-spray-can: \f5bd; $fa-var-truck-monster: \f63b; $fa-var-w: \57; $fa-var-earth-africa: \f57c; $fa-var-globe-africa: \f57c; $fa-var-rainbow: \f75b; $fa-var-circle-notch: \f1ce; $fa-var-tablet-screen-button: \f3fa; $fa-var-tablet-alt: \f3fa; $fa-var-paw: \f1b0; $fa-var-cloud: \f0c2; $fa-var-trowel-bricks: \e58a; $fa-var-face-flushed: \f579; $fa-var-flushed: \f579; $fa-var-hospital-user: \f80d; $fa-var-tent-arrow-left-right: \e57f; $fa-var-gavel: \f0e3; $fa-var-legal: \f0e3; $fa-var-binoculars: \f1e5; $fa-var-microphone-slash: \f131; $fa-var-box-tissue: \e05b; $fa-var-motorcycle: \f21c; $fa-var-bell-concierge: \f562; $fa-var-concierge-bell: \f562; $fa-var-pen-ruler: \f5ae; $fa-var-pencil-ruler: \f5ae; $fa-var-people-arrows: \e068; $fa-var-people-arrows-left-right: \e068; $fa-var-mars-and-venus-burst: \e523; $fa-var-square-caret-right: \f152; $fa-var-caret-square-right: \f152; $fa-var-scissors: \f0c4; $fa-var-cut: \f0c4; $fa-var-sun-plant-wilt: \e57a; $fa-var-toilets-portable: \e584; $fa-var-hockey-puck: \f453; $fa-var-table: \f0ce; $fa-var-magnifying-glass-arrow-right: \e521; $fa-var-tachograph-digital: \f566; $fa-var-digital-tachograph: \f566; $fa-var-users-slash: \e073; $fa-var-clover: \e139; $fa-var-reply: \f3e5; $fa-var-mail-reply: \f3e5; $fa-var-star-and-crescent: \f699; $fa-var-house-fire: \e50c; $fa-var-square-minus: \f146; $fa-var-minus-square: \f146; $fa-var-helicopter: \f533; $fa-var-compass: \f14e; $fa-var-square-caret-down: \f150; $fa-var-caret-square-down: \f150; $fa-var-file-circle-question: \e4ef; $fa-var-laptop-code: \f5fc; $fa-var-swatchbook: \f5c3; $fa-var-prescription-bottle: \f485; $fa-var-bars: \f0c9; $fa-var-navicon: \f0c9; $fa-var-people-group: \e533; $fa-var-hourglass-end: \f253; $fa-var-hourglass-3: \f253; $fa-var-heart-crack: \f7a9; $fa-var-heart-broken: \f7a9; $fa-var-square-up-right: \f360; $fa-var-external-link-square-alt: \f360; $fa-var-face-kiss-beam: \f597; $fa-var-kiss-beam: \f597; $fa-var-film: \f008; $fa-var-ruler-horizontal: \f547; $fa-var-people-robbery: \e536; $fa-var-lightbulb: \f0eb; $fa-var-caret-left: \f0d9; $fa-var-circle-exclamation: \f06a; $fa-var-exclamation-circle: \f06a; $fa-var-school-circle-xmark: \e56d; $fa-var-arrow-right-from-bracket: \f08b; $fa-var-sign-out: \f08b; $fa-var-circle-chevron-down: \f13a; $fa-var-chevron-circle-down: \f13a; $fa-var-unlock-keyhole: \f13e; $fa-var-unlock-alt: \f13e; $fa-var-cloud-showers-heavy: \f740; $fa-var-headphones-simple: \f58f; $fa-var-headphones-alt: \f58f; $fa-var-sitemap: \f0e8; $fa-var-circle-dollar-to-slot: \f4b9; $fa-var-donate: \f4b9; $fa-var-memory: \f538; $fa-var-road-spikes: \e568; $fa-var-fire-burner: \e4f1; $fa-var-flag: \f024; $fa-var-hanukiah: \f6e6; $fa-var-feather: \f52d; $fa-var-volume-low: \f027; $fa-var-volume-down: \f027; $fa-var-comment-slash: \f4b3; $fa-var-cloud-sun-rain: \f743; $fa-var-compress: \f066; $fa-var-wheat-awn: \e2cd; $fa-var-wheat-alt: \e2cd; $fa-var-ankh: \f644; $fa-var-hands-holding-child: \e4fa; $fa-var-asterisk: \2a; $fa-var-square-check: \f14a; $fa-var-check-square: \f14a; $fa-var-peseta-sign: \e221; $fa-var-heading: \f1dc; $fa-var-header: \f1dc; $fa-var-ghost: \f6e2; $fa-var-list: \f03a; $fa-var-list-squares: \f03a; $fa-var-square-phone-flip: \f87b; $fa-var-phone-square-alt: \f87b; $fa-var-cart-plus: \f217; $fa-var-gamepad: \f11b; $fa-var-circle-dot: \f192; $fa-var-dot-circle: \f192; $fa-var-face-dizzy: \f567; $fa-var-dizzy: \f567; $fa-var-egg: \f7fb; $fa-var-house-medical-circle-xmark: \e513; $fa-var-campground: \f6bb; $fa-var-folder-plus: \f65e; $fa-var-futbol: \f1e3; $fa-var-futbol-ball: \f1e3; $fa-var-soccer-ball: \f1e3; $fa-var-paintbrush: \f1fc; $fa-var-paint-brush: \f1fc; $fa-var-lock: \f023; $fa-var-gas-pump: \f52f; $fa-var-hot-tub-person: \f593; $fa-var-hot-tub: \f593; $fa-var-map-location: \f59f; $fa-var-map-marked: \f59f; $fa-var-house-flood-water: \e50e; $fa-var-tree: \f1bb; $fa-var-bridge-lock: \e4cc; $fa-var-sack-dollar: \f81d; $fa-var-pen-to-square: \f044; $fa-var-edit: \f044; $fa-var-car-side: \f5e4; $fa-var-share-nodes: \f1e0; $fa-var-share-alt: \f1e0; $fa-var-heart-circle-minus: \e4ff; $fa-var-hourglass-half: \f252; $fa-var-hourglass-2: \f252; $fa-var-microscope: \f610; $fa-var-sink: \e06d; $fa-var-bag-shopping: \f290; $fa-var-shopping-bag: \f290; $fa-var-arrow-down-z-a: \f881; $fa-var-sort-alpha-desc: \f881; $fa-var-sort-alpha-down-alt: \f881; $fa-var-mitten: \f7b5; $fa-var-person-rays: \e54d; $fa-var-users: \f0c0; $fa-var-eye-slash: \f070; $fa-var-flask-vial: \e4f3; $fa-var-hand: \f256; $fa-var-hand-paper: \f256; $fa-var-om: \f679; $fa-var-worm: \e599; $fa-var-house-circle-xmark: \e50b; $fa-var-plug: \f1e6; $fa-var-chevron-up: \f077; $fa-var-hand-spock: \f259; $fa-var-stopwatch: \f2f2; $fa-var-face-kiss: \f596; $fa-var-kiss: \f596; $fa-var-bridge-circle-xmark: \e4cb; $fa-var-face-grin-tongue: \f589; $fa-var-grin-tongue: \f589; $fa-var-chess-bishop: \f43a; $fa-var-face-grin-wink: \f58c; $fa-var-grin-wink: \f58c; $fa-var-ear-deaf: \f2a4; $fa-var-deaf: \f2a4; $fa-var-deafness: \f2a4; $fa-var-hard-of-hearing: \f2a4; $fa-var-road-circle-check: \e564; $fa-var-dice-five: \f523; $fa-var-square-rss: \f143; $fa-var-rss-square: \f143; $fa-var-land-mine-on: \e51b; $fa-var-i-cursor: \f246; $fa-var-stamp: \f5bf; $fa-var-stairs: \e289; $fa-var-i: \49; $fa-var-hryvnia-sign: \f6f2; $fa-var-hryvnia: \f6f2; $fa-var-pills: \f484; $fa-var-face-grin-wide: \f581; $fa-var-grin-alt: \f581; $fa-var-tooth: \f5c9; $fa-var-v: \56; $fa-var-bangladeshi-taka-sign: \e2e6; $fa-var-bicycle: \f206; $fa-var-staff-snake: \e579; $fa-var-rod-asclepius: \e579; $fa-var-rod-snake: \e579; $fa-var-staff-aesculapius: \e579; $fa-var-head-side-cough-slash: \e062; $fa-var-truck-medical: \f0f9; $fa-var-ambulance: \f0f9; $fa-var-wheat-awn-circle-exclamation: \e598; $fa-var-snowman: \f7d0; $fa-var-mortar-pestle: \f5a7; $fa-var-road-barrier: \e562; $fa-var-school: \f549; $fa-var-igloo: \f7ae; $fa-var-joint: \f595; $fa-var-angle-right: \f105; $fa-var-horse: \f6f0; $fa-var-q: \51; $fa-var-g: \47; $fa-var-notes-medical: \f481; $fa-var-temperature-half: \f2c9; $fa-var-temperature-2: \f2c9; $fa-var-thermometer-2: \f2c9; $fa-var-thermometer-half: \f2c9; $fa-var-dong-sign: \e169; $fa-var-capsules: \f46b; $fa-var-poo-storm: \f75a; $fa-var-poo-bolt: \f75a; $fa-var-face-frown-open: \f57a; $fa-var-frown-open: \f57a; $fa-var-hand-point-up: \f0a6; $fa-var-money-bill: \f0d6; $fa-var-bookmark: \f02e; $fa-var-align-justify: \f039; $fa-var-umbrella-beach: \f5ca; $fa-var-helmet-un: \e503; $fa-var-bullseye: \f140; $fa-var-bacon: \f7e5; $fa-var-hand-point-down: \f0a7; $fa-var-arrow-up-from-bracket: \e09a; $fa-var-folder: \f07b; $fa-var-folder-blank: \f07b; $fa-var-file-waveform: \f478; $fa-var-file-medical-alt: \f478; $fa-var-radiation: \f7b9; $fa-var-chart-simple: \e473; $fa-var-mars-stroke: \f229; $fa-var-vial: \f492; $fa-var-gauge: \f624; $fa-var-dashboard: \f624; $fa-var-gauge-med: \f624; $fa-var-tachometer-alt-average: \f624; $fa-var-wand-magic-sparkles: \e2ca; $fa-var-magic-wand-sparkles: \e2ca; $fa-var-e: \45; $fa-var-pen-clip: \f305; $fa-var-pen-alt: \f305; $fa-var-bridge-circle-exclamation: \e4ca; $fa-var-user: \f007; $fa-var-school-circle-check: \e56b; $fa-var-dumpster: \f793; $fa-var-van-shuttle: \f5b6; $fa-var-shuttle-van: \f5b6; $fa-var-building-user: \e4da; $fa-var-square-caret-left: \f191; $fa-var-caret-square-left: \f191; $fa-var-highlighter: \f591; $fa-var-key: \f084; $fa-var-bullhorn: \f0a1; $fa-var-globe: \f0ac; $fa-var-synagogue: \f69b; $fa-var-person-half-dress: \e548; $fa-var-road-bridge: \e563; $fa-var-location-arrow: \f124; $fa-var-c: \43; $fa-var-tablet-button: \f10a; $fa-var-building-lock: \e4d6; $fa-var-pizza-slice: \f818; $fa-var-money-bill-wave: \f53a; $fa-var-chart-area: \f1fe; $fa-var-area-chart: \f1fe; $fa-var-house-flag: \e50d; $fa-var-person-circle-minus: \e540; $fa-var-ban: \f05e; $fa-var-cancel: \f05e; $fa-var-camera-rotate: \e0d8; $fa-var-spray-can-sparkles: \f5d0; $fa-var-air-freshener: \f5d0; $fa-var-star: \f005; $fa-var-repeat: \f363; $fa-var-cross: \f654; $fa-var-box: \f466; $fa-var-venus-mars: \f228; $fa-var-arrow-pointer: \f245; $fa-var-mouse-pointer: \f245; $fa-var-maximize: \f31e; $fa-var-expand-arrows-alt: \f31e; $fa-var-charging-station: \f5e7; $fa-var-shapes: \f61f; $fa-var-triangle-circle-square: \f61f; $fa-var-shuffle: \f074; $fa-var-random: \f074; $fa-var-person-running: \f70c; $fa-var-running: \f70c; $fa-var-mobile-retro: \e527; $fa-var-grip-lines-vertical: \f7a5; $fa-var-spider: \f717; $fa-var-hands-bound: \e4f9; $fa-var-file-invoice-dollar: \f571; $fa-var-plane-circle-exclamation: \e556; $fa-var-x-ray: \f497; $fa-var-spell-check: \f891; $fa-var-slash: \f715; $fa-var-computer-mouse: \f8cc; $fa-var-mouse: \f8cc; $fa-var-arrow-right-to-bracket: \f090; $fa-var-sign-in: \f090; $fa-var-shop-slash: \e070; $fa-var-store-alt-slash: \e070; $fa-var-server: \f233; $fa-var-virus-covid-slash: \e4a9; $fa-var-shop-lock: \e4a5; $fa-var-hourglass-start: \f251; $fa-var-hourglass-1: \f251; $fa-var-blender-phone: \f6b6; $fa-var-building-wheat: \e4db; $fa-var-person-breastfeeding: \e53a; $fa-var-right-to-bracket: \f2f6; $fa-var-sign-in-alt: \f2f6; $fa-var-venus: \f221; $fa-var-passport: \f5ab; $fa-var-heart-pulse: \f21e; $fa-var-heartbeat: \f21e; $fa-var-people-carry-box: \f4ce; $fa-var-people-carry: \f4ce; $fa-var-temperature-high: \f769; $fa-var-microchip: \f2db; $fa-var-crown: \f521; $fa-var-weight-hanging: \f5cd; $fa-var-xmarks-lines: \e59a; $fa-var-file-prescription: \f572; $fa-var-weight-scale: \f496; $fa-var-weight: \f496; $fa-var-user-group: \f500; $fa-var-user-friends: \f500; $fa-var-arrow-up-a-z: \f15e; $fa-var-sort-alpha-up: \f15e; $fa-var-chess-knight: \f441; $fa-var-face-laugh-squint: \f59b; $fa-var-laugh-squint: \f59b; $fa-var-wheelchair: \f193; $fa-var-circle-arrow-up: \f0aa; $fa-var-arrow-circle-up: \f0aa; $fa-var-toggle-on: \f205; $fa-var-person-walking: \f554; $fa-var-walking: \f554; $fa-var-l: \4c; $fa-var-fire: \f06d; $fa-var-bed-pulse: \f487; $fa-var-procedures: \f487; $fa-var-shuttle-space: \f197; $fa-var-space-shuttle: \f197; $fa-var-face-laugh: \f599; $fa-var-laugh: \f599; $fa-var-folder-open: \f07c; $fa-var-heart-circle-plus: \e500; $fa-var-code-fork: \e13b; $fa-var-city: \f64f; $fa-var-microphone-lines: \f3c9; $fa-var-microphone-alt: \f3c9; $fa-var-pepper-hot: \f816; $fa-var-unlock: \f09c; $fa-var-colon-sign: \e140; $fa-var-headset: \f590; $fa-var-store-slash: \e071; $fa-var-road-circle-xmark: \e566; $fa-var-user-minus: \f503; $fa-var-mars-stroke-up: \f22a; $fa-var-mars-stroke-v: \f22a; $fa-var-champagne-glasses: \f79f; $fa-var-glass-cheers: \f79f; $fa-var-clipboard: \f328; $fa-var-house-circle-exclamation: \e50a; $fa-var-file-arrow-up: \f574; $fa-var-file-upload: \f574; $fa-var-wifi: \f1eb; $fa-var-wifi-3: \f1eb; $fa-var-wifi-strong: \f1eb; $fa-var-bath: \f2cd; $fa-var-bathtub: \f2cd; $fa-var-underline: \f0cd; $fa-var-user-pen: \f4ff; $fa-var-user-edit: \f4ff; $fa-var-signature: \f5b7; $fa-var-stroopwafel: \f551; $fa-var-bold: \f032; $fa-var-anchor-lock: \e4ad; $fa-var-building-ngo: \e4d7; $fa-var-manat-sign: \e1d5; $fa-var-not-equal: \f53e; $fa-var-border-top-left: \f853; $fa-var-border-style: \f853; $fa-var-map-location-dot: \f5a0; $fa-var-map-marked-alt: \f5a0; $fa-var-jedi: \f669; $fa-var-square-poll-vertical: \f681; $fa-var-poll: \f681; $fa-var-mug-hot: \f7b6; $fa-var-car-battery: \f5df; $fa-var-battery-car: \f5df; $fa-var-gift: \f06b; $fa-var-dice-two: \f528; $fa-var-chess-queen: \f445; $fa-var-glasses: \f530; $fa-var-chess-board: \f43c; $fa-var-building-circle-check: \e4d2; $fa-var-person-chalkboard: \e53d; $fa-var-mars-stroke-right: \f22b; $fa-var-mars-stroke-h: \f22b; $fa-var-hand-back-fist: \f255; $fa-var-hand-rock: \f255; $fa-var-square-caret-up: \f151; $fa-var-caret-square-up: \f151; $fa-var-cloud-showers-water: \e4e4; $fa-var-chart-bar: \f080; $fa-var-bar-chart: \f080; $fa-var-hands-bubbles: \e05e; $fa-var-hands-wash: \e05e; $fa-var-less-than-equal: \f537; $fa-var-train: \f238; $fa-var-eye-low-vision: \f2a8; $fa-var-low-vision: \f2a8; $fa-var-crow: \f520; $fa-var-sailboat: \e445; $fa-var-window-restore: \f2d2; $fa-var-square-plus: \f0fe; $fa-var-plus-square: \f0fe; $fa-var-torii-gate: \f6a1; $fa-var-frog: \f52e; $fa-var-bucket: \e4cf; $fa-var-image: \f03e; $fa-var-microphone: \f130; $fa-var-cow: \f6c8; $fa-var-caret-up: \f0d8; $fa-var-screwdriver: \f54a; $fa-var-folder-closed: \e185; $fa-var-house-tsunami: \e515; $fa-var-square-nfi: \e576; $fa-var-arrow-up-from-ground-water: \e4b5; $fa-var-martini-glass: \f57b; $fa-var-glass-martini-alt: \f57b; $fa-var-rotate-left: \f2ea; $fa-var-rotate-back: \f2ea; $fa-var-rotate-backward: \f2ea; $fa-var-undo-alt: \f2ea; $fa-var-table-columns: \f0db; $fa-var-columns: \f0db; $fa-var-lemon: \f094; $fa-var-head-side-mask: \e063; $fa-var-handshake: \f2b5; $fa-var-gem: \f3a5; $fa-var-dolly: \f472; $fa-var-dolly-box: \f472; $fa-var-smoking: \f48d; $fa-var-minimize: \f78c; $fa-var-compress-arrows-alt: \f78c; $fa-var-monument: \f5a6; $fa-var-snowplow: \f7d2; $fa-var-angles-right: \f101; $fa-var-angle-double-right: \f101; $fa-var-cannabis: \f55f; $fa-var-circle-play: \f144; $fa-var-play-circle: \f144; $fa-var-tablets: \f490; $fa-var-ethernet: \f796; $fa-var-euro-sign: \f153; $fa-var-eur: \f153; $fa-var-euro: \f153; $fa-var-chair: \f6c0; $fa-var-circle-check: \f058; $fa-var-check-circle: \f058; $fa-var-circle-stop: \f28d; $fa-var-stop-circle: \f28d; $fa-var-compass-drafting: \f568; $fa-var-drafting-compass: \f568; $fa-var-plate-wheat: \e55a; $fa-var-icicles: \f7ad; $fa-var-person-shelter: \e54f; $fa-var-neuter: \f22c; $fa-var-id-badge: \f2c1; $fa-var-marker: \f5a1; $fa-var-face-laugh-beam: \f59a; $fa-var-laugh-beam: \f59a; $fa-var-helicopter-symbol: \e502; $fa-var-universal-access: \f29a; $fa-var-circle-chevron-up: \f139; $fa-var-chevron-circle-up: \f139; $fa-var-lari-sign: \e1c8; $fa-var-volcano: \f770; $fa-var-person-walking-dashed-line-arrow-right: \e553; $fa-var-sterling-sign: \f154; $fa-var-gbp: \f154; $fa-var-pound-sign: \f154; $fa-var-viruses: \e076; $fa-var-square-person-confined: \e577; $fa-var-user-tie: \f508; $fa-var-arrow-down-long: \f175; $fa-var-long-arrow-down: \f175; $fa-var-tent-arrow-down-to-line: \e57e; $fa-var-certificate: \f0a3; $fa-var-reply-all: \f122; $fa-var-mail-reply-all: \f122; $fa-var-suitcase: \f0f2; $fa-var-person-skating: \f7c5; $fa-var-skating: \f7c5; $fa-var-filter-circle-dollar: \f662; $fa-var-funnel-dollar: \f662; $fa-var-camera-retro: \f083; $fa-var-circle-arrow-down: \f0ab; $fa-var-arrow-circle-down: \f0ab; $fa-var-file-import: \f56f; $fa-var-arrow-right-to-file: \f56f; $fa-var-square-arrow-up-right: \f14c; $fa-var-external-link-square: \f14c; $fa-var-box-open: \f49e; $fa-var-scroll: \f70e; $fa-var-spa: \f5bb; $fa-var-location-pin-lock: \e51f; $fa-var-pause: \f04c; $fa-var-hill-avalanche: \e507; $fa-var-temperature-empty: \f2cb; $fa-var-temperature-0: \f2cb; $fa-var-thermometer-0: \f2cb; $fa-var-thermometer-empty: \f2cb; $fa-var-bomb: \f1e2; $fa-var-registered: \f25d; $fa-var-address-card: \f2bb; $fa-var-contact-card: \f2bb; $fa-var-vcard: \f2bb; $fa-var-scale-unbalanced-flip: \f516; $fa-var-balance-scale-right: \f516; $fa-var-subscript: \f12c; $fa-var-diamond-turn-right: \f5eb; $fa-var-directions: \f5eb; $fa-var-burst: \e4dc; $fa-var-house-laptop: \e066; $fa-var-laptop-house: \e066; $fa-var-face-tired: \f5c8; $fa-var-tired: \f5c8; $fa-var-money-bills: \e1f3; $fa-var-smog: \f75f; $fa-var-crutch: \f7f7; $fa-var-cloud-arrow-up: \f0ee; $fa-var-cloud-upload: \f0ee; $fa-var-cloud-upload-alt: \f0ee; $fa-var-palette: \f53f; $fa-var-arrows-turn-right: \e4c0; $fa-var-vest: \e085; $fa-var-ferry: \e4ea; $fa-var-arrows-down-to-people: \e4b9; $fa-var-seedling: \f4d8; $fa-var-sprout: \f4d8; $fa-var-left-right: \f337; $fa-var-arrows-alt-h: \f337; $fa-var-boxes-packing: \e4c7; $fa-var-circle-arrow-left: \f0a8; $fa-var-arrow-circle-left: \f0a8; $fa-var-group-arrows-rotate: \e4f6; $fa-var-bowl-food: \e4c6; $fa-var-candy-cane: \f786; $fa-var-arrow-down-wide-short: \f160; $fa-var-sort-amount-asc: \f160; $fa-var-sort-amount-down: \f160; $fa-var-cloud-bolt: \f76c; $fa-var-thunderstorm: \f76c; $fa-var-text-slash: \f87d; $fa-var-remove-format: \f87d; $fa-var-face-smile-wink: \f4da; $fa-var-smile-wink: \f4da; $fa-var-file-word: \f1c2; $fa-var-file-powerpoint: \f1c4; $fa-var-arrows-left-right: \f07e; $fa-var-arrows-h: \f07e; $fa-var-house-lock: \e510; $fa-var-cloud-arrow-down: \f0ed; $fa-var-cloud-download: \f0ed; $fa-var-cloud-download-alt: \f0ed; $fa-var-children: \e4e1; $fa-var-chalkboard: \f51b; $fa-var-blackboard: \f51b; $fa-var-user-large-slash: \f4fa; $fa-var-user-alt-slash: \f4fa; $fa-var-envelope-open: \f2b6; $fa-var-handshake-simple-slash: \e05f; $fa-var-handshake-alt-slash: \e05f; $fa-var-mattress-pillow: \e525; $fa-var-guarani-sign: \e19a; $fa-var-arrows-rotate: \f021; $fa-var-refresh: \f021; $fa-var-sync: \f021; $fa-var-fire-extinguisher: \f134; $fa-var-cruzeiro-sign: \e152; $fa-var-greater-than-equal: \f532; $fa-var-shield-halved: \f3ed; $fa-var-shield-alt: \f3ed; $fa-var-book-atlas: \f558; $fa-var-atlas: \f558; $fa-var-virus: \e074; $fa-var-envelope-circle-check: \e4e8; $fa-var-layer-group: \f5fd; $fa-var-arrows-to-dot: \e4be; $fa-var-archway: \f557; $fa-var-heart-circle-check: \e4fd; $fa-var-house-chimney-crack: \f6f1; $fa-var-house-damage: \f6f1; $fa-var-file-zipper: \f1c6; $fa-var-file-archive: \f1c6; $fa-var-square: \f0c8; $fa-var-martini-glass-empty: \f000; $fa-var-glass-martini: \f000; $fa-var-couch: \f4b8; $fa-var-cedi-sign: \e0df; $fa-var-italic: \f033; $fa-var-church: \f51d; $fa-var-comments-dollar: \f653; $fa-var-democrat: \f747; $fa-var-z: \5a; $fa-var-person-skiing: \f7c9; $fa-var-skiing: \f7c9; $fa-var-road-lock: \e567; $fa-var-a: \41; $fa-var-temperature-arrow-down: \e03f; $fa-var-temperature-down: \e03f; $fa-var-feather-pointed: \f56b; $fa-var-feather-alt: \f56b; $fa-var-p: \50; $fa-var-snowflake: \f2dc; $fa-var-newspaper: \f1ea; $fa-var-rectangle-ad: \f641; $fa-var-ad: \f641; $fa-var-circle-arrow-right: \f0a9; $fa-var-arrow-circle-right: \f0a9; $fa-var-filter-circle-xmark: \e17b; $fa-var-locust: \e520; $fa-var-sort: \f0dc; $fa-var-unsorted: \f0dc; $fa-var-list-ol: \f0cb; $fa-var-list-1-2: \f0cb; $fa-var-list-numeric: \f0cb; $fa-var-person-dress-burst: \e544; $fa-var-money-check-dollar: \f53d; $fa-var-money-check-alt: \f53d; $fa-var-vector-square: \f5cb; $fa-var-bread-slice: \f7ec; $fa-var-language: \f1ab; $fa-var-face-kiss-wink-heart: \f598; $fa-var-kiss-wink-heart: \f598; $fa-var-filter: \f0b0; $fa-var-question: \3f; $fa-var-file-signature: \f573; $fa-var-up-down-left-right: \f0b2; $fa-var-arrows-alt: \f0b2; $fa-var-house-chimney-user: \e065; $fa-var-hand-holding-heart: \f4be; $fa-var-puzzle-piece: \f12e; $fa-var-money-check: \f53c; $fa-var-star-half-stroke: \f5c0; $fa-var-star-half-alt: \f5c0; $fa-var-code: \f121; $fa-var-whiskey-glass: \f7a0; $fa-var-glass-whiskey: \f7a0; $fa-var-building-circle-exclamation: \e4d3; $fa-var-magnifying-glass-chart: \e522; $fa-var-arrow-up-right-from-square: \f08e; $fa-var-external-link: \f08e; $fa-var-cubes-stacked: \e4e6; $fa-var-won-sign: \f159; $fa-var-krw: \f159; $fa-var-won: \f159; $fa-var-virus-covid: \e4a8; $fa-var-austral-sign: \e0a9; $fa-var-f: \46; $fa-var-leaf: \f06c; $fa-var-road: \f018; $fa-var-taxi: \f1ba; $fa-var-cab: \f1ba; $fa-var-person-circle-plus: \e541; $fa-var-chart-pie: \f200; $fa-var-pie-chart: \f200; $fa-var-bolt-lightning: \e0b7; $fa-var-sack-xmark: \e56a; $fa-var-file-excel: \f1c3; $fa-var-file-contract: \f56c; $fa-var-fish-fins: \e4f2; $fa-var-building-flag: \e4d5; $fa-var-face-grin-beam: \f582; $fa-var-grin-beam: \f582; $fa-var-object-ungroup: \f248; $fa-var-poop: \f619; $fa-var-location-pin: \f041; $fa-var-map-marker: \f041; $fa-var-kaaba: \f66b; $fa-var-toilet-paper: \f71e; $fa-var-helmet-safety: \f807; $fa-var-hard-hat: \f807; $fa-var-hat-hard: \f807; $fa-var-eject: \f052; $fa-var-circle-right: \f35a; $fa-var-arrow-alt-circle-right: \f35a; $fa-var-plane-circle-check: \e555; $fa-var-face-rolling-eyes: \f5a5; $fa-var-meh-rolling-eyes: \f5a5; $fa-var-object-group: \f247; $fa-var-chart-line: \f201; $fa-var-line-chart: \f201; $fa-var-mask-ventilator: \e524; $fa-var-arrow-right: \f061; $fa-var-signs-post: \f277; $fa-var-map-signs: \f277; $fa-var-cash-register: \f788; $fa-var-person-circle-question: \e542; $fa-var-h: \48; $fa-var-tarp: \e57b; $fa-var-screwdriver-wrench: \f7d9; $fa-var-tools: \f7d9; $fa-var-arrows-to-eye: \e4bf; $fa-var-plug-circle-bolt: \e55b; $fa-var-heart: \f004; $fa-var-mars-and-venus: \f224; $fa-var-house-user: \e1b0; $fa-var-home-user: \e1b0; $fa-var-dumpster-fire: \f794; $fa-var-house-crack: \e3b1; $fa-var-martini-glass-citrus: \f561; $fa-var-cocktail: \f561; $fa-var-face-surprise: \f5c2; $fa-var-surprise: \f5c2; $fa-var-bottle-water: \e4c5; $fa-var-circle-pause: \f28b; $fa-var-pause-circle: \f28b; $fa-var-toilet-paper-slash: \e072; $fa-var-apple-whole: \f5d1; $fa-var-apple-alt: \f5d1; $fa-var-kitchen-set: \e51a; $fa-var-r: \52; $fa-var-temperature-quarter: \f2ca; $fa-var-temperature-1: \f2ca; $fa-var-thermometer-1: \f2ca; $fa-var-thermometer-quarter: \f2ca; $fa-var-cube: \f1b2; $fa-var-bitcoin-sign: \e0b4; $fa-var-shield-dog: \e573; $fa-var-solar-panel: \f5ba; $fa-var-lock-open: \f3c1; $fa-var-elevator: \e16d; $fa-var-money-bill-transfer: \e528; $fa-var-money-bill-trend-up: \e529; $fa-var-house-flood-water-circle-arrow-right: \e50f; $fa-var-square-poll-horizontal: \f682; $fa-var-poll-h: \f682; $fa-var-circle: \f111; $fa-var-backward-fast: \f049; $fa-var-fast-backward: \f049; $fa-var-recycle: \f1b8; $fa-var-user-astronaut: \f4fb; $fa-var-plane-slash: \e069; $fa-var-trademark: \f25c; $fa-var-basketball: \f434; $fa-var-basketball-ball: \f434; $fa-var-satellite-dish: \f7c0; $fa-var-circle-up: \f35b; $fa-var-arrow-alt-circle-up: \f35b; $fa-var-mobile-screen-button: \f3cd; $fa-var-mobile-alt: \f3cd; $fa-var-volume-high: \f028; $fa-var-volume-up: \f028; $fa-var-users-rays: \e593; $fa-var-wallet: \f555; $fa-var-clipboard-check: \f46c; $fa-var-file-audio: \f1c7; $fa-var-burger: \f805; $fa-var-hamburger: \f805; $fa-var-wrench: \f0ad; $fa-var-bugs: \e4d0; $fa-var-rupee-sign: \f156; $fa-var-rupee: \f156; $fa-var-file-image: \f1c5; $fa-var-circle-question: \f059; $fa-var-question-circle: \f059; $fa-var-plane-departure: \f5b0; $fa-var-handshake-slash: \e060; $fa-var-book-bookmark: \e0bb; $fa-var-code-branch: \f126; $fa-var-hat-cowboy: \f8c0; $fa-var-bridge: \e4c8; $fa-var-phone-flip: \f879; $fa-var-phone-alt: \f879; $fa-var-truck-front: \e2b7; $fa-var-cat: \f6be; $fa-var-anchor-circle-exclamation: \e4ab; $fa-var-truck-field: \e58d; $fa-var-route: \f4d7; $fa-var-clipboard-question: \e4e3; $fa-var-panorama: \e209; $fa-var-comment-medical: \f7f5; $fa-var-teeth-open: \f62f; $fa-var-file-circle-minus: \e4ed; $fa-var-tags: \f02c; $fa-var-wine-glass: \f4e3; $fa-var-forward-fast: \f050; $fa-var-fast-forward: \f050; $fa-var-face-meh-blank: \f5a4; $fa-var-meh-blank: \f5a4; $fa-var-square-parking: \f540; $fa-var-parking: \f540; $fa-var-house-signal: \e012; $fa-var-bars-progress: \f828; $fa-var-tasks-alt: \f828; $fa-var-faucet-drip: \e006; $fa-var-cart-flatbed: \f474; $fa-var-dolly-flatbed: \f474; $fa-var-ban-smoking: \f54d; $fa-var-smoking-ban: \f54d; $fa-var-terminal: \f120; $fa-var-mobile-button: \f10b; $fa-var-house-medical-flag: \e514; $fa-var-basket-shopping: \f291; $fa-var-shopping-basket: \f291; $fa-var-tape: \f4db; $fa-var-bus-simple: \f55e; $fa-var-bus-alt: \f55e; $fa-var-eye: \f06e; $fa-var-face-sad-cry: \f5b3; $fa-var-sad-cry: \f5b3; $fa-var-audio-description: \f29e; $fa-var-person-military-to-person: \e54c; $fa-var-file-shield: \e4f0; $fa-var-user-slash: \f506; $fa-var-pen: \f304; $fa-var-tower-observation: \e586; $fa-var-file-code: \f1c9; $fa-var-signal: \f012; $fa-var-signal-5: \f012; $fa-var-signal-perfect: \f012; $fa-var-bus: \f207; $fa-var-heart-circle-xmark: \e501; $fa-var-house-chimney: \e3af; $fa-var-home-lg: \e3af; $fa-var-window-maximize: \f2d0; $fa-var-face-frown: \f119; $fa-var-frown: \f119; $fa-var-prescription: \f5b1; $fa-var-shop: \f54f; $fa-var-store-alt: \f54f; $fa-var-floppy-disk: \f0c7; $fa-var-save: \f0c7; $fa-var-vihara: \f6a7; $fa-var-scale-unbalanced: \f515; $fa-var-balance-scale-left: \f515; $fa-var-sort-up: \f0de; $fa-var-sort-asc: \f0de; $fa-var-comment-dots: \f4ad; $fa-var-commenting: \f4ad; $fa-var-plant-wilt: \e5aa; $fa-var-diamond: \f219; $fa-var-face-grin-squint: \f585; $fa-var-grin-squint: \f585; $fa-var-hand-holding-dollar: \f4c0; $fa-var-hand-holding-usd: \f4c0; $fa-var-bacterium: \e05a; $fa-var-hand-pointer: \f25a; $fa-var-drum-steelpan: \f56a; $fa-var-hand-scissors: \f257; $fa-var-hands-praying: \f684; $fa-var-praying-hands: \f684; $fa-var-arrow-rotate-right: \f01e; $fa-var-arrow-right-rotate: \f01e; $fa-var-arrow-rotate-forward: \f01e; $fa-var-redo: \f01e; $fa-var-biohazard: \f780; $fa-var-location-crosshairs: \f601; $fa-var-location: \f601; $fa-var-mars-double: \f227; $fa-var-child-dress: \e59c; $fa-var-users-between-lines: \e591; $fa-var-lungs-virus: \e067; $fa-var-face-grin-tears: \f588; $fa-var-grin-tears: \f588; $fa-var-phone: \f095; $fa-var-calendar-xmark: \f273; $fa-var-calendar-times: \f273; $fa-var-child-reaching: \e59d; $fa-var-head-side-virus: \e064; $fa-var-user-gear: \f4fe; $fa-var-user-cog: \f4fe; $fa-var-arrow-up-1-9: \f163; $fa-var-sort-numeric-up: \f163; $fa-var-door-closed: \f52a; $fa-var-shield-virus: \e06c; $fa-var-dice-six: \f526; $fa-var-mosquito-net: \e52c; $fa-var-bridge-water: \e4ce; $fa-var-person-booth: \f756; $fa-var-text-width: \f035; $fa-var-hat-wizard: \f6e8; $fa-var-pen-fancy: \f5ac; $fa-var-person-digging: \f85e; $fa-var-digging: \f85e; $fa-var-trash: \f1f8; $fa-var-gauge-simple: \f629; $fa-var-gauge-simple-med: \f629; $fa-var-tachometer-average: \f629; $fa-var-book-medical: \f7e6; $fa-var-poo: \f2fe; $fa-var-quote-right: \f10e; $fa-var-quote-right-alt: \f10e; $fa-var-shirt: \f553; $fa-var-t-shirt: \f553; $fa-var-tshirt: \f553; $fa-var-cubes: \f1b3; $fa-var-divide: \f529; $fa-var-tenge-sign: \f7d7; $fa-var-tenge: \f7d7; $fa-var-headphones: \f025; $fa-var-hands-holding: \f4c2; $fa-var-hands-clapping: \e1a8; $fa-var-republican: \f75e; $fa-var-arrow-left: \f060; $fa-var-person-circle-xmark: \e543; $fa-var-ruler: \f545; $fa-var-align-left: \f036; $fa-var-dice-d6: \f6d1; $fa-var-restroom: \f7bd; $fa-var-j: \4a; $fa-var-users-viewfinder: \e595; $fa-var-file-video: \f1c8; $fa-var-up-right-from-square: \f35d; $fa-var-external-link-alt: \f35d; $fa-var-table-cells: \f00a; $fa-var-th: \f00a; $fa-var-file-pdf: \f1c1; $fa-var-book-bible: \f647; $fa-var-bible: \f647; $fa-var-o: \4f; $fa-var-suitcase-medical: \f0fa; $fa-var-medkit: \f0fa; $fa-var-user-secret: \f21b; $fa-var-otter: \f700; $fa-var-person-dress: \f182; $fa-var-female: \f182; $fa-var-comment-dollar: \f651; $fa-var-business-time: \f64a; $fa-var-briefcase-clock: \f64a; $fa-var-table-cells-large: \f009; $fa-var-th-large: \f009; $fa-var-book-tanakh: \f827; $fa-var-tanakh: \f827; $fa-var-phone-volume: \f2a0; $fa-var-volume-control-phone: \f2a0; $fa-var-hat-cowboy-side: \f8c1; $fa-var-clipboard-user: \f7f3; $fa-var-child: \f1ae; $fa-var-lira-sign: \f195; $fa-var-satellite: \f7bf; $fa-var-plane-lock: \e558; $fa-var-tag: \f02b; $fa-var-comment: \f075; $fa-var-cake-candles: \f1fd; $fa-var-birthday-cake: \f1fd; $fa-var-cake: \f1fd; $fa-var-envelope: \f0e0; $fa-var-angles-up: \f102; $fa-var-angle-double-up: \f102; $fa-var-paperclip: \f0c6; $fa-var-arrow-right-to-city: \e4b3; $fa-var-ribbon: \f4d6; $fa-var-lungs: \f604; $fa-var-arrow-up-9-1: \f887; $fa-var-sort-numeric-up-alt: \f887; $fa-var-litecoin-sign: \e1d3; $fa-var-border-none: \f850; $fa-var-circle-nodes: \e4e2; $fa-var-parachute-box: \f4cd; $fa-var-indent: \f03c; $fa-var-truck-field-un: \e58e; $fa-var-hourglass: \f254; $fa-var-hourglass-empty: \f254; $fa-var-mountain: \f6fc; $fa-var-user-doctor: \f0f0; $fa-var-user-md: \f0f0; $fa-var-circle-info: \f05a; $fa-var-info-circle: \f05a; $fa-var-cloud-meatball: \f73b; $fa-var-camera: \f030; $fa-var-camera-alt: \f030; $fa-var-square-virus: \e578; $fa-var-meteor: \f753; $fa-var-car-on: \e4dd; $fa-var-sleigh: \f7cc; $fa-var-arrow-down-1-9: \f162; $fa-var-sort-numeric-asc: \f162; $fa-var-sort-numeric-down: \f162; $fa-var-hand-holding-droplet: \f4c1; $fa-var-hand-holding-water: \f4c1; $fa-var-water: \f773; $fa-var-calendar-check: \f274; $fa-var-braille: \f2a1; $fa-var-prescription-bottle-medical: \f486; $fa-var-prescription-bottle-alt: \f486; $fa-var-landmark: \f66f; $fa-var-truck: \f0d1; $fa-var-crosshairs: \f05b; $fa-var-person-cane: \e53c; $fa-var-tent: \e57d; $fa-var-vest-patches: \e086; $fa-var-check-double: \f560; $fa-var-arrow-down-a-z: \f15d; $fa-var-sort-alpha-asc: \f15d; $fa-var-sort-alpha-down: \f15d; $fa-var-money-bill-wheat: \e52a; $fa-var-cookie: \f563; $fa-var-arrow-rotate-left: \f0e2; $fa-var-arrow-left-rotate: \f0e2; $fa-var-arrow-rotate-back: \f0e2; $fa-var-arrow-rotate-backward: \f0e2; $fa-var-undo: \f0e2; $fa-var-hard-drive: \f0a0; $fa-var-hdd: \f0a0; $fa-var-face-grin-squint-tears: \f586; $fa-var-grin-squint-tears: \f586; $fa-var-dumbbell: \f44b; $fa-var-rectangle-list: \f022; $fa-var-list-alt: \f022; $fa-var-tarp-droplet: \e57c; $fa-var-house-medical-circle-check: \e511; $fa-var-person-skiing-nordic: \f7ca; $fa-var-skiing-nordic: \f7ca; $fa-var-calendar-plus: \f271; $fa-var-plane-arrival: \f5af; $fa-var-circle-left: \f359; $fa-var-arrow-alt-circle-left: \f359; $fa-var-train-subway: \f239; $fa-var-subway: \f239; $fa-var-chart-gantt: \e0e4; $fa-var-indian-rupee-sign: \e1bc; $fa-var-indian-rupee: \e1bc; $fa-var-inr: \e1bc; $fa-var-crop-simple: \f565; $fa-var-crop-alt: \f565; $fa-var-money-bill-1: \f3d1; $fa-var-money-bill-alt: \f3d1; $fa-var-left-long: \f30a; $fa-var-long-arrow-alt-left: \f30a; $fa-var-dna: \f471; $fa-var-virus-slash: \e075; $fa-var-minus: \f068; $fa-var-subtract: \f068; $fa-var-chess: \f439; $fa-var-arrow-left-long: \f177; $fa-var-long-arrow-left: \f177; $fa-var-plug-circle-check: \e55c; $fa-var-street-view: \f21d; $fa-var-franc-sign: \e18f; $fa-var-volume-off: \f026; $fa-var-hands-asl-interpreting: \f2a3; $fa-var-american-sign-language-interpreting: \f2a3; $fa-var-asl-interpreting: \f2a3; $fa-var-hands-american-sign-language-interpreting: \f2a3; $fa-var-gear: \f013; $fa-var-cog: \f013; $fa-var-droplet-slash: \f5c7; $fa-var-tint-slash: \f5c7; $fa-var-mosque: \f678; $fa-var-mosquito: \e52b; $fa-var-star-of-david: \f69a; $fa-var-person-military-rifle: \e54b; $fa-var-cart-shopping: \f07a; $fa-var-shopping-cart: \f07a; $fa-var-vials: \f493; $fa-var-plug-circle-plus: \e55f; $fa-var-place-of-worship: \f67f; $fa-var-grip-vertical: \f58e; $fa-var-arrow-turn-up: \f148; $fa-var-level-up: \f148; $fa-var-u: \55; $fa-var-square-root-variable: \f698; $fa-var-square-root-alt: \f698; $fa-var-clock: \f017; $fa-var-clock-four: \f017; $fa-var-backward-step: \f048; $fa-var-step-backward: \f048; $fa-var-pallet: \f482; $fa-var-faucet: \e005; $fa-var-baseball-bat-ball: \f432; $fa-var-s: \53; $fa-var-timeline: \e29c; $fa-var-keyboard: \f11c; $fa-var-caret-down: \f0d7; $fa-var-house-chimney-medical: \f7f2; $fa-var-clinic-medical: \f7f2; $fa-var-temperature-three-quarters: \f2c8; $fa-var-temperature-3: \f2c8; $fa-var-thermometer-3: \f2c8; $fa-var-thermometer-three-quarters: \f2c8; $fa-var-mobile-screen: \f3cf; $fa-var-mobile-android-alt: \f3cf; $fa-var-plane-up: \e22d; $fa-var-piggy-bank: \f4d3; $fa-var-battery-half: \f242; $fa-var-battery-3: \f242; $fa-var-mountain-city: \e52e; $fa-var-coins: \f51e; $fa-var-khanda: \f66d; $fa-var-sliders: \f1de; $fa-var-sliders-h: \f1de; $fa-var-folder-tree: \f802; $fa-var-network-wired: \f6ff; $fa-var-map-pin: \f276; $fa-var-hamsa: \f665; $fa-var-cent-sign: \e3f5; $fa-var-flask: \f0c3; $fa-var-person-pregnant: \e31e; $fa-var-wand-sparkles: \f72b; $fa-var-ellipsis-vertical: \f142; $fa-var-ellipsis-v: \f142; $fa-var-ticket: \f145; $fa-var-power-off: \f011; $fa-var-right-long: \f30b; $fa-var-long-arrow-alt-right: \f30b; $fa-var-flag-usa: \f74d; $fa-var-laptop-file: \e51d; $fa-var-tty: \f1e4; $fa-var-teletype: \f1e4; $fa-var-diagram-next: \e476; $fa-var-person-rifle: \e54e; $fa-var-house-medical-circle-exclamation: \e512; $fa-var-closed-captioning: \f20a; $fa-var-person-hiking: \f6ec; $fa-var-hiking: \f6ec; $fa-var-venus-double: \f226; $fa-var-images: \f302; $fa-var-calculator: \f1ec; $fa-var-people-pulling: \e535; $fa-var-n: \4e; $fa-var-cable-car: \f7da; $fa-var-tram: \f7da; $fa-var-cloud-rain: \f73d; $fa-var-building-circle-xmark: \e4d4; $fa-var-ship: \f21a; $fa-var-arrows-down-to-line: \e4b8; $fa-var-download: \f019; $fa-var-face-grin: \f580; $fa-var-grin: \f580; $fa-var-delete-left: \f55a; $fa-var-backspace: \f55a; $fa-var-eye-dropper: \f1fb; $fa-var-eye-dropper-empty: \f1fb; $fa-var-eyedropper: \f1fb; $fa-var-file-circle-check: \e5a0; $fa-var-forward: \f04e; $fa-var-mobile: \f3ce; $fa-var-mobile-android: \f3ce; $fa-var-mobile-phone: \f3ce; $fa-var-face-meh: \f11a; $fa-var-meh: \f11a; $fa-var-align-center: \f037; $fa-var-book-skull: \f6b7; $fa-var-book-dead: \f6b7; $fa-var-id-card: \f2c2; $fa-var-drivers-license: \f2c2; $fa-var-outdent: \f03b; $fa-var-dedent: \f03b; $fa-var-heart-circle-exclamation: \e4fe; $fa-var-house: \f015; $fa-var-home: \f015; $fa-var-home-alt: \f015; $fa-var-home-lg-alt: \f015; $fa-var-calendar-week: \f784; $fa-var-laptop-medical: \f812; $fa-var-b: \42; $fa-var-file-medical: \f477; $fa-var-dice-one: \f525; $fa-var-kiwi-bird: \f535; $fa-var-arrow-right-arrow-left: \f0ec; $fa-var-exchange: \f0ec; $fa-var-rotate-right: \f2f9; $fa-var-redo-alt: \f2f9; $fa-var-rotate-forward: \f2f9; $fa-var-utensils: \f2e7; $fa-var-cutlery: \f2e7; $fa-var-arrow-up-wide-short: \f161; $fa-var-sort-amount-up: \f161; $fa-var-mill-sign: \e1ed; $fa-var-bowl-rice: \e2eb; $fa-var-skull: \f54c; $fa-var-tower-broadcast: \f519; $fa-var-broadcast-tower: \f519; $fa-var-truck-pickup: \f63c; $fa-var-up-long: \f30c; $fa-var-long-arrow-alt-up: \f30c; $fa-var-stop: \f04d; $fa-var-code-merge: \f387; $fa-var-upload: \f093; $fa-var-hurricane: \f751; $fa-var-mound: \e52d; $fa-var-toilet-portable: \e583; $fa-var-compact-disc: \f51f; $fa-var-file-arrow-down: \f56d; $fa-var-file-download: \f56d; $fa-var-caravan: \f8ff; $fa-var-shield-cat: \e572; $fa-var-bolt: \f0e7; $fa-var-zap: \f0e7; $fa-var-glass-water: \e4f4; $fa-var-oil-well: \e532; $fa-var-vault: \e2c5; $fa-var-mars: \f222; $fa-var-toilet: \f7d8; $fa-var-plane-circle-xmark: \e557; $fa-var-yen-sign: \f157; $fa-var-cny: \f157; $fa-var-jpy: \f157; $fa-var-rmb: \f157; $fa-var-yen: \f157; $fa-var-ruble-sign: \f158; $fa-var-rouble: \f158; $fa-var-rub: \f158; $fa-var-ruble: \f158; $fa-var-sun: \f185; $fa-var-guitar: \f7a6; $fa-var-face-laugh-wink: \f59c; $fa-var-laugh-wink: \f59c; $fa-var-horse-head: \f7ab; $fa-var-bore-hole: \e4c3; $fa-var-industry: \f275; $fa-var-circle-down: \f358; $fa-var-arrow-alt-circle-down: \f358; $fa-var-arrows-turn-to-dots: \e4c1; $fa-var-florin-sign: \e184; $fa-var-arrow-down-short-wide: \f884; $fa-var-sort-amount-desc: \f884; $fa-var-sort-amount-down-alt: \f884; $fa-var-less-than: \3c; $fa-var-angle-down: \f107; $fa-var-car-tunnel: \e4de; $fa-var-head-side-cough: \e061; $fa-var-grip-lines: \f7a4; $fa-var-thumbs-down: \f165; $fa-var-user-lock: \f502; $fa-var-arrow-right-long: \f178; $fa-var-long-arrow-right: \f178; $fa-var-anchor-circle-xmark: \e4ac; $fa-var-ellipsis: \f141; $fa-var-ellipsis-h: \f141; $fa-var-chess-pawn: \f443; $fa-var-kit-medical: \f479; $fa-var-first-aid: \f479; $fa-var-person-through-window: \e5a9; $fa-var-toolbox: \f552; $fa-var-hands-holding-circle: \e4fb; $fa-var-bug: \f188; $fa-var-credit-card: \f09d; $fa-var-credit-card-alt: \f09d; $fa-var-car: \f1b9; $fa-var-automobile: \f1b9; $fa-var-hand-holding-hand: \e4f7; $fa-var-book-open-reader: \f5da; $fa-var-book-reader: \f5da; $fa-var-mountain-sun: \e52f; $fa-var-arrows-left-right-to-line: \e4ba; $fa-var-dice-d20: \f6cf; $fa-var-truck-droplet: \e58c; $fa-var-file-circle-xmark: \e5a1; $fa-var-temperature-arrow-up: \e040; $fa-var-temperature-up: \e040; $fa-var-medal: \f5a2; $fa-var-bed: \f236; $fa-var-square-h: \f0fd; $fa-var-h-square: \f0fd; $fa-var-podcast: \f2ce; $fa-var-temperature-full: \f2c7; $fa-var-temperature-4: \f2c7; $fa-var-thermometer-4: \f2c7; $fa-var-thermometer-full: \f2c7; $fa-var-bell: \f0f3; $fa-var-superscript: \f12b; $fa-var-plug-circle-xmark: \e560; $fa-var-star-of-life: \f621; $fa-var-phone-slash: \f3dd; $fa-var-paint-roller: \f5aa; $fa-var-handshake-angle: \f4c4; $fa-var-hands-helping: \f4c4; $fa-var-location-dot: \f3c5; $fa-var-map-marker-alt: \f3c5; $fa-var-file: \f15b; $fa-var-greater-than: \3e; $fa-var-person-swimming: \f5c4; $fa-var-swimmer: \f5c4; $fa-var-arrow-down: \f063; $fa-var-droplet: \f043; $fa-var-tint: \f043; $fa-var-eraser: \f12d; $fa-var-earth-americas: \f57d; $fa-var-earth: \f57d; $fa-var-earth-america: \f57d; $fa-var-globe-americas: \f57d; $fa-var-person-burst: \e53b; $fa-var-dove: \f4ba; $fa-var-battery-empty: \f244; $fa-var-battery-0: \f244; $fa-var-socks: \f696; $fa-var-inbox: \f01c; $fa-var-section: \e447; $fa-var-gauge-high: \f625; $fa-var-tachometer-alt: \f625; $fa-var-tachometer-alt-fast: \f625; $fa-var-envelope-open-text: \f658; $fa-var-hospital: \f0f8; $fa-var-hospital-alt: \f0f8; $fa-var-hospital-wide: \f0f8; $fa-var-wine-bottle: \f72f; $fa-var-chess-rook: \f447; $fa-var-bars-staggered: \f550; $fa-var-reorder: \f550; $fa-var-stream: \f550; $fa-var-dharmachakra: \f655; $fa-var-hotdog: \f80f; $fa-var-person-walking-with-cane: \f29d; $fa-var-blind: \f29d; $fa-var-drum: \f569; $fa-var-ice-cream: \f810; $fa-var-heart-circle-bolt: \e4fc; $fa-var-fax: \f1ac; $fa-var-paragraph: \f1dd; $fa-var-check-to-slot: \f772; $fa-var-vote-yea: \f772; $fa-var-star-half: \f089; $fa-var-boxes-stacked: \f468; $fa-var-boxes: \f468; $fa-var-boxes-alt: \f468; $fa-var-link: \f0c1; $fa-var-chain: \f0c1; $fa-var-ear-listen: \f2a2; $fa-var-assistive-listening-systems: \f2a2; $fa-var-tree-city: \e587; $fa-var-play: \f04b; $fa-var-font: \f031; $fa-var-rupiah-sign: \e23d; $fa-var-magnifying-glass: \f002; $fa-var-search: \f002; $fa-var-table-tennis-paddle-ball: \f45d; $fa-var-ping-pong-paddle-ball: \f45d; $fa-var-table-tennis: \f45d; $fa-var-person-dots-from-line: \f470; $fa-var-diagnoses: \f470; $fa-var-trash-can-arrow-up: \f82a; $fa-var-trash-restore-alt: \f82a; $fa-var-naira-sign: \e1f6; $fa-var-cart-arrow-down: \f218; $fa-var-walkie-talkie: \f8ef; $fa-var-file-pen: \f31c; $fa-var-file-edit: \f31c; $fa-var-receipt: \f543; $fa-var-square-pen: \f14b; $fa-var-pen-square: \f14b; $fa-var-pencil-square: \f14b; $fa-var-suitcase-rolling: \f5c1; $fa-var-person-circle-exclamation: \e53f; $fa-var-chevron-down: \f078; $fa-var-battery-full: \f240; $fa-var-battery: \f240; $fa-var-battery-5: \f240; $fa-var-skull-crossbones: \f714; $fa-var-code-compare: \e13a; $fa-var-list-ul: \f0ca; $fa-var-list-dots: \f0ca; $fa-var-school-lock: \e56f; $fa-var-tower-cell: \e585; $fa-var-down-long: \f309; $fa-var-long-arrow-alt-down: \f309; $fa-var-ranking-star: \e561; $fa-var-chess-king: \f43f; $fa-var-person-harassing: \e549; $fa-var-brazilian-real-sign: \e46c; $fa-var-landmark-dome: \f752; $fa-var-landmark-alt: \f752; $fa-var-arrow-up: \f062; $fa-var-tv: \f26c; $fa-var-television: \f26c; $fa-var-tv-alt: \f26c; $fa-var-shrimp: \e448; $fa-var-list-check: \f0ae; $fa-var-tasks: \f0ae; $fa-var-jug-detergent: \e519; $fa-var-circle-user: \f2bd; $fa-var-user-circle: \f2bd; $fa-var-user-shield: \f505; $fa-var-wind: \f72e; $fa-var-car-burst: \f5e1; $fa-var-car-crash: \f5e1; $fa-var-y: \59; $fa-var-person-snowboarding: \f7ce; $fa-var-snowboarding: \f7ce; $fa-var-truck-fast: \f48b; $fa-var-shipping-fast: \f48b; $fa-var-fish: \f578; $fa-var-user-graduate: \f501; $fa-var-circle-half-stroke: \f042; $fa-var-adjust: \f042; $fa-var-clapperboard: \e131; $fa-var-circle-radiation: \f7ba; $fa-var-radiation-alt: \f7ba; $fa-var-baseball: \f433; $fa-var-baseball-ball: \f433; $fa-var-jet-fighter-up: \e518; $fa-var-diagram-project: \f542; $fa-var-project-diagram: \f542; $fa-var-copy: \f0c5; $fa-var-volume-xmark: \f6a9; $fa-var-volume-mute: \f6a9; $fa-var-volume-times: \f6a9; $fa-var-hand-sparkles: \e05d; $fa-var-grip: \f58d; $fa-var-grip-horizontal: \f58d; $fa-var-share-from-square: \f14d; $fa-var-share-square: \f14d; $fa-var-child-combatant: \e4e0; $fa-var-child-rifle: \e4e0; $fa-var-gun: \e19b; $fa-var-square-phone: \f098; $fa-var-phone-square: \f098; $fa-var-plus: \2b; $fa-var-add: \2b; $fa-var-expand: \f065; $fa-var-computer: \e4e5; $fa-var-xmark: \f00d; $fa-var-close: \f00d; $fa-var-multiply: \f00d; $fa-var-remove: \f00d; $fa-var-times: \f00d; $fa-var-arrows-up-down-left-right: \f047; $fa-var-arrows: \f047; $fa-var-chalkboard-user: \f51c; $fa-var-chalkboard-teacher: \f51c; $fa-var-peso-sign: \e222; $fa-var-building-shield: \e4d8; $fa-var-baby: \f77c; $fa-var-users-line: \e592; $fa-var-quote-left: \f10d; $fa-var-quote-left-alt: \f10d; $fa-var-tractor: \f722; $fa-var-trash-arrow-up: \f829; $fa-var-trash-restore: \f829; $fa-var-arrow-down-up-lock: \e4b0; $fa-var-lines-leaning: \e51e; $fa-var-ruler-combined: \f546; $fa-var-copyright: \f1f9; $fa-var-equals: \3d; $fa-var-blender: \f517; $fa-var-teeth: \f62e; $fa-var-shekel-sign: \f20b; $fa-var-ils: \f20b; $fa-var-shekel: \f20b; $fa-var-sheqel: \f20b; $fa-var-sheqel-sign: \f20b; $fa-var-map: \f279; $fa-var-rocket: \f135; $fa-var-photo-film: \f87c; $fa-var-photo-video: \f87c; $fa-var-folder-minus: \f65d; $fa-var-store: \f54e; $fa-var-arrow-trend-up: \e098; $fa-var-plug-circle-minus: \e55e; $fa-var-sign-hanging: \f4d9; $fa-var-sign: \f4d9; $fa-var-bezier-curve: \f55b; $fa-var-bell-slash: \f1f6; $fa-var-tablet: \f3fb; $fa-var-tablet-android: \f3fb; $fa-var-school-flag: \e56e; $fa-var-fill: \f575; $fa-var-angle-up: \f106; $fa-var-drumstick-bite: \f6d7; $fa-var-holly-berry: \f7aa; $fa-var-chevron-left: \f053; $fa-var-bacteria: \e059; $fa-var-hand-lizard: \f258; $fa-var-notdef: \e1fe; $fa-var-disease: \f7fa; $fa-var-briefcase-medical: \f469; $fa-var-genderless: \f22d; $fa-var-chevron-right: \f054; $fa-var-retweet: \f079; $fa-var-car-rear: \f5de; $fa-var-car-alt: \f5de; $fa-var-pump-soap: \e06b; $fa-var-video-slash: \f4e2; $fa-var-battery-quarter: \f243; $fa-var-battery-2: \f243; $fa-var-radio: \f8d7; $fa-var-baby-carriage: \f77d; $fa-var-carriage-baby: \f77d; $fa-var-traffic-light: \f637; $fa-var-thermometer: \f491; $fa-var-vr-cardboard: \f729; $fa-var-hand-middle-finger: \f806; $fa-var-percent: \25; $fa-var-percentage: \25; $fa-var-truck-moving: \f4df; $fa-var-glass-water-droplet: \e4f5; $fa-var-display: \e163; $fa-var-face-smile: \f118; $fa-var-smile: \f118; $fa-var-thumbtack: \f08d; $fa-var-thumb-tack: \f08d; $fa-var-trophy: \f091; $fa-var-person-praying: \f683; $fa-var-pray: \f683; $fa-var-hammer: \f6e3; $fa-var-hand-peace: \f25b; $fa-var-rotate: \f2f1; $fa-var-sync-alt: \f2f1; $fa-var-spinner: \f110; $fa-var-robot: \f544; $fa-var-peace: \f67c; $fa-var-gears: \f085; $fa-var-cogs: \f085; $fa-var-warehouse: \f494; $fa-var-arrow-up-right-dots: \e4b7; $fa-var-splotch: \f5bc; $fa-var-face-grin-hearts: \f584; $fa-var-grin-hearts: \f584; $fa-var-dice-four: \f524; $fa-var-sim-card: \f7c4; $fa-var-transgender: \f225; $fa-var-transgender-alt: \f225; $fa-var-mercury: \f223; $fa-var-arrow-turn-down: \f149; $fa-var-level-down: \f149; $fa-var-person-falling-burst: \e547; $fa-var-award: \f559; $fa-var-ticket-simple: \f3ff; $fa-var-ticket-alt: \f3ff; $fa-var-building: \f1ad; $fa-var-angles-left: \f100; $fa-var-angle-double-left: \f100; $fa-var-qrcode: \f029; $fa-var-clock-rotate-left: \f1da; $fa-var-history: \f1da; $fa-var-face-grin-beam-sweat: \f583; $fa-var-grin-beam-sweat: \f583; $fa-var-file-export: \f56e; $fa-var-arrow-right-from-file: \f56e; $fa-var-shield: \f132; $fa-var-shield-blank: \f132; $fa-var-arrow-up-short-wide: \f885; $fa-var-sort-amount-up-alt: \f885; $fa-var-house-medical: \e3b2; $fa-var-golf-ball-tee: \f450; $fa-var-golf-ball: \f450; $fa-var-circle-chevron-left: \f137; $fa-var-chevron-circle-left: \f137; $fa-var-house-chimney-window: \e00d; $fa-var-pen-nib: \f5ad; $fa-var-tent-arrow-turn-left: \e580; $fa-var-tents: \e582; $fa-var-wand-magic: \f0d0; $fa-var-magic: \f0d0; $fa-var-dog: \f6d3; $fa-var-carrot: \f787; $fa-var-moon: \f186; $fa-var-wine-glass-empty: \f5ce; $fa-var-wine-glass-alt: \f5ce; $fa-var-cheese: \f7ef; $fa-var-yin-yang: \f6ad; $fa-var-music: \f001; $fa-var-code-commit: \f386; $fa-var-temperature-low: \f76b; $fa-var-person-biking: \f84a; $fa-var-biking: \f84a; $fa-var-broom: \f51a; $fa-var-shield-heart: \e574; $fa-var-gopuram: \f664; $fa-var-earth-oceania: \e47b; $fa-var-globe-oceania: \e47b; $fa-var-square-xmark: \f2d3; $fa-var-times-square: \f2d3; $fa-var-xmark-square: \f2d3; $fa-var-hashtag: \23; $fa-var-up-right-and-down-left-from-center: \f424; $fa-var-expand-alt: \f424; $fa-var-oil-can: \f613; $fa-var-t: \54; $fa-var-hippo: \f6ed; $fa-var-chart-column: \e0e3; $fa-var-infinity: \f534; $fa-var-vial-circle-check: \e596; $fa-var-person-arrow-down-to-line: \e538; $fa-var-voicemail: \f897; $fa-var-fan: \f863; $fa-var-person-walking-luggage: \e554; $fa-var-up-down: \f338; $fa-var-arrows-alt-v: \f338; $fa-var-cloud-moon-rain: \f73c; $fa-var-calendar: \f133; $fa-var-trailer: \e041; $fa-var-bahai: \f666; $fa-var-haykal: \f666; $fa-var-sd-card: \f7c2; $fa-var-dragon: \f6d5; $fa-var-shoe-prints: \f54b; $fa-var-circle-plus: \f055; $fa-var-plus-circle: \f055; $fa-var-face-grin-tongue-wink: \f58b; $fa-var-grin-tongue-wink: \f58b; $fa-var-hand-holding: \f4bd; $fa-var-plug-circle-exclamation: \e55d; $fa-var-link-slash: \f127; $fa-var-chain-broken: \f127; $fa-var-chain-slash: \f127; $fa-var-unlink: \f127; $fa-var-clone: \f24d; $fa-var-person-walking-arrow-loop-left: \e551; $fa-var-arrow-up-z-a: \f882; $fa-var-sort-alpha-up-alt: \f882; $fa-var-fire-flame-curved: \f7e4; $fa-var-fire-alt: \f7e4; $fa-var-tornado: \f76f; $fa-var-file-circle-plus: \e494; $fa-var-book-quran: \f687; $fa-var-quran: \f687; $fa-var-anchor: \f13d; $fa-var-border-all: \f84c; $fa-var-face-angry: \f556; $fa-var-angry: \f556; $fa-var-cookie-bite: \f564; $fa-var-arrow-trend-down: \e097; $fa-var-rss: \f09e; $fa-var-feed: \f09e; $fa-var-draw-polygon: \f5ee; $fa-var-scale-balanced: \f24e; $fa-var-balance-scale: \f24e; $fa-var-gauge-simple-high: \f62a; $fa-var-tachometer: \f62a; $fa-var-tachometer-fast: \f62a; $fa-var-shower: \f2cc; $fa-var-desktop: \f390; $fa-var-desktop-alt: \f390; $fa-var-m: \4d; $fa-var-table-list: \f00b; $fa-var-th-list: \f00b; $fa-var-comment-sms: \f7cd; $fa-var-sms: \f7cd; $fa-var-book: \f02d; $fa-var-user-plus: \f234; $fa-var-check: \f00c; $fa-var-battery-three-quarters: \f241; $fa-var-battery-4: \f241; $fa-var-house-circle-check: \e509; $fa-var-angle-left: \f104; $fa-var-diagram-successor: \e47a; $fa-var-truck-arrow-right: \e58b; $fa-var-arrows-split-up-and-left: \e4bc; $fa-var-hand-fist: \f6de; $fa-var-fist-raised: \f6de; $fa-var-cloud-moon: \f6c3; $fa-var-briefcase: \f0b1; $fa-var-person-falling: \e546; $fa-var-image-portrait: \f3e0; $fa-var-portrait: \f3e0; $fa-var-user-tag: \f507; $fa-var-rug: \e569; $fa-var-earth-europe: \f7a2; $fa-var-globe-europe: \f7a2; $fa-var-cart-flatbed-suitcase: \f59d; $fa-var-luggage-cart: \f59d; $fa-var-rectangle-xmark: \f410; $fa-var-rectangle-times: \f410; $fa-var-times-rectangle: \f410; $fa-var-window-close: \f410; $fa-var-baht-sign: \e0ac; $fa-var-book-open: \f518; $fa-var-book-journal-whills: \f66a; $fa-var-journal-whills: \f66a; $fa-var-handcuffs: \e4f8; $fa-var-triangle-exclamation: \f071; $fa-var-exclamation-triangle: \f071; $fa-var-warning: \f071; $fa-var-database: \f1c0; $fa-var-share: \f064; $fa-var-arrow-turn-right: \f064; $fa-var-mail-forward: \f064; $fa-var-bottle-droplet: \e4c4; $fa-var-mask-face: \e1d7; $fa-var-hill-rockslide: \e508; $fa-var-right-left: \f362; $fa-var-exchange-alt: \f362; $fa-var-paper-plane: \f1d8; $fa-var-road-circle-exclamation: \e565; $fa-var-dungeon: \f6d9; $fa-var-align-right: \f038; $fa-var-money-bill-1-wave: \f53b; $fa-var-money-bill-wave-alt: \f53b; $fa-var-life-ring: \f1cd; $fa-var-hands: \f2a7; $fa-var-sign-language: \f2a7; $fa-var-signing: \f2a7; $fa-var-calendar-day: \f783; $fa-var-water-ladder: \f5c5; $fa-var-ladder-water: \f5c5; $fa-var-swimming-pool: \f5c5; $fa-var-arrows-up-down: \f07d; $fa-var-arrows-v: \f07d; $fa-var-face-grimace: \f57f; $fa-var-grimace: \f57f; $fa-var-wheelchair-move: \e2ce; $fa-var-wheelchair-alt: \e2ce; $fa-var-turn-down: \f3be; $fa-var-level-down-alt: \f3be; $fa-var-person-walking-arrow-right: \e552; $fa-var-square-envelope: \f199; $fa-var-envelope-square: \f199; $fa-var-dice: \f522; $fa-var-bowling-ball: \f436; $fa-var-brain: \f5dc; $fa-var-bandage: \f462; $fa-var-band-aid: \f462; $fa-var-calendar-minus: \f272; $fa-var-circle-xmark: \f057; $fa-var-times-circle: \f057; $fa-var-xmark-circle: \f057; $fa-var-gifts: \f79c; $fa-var-hotel: \f594; $fa-var-earth-asia: \f57e; $fa-var-globe-asia: \f57e; $fa-var-id-card-clip: \f47f; $fa-var-id-card-alt: \f47f; $fa-var-magnifying-glass-plus: \f00e; $fa-var-search-plus: \f00e; $fa-var-thumbs-up: \f164; $fa-var-user-clock: \f4fd; $fa-var-hand-dots: \f461; $fa-var-allergies: \f461; $fa-var-file-invoice: \f570; $fa-var-window-minimize: \f2d1; $fa-var-mug-saucer: \f0f4; $fa-var-coffee: \f0f4; $fa-var-brush: \f55d; $fa-var-mask: \f6fa; $fa-var-magnifying-glass-minus: \f010; $fa-var-search-minus: \f010; $fa-var-ruler-vertical: \f548; $fa-var-user-large: \f406; $fa-var-user-alt: \f406; $fa-var-train-tram: \e5b4; $fa-var-user-nurse: \f82f; $fa-var-syringe: \f48e; $fa-var-cloud-sun: \f6c4; $fa-var-stopwatch-20: \e06f; $fa-var-square-full: \f45c; $fa-var-magnet: \f076; $fa-var-jar: \e516; $fa-var-note-sticky: \f249; $fa-var-sticky-note: \f249; $fa-var-bug-slash: \e490; $fa-var-arrow-up-from-water-pump: \e4b6; $fa-var-bone: \f5d7; $fa-var-user-injured: \f728; $fa-var-face-sad-tear: \f5b4; $fa-var-sad-tear: \f5b4; $fa-var-plane: \f072; $fa-var-tent-arrows-down: \e581; $fa-var-exclamation: \21; $fa-var-arrows-spin: \e4bb; $fa-var-print: \f02f; $fa-var-turkish-lira-sign: \e2bb; $fa-var-try: \e2bb; $fa-var-turkish-lira: \e2bb; $fa-var-dollar-sign: \24; $fa-var-dollar: \24; $fa-var-usd: \24; $fa-var-x: \58; $fa-var-magnifying-glass-dollar: \f688; $fa-var-search-dollar: \f688; $fa-var-users-gear: \f509; $fa-var-users-cog: \f509; $fa-var-person-military-pointing: \e54a; $fa-var-building-columns: \f19c; $fa-var-bank: \f19c; $fa-var-institution: \f19c; $fa-var-museum: \f19c; $fa-var-university: \f19c; $fa-var-umbrella: \f0e9; $fa-var-trowel: \e589; $fa-var-d: \44; $fa-var-stapler: \e5af; $fa-var-masks-theater: \f630; $fa-var-theater-masks: \f630; $fa-var-kip-sign: \e1c4; $fa-var-hand-point-left: \f0a5; $fa-var-handshake-simple: \f4c6; $fa-var-handshake-alt: \f4c6; $fa-var-jet-fighter: \f0fb; $fa-var-fighter-jet: \f0fb; $fa-var-square-share-nodes: \f1e1; $fa-var-share-alt-square: \f1e1; $fa-var-barcode: \f02a; $fa-var-plus-minus: \e43c; $fa-var-video: \f03d; $fa-var-video-camera: \f03d; $fa-var-graduation-cap: \f19d; $fa-var-mortar-board: \f19d; $fa-var-hand-holding-medical: \e05c; $fa-var-person-circle-check: \e53e; $fa-var-turn-up: \f3bf; $fa-var-level-up-alt: \f3bf; $fa-var-monero: \f3d0; $fa-var-hooli: \f427; $fa-var-yelp: \f1e9; $fa-var-cc-visa: \f1f0; $fa-var-lastfm: \f202; $fa-var-shopware: \f5b5; $fa-var-creative-commons-nc: \f4e8; $fa-var-aws: \f375; $fa-var-redhat: \f7bc; $fa-var-yoast: \f2b1; $fa-var-cloudflare: \e07d; $fa-var-ups: \f7e0; $fa-var-wpexplorer: \f2de; $fa-var-dyalog: \f399; $fa-var-bity: \f37a; $fa-var-stackpath: \f842; $fa-var-buysellads: \f20d; $fa-var-first-order: \f2b0; $fa-var-modx: \f285; $fa-var-guilded: \e07e; $fa-var-vnv: \f40b; $fa-var-square-js: \f3b9; $fa-var-js-square: \f3b9; $fa-var-microsoft: \f3ca; $fa-var-qq: \f1d6; $fa-var-orcid: \f8d2; $fa-var-java: \f4e4; $fa-var-invision: \f7b0; $fa-var-creative-commons-pd-alt: \f4ed; $fa-var-centercode: \f380; $fa-var-glide-g: \f2a6; $fa-var-drupal: \f1a9; $fa-var-hire-a-helper: \f3b0; $fa-var-creative-commons-by: \f4e7; $fa-var-unity: \e049; $fa-var-whmcs: \f40d; $fa-var-rocketchat: \f3e8; $fa-var-vk: \f189; $fa-var-untappd: \f405; $fa-var-mailchimp: \f59e; $fa-var-css3-alt: \f38b; $fa-var-square-reddit: \f1a2; $fa-var-reddit-square: \f1a2; $fa-var-vimeo-v: \f27d; $fa-var-contao: \f26d; $fa-var-square-font-awesome: \e5ad; $fa-var-deskpro: \f38f; $fa-var-sistrix: \f3ee; $fa-var-square-instagram: \e055; $fa-var-instagram-square: \e055; $fa-var-battle-net: \f835; $fa-var-the-red-yeti: \f69d; $fa-var-square-hacker-news: \f3af; $fa-var-hacker-news-square: \f3af; $fa-var-edge: \f282; $fa-var-napster: \f3d2; $fa-var-square-snapchat: \f2ad; $fa-var-snapchat-square: \f2ad; $fa-var-google-plus-g: \f0d5; $fa-var-artstation: \f77a; $fa-var-markdown: \f60f; $fa-var-sourcetree: \f7d3; $fa-var-google-plus: \f2b3; $fa-var-diaspora: \f791; $fa-var-foursquare: \f180; $fa-var-stack-overflow: \f16c; $fa-var-github-alt: \f113; $fa-var-phoenix-squadron: \f511; $fa-var-pagelines: \f18c; $fa-var-algolia: \f36c; $fa-var-red-river: \f3e3; $fa-var-creative-commons-sa: \f4ef; $fa-var-safari: \f267; $fa-var-google: \f1a0; $fa-var-square-font-awesome-stroke: \f35c; $fa-var-font-awesome-alt: \f35c; $fa-var-atlassian: \f77b; $fa-var-linkedin-in: \f0e1; $fa-var-digital-ocean: \f391; $fa-var-nimblr: \f5a8; $fa-var-chromecast: \f838; $fa-var-evernote: \f839; $fa-var-hacker-news: \f1d4; $fa-var-creative-commons-sampling: \f4f0; $fa-var-adversal: \f36a; $fa-var-creative-commons: \f25e; $fa-var-watchman-monitoring: \e087; $fa-var-fonticons: \f280; $fa-var-weixin: \f1d7; $fa-var-shirtsinbulk: \f214; $fa-var-codepen: \f1cb; $fa-var-git-alt: \f841; $fa-var-lyft: \f3c3; $fa-var-rev: \f5b2; $fa-var-windows: \f17a; $fa-var-wizards-of-the-coast: \f730; $fa-var-square-viadeo: \f2aa; $fa-var-viadeo-square: \f2aa; $fa-var-meetup: \f2e0; $fa-var-centos: \f789; $fa-var-adn: \f170; $fa-var-cloudsmith: \f384; $fa-var-pied-piper-alt: \f1a8; $fa-var-square-dribbble: \f397; $fa-var-dribbble-square: \f397; $fa-var-codiepie: \f284; $fa-var-node: \f419; $fa-var-mix: \f3cb; $fa-var-steam: \f1b6; $fa-var-cc-apple-pay: \f416; $fa-var-scribd: \f28a; $fa-var-openid: \f19b; $fa-var-instalod: \e081; $fa-var-expeditedssl: \f23e; $fa-var-sellcast: \f2da; $fa-var-square-twitter: \f081; $fa-var-twitter-square: \f081; $fa-var-r-project: \f4f7; $fa-var-delicious: \f1a5; $fa-var-freebsd: \f3a4; $fa-var-vuejs: \f41f; $fa-var-accusoft: \f369; $fa-var-ioxhost: \f208; $fa-var-fonticons-fi: \f3a2; $fa-var-app-store: \f36f; $fa-var-cc-mastercard: \f1f1; $fa-var-itunes-note: \f3b5; $fa-var-golang: \e40f; $fa-var-kickstarter: \f3bb; $fa-var-grav: \f2d6; $fa-var-weibo: \f18a; $fa-var-uncharted: \e084; $fa-var-firstdraft: \f3a1; $fa-var-square-youtube: \f431; $fa-var-youtube-square: \f431; $fa-var-wikipedia-w: \f266; $fa-var-wpressr: \f3e4; $fa-var-rendact: \f3e4; $fa-var-angellist: \f209; $fa-var-galactic-republic: \f50c; $fa-var-nfc-directional: \e530; $fa-var-skype: \f17e; $fa-var-joget: \f3b7; $fa-var-fedora: \f798; $fa-var-stripe-s: \f42a; $fa-var-meta: \e49b; $fa-var-laravel: \f3bd; $fa-var-hotjar: \f3b1; $fa-var-bluetooth-b: \f294; $fa-var-sticker-mule: \f3f7; $fa-var-creative-commons-zero: \f4f3; $fa-var-hips: \f452; $fa-var-behance: \f1b4; $fa-var-reddit: \f1a1; $fa-var-discord: \f392; $fa-var-chrome: \f268; $fa-var-app-store-ios: \f370; $fa-var-cc-discover: \f1f2; $fa-var-wpbeginner: \f297; $fa-var-confluence: \f78d; $fa-var-mdb: \f8ca; $fa-var-dochub: \f394; $fa-var-accessible-icon: \f368; $fa-var-ebay: \f4f4; $fa-var-amazon: \f270; $fa-var-unsplash: \e07c; $fa-var-yarn: \f7e3; $fa-var-square-steam: \f1b7; $fa-var-steam-square: \f1b7; $fa-var-500px: \f26e; $fa-var-square-vimeo: \f194; $fa-var-vimeo-square: \f194; $fa-var-asymmetrik: \f372; $fa-var-font-awesome: \f2b4; $fa-var-font-awesome-flag: \f2b4; $fa-var-font-awesome-logo-full: \f2b4; $fa-var-gratipay: \f184; $fa-var-apple: \f179; $fa-var-hive: \e07f; $fa-var-gitkraken: \f3a6; $fa-var-keybase: \f4f5; $fa-var-apple-pay: \f415; $fa-var-padlet: \e4a0; $fa-var-amazon-pay: \f42c; $fa-var-square-github: \f092; $fa-var-github-square: \f092; $fa-var-stumbleupon: \f1a4; $fa-var-fedex: \f797; $fa-var-phoenix-framework: \f3dc; $fa-var-shopify: \e057; $fa-var-neos: \f612; $fa-var-hackerrank: \f5f7; $fa-var-researchgate: \f4f8; $fa-var-swift: \f8e1; $fa-var-angular: \f420; $fa-var-speakap: \f3f3; $fa-var-angrycreative: \f36e; $fa-var-y-combinator: \f23b; $fa-var-empire: \f1d1; $fa-var-envira: \f299; $fa-var-square-gitlab: \e5ae; $fa-var-gitlab-square: \e5ae; $fa-var-studiovinari: \f3f8; $fa-var-pied-piper: \f2ae; $fa-var-wordpress: \f19a; $fa-var-product-hunt: \f288; $fa-var-firefox: \f269; $fa-var-linode: \f2b8; $fa-var-goodreads: \f3a8; $fa-var-square-odnoklassniki: \f264; $fa-var-odnoklassniki-square: \f264; $fa-var-jsfiddle: \f1cc; $fa-var-sith: \f512; $fa-var-themeisle: \f2b2; $fa-var-page4: \f3d7; $fa-var-hashnode: \e499; $fa-var-react: \f41b; $fa-var-cc-paypal: \f1f4; $fa-var-squarespace: \f5be; $fa-var-cc-stripe: \f1f5; $fa-var-creative-commons-share: \f4f2; $fa-var-bitcoin: \f379; $fa-var-keycdn: \f3ba; $fa-var-opera: \f26a; $fa-var-itch-io: \f83a; $fa-var-umbraco: \f8e8; $fa-var-galactic-senate: \f50d; $fa-var-ubuntu: \f7df; $fa-var-draft2digital: \f396; $fa-var-stripe: \f429; $fa-var-houzz: \f27c; $fa-var-gg: \f260; $fa-var-dhl: \f790; $fa-var-square-pinterest: \f0d3; $fa-var-pinterest-square: \f0d3; $fa-var-xing: \f168; $fa-var-blackberry: \f37b; $fa-var-creative-commons-pd: \f4ec; $fa-var-playstation: \f3df; $fa-var-quinscape: \f459; $fa-var-less: \f41d; $fa-var-blogger-b: \f37d; $fa-var-opencart: \f23d; $fa-var-vine: \f1ca; $fa-var-paypal: \f1ed; $fa-var-gitlab: \f296; $fa-var-typo3: \f42b; $fa-var-reddit-alien: \f281; $fa-var-yahoo: \f19e; $fa-var-dailymotion: \e052; $fa-var-affiliatetheme: \f36b; $fa-var-pied-piper-pp: \f1a7; $fa-var-bootstrap: \f836; $fa-var-odnoklassniki: \f263; $fa-var-nfc-symbol: \e531; $fa-var-ethereum: \f42e; $fa-var-speaker-deck: \f83c; $fa-var-creative-commons-nc-eu: \f4e9; $fa-var-patreon: \f3d9; $fa-var-avianex: \f374; $fa-var-ello: \f5f1; $fa-var-gofore: \f3a7; $fa-var-bimobject: \f378; $fa-var-facebook-f: \f39e; $fa-var-square-google-plus: \f0d4; $fa-var-google-plus-square: \f0d4; $fa-var-mandalorian: \f50f; $fa-var-first-order-alt: \f50a; $fa-var-osi: \f41a; $fa-var-google-wallet: \f1ee; $fa-var-d-and-d-beyond: \f6ca; $fa-var-periscope: \f3da; $fa-var-fulcrum: \f50b; $fa-var-cloudscale: \f383; $fa-var-forumbee: \f211; $fa-var-mizuni: \f3cc; $fa-var-schlix: \f3ea; $fa-var-square-xing: \f169; $fa-var-xing-square: \f169; $fa-var-bandcamp: \f2d5; $fa-var-wpforms: \f298; $fa-var-cloudversify: \f385; $fa-var-usps: \f7e1; $fa-var-megaport: \f5a3; $fa-var-magento: \f3c4; $fa-var-spotify: \f1bc; $fa-var-optin-monster: \f23c; $fa-var-fly: \f417; $fa-var-aviato: \f421; $fa-var-itunes: \f3b4; $fa-var-cuttlefish: \f38c; $fa-var-blogger: \f37c; $fa-var-flickr: \f16e; $fa-var-viber: \f409; $fa-var-soundcloud: \f1be; $fa-var-digg: \f1a6; $fa-var-tencent-weibo: \f1d5; $fa-var-symfony: \f83d; $fa-var-maxcdn: \f136; $fa-var-etsy: \f2d7; $fa-var-facebook-messenger: \f39f; $fa-var-audible: \f373; $fa-var-think-peaks: \f731; $fa-var-bilibili: \e3d9; $fa-var-erlang: \f39d; $fa-var-cotton-bureau: \f89e; $fa-var-dashcube: \f210; $fa-var-42-group: \e080; $fa-var-innosoft: \e080; $fa-var-stack-exchange: \f18d; $fa-var-elementor: \f430; $fa-var-square-pied-piper: \e01e; $fa-var-pied-piper-square: \e01e; $fa-var-creative-commons-nd: \f4eb; $fa-var-palfed: \f3d8; $fa-var-superpowers: \f2dd; $fa-var-resolving: \f3e7; $fa-var-xbox: \f412; $fa-var-searchengin: \f3eb; $fa-var-tiktok: \e07b; $fa-var-square-facebook: \f082; $fa-var-facebook-square: \f082; $fa-var-renren: \f18b; $fa-var-linux: \f17c; $fa-var-glide: \f2a5; $fa-var-linkedin: \f08c; $fa-var-hubspot: \f3b2; $fa-var-deploydog: \f38e; $fa-var-twitch: \f1e8; $fa-var-ravelry: \f2d9; $fa-var-mixer: \e056; $fa-var-square-lastfm: \f203; $fa-var-lastfm-square: \f203; $fa-var-vimeo: \f40a; $fa-var-mendeley: \f7b3; $fa-var-uniregistry: \f404; $fa-var-figma: \f799; $fa-var-creative-commons-remix: \f4ee; $fa-var-cc-amazon-pay: \f42d; $fa-var-dropbox: \f16b; $fa-var-instagram: \f16d; $fa-var-cmplid: \e360; $fa-var-facebook: \f09a; $fa-var-gripfire: \f3ac; $fa-var-jedi-order: \f50e; $fa-var-uikit: \f403; $fa-var-fort-awesome-alt: \f3a3; $fa-var-phabricator: \f3db; $fa-var-ussunnah: \f407; $fa-var-earlybirds: \f39a; $fa-var-trade-federation: \f513; $fa-var-autoprefixer: \f41c; $fa-var-whatsapp: \f232; $fa-var-slideshare: \f1e7; $fa-var-google-play: \f3ab; $fa-var-viadeo: \f2a9; $fa-var-line: \f3c0; $fa-var-google-drive: \f3aa; $fa-var-servicestack: \f3ec; $fa-var-simplybuilt: \f215; $fa-var-bitbucket: \f171; $fa-var-imdb: \f2d8; $fa-var-deezer: \e077; $fa-var-raspberry-pi: \f7bb; $fa-var-jira: \f7b1; $fa-var-docker: \f395; $fa-var-screenpal: \e570; $fa-var-bluetooth: \f293; $fa-var-gitter: \f426; $fa-var-d-and-d: \f38d; $fa-var-microblog: \e01a; $fa-var-cc-diners-club: \f24c; $fa-var-gg-circle: \f261; $fa-var-pied-piper-hat: \f4e5; $fa-var-kickstarter-k: \f3bc; $fa-var-yandex: \f413; $fa-var-readme: \f4d5; $fa-var-html5: \f13b; $fa-var-sellsy: \f213; $fa-var-sass: \f41e; $fa-var-wirsindhandwerk: \e2d0; $fa-var-wsh: \e2d0; $fa-var-buromobelexperte: \f37f; $fa-var-salesforce: \f83b; $fa-var-octopus-deploy: \e082; $fa-var-medapps: \f3c6; $fa-var-ns8: \f3d5; $fa-var-pinterest-p: \f231; $fa-var-apper: \f371; $fa-var-fort-awesome: \f286; $fa-var-waze: \f83f; $fa-var-cc-jcb: \f24b; $fa-var-snapchat: \f2ab; $fa-var-snapchat-ghost: \f2ab; $fa-var-fantasy-flight-games: \f6dc; $fa-var-rust: \e07a; $fa-var-wix: \f5cf; $fa-var-square-behance: \f1b5; $fa-var-behance-square: \f1b5; $fa-var-supple: \f3f9; $fa-var-rebel: \f1d0; $fa-var-css3: \f13c; $fa-var-staylinked: \f3f5; $fa-var-kaggle: \f5fa; $fa-var-space-awesome: \e5ac; $fa-var-deviantart: \f1bd; $fa-var-cpanel: \f388; $fa-var-goodreads-g: \f3a9; $fa-var-square-git: \f1d2; $fa-var-git-square: \f1d2; $fa-var-square-tumblr: \f174; $fa-var-tumblr-square: \f174; $fa-var-trello: \f181; $fa-var-creative-commons-nc-jp: \f4ea; $fa-var-get-pocket: \f265; $fa-var-perbyte: \e083; $fa-var-grunt: \f3ad; $fa-var-weebly: \f5cc; $fa-var-connectdevelop: \f20e; $fa-var-leanpub: \f212; $fa-var-black-tie: \f27e; $fa-var-themeco: \f5c6; $fa-var-python: \f3e2; $fa-var-android: \f17b; $fa-var-bots: \e340; $fa-var-free-code-camp: \f2c5; $fa-var-hornbill: \f592; $fa-var-js: \f3b8; $fa-var-ideal: \e013; $fa-var-git: \f1d3; $fa-var-dev: \f6cc; $fa-var-sketch: \f7c6; $fa-var-yandex-international: \f414; $fa-var-cc-amex: \f1f3; $fa-var-uber: \f402; $fa-var-github: \f09b; $fa-var-php: \f457; $fa-var-alipay: \f642; $fa-var-youtube: \f167; $fa-var-skyatlas: \f216; $fa-var-firefox-browser: \e007; $fa-var-replyd: \f3e6; $fa-var-suse: \f7d6; $fa-var-jenkins: \f3b6; $fa-var-twitter: \f099; $fa-var-rockrms: \f3e9; $fa-var-pinterest: \f0d2; $fa-var-buffer: \f837; $fa-var-npm: \f3d4; $fa-var-yammer: \f840; $fa-var-btc: \f15a; $fa-var-dribbble: \f17d; $fa-var-stumbleupon-circle: \f1a3; $fa-var-internet-explorer: \f26b; $fa-var-stubber: \e5c7; $fa-var-telegram: \f2c6; $fa-var-telegram-plane: \f2c6; $fa-var-old-republic: \f510; $fa-var-odysee: \e5c6; $fa-var-square-whatsapp: \f40c; $fa-var-whatsapp-square: \f40c; $fa-var-node-js: \f3d3; $fa-var-edge-legacy: \e078; $fa-var-slack: \f198; $fa-var-slack-hash: \f198; $fa-var-medrt: \f3c8; $fa-var-usb: \f287; $fa-var-tumblr: \f173; $fa-var-vaadin: \f408; $fa-var-quora: \f2c4; $fa-var-reacteurope: \f75d; $fa-var-medium: \f23a; $fa-var-medium-m: \f23a; $fa-var-amilia: \f36d; $fa-var-mixcloud: \f289; $fa-var-flipboard: \f44d; $fa-var-viacoin: \f237; $fa-var-critical-role: \f6c9; $fa-var-sitrox: \e44a; $fa-var-discourse: \f393; $fa-var-joomla: \f1aa; $fa-var-mastodon: \f4f6; $fa-var-airbnb: \f834; $fa-var-wolf-pack-battalion: \f514; $fa-var-buy-n-large: \f8a6; $fa-var-gulp: \f3ae; $fa-var-creative-commons-sampling-plus: \f4f1; $fa-var-strava: \f428; $fa-var-ember: \f423; $fa-var-canadian-maple-leaf: \f785; $fa-var-teamspeak: \f4f9; $fa-var-pushed: \f3e1; $fa-var-wordpress-simple: \f411; $fa-var-nutritionix: \f3d6; $fa-var-wodu: \e088; $fa-var-google-pay: \e079; $fa-var-intercom: \f7af; $fa-var-zhihu: \f63f; $fa-var-korvue: \f42f; $fa-var-pix: \e43a; $fa-var-steam-symbol: \f3f6; $fa-icons: ( "0": $fa-var-0, "1": $fa-var-1, "2": $fa-var-2, "3": $fa-var-3, "4": $fa-var-4, "5": $fa-var-5, "6": $fa-var-6, "7": $fa-var-7, "8": $fa-var-8, "9": $fa-var-9, "fill-drip": $fa-var-fill-drip, "arrows-to-circle": $fa-var-arrows-to-circle, "circle-chevron-right": $fa-var-circle-chevron-right, "chevron-circle-right": $fa-var-chevron-circle-right, "at": $fa-var-at, "trash-can": $fa-var-trash-can, "trash-alt": $fa-var-trash-alt, "text-height": $fa-var-text-height, "user-xmark": $fa-var-user-xmark, "user-times": $fa-var-user-times, "stethoscope": $fa-var-stethoscope, "message": $fa-var-message, "comment-alt": $fa-var-comment-alt, "info": $fa-var-info, "down-left-and-up-right-to-center": $fa-var-down-left-and-up-right-to-center, "compress-alt": $fa-var-compress-alt, "explosion": $fa-var-explosion, "file-lines": $fa-var-file-lines, "file-alt": $fa-var-file-alt, "file-text": $fa-var-file-text, "wave-square": $fa-var-wave-square, "ring": $fa-var-ring, "building-un": $fa-var-building-un, "dice-three": $fa-var-dice-three, "calendar-days": $fa-var-calendar-days, "calendar-alt": $fa-var-calendar-alt, "anchor-circle-check": $fa-var-anchor-circle-check, "building-circle-arrow-right": $fa-var-building-circle-arrow-right, "volleyball": $fa-var-volleyball, "volleyball-ball": $fa-var-volleyball-ball, "arrows-up-to-line": $fa-var-arrows-up-to-line, "sort-down": $fa-var-sort-down, "sort-desc": $fa-var-sort-desc, "circle-minus": $fa-var-circle-minus, "minus-circle": $fa-var-minus-circle, "door-open": $fa-var-door-open, "right-from-bracket": $fa-var-right-from-bracket, "sign-out-alt": $fa-var-sign-out-alt, "atom": $fa-var-atom, "soap": $fa-var-soap, "icons": $fa-var-icons, "heart-music-camera-bolt": $fa-var-heart-music-camera-bolt, "microphone-lines-slash": $fa-var-microphone-lines-slash, "microphone-alt-slash": $fa-var-microphone-alt-slash, "bridge-circle-check": $fa-var-bridge-circle-check, "pump-medical": $fa-var-pump-medical, "fingerprint": $fa-var-fingerprint, "hand-point-right": $fa-var-hand-point-right, "magnifying-glass-location": $fa-var-magnifying-glass-location, "search-location": $fa-var-search-location, "forward-step": $fa-var-forward-step, "step-forward": $fa-var-step-forward, "face-smile-beam": $fa-var-face-smile-beam, "smile-beam": $fa-var-smile-beam, "flag-checkered": $fa-var-flag-checkered, "football": $fa-var-football, "football-ball": $fa-var-football-ball, "school-circle-exclamation": $fa-var-school-circle-exclamation, "crop": $fa-var-crop, "angles-down": $fa-var-angles-down, "angle-double-down": $fa-var-angle-double-down, "users-rectangle": $fa-var-users-rectangle, "people-roof": $fa-var-people-roof, "people-line": $fa-var-people-line, "beer-mug-empty": $fa-var-beer-mug-empty, "beer": $fa-var-beer, "diagram-predecessor": $fa-var-diagram-predecessor, "arrow-up-long": $fa-var-arrow-up-long, "long-arrow-up": $fa-var-long-arrow-up, "fire-flame-simple": $fa-var-fire-flame-simple, "burn": $fa-var-burn, "person": $fa-var-person, "male": $fa-var-male, "laptop": $fa-var-laptop, "file-csv": $fa-var-file-csv, "menorah": $fa-var-menorah, "truck-plane": $fa-var-truck-plane, "record-vinyl": $fa-var-record-vinyl, "face-grin-stars": $fa-var-face-grin-stars, "grin-stars": $fa-var-grin-stars, "bong": $fa-var-bong, "spaghetti-monster-flying": $fa-var-spaghetti-monster-flying, "pastafarianism": $fa-var-pastafarianism, "arrow-down-up-across-line": $fa-var-arrow-down-up-across-line, "spoon": $fa-var-spoon, "utensil-spoon": $fa-var-utensil-spoon, "jar-wheat": $fa-var-jar-wheat, "envelopes-bulk": $fa-var-envelopes-bulk, "mail-bulk": $fa-var-mail-bulk, "file-circle-exclamation": $fa-var-file-circle-exclamation, "circle-h": $fa-var-circle-h, "hospital-symbol": $fa-var-hospital-symbol, "pager": $fa-var-pager, "address-book": $fa-var-address-book, "contact-book": $fa-var-contact-book, "strikethrough": $fa-var-strikethrough, "k": $fa-var-k, "landmark-flag": $fa-var-landmark-flag, "pencil": $fa-var-pencil, "pencil-alt": $fa-var-pencil-alt, "backward": $fa-var-backward, "caret-right": $fa-var-caret-right, "comments": $fa-var-comments, "paste": $fa-var-paste, "file-clipboard": $fa-var-file-clipboard, "code-pull-request": $fa-var-code-pull-request, "clipboard-list": $fa-var-clipboard-list, "truck-ramp-box": $fa-var-truck-ramp-box, "truck-loading": $fa-var-truck-loading, "user-check": $fa-var-user-check, "vial-virus": $fa-var-vial-virus, "sheet-plastic": $fa-var-sheet-plastic, "blog": $fa-var-blog, "user-ninja": $fa-var-user-ninja, "person-arrow-up-from-line": $fa-var-person-arrow-up-from-line, "scroll-torah": $fa-var-scroll-torah, "torah": $fa-var-torah, "broom-ball": $fa-var-broom-ball, "quidditch": $fa-var-quidditch, "quidditch-broom-ball": $fa-var-quidditch-broom-ball, "toggle-off": $fa-var-toggle-off, "box-archive": $fa-var-box-archive, "archive": $fa-var-archive, "person-drowning": $fa-var-person-drowning, "arrow-down-9-1": $fa-var-arrow-down-9-1, "sort-numeric-desc": $fa-var-sort-numeric-desc, "sort-numeric-down-alt": $fa-var-sort-numeric-down-alt, "face-grin-tongue-squint": $fa-var-face-grin-tongue-squint, "grin-tongue-squint": $fa-var-grin-tongue-squint, "spray-can": $fa-var-spray-can, "truck-monster": $fa-var-truck-monster, "w": $fa-var-w, "earth-africa": $fa-var-earth-africa, "globe-africa": $fa-var-globe-africa, "rainbow": $fa-var-rainbow, "circle-notch": $fa-var-circle-notch, "tablet-screen-button": $fa-var-tablet-screen-button, "tablet-alt": $fa-var-tablet-alt, "paw": $fa-var-paw, "cloud": $fa-var-cloud, "trowel-bricks": $fa-var-trowel-bricks, "face-flushed": $fa-var-face-flushed, "flushed": $fa-var-flushed, "hospital-user": $fa-var-hospital-user, "tent-arrow-left-right": $fa-var-tent-arrow-left-right, "gavel": $fa-var-gavel, "legal": $fa-var-legal, "binoculars": $fa-var-binoculars, "microphone-slash": $fa-var-microphone-slash, "box-tissue": $fa-var-box-tissue, "motorcycle": $fa-var-motorcycle, "bell-concierge": $fa-var-bell-concierge, "concierge-bell": $fa-var-concierge-bell, "pen-ruler": $fa-var-pen-ruler, "pencil-ruler": $fa-var-pencil-ruler, "people-arrows": $fa-var-people-arrows, "people-arrows-left-right": $fa-var-people-arrows-left-right, "mars-and-venus-burst": $fa-var-mars-and-venus-burst, "square-caret-right": $fa-var-square-caret-right, "caret-square-right": $fa-var-caret-square-right, "scissors": $fa-var-scissors, "cut": $fa-var-cut, "sun-plant-wilt": $fa-var-sun-plant-wilt, "toilets-portable": $fa-var-toilets-portable, "hockey-puck": $fa-var-hockey-puck, "table": $fa-var-table, "magnifying-glass-arrow-right": $fa-var-magnifying-glass-arrow-right, "tachograph-digital": $fa-var-tachograph-digital, "digital-tachograph": $fa-var-digital-tachograph, "users-slash": $fa-var-users-slash, "clover": $fa-var-clover, "reply": $fa-var-reply, "mail-reply": $fa-var-mail-reply, "star-and-crescent": $fa-var-star-and-crescent, "house-fire": $fa-var-house-fire, "square-minus": $fa-var-square-minus, "minus-square": $fa-var-minus-square, "helicopter": $fa-var-helicopter, "compass": $fa-var-compass, "square-caret-down": $fa-var-square-caret-down, "caret-square-down": $fa-var-caret-square-down, "file-circle-question": $fa-var-file-circle-question, "laptop-code": $fa-var-laptop-code, "swatchbook": $fa-var-swatchbook, "prescription-bottle": $fa-var-prescription-bottle, "bars": $fa-var-bars, "navicon": $fa-var-navicon, "people-group": $fa-var-people-group, "hourglass-end": $fa-var-hourglass-end, "hourglass-3": $fa-var-hourglass-3, "heart-crack": $fa-var-heart-crack, "heart-broken": $fa-var-heart-broken, "square-up-right": $fa-var-square-up-right, "external-link-square-alt": $fa-var-external-link-square-alt, "face-kiss-beam": $fa-var-face-kiss-beam, "kiss-beam": $fa-var-kiss-beam, "film": $fa-var-film, "ruler-horizontal": $fa-var-ruler-horizontal, "people-robbery": $fa-var-people-robbery, "lightbulb": $fa-var-lightbulb, "caret-left": $fa-var-caret-left, "circle-exclamation": $fa-var-circle-exclamation, "exclamation-circle": $fa-var-exclamation-circle, "school-circle-xmark": $fa-var-school-circle-xmark, "arrow-right-from-bracket": $fa-var-arrow-right-from-bracket, "sign-out": $fa-var-sign-out, "circle-chevron-down": $fa-var-circle-chevron-down, "chevron-circle-down": $fa-var-chevron-circle-down, "unlock-keyhole": $fa-var-unlock-keyhole, "unlock-alt": $fa-var-unlock-alt, "cloud-showers-heavy": $fa-var-cloud-showers-heavy, "headphones-simple": $fa-var-headphones-simple, "headphones-alt": $fa-var-headphones-alt, "sitemap": $fa-var-sitemap, "circle-dollar-to-slot": $fa-var-circle-dollar-to-slot, "donate": $fa-var-donate, "memory": $fa-var-memory, "road-spikes": $fa-var-road-spikes, "fire-burner": $fa-var-fire-burner, "flag": $fa-var-flag, "hanukiah": $fa-var-hanukiah, "feather": $fa-var-feather, "volume-low": $fa-var-volume-low, "volume-down": $fa-var-volume-down, "comment-slash": $fa-var-comment-slash, "cloud-sun-rain": $fa-var-cloud-sun-rain, "compress": $fa-var-compress, "wheat-awn": $fa-var-wheat-awn, "wheat-alt": $fa-var-wheat-alt, "ankh": $fa-var-ankh, "hands-holding-child": $fa-var-hands-holding-child, "asterisk": $fa-var-asterisk, "square-check": $fa-var-square-check, "check-square": $fa-var-check-square, "peseta-sign": $fa-var-peseta-sign, "heading": $fa-var-heading, "header": $fa-var-header, "ghost": $fa-var-ghost, "list": $fa-var-list, "list-squares": $fa-var-list-squares, "square-phone-flip": $fa-var-square-phone-flip, "phone-square-alt": $fa-var-phone-square-alt, "cart-plus": $fa-var-cart-plus, "gamepad": $fa-var-gamepad, "circle-dot": $fa-var-circle-dot, "dot-circle": $fa-var-dot-circle, "face-dizzy": $fa-var-face-dizzy, "dizzy": $fa-var-dizzy, "egg": $fa-var-egg, "house-medical-circle-xmark": $fa-var-house-medical-circle-xmark, "campground": $fa-var-campground, "folder-plus": $fa-var-folder-plus, "futbol": $fa-var-futbol, "futbol-ball": $fa-var-futbol-ball, "soccer-ball": $fa-var-soccer-ball, "paintbrush": $fa-var-paintbrush, "paint-brush": $fa-var-paint-brush, "lock": $fa-var-lock, "gas-pump": $fa-var-gas-pump, "hot-tub-person": $fa-var-hot-tub-person, "hot-tub": $fa-var-hot-tub, "map-location": $fa-var-map-location, "map-marked": $fa-var-map-marked, "house-flood-water": $fa-var-house-flood-water, "tree": $fa-var-tree, "bridge-lock": $fa-var-bridge-lock, "sack-dollar": $fa-var-sack-dollar, "pen-to-square": $fa-var-pen-to-square, "edit": $fa-var-edit, "car-side": $fa-var-car-side, "share-nodes": $fa-var-share-nodes, "share-alt": $fa-var-share-alt, "heart-circle-minus": $fa-var-heart-circle-minus, "hourglass-half": $fa-var-hourglass-half, "hourglass-2": $fa-var-hourglass-2, "microscope": $fa-var-microscope, "sink": $fa-var-sink, "bag-shopping": $fa-var-bag-shopping, "shopping-bag": $fa-var-shopping-bag, "arrow-down-z-a": $fa-var-arrow-down-z-a, "sort-alpha-desc": $fa-var-sort-alpha-desc, "sort-alpha-down-alt": $fa-var-sort-alpha-down-alt, "mitten": $fa-var-mitten, "person-rays": $fa-var-person-rays, "users": $fa-var-users, "eye-slash": $fa-var-eye-slash, "flask-vial": $fa-var-flask-vial, "hand": $fa-var-hand, "hand-paper": $fa-var-hand-paper, "om": $fa-var-om, "worm": $fa-var-worm, "house-circle-xmark": $fa-var-house-circle-xmark, "plug": $fa-var-plug, "chevron-up": $fa-var-chevron-up, "hand-spock": $fa-var-hand-spock, "stopwatch": $fa-var-stopwatch, "face-kiss": $fa-var-face-kiss, "kiss": $fa-var-kiss, "bridge-circle-xmark": $fa-var-bridge-circle-xmark, "face-grin-tongue": $fa-var-face-grin-tongue, "grin-tongue": $fa-var-grin-tongue, "chess-bishop": $fa-var-chess-bishop, "face-grin-wink": $fa-var-face-grin-wink, "grin-wink": $fa-var-grin-wink, "ear-deaf": $fa-var-ear-deaf, "deaf": $fa-var-deaf, "deafness": $fa-var-deafness, "hard-of-hearing": $fa-var-hard-of-hearing, "road-circle-check": $fa-var-road-circle-check, "dice-five": $fa-var-dice-five, "square-rss": $fa-var-square-rss, "rss-square": $fa-var-rss-square, "land-mine-on": $fa-var-land-mine-on, "i-cursor": $fa-var-i-cursor, "stamp": $fa-var-stamp, "stairs": $fa-var-stairs, "i": $fa-var-i, "hryvnia-sign": $fa-var-hryvnia-sign, "hryvnia": $fa-var-hryvnia, "pills": $fa-var-pills, "face-grin-wide": $fa-var-face-grin-wide, "grin-alt": $fa-var-grin-alt, "tooth": $fa-var-tooth, "v": $fa-var-v, "bangladeshi-taka-sign": $fa-var-bangladeshi-taka-sign, "bicycle": $fa-var-bicycle, "staff-snake": $fa-var-staff-snake, "rod-asclepius": $fa-var-rod-asclepius, "rod-snake": $fa-var-rod-snake, "staff-aesculapius": $fa-var-staff-aesculapius, "head-side-cough-slash": $fa-var-head-side-cough-slash, "truck-medical": $fa-var-truck-medical, "ambulance": $fa-var-ambulance, "wheat-awn-circle-exclamation": $fa-var-wheat-awn-circle-exclamation, "snowman": $fa-var-snowman, "mortar-pestle": $fa-var-mortar-pestle, "road-barrier": $fa-var-road-barrier, "school": $fa-var-school, "igloo": $fa-var-igloo, "joint": $fa-var-joint, "angle-right": $fa-var-angle-right, "horse": $fa-var-horse, "q": $fa-var-q, "g": $fa-var-g, "notes-medical": $fa-var-notes-medical, "temperature-half": $fa-var-temperature-half, "temperature-2": $fa-var-temperature-2, "thermometer-2": $fa-var-thermometer-2, "thermometer-half": $fa-var-thermometer-half, "dong-sign": $fa-var-dong-sign, "capsules": $fa-var-capsules, "poo-storm": $fa-var-poo-storm, "poo-bolt": $fa-var-poo-bolt, "face-frown-open": $fa-var-face-frown-open, "frown-open": $fa-var-frown-open, "hand-point-up": $fa-var-hand-point-up, "money-bill": $fa-var-money-bill, "bookmark": $fa-var-bookmark, "align-justify": $fa-var-align-justify, "umbrella-beach": $fa-var-umbrella-beach, "helmet-un": $fa-var-helmet-un, "bullseye": $fa-var-bullseye, "bacon": $fa-var-bacon, "hand-point-down": $fa-var-hand-point-down, "arrow-up-from-bracket": $fa-var-arrow-up-from-bracket, "folder": $fa-var-folder, "folder-blank": $fa-var-folder-blank, "file-waveform": $fa-var-file-waveform, "file-medical-alt": $fa-var-file-medical-alt, "radiation": $fa-var-radiation, "chart-simple": $fa-var-chart-simple, "mars-stroke": $fa-var-mars-stroke, "vial": $fa-var-vial, "gauge": $fa-var-gauge, "dashboard": $fa-var-dashboard, "gauge-med": $fa-var-gauge-med, "tachometer-alt-average": $fa-var-tachometer-alt-average, "wand-magic-sparkles": $fa-var-wand-magic-sparkles, "magic-wand-sparkles": $fa-var-magic-wand-sparkles, "e": $fa-var-e, "pen-clip": $fa-var-pen-clip, "pen-alt": $fa-var-pen-alt, "bridge-circle-exclamation": $fa-var-bridge-circle-exclamation, "user": $fa-var-user, "school-circle-check": $fa-var-school-circle-check, "dumpster": $fa-var-dumpster, "van-shuttle": $fa-var-van-shuttle, "shuttle-van": $fa-var-shuttle-van, "building-user": $fa-var-building-user, "square-caret-left": $fa-var-square-caret-left, "caret-square-left": $fa-var-caret-square-left, "highlighter": $fa-var-highlighter, "key": $fa-var-key, "bullhorn": $fa-var-bullhorn, "globe": $fa-var-globe, "synagogue": $fa-var-synagogue, "person-half-dress": $fa-var-person-half-dress, "road-bridge": $fa-var-road-bridge, "location-arrow": $fa-var-location-arrow, "c": $fa-var-c, "tablet-button": $fa-var-tablet-button, "building-lock": $fa-var-building-lock, "pizza-slice": $fa-var-pizza-slice, "money-bill-wave": $fa-var-money-bill-wave, "chart-area": $fa-var-chart-area, "area-chart": $fa-var-area-chart, "house-flag": $fa-var-house-flag, "person-circle-minus": $fa-var-person-circle-minus, "ban": $fa-var-ban, "cancel": $fa-var-cancel, "camera-rotate": $fa-var-camera-rotate, "spray-can-sparkles": $fa-var-spray-can-sparkles, "air-freshener": $fa-var-air-freshener, "star": $fa-var-star, "repeat": $fa-var-repeat, "cross": $fa-var-cross, "box": $fa-var-box, "venus-mars": $fa-var-venus-mars, "arrow-pointer": $fa-var-arrow-pointer, "mouse-pointer": $fa-var-mouse-pointer, "maximize": $fa-var-maximize, "expand-arrows-alt": $fa-var-expand-arrows-alt, "charging-station": $fa-var-charging-station, "shapes": $fa-var-shapes, "triangle-circle-square": $fa-var-triangle-circle-square, "shuffle": $fa-var-shuffle, "random": $fa-var-random, "person-running": $fa-var-person-running, "running": $fa-var-running, "mobile-retro": $fa-var-mobile-retro, "grip-lines-vertical": $fa-var-grip-lines-vertical, "spider": $fa-var-spider, "hands-bound": $fa-var-hands-bound, "file-invoice-dollar": $fa-var-file-invoice-dollar, "plane-circle-exclamation": $fa-var-plane-circle-exclamation, "x-ray": $fa-var-x-ray, "spell-check": $fa-var-spell-check, "slash": $fa-var-slash, "computer-mouse": $fa-var-computer-mouse, "mouse": $fa-var-mouse, "arrow-right-to-bracket": $fa-var-arrow-right-to-bracket, "sign-in": $fa-var-sign-in, "shop-slash": $fa-var-shop-slash, "store-alt-slash": $fa-var-store-alt-slash, "server": $fa-var-server, "virus-covid-slash": $fa-var-virus-covid-slash, "shop-lock": $fa-var-shop-lock, "hourglass-start": $fa-var-hourglass-start, "hourglass-1": $fa-var-hourglass-1, "blender-phone": $fa-var-blender-phone, "building-wheat": $fa-var-building-wheat, "person-breastfeeding": $fa-var-person-breastfeeding, "right-to-bracket": $fa-var-right-to-bracket, "sign-in-alt": $fa-var-sign-in-alt, "venus": $fa-var-venus, "passport": $fa-var-passport, "heart-pulse": $fa-var-heart-pulse, "heartbeat": $fa-var-heartbeat, "people-carry-box": $fa-var-people-carry-box, "people-carry": $fa-var-people-carry, "temperature-high": $fa-var-temperature-high, "microchip": $fa-var-microchip, "crown": $fa-var-crown, "weight-hanging": $fa-var-weight-hanging, "xmarks-lines": $fa-var-xmarks-lines, "file-prescription": $fa-var-file-prescription, "weight-scale": $fa-var-weight-scale, "weight": $fa-var-weight, "user-group": $fa-var-user-group, "user-friends": $fa-var-user-friends, "arrow-up-a-z": $fa-var-arrow-up-a-z, "sort-alpha-up": $fa-var-sort-alpha-up, "chess-knight": $fa-var-chess-knight, "face-laugh-squint": $fa-var-face-laugh-squint, "laugh-squint": $fa-var-laugh-squint, "wheelchair": $fa-var-wheelchair, "circle-arrow-up": $fa-var-circle-arrow-up, "arrow-circle-up": $fa-var-arrow-circle-up, "toggle-on": $fa-var-toggle-on, "person-walking": $fa-var-person-walking, "walking": $fa-var-walking, "l": $fa-var-l, "fire": $fa-var-fire, "bed-pulse": $fa-var-bed-pulse, "procedures": $fa-var-procedures, "shuttle-space": $fa-var-shuttle-space, "space-shuttle": $fa-var-space-shuttle, "face-laugh": $fa-var-face-laugh, "laugh": $fa-var-laugh, "folder-open": $fa-var-folder-open, "heart-circle-plus": $fa-var-heart-circle-plus, "code-fork": $fa-var-code-fork, "city": $fa-var-city, "microphone-lines": $fa-var-microphone-lines, "microphone-alt": $fa-var-microphone-alt, "pepper-hot": $fa-var-pepper-hot, "unlock": $fa-var-unlock, "colon-sign": $fa-var-colon-sign, "headset": $fa-var-headset, "store-slash": $fa-var-store-slash, "road-circle-xmark": $fa-var-road-circle-xmark, "user-minus": $fa-var-user-minus, "mars-stroke-up": $fa-var-mars-stroke-up, "mars-stroke-v": $fa-var-mars-stroke-v, "champagne-glasses": $fa-var-champagne-glasses, "glass-cheers": $fa-var-glass-cheers, "clipboard": $fa-var-clipboard, "house-circle-exclamation": $fa-var-house-circle-exclamation, "file-arrow-up": $fa-var-file-arrow-up, "file-upload": $fa-var-file-upload, "wifi": $fa-var-wifi, "wifi-3": $fa-var-wifi-3, "wifi-strong": $fa-var-wifi-strong, "bath": $fa-var-bath, "bathtub": $fa-var-bathtub, "underline": $fa-var-underline, "user-pen": $fa-var-user-pen, "user-edit": $fa-var-user-edit, "signature": $fa-var-signature, "stroopwafel": $fa-var-stroopwafel, "bold": $fa-var-bold, "anchor-lock": $fa-var-anchor-lock, "building-ngo": $fa-var-building-ngo, "manat-sign": $fa-var-manat-sign, "not-equal": $fa-var-not-equal, "border-top-left": $fa-var-border-top-left, "border-style": $fa-var-border-style, "map-location-dot": $fa-var-map-location-dot, "map-marked-alt": $fa-var-map-marked-alt, "jedi": $fa-var-jedi, "square-poll-vertical": $fa-var-square-poll-vertical, "poll": $fa-var-poll, "mug-hot": $fa-var-mug-hot, "car-battery": $fa-var-car-battery, "battery-car": $fa-var-battery-car, "gift": $fa-var-gift, "dice-two": $fa-var-dice-two, "chess-queen": $fa-var-chess-queen, "glasses": $fa-var-glasses, "chess-board": $fa-var-chess-board, "building-circle-check": $fa-var-building-circle-check, "person-chalkboard": $fa-var-person-chalkboard, "mars-stroke-right": $fa-var-mars-stroke-right, "mars-stroke-h": $fa-var-mars-stroke-h, "hand-back-fist": $fa-var-hand-back-fist, "hand-rock": $fa-var-hand-rock, "square-caret-up": $fa-var-square-caret-up, "caret-square-up": $fa-var-caret-square-up, "cloud-showers-water": $fa-var-cloud-showers-water, "chart-bar": $fa-var-chart-bar, "bar-chart": $fa-var-bar-chart, "hands-bubbles": $fa-var-hands-bubbles, "hands-wash": $fa-var-hands-wash, "less-than-equal": $fa-var-less-than-equal, "train": $fa-var-train, "eye-low-vision": $fa-var-eye-low-vision, "low-vision": $fa-var-low-vision, "crow": $fa-var-crow, "sailboat": $fa-var-sailboat, "window-restore": $fa-var-window-restore, "square-plus": $fa-var-square-plus, "plus-square": $fa-var-plus-square, "torii-gate": $fa-var-torii-gate, "frog": $fa-var-frog, "bucket": $fa-var-bucket, "image": $fa-var-image, "microphone": $fa-var-microphone, "cow": $fa-var-cow, "caret-up": $fa-var-caret-up, "screwdriver": $fa-var-screwdriver, "folder-closed": $fa-var-folder-closed, "house-tsunami": $fa-var-house-tsunami, "square-nfi": $fa-var-square-nfi, "arrow-up-from-ground-water": $fa-var-arrow-up-from-ground-water, "martini-glass": $fa-var-martini-glass, "glass-martini-alt": $fa-var-glass-martini-alt, "rotate-left": $fa-var-rotate-left, "rotate-back": $fa-var-rotate-back, "rotate-backward": $fa-var-rotate-backward, "undo-alt": $fa-var-undo-alt, "table-columns": $fa-var-table-columns, "columns": $fa-var-columns, "lemon": $fa-var-lemon, "head-side-mask": $fa-var-head-side-mask, "handshake": $fa-var-handshake, "gem": $fa-var-gem, "dolly": $fa-var-dolly, "dolly-box": $fa-var-dolly-box, "smoking": $fa-var-smoking, "minimize": $fa-var-minimize, "compress-arrows-alt": $fa-var-compress-arrows-alt, "monument": $fa-var-monument, "snowplow": $fa-var-snowplow, "angles-right": $fa-var-angles-right, "angle-double-right": $fa-var-angle-double-right, "cannabis": $fa-var-cannabis, "circle-play": $fa-var-circle-play, "play-circle": $fa-var-play-circle, "tablets": $fa-var-tablets, "ethernet": $fa-var-ethernet, "euro-sign": $fa-var-euro-sign, "eur": $fa-var-eur, "euro": $fa-var-euro, "chair": $fa-var-chair, "circle-check": $fa-var-circle-check, "check-circle": $fa-var-check-circle, "circle-stop": $fa-var-circle-stop, "stop-circle": $fa-var-stop-circle, "compass-drafting": $fa-var-compass-drafting, "drafting-compass": $fa-var-drafting-compass, "plate-wheat": $fa-var-plate-wheat, "icicles": $fa-var-icicles, "person-shelter": $fa-var-person-shelter, "neuter": $fa-var-neuter, "id-badge": $fa-var-id-badge, "marker": $fa-var-marker, "face-laugh-beam": $fa-var-face-laugh-beam, "laugh-beam": $fa-var-laugh-beam, "helicopter-symbol": $fa-var-helicopter-symbol, "universal-access": $fa-var-universal-access, "circle-chevron-up": $fa-var-circle-chevron-up, "chevron-circle-up": $fa-var-chevron-circle-up, "lari-sign": $fa-var-lari-sign, "volcano": $fa-var-volcano, "person-walking-dashed-line-arrow-right": $fa-var-person-walking-dashed-line-arrow-right, "sterling-sign": $fa-var-sterling-sign, "gbp": $fa-var-gbp, "pound-sign": $fa-var-pound-sign, "viruses": $fa-var-viruses, "square-person-confined": $fa-var-square-person-confined, "user-tie": $fa-var-user-tie, "arrow-down-long": $fa-var-arrow-down-long, "long-arrow-down": $fa-var-long-arrow-down, "tent-arrow-down-to-line": $fa-var-tent-arrow-down-to-line, "certificate": $fa-var-certificate, "reply-all": $fa-var-reply-all, "mail-reply-all": $fa-var-mail-reply-all, "suitcase": $fa-var-suitcase, "person-skating": $fa-var-person-skating, "skating": $fa-var-skating, "filter-circle-dollar": $fa-var-filter-circle-dollar, "funnel-dollar": $fa-var-funnel-dollar, "camera-retro": $fa-var-camera-retro, "circle-arrow-down": $fa-var-circle-arrow-down, "arrow-circle-down": $fa-var-arrow-circle-down, "file-import": $fa-var-file-import, "arrow-right-to-file": $fa-var-arrow-right-to-file, "square-arrow-up-right": $fa-var-square-arrow-up-right, "external-link-square": $fa-var-external-link-square, "box-open": $fa-var-box-open, "scroll": $fa-var-scroll, "spa": $fa-var-spa, "location-pin-lock": $fa-var-location-pin-lock, "pause": $fa-var-pause, "hill-avalanche": $fa-var-hill-avalanche, "temperature-empty": $fa-var-temperature-empty, "temperature-0": $fa-var-temperature-0, "thermometer-0": $fa-var-thermometer-0, "thermometer-empty": $fa-var-thermometer-empty, "bomb": $fa-var-bomb, "registered": $fa-var-registered, "address-card": $fa-var-address-card, "contact-card": $fa-var-contact-card, "vcard": $fa-var-vcard, "scale-unbalanced-flip": $fa-var-scale-unbalanced-flip, "balance-scale-right": $fa-var-balance-scale-right, "subscript": $fa-var-subscript, "diamond-turn-right": $fa-var-diamond-turn-right, "directions": $fa-var-directions, "burst": $fa-var-burst, "house-laptop": $fa-var-house-laptop, "laptop-house": $fa-var-laptop-house, "face-tired": $fa-var-face-tired, "tired": $fa-var-tired, "money-bills": $fa-var-money-bills, "smog": $fa-var-smog, "crutch": $fa-var-crutch, "cloud-arrow-up": $fa-var-cloud-arrow-up, "cloud-upload": $fa-var-cloud-upload, "cloud-upload-alt": $fa-var-cloud-upload-alt, "palette": $fa-var-palette, "arrows-turn-right": $fa-var-arrows-turn-right, "vest": $fa-var-vest, "ferry": $fa-var-ferry, "arrows-down-to-people": $fa-var-arrows-down-to-people, "seedling": $fa-var-seedling, "sprout": $fa-var-sprout, "left-right": $fa-var-left-right, "arrows-alt-h": $fa-var-arrows-alt-h, "boxes-packing": $fa-var-boxes-packing, "circle-arrow-left": $fa-var-circle-arrow-left, "arrow-circle-left": $fa-var-arrow-circle-left, "group-arrows-rotate": $fa-var-group-arrows-rotate, "bowl-food": $fa-var-bowl-food, "candy-cane": $fa-var-candy-cane, "arrow-down-wide-short": $fa-var-arrow-down-wide-short, "sort-amount-asc": $fa-var-sort-amount-asc, "sort-amount-down": $fa-var-sort-amount-down, "cloud-bolt": $fa-var-cloud-bolt, "thunderstorm": $fa-var-thunderstorm, "text-slash": $fa-var-text-slash, "remove-format": $fa-var-remove-format, "face-smile-wink": $fa-var-face-smile-wink, "smile-wink": $fa-var-smile-wink, "file-word": $fa-var-file-word, "file-powerpoint": $fa-var-file-powerpoint, "arrows-left-right": $fa-var-arrows-left-right, "arrows-h": $fa-var-arrows-h, "house-lock": $fa-var-house-lock, "cloud-arrow-down": $fa-var-cloud-arrow-down, "cloud-download": $fa-var-cloud-download, "cloud-download-alt": $fa-var-cloud-download-alt, "children": $fa-var-children, "chalkboard": $fa-var-chalkboard, "blackboard": $fa-var-blackboard, "user-large-slash": $fa-var-user-large-slash, "user-alt-slash": $fa-var-user-alt-slash, "envelope-open": $fa-var-envelope-open, "handshake-simple-slash": $fa-var-handshake-simple-slash, "handshake-alt-slash": $fa-var-handshake-alt-slash, "mattress-pillow": $fa-var-mattress-pillow, "guarani-sign": $fa-var-guarani-sign, "arrows-rotate": $fa-var-arrows-rotate, "refresh": $fa-var-refresh, "sync": $fa-var-sync, "fire-extinguisher": $fa-var-fire-extinguisher, "cruzeiro-sign": $fa-var-cruzeiro-sign, "greater-than-equal": $fa-var-greater-than-equal, "shield-halved": $fa-var-shield-halved, "shield-alt": $fa-var-shield-alt, "book-atlas": $fa-var-book-atlas, "atlas": $fa-var-atlas, "virus": $fa-var-virus, "envelope-circle-check": $fa-var-envelope-circle-check, "layer-group": $fa-var-layer-group, "arrows-to-dot": $fa-var-arrows-to-dot, "archway": $fa-var-archway, "heart-circle-check": $fa-var-heart-circle-check, "house-chimney-crack": $fa-var-house-chimney-crack, "house-damage": $fa-var-house-damage, "file-zipper": $fa-var-file-zipper, "file-archive": $fa-var-file-archive, "square": $fa-var-square, "martini-glass-empty": $fa-var-martini-glass-empty, "glass-martini": $fa-var-glass-martini, "couch": $fa-var-couch, "cedi-sign": $fa-var-cedi-sign, "italic": $fa-var-italic, "church": $fa-var-church, "comments-dollar": $fa-var-comments-dollar, "democrat": $fa-var-democrat, "z": $fa-var-z, "person-skiing": $fa-var-person-skiing, "skiing": $fa-var-skiing, "road-lock": $fa-var-road-lock, "a": $fa-var-a, "temperature-arrow-down": $fa-var-temperature-arrow-down, "temperature-down": $fa-var-temperature-down, "feather-pointed": $fa-var-feather-pointed, "feather-alt": $fa-var-feather-alt, "p": $fa-var-p, "snowflake": $fa-var-snowflake, "newspaper": $fa-var-newspaper, "rectangle-ad": $fa-var-rectangle-ad, "ad": $fa-var-ad, "circle-arrow-right": $fa-var-circle-arrow-right, "arrow-circle-right": $fa-var-arrow-circle-right, "filter-circle-xmark": $fa-var-filter-circle-xmark, "locust": $fa-var-locust, "sort": $fa-var-sort, "unsorted": $fa-var-unsorted, "list-ol": $fa-var-list-ol, "list-1-2": $fa-var-list-1-2, "list-numeric": $fa-var-list-numeric, "person-dress-burst": $fa-var-person-dress-burst, "money-check-dollar": $fa-var-money-check-dollar, "money-check-alt": $fa-var-money-check-alt, "vector-square": $fa-var-vector-square, "bread-slice": $fa-var-bread-slice, "language": $fa-var-language, "face-kiss-wink-heart": $fa-var-face-kiss-wink-heart, "kiss-wink-heart": $fa-var-kiss-wink-heart, "filter": $fa-var-filter, "question": $fa-var-question, "file-signature": $fa-var-file-signature, "up-down-left-right": $fa-var-up-down-left-right, "arrows-alt": $fa-var-arrows-alt, "house-chimney-user": $fa-var-house-chimney-user, "hand-holding-heart": $fa-var-hand-holding-heart, "puzzle-piece": $fa-var-puzzle-piece, "money-check": $fa-var-money-check, "star-half-stroke": $fa-var-star-half-stroke, "star-half-alt": $fa-var-star-half-alt, "code": $fa-var-code, "whiskey-glass": $fa-var-whiskey-glass, "glass-whiskey": $fa-var-glass-whiskey, "building-circle-exclamation": $fa-var-building-circle-exclamation, "magnifying-glass-chart": $fa-var-magnifying-glass-chart, "arrow-up-right-from-square": $fa-var-arrow-up-right-from-square, "external-link": $fa-var-external-link, "cubes-stacked": $fa-var-cubes-stacked, "won-sign": $fa-var-won-sign, "krw": $fa-var-krw, "won": $fa-var-won, "virus-covid": $fa-var-virus-covid, "austral-sign": $fa-var-austral-sign, "f": $fa-var-f, "leaf": $fa-var-leaf, "road": $fa-var-road, "taxi": $fa-var-taxi, "cab": $fa-var-cab, "person-circle-plus": $fa-var-person-circle-plus, "chart-pie": $fa-var-chart-pie, "pie-chart": $fa-var-pie-chart, "bolt-lightning": $fa-var-bolt-lightning, "sack-xmark": $fa-var-sack-xmark, "file-excel": $fa-var-file-excel, "file-contract": $fa-var-file-contract, "fish-fins": $fa-var-fish-fins, "building-flag": $fa-var-building-flag, "face-grin-beam": $fa-var-face-grin-beam, "grin-beam": $fa-var-grin-beam, "object-ungroup": $fa-var-object-ungroup, "poop": $fa-var-poop, "location-pin": $fa-var-location-pin, "map-marker": $fa-var-map-marker, "kaaba": $fa-var-kaaba, "toilet-paper": $fa-var-toilet-paper, "helmet-safety": $fa-var-helmet-safety, "hard-hat": $fa-var-hard-hat, "hat-hard": $fa-var-hat-hard, "eject": $fa-var-eject, "circle-right": $fa-var-circle-right, "arrow-alt-circle-right": $fa-var-arrow-alt-circle-right, "plane-circle-check": $fa-var-plane-circle-check, "face-rolling-eyes": $fa-var-face-rolling-eyes, "meh-rolling-eyes": $fa-var-meh-rolling-eyes, "object-group": $fa-var-object-group, "chart-line": $fa-var-chart-line, "line-chart": $fa-var-line-chart, "mask-ventilator": $fa-var-mask-ventilator, "arrow-right": $fa-var-arrow-right, "signs-post": $fa-var-signs-post, "map-signs": $fa-var-map-signs, "cash-register": $fa-var-cash-register, "person-circle-question": $fa-var-person-circle-question, "h": $fa-var-h, "tarp": $fa-var-tarp, "screwdriver-wrench": $fa-var-screwdriver-wrench, "tools": $fa-var-tools, "arrows-to-eye": $fa-var-arrows-to-eye, "plug-circle-bolt": $fa-var-plug-circle-bolt, "heart": $fa-var-heart, "mars-and-venus": $fa-var-mars-and-venus, "house-user": $fa-var-house-user, "home-user": $fa-var-home-user, "dumpster-fire": $fa-var-dumpster-fire, "house-crack": $fa-var-house-crack, "martini-glass-citrus": $fa-var-martini-glass-citrus, "cocktail": $fa-var-cocktail, "face-surprise": $fa-var-face-surprise, "surprise": $fa-var-surprise, "bottle-water": $fa-var-bottle-water, "circle-pause": $fa-var-circle-pause, "pause-circle": $fa-var-pause-circle, "toilet-paper-slash": $fa-var-toilet-paper-slash, "apple-whole": $fa-var-apple-whole, "apple-alt": $fa-var-apple-alt, "kitchen-set": $fa-var-kitchen-set, "r": $fa-var-r, "temperature-quarter": $fa-var-temperature-quarter, "temperature-1": $fa-var-temperature-1, "thermometer-1": $fa-var-thermometer-1, "thermometer-quarter": $fa-var-thermometer-quarter, "cube": $fa-var-cube, "bitcoin-sign": $fa-var-bitcoin-sign, "shield-dog": $fa-var-shield-dog, "solar-panel": $fa-var-solar-panel, "lock-open": $fa-var-lock-open, "elevator": $fa-var-elevator, "money-bill-transfer": $fa-var-money-bill-transfer, "money-bill-trend-up": $fa-var-money-bill-trend-up, "house-flood-water-circle-arrow-right": $fa-var-house-flood-water-circle-arrow-right, "square-poll-horizontal": $fa-var-square-poll-horizontal, "poll-h": $fa-var-poll-h, "circle": $fa-var-circle, "backward-fast": $fa-var-backward-fast, "fast-backward": $fa-var-fast-backward, "recycle": $fa-var-recycle, "user-astronaut": $fa-var-user-astronaut, "plane-slash": $fa-var-plane-slash, "trademark": $fa-var-trademark, "basketball": $fa-var-basketball, "basketball-ball": $fa-var-basketball-ball, "satellite-dish": $fa-var-satellite-dish, "circle-up": $fa-var-circle-up, "arrow-alt-circle-up": $fa-var-arrow-alt-circle-up, "mobile-screen-button": $fa-var-mobile-screen-button, "mobile-alt": $fa-var-mobile-alt, "volume-high": $fa-var-volume-high, "volume-up": $fa-var-volume-up, "users-rays": $fa-var-users-rays, "wallet": $fa-var-wallet, "clipboard-check": $fa-var-clipboard-check, "file-audio": $fa-var-file-audio, "burger": $fa-var-burger, "hamburger": $fa-var-hamburger, "wrench": $fa-var-wrench, "bugs": $fa-var-bugs, "rupee-sign": $fa-var-rupee-sign, "rupee": $fa-var-rupee, "file-image": $fa-var-file-image, "circle-question": $fa-var-circle-question, "question-circle": $fa-var-question-circle, "plane-departure": $fa-var-plane-departure, "handshake-slash": $fa-var-handshake-slash, "book-bookmark": $fa-var-book-bookmark, "code-branch": $fa-var-code-branch, "hat-cowboy": $fa-var-hat-cowboy, "bridge": $fa-var-bridge, "phone-flip": $fa-var-phone-flip, "phone-alt": $fa-var-phone-alt, "truck-front": $fa-var-truck-front, "cat": $fa-var-cat, "anchor-circle-exclamation": $fa-var-anchor-circle-exclamation, "truck-field": $fa-var-truck-field, "route": $fa-var-route, "clipboard-question": $fa-var-clipboard-question, "panorama": $fa-var-panorama, "comment-medical": $fa-var-comment-medical, "teeth-open": $fa-var-teeth-open, "file-circle-minus": $fa-var-file-circle-minus, "tags": $fa-var-tags, "wine-glass": $fa-var-wine-glass, "forward-fast": $fa-var-forward-fast, "fast-forward": $fa-var-fast-forward, "face-meh-blank": $fa-var-face-meh-blank, "meh-blank": $fa-var-meh-blank, "square-parking": $fa-var-square-parking, "parking": $fa-var-parking, "house-signal": $fa-var-house-signal, "bars-progress": $fa-var-bars-progress, "tasks-alt": $fa-var-tasks-alt, "faucet-drip": $fa-var-faucet-drip, "cart-flatbed": $fa-var-cart-flatbed, "dolly-flatbed": $fa-var-dolly-flatbed, "ban-smoking": $fa-var-ban-smoking, "smoking-ban": $fa-var-smoking-ban, "terminal": $fa-var-terminal, "mobile-button": $fa-var-mobile-button, "house-medical-flag": $fa-var-house-medical-flag, "basket-shopping": $fa-var-basket-shopping, "shopping-basket": $fa-var-shopping-basket, "tape": $fa-var-tape, "bus-simple": $fa-var-bus-simple, "bus-alt": $fa-var-bus-alt, "eye": $fa-var-eye, "face-sad-cry": $fa-var-face-sad-cry, "sad-cry": $fa-var-sad-cry, "audio-description": $fa-var-audio-description, "person-military-to-person": $fa-var-person-military-to-person, "file-shield": $fa-var-file-shield, "user-slash": $fa-var-user-slash, "pen": $fa-var-pen, "tower-observation": $fa-var-tower-observation, "file-code": $fa-var-file-code, "signal": $fa-var-signal, "signal-5": $fa-var-signal-5, "signal-perfect": $fa-var-signal-perfect, "bus": $fa-var-bus, "heart-circle-xmark": $fa-var-heart-circle-xmark, "house-chimney": $fa-var-house-chimney, "home-lg": $fa-var-home-lg, "window-maximize": $fa-var-window-maximize, "face-frown": $fa-var-face-frown, "frown": $fa-var-frown, "prescription": $fa-var-prescription, "shop": $fa-var-shop, "store-alt": $fa-var-store-alt, "floppy-disk": $fa-var-floppy-disk, "save": $fa-var-save, "vihara": $fa-var-vihara, "scale-unbalanced": $fa-var-scale-unbalanced, "balance-scale-left": $fa-var-balance-scale-left, "sort-up": $fa-var-sort-up, "sort-asc": $fa-var-sort-asc, "comment-dots": $fa-var-comment-dots, "commenting": $fa-var-commenting, "plant-wilt": $fa-var-plant-wilt, "diamond": $fa-var-diamond, "face-grin-squint": $fa-var-face-grin-squint, "grin-squint": $fa-var-grin-squint, "hand-holding-dollar": $fa-var-hand-holding-dollar, "hand-holding-usd": $fa-var-hand-holding-usd, "bacterium": $fa-var-bacterium, "hand-pointer": $fa-var-hand-pointer, "drum-steelpan": $fa-var-drum-steelpan, "hand-scissors": $fa-var-hand-scissors, "hands-praying": $fa-var-hands-praying, "praying-hands": $fa-var-praying-hands, "arrow-rotate-right": $fa-var-arrow-rotate-right, "arrow-right-rotate": $fa-var-arrow-right-rotate, "arrow-rotate-forward": $fa-var-arrow-rotate-forward, "redo": $fa-var-redo, "biohazard": $fa-var-biohazard, "location-crosshairs": $fa-var-location-crosshairs, "location": $fa-var-location, "mars-double": $fa-var-mars-double, "child-dress": $fa-var-child-dress, "users-between-lines": $fa-var-users-between-lines, "lungs-virus": $fa-var-lungs-virus, "face-grin-tears": $fa-var-face-grin-tears, "grin-tears": $fa-var-grin-tears, "phone": $fa-var-phone, "calendar-xmark": $fa-var-calendar-xmark, "calendar-times": $fa-var-calendar-times, "child-reaching": $fa-var-child-reaching, "head-side-virus": $fa-var-head-side-virus, "user-gear": $fa-var-user-gear, "user-cog": $fa-var-user-cog, "arrow-up-1-9": $fa-var-arrow-up-1-9, "sort-numeric-up": $fa-var-sort-numeric-up, "door-closed": $fa-var-door-closed, "shield-virus": $fa-var-shield-virus, "dice-six": $fa-var-dice-six, "mosquito-net": $fa-var-mosquito-net, "bridge-water": $fa-var-bridge-water, "person-booth": $fa-var-person-booth, "text-width": $fa-var-text-width, "hat-wizard": $fa-var-hat-wizard, "pen-fancy": $fa-var-pen-fancy, "person-digging": $fa-var-person-digging, "digging": $fa-var-digging, "trash": $fa-var-trash, "gauge-simple": $fa-var-gauge-simple, "gauge-simple-med": $fa-var-gauge-simple-med, "tachometer-average": $fa-var-tachometer-average, "book-medical": $fa-var-book-medical, "poo": $fa-var-poo, "quote-right": $fa-var-quote-right, "quote-right-alt": $fa-var-quote-right-alt, "shirt": $fa-var-shirt, "t-shirt": $fa-var-t-shirt, "tshirt": $fa-var-tshirt, "cubes": $fa-var-cubes, "divide": $fa-var-divide, "tenge-sign": $fa-var-tenge-sign, "tenge": $fa-var-tenge, "headphones": $fa-var-headphones, "hands-holding": $fa-var-hands-holding, "hands-clapping": $fa-var-hands-clapping, "republican": $fa-var-republican, "arrow-left": $fa-var-arrow-left, "person-circle-xmark": $fa-var-person-circle-xmark, "ruler": $fa-var-ruler, "align-left": $fa-var-align-left, "dice-d6": $fa-var-dice-d6, "restroom": $fa-var-restroom, "j": $fa-var-j, "users-viewfinder": $fa-var-users-viewfinder, "file-video": $fa-var-file-video, "up-right-from-square": $fa-var-up-right-from-square, "external-link-alt": $fa-var-external-link-alt, "table-cells": $fa-var-table-cells, "th": $fa-var-th, "file-pdf": $fa-var-file-pdf, "book-bible": $fa-var-book-bible, "bible": $fa-var-bible, "o": $fa-var-o, "suitcase-medical": $fa-var-suitcase-medical, "medkit": $fa-var-medkit, "user-secret": $fa-var-user-secret, "otter": $fa-var-otter, "person-dress": $fa-var-person-dress, "female": $fa-var-female, "comment-dollar": $fa-var-comment-dollar, "business-time": $fa-var-business-time, "briefcase-clock": $fa-var-briefcase-clock, "table-cells-large": $fa-var-table-cells-large, "th-large": $fa-var-th-large, "book-tanakh": $fa-var-book-tanakh, "tanakh": $fa-var-tanakh, "phone-volume": $fa-var-phone-volume, "volume-control-phone": $fa-var-volume-control-phone, "hat-cowboy-side": $fa-var-hat-cowboy-side, "clipboard-user": $fa-var-clipboard-user, "child": $fa-var-child, "lira-sign": $fa-var-lira-sign, "satellite": $fa-var-satellite, "plane-lock": $fa-var-plane-lock, "tag": $fa-var-tag, "comment": $fa-var-comment, "cake-candles": $fa-var-cake-candles, "birthday-cake": $fa-var-birthday-cake, "cake": $fa-var-cake, "envelope": $fa-var-envelope, "angles-up": $fa-var-angles-up, "angle-double-up": $fa-var-angle-double-up, "paperclip": $fa-var-paperclip, "arrow-right-to-city": $fa-var-arrow-right-to-city, "ribbon": $fa-var-ribbon, "lungs": $fa-var-lungs, "arrow-up-9-1": $fa-var-arrow-up-9-1, "sort-numeric-up-alt": $fa-var-sort-numeric-up-alt, "litecoin-sign": $fa-var-litecoin-sign, "border-none": $fa-var-border-none, "circle-nodes": $fa-var-circle-nodes, "parachute-box": $fa-var-parachute-box, "indent": $fa-var-indent, "truck-field-un": $fa-var-truck-field-un, "hourglass": $fa-var-hourglass, "hourglass-empty": $fa-var-hourglass-empty, "mountain": $fa-var-mountain, "user-doctor": $fa-var-user-doctor, "user-md": $fa-var-user-md, "circle-info": $fa-var-circle-info, "info-circle": $fa-var-info-circle, "cloud-meatball": $fa-var-cloud-meatball, "camera": $fa-var-camera, "camera-alt": $fa-var-camera-alt, "square-virus": $fa-var-square-virus, "meteor": $fa-var-meteor, "car-on": $fa-var-car-on, "sleigh": $fa-var-sleigh, "arrow-down-1-9": $fa-var-arrow-down-1-9, "sort-numeric-asc": $fa-var-sort-numeric-asc, "sort-numeric-down": $fa-var-sort-numeric-down, "hand-holding-droplet": $fa-var-hand-holding-droplet, "hand-holding-water": $fa-var-hand-holding-water, "water": $fa-var-water, "calendar-check": $fa-var-calendar-check, "braille": $fa-var-braille, "prescription-bottle-medical": $fa-var-prescription-bottle-medical, "prescription-bottle-alt": $fa-var-prescription-bottle-alt, "landmark": $fa-var-landmark, "truck": $fa-var-truck, "crosshairs": $fa-var-crosshairs, "person-cane": $fa-var-person-cane, "tent": $fa-var-tent, "vest-patches": $fa-var-vest-patches, "check-double": $fa-var-check-double, "arrow-down-a-z": $fa-var-arrow-down-a-z, "sort-alpha-asc": $fa-var-sort-alpha-asc, "sort-alpha-down": $fa-var-sort-alpha-down, "money-bill-wheat": $fa-var-money-bill-wheat, "cookie": $fa-var-cookie, "arrow-rotate-left": $fa-var-arrow-rotate-left, "arrow-left-rotate": $fa-var-arrow-left-rotate, "arrow-rotate-back": $fa-var-arrow-rotate-back, "arrow-rotate-backward": $fa-var-arrow-rotate-backward, "undo": $fa-var-undo, "hard-drive": $fa-var-hard-drive, "hdd": $fa-var-hdd, "face-grin-squint-tears": $fa-var-face-grin-squint-tears, "grin-squint-tears": $fa-var-grin-squint-tears, "dumbbell": $fa-var-dumbbell, "rectangle-list": $fa-var-rectangle-list, "list-alt": $fa-var-list-alt, "tarp-droplet": $fa-var-tarp-droplet, "house-medical-circle-check": $fa-var-house-medical-circle-check, "person-skiing-nordic": $fa-var-person-skiing-nordic, "skiing-nordic": $fa-var-skiing-nordic, "calendar-plus": $fa-var-calendar-plus, "plane-arrival": $fa-var-plane-arrival, "circle-left": $fa-var-circle-left, "arrow-alt-circle-left": $fa-var-arrow-alt-circle-left, "train-subway": $fa-var-train-subway, "subway": $fa-var-subway, "chart-gantt": $fa-var-chart-gantt, "indian-rupee-sign": $fa-var-indian-rupee-sign, "indian-rupee": $fa-var-indian-rupee, "inr": $fa-var-inr, "crop-simple": $fa-var-crop-simple, "crop-alt": $fa-var-crop-alt, "money-bill-1": $fa-var-money-bill-1, "money-bill-alt": $fa-var-money-bill-alt, "left-long": $fa-var-left-long, "long-arrow-alt-left": $fa-var-long-arrow-alt-left, "dna": $fa-var-dna, "virus-slash": $fa-var-virus-slash, "minus": $fa-var-minus, "subtract": $fa-var-subtract, "chess": $fa-var-chess, "arrow-left-long": $fa-var-arrow-left-long, "long-arrow-left": $fa-var-long-arrow-left, "plug-circle-check": $fa-var-plug-circle-check, "street-view": $fa-var-street-view, "franc-sign": $fa-var-franc-sign, "volume-off": $fa-var-volume-off, "hands-asl-interpreting": $fa-var-hands-asl-interpreting, "american-sign-language-interpreting": $fa-var-american-sign-language-interpreting, "asl-interpreting": $fa-var-asl-interpreting, "hands-american-sign-language-interpreting": $fa-var-hands-american-sign-language-interpreting, "gear": $fa-var-gear, "cog": $fa-var-cog, "droplet-slash": $fa-var-droplet-slash, "tint-slash": $fa-var-tint-slash, "mosque": $fa-var-mosque, "mosquito": $fa-var-mosquito, "star-of-david": $fa-var-star-of-david, "person-military-rifle": $fa-var-person-military-rifle, "cart-shopping": $fa-var-cart-shopping, "shopping-cart": $fa-var-shopping-cart, "vials": $fa-var-vials, "plug-circle-plus": $fa-var-plug-circle-plus, "place-of-worship": $fa-var-place-of-worship, "grip-vertical": $fa-var-grip-vertical, "arrow-turn-up": $fa-var-arrow-turn-up, "level-up": $fa-var-level-up, "u": $fa-var-u, "square-root-variable": $fa-var-square-root-variable, "square-root-alt": $fa-var-square-root-alt, "clock": $fa-var-clock, "clock-four": $fa-var-clock-four, "backward-step": $fa-var-backward-step, "step-backward": $fa-var-step-backward, "pallet": $fa-var-pallet, "faucet": $fa-var-faucet, "baseball-bat-ball": $fa-var-baseball-bat-ball, "s": $fa-var-s, "timeline": $fa-var-timeline, "keyboard": $fa-var-keyboard, "caret-down": $fa-var-caret-down, "house-chimney-medical": $fa-var-house-chimney-medical, "clinic-medical": $fa-var-clinic-medical, "temperature-three-quarters": $fa-var-temperature-three-quarters, "temperature-3": $fa-var-temperature-3, "thermometer-3": $fa-var-thermometer-3, "thermometer-three-quarters": $fa-var-thermometer-three-quarters, "mobile-screen": $fa-var-mobile-screen, "mobile-android-alt": $fa-var-mobile-android-alt, "plane-up": $fa-var-plane-up, "piggy-bank": $fa-var-piggy-bank, "battery-half": $fa-var-battery-half, "battery-3": $fa-var-battery-3, "mountain-city": $fa-var-mountain-city, "coins": $fa-var-coins, "khanda": $fa-var-khanda, "sliders": $fa-var-sliders, "sliders-h": $fa-var-sliders-h, "folder-tree": $fa-var-folder-tree, "network-wired": $fa-var-network-wired, "map-pin": $fa-var-map-pin, "hamsa": $fa-var-hamsa, "cent-sign": $fa-var-cent-sign, "flask": $fa-var-flask, "person-pregnant": $fa-var-person-pregnant, "wand-sparkles": $fa-var-wand-sparkles, "ellipsis-vertical": $fa-var-ellipsis-vertical, "ellipsis-v": $fa-var-ellipsis-v, "ticket": $fa-var-ticket, "power-off": $fa-var-power-off, "right-long": $fa-var-right-long, "long-arrow-alt-right": $fa-var-long-arrow-alt-right, "flag-usa": $fa-var-flag-usa, "laptop-file": $fa-var-laptop-file, "tty": $fa-var-tty, "teletype": $fa-var-teletype, "diagram-next": $fa-var-diagram-next, "person-rifle": $fa-var-person-rifle, "house-medical-circle-exclamation": $fa-var-house-medical-circle-exclamation, "closed-captioning": $fa-var-closed-captioning, "person-hiking": $fa-var-person-hiking, "hiking": $fa-var-hiking, "venus-double": $fa-var-venus-double, "images": $fa-var-images, "calculator": $fa-var-calculator, "people-pulling": $fa-var-people-pulling, "n": $fa-var-n, "cable-car": $fa-var-cable-car, "tram": $fa-var-tram, "cloud-rain": $fa-var-cloud-rain, "building-circle-xmark": $fa-var-building-circle-xmark, "ship": $fa-var-ship, "arrows-down-to-line": $fa-var-arrows-down-to-line, "download": $fa-var-download, "face-grin": $fa-var-face-grin, "grin": $fa-var-grin, "delete-left": $fa-var-delete-left, "backspace": $fa-var-backspace, "eye-dropper": $fa-var-eye-dropper, "eye-dropper-empty": $fa-var-eye-dropper-empty, "eyedropper": $fa-var-eyedropper, "file-circle-check": $fa-var-file-circle-check, "forward": $fa-var-forward, "mobile": $fa-var-mobile, "mobile-android": $fa-var-mobile-android, "mobile-phone": $fa-var-mobile-phone, "face-meh": $fa-var-face-meh, "meh": $fa-var-meh, "align-center": $fa-var-align-center, "book-skull": $fa-var-book-skull, "book-dead": $fa-var-book-dead, "id-card": $fa-var-id-card, "drivers-license": $fa-var-drivers-license, "outdent": $fa-var-outdent, "dedent": $fa-var-dedent, "heart-circle-exclamation": $fa-var-heart-circle-exclamation, "house": $fa-var-house, "home": $fa-var-home, "home-alt": $fa-var-home-alt, "home-lg-alt": $fa-var-home-lg-alt, "calendar-week": $fa-var-calendar-week, "laptop-medical": $fa-var-laptop-medical, "b": $fa-var-b, "file-medical": $fa-var-file-medical, "dice-one": $fa-var-dice-one, "kiwi-bird": $fa-var-kiwi-bird, "arrow-right-arrow-left": $fa-var-arrow-right-arrow-left, "exchange": $fa-var-exchange, "rotate-right": $fa-var-rotate-right, "redo-alt": $fa-var-redo-alt, "rotate-forward": $fa-var-rotate-forward, "utensils": $fa-var-utensils, "cutlery": $fa-var-cutlery, "arrow-up-wide-short": $fa-var-arrow-up-wide-short, "sort-amount-up": $fa-var-sort-amount-up, "mill-sign": $fa-var-mill-sign, "bowl-rice": $fa-var-bowl-rice, "skull": $fa-var-skull, "tower-broadcast": $fa-var-tower-broadcast, "broadcast-tower": $fa-var-broadcast-tower, "truck-pickup": $fa-var-truck-pickup, "up-long": $fa-var-up-long, "long-arrow-alt-up": $fa-var-long-arrow-alt-up, "stop": $fa-var-stop, "code-merge": $fa-var-code-merge, "upload": $fa-var-upload, "hurricane": $fa-var-hurricane, "mound": $fa-var-mound, "toilet-portable": $fa-var-toilet-portable, "compact-disc": $fa-var-compact-disc, "file-arrow-down": $fa-var-file-arrow-down, "file-download": $fa-var-file-download, "caravan": $fa-var-caravan, "shield-cat": $fa-var-shield-cat, "bolt": $fa-var-bolt, "zap": $fa-var-zap, "glass-water": $fa-var-glass-water, "oil-well": $fa-var-oil-well, "vault": $fa-var-vault, "mars": $fa-var-mars, "toilet": $fa-var-toilet, "plane-circle-xmark": $fa-var-plane-circle-xmark, "yen-sign": $fa-var-yen-sign, "cny": $fa-var-cny, "jpy": $fa-var-jpy, "rmb": $fa-var-rmb, "yen": $fa-var-yen, "ruble-sign": $fa-var-ruble-sign, "rouble": $fa-var-rouble, "rub": $fa-var-rub, "ruble": $fa-var-ruble, "sun": $fa-var-sun, "guitar": $fa-var-guitar, "face-laugh-wink": $fa-var-face-laugh-wink, "laugh-wink": $fa-var-laugh-wink, "horse-head": $fa-var-horse-head, "bore-hole": $fa-var-bore-hole, "industry": $fa-var-industry, "circle-down": $fa-var-circle-down, "arrow-alt-circle-down": $fa-var-arrow-alt-circle-down, "arrows-turn-to-dots": $fa-var-arrows-turn-to-dots, "florin-sign": $fa-var-florin-sign, "arrow-down-short-wide": $fa-var-arrow-down-short-wide, "sort-amount-desc": $fa-var-sort-amount-desc, "sort-amount-down-alt": $fa-var-sort-amount-down-alt, "less-than": $fa-var-less-than, "angle-down": $fa-var-angle-down, "car-tunnel": $fa-var-car-tunnel, "head-side-cough": $fa-var-head-side-cough, "grip-lines": $fa-var-grip-lines, "thumbs-down": $fa-var-thumbs-down, "user-lock": $fa-var-user-lock, "arrow-right-long": $fa-var-arrow-right-long, "long-arrow-right": $fa-var-long-arrow-right, "anchor-circle-xmark": $fa-var-anchor-circle-xmark, "ellipsis": $fa-var-ellipsis, "ellipsis-h": $fa-var-ellipsis-h, "chess-pawn": $fa-var-chess-pawn, "kit-medical": $fa-var-kit-medical, "first-aid": $fa-var-first-aid, "person-through-window": $fa-var-person-through-window, "toolbox": $fa-var-toolbox, "hands-holding-circle": $fa-var-hands-holding-circle, "bug": $fa-var-bug, "credit-card": $fa-var-credit-card, "credit-card-alt": $fa-var-credit-card-alt, "car": $fa-var-car, "automobile": $fa-var-automobile, "hand-holding-hand": $fa-var-hand-holding-hand, "book-open-reader": $fa-var-book-open-reader, "book-reader": $fa-var-book-reader, "mountain-sun": $fa-var-mountain-sun, "arrows-left-right-to-line": $fa-var-arrows-left-right-to-line, "dice-d20": $fa-var-dice-d20, "truck-droplet": $fa-var-truck-droplet, "file-circle-xmark": $fa-var-file-circle-xmark, "temperature-arrow-up": $fa-var-temperature-arrow-up, "temperature-up": $fa-var-temperature-up, "medal": $fa-var-medal, "bed": $fa-var-bed, "square-h": $fa-var-square-h, "h-square": $fa-var-h-square, "podcast": $fa-var-podcast, "temperature-full": $fa-var-temperature-full, "temperature-4": $fa-var-temperature-4, "thermometer-4": $fa-var-thermometer-4, "thermometer-full": $fa-var-thermometer-full, "bell": $fa-var-bell, "superscript": $fa-var-superscript, "plug-circle-xmark": $fa-var-plug-circle-xmark, "star-of-life": $fa-var-star-of-life, "phone-slash": $fa-var-phone-slash, "paint-roller": $fa-var-paint-roller, "handshake-angle": $fa-var-handshake-angle, "hands-helping": $fa-var-hands-helping, "location-dot": $fa-var-location-dot, "map-marker-alt": $fa-var-map-marker-alt, "file": $fa-var-file, "greater-than": $fa-var-greater-than, "person-swimming": $fa-var-person-swimming, "swimmer": $fa-var-swimmer, "arrow-down": $fa-var-arrow-down, "droplet": $fa-var-droplet, "tint": $fa-var-tint, "eraser": $fa-var-eraser, "earth-americas": $fa-var-earth-americas, "earth": $fa-var-earth, "earth-america": $fa-var-earth-america, "globe-americas": $fa-var-globe-americas, "person-burst": $fa-var-person-burst, "dove": $fa-var-dove, "battery-empty": $fa-var-battery-empty, "battery-0": $fa-var-battery-0, "socks": $fa-var-socks, "inbox": $fa-var-inbox, "section": $fa-var-section, "gauge-high": $fa-var-gauge-high, "tachometer-alt": $fa-var-tachometer-alt, "tachometer-alt-fast": $fa-var-tachometer-alt-fast, "envelope-open-text": $fa-var-envelope-open-text, "hospital": $fa-var-hospital, "hospital-alt": $fa-var-hospital-alt, "hospital-wide": $fa-var-hospital-wide, "wine-bottle": $fa-var-wine-bottle, "chess-rook": $fa-var-chess-rook, "bars-staggered": $fa-var-bars-staggered, "reorder": $fa-var-reorder, "stream": $fa-var-stream, "dharmachakra": $fa-var-dharmachakra, "hotdog": $fa-var-hotdog, "person-walking-with-cane": $fa-var-person-walking-with-cane, "blind": $fa-var-blind, "drum": $fa-var-drum, "ice-cream": $fa-var-ice-cream, "heart-circle-bolt": $fa-var-heart-circle-bolt, "fax": $fa-var-fax, "paragraph": $fa-var-paragraph, "check-to-slot": $fa-var-check-to-slot, "vote-yea": $fa-var-vote-yea, "star-half": $fa-var-star-half, "boxes-stacked": $fa-var-boxes-stacked, "boxes": $fa-var-boxes, "boxes-alt": $fa-var-boxes-alt, "link": $fa-var-link, "chain": $fa-var-chain, "ear-listen": $fa-var-ear-listen, "assistive-listening-systems": $fa-var-assistive-listening-systems, "tree-city": $fa-var-tree-city, "play": $fa-var-play, "font": $fa-var-font, "rupiah-sign": $fa-var-rupiah-sign, "magnifying-glass": $fa-var-magnifying-glass, "search": $fa-var-search, "table-tennis-paddle-ball": $fa-var-table-tennis-paddle-ball, "ping-pong-paddle-ball": $fa-var-ping-pong-paddle-ball, "table-tennis": $fa-var-table-tennis, "person-dots-from-line": $fa-var-person-dots-from-line, "diagnoses": $fa-var-diagnoses, "trash-can-arrow-up": $fa-var-trash-can-arrow-up, "trash-restore-alt": $fa-var-trash-restore-alt, "naira-sign": $fa-var-naira-sign, "cart-arrow-down": $fa-var-cart-arrow-down, "walkie-talkie": $fa-var-walkie-talkie, "file-pen": $fa-var-file-pen, "file-edit": $fa-var-file-edit, "receipt": $fa-var-receipt, "square-pen": $fa-var-square-pen, "pen-square": $fa-var-pen-square, "pencil-square": $fa-var-pencil-square, "suitcase-rolling": $fa-var-suitcase-rolling, "person-circle-exclamation": $fa-var-person-circle-exclamation, "chevron-down": $fa-var-chevron-down, "battery-full": $fa-var-battery-full, "battery": $fa-var-battery, "battery-5": $fa-var-battery-5, "skull-crossbones": $fa-var-skull-crossbones, "code-compare": $fa-var-code-compare, "list-ul": $fa-var-list-ul, "list-dots": $fa-var-list-dots, "school-lock": $fa-var-school-lock, "tower-cell": $fa-var-tower-cell, "down-long": $fa-var-down-long, "long-arrow-alt-down": $fa-var-long-arrow-alt-down, "ranking-star": $fa-var-ranking-star, "chess-king": $fa-var-chess-king, "person-harassing": $fa-var-person-harassing, "brazilian-real-sign": $fa-var-brazilian-real-sign, "landmark-dome": $fa-var-landmark-dome, "landmark-alt": $fa-var-landmark-alt, "arrow-up": $fa-var-arrow-up, "tv": $fa-var-tv, "television": $fa-var-television, "tv-alt": $fa-var-tv-alt, "shrimp": $fa-var-shrimp, "list-check": $fa-var-list-check, "tasks": $fa-var-tasks, "jug-detergent": $fa-var-jug-detergent, "circle-user": $fa-var-circle-user, "user-circle": $fa-var-user-circle, "user-shield": $fa-var-user-shield, "wind": $fa-var-wind, "car-burst": $fa-var-car-burst, "car-crash": $fa-var-car-crash, "y": $fa-var-y, "person-snowboarding": $fa-var-person-snowboarding, "snowboarding": $fa-var-snowboarding, "truck-fast": $fa-var-truck-fast, "shipping-fast": $fa-var-shipping-fast, "fish": $fa-var-fish, "user-graduate": $fa-var-user-graduate, "circle-half-stroke": $fa-var-circle-half-stroke, "adjust": $fa-var-adjust, "clapperboard": $fa-var-clapperboard, "circle-radiation": $fa-var-circle-radiation, "radiation-alt": $fa-var-radiation-alt, "baseball": $fa-var-baseball, "baseball-ball": $fa-var-baseball-ball, "jet-fighter-up": $fa-var-jet-fighter-up, "diagram-project": $fa-var-diagram-project, "project-diagram": $fa-var-project-diagram, "copy": $fa-var-copy, "volume-xmark": $fa-var-volume-xmark, "volume-mute": $fa-var-volume-mute, "volume-times": $fa-var-volume-times, "hand-sparkles": $fa-var-hand-sparkles, "grip": $fa-var-grip, "grip-horizontal": $fa-var-grip-horizontal, "share-from-square": $fa-var-share-from-square, "share-square": $fa-var-share-square, "child-combatant": $fa-var-child-combatant, "child-rifle": $fa-var-child-rifle, "gun": $fa-var-gun, "square-phone": $fa-var-square-phone, "phone-square": $fa-var-phone-square, "plus": $fa-var-plus, "add": $fa-var-add, "expand": $fa-var-expand, "computer": $fa-var-computer, "xmark": $fa-var-xmark, "close": $fa-var-close, "multiply": $fa-var-multiply, "remove": $fa-var-remove, "times": $fa-var-times, "arrows-up-down-left-right": $fa-var-arrows-up-down-left-right, "arrows": $fa-var-arrows, "chalkboard-user": $fa-var-chalkboard-user, "chalkboard-teacher": $fa-var-chalkboard-teacher, "peso-sign": $fa-var-peso-sign, "building-shield": $fa-var-building-shield, "baby": $fa-var-baby, "users-line": $fa-var-users-line, "quote-left": $fa-var-quote-left, "quote-left-alt": $fa-var-quote-left-alt, "tractor": $fa-var-tractor, "trash-arrow-up": $fa-var-trash-arrow-up, "trash-restore": $fa-var-trash-restore, "arrow-down-up-lock": $fa-var-arrow-down-up-lock, "lines-leaning": $fa-var-lines-leaning, "ruler-combined": $fa-var-ruler-combined, "copyright": $fa-var-copyright, "equals": $fa-var-equals, "blender": $fa-var-blender, "teeth": $fa-var-teeth, "shekel-sign": $fa-var-shekel-sign, "ils": $fa-var-ils, "shekel": $fa-var-shekel, "sheqel": $fa-var-sheqel, "sheqel-sign": $fa-var-sheqel-sign, "map": $fa-var-map, "rocket": $fa-var-rocket, "photo-film": $fa-var-photo-film, "photo-video": $fa-var-photo-video, "folder-minus": $fa-var-folder-minus, "store": $fa-var-store, "arrow-trend-up": $fa-var-arrow-trend-up, "plug-circle-minus": $fa-var-plug-circle-minus, "sign-hanging": $fa-var-sign-hanging, "sign": $fa-var-sign, "bezier-curve": $fa-var-bezier-curve, "bell-slash": $fa-var-bell-slash, "tablet": $fa-var-tablet, "tablet-android": $fa-var-tablet-android, "school-flag": $fa-var-school-flag, "fill": $fa-var-fill, "angle-up": $fa-var-angle-up, "drumstick-bite": $fa-var-drumstick-bite, "holly-berry": $fa-var-holly-berry, "chevron-left": $fa-var-chevron-left, "bacteria": $fa-var-bacteria, "hand-lizard": $fa-var-hand-lizard, "notdef": $fa-var-notdef, "disease": $fa-var-disease, "briefcase-medical": $fa-var-briefcase-medical, "genderless": $fa-var-genderless, "chevron-right": $fa-var-chevron-right, "retweet": $fa-var-retweet, "car-rear": $fa-var-car-rear, "car-alt": $fa-var-car-alt, "pump-soap": $fa-var-pump-soap, "video-slash": $fa-var-video-slash, "battery-quarter": $fa-var-battery-quarter, "battery-2": $fa-var-battery-2, "radio": $fa-var-radio, "baby-carriage": $fa-var-baby-carriage, "carriage-baby": $fa-var-carriage-baby, "traffic-light": $fa-var-traffic-light, "thermometer": $fa-var-thermometer, "vr-cardboard": $fa-var-vr-cardboard, "hand-middle-finger": $fa-var-hand-middle-finger, "percent": $fa-var-percent, "percentage": $fa-var-percentage, "truck-moving": $fa-var-truck-moving, "glass-water-droplet": $fa-var-glass-water-droplet, "display": $fa-var-display, "face-smile": $fa-var-face-smile, "smile": $fa-var-smile, "thumbtack": $fa-var-thumbtack, "thumb-tack": $fa-var-thumb-tack, "trophy": $fa-var-trophy, "person-praying": $fa-var-person-praying, "pray": $fa-var-pray, "hammer": $fa-var-hammer, "hand-peace": $fa-var-hand-peace, "rotate": $fa-var-rotate, "sync-alt": $fa-var-sync-alt, "spinner": $fa-var-spinner, "robot": $fa-var-robot, "peace": $fa-var-peace, "gears": $fa-var-gears, "cogs": $fa-var-cogs, "warehouse": $fa-var-warehouse, "arrow-up-right-dots": $fa-var-arrow-up-right-dots, "splotch": $fa-var-splotch, "face-grin-hearts": $fa-var-face-grin-hearts, "grin-hearts": $fa-var-grin-hearts, "dice-four": $fa-var-dice-four, "sim-card": $fa-var-sim-card, "transgender": $fa-var-transgender, "transgender-alt": $fa-var-transgender-alt, "mercury": $fa-var-mercury, "arrow-turn-down": $fa-var-arrow-turn-down, "level-down": $fa-var-level-down, "person-falling-burst": $fa-var-person-falling-burst, "award": $fa-var-award, "ticket-simple": $fa-var-ticket-simple, "ticket-alt": $fa-var-ticket-alt, "building": $fa-var-building, "angles-left": $fa-var-angles-left, "angle-double-left": $fa-var-angle-double-left, "qrcode": $fa-var-qrcode, "clock-rotate-left": $fa-var-clock-rotate-left, "history": $fa-var-history, "face-grin-beam-sweat": $fa-var-face-grin-beam-sweat, "grin-beam-sweat": $fa-var-grin-beam-sweat, "file-export": $fa-var-file-export, "arrow-right-from-file": $fa-var-arrow-right-from-file, "shield": $fa-var-shield, "shield-blank": $fa-var-shield-blank, "arrow-up-short-wide": $fa-var-arrow-up-short-wide, "sort-amount-up-alt": $fa-var-sort-amount-up-alt, "house-medical": $fa-var-house-medical, "golf-ball-tee": $fa-var-golf-ball-tee, "golf-ball": $fa-var-golf-ball, "circle-chevron-left": $fa-var-circle-chevron-left, "chevron-circle-left": $fa-var-chevron-circle-left, "house-chimney-window": $fa-var-house-chimney-window, "pen-nib": $fa-var-pen-nib, "tent-arrow-turn-left": $fa-var-tent-arrow-turn-left, "tents": $fa-var-tents, "wand-magic": $fa-var-wand-magic, "magic": $fa-var-magic, "dog": $fa-var-dog, "carrot": $fa-var-carrot, "moon": $fa-var-moon, "wine-glass-empty": $fa-var-wine-glass-empty, "wine-glass-alt": $fa-var-wine-glass-alt, "cheese": $fa-var-cheese, "yin-yang": $fa-var-yin-yang, "music": $fa-var-music, "code-commit": $fa-var-code-commit, "temperature-low": $fa-var-temperature-low, "person-biking": $fa-var-person-biking, "biking": $fa-var-biking, "broom": $fa-var-broom, "shield-heart": $fa-var-shield-heart, "gopuram": $fa-var-gopuram, "earth-oceania": $fa-var-earth-oceania, "globe-oceania": $fa-var-globe-oceania, "square-xmark": $fa-var-square-xmark, "times-square": $fa-var-times-square, "xmark-square": $fa-var-xmark-square, "hashtag": $fa-var-hashtag, "up-right-and-down-left-from-center": $fa-var-up-right-and-down-left-from-center, "expand-alt": $fa-var-expand-alt, "oil-can": $fa-var-oil-can, "t": $fa-var-t, "hippo": $fa-var-hippo, "chart-column": $fa-var-chart-column, "infinity": $fa-var-infinity, "vial-circle-check": $fa-var-vial-circle-check, "person-arrow-down-to-line": $fa-var-person-arrow-down-to-line, "voicemail": $fa-var-voicemail, "fan": $fa-var-fan, "person-walking-luggage": $fa-var-person-walking-luggage, "up-down": $fa-var-up-down, "arrows-alt-v": $fa-var-arrows-alt-v, "cloud-moon-rain": $fa-var-cloud-moon-rain, "calendar": $fa-var-calendar, "trailer": $fa-var-trailer, "bahai": $fa-var-bahai, "haykal": $fa-var-haykal, "sd-card": $fa-var-sd-card, "dragon": $fa-var-dragon, "shoe-prints": $fa-var-shoe-prints, "circle-plus": $fa-var-circle-plus, "plus-circle": $fa-var-plus-circle, "face-grin-tongue-wink": $fa-var-face-grin-tongue-wink, "grin-tongue-wink": $fa-var-grin-tongue-wink, "hand-holding": $fa-var-hand-holding, "plug-circle-exclamation": $fa-var-plug-circle-exclamation, "link-slash": $fa-var-link-slash, "chain-broken": $fa-var-chain-broken, "chain-slash": $fa-var-chain-slash, "unlink": $fa-var-unlink, "clone": $fa-var-clone, "person-walking-arrow-loop-left": $fa-var-person-walking-arrow-loop-left, "arrow-up-z-a": $fa-var-arrow-up-z-a, "sort-alpha-up-alt": $fa-var-sort-alpha-up-alt, "fire-flame-curved": $fa-var-fire-flame-curved, "fire-alt": $fa-var-fire-alt, "tornado": $fa-var-tornado, "file-circle-plus": $fa-var-file-circle-plus, "book-quran": $fa-var-book-quran, "quran": $fa-var-quran, "anchor": $fa-var-anchor, "border-all": $fa-var-border-all, "face-angry": $fa-var-face-angry, "angry": $fa-var-angry, "cookie-bite": $fa-var-cookie-bite, "arrow-trend-down": $fa-var-arrow-trend-down, "rss": $fa-var-rss, "feed": $fa-var-feed, "draw-polygon": $fa-var-draw-polygon, "scale-balanced": $fa-var-scale-balanced, "balance-scale": $fa-var-balance-scale, "gauge-simple-high": $fa-var-gauge-simple-high, "tachometer": $fa-var-tachometer, "tachometer-fast": $fa-var-tachometer-fast, "shower": $fa-var-shower, "desktop": $fa-var-desktop, "desktop-alt": $fa-var-desktop-alt, "m": $fa-var-m, "table-list": $fa-var-table-list, "th-list": $fa-var-th-list, "comment-sms": $fa-var-comment-sms, "sms": $fa-var-sms, "book": $fa-var-book, "user-plus": $fa-var-user-plus, "check": $fa-var-check, "battery-three-quarters": $fa-var-battery-three-quarters, "battery-4": $fa-var-battery-4, "house-circle-check": $fa-var-house-circle-check, "angle-left": $fa-var-angle-left, "diagram-successor": $fa-var-diagram-successor, "truck-arrow-right": $fa-var-truck-arrow-right, "arrows-split-up-and-left": $fa-var-arrows-split-up-and-left, "hand-fist": $fa-var-hand-fist, "fist-raised": $fa-var-fist-raised, "cloud-moon": $fa-var-cloud-moon, "briefcase": $fa-var-briefcase, "person-falling": $fa-var-person-falling, "image-portrait": $fa-var-image-portrait, "portrait": $fa-var-portrait, "user-tag": $fa-var-user-tag, "rug": $fa-var-rug, "earth-europe": $fa-var-earth-europe, "globe-europe": $fa-var-globe-europe, "cart-flatbed-suitcase": $fa-var-cart-flatbed-suitcase, "luggage-cart": $fa-var-luggage-cart, "rectangle-xmark": $fa-var-rectangle-xmark, "rectangle-times": $fa-var-rectangle-times, "times-rectangle": $fa-var-times-rectangle, "window-close": $fa-var-window-close, "baht-sign": $fa-var-baht-sign, "book-open": $fa-var-book-open, "book-journal-whills": $fa-var-book-journal-whills, "journal-whills": $fa-var-journal-whills, "handcuffs": $fa-var-handcuffs, "triangle-exclamation": $fa-var-triangle-exclamation, "exclamation-triangle": $fa-var-exclamation-triangle, "warning": $fa-var-warning, "database": $fa-var-database, "share": $fa-var-share, "arrow-turn-right": $fa-var-arrow-turn-right, "mail-forward": $fa-var-mail-forward, "bottle-droplet": $fa-var-bottle-droplet, "mask-face": $fa-var-mask-face, "hill-rockslide": $fa-var-hill-rockslide, "right-left": $fa-var-right-left, "exchange-alt": $fa-var-exchange-alt, "paper-plane": $fa-var-paper-plane, "road-circle-exclamation": $fa-var-road-circle-exclamation, "dungeon": $fa-var-dungeon, "align-right": $fa-var-align-right, "money-bill-1-wave": $fa-var-money-bill-1-wave, "money-bill-wave-alt": $fa-var-money-bill-wave-alt, "life-ring": $fa-var-life-ring, "hands": $fa-var-hands, "sign-language": $fa-var-sign-language, "signing": $fa-var-signing, "calendar-day": $fa-var-calendar-day, "water-ladder": $fa-var-water-ladder, "ladder-water": $fa-var-ladder-water, "swimming-pool": $fa-var-swimming-pool, "arrows-up-down": $fa-var-arrows-up-down, "arrows-v": $fa-var-arrows-v, "face-grimace": $fa-var-face-grimace, "grimace": $fa-var-grimace, "wheelchair-move": $fa-var-wheelchair-move, "wheelchair-alt": $fa-var-wheelchair-alt, "turn-down": $fa-var-turn-down, "level-down-alt": $fa-var-level-down-alt, "person-walking-arrow-right": $fa-var-person-walking-arrow-right, "square-envelope": $fa-var-square-envelope, "envelope-square": $fa-var-envelope-square, "dice": $fa-var-dice, "bowling-ball": $fa-var-bowling-ball, "brain": $fa-var-brain, "bandage": $fa-var-bandage, "band-aid": $fa-var-band-aid, "calendar-minus": $fa-var-calendar-minus, "circle-xmark": $fa-var-circle-xmark, "times-circle": $fa-var-times-circle, "xmark-circle": $fa-var-xmark-circle, "gifts": $fa-var-gifts, "hotel": $fa-var-hotel, "earth-asia": $fa-var-earth-asia, "globe-asia": $fa-var-globe-asia, "id-card-clip": $fa-var-id-card-clip, "id-card-alt": $fa-var-id-card-alt, "magnifying-glass-plus": $fa-var-magnifying-glass-plus, "search-plus": $fa-var-search-plus, "thumbs-up": $fa-var-thumbs-up, "user-clock": $fa-var-user-clock, "hand-dots": $fa-var-hand-dots, "allergies": $fa-var-allergies, "file-invoice": $fa-var-file-invoice, "window-minimize": $fa-var-window-minimize, "mug-saucer": $fa-var-mug-saucer, "coffee": $fa-var-coffee, "brush": $fa-var-brush, "mask": $fa-var-mask, "magnifying-glass-minus": $fa-var-magnifying-glass-minus, "search-minus": $fa-var-search-minus, "ruler-vertical": $fa-var-ruler-vertical, "user-large": $fa-var-user-large, "user-alt": $fa-var-user-alt, "train-tram": $fa-var-train-tram, "user-nurse": $fa-var-user-nurse, "syringe": $fa-var-syringe, "cloud-sun": $fa-var-cloud-sun, "stopwatch-20": $fa-var-stopwatch-20, "square-full": $fa-var-square-full, "magnet": $fa-var-magnet, "jar": $fa-var-jar, "note-sticky": $fa-var-note-sticky, "sticky-note": $fa-var-sticky-note, "bug-slash": $fa-var-bug-slash, "arrow-up-from-water-pump": $fa-var-arrow-up-from-water-pump, "bone": $fa-var-bone, "user-injured": $fa-var-user-injured, "face-sad-tear": $fa-var-face-sad-tear, "sad-tear": $fa-var-sad-tear, "plane": $fa-var-plane, "tent-arrows-down": $fa-var-tent-arrows-down, "exclamation": $fa-var-exclamation, "arrows-spin": $fa-var-arrows-spin, "print": $fa-var-print, "turkish-lira-sign": $fa-var-turkish-lira-sign, "try": $fa-var-try, "turkish-lira": $fa-var-turkish-lira, "dollar-sign": $fa-var-dollar-sign, "dollar": $fa-var-dollar, "usd": $fa-var-usd, "x": $fa-var-x, "magnifying-glass-dollar": $fa-var-magnifying-glass-dollar, "search-dollar": $fa-var-search-dollar, "users-gear": $fa-var-users-gear, "users-cog": $fa-var-users-cog, "person-military-pointing": $fa-var-person-military-pointing, "building-columns": $fa-var-building-columns, "bank": $fa-var-bank, "institution": $fa-var-institution, "museum": $fa-var-museum, "university": $fa-var-university, "umbrella": $fa-var-umbrella, "trowel": $fa-var-trowel, "d": $fa-var-d, "stapler": $fa-var-stapler, "masks-theater": $fa-var-masks-theater, "theater-masks": $fa-var-theater-masks, "kip-sign": $fa-var-kip-sign, "hand-point-left": $fa-var-hand-point-left, "handshake-simple": $fa-var-handshake-simple, "handshake-alt": $fa-var-handshake-alt, "jet-fighter": $fa-var-jet-fighter, "fighter-jet": $fa-var-fighter-jet, "square-share-nodes": $fa-var-square-share-nodes, "share-alt-square": $fa-var-share-alt-square, "barcode": $fa-var-barcode, "plus-minus": $fa-var-plus-minus, "video": $fa-var-video, "video-camera": $fa-var-video-camera, "graduation-cap": $fa-var-graduation-cap, "mortar-board": $fa-var-mortar-board, "hand-holding-medical": $fa-var-hand-holding-medical, "person-circle-check": $fa-var-person-circle-check, "turn-up": $fa-var-turn-up, "level-up-alt": $fa-var-level-up-alt, ); $fa-brand-icons: ( "monero": $fa-var-monero, "hooli": $fa-var-hooli, "yelp": $fa-var-yelp, "cc-visa": $fa-var-cc-visa, "lastfm": $fa-var-lastfm, "shopware": $fa-var-shopware, "creative-commons-nc": $fa-var-creative-commons-nc, "aws": $fa-var-aws, "redhat": $fa-var-redhat, "yoast": $fa-var-yoast, "cloudflare": $fa-var-cloudflare, "ups": $fa-var-ups, "wpexplorer": $fa-var-wpexplorer, "dyalog": $fa-var-dyalog, "bity": $fa-var-bity, "stackpath": $fa-var-stackpath, "buysellads": $fa-var-buysellads, "first-order": $fa-var-first-order, "modx": $fa-var-modx, "guilded": $fa-var-guilded, "vnv": $fa-var-vnv, "square-js": $fa-var-square-js, "js-square": $fa-var-js-square, "microsoft": $fa-var-microsoft, "qq": $fa-var-qq, "orcid": $fa-var-orcid, "java": $fa-var-java, "invision": $fa-var-invision, "creative-commons-pd-alt": $fa-var-creative-commons-pd-alt, "centercode": $fa-var-centercode, "glide-g": $fa-var-glide-g, "drupal": $fa-var-drupal, "hire-a-helper": $fa-var-hire-a-helper, "creative-commons-by": $fa-var-creative-commons-by, "unity": $fa-var-unity, "whmcs": $fa-var-whmcs, "rocketchat": $fa-var-rocketchat, "vk": $fa-var-vk, "untappd": $fa-var-untappd, "mailchimp": $fa-var-mailchimp, "css3-alt": $fa-var-css3-alt, "square-reddit": $fa-var-square-reddit, "reddit-square": $fa-var-reddit-square, "vimeo-v": $fa-var-vimeo-v, "contao": $fa-var-contao, "square-font-awesome": $fa-var-square-font-awesome, "deskpro": $fa-var-deskpro, "sistrix": $fa-var-sistrix, "square-instagram": $fa-var-square-instagram, "instagram-square": $fa-var-instagram-square, "battle-net": $fa-var-battle-net, "the-red-yeti": $fa-var-the-red-yeti, "square-hacker-news": $fa-var-square-hacker-news, "hacker-news-square": $fa-var-hacker-news-square, "edge": $fa-var-edge, "napster": $fa-var-napster, "square-snapchat": $fa-var-square-snapchat, "snapchat-square": $fa-var-snapchat-square, "google-plus-g": $fa-var-google-plus-g, "artstation": $fa-var-artstation, "markdown": $fa-var-markdown, "sourcetree": $fa-var-sourcetree, "google-plus": $fa-var-google-plus, "diaspora": $fa-var-diaspora, "foursquare": $fa-var-foursquare, "stack-overflow": $fa-var-stack-overflow, "github-alt": $fa-var-github-alt, "phoenix-squadron": $fa-var-phoenix-squadron, "pagelines": $fa-var-pagelines, "algolia": $fa-var-algolia, "red-river": $fa-var-red-river, "creative-commons-sa": $fa-var-creative-commons-sa, "safari": $fa-var-safari, "google": $fa-var-google, "square-font-awesome-stroke": $fa-var-square-font-awesome-stroke, "font-awesome-alt": $fa-var-font-awesome-alt, "atlassian": $fa-var-atlassian, "linkedin-in": $fa-var-linkedin-in, "digital-ocean": $fa-var-digital-ocean, "nimblr": $fa-var-nimblr, "chromecast": $fa-var-chromecast, "evernote": $fa-var-evernote, "hacker-news": $fa-var-hacker-news, "creative-commons-sampling": $fa-var-creative-commons-sampling, "adversal": $fa-var-adversal, "creative-commons": $fa-var-creative-commons, "watchman-monitoring": $fa-var-watchman-monitoring, "fonticons": $fa-var-fonticons, "weixin": $fa-var-weixin, "shirtsinbulk": $fa-var-shirtsinbulk, "codepen": $fa-var-codepen, "git-alt": $fa-var-git-alt, "lyft": $fa-var-lyft, "rev": $fa-var-rev, "windows": $fa-var-windows, "wizards-of-the-coast": $fa-var-wizards-of-the-coast, "square-viadeo": $fa-var-square-viadeo, "viadeo-square": $fa-var-viadeo-square, "meetup": $fa-var-meetup, "centos": $fa-var-centos, "adn": $fa-var-adn, "cloudsmith": $fa-var-cloudsmith, "pied-piper-alt": $fa-var-pied-piper-alt, "square-dribbble": $fa-var-square-dribbble, "dribbble-square": $fa-var-dribbble-square, "codiepie": $fa-var-codiepie, "node": $fa-var-node, "mix": $fa-var-mix, "steam": $fa-var-steam, "cc-apple-pay": $fa-var-cc-apple-pay, "scribd": $fa-var-scribd, "openid": $fa-var-openid, "instalod": $fa-var-instalod, "expeditedssl": $fa-var-expeditedssl, "sellcast": $fa-var-sellcast, "square-twitter": $fa-var-square-twitter, "twitter-square": $fa-var-twitter-square, "r-project": $fa-var-r-project, "delicious": $fa-var-delicious, "freebsd": $fa-var-freebsd, "vuejs": $fa-var-vuejs, "accusoft": $fa-var-accusoft, "ioxhost": $fa-var-ioxhost, "fonticons-fi": $fa-var-fonticons-fi, "app-store": $fa-var-app-store, "cc-mastercard": $fa-var-cc-mastercard, "itunes-note": $fa-var-itunes-note, "golang": $fa-var-golang, "kickstarter": $fa-var-kickstarter, "grav": $fa-var-grav, "weibo": $fa-var-weibo, "uncharted": $fa-var-uncharted, "firstdraft": $fa-var-firstdraft, "square-youtube": $fa-var-square-youtube, "youtube-square": $fa-var-youtube-square, "wikipedia-w": $fa-var-wikipedia-w, "wpressr": $fa-var-wpressr, "rendact": $fa-var-rendact, "angellist": $fa-var-angellist, "galactic-republic": $fa-var-galactic-republic, "nfc-directional": $fa-var-nfc-directional, "skype": $fa-var-skype, "joget": $fa-var-joget, "fedora": $fa-var-fedora, "stripe-s": $fa-var-stripe-s, "meta": $fa-var-meta, "laravel": $fa-var-laravel, "hotjar": $fa-var-hotjar, "bluetooth-b": $fa-var-bluetooth-b, "sticker-mule": $fa-var-sticker-mule, "creative-commons-zero": $fa-var-creative-commons-zero, "hips": $fa-var-hips, "behance": $fa-var-behance, "reddit": $fa-var-reddit, "discord": $fa-var-discord, "chrome": $fa-var-chrome, "app-store-ios": $fa-var-app-store-ios, "cc-discover": $fa-var-cc-discover, "wpbeginner": $fa-var-wpbeginner, "confluence": $fa-var-confluence, "mdb": $fa-var-mdb, "dochub": $fa-var-dochub, "accessible-icon": $fa-var-accessible-icon, "ebay": $fa-var-ebay, "amazon": $fa-var-amazon, "unsplash": $fa-var-unsplash, "yarn": $fa-var-yarn, "square-steam": $fa-var-square-steam, "steam-square": $fa-var-steam-square, "500px": $fa-var-500px, "square-vimeo": $fa-var-square-vimeo, "vimeo-square": $fa-var-vimeo-square, "asymmetrik": $fa-var-asymmetrik, "font-awesome": $fa-var-font-awesome, "font-awesome-flag": $fa-var-font-awesome-flag, "font-awesome-logo-full": $fa-var-font-awesome-logo-full, "gratipay": $fa-var-gratipay, "apple": $fa-var-apple, "hive": $fa-var-hive, "gitkraken": $fa-var-gitkraken, "keybase": $fa-var-keybase, "apple-pay": $fa-var-apple-pay, "padlet": $fa-var-padlet, "amazon-pay": $fa-var-amazon-pay, "square-github": $fa-var-square-github, "github-square": $fa-var-github-square, "stumbleupon": $fa-var-stumbleupon, "fedex": $fa-var-fedex, "phoenix-framework": $fa-var-phoenix-framework, "shopify": $fa-var-shopify, "neos": $fa-var-neos, "hackerrank": $fa-var-hackerrank, "researchgate": $fa-var-researchgate, "swift": $fa-var-swift, "angular": $fa-var-angular, "speakap": $fa-var-speakap, "angrycreative": $fa-var-angrycreative, "y-combinator": $fa-var-y-combinator, "empire": $fa-var-empire, "envira": $fa-var-envira, "square-gitlab": $fa-var-square-gitlab, "gitlab-square": $fa-var-gitlab-square, "studiovinari": $fa-var-studiovinari, "pied-piper": $fa-var-pied-piper, "wordpress": $fa-var-wordpress, "product-hunt": $fa-var-product-hunt, "firefox": $fa-var-firefox, "linode": $fa-var-linode, "goodreads": $fa-var-goodreads, "square-odnoklassniki": $fa-var-square-odnoklassniki, "odnoklassniki-square": $fa-var-odnoklassniki-square, "jsfiddle": $fa-var-jsfiddle, "sith": $fa-var-sith, "themeisle": $fa-var-themeisle, "page4": $fa-var-page4, "hashnode": $fa-var-hashnode, "react": $fa-var-react, "cc-paypal": $fa-var-cc-paypal, "squarespace": $fa-var-squarespace, "cc-stripe": $fa-var-cc-stripe, "creative-commons-share": $fa-var-creative-commons-share, "bitcoin": $fa-var-bitcoin, "keycdn": $fa-var-keycdn, "opera": $fa-var-opera, "itch-io": $fa-var-itch-io, "umbraco": $fa-var-umbraco, "galactic-senate": $fa-var-galactic-senate, "ubuntu": $fa-var-ubuntu, "draft2digital": $fa-var-draft2digital, "stripe": $fa-var-stripe, "houzz": $fa-var-houzz, "gg": $fa-var-gg, "dhl": $fa-var-dhl, "square-pinterest": $fa-var-square-pinterest, "pinterest-square": $fa-var-pinterest-square, "xing": $fa-var-xing, "blackberry": $fa-var-blackberry, "creative-commons-pd": $fa-var-creative-commons-pd, "playstation": $fa-var-playstation, "quinscape": $fa-var-quinscape, "less": $fa-var-less, "blogger-b": $fa-var-blogger-b, "opencart": $fa-var-opencart, "vine": $fa-var-vine, "paypal": $fa-var-paypal, "gitlab": $fa-var-gitlab, "typo3": $fa-var-typo3, "reddit-alien": $fa-var-reddit-alien, "yahoo": $fa-var-yahoo, "dailymotion": $fa-var-dailymotion, "affiliatetheme": $fa-var-affiliatetheme, "pied-piper-pp": $fa-var-pied-piper-pp, "bootstrap": $fa-var-bootstrap, "odnoklassniki": $fa-var-odnoklassniki, "nfc-symbol": $fa-var-nfc-symbol, "ethereum": $fa-var-ethereum, "speaker-deck": $fa-var-speaker-deck, "creative-commons-nc-eu": $fa-var-creative-commons-nc-eu, "patreon": $fa-var-patreon, "avianex": $fa-var-avianex, "ello": $fa-var-ello, "gofore": $fa-var-gofore, "bimobject": $fa-var-bimobject, "facebook-f": $fa-var-facebook-f, "square-google-plus": $fa-var-square-google-plus, "google-plus-square": $fa-var-google-plus-square, "mandalorian": $fa-var-mandalorian, "first-order-alt": $fa-var-first-order-alt, "osi": $fa-var-osi, "google-wallet": $fa-var-google-wallet, "d-and-d-beyond": $fa-var-d-and-d-beyond, "periscope": $fa-var-periscope, "fulcrum": $fa-var-fulcrum, "cloudscale": $fa-var-cloudscale, "forumbee": $fa-var-forumbee, "mizuni": $fa-var-mizuni, "schlix": $fa-var-schlix, "square-xing": $fa-var-square-xing, "xing-square": $fa-var-xing-square, "bandcamp": $fa-var-bandcamp, "wpforms": $fa-var-wpforms, "cloudversify": $fa-var-cloudversify, "usps": $fa-var-usps, "megaport": $fa-var-megaport, "magento": $fa-var-magento, "spotify": $fa-var-spotify, "optin-monster": $fa-var-optin-monster, "fly": $fa-var-fly, "aviato": $fa-var-aviato, "itunes": $fa-var-itunes, "cuttlefish": $fa-var-cuttlefish, "blogger": $fa-var-blogger, "flickr": $fa-var-flickr, "viber": $fa-var-viber, "soundcloud": $fa-var-soundcloud, "digg": $fa-var-digg, "tencent-weibo": $fa-var-tencent-weibo, "symfony": $fa-var-symfony, "maxcdn": $fa-var-maxcdn, "etsy": $fa-var-etsy, "facebook-messenger": $fa-var-facebook-messenger, "audible": $fa-var-audible, "think-peaks": $fa-var-think-peaks, "bilibili": $fa-var-bilibili, "erlang": $fa-var-erlang, "cotton-bureau": $fa-var-cotton-bureau, "dashcube": $fa-var-dashcube, "42-group": $fa-var-42-group, "innosoft": $fa-var-innosoft, "stack-exchange": $fa-var-stack-exchange, "elementor": $fa-var-elementor, "square-pied-piper": $fa-var-square-pied-piper, "pied-piper-square": $fa-var-pied-piper-square, "creative-commons-nd": $fa-var-creative-commons-nd, "palfed": $fa-var-palfed, "superpowers": $fa-var-superpowers, "resolving": $fa-var-resolving, "xbox": $fa-var-xbox, "searchengin": $fa-var-searchengin, "tiktok": $fa-var-tiktok, "square-facebook": $fa-var-square-facebook, "facebook-square": $fa-var-facebook-square, "renren": $fa-var-renren, "linux": $fa-var-linux, "glide": $fa-var-glide, "linkedin": $fa-var-linkedin, "hubspot": $fa-var-hubspot, "deploydog": $fa-var-deploydog, "twitch": $fa-var-twitch, "ravelry": $fa-var-ravelry, "mixer": $fa-var-mixer, "square-lastfm": $fa-var-square-lastfm, "lastfm-square": $fa-var-lastfm-square, "vimeo": $fa-var-vimeo, "mendeley": $fa-var-mendeley, "uniregistry": $fa-var-uniregistry, "figma": $fa-var-figma, "creative-commons-remix": $fa-var-creative-commons-remix, "cc-amazon-pay": $fa-var-cc-amazon-pay, "dropbox": $fa-var-dropbox, "instagram": $fa-var-instagram, "cmplid": $fa-var-cmplid, "facebook": $fa-var-facebook, "gripfire": $fa-var-gripfire, "jedi-order": $fa-var-jedi-order, "uikit": $fa-var-uikit, "fort-awesome-alt": $fa-var-fort-awesome-alt, "phabricator": $fa-var-phabricator, "ussunnah": $fa-var-ussunnah, "earlybirds": $fa-var-earlybirds, "trade-federation": $fa-var-trade-federation, "autoprefixer": $fa-var-autoprefixer, "whatsapp": $fa-var-whatsapp, "slideshare": $fa-var-slideshare, "google-play": $fa-var-google-play, "viadeo": $fa-var-viadeo, "line": $fa-var-line, "google-drive": $fa-var-google-drive, "servicestack": $fa-var-servicestack, "simplybuilt": $fa-var-simplybuilt, "bitbucket": $fa-var-bitbucket, "imdb": $fa-var-imdb, "deezer": $fa-var-deezer, "raspberry-pi": $fa-var-raspberry-pi, "jira": $fa-var-jira, "docker": $fa-var-docker, "screenpal": $fa-var-screenpal, "bluetooth": $fa-var-bluetooth, "gitter": $fa-var-gitter, "d-and-d": $fa-var-d-and-d, "microblog": $fa-var-microblog, "cc-diners-club": $fa-var-cc-diners-club, "gg-circle": $fa-var-gg-circle, "pied-piper-hat": $fa-var-pied-piper-hat, "kickstarter-k": $fa-var-kickstarter-k, "yandex": $fa-var-yandex, "readme": $fa-var-readme, "html5": $fa-var-html5, "sellsy": $fa-var-sellsy, "sass": $fa-var-sass, "wirsindhandwerk": $fa-var-wirsindhandwerk, "wsh": $fa-var-wsh, "buromobelexperte": $fa-var-buromobelexperte, "salesforce": $fa-var-salesforce, "octopus-deploy": $fa-var-octopus-deploy, "medapps": $fa-var-medapps, "ns8": $fa-var-ns8, "pinterest-p": $fa-var-pinterest-p, "apper": $fa-var-apper, "fort-awesome": $fa-var-fort-awesome, "waze": $fa-var-waze, "cc-jcb": $fa-var-cc-jcb, "snapchat": $fa-var-snapchat, "snapchat-ghost": $fa-var-snapchat-ghost, "fantasy-flight-games": $fa-var-fantasy-flight-games, "rust": $fa-var-rust, "wix": $fa-var-wix, "square-behance": $fa-var-square-behance, "behance-square": $fa-var-behance-square, "supple": $fa-var-supple, "rebel": $fa-var-rebel, "css3": $fa-var-css3, "staylinked": $fa-var-staylinked, "kaggle": $fa-var-kaggle, "space-awesome": $fa-var-space-awesome, "deviantart": $fa-var-deviantart, "cpanel": $fa-var-cpanel, "goodreads-g": $fa-var-goodreads-g, "square-git": $fa-var-square-git, "git-square": $fa-var-git-square, "square-tumblr": $fa-var-square-tumblr, "tumblr-square": $fa-var-tumblr-square, "trello": $fa-var-trello, "creative-commons-nc-jp": $fa-var-creative-commons-nc-jp, "get-pocket": $fa-var-get-pocket, "perbyte": $fa-var-perbyte, "grunt": $fa-var-grunt, "weebly": $fa-var-weebly, "connectdevelop": $fa-var-connectdevelop, "leanpub": $fa-var-leanpub, "black-tie": $fa-var-black-tie, "themeco": $fa-var-themeco, "python": $fa-var-python, "android": $fa-var-android, "bots": $fa-var-bots, "free-code-camp": $fa-var-free-code-camp, "hornbill": $fa-var-hornbill, "js": $fa-var-js, "ideal": $fa-var-ideal, "git": $fa-var-git, "dev": $fa-var-dev, "sketch": $fa-var-sketch, "yandex-international": $fa-var-yandex-international, "cc-amex": $fa-var-cc-amex, "uber": $fa-var-uber, "github": $fa-var-github, "php": $fa-var-php, "alipay": $fa-var-alipay, "youtube": $fa-var-youtube, "skyatlas": $fa-var-skyatlas, "firefox-browser": $fa-var-firefox-browser, "replyd": $fa-var-replyd, "suse": $fa-var-suse, "jenkins": $fa-var-jenkins, "twitter": $fa-var-twitter, "rockrms": $fa-var-rockrms, "pinterest": $fa-var-pinterest, "buffer": $fa-var-buffer, "npm": $fa-var-npm, "yammer": $fa-var-yammer, "btc": $fa-var-btc, "dribbble": $fa-var-dribbble, "stumbleupon-circle": $fa-var-stumbleupon-circle, "internet-explorer": $fa-var-internet-explorer, "stubber": $fa-var-stubber, "telegram": $fa-var-telegram, "telegram-plane": $fa-var-telegram-plane, "old-republic": $fa-var-old-republic, "odysee": $fa-var-odysee, "square-whatsapp": $fa-var-square-whatsapp, "whatsapp-square": $fa-var-whatsapp-square, "node-js": $fa-var-node-js, "edge-legacy": $fa-var-edge-legacy, "slack": $fa-var-slack, "slack-hash": $fa-var-slack-hash, "medrt": $fa-var-medrt, "usb": $fa-var-usb, "tumblr": $fa-var-tumblr, "vaadin": $fa-var-vaadin, "quora": $fa-var-quora, "reacteurope": $fa-var-reacteurope, "medium": $fa-var-medium, "medium-m": $fa-var-medium-m, "amilia": $fa-var-amilia, "mixcloud": $fa-var-mixcloud, "flipboard": $fa-var-flipboard, "viacoin": $fa-var-viacoin, "critical-role": $fa-var-critical-role, "sitrox": $fa-var-sitrox, "discourse": $fa-var-discourse, "joomla": $fa-var-joomla, "mastodon": $fa-var-mastodon, "airbnb": $fa-var-airbnb, "wolf-pack-battalion": $fa-var-wolf-pack-battalion, "buy-n-large": $fa-var-buy-n-large, "gulp": $fa-var-gulp, "creative-commons-sampling-plus": $fa-var-creative-commons-sampling-plus, "strava": $fa-var-strava, "ember": $fa-var-ember, "canadian-maple-leaf": $fa-var-canadian-maple-leaf, "teamspeak": $fa-var-teamspeak, "pushed": $fa-var-pushed, "wordpress-simple": $fa-var-wordpress-simple, "nutritionix": $fa-var-nutritionix, "wodu": $fa-var-wodu, "google-pay": $fa-var-google-pay, "intercom": $fa-var-intercom, "zhihu": $fa-var-zhihu, "korvue": $fa-var-korvue, "pix": $fa-var-pix, "steam-symbol": $fa-var-steam-symbol, ); boost/scss/fontawesome/_bordered-pulled.scss 0000604 00000001320 15062070724 0015274 0 ustar 00 // bordered + pulled icons // ------------------------- .#{$fa-css-prefix}-border { border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color}); border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius}); border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style}); border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width}); padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding}); } .#{$fa-css-prefix}-pull-left { float: left; margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin}); } .#{$fa-css-prefix}-pull-right { float: right; margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin}); } boost/scss/fontawesome/_stacked.scss 0000604 00000001171 15062070724 0013645 0 ustar 00 // stacking icons // ------------------------- .#{$fa-css-prefix}-stack { display: inline-block; height: 2em; line-height: 2em; position: relative; vertical-align: $fa-stack-vertical-align; width: $fa-stack-width; } .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { left: 0; position: absolute; text-align: center; width: 100%; z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index}); } .#{$fa-css-prefix}-stack-1x { line-height: inherit; } .#{$fa-css-prefix}-stack-2x { font-size: 2em; } .#{$fa-css-prefix}-inverse { color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse}); } boost/scss/fontawesome/readme_moodle.txt 0000604 00000002451 15062070724 0014532 0 ustar 00 DESCRIPTION OF FONT AWESOME IMPORT INTO MOODLE ----------------------------------------------- Download the latest free web version from https://github.com/FortAwesome/Font-Awesome/ Font Awesome comes in 2 parts relating to Moodle: 1. Fonts: a. Replace the content in lib/fonts with the files in the webfonts folder. b. Update lib/thirdpartylibs.xml. 2. SCSS: a. Replace the files in this folder (/theme/boost/scss/fontawesome) with the files in the scss folder. b. Copy the LICENSE.txt file from the root to theme/boost/scss/fontawesome. c. Update theme/boost/thirdpartylibs.xml. CHANGES -------- 1. The fonts need to be provided using the [[font:core|xxxx]] method. Edit fontawesome/brands.scss, fontawesome/regular.scss and fontawesome/solid.scss to replace: url('#{$fa-font-path}/fa-xxxxx-400.zzzzz') format('zzzzz') with url('[[font:core|fa-xxxxx-400.zzzzz]]') format('zzzzz'), FINALLY -------- After applying the previous changes to the library: 1. Update the Component library files (for instance, admin/tool/componentlibrary/content/moodle/components/moodle-icons.md). 2. Run `php admin/tool/componentlibrary/cli/fetchicons.php` to update admin/tool/componentlibrary/hugo/site/data/fontawesomeicons.json 3. Run `grunt` to update the CSS style files and the Component library files. boost/scss/fontawesome/_screen-reader.scss 0000604 00000000520 15062070724 0014743 0 ustar 00 // screen-reader utilities // ------------------------- // only display content to screen readers .sr-only, .#{$fa-css-prefix}-sr-only { @include fa-sr-only; } // use in conjunction with .sr-only to only display content when it's focused .sr-only-focusable, .#{$fa-css-prefix}-sr-only-focusable { @include fa-sr-only-focusable; } boost/scss/fontawesome/_list.scss 0000604 00000000677 15062070724 0013214 0 ustar 00 // icons in a list // ------------------------- .#{$fa-css-prefix}-ul { list-style-type: none; margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin}); padding-left: 0; > li { position: relative; } } .#{$fa-css-prefix}-li { left: calc(var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}) * -1); position: absolute; text-align: center; width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}); line-height: inherit; } boost/scss/fontawesome/v4-shims.scss 0000604 00000000532 15062070724 0013542 0 ustar 00 /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ // V4 shims compile (Web Fonts-based) // ------------------------- @import 'functions'; @import 'variables'; @import 'shims'; boost/scss/fontawesome/_mixins.scss 0000604 00000003713 15062070724 0013542 0 ustar 00 // mixins // -------------------------- // base rendering for an icon @mixin fa-icon { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; display: inline-block; font-style: normal; font-variant: normal; font-weight: normal; line-height: 1; } // sets relative font-sizing and alignment (in _sizing) @mixin fa-size ($font-size) { font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender } // only display content to screen readers // see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/ // see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ @mixin fa-sr-only() { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } // use in conjunction with .sr-only to only display content when it's focused @mixin fa-sr-only-focusable() { &:not(:focus) { @include fa-sr-only(); } } // sets a specific icon family to use alongside style + icon mixins // convenience mixins for declaring pseudo-elements by CSS variable, // including all style-specific font properties, and both the ::before // and ::after elements in the duotone case. @mixin fa-icon-solid($fa-var) { @extend %fa-icon; @extend .fa-solid; &::before { content: unquote("\"#{ $fa-var }\""); } } @mixin fa-icon-regular($fa-var) { @extend %fa-icon; @extend .fa-regular; &::before { content: unquote("\"#{ $fa-var }\""); } } @mixin fa-icon-brands($fa-var) { @extend %fa-icon; @extend .fa-brands; &::before { content: unquote("\"#{ $fa-var }\""); } } boost/scss/fontawesome/_shims.scss 0000604 00000206733 15062070724 0013365 0 ustar 00 .#{$fa-css-prefix}.#{$fa-css-prefix}-glass:before { content: unquote("\"#{ $fa-var-martini-glass-empty }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o:before { content: unquote("\"#{ $fa-var-envelope }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-star-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-star-o:before { content: unquote("\"#{ $fa-var-star }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-remove:before { content: unquote("\"#{ $fa-var-xmark }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-close:before { content: unquote("\"#{ $fa-var-xmark }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-gear:before { content: unquote("\"#{ $fa-var-gear }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-trash-o:before { content: unquote("\"#{ $fa-var-trash-can }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-home:before { content: unquote("\"#{ $fa-var-house }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-o:before { content: unquote("\"#{ $fa-var-file }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-clock-o:before { content: unquote("\"#{ $fa-var-clock }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-down:before { content: unquote("\"#{ $fa-var-circle-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-up:before { content: unquote("\"#{ $fa-var-circle-up }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-play-circle-o:before { content: unquote("\"#{ $fa-var-circle-play }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-repeat:before { content: unquote("\"#{ $fa-var-arrow-rotate-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-right:before { content: unquote("\"#{ $fa-var-arrow-rotate-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-refresh:before { content: unquote("\"#{ $fa-var-arrows-rotate }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-list-alt:before { content: unquote("\"#{ $fa-var-rectangle-list }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-dedent:before { content: unquote("\"#{ $fa-var-outdent }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-video-camera:before { content: unquote("\"#{ $fa-var-video }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-picture-o:before { content: unquote("\"#{ $fa-var-image }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-photo { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-photo:before { content: unquote("\"#{ $fa-var-image }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-image { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-image:before { content: unquote("\"#{ $fa-var-image }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-map-marker:before { content: unquote("\"#{ $fa-var-location-dot }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square-o:before { content: unquote("\"#{ $fa-var-pen-to-square }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-edit { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-edit:before { content: unquote("\"#{ $fa-var-pen-to-square }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-share-square-o:before { content: unquote("\"#{ $fa-var-share-from-square }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-check-square-o:before { content: unquote("\"#{ $fa-var-square-check }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrows:before { content: unquote("\"#{ $fa-var-up-down-left-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-times-circle-o:before { content: unquote("\"#{ $fa-var-circle-xmark }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-check-circle-o:before { content: unquote("\"#{ $fa-var-circle-check }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-mail-forward:before { content: unquote("\"#{ $fa-var-share }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-expand:before { content: unquote("\"#{ $fa-var-up-right-and-down-left-from-center }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-compress:before { content: unquote("\"#{ $fa-var-down-left-and-up-right-to-center }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-eye { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-eye-slash { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-warning:before { content: unquote("\"#{ $fa-var-triangle-exclamation }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar:before { content: unquote("\"#{ $fa-var-calendar-days }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-v:before { content: unquote("\"#{ $fa-var-up-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-h:before { content: unquote("\"#{ $fa-var-left-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart:before { content: unquote("\"#{ $fa-var-chart-column }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-bar-chart-o:before { content: unquote("\"#{ $fa-var-chart-column }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-twitter-square:before { content: unquote("\"#{ $fa-var-square-twitter }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-square:before { content: unquote("\"#{ $fa-var-square-facebook }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-gears:before { content: unquote("\"#{ $fa-var-gears }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-up:before { content: unquote("\"#{ $fa-var-thumbs-up }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-thumbs-o-down:before { content: unquote("\"#{ $fa-var-thumbs-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-heart-o:before { content: unquote("\"#{ $fa-var-heart }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sign-out:before { content: unquote("\"#{ $fa-var-right-from-bracket }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin-square:before { content: unquote("\"#{ $fa-var-linkedin }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-thumb-tack:before { content: unquote("\"#{ $fa-var-thumbtack }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-external-link:before { content: unquote("\"#{ $fa-var-up-right-from-square }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sign-in:before { content: unquote("\"#{ $fa-var-right-to-bracket }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-github-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-github-square:before { content: unquote("\"#{ $fa-var-square-github }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-lemon-o:before { content: unquote("\"#{ $fa-var-lemon }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-square-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-square-o:before { content: unquote("\"#{ $fa-var-square }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bookmark-o:before { content: unquote("\"#{ $fa-var-bookmark }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-twitter { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-facebook { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-facebook:before { content: unquote("\"#{ $fa-var-facebook-f }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-f:before { content: unquote("\"#{ $fa-var-facebook-f }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-github { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-feed:before { content: unquote("\"#{ $fa-var-rss }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hdd-o:before { content: unquote("\"#{ $fa-var-hard-drive }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-right:before { content: unquote("\"#{ $fa-var-hand-point-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-left:before { content: unquote("\"#{ $fa-var-hand-point-left }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-up:before { content: unquote("\"#{ $fa-var-hand-point-up }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-o-down:before { content: unquote("\"#{ $fa-var-hand-point-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-globe:before { content: unquote("\"#{ $fa-var-earth-americas }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-tasks:before { content: unquote("\"#{ $fa-var-bars-progress }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrows-alt:before { content: unquote("\"#{ $fa-var-maximize }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-group:before { content: unquote("\"#{ $fa-var-users }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-chain:before { content: unquote("\"#{ $fa-var-link }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-cut:before { content: unquote("\"#{ $fa-var-scissors }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-files-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-files-o:before { content: unquote("\"#{ $fa-var-copy }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-floppy-o:before { content: unquote("\"#{ $fa-var-floppy-disk }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-save { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-save:before { content: unquote("\"#{ $fa-var-floppy-disk }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-navicon:before { content: unquote("\"#{ $fa-var-bars }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-reorder:before { content: unquote("\"#{ $fa-var-bars }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-magic:before { content: unquote("\"#{ $fa-var-wand-magic-sparkles }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-square:before { content: unquote("\"#{ $fa-var-square-pinterest }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-square:before { content: unquote("\"#{ $fa-var-square-google-plus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus:before { content: unquote("\"#{ $fa-var-google-plus-g }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-money:before { content: unquote("\"#{ $fa-var-money-bill-1 }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-unsorted:before { content: unquote("\"#{ $fa-var-sort }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-desc:before { content: unquote("\"#{ $fa-var-sort-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-asc:before { content: unquote("\"#{ $fa-var-sort-up }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-linkedin:before { content: unquote("\"#{ $fa-var-linkedin-in }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-rotate-left:before { content: unquote("\"#{ $fa-var-arrow-rotate-left }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-legal:before { content: unquote("\"#{ $fa-var-gavel }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-tachometer:before { content: unquote("\"#{ $fa-var-gauge-high }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-dashboard:before { content: unquote("\"#{ $fa-var-gauge-high }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-comment-o:before { content: unquote("\"#{ $fa-var-comment }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-comments-o:before { content: unquote("\"#{ $fa-var-comments }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-flash:before { content: unquote("\"#{ $fa-var-bolt }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-clipboard:before { content: unquote("\"#{ $fa-var-paste }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-lightbulb-o:before { content: unquote("\"#{ $fa-var-lightbulb }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-exchange:before { content: unquote("\"#{ $fa-var-right-left }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-download:before { content: unquote("\"#{ $fa-var-cloud-arrow-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-cloud-upload:before { content: unquote("\"#{ $fa-var-cloud-arrow-up }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bell-o:before { content: unquote("\"#{ $fa-var-bell }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-cutlery:before { content: unquote("\"#{ $fa-var-utensils }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-text-o:before { content: unquote("\"#{ $fa-var-file-lines }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-building-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-building-o:before { content: unquote("\"#{ $fa-var-building }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hospital-o:before { content: unquote("\"#{ $fa-var-hospital }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-tablet:before { content: unquote("\"#{ $fa-var-tablet-screen-button }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-mobile:before { content: unquote("\"#{ $fa-var-mobile-screen-button }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-mobile-phone:before { content: unquote("\"#{ $fa-var-mobile-screen-button }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o:before { content: unquote("\"#{ $fa-var-circle }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply:before { content: unquote("\"#{ $fa-var-reply }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-github-alt { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-folder-o:before { content: unquote("\"#{ $fa-var-folder }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-folder-open-o:before { content: unquote("\"#{ $fa-var-folder-open }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-smile-o:before { content: unquote("\"#{ $fa-var-face-smile }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-frown-o:before { content: unquote("\"#{ $fa-var-face-frown }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-meh-o:before { content: unquote("\"#{ $fa-var-face-meh }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-keyboard-o:before { content: unquote("\"#{ $fa-var-keyboard }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-flag-o:before { content: unquote("\"#{ $fa-var-flag }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-mail-reply-all:before { content: unquote("\"#{ $fa-var-reply-all }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-o:before { content: unquote("\"#{ $fa-var-star-half-stroke }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-empty:before { content: unquote("\"#{ $fa-var-star-half-stroke }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-star-half-full:before { content: unquote("\"#{ $fa-var-star-half-stroke }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-code-fork:before { content: unquote("\"#{ $fa-var-code-branch }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-chain-broken:before { content: unquote("\"#{ $fa-var-link-slash }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-unlink:before { content: unquote("\"#{ $fa-var-link-slash }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-o:before { content: unquote("\"#{ $fa-var-calendar }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-maxcdn { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-html5 { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-css3 { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-unlock-alt:before { content: unquote("\"#{ $fa-var-unlock }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-minus-square-o:before { content: unquote("\"#{ $fa-var-square-minus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-level-up:before { content: unquote("\"#{ $fa-var-turn-up }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-level-down:before { content: unquote("\"#{ $fa-var-turn-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-pencil-square:before { content: unquote("\"#{ $fa-var-square-pen }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-external-link-square:before { content: unquote("\"#{ $fa-var-square-up-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-compass { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-down:before { content: unquote("\"#{ $fa-var-square-caret-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-down:before { content: unquote("\"#{ $fa-var-square-caret-down }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-up:before { content: unquote("\"#{ $fa-var-square-caret-up }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-up:before { content: unquote("\"#{ $fa-var-square-caret-up }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-right:before { content: unquote("\"#{ $fa-var-square-caret-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-right:before { content: unquote("\"#{ $fa-var-square-caret-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-eur:before { content: unquote("\"#{ $fa-var-euro-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-euro:before { content: unquote("\"#{ $fa-var-euro-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-gbp:before { content: unquote("\"#{ $fa-var-sterling-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-usd:before { content: unquote("\"#{ $fa-var-dollar-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-dollar:before { content: unquote("\"#{ $fa-var-dollar-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-inr:before { content: unquote("\"#{ $fa-var-indian-rupee-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-rupee:before { content: unquote("\"#{ $fa-var-indian-rupee-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-jpy:before { content: unquote("\"#{ $fa-var-yen-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-cny:before { content: unquote("\"#{ $fa-var-yen-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-rmb:before { content: unquote("\"#{ $fa-var-yen-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-yen:before { content: unquote("\"#{ $fa-var-yen-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-rub:before { content: unquote("\"#{ $fa-var-ruble-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-ruble:before { content: unquote("\"#{ $fa-var-ruble-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-rouble:before { content: unquote("\"#{ $fa-var-ruble-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-krw:before { content: unquote("\"#{ $fa-var-won-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-won:before { content: unquote("\"#{ $fa-var-won-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-btc { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bitcoin:before { content: unquote("\"#{ $fa-var-btc }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-text:before { content: unquote("\"#{ $fa-var-file-lines }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-asc:before { content: unquote("\"#{ $fa-var-arrow-down-a-z }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-desc:before { content: unquote("\"#{ $fa-var-arrow-down-z-a }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-asc:before { content: unquote("\"#{ $fa-var-arrow-down-short-wide }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-desc:before { content: unquote("\"#{ $fa-var-arrow-down-wide-short }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-asc:before { content: unquote("\"#{ $fa-var-arrow-down-1-9 }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-desc:before { content: unquote("\"#{ $fa-var-arrow-down-9-1 }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square:before { content: unquote("\"#{ $fa-var-square-youtube }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-youtube { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-xing { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-xing-square:before { content: unquote("\"#{ $fa-var-square-xing }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-play:before { content: unquote("\"#{ $fa-var-youtube }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-dropbox { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-stack-overflow { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-instagram { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-flickr { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-adn { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bitbucket-square:before { content: unquote("\"#{ $fa-var-bitbucket }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-tumblr-square:before { content: unquote("\"#{ $fa-var-square-tumblr }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-down:before { content: unquote("\"#{ $fa-var-down-long }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-up:before { content: unquote("\"#{ $fa-var-up-long }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-left:before { content: unquote("\"#{ $fa-var-left-long }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-long-arrow-right:before { content: unquote("\"#{ $fa-var-right-long }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-apple { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-windows { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-android { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-linux { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-dribbble { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-skype { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-foursquare { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-trello { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-gratipay { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-gittip { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-gittip:before { content: unquote("\"#{ $fa-var-gratipay }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-sun-o:before { content: unquote("\"#{ $fa-var-sun }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-moon-o:before { content: unquote("\"#{ $fa-var-moon }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-vk { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-weibo { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-renren { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-pagelines { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-stack-exchange { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-right:before { content: unquote("\"#{ $fa-var-circle-right }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-arrow-circle-o-left:before { content: unquote("\"#{ $fa-var-circle-left }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-caret-square-o-left:before { content: unquote("\"#{ $fa-var-square-caret-left }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-toggle-left:before { content: unquote("\"#{ $fa-var-square-caret-left }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-dot-circle-o:before { content: unquote("\"#{ $fa-var-circle-dot }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo-square:before { content: unquote("\"#{ $fa-var-square-vimeo }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-try:before { content: unquote("\"#{ $fa-var-turkish-lira-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-turkish-lira:before { content: unquote("\"#{ $fa-var-turkish-lira-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-plus-square-o:before { content: unquote("\"#{ $fa-var-square-plus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-slack { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wordpress { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-openid { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-institution:before { content: unquote("\"#{ $fa-var-building-columns }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-bank:before { content: unquote("\"#{ $fa-var-building-columns }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-mortar-board:before { content: unquote("\"#{ $fa-var-graduation-cap }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-yahoo { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-google { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-reddit { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-square:before { content: unquote("\"#{ $fa-var-square-reddit }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon-circle { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-stumbleupon { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-delicious { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-digg { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-pp { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper-alt { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-drupal { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-joomla { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-behance { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-behance-square:before { content: unquote("\"#{ $fa-var-square-behance }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-steam { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-steam-square:before { content: unquote("\"#{ $fa-var-square-steam }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-automobile:before { content: unquote("\"#{ $fa-var-car }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-cab:before { content: unquote("\"#{ $fa-var-taxi }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-spotify { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-deviantart { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-soundcloud { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-pdf-o:before { content: unquote("\"#{ $fa-var-file-pdf }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-word-o:before { content: unquote("\"#{ $fa-var-file-word }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-excel-o:before { content: unquote("\"#{ $fa-var-file-excel }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-powerpoint-o:before { content: unquote("\"#{ $fa-var-file-powerpoint }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-image-o:before { content: unquote("\"#{ $fa-var-file-image }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-photo-o:before { content: unquote("\"#{ $fa-var-file-image }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-picture-o:before { content: unquote("\"#{ $fa-var-file-image }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-archive-o:before { content: unquote("\"#{ $fa-var-file-zipper }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-zip-o:before { content: unquote("\"#{ $fa-var-file-zipper }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-audio-o:before { content: unquote("\"#{ $fa-var-file-audio }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-sound-o:before { content: unquote("\"#{ $fa-var-file-audio }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-video-o:before { content: unquote("\"#{ $fa-var-file-video }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-movie-o:before { content: unquote("\"#{ $fa-var-file-video }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-file-code-o:before { content: unquote("\"#{ $fa-var-file-code }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-vine { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-codepen { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-jsfiddle { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-life-bouy:before { content: unquote("\"#{ $fa-var-life-ring }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-life-buoy:before { content: unquote("\"#{ $fa-var-life-ring }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-life-saver:before { content: unquote("\"#{ $fa-var-life-ring }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-support:before { content: unquote("\"#{ $fa-var-life-ring }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-circle-o-notch:before { content: unquote("\"#{ $fa-var-circle-notch }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-rebel { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-ra { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-ra:before { content: unquote("\"#{ $fa-var-rebel }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-resistance { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-resistance:before { content: unquote("\"#{ $fa-var-rebel }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-empire { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-ge { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-ge:before { content: unquote("\"#{ $fa-var-empire }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-git-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-git-square:before { content: unquote("\"#{ $fa-var-square-git }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-git { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hacker-news { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator-square:before { content: unquote("\"#{ $fa-var-hacker-news }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-yc-square:before { content: unquote("\"#{ $fa-var-hacker-news }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-tencent-weibo { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-qq { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-weixin { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wechat { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wechat:before { content: unquote("\"#{ $fa-var-weixin }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-send:before { content: unquote("\"#{ $fa-var-paper-plane }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-paper-plane-o:before { content: unquote("\"#{ $fa-var-paper-plane }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-send-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-send-o:before { content: unquote("\"#{ $fa-var-paper-plane }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-circle-thin:before { content: unquote("\"#{ $fa-var-circle }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-header:before { content: unquote("\"#{ $fa-var-heading }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-futbol-o:before { content: unquote("\"#{ $fa-var-futbol }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-soccer-ball-o:before { content: unquote("\"#{ $fa-var-futbol }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-slideshare { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-twitch { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-yelp { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-newspaper-o:before { content: unquote("\"#{ $fa-var-newspaper }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-paypal { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-wallet { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc-visa { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc-mastercard { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc-discover { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc-amex { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc-paypal { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc-stripe { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bell-slash-o:before { content: unquote("\"#{ $fa-var-bell-slash }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-trash:before { content: unquote("\"#{ $fa-var-trash-can }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-copyright { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-eyedropper:before { content: unquote("\"#{ $fa-var-eye-dropper }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-area-chart:before { content: unquote("\"#{ $fa-var-chart-area }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-pie-chart:before { content: unquote("\"#{ $fa-var-chart-pie }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-line-chart:before { content: unquote("\"#{ $fa-var-chart-line }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-lastfm-square:before { content: unquote("\"#{ $fa-var-square-lastfm }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-ioxhost { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-angellist { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc:before { content: unquote("\"#{ $fa-var-closed-captioning }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-ils:before { content: unquote("\"#{ $fa-var-shekel-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-shekel:before { content: unquote("\"#{ $fa-var-shekel-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sheqel:before { content: unquote("\"#{ $fa-var-shekel-sign }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-buysellads { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-connectdevelop { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-dashcube { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-forumbee { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-leanpub { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-sellsy { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-shirtsinbulk { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-simplybuilt { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-skyatlas { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-diamond { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-diamond:before { content: unquote("\"#{ $fa-var-gem }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-transgender:before { content: unquote("\"#{ $fa-var-mars-and-venus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-intersex:before { content: unquote("\"#{ $fa-var-mars-and-venus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-transgender-alt:before { content: unquote("\"#{ $fa-var-transgender }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-facebook-official:before { content: unquote("\"#{ $fa-var-facebook }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-pinterest-p { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-whatsapp { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hotel:before { content: unquote("\"#{ $fa-var-bed }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-viacoin { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-medium { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-y-combinator { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-yc { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-yc:before { content: unquote("\"#{ $fa-var-y-combinator }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-optin-monster { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-opencart { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-expeditedssl { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-battery-4:before { content: unquote("\"#{ $fa-var-battery-full }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-battery:before { content: unquote("\"#{ $fa-var-battery-full }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-battery-3:before { content: unquote("\"#{ $fa-var-battery-three-quarters }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-battery-2:before { content: unquote("\"#{ $fa-var-battery-half }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-battery-1:before { content: unquote("\"#{ $fa-var-battery-quarter }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-battery-0:before { content: unquote("\"#{ $fa-var-battery-empty }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-object-group { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-object-ungroup { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-sticky-note-o:before { content: unquote("\"#{ $fa-var-note-sticky }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc-jcb { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-cc-diners-club { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-clone { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-o:before { content: unquote("\"#{ $fa-var-hourglass }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-1:before { content: unquote("\"#{ $fa-var-hourglass-start }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-2:before { content: unquote("\"#{ $fa-var-hourglass-half }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hourglass-3:before { content: unquote("\"#{ $fa-var-hourglass-end }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-rock-o:before { content: unquote("\"#{ $fa-var-hand-back-fist }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-grab-o:before { content: unquote("\"#{ $fa-var-hand-back-fist }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-paper-o:before { content: unquote("\"#{ $fa-var-hand }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-stop-o:before { content: unquote("\"#{ $fa-var-hand }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-scissors-o:before { content: unquote("\"#{ $fa-var-hand-scissors }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-lizard-o:before { content: unquote("\"#{ $fa-var-hand-lizard }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-spock-o:before { content: unquote("\"#{ $fa-var-hand-spock }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-pointer-o:before { content: unquote("\"#{ $fa-var-hand-pointer }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-hand-peace-o:before { content: unquote("\"#{ $fa-var-hand-peace }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-registered { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-creative-commons { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-gg { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-gg-circle { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-odnoklassniki-square:before { content: unquote("\"#{ $fa-var-square-odnoklassniki }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-get-pocket { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wikipedia-w { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-safari { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-chrome { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-firefox { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-opera { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-internet-explorer { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-television:before { content: unquote("\"#{ $fa-var-tv }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-contao { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-500px { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-amazon { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-plus-o:before { content: unquote("\"#{ $fa-var-calendar-plus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-minus-o:before { content: unquote("\"#{ $fa-var-calendar-minus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-times-o:before { content: unquote("\"#{ $fa-var-calendar-xmark }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-calendar-check-o:before { content: unquote("\"#{ $fa-var-calendar-check }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-map-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-map-o:before { content: unquote("\"#{ $fa-var-map }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-commenting:before { content: unquote("\"#{ $fa-var-comment-dots }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-commenting-o:before { content: unquote("\"#{ $fa-var-comment-dots }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-houzz { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-vimeo:before { content: unquote("\"#{ $fa-var-vimeo-v }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-black-tie { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-fonticons { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-reddit-alien { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-edge { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-credit-card-alt:before { content: unquote("\"#{ $fa-var-credit-card }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-codiepie { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-modx { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-fort-awesome { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-usb { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-product-hunt { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-mixcloud { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-scribd { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-pause-circle-o:before { content: unquote("\"#{ $fa-var-circle-pause }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-stop-circle-o:before { content: unquote("\"#{ $fa-var-circle-stop }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-bluetooth-b { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-gitlab { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wpbeginner { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wpforms { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-envira { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wheelchair-alt:before { content: unquote("\"#{ $fa-var-accessible-icon }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-question-circle-o:before { content: unquote("\"#{ $fa-var-circle-question }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-volume-control-phone:before { content: unquote("\"#{ $fa-var-phone-volume }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-asl-interpreting:before { content: unquote("\"#{ $fa-var-hands-asl-interpreting }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-deafness:before { content: unquote("\"#{ $fa-var-ear-deaf }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-hard-of-hearing:before { content: unquote("\"#{ $fa-var-ear-deaf }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-glide { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-glide-g { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-signing:before { content: unquote("\"#{ $fa-var-hands }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-viadeo-square:before { content: unquote("\"#{ $fa-var-square-viadeo }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-ghost:before { content: unquote("\"#{ $fa-var-snapchat }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-snapchat-square:before { content: unquote("\"#{ $fa-var-square-snapchat }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-pied-piper { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-first-order { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-yoast { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-themeisle { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-official:before { content: unquote("\"#{ $fa-var-google-plus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-google-plus-circle:before { content: unquote("\"#{ $fa-var-google-plus }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-font-awesome { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-fa { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-fa:before { content: unquote("\"#{ $fa-var-font-awesome }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-handshake-o:before { content: unquote("\"#{ $fa-var-handshake }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-open-o:before { content: unquote("\"#{ $fa-var-envelope-open }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-linode { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-address-book-o:before { content: unquote("\"#{ $fa-var-address-book }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-vcard:before { content: unquote("\"#{ $fa-var-address-card }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-address-card-o:before { content: unquote("\"#{ $fa-var-address-card }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-vcard-o:before { content: unquote("\"#{ $fa-var-address-card }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-user-circle-o:before { content: unquote("\"#{ $fa-var-circle-user }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-user-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-user-o:before { content: unquote("\"#{ $fa-var-user }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-id-badge { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license:before { content: unquote("\"#{ $fa-var-id-card }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-id-card-o:before { content: unquote("\"#{ $fa-var-id-card }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-drivers-license-o:before { content: unquote("\"#{ $fa-var-id-card }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-quora { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-free-code-camp { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-telegram { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-4:before { content: unquote("\"#{ $fa-var-temperature-full }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer:before { content: unquote("\"#{ $fa-var-temperature-full }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-3:before { content: unquote("\"#{ $fa-var-temperature-three-quarters }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-2:before { content: unquote("\"#{ $fa-var-temperature-half }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-1:before { content: unquote("\"#{ $fa-var-temperature-quarter }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-thermometer-0:before { content: unquote("\"#{ $fa-var-temperature-empty }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-bathtub:before { content: unquote("\"#{ $fa-var-bath }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-s15:before { content: unquote("\"#{ $fa-var-bath }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-window-maximize { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-window-restore { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle:before { content: unquote("\"#{ $fa-var-rectangle-xmark }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-window-close-o:before { content: unquote("\"#{ $fa-var-rectangle-xmark }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-times-rectangle-o:before { content: unquote("\"#{ $fa-var-rectangle-xmark }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-bandcamp { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-grav { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-etsy { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-imdb { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-ravelry { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-eercast { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-eercast:before { content: unquote("\"#{ $fa-var-sellcast }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o { font-family: 'Font Awesome 6 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-snowflake-o:before { content: unquote("\"#{ $fa-var-snowflake }\""); } .#{$fa-css-prefix}.#{$fa-css-prefix}-superpowers { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-wpexplorer { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-meetup { font-family: 'Font Awesome 6 Brands'; font-weight: 400; } boost/scss/fontawesome/_fixed-width.scss 0000604 00000000172 15062070724 0014443 0 ustar 00 // fixed-width icons // ------------------------- .#{$fa-css-prefix}-fw { text-align: center; width: $fa-fw-width; } boost/scss/fontawesome/_core.scss 0000604 00000001550 15062070724 0013160 0 ustar 00 // base icon class definition // ------------------------- .#{$fa-css-prefix} { font-family: var(--#{$fa-css-prefix}-style-family, '#{$fa-style-family}'); font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style}); } .#{$fa-css-prefix}, .#{$fa-css-prefix}-classic, .#{$fa-css-prefix}-sharp, .fas, .#{$fa-css-prefix}-solid, .far, .#{$fa-css-prefix}-regular, .fab, .#{$fa-css-prefix}-brands { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: var(--#{$fa-css-prefix}-display, #{$fa-display}); font-style: normal; font-variant: normal; line-height: 1; text-rendering: auto; } .fas, .#{$fa-css-prefix}-classic, .#{$fa-css-prefix}-solid, .far, .#{$fa-css-prefix}-regular { font-family: 'Font Awesome 6 Free'; } .fab, .#{$fa-css-prefix}-brands { font-family: 'Font Awesome 6 Brands'; } %fa-icon { @include fa-icon; } boost/scss/fontawesome/_animated.scss 0000604 00000014564 15062070724 0014023 0 ustar 00 // animating icons // -------------------------- .#{$fa-css-prefix}-beat { animation-name: #{$fa-css-prefix}-beat; animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s); animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal); animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s); animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite); animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out); } .#{$fa-css-prefix}-bounce { animation-name: #{$fa-css-prefix}-bounce; animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s); animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal); animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s); animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite); animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(0.280, 0.840, 0.420, 1)); } .#{$fa-css-prefix}-fade { animation-name: #{$fa-css-prefix}-fade; animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s); animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal); animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s); animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite); animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1)); } .#{$fa-css-prefix}-beat-fade { animation-name: #{$fa-css-prefix}-beat-fade; animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s); animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal); animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s); animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite); animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, cubic-bezier(.4,0,.6,1)); } .#{$fa-css-prefix}-flip { animation-name: #{$fa-css-prefix}-flip; animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s); animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal); animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s); animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite); animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, ease-in-out); } .#{$fa-css-prefix}-shake { animation-name: #{$fa-css-prefix}-shake; animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s); animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal); animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s); animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite); animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear); } .#{$fa-css-prefix}-spin { animation-name: #{$fa-css-prefix}-spin; animation-delay: var(--#{$fa-css-prefix}-animation-delay, 0s); animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal); animation-duration: var(--#{$fa-css-prefix}-animation-duration, 2s); animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite); animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, linear); } .#{$fa-css-prefix}-spin-reverse { --#{$fa-css-prefix}-animation-direction: reverse; } .#{$fa-css-prefix}-pulse, .#{$fa-css-prefix}-spin-pulse { animation-name: #{$fa-css-prefix}-spin; animation-direction: var(--#{$fa-css-prefix}-animation-direction, normal); animation-duration: var(--#{$fa-css-prefix}-animation-duration, 1s); animation-iteration-count: var(--#{$fa-css-prefix}-animation-iteration-count, infinite); animation-timing-function: var(--#{$fa-css-prefix}-animation-timing, steps(8)); } // if agent or operating system prefers reduced motion, disable animations // see: https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/ // see: https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion @media (prefers-reduced-motion: reduce) { .#{$fa-css-prefix}-beat, .#{$fa-css-prefix}-bounce, .#{$fa-css-prefix}-fade, .#{$fa-css-prefix}-beat-fade, .#{$fa-css-prefix}-flip, .#{$fa-css-prefix}-pulse, .#{$fa-css-prefix}-shake, .#{$fa-css-prefix}-spin, .#{$fa-css-prefix}-spin-pulse { animation-delay: -1ms; animation-duration: 1ms; animation-iteration-count: 1; transition-delay: 0s; transition-duration: 0s; } } @keyframes #{$fa-css-prefix}-beat { 0%, 90% { transform: scale(1); } 45% { transform: scale(var(--#{$fa-css-prefix}-beat-scale, 1.25)); } } @keyframes #{$fa-css-prefix}-bounce { 0% { transform: scale(1,1) translateY(0); } 10% { transform: scale(var(--#{$fa-css-prefix}-bounce-start-scale-x, 1.1),var(--#{$fa-css-prefix}-bounce-start-scale-y, 0.9)) translateY(0); } 30% { transform: scale(var(--#{$fa-css-prefix}-bounce-jump-scale-x, 0.9),var(--#{$fa-css-prefix}-bounce-jump-scale-y, 1.1)) translateY(var(--#{$fa-css-prefix}-bounce-height, -0.5em)); } 50% { transform: scale(var(--#{$fa-css-prefix}-bounce-land-scale-x, 1.05),var(--#{$fa-css-prefix}-bounce-land-scale-y, 0.95)) translateY(0); } 57% { transform: scale(1,1) translateY(var(--#{$fa-css-prefix}-bounce-rebound, -0.125em)); } 64% { transform: scale(1,1) translateY(0); } 100% { transform: scale(1,1) translateY(0); } } @keyframes #{$fa-css-prefix}-fade { 50% { opacity: var(--#{$fa-css-prefix}-fade-opacity, 0.4); } } @keyframes #{$fa-css-prefix}-beat-fade { 0%, 100% { opacity: var(--#{$fa-css-prefix}-beat-fade-opacity, 0.4); transform: scale(1); } 50% { opacity: 1; transform: scale(var(--#{$fa-css-prefix}-beat-fade-scale, 1.125)); } } @keyframes #{$fa-css-prefix}-flip { 50% { transform: rotate3d(var(--#{$fa-css-prefix}-flip-x, 0), var(--#{$fa-css-prefix}-flip-y, 1), var(--#{$fa-css-prefix}-flip-z, 0), var(--#{$fa-css-prefix}-flip-angle, -180deg)); } } @keyframes #{$fa-css-prefix}-shake { 0% { transform: rotate(-15deg); } 4% { transform: rotate(15deg); } 8%, 24% { transform: rotate(-18deg); } 12%, 28% { transform: rotate(18deg); } 16% { transform: rotate(-22deg); } 20% { transform: rotate(22deg); } 32% { transform: rotate(-12deg); } 36% { transform: rotate(12deg); } 40%, 100% { transform: rotate(0deg); } } @keyframes #{$fa-css-prefix}-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } boost/scss/fontawesome/_functions.scss 0000604 00000004103 15062070724 0014235 0 ustar 00 // functions // -------------------------- // fa-content: convenience function used to set content property @function fa-content($fa-var) { @return unquote("\"#{ $fa-var }\""); } // fa-divide: Originally obtained from the Bootstrap https://github.com/twbs/bootstrap // // Licensed under: The MIT License (MIT) // // Copyright (c) 2011-2021 Twitter, Inc. // Copyright (c) 2011-2021 The Bootstrap Authors // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. @function fa-divide($dividend, $divisor, $precision: 10) { $sign: if($dividend > 0 and $divisor > 0, 1, -1); $dividend: abs($dividend); $divisor: abs($divisor); $quotient: 0; $remainder: $dividend; @if $dividend == 0 { @return 0; } @if $divisor == 0 { @error "Cannot divide by 0"; } @if $divisor == 1 { @return $dividend; } @while $remainder >= $divisor { $quotient: $quotient + 1; $remainder: $remainder - $divisor; } @if $remainder > 0 and $precision > 0 { $remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * .1; } @return ($quotient + $remainder) * $sign; } boost/scss/fontawesome/_rotated-flipped.scss 0000604 00000001143 15062070724 0015311 0 ustar 00 // rotating + flipping icons // ------------------------- .#{$fa-css-prefix}-rotate-90 { transform: rotate(90deg); } .#{$fa-css-prefix}-rotate-180 { transform: rotate(180deg); } .#{$fa-css-prefix}-rotate-270 { transform: rotate(270deg); } .#{$fa-css-prefix}-flip-horizontal { transform: scale(-1, 1); } .#{$fa-css-prefix}-flip-vertical { transform: scale(1, -1); } .#{$fa-css-prefix}-flip-both, .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { transform: scale(-1, -1); } .#{$fa-css-prefix}-rotate-by { transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, none)); } boost/scss/fontawesome/_icons.scss 0000604 00000000477 15062070724 0013352 0 ustar 00 // specific icon class definition // ------------------------- /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ @each $name, $icon in $fa-icons { .#{$fa-css-prefix}-#{$name}::before { content: unquote("\"#{ $icon }\""); } } boost/scss/fontawesome/_sizing.scss 0000604 00000000464 15062070724 0013536 0 ustar 00 // sizing icons // ------------------------- // literal magnification scale @for $i from 1 through 10 { .#{$fa-css-prefix}-#{$i}x { font-size: $i * 1em; } } // step-based scale (with alignment) @each $size, $value in $fa-sizes { .#{$fa-css-prefix}-#{$size} { @include fa-size($value); } } boost/scss/fontawesome/brands.scss 0000604 00000001541 15062070724 0013342 0 ustar 00 /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ @import 'functions'; @import 'variables'; :root, :host { --#{$fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands'; --#{$fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } @font-face { font-family: 'Font Awesome 6 Brands'; font-style: normal; font-weight: 400; font-display: $fa-font-display; src: url('[[font:core|fa-brands-400.woff2]]') format('woff2'), url('[[font:core|fa-brands-400.ttf]]') format('truetype'); } .fab, .#{$fa-css-prefix}-brands { font-weight: 400; } @each $name, $icon in $fa-brand-icons { .#{$fa-css-prefix}-#{$name}:before { content: unquote("\"#{ $icon }\""); } } boost/scss/fontawesome/regular.scss 0000604 00000001354 15062070724 0013534 0 ustar 00 /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ @import 'functions'; @import 'variables'; :root, :host { --#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }'; --#{$fa-css-prefix}-font-regular: normal 400 1em/1 '#{ $fa-style-family }'; } @font-face { font-family: 'Font Awesome 6 Free'; font-style: normal; font-weight: 400; font-display: $fa-font-display; src: url('[[font:core|fa-regular-400.woff2]]') format('woff2'), url('[[font:core|fa-regular-400.ttf]]') format('truetype'); } .far, .#{$fa-css-prefix}-regular { font-weight: 400; } boost/scss/preset.scss 0000604 00000000045 15062070724 0011042 0 ustar 00 // This file is intentionally empty. boost/scss/moodle/core.scss 0000604 00000171537 15062070724 0011766 0 ustar 00 /* core.less */ $bg-inverse-link-color: $white !default; $dropzone-border: $gray-900 !default; $collapse-list-item-padding-y: 0.5rem !default; $collapse-list-item-padding-x: 1rem !default; $collapse-list-item-hover-bg: theme-color-level('info', -11) !default; $collapse-list-item-hover-border: theme-color-level('info', -9) !default; $thin-scroll-bg-thumb: $gray-600 !default; $thin-scroll-bg-hover: $gray-700 !default; $font-size-xs: ($font-size-base * .75) !default; #region-main { overflow-y: visible; background-color: $body-bg; } @include media-breakpoint-up(sm) { .context-header-settings-menu, .region-main-settings-menu { float: right; width: auto; max-width: 4em; height: 2em; display: block; margin-top: 4px; } } @include media-breakpoint-down(sm) { .context-header-settings-menu, .region-main-settings-menu { display: flex; justify-content: flex-end; } } @mixin optional-animation($animation) { animation: $animation; @media (prefers-reduced-motion: reduce) { animation: none; } body.behat-site & { animation: none; } } .context-header-settings-menu .dropdown-toggle > .icon, #region-main-settings-menu .dropdown-toggle > .icon { height: 24px; font-size: 24px; width: auto; } /** Prevent user notifications overlapping with region main settings menu */ #user-notifications { display: block; overflow: hidden; } /** Page layout CSS starts **/ .layout-option-noheader #page-header, .layout-option-nonavbar #page-navbar, .layout-option-nofooter #page-footer, .layout-option-nocourseheader .course-content-header, .layout-option-nocoursefooter .course-content-footer { display: none; } /** Page layout CSS ends **/ .mdl-left { text-align: left; } .mdl-right { text-align: right; } /*rtl:ignore*/ .text-ltr { direction: ltr !important; /* stylelint-disable-line declaration-no-important */ } #add, #remove, .centerpara, .mdl-align { text-align: center; } a.dimmed, a.dimmed:link, a.dimmed:visited, a.dimmed_text, a.dimmed_text:link, a.dimmed_text:visited, .dimmed_text, .dimmed_text a, .dimmed_text a:link, .dimmed_text a:visited, .usersuspended, .usersuspended a, .usersuspended a:link, .usersuspended a:visited, .dimmed_category, .dimmed_category a { color: $text-muted; } // Accessible focus styling for links, add .aalink to links with custom css classes to get // accessible focus styles. .aalink, #page-footer a:not([class]), .arrow_link, a:not([class]), .activityinstance > a { &.focus, &:focus { outline: $btn-focus-width solid transparent; color: $gray-900; background-color: lighten($primary, 50%); box-shadow: 0 -#{$btn-focus-width} lighten($primary, 50%), 0 $btn-focus-width $gray-800; } &:focus:hover { text-decoration: none; } } // Accessible focus styling for buttons like elements that do not use the .btn class. Add // .aabtn to you element if you need the same focus styles. .aabtn, .btn-link, .nav-link, .editor_atto_toolbar button, .editor_atto_toolbar .atto_toolbar_row, [role="button"], .list-group-item-action, input[type="checkbox"], input[type="radio"], input[type="file"], input[type="image"], .sr-only-focusable, a.dropdown-toggle, .moodle-dialogue-base .closebutton, button.close, .form-autocomplete-selection, [role="treeitem"]:not([aria-expanded="true"]) { &.focus, &:focus { outline: 0; box-shadow: $input-btn-focus-box-shadow; } &:focus:hover { text-decoration: none; } } // Modal dialogs border should be rounded too. .modal-dialog[tabindex="0"] { &.focus, &:focus { outline: 0; .modal-content { outline: 0; box-shadow: $input-btn-focus-box-shadow; // Modal dialogs border should be rounded too. @include border-radius($modal-content-border-radius); } } } // We don't want to highlight the whole li when it's expanded. Only the first child is highlighted. [role="treeitem"][aria-expanded="true"] { outline: 0; &.focus, &:focus { > *:first-child { outline: 0; box-shadow: $input-btn-focus-box-shadow; } } &:focus:hover { text-decoration: none; } } // Accessible focus styling for autocomplete elements. .form-autocomplete-suggestions li[aria-selected=true] { outline: 0; box-shadow: $input-btn-focus-box-shadow; } // Safari does not allow custom styling of checkboxes. .safari { input[type="checkbox"], input[type="radio"] { &.focus, &:focus { outline: auto; } } } .unlist, .unlist li, .inline-list, .inline-list li, .block .list, .block .list li, .section li.movehere, .tabtree li { list-style: none; margin: 0; padding: 0; } .section li.movehere a { display: block; width: 100%; height: 2rem; border: 2px dashed $gray-800; } .editing .course-content .hidden.sectionname { visibility: hidden; display: initial; } .inline, .inline-list li { display: inline; } .notifytiny { font-size: $font-size-xs; } .notifytiny li, .notifytiny td { font-size: 100%; } .red, .notifyproblem { color: map-get($theme-colors, 'warning'); } .green, .notifysuccess { color: map-get($theme-colors, 'success'); } .highlight { color: map-get($theme-colors, 'info'); } .bg-primary-light { background-color: $primary-light-background; } .fitem.advanced .text-info { font-weight: bold; } .reportlink { text-align: right; } a.autolink { @extend .aalink; &.glossary:hover { cursor: help; } } /* Block which is hidden if javascript enabled, prevents fickering visible when JS from footer used! */ .collapsibleregioncaption { white-space: nowrap; min-height: $line-height-base * $font-size-base; } .pagelayout-mydashboard.jsenabled .collapsibleregioncaption { cursor: pointer; } .pagelayout-mydashboard #region-main { border: 0; padding: 0; background-color: transparent; margin-top: -1px; } @include media-breakpoint-down(sm) { .pagelayout-mydashboard, .pagelayout-login { #region-main-box { padding-left: 0; padding-right: 0; } } } .collapsibleregioncaption img { vertical-align: middle; } .jsenabled .hiddenifjs { display: none; } .visibleifjs { display: none; } .jsenabled .visibleifjs { display: inline; } .jsenabled .collapsibleregion { overflow: hidden; box-sizing: content-box; } .jsenabled .collapsed .collapsibleregioninner { visibility: hidden; } .collapsible-actions { display: none; text-align: right; } .jsenabled .collapsible-actions { display: block; } .yui-overlay .yui-widget-bd { background-color: $yui-overlay-bg; border: 1px solid $yui-overlay-border-color; border-top-color: $yui-overlay-border-top-color; color: $yui-overlay-color; left: 0; padding: 2px 5px; position: relative; top: 0; z-index: 1; } .clearer { background: transparent; border-width: 0; clear: both; display: block; height: 1px; margin: 0; padding: 0; } .bold, .warning, .errorbox .title, .pagingbar .title, .pagingbar .thispage { font-weight: bold; } img.resize { height: 1em; width: 1em; } .block img.resize { height: 0.9em; width: 0.8em; } /* Icon styles */ img.activityicon { height: 24px; width: 24px; vertical-align: middle; } .headermain { font-weight: bold; } #maincontent { display: block; height: 1px; overflow: hidden; } img.uihint { cursor: help; } #addmembersform table { margin-left: auto; margin-right: auto; } table.flexible .emptyrow { display: none; } form.popupform, form.popupform div { display: inline; } .arrow_button input { overflow: hidden; } .no-overflow { overflow: auto; } // Position required for table sizing inside a flex container. .no-overflow > .generaltable { margin-bottom: 0; } .no-overflow, .table-responsive { .generaltable { .sr-only, .accesshide { position: relative; display: block; } } } // Accessibility features // Accessibility: text 'seen' by screen readers but not visual users. .accesshide { @include sr-only(); } span.hide, div.hide, .hidden { display: none; } // Accessibility: Skip block link, for keyboard-only users. a.skip-block, a.skip { position: absolute; top: -1000em; font-size: 0.85em; text-decoration: none; } a.skip-block:focus, a.skip-block:active, a.skip:focus, a.skip:active { position: static; display: block; } .skip-block-to { display: block; height: 1px; overflow: hidden; } // Blogs .addbloglink { text-align: center; } .blog_entry .audience { text-align: right; padding-right: 4px; } .blog_entry .tags { margin-top: 15px; } .blog_entry .content { margin-left: 43px; } // Group #doc-contents h1 { margin: 1em 0 0 0; } #doc-contents ul { margin: 0; padding: 0; width: 90%; } #doc-contents ul li { list-style-type: none; } .groupmanagementtable td { vertical-align: top; } .groupmanagementtable #existingcell, .groupmanagementtable #potentialcell { width: 42%; } .groupmanagementtable #buttonscell { width: 16%; } .groupmanagementtable #buttonscell p.arrow_button input { width: auto; min-width: 80%; margin: 0 auto; display: block; } .groupmanagementtable #removeselect_wrapper, .groupmanagementtable #addselect_wrapper { width: 100%; } .groupmanagementtable #removeselect_wrapper label, .groupmanagementtable #addselect_wrapper label { font-weight: normal; } #group-usersummary { width: 14em; } .groupselector { margin-top: 3px; margin-bottom: 3px; display: inline-block; } .groupselector label { display: inline-block; } // Notes .notepost { margin-bottom: 1em; } .notepost .userpicture { float: left; margin-right: 5px; } .notepost .content, .notepost .footer { clear: both; } .notesgroup { margin-left: 20px; } // My Moodle .path-my .coursebox { margin: $spacer 0; padding: 0; .overview { margin: 15px 30px 10px 30px; } } .path-my .coursebox .info { float: none; margin: 0; } // Modules .mod_introbox { padding: 10px; } table.mod_index { width: 100%; } // Comments .comment-ctrl { font-size: 12px; display: none; margin: 0; padding: 0; } .comment-ctrl h5 { margin: 0; padding: 5px; } .comment-area { max-width: 400px; padding: 5px; } .comment-area textarea { width: 100%; overflow: auto; &.fullwidth { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } } .comment-area .fd { text-align: right; } .comment-meta span { color: $comment-meta-color; } .comment-link img { vertical-align: text-bottom; } .comment-list { font-size: 11px; overflow: auto; list-style: none; padding: 0; margin: 0; } .comment-list li { margin: 2px; list-style: none; margin-bottom: 5px; clear: both; padding: .3em; position: relative; } .comment-list li.first { display: none; } .comment-paging { text-align: center; } .comment-paging .pageno { padding: 2px; } .comment-paging .curpage { border: 1px solid $comment-paging-current-border-color; } .comment-message .picture { float: left; margin-right: 0.25rem; } .comment-message .text { margin: 0; padding: 0; } .comment-message .text p { padding: 0; margin: 0 18px 0 0; } .comment-delete { position: absolute; top: 0; right: 0; margin: .3em; } .comment-report-selectall { display: none; } .comment-link { display: none; } .jsenabled .comment-link { display: block; } .jsenabled .showcommentsnonjs { display: none; } .jsenabled .comment-report-selectall { display: inline; } /** * Completion progress report */ .completion-expired { color: map-get($theme-colors, 'warning'); } .completion-expected { font-size: $font-size-xs; } .completion-sortchoice, .completion-identifyfield { font-size: $font-size-xs; vertical-align: bottom; } .completion-progresscell { text-align: right; } .completion-expired .completion-expected { font-weight: bold; } /** * Tags */ img.user-image { height: 100px; width: 100px; } #tag-search-box { text-align: center; margin: 10px auto; } .path-tag .tag-index-items .tagarea { border: 1px solid $tags-tagarea-border-color; border-radius: 4px; padding: 10px; margin-top: 10px; } .path-tag .tag-index-items .tagarea h3 { display: block; padding: 3px 0 10px 0; margin: 0; font-size: 1.1em; font-weight: bold; line-height: 20px; color: $tags-tagarea-title-color; text-shadow: 0 1px 0 $tags-tagarea-title-text-shadow-color; text-transform: uppercase; word-wrap: break-word; border-bottom: solid 1px $tags-tagarea-title-border-color; margin-bottom: 10px; } .path-tag .tagarea .controls, .path-tag .tagarea .taggeditems { @include clearfix(); } .path-tag .tagarea .controls, .path-tag .tag-backtoallitems { text-align: center; } .path-tag .tagarea .controls .gotopage.nextpage { float: right; } .path-tag .tagarea .controls .gotopage.prevpage { float: left; } .path-tag .tagarea .controls .exclusivemode { display: inline-block; } .path-tag .tagarea .controls.controls-bottom { margin-top: 5px; } .path-tag .tagarea .controls .gotopage.nextpage::after { padding-right: 5px; padding-left: 5px; content: "»"; } .path-tag .tagarea .controls .gotopage.prevpage::before { padding-right: 5px; padding-left: 5px; content: "«"; } span.flagged-tag, tr.flagged-tag, span.flagged-tag a, tr.flagged-tag a { color: map-get($theme-colors, 'warning'); } .tag-management-table td, .tag-management-table th { vertical-align: middle; padding: 4px; } .tag-management-table .inplaceeditable.inplaceeditingon input { width: 150px; } .path-admin-tag .addstandardtags { float: right; img { margin: 0 5px; } } .path-tag .tag-relatedtags { padding-top: 10px; } .path-tag .tag-management-box { text-align: right; } .path-tag .tag-index-toc { padding: 10px; text-align: center; } .path-tag .tag-index-toc li, .path-tag .tag-management-box li { margin-left: 5px; margin-right: 5px; } .path-tag .tag-management-box li a.edittag { background-image: url([[pix:moodle|i/settings]]); } .path-tag .tag-management-box li a.flagasinappropriate { background-image: url([[pix:moodle|i/flagged]]); } .path-tag .tag-management-box li a.removefrommyinterests { background-image: url([[pix:moodle|t/delete]]); } .path-tag .tag-management-box li a.addtomyinterests { background-image: url([[pix:moodle|t/add]]); } .path-tag .tag-management-box li a { background-repeat: no-repeat; background-position: left; padding-left: 17px; } .tag_feed.media-list .media .itemimage { float: left; } .tag_feed.media-list .media .itemimage img { height: 35px; width: 35px; } .tag_feed.media-list .media .media-body { padding-right: 10px; padding-left: 10px; } .tag_feed .media .muted a { color: $text-muted; } .tag_cloud { text-align: center; } .tag_cloud .inline-list li { padding: 0 0.2em; } .tag_cloud .tag_overflow { margin-top: 1em; font-style: italic; } .tag_cloud .s20 { font-size: 2.7em; } .tag_cloud .s19 { font-size: 2.6em; } .tag_cloud .s18 { font-size: 2.5em; } .tag_cloud .s17 { font-size: 2.4em; } .tag_cloud .s16 { font-size: 2.3em; } .tag_cloud .s15 { font-size: 2.2em; } .tag_cloud .s14 { font-size: 2.1em; } .tag_cloud .s13 { font-size: 2em; } .tag_cloud .s12 { font-size: 1.9em; } .tag_cloud .s11 { font-size: 1.8em; } .tag_cloud .s10 { font-size: 1.7em; } .tag_cloud .s9 { font-size: 1.6em; } .tag_cloud .s8 { font-size: 1.5em; } .tag_cloud .s7 { font-size: 1.4em; } .tag_cloud .s6 { font-size: 1.3em; } .tag_cloud .s5 { font-size: 1.2em; } .tag_cloud .s4 { font-size: 1.1em; } .tag_cloud .s3 { font-size: 1em; } .tag_cloud .s2 { font-size: 0.9em; } .tag_cloud .s1 { font-size: 0.8em; } .tag_cloud .s0 { font-size: 0.7em; } .tag_list ul { display: inline; } .tag_list.hideoverlimit .overlimit { display: none; } .tag_list .tagmorelink { display: none; } .tag_list.hideoverlimit .tagmorelink { display: inline; } .tag_list.hideoverlimit .taglesslink { display: none; } /** * Web Service */ #webservice-doc-generator td { text-align: left; border: 0 solid $webservice-doc-td-border-color; } /** * Enrol */ .userenrolment { width: 100%; border-collapse: collapse; } .userenrolment tr { vertical-align: top; } .userenrolment td { padding: 0; height: 41px; } .userenrolment .subfield { margin-right: 5px; } .userenrolment .col_userdetails .subfield { margin-left: 40px; } .userenrolment .col_userdetails .subfield_picture { float: left; margin-left: 0; } .userenrolment .col_lastseen { width: 150px; } .userenrolment .col_role { width: 262px; } .userenrolment .col_role .roles, .userenrolment .col_group .groups { margin-right: 30px; } .userenrolment .col_role .role { float: left; padding: 0 3px 3px; margin: 0 3px 3px; white-space: nowrap; } .userenrolment .col_group .group { float: left; padding: 3px; margin: 3px; white-space: nowrap; } .userenrolment .col_role .role a, .userenrolment .col_group .group a { margin-left: 3px; cursor: pointer; } .userenrolment .col_role .addrole, .userenrolment .col_group .addgroup { float: right; padding: 3px; margin: 3px; > a:hover { border-bottom: 1px solid $userenrolment-link-hover-border-color; } } .userenrolment .col_role .addrole img, .userenrolment .col_group .addgroup img { vertical-align: baseline; } .userenrolment .hasAllRoles .col_role .addrole { display: none; } .userenrolment .col_enrol .enrolment { float: left; padding: 0 3px 3px; margin: 0 3px 3px; } .userenrolment .col_enrol .enrolment a { float: right; margin-left: 3px; } #page-enrol-otherusers .userenrolment .col_role { .role { float: none; margin: 3px 3px 3px 0; padding: 3px 3px 3px 0; } } .corelightbox { background-color: $corelightbox-bg; position: absolute; top: 0; left: 0; width: 100%; height: 100%; text-align: center; } .corelightbox img { position: fixed; top: 50%; left: 50%; } .mod-indent-outer { display: table; } .mod-indent { display: table-cell; } .label .mod-indent { float: left; padding-top: 20px; } .activity.label.modtype_label .mod-indent { float: none; } @include media-breakpoint-up(sm) { $mod-indent-size: 30px; /* Creates a series of .mod-indent-# rule declarations based on indent size and number of indent levels. */ @for $i from 1 through 16 { $width: ($i * $mod-indent-size); .mod-indent-#{$i} { width: $width; } } .mod-indent-huge { width: (16 * $mod-indent-size); } } /* Audio player size in 'block' mode (can only change width, height is hardcoded in JS) */ .resourcecontent .mediaplugin_mp3 object { height: 25px; width: 600px; } .resourcecontent audio.mediaplugin_html5audio { width: 600px; } /** Large resource images should avoid hidden overflow **/ .resourceimage { max-width: 100%; } /* Audio player size in 'inline' mode (can only change width, as above) */ .mediaplugin_mp3 object { height: 15px; width: 300px; } audio.mediaplugin_html5audio { width: 300px; } .core_media_preview.pagelayout-embedded #maincontent { height: 0; } .path-rating .ratingtable { width: 100%; margin-bottom: 1em; } .path-rating .ratingtable th.rating { width: 100%; } .path-rating .ratingtable td.rating, .path-rating .ratingtable td.time { white-space: nowrap; text-align: center; } /* Moodle Dialogue Settings (moodle-core-dialogue) */ .moodle-dialogue-base .moodle-dialogue-lightbox { background-color: $gray-700; } // Prevent adding backdrops to popups in popups. .pagelayout-popup { .moodle-dialogue-base { .moodle-dialogue-lightbox { background-color: transparent; } .moodle-dialogue { box-shadow: $popover-box-shadow; } } } .moodle-dialogue-base .hidden, .moodle-dialogue-base .moodle-dialogue-hidden { display: none; } .no-scrolling { overflow: hidden; } .moodle-dialogue-base .moodle-dialogue-fullscreen { left: 0; top: 0; right: 0; bottom: -50px; position: fixed; } .moodle-dialogue-base .moodle-dialogue-fullscreen .moodle-dialogue-content { overflow: auto; } .moodle-dialogue-base .moodle-dialogue-wrap { background-color: $dialogue-base-bg; border: 1px solid $dialogue-base-border-color; } // Show is a bootstrap 2 class - but we use it for modals. We don't want to enable it everywhere because they removed // it for a reason (conflicts with jquery .show()). .modal.show { display: block; } .moodle-dialogue-base .moodle-dialogue-wrap .moodle-dialogue-hd { display: flex; padding: 1rem 1rem; border-bottom: 1px solid $dialogue-base-hd-border-color; } .moodle-dialogue-base .moodle-dialogue-wrap .moodle-dialogue-hd.yui3-widget-hd { // Undo some YUI damage. min-height: 3rem; color: initial; background: initial; font-size: 1.5rem; line-height: 1.5; } .moodle-dialogue-base .moodle-dialogue-wrap .moodle-dialogue-hd h5 { font-size: 1.5rem; font-weight: $font-weight-base; margin-bottom: 0; line-height: 1.5; } .moodle-dialogue-base .moodle-dialogue-wrap .moodle-dialogue-hd .yui3-widget-buttons { /*rtl:raw: left: 0; right: auto; */ padding: 0; position: relative; margin-left: auto; } .moodle-dialogue-base .closebutton { padding: $modal-header-padding; margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto; position: relative; background-color: transparent; border: 0; background-image: none; box-shadow: none; opacity: 0.7; &:hover, &:active { opacity: 1; } &::after { content: "×"; } } .moodle-dialogue-base .moodle-dialogue .moodle-dialogue-bd { padding: 0.5rem; body { background-color: $body-bg; } } .moodle-dialogue-base .moodle-dialogue-fullscreen .moodle-dialogue-content { overflow: auto; position: absolute; top: 0; bottom: 50px; left: 0; right: 0; margin: 0; border: 0; } .moodle-dialogue-exception .moodle-exception-param label { font-weight: bold; } .moodle-dialogue-exception .param-stacktrace label { background-color: $dialogue-exception-label-bg; border: 1px solid $dialogue-exception-label-border-color; border-bottom-width: 0; } .moodle-dialogue-exception .param-stacktrace pre { border: 1px solid $dialogue-exception-pre-border-color; background-color: $dialogue-exception-pre-bg; } .moodle-dialogue-exception .param-stacktrace .stacktrace-file { color: $dialogue-exception-file-color; font-size: $font-size-sm; } .moodle-dialogue-exception .param-stacktrace .stacktrace-line { color: map-get($theme-colors, 'warning'); font-size: $font-size-sm; } .moodle-dialogue-exception .param-stacktrace .stacktrace-call { color: $dialogue-exception-call-color; font-size: 90%; border-bottom: 1px solid $dialogue-exception-call-border-color; } .moodle-dialogue-base .moodle-dialogue .moodle-dialogue-content .moodle-dialogue-ft:empty { display: none; } .moodle-dialogue-base .moodle-dialogue .moodle-dialogue-content .moodle-dialogue-ft.yui3-widget-ft { // Undo some YUI damage. background: initial; } .moodle-dialogue-confirm .confirmation-message { margin: 0.5rem 0; } .moodle-dialogue-confirm .confirmation-dialogue input { min-width: 80px; } .moodle-dialogue-exception .moodle-exception-message { margin: 1em; } .moodle-dialogue-exception .moodle-exception-param { margin-bottom: 0.5em; } .moodle-dialogue-exception .moodle-exception-param label { width: 150px; } .moodle-dialogue-exception .param-stacktrace label { display: block; margin: 0; padding: 4px 1em; } .moodle-dialogue-exception .param-stacktrace pre { display: block; height: 200px; overflow: auto; } .moodle-dialogue-exception .param-stacktrace .stacktrace-file { display: inline-block; margin: 4px 0; } .moodle-dialogue-exception .param-stacktrace .stacktrace-line { display: inline-block; width: 50px; margin: 4px 1em; } .moodle-dialogue-exception .param-stacktrace .stacktrace-call { padding-left: 25px; margin-bottom: 4px; padding-bottom: 4px; } .moodle-dialogue .moodle-dialogue-bd .content-lightbox { opacity: 0.75; width: 100%; height: 100%; top: 0; left: 0; background-color: $dialogue-lightbox-bg; text-align: center; padding: 10% 0; } /* Apply a default max-height on tooltip text */ .moodle-dialogue .tooltiptext { max-height: 300px; } .moodle-dialogue-base .moodle-dialogue.moodle-dialogue-tooltip { z-index: 3001; .moodle-dialogue-bd { overflow: auto; } } /** * Chooser Dialogues (moodle-core-chooserdialogue) * * This CSS belong to the chooser dialogue which should work both with, and * without javascript enabled */ /* Hide the dialog and it's title */ .chooserdialoguebody, .choosertitle { display: none; } .moodle-dialogue.chooserdialogue .moodle-dialogue-content .moodle-dialogue-ft { margin: 0; } .chooserdialogue .moodle-dialogue-wrap .moodle-dialogue-bd { padding: 0; background: $chooserdialogue-bg; @include border-bottom-radius(10px); } /* Center the submit buttons within the area */ .choosercontainer #chooseform .submitbuttons { padding: 0.7em 0; text-align: right; } /* Fixed for safari browser on iPhone4S with ios7@mixin */ @media (max-height: 639px) { .ios .choosercontainer #chooseform .submitbuttons { padding: 45px 0; } } .choosercontainer #chooseform .submitbuttons input { min-width: 100px; margin: 0 0.5em; } /* Various settings for the options area */ .choosercontainer #chooseform .options { position: relative; border-bottom: 1px solid $chooserdialogue-options-border-color; } /* Only set these options if we're showing the js container */ .jschooser .choosercontainer #chooseform .alloptions { overflow-x: hidden; overflow-y: auto; max-width: 240px; .option { input[type=radio] { display: inline-block; } .typename { display: inline-block; width: 55%; } } } /* Settings for option rows and option subtypes */ .choosercontainer #chooseform .moduletypetitle, .choosercontainer #chooseform .option, .choosercontainer #chooseform .nonoption { margin-bottom: 0; padding: 0 1.6em 0 1.6em; } .choosercontainer #chooseform .moduletypetitle { text-transform: uppercase; padding-top: 1.2em; padding-bottom: 0.4em; margin-bottom: 0.5rem; font-size: 100%; } .choosercontainer #chooseform .option .typename, .choosercontainer #chooseform .nonoption .typename { padding: 0 0 0 0.5em; } .choosercontainer #chooseform .modicon + .typename { padding-left: 0; } .choosercontainer #chooseform .option input[type=radio], .choosercontainer #chooseform .option span.typename { vertical-align: middle; } .choosercontainer #chooseform .option label { display: block; margin: 0; padding: ($spacer * 0.5) 0; border-bottom: 1px solid $choosercontainer-label-border-color; } .choosercontainer #chooseform .option .icon { margin: 0; padding: 0 $spacer; } .choosercontainer #chooseform .nonoption { padding-left: 2.7em; padding-top: 0.3em; padding-bottom: 0.1em; } .choosercontainer #chooseform .subtype { margin-bottom: 0; padding: 0 1.6em 0 3.2em; } .choosercontainer #chooseform .subtype .typename { margin: 0 0 0 0.2em; } /* The instruction/help area */ .jschooser .choosercontainer #chooseform .instruction, .jschooser .choosercontainer #chooseform .typesummary { display: none; position: absolute; top: 0; right: 0; bottom: 0; left: 240px; margin: 0; padding: 1.6em; background-color: $choosercontainer-instruction-bg; overflow-x: hidden; overflow-y: auto; line-height: 2em; } /* Selected option settings */ .jschooser .choosercontainer #chooseform .instruction, .choosercontainer #chooseform .selected .typesummary { display: block; } .choosercontainer #chooseform .selected { background-color: $choosercontainer-chooseform-selected-bg; margin-top: -1px; padding-top: 1px; } @include media-breakpoint-down(xs) { .jsenabled .choosercontainer #chooseform .alloptions { max-width: 100%; } .jsenabled .choosercontainer #chooseform .instruction, .jsenabled .choosercontainer #chooseform .typesummary { position: static; } } /** * Module chooser dialogue (moodle-core-chooserdialogue) * * This CSS belong to the chooser dialogue which should work both with, and * without javascript enabled */ .modchooser .modal-body { padding: 0; overflow-y: auto; min-height: 640px; display: flex; flex-direction: column; .searchresultitemscontainer-wrapper { min-height: 495px; } .carousel-item.active { display: flex; } .chooser-container { display: flex; flex-direction: column; flex: 1 1 auto; } .loading-icon { opacity: 1; .icon { display: block; font-size: 3em; height: 1em; width: 1em; } } .carousel-item .loading-icon .icon { margin: 1em auto; } .searchbar { width: 100%; } } .modchooser .modal-footer { height: 70px; background: $modal-content-bg; .moodlenet-logo { .icon { height: 2.5rem; width: 6rem; margin-bottom: .6rem; } } } .modchoosercontainer.noscroll { overflow-y: hidden; } .modchoosercontainer .optionscontainer, .modchoosercontainer .searchresultitemscontainer { overflow-x: hidden; .option { // 2 items per line. flex-basis: calc(50% - 0.5rem); .optionactions { .optionaction { cursor: pointer; color: $gray-600; i { margin: 0; } } } .optioninfo { a { color: $gray-700; &:hover { text-decoration: none; } } } } } .modchooser .modal-body .optionsummary { background-color: $white; overflow-x: hidden; overflow-y: auto; height: 640px; .content { overflow-y: auto; .heading { .icon { height: 32px; width: 32px; font-size: 32px; padding: 0; } } } .actions { border-top: 1px solid $gray-300; background: $white; } } @include media-breakpoint-down(xs) { .path-course-view .modal-dialog.modal-lg, .path-course-view .modal-content, .modchooser .modal-body, .modchooser .modal-body .carousel, .modchooser .modal-body .carousel-inner, .modchooser .modal-body .carousel-item, .modchooser .modal-body .optionsummary, .modchoosercontainer, .optionscontainer, .searchresultitemscontainer { min-height: auto; height: 100%; overflow-y: auto; } .path-course-view .modal-dialog.modal-lg { margin: 0; } .modchooser .modal-body .searchresultitemscontainer-wrapper { min-height: auto; } } @include media-breakpoint-up(sm) { .modchoosercontainer .optionscontainer .option, .modchoosercontainer .searchresultitemscontainer .option { // Three items per line. flex-basis: calc(33.33% - 0.5rem); } } @include media-breakpoint-up(lg) { .modchoosercontainer .optionscontainer .option, .modchoosercontainer .searchresultitemscontainer .option { // Six items per line. flex-basis: calc(16.66% - 0.5rem); } } /* Form element: listing */ .formlistingradio { padding-bottom: 25px; padding-right: 10px; } .formlistinginputradio { float: left; } .formlistingmain { min-height: 225px; } .formlisting { position: relative; margin: 15px 0; padding: 1px 19px 14px; background-color: $formlisting-bg; border: 1px solid $formlisting-border-color; @include border-radius(4px); } .formlistingmore { position: absolute; cursor: pointer; bottom: -1px; right: -1px; padding: 3px 7px; font-size: 12px; font-weight: bold; background-color: $formlistingmore-bg; border: 1px solid $formlistingmore-border-color; color: $formlistingmore-color; @include border-radius(4px 0 4px 0); } .formlistingall { margin: 15px 0; padding: 0; @include border-radius(4px); } .formlistingrow { cursor: pointer; border-bottom: 1px solid; border-color: $formlistingrow-border-color; border-left: 1px solid $formlistingrow-border-color; border-right: 1px solid $formlistingrow-border-color; background-color: $formlistingrow-bg; @include border-radius(0 0 4px 4px); padding: 6px; top: 50%; left: 50%; min-height: 34px; float: left; width: 150px; } body.jsenabled .formlistingradio { display: none; } body.jsenabled .formlisting { display: block; } a.criteria-action { padding: 0 3px; float: right; } div.criteria-description { padding: 10px 15px; margin: 5px 0; background: none repeat scroll 0 0 $criteria-desc-bg; border: 1px solid $criteria-desc-border-color; } ul.badges { margin: 0; list-style: none; } .badges li { position: relative; display: inline-block; padding-top: 1em; text-align: center; vertical-align: top; width: 150px; } .badges li .badge-name { display: block; padding: 5px; } .badges li > img { position: absolute; } .badges li .badge-image { width: 100px; height: 100px; left: 10px; top: 0; z-index: 1; } .badges li .badge-actions { position: relative; } .badges li .expireimage { background-image: url([[pix:i/expired]]); background-repeat: no-repeat; background-size: 100px 100px; width: 100px; height: 100px; left: 25px; top: 15px; position: absolute; z-index: 10; opacity: 0.85; } #badge-image { background-color: transparent; padding: 0; position: relative; min-width: 100px; width: 20%; display: inline-block; vertical-align: top; margin-top: 17px; margin-bottom: 20px; .expireimage { background-image: url([[pix:i/expired]]); background-repeat: no-repeat; background-size: 100px 100px; width: 100px; height: 100px; left: 0; top: 0; opacity: 0.85; position: absolute; z-index: 10; } .singlebutton { padding-top: 5px; display: block; button { margin-left: 4px; } } } #badge-details { display: inline-block; width: 79%; } #badge-overview dl, #badge-details dl { margin: 0; dt, dd { vertical-align: top; padding: 3px 0; } dt { clear: both; display: inline-block; width: 20%; min-width: 100px; } dd { display: inline-block; width: 79%; margin-left: 1%; } } #badge-criteria li li { list-style-type: none; } #badge-image-col { flex: 0 0 400px; } .badge-profile { vertical-align: top; } .connected { color: map-get($theme-colors, 'success'); } .notconnected { color: map-get($theme-colors, 'danger'); } .connecting { color: map-get($theme-colors, 'warning'); } #page-badges-award .recipienttable tr td { vertical-align: top; } #page-badges-award .recipienttable tr td.actions .actionbutton { margin: 0.3em 0; padding: 0.5em 0; width: 100%; } #page-badges-award .recipienttable tr td.existing, #page-badges-award .recipienttable tr td.potential { width: 42%; } #issued-badge-table .activatebadge { display: inline-block; } .statusbox.active { background-color: $state-success-bg; } .statusbox.inactive { background-color: $state-warning-bg; } .statusbox { text-align: center; margin-bottom: 5px; padding: 5px; } .statusbox .activatebadge { display: inline-block; } .statusbox .activatebadge input[type=submit] { margin: 3px; } .activatebadge { margin: 0; text-align: left; vertical-align: middle; } img#persona_signin { cursor: pointer; } .addcourse { float: right; } .invisiblefieldset { display: inline; padding: 0; border-width: 0; } /** Page header */ #page-header { h1.h2 { font-weight: bold; } .logo { margin: $spacer 0; img { max-height: 75px; } } } /** Navbar logo. */ nav.navbar .logo img { max-height: 35px; } .nav.usernav { .nav-item { display: flex; } .usermenu .dropdown-toggle { padding: 0 0.5rem; } } /** Header-bar styles **/ .page-context-header { // We need to be explicit about the height of the header. $pageHeaderHeight: 140px; // Do not remove these rules. overflow: hidden; padding: 0.25rem 0; display: flex; .page-header-image { & > a { display: inline-block; } } .page-header-headings, .header-button-group { position: relative; line-height: 24px; vertical-align: middle; } .header-button-group { display: block; float: left; } } ul.dragdrop-keyboard-drag li { list-style-type: none; } a.disabled:hover, a.disabled { text-decoration: none; cursor: default; font-style: italic; color: $text-muted; } body.lockscroll { height: 100%; overflow: hidden; } .progressbar_container { max-width: 500px; margin: 0 auto; } /* IE10 only fix for calendar titling */ .ie10 .yui3-calendar-header-label { display: inline-block; } dd:before, dd:after { display: block; content: " "; } dd:after { clear: both; } // Active tabs with links should have a different // cursor to indicate they are clickable. .nav-tabs > .active > a[href], .nav-tabs > .active > a[href]:hover, .nav-tabs > .active > a[href]:focus { cursor: pointer; } .inplaceeditable { &.inplaceeditingon { position: relative; .editinstructions { margin-top: -30px; font-weight: normal; margin-right: 0; margin-left: 0; left: 0; right: auto; white-space: nowrap; } @include media-breakpoint-up(sm) { input { width: 330px; vertical-align: text-bottom; margin-bottom: 0; &[role="combobox"] { width: auto; } } } select { margin-bottom: 0; } } .quickediticon img { opacity: 0.2; } .quickeditlink { color: inherit; text-decoration: inherit; } &:hover .quickeditlink .quickediticon img, .quickeditlink:focus .quickediticon img { opacity: 1; } &.inplaceeditable-toggle .quickediticon { display: none; } &.inplaceeditable-autocomplete { display: block; } } h3.sectionname .inplaceeditable.inplaceeditingon .editinstructions { margin-top: -20px; } /** Chart area. */ .chart-area { @include media-breakpoint-up(lg) { .chart-image { position: relative; margin: auto; height: 48vh; width: 46vw; } } .chart-table-data { display: none; } .chart-table { .chart-output-htmltable caption { white-space: nowrap; } /** When accessible, we display the table only. */ &.accesshide { .chart-table-expand { display: none; } .chart-table-data { display: block; } } } } /* YUI 2 Tree View */ /*rtl:raw: .ygtvtn, .ygtvtm, .ygtvtmh, .ygtvtmhh, .ygtvtp, .ygtvtph, .ygtvtphh, .ygtvln, .ygtvlm, .ygtvlmh, .ygtvlmhh, .ygtvlp, .ygtvlph, .ygtvlphh, .ygtvdepthcell, .ygtvok, .ygtvok:hover, .ygtvcancel, .ygtvcancel:hover { background-image: url([[pix:theme|yui2-treeview-sprite-rtl]]); } */ .hover-tooltip-container { position: relative; .hover-tooltip { opacity: 0; visibility: hidden; position: absolute; /*rtl:ignore*/ left: 50%; top: calc(-50% - 5px); transform: translate(-50%, -50%); background-color: $hover-tooltip-bg; border: 1px solid $hover-tooltip-border-color; border-radius: .3rem; box-sizing: border-box; padding: 5px; white-space: nowrap; transition: opacity 0.15s, visibility 0.15s; z-index: 1000; &:before { content: ''; display: inline-block; border-left: 8px solid transparent; border-right: 8px solid transparent; border-top: 8px solid $hover-tooltip-border-color; position: absolute; bottom: -8px; left: calc(50% - 8px); } &:after { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-top: 7px solid $hover-tooltip-border-top-color; position: absolute; bottom: -6px; left: calc(50% - 7px); z-index: 2; } } &:hover { .hover-tooltip { opacity: 1; visibility: visible; transition: opacity 0.15s 0.5s, visibility 0.15s 0.5s; } } } #region-flat-nav { padding-right: 0; padding-left: 0; .nav { margin-right: $grid-gutter-width * 0.5; background-color: $card-bg; } @include media-breakpoint-down(sm) { .nav { margin-top: $grid-gutter-width; margin-right: 0; } } } // Footer link colour was added to allow the colour of footer links to be changed, // but really in bootstrap we want the colour of links on .bg-inverse to be changed // rather than being specific to the footer. This is kept for backwards compatibility. $footer-link-color: $bg-inverse-link-color !default; .footer-dark { a { color: $footer-link-color; text-decoration: underline; .icon { color: $footer-link-color; } &:focus .icon { color: $body-color; } } } .btn-footer-popover { display: none; position: fixed; bottom: 2rem; right: 2rem; @include box-shadow($popover-box-shadow); } .btn-footer-communication { display: none; position: fixed; bottom: 5rem; right: 2rem; @include box-shadow($popover-box-shadow); } .hasstickyfooter .btn-footer-popover { bottom: calc(1rem + #{$stickyfooter-height}); } .hasstickyfooter .btn-footer-communication { bottom: calc(4rem + #{$stickyfooter-height}); } .popover.footer { .popover-body { padding: 0; .footer-section { a { color: $body-color; text-decoration: underline; .icon { color: $body-color; } &:focus { text-decoration: none; } } } } } .footer-support-link { padding-bottom: 5px; } @include media-breakpoint-up(sm) { .jsenabled #page-footer .footer-content-popover { display: none; } .jsenabled .btn-footer-popover, .jsenabled .btn-footer-communication { display: block; z-index: $zindex-dropdown; } } .bg-inverse a { color: $bg-inverse-link-color; text-decoration: underline; .icon { color: $bg-inverse-link-color; } } .sitelink { img { width: 112px; } } .competency-tree { ul { padding-left: 1.5rem; } } .sr-only-focusable { &:active, &:focus { z-index: 1031; position: fixed; background: $sr-only-active-bg; padding: 7px; left: 0; top: 0; } } [data-drag-type="move"] { cursor: move; touch-action: none; } .clickable { cursor: pointer; } .overlay-icon-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: $overlay-icon-bg; .loading-icon { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); .icon { height: 30px; width: 30px; font-size: 30px; } } } .w-auto { width: auto; } .bg-pulse-grey { animation: bg-pulse-grey 2s infinite linear; } @keyframes bg-pulse-grey { 0% { background-color: $gray-100; } 50% { background-color: darken($gray-100, 5%); } 100% { background-color: $gray-100; } } @each $size, $length in $spacers { .line-height-#{$size} { line-height: $length !important; /* stylelint-disable-line declaration-no-important */ } } .dir-rtl { .dir-rtl-hide { display: none; } } .dir-ltr { .dir-ltr-hide { display: none; } } .paged-content-page-container { min-height: 3.125rem; } body.h5p-embed { #page-content { display: inherit; } #maincontent { display: none; } .h5pmessages { min-height: 230px; // This should be the same height as default core_h5p iframes. } } #h5pcontenttypes td { vertical-align: middle; } #page.drawers { form#h5peditor, form#coolh5peditor, .core_contentbank_viewcontent { max-width: $h5p-content-maxwidth; margin: 0 auto; } } .text-decoration-none { text-decoration: none !important; /* stylelint-disable-line declaration-no-important */ } .colour-inherit { color: inherit !important; /* stylelint-disable-line declaration-no-important */ } .position-right { right: 0 !important; /* stylelint-disable-line declaration-no-important */ } .overflow-hidden { overflow: hidden !important; /* stylelint-disable-line declaration-no-important */ } .text-break { overflow-wrap: break-word !important; /* stylelint-disable-line declaration-no-important */ } .word-break { word-break: break-word !important; /* stylelint-disable-line declaration-no-important */ } .z-index-0 { z-index: 0 !important; /* stylelint-disable-line declaration-no-important */ } .z-index-1 { z-index: 1 !important; /* stylelint-disable-line declaration-no-important */ } // These floats are deprecated in Bootstrap 4.3.1. It is still okay to use them in Moodle. .float-left { float: left !important; /* stylelint-disable-line declaration-no-important */ } .float-right { float: right !important; /* stylelint-disable-line declaration-no-important */ } .img-responsive { @include img-fluid(); } input[disabled] { cursor: not-allowed; } .custom-select { width: auto; max-width: 100%; } .fade.in { opacity: 1; } .clamp-2 { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; } .word-break-all { word-break: break-all; } .matchtext { background-color: lighten($primary, 40%); color: $body-color; height: 1.5rem; } .border-radius { @if $enable-rounded { @include border-radius($card-border-radius); } } .v-hidden { visibility: hidden; } // Any dialog (modal or dropdown) forced max-widths limits. .dialog-big { max-width: $modal-md; } .dialog-small { max-width: $modal-sm; } @include media-breakpoint-up(sm) { .dialog-big { width: $modal-md; } .dialog-small { width: $modal-sm; } } /* * Helpers to show elements only when a parent element has focus or hover. */ // Add this class to the element to hide. .v-parent-focus { opacity: 0; visibility: hidden; } // Add this class to the parent element to control focus. .focus-control:focus-within .v-parent-focus, .focus-control:hover .v-parent-focus { opacity: 1; visibility: visible; } // Emoji picker. $picker-width: 350px !default; $picker-width-xs: 320px !default; $picker-height: 400px !default; $picker-row-height: 40px !default; $picker-emoji-button-size: 40px !default; $picker-emoji-button-font-size: 24px !default; $picker-emoji-category-count: 9 !default; $picker-emojis-per-row: 7 !default; .emoji-picker { width: $picker-width; height: $picker-height; .category-button { padding: .375rem 0; height: 100%; width: divide($picker-width, $picker-emoji-category-count); border-top: none; border-left: none; border-right: none; border-bottom: 2px solid transparent; &.selected { border-bottom: 2px solid map-get($theme-colors, 'primary'); } } .emojis-container, .search-results-container { min-width: $picker-emojis-per-row * $picker-emoji-button-size; } .picker-row { height: $picker-row-height; .category-name { line-height: $picker-row-height; } .emoji-button { height: $picker-emoji-button-size; width: $picker-emoji-button-size; line-height: $picker-emoji-button-size; font-size: $picker-emoji-button-font-size; overflow: hidden; @include hover-focus { color: inherit; text-decoration: none; } } } .emoji-preview { height: $picker-row-height; font-size: $picker-row-height; line-height: $picker-row-height; } .emoji-short-name { line-height: $picker-row-height * 0.5; } @include media-breakpoint-down(xs) { width: $picker-width-xs; } } .emoji-auto-complete { height: $picker-row-height; .btn.btn-link.btn-icon.emoji-button { height: $picker-emoji-button-size; width: $picker-emoji-button-size; line-height: $picker-emoji-button-size; font-size: $picker-emoji-button-font-size; &.active { background-color: $gray-200; } } } .toast-wrapper { max-width: $toast-max-width; max-height: 0; // Place these above any modals and other elements. z-index: 1051; > :first-child { margin-top: $spacer; } } @each $color, $value in $theme-colors { .alert-#{$color} { a { color: darken(theme-color-level($color, $alert-color-level), 10%); } // Darken the close button text colour inside notification alerts for better contrast. .close { color: darken(theme-color-level($color, $alert-color-level), 20%); opacity: 0.6; } } } .alert a { font-weight: $font-weight-bold; } .breadcrumb:empty { padding: 0; } @include media-breakpoint-down(sm) { #page-navbar { width: 100%; } .breadcrumb:not(:empty) { width: 100%; flex-wrap: nowrap; margin-bottom: $spacer * 0.5; .breadcrumb-item { padding-top: $spacer * 0.33333; padding-bottom: $spacer * 0.33333; display: inline-flex; overflow: hidden; } .breadcrumb-item a, .breadcrumb-item span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } } .mform { width: 100%; padding-right: 15px; padding-left: 15px; } .pagination { flex-wrap: wrap; justify-content: center; } .custom-select { max-width: 100%; } .card .card-body { padding: $card-spacer-x * 0.5; } #page-header { .card { border: 0; .card-body { padding: 0; } } } .nav-tabs:not(.more-nav), .nav-pills { margin: 0; border: 0; padding: $spacer * 0.125; background-color: $gray-200; .nav-item { flex: 1 1 auto; text-align: center; } .nav-link { background: $white; border: 0; margin: $spacer * 0.125; &.active { @include button-outline-variant($gray-600); border-color: $gray-600; } } } } @media (max-width: map-get($grid-breakpoints, "sm")) and (max-height: 320px) { div#page { margin-top: 0; } .navbar.fixed-top { position: relative; z-index: inherit; } } .link-underline { text-decoration: underline; &:focus { text-decoration: none; } } .alert.cta { .cta-icon { .icon { padding: 0.3rem; &.fa { border-radius: 50%; border-style: solid; border-width: 0.125rem; } } } } .core_payment_gateways_modal .custom-control-label::before, .core_payment_gateways_modal .custom-control-label::after { top: 45%; } $scrollbar-thumb: $primary; $scrollbar-track: lighten($primary, 40%); // simple scrollbars .visual-scroll-x { scrollbar-width: thin; scrollbar-color: $scrollbar-thumb $scrollbar-track; -ms-overflow-style: -ms-autohiding-scrollbar; &::-webkit-scrollbar { height: 8px; // for horizontal scrollbars -webkit-appearance: none; appearance: none; } &::-webkit-scrollbar-thumb { background-color: $scrollbar-thumb; border-right: $border-width solid $white; } &::-webkit-scrollbar-track { background-color: $scrollbar-track; border-right: $border-width solid $white; } } // Thin scrollbars. @mixin thin-scrolls($bg-track) { // Firefox. scrollbar-width: thin; scrollbar-color: $thin-scroll-bg-thumb $bg-track; // Chrome, Edge and Safari. &::-webkit-scrollbar { width: 12px; } &::-webkit-scrollbar-track { background: $bg-track; } &::-webkit-scrollbar-thumb { background-color: $thin-scroll-bg-thumb; border-radius: 20px; border: 3px solid $bg-track; } &::-webkit-scrollbar-thumb:hover { background-color: $thin-scroll-bg-hover; } } // Generic dropzones and dragging styles. body.dragging { .drop-zone { border: 1px dashed $dropzone-border; } .drop-up { border-top: 1px solid $dropzone-border; border-top-left-radius: 0; border-top-right-radius: 0; } .drop-down { border-bottom: 1px solid $dropzone-border; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .dragging { opacity: .6; } } .dragicon { visibility: hidden; } .draggable:hover .dragicon { visibility: visible; cursor: move; } // Generic classes reactive components can use. .overlay-preview { background-color: $overlay-preview-bg; border: 2px dashed $primary; position: absolute; top: 0; left: 0; width: 100%; height: 100%; .overlay-preview-wrapper { position: absolute; top: 0; padding: 2rem; width: 100%; } .overlay-preview-content { position: relative; top: 0; padding: $modal-inner-padding; margin: 0 auto; width: 100%; max-width: 600px; background-color: $primary; color: $white; text-align: center; font-size: $font-size-lg; @include border-radius(); } } .overlay-preview-borders { outline: 2px dashed $primary; } .waitstate { display: none; } .stateready { .waitstate { display: inherit; } .whilenostate { display: none; } } // Collapsible list. .collapse-list { .collapse-list-item { padding: $collapse-list-item-padding-y $collapse-list-item-padding-x; @include hover-focus() { background-color: $collapse-list-item-hover-bg; border-color: $collapse-list-item-hover-border; } } .collapse-list-item-content { .collapse-list-item { padding-left: calc(#{$collapse-list-item-padding-x} * 3); } } } .drawers { .block_myoverview { border: 0; & > .card-body { padding-top: 0 !important; /* stylelint-disable-line declaration-no-important */ padding-left: 0 !important; /* stylelint-disable-line declaration-no-important */ padding-right: 0 !important; /* stylelint-disable-line declaration-no-important */ } } } .dropdown-toggle::after { @extend .fa-solid; content: fa-content($fa-var-chevron-down); margin-right: 0; margin-left: 4px; font-size: 9px; width: 9px; border: 0; } .dropleft .dropdown-toggle::before { border: 0; @extend .fa-solid; content: fa-content($fa-var-chevron-left); font-size: 9px; margin-left: 0; margin-right: 4px; width: 9px; } .dir-rtl .dropleft .dropdown-toggle::before { content: fa-content($fa-var-chevron-right); } .dropright .dropdown-toggle::after { border: 0; @extend .fa-solid; content: fa-content($fa-var-chevron-right); } .dir-rtl .dropright .dropdown-toggle::after { content: fa-content($fa-var-chevron-left); } .dropup .dropdown-toggle::after { border: 0; @extend .fa-solid; content: fa-content($fa-var-chevron-up); } .select-menu { li:first-child { ul[role="group"] { padding: 0; } } ul[role="group"] { padding: 0.3rem 0 0 0; margin: 0; li:first-child { cursor: default; color: $gray-600; padding: 0.25rem 1.5rem; display: block; } .dropdown-item { padding-left: 2.5rem; } } .dropdown-item[aria-selected="true"] { font-weight: bold; } } [role="listbox"] [role="option"] { cursor: pointer; &[aria-selected="true"] { font-weight: bold; } } .initialbargroups ul { -webkit-margin-start: 0; /* stylelint-disable-line */ margin-right: -1px; } .page-item { &:first-child { .page-link { .initialbargroups & { @include border-left-radius(0); @include border-right-radius(0); } .initialbargroups .pagination-lg:first-child & { @include border-left-radius($pagination-border-radius-lg); } .initialbargroups .pagination-sm:first-child & { @include border-left-radius($pagination-border-radius-sm); } } } &:last-child { .page-link { .initialbargroups & { @include border-left-radius(0); @include border-right-radius(0); } .initialbargroups .pagination-lg:last-child & { @include border-right-radius($pagination-border-radius-lg); } .initialbargroups .pagination-sm:last-child & { @include border-right-radius($pagination-border-radius-sm); } } } } blockquote { margin: 0 0.5rem 1rem; padding-left: 1rem; color: $gray-700; border-left: 5px solid $gray-400; } /* Prevent long strings exceeding page width */ .page-header-headings, .coursename, .categoryname, .breadcrumb-item { &:not(.text-truncate) { word-break: normal; overflow-wrap: anywhere; white-space: normal; } } /* Showmore component */ .showmore-container { &.collapsed { .collapsed-content { display: block; } .expanded-content { display: none; } } &:not(.collapsed) { .collapsed-content { display: none; } .expanded-content { display: block; } } button { float: right; &.btn-link { text-decoration: none; } .icon { font-size: $btn-font-size-sm; margin: 0; } } } /* Combobox search dropdowns */ .usersearchdropdown, .gradesearchdropdown, .groupsearchdropdown { max-width: 350px; .searchresultitemscontainer { max-height: 170px; overflow: auto; /* stylelint-disable declaration-no-important */ img { height: 48px !important; width: 48px !important; } } } /* Bulk actions in sticky footer. */ #sticky-footer { [data-type="bulkactions"] { display: flex; flex: 0 0 100%; align-items: center; } } /* Choice list component. */ .choicelist { // Choicelist is designed to fit inside a small modal. min-width: calc(#{$modal-sm} - 25px); // Align the font based icons. i.icon { vertical-align: middle; } } boost/scss/moodle/sticky-footer.scss 0000604 00000002656 15062070724 0013633 0 ustar 00 /** * This file contains the styles required to make the footer sticky. */ html, body { height: 100%; } .stickyfooter { position: fixed; right: 0; left: 0; height: $stickyfooter-height; bottom: calc(#{$stickyfooter-height} * -1); transition: bottom .5s; z-index: $zindex-fixed; overflow: hidden; box-shadow: 0 0 1rem rgba($black, .15); font-size: calc(#{$font-size-base} * 1.10); } .hasstickyfooter .stickyfooter { bottom: 0; } /* Standard components fixes for sticky footer. */ .stickyfooter ul.pagination { margin-bottom: map-get($spacers, 1); } .stickyfooter .btn { font-size: calc(#{$font-size-base} * 1.10); } /* Breakpoints fixes. */ @include media-breakpoint-up(sm) { #page-wrapper { height: 100%; display: flex; flex-direction: column; #page { &:not(.drawers) { flex: 1 0 auto; } display: flex; flex-direction: column; #page-content { flex: 1 0 auto; } } #page-footer { flex-shrink: 0; } } } @include media-breakpoint-down(sm) { #page-wrapper { height: 100%; display: flex; flex-direction: column; #page { &:not(.drawers) { flex: 1 0 auto; } display: flex; flex-direction: column; } } } boost/scss/moodle/login.scss 0000604 00000004202 15062070724 0012126 0 ustar 00 $loginbackground-gradient-from: $gray-100 !default; $loginbackground-gradient-to: $gray-300 !default; $logincontainer-bg: $white !default; $logincontainer-padding: 3rem !default; $logincontainer-shadow: $box-shadow !default; $logindivider-margin-top: 1.5rem !default; $logindivider-margin-bottom: 1.5rem !default; $logindivider-border: $border-color !default; $login-identity-provider-btn-border: $border-color !default; .pagelayout-login #region-main { border: 0; background-color: inherit; } .pagelayout-login #page { background: $loginbackground-gradient-from; @include gradient-x($loginbackground-gradient-from, $loginbackground-gradient-to, 0%, 100%); div[role="main"] { height: 100%; } } .login-wrapper { display: flex; align-items: center; justify-content: center; height: 100%; } .login-container { background-color: $logincontainer-bg; padding: $logincontainer-padding; box-shadow: $logincontainer-shadow; margin-bottom: 2rem; .login-languagemenu { display: flex; justify-content: flex-start; .dropdown-menu { max-height: 300px; overflow-y: auto; } } .login-logo { display: flex; justify-content: center; margin-bottom: 1rem; } .login-divider { margin-top: $logindivider-margin-top; margin-bottom: $logindivider-margin-bottom; border-top: $border-width solid $logindivider-border; } h1.login-heading { font-size: $h2-font-size; } h2.login-heading { font-size: $h4-font-size; } .login-identityproviders { .login-identityprovider-btn { border: $border-width solid $login-identity-provider-btn-border; } } .divider { width: $border-width; background-color: $gray-300; height: $font-size-base * 2; } .action-menu-trigger { a { margin: 0.5rem 0; } } } @include media-breakpoint-up(md) { .login-container { width: 500px !important; /* stylelint-disable-line declaration-no-important */ @include border-radius(); } } boost/scss/moodle/modules.scss 0000604 00000117073 15062070724 0012501 0 ustar 00 /* modules.less */ // The home for small tweaks to modules that don't require // changes drastic enough to pull in the full module css // and replace it completely // Plus some misc. odds and ends select { width: auto; } .path-mod { .activity-header:not(:empty) { background-color: $gray-100; margin-bottom: map-get($spacers, 3); padding-left: map-get($spacers, 3); padding-right: map-get($spacers, 3); @include border-radius(); & > div:last-child > div:last-child { border-bottom: 0; } } .activity-information { .activity-dates { padding-top: map-get($spacers, 3); padding-bottom: map-get($spacers, 3); border-bottom: $border-width solid $border-color; } .completion-info { padding-top: map-get($spacers, 3); padding-bottom: map-get($spacers, 3); border-bottom: $border-width solid $border-color; } } .activity-description { padding-top: map-get($spacers, 3); padding-bottom: map-get($spacers, 3); & > .box.py-3 { padding-top: 0 !important; /* stylelint-disable-line declaration-no-important */ padding-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */ } & > .box.py-3:empty { display: none; } } .automatic-completion-conditions .badge { font-size: 80%; padding: map-get($spacers, 2); margin-top: map-get($spacers, 1); mix-blend-mode: multiply; &.badge-light { background-color: $gray-200 !important; /* stylelint-disable-line declaration-no-important */ } .icon { width: 0.7rem; height: 0.7rem; font-size: 0.7rem; } &:first-child { margin-top: 0; } } .activity-description .no-overflow p:last-child { padding-bottom: 0; margin-bottom: 0; } } // Choice module .path-mod-choice { .horizontal .choices .option { display: inline-block; } } .path-mod-choice { .choices .option label { vertical-align: top; } } // Forum module .path-mod-forum .forumsearch { input, .helptooltip { margin: 0 3px; } } .path-mod-forum .forumheaderlist, .path-mod-forum .forumheaderlist td { border: none; } .path-mod-forum { .forumheaderlist { thead .header, tbody .discussion td { white-space: normal; vertical-align: top; padding-left: 0.5em; padding-right: 0.5em; } thead .header { white-space: normal; vertical-align: top; } thead .header.replies { text-align: center; } thead .header.lastpost { text-align: right; } thead .header th, tbody .discussion td { &.discussionsubscription { width: 16px; padding-left: 0.5em; padding-right: 0.5em; } } .discussion { .replies, .lastpost { white-space: normal; } .discussionsubscription, .replies { text-align: center; } .topic, .discussionsubscription, .topic.starter, .replies, .lastpost { vertical-align: top; } } } .discussion-list { .topic { // Do not use the default bold style for the table headings. font-weight: inherit; } } } .discussion-settings-container { .custom-select { width: 100%; } input { max-width: 100%; } } .forumpost { border: $border-width solid $border-color; display: block; padding: 6px; .header { margin-bottom: 3px; } .picture img { margin: 3px; &.userpicture { margin-left: 3px; margin-right: 10px; } } .content { .posting.fullpost { margin-top: 8px; } } .row { display: block; .topic, .content-mask, .options { margin-left: 48px; } &.side { clear: both; } } } .forumpost .row .left { width: 48px; } .forumpost .options .commands { margin-left: 0; } .forumpost .subject { font-weight: bold; } // Override hardcoded forum modules styling .forumsearch input[type=text] { margin-bottom: 0; } #page-mod-forum-view { table { .fit-content { width: 1px; white-space: nowrap; } .limit-width { max-width: 200px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; .author-info { max-width: calc(100% - 35px - .5rem); } } } } #page-mod-forum-discuss .discussioncontrols { width: auto; margin: 0; .form-inline input { margin-top: -1px; } } $author-image-width: 70px; $author-image-margin: 24px; $author-image-width-sm: 30px; $author-image-margin-sm: 8px; /** Gently highlight the selected post by changing it's background to blue and then fading it out. */ @keyframes background-highlight { from { background-color: $modules-highlight-bg; } to { background-color: inherit; } } .path-mod-forum .nested-v2-display-mode, .path-mod-forum.nested-v2-display-mode { .discussionsubscription { margin-top: 0; text-align: inherit; margin-bottom: 0; } .preload-subscribe, .preload-unsubscribe { display: none; } .post-message { line-height: 1.6; } .indent { margin-left: 0; } /** Reset the badge styling back to pill style. */ .badge { font-size: inherit; font-weight: inherit; padding-left: .5rem; padding-right: .5rem; border-radius: 10rem; } .badge-light { background-color: $modules-badge-bg; color: $modules-badge-color; } /** Style the ratings like a badge. */ .rating-aggregate-container { background-color: $modules-rating-aggregate-bg; color: $modules-rating-aggregate-color; padding: .25em .5em; line-height: 1; margin-right: .5rem; vertical-align: middle; border-radius: 10rem; text-align: center; } .ratinginput { padding: .25em 1.75rem 0.25em .75em; line-height: 1; height: auto; border-radius: 10rem; @include media-breakpoint-down(sm) { margin-top: .5rem; } } .group-image { width: 35px; height: 35px; margin-right: 0; float: none; display: inline-block; } /** Don't show the discussion locked alert in this mode because it's already indicated with a badge. */ .alert.discussionlocked { @include sr-only(); } /** Fix muted text contrast ratios for accessibility. */ .text-muted, .dimmed_text { color: $modules-forum-muted-color !important; /* stylelint-disable-line declaration-no-important */ } .author-header { font-style: italic; .author-name { font-style: normal; } } /** Make the tag list text screen reader visible only */ .tag_list > b { @include sr-only(); } :target > .focus-target { animation-name: background-highlight; animation-duration: 1s; animation-timing-function: ease-in-out; animation-iteration-count: 1; } .forum-post-container { .replies-container { .forum-post-container { border-top: 1px solid $modules-forum-post-border-color; padding-top: 1.5rem; .replies-container .forum-post-container { border-top: none; padding-top: 0; } } .inline-reply-container .reply-author { display: none; } } .post-message p:last-of-type { margin-bottom: 0; } .author-image-container { width: $author-image-width; margin-right: $author-image-margin; flex-shrink: 0; } .inline-reply-container textarea { border: 0; resize: none; } .indent { /** * The first post and first set of replies have a larger author image so offset the 2nd * set of replies by the image width + margin to ensure they align. */ .indent { padding-left: $author-image-width + $author-image-margin; /** * Reduce the size of the the author image for all second level replies (and below). */ .author-image-container { width: $author-image-width-sm; margin-right: $author-image-margin-sm; padding-top: (36px - $author-image-width-sm) * 0.5; } /** * Adjust the indentation offset for all 3rd level replies and below for the smaller author image. */ .indent { padding-left: $author-image-width-sm + $author-image-margin-sm; /** * Stop indenting the replies after the 5th reply. */ .indent .indent .indent { padding-left: 0; } } } } } } /** Extra small devices (portrait phones, less than 576px). */ @include media-breakpoint-down(sm) { #page-mod-forum-discuss.nested-v2-display-mode { .forum-post-container { .author-image-container { width: $author-image-width-sm; margin-right: $author-image-margin-sm; } .indent { .indent { padding-left: $author-image-width-sm + $author-image-margin-sm; .indent .indent { padding-left: 0; } } } } .group-image { width: 30px; height: 30px; } } } // Make filter popover content scrollable if needed. .filter-scrollable { overflow-y: auto; max-height: 25em; margin-bottom: 1em; } // Required to fit a date mform into a filter popover. .filter-dates-popover { width: 100%; max-width: 41.5em; } $grading-drawer-width: 430px !default; $grading-animation-duration: .3s !default; $grading-icon-button-size: 36px !default; $grading-search-button-padding-left: calc(#{map-get($spacers, 2)} + 8px) !default; $grading-search-input-padding-left: calc(#{map-get($spacers, 2)} + #{map-get($spacers, 2)} + #{$grading-icon-button-size - ($input-border-width * 2)}) !default; /* stylelint-disable-line max-line-length */ $grading-search-input-padding-right: calc(#{map-get($spacers, 2)} + #{$grading-icon-button-size}) !default; $grading-nav-bar-active-drawer-button-bottom: calc(#{map-get($spacers, 2) * -1} - 1px) !default; $grading-content-show-content-button-padding-left: calc(#{map-get($spacers, 2) * 2} + 45px) !default; @keyframes expandSearchButton { from { height: $grading-icon-button-size; width: $grading-icon-button-size; border-radius: $grading-icon-button-size * 0.5; background-color: $gray-200; } to { width: 100%; height: $input-height-lg; border-radius: 0; background-color: $input-bg; border-color: $input-border-color; padding-left: $grading-search-button-padding-left; padding-top: $input-padding-y-lg; padding-bottom: $input-padding-y-lg; @include font-size($input-font-size-lg); line-height: $input-line-height-lg; right: 0; } } @keyframes collapseSearchButton { from { width: 100%; height: $input-height-lg; border-radius: 0; background-color: $input-bg; border-color: $input-border-color; padding-left: $grading-search-button-padding-left; padding-top: $input-padding-y-lg; padding-bottom: $input-padding-y-lg; @include font-size($input-font-size-lg); line-height: $input-line-height-lg; right: 0; } to { height: $grading-icon-button-size; width: $grading-icon-button-size; border-radius: $grading-icon-button-size * 0.5; background-color: $gray-200; } } .path-mod-forum .unified-grader { @include media-breakpoint-up(xs) { .navbar { max-height: none; z-index: 1; } } .body-container { overflow: auto; &.hidden { display: none !important; /* stylelint-disable-line declaration-no-important */ } } .userpicture { height: 60px; width: 60px; } .grader-grading-panel { top: 0; position: absolute; height: 100%; z-index: 0; width: $grading-drawer-width; &.hidden { right: ($grading-drawer-width * -1); } .grading-icon { width: $grading-icon-button-size; } .user-picker-container { .user-full-name { max-width: 240px; } .page-link { width: $grading-icon-button-size; height: $grading-icon-button-size; display: flex; text-align: center; align-items: center; justify-content: center; } } .header-container { height: 65px; position: relative; overflow: hidden; .info-container { position: absolute; top: 50%; left: 0; transform: translateY(-50%); width: 100%; height: 100%; padding: map-get($spacers, 2); padding-right: calc(#{$grading-icon-button-size} + #{map-get($spacers, 2)}); opacity: 1; visibility: visible; transition: left $grading-animation-duration ease-in-out; z-index: 1; } .toggle-search-button { &.expand { animation-name: expandSearchButton; animation-duration: $grading-animation-duration; animation-timing-function: ease-in-out; } &.collapse { display: block; animation-name: collapseSearchButton; animation-duration: $grading-animation-duration; } } .user-search-container { overflow: hidden; position: absolute; top: 50%; right: 0; transform: translateY(-50%); z-index: 2; width: 100%; height: 100% !important; /* stylelint-disable-line declaration-no-important */ padding: map-get($spacers, 2); .search-input-container { position: relative; overflow: visible; flex-wrap: nowrap; input { padding-left: $grading-search-input-padding-left; padding-right: $grading-search-input-padding-right; opacity: 1; visibility: visible; transition: opacity 0s linear $grading-animation-duration, visibility 0s linear; } .search-icon { position: absolute; top: 50%; left: map-get($spacers, 2); transform: translateY(-50%); color: $input-color; height: $grading-icon-button-size; width: $grading-icon-button-size - ($input-border-width * 2); background-color: $input-bg; opacity: 1; visibility: visible; transition: opacity 0s linear $grading-animation-duration, visibility 0s linear $grading-animation-duration; } .toggle-search-button { position: absolute; top: 50%; right: map-get($spacers, 2); transform: translateY(-50%); z-index: 1; color: inherit; text-align: left; padding-left: 9px; transition: right 0s linear $grading-animation-duration; .expanded-icon { opacity: 1; visibility: visible; max-width: 50px; max-height: 50px; transition: opacity 0s linear $grading-animation-duration, max-height 0s linear $grading-animation-duration, max-width 0s linear $grading-animation-duration, visibility 0s linear $grading-animation-duration; } .collapsed-icon { opacity: 0; visibility: hidden; max-height: 0; max-width: 0; overflow: hidden; transition: opacity 0s linear $grading-animation-duration, max-height 0s linear $grading-animation-duration, max-width 0s linear $grading-animation-duration, visibility 0s linear $grading-animation-duration; } } } &.collapsed { width: calc(#{$grading-icon-button-size} + #{map-get($spacers, 2)} + #{map-get($spacers, 2)}); transition: width $grading-animation-duration ease-in-out; .search-input-container { flex-wrap: nowrap; input, .search-icon { opacity: 0; visibility: hidden; transition: opacity 0s linear, visibility 0s linear; } input { padding-left: 0; padding-right: 0; } .toggle-search-button { .expanded-icon { opacity: 0; visibility: hidden; max-height: 0; max-width: 0; overflow: hidden; transition: opacity 0s linear, max-height 0s linear, max-width 0s linear, visibility 0s linear; } .collapsed-icon { opacity: 1; visibility: visible; max-width: 50px; max-height: 50px; transition: opacity 0s linear, max-height 0s linear, max-width 0s linear, visibility 0s linear; } } } } } .user-search-container:not(.collapsed) + .info-container { opacity: 0; visibility: hidden; left: calc(100% * -1); transition: left $grading-animation-duration ease-in-out, opacity 0s linear $grading-animation-duration, visibility 0s linear $grading-animation-duration, padding 0s linear $grading-animation-duration; } } } .grader-module-content { overflow-y: auto; margin-right: $grading-drawer-width; @include transition(margin-right .2s ease-in-out); } .drawer-button { position: relative; &.active::after { content: ""; position: absolute; bottom: $grading-nav-bar-active-drawer-button-bottom; left: 0; width: 100%; height: 3px; background-color: map-get($theme-colors, 'primary'); } .icon { font-size: 20px; height: 20px; width: 20px; } } .grader-module-content-display { .discussion-container { &:last-of-type { > hr { display: none; } } .posts-container { &:last-of-type { > hr { display: none; } } .parent-container { position: relative; .show-content-button { position: absolute; height: 100%; width: 100%; left: 0; top: 0; padding-left: $grading-content-show-content-button-padding-left; text-align: left; z-index: 1; &:not(.collapsed) { display: none; } } .content { display: block; height: auto !important; /* stylelint-disable-line declaration-no-important */ .header { transition: margin-bottom $grading-animation-duration ease-in-out; div + div { opacity: 1; visibility: visible; max-height: none; transition: opacity $grading-animation-duration linear, visibility 0s linear; } } .body-content-container { opacity: 1; visibility: visible; max-height: none; transition: opacity $grading-animation-duration linear, visibility 0s linear; } .forum-post-core { opacity: 1; visibility: visible; max-height: none; transition: opacity $grading-animation-duration linear, visibility 0s linear; } } .show-content-button.collapsed + .content { opacity: .3; .header { margin-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */ div + div { opacity: 0; visibility: hidden; max-height: 0; } } .body-content-container { opacity: 0; visibility: hidden; max-height: 0; } .forum-post-core { opacity: 0; visibility: hidden; max-height: 0; } } .show-content-button.collapsed:hover + .content, .show-content-button.collapsed:focus + .content { opacity: 1; } } } } .no-post-container { .icon { height: 250px; width: 250px; margin-right: 0; } } .nested-v2-display-mode { .discussion-container { .posts-container { .parent-container { .show-content-button { padding-left: $author-image-width + $author-image-margin; } } } } } } .no-search-results-container { .icon { height: 250px; width: 250px; margin-right: 0; } } .nested-v2-display-mode { .view-context-button { margin-left: $author-image-width + $author-image-margin; border-radius: $border-radius-lg; } .parent-container { .author-image-container { position: relative; &:after { position: absolute; top: calc(#{$author-image-width} + #{map-get($spacers, 2)}); content: ""; background-color: $gray-200; width: 2px; height: calc(100% - #{$author-image-width} + #{map-get($spacers, 2)}); } } } .parent-container + .post-container { .author-image-container { img { width: $author-image-width-sm !important; /* stylelint-disable-line declaration-no-important */ } } } } } .path-mod-forum .unified-grader .nested-v2-display-mode, .path-mod-forum .modal .nested-v2-display-mode { .post-subject { display: none; } } @include media-breakpoint-down(xs) { .path-mod-forum .unified-grader { .grader-grading-panel { width: 100%; position: fixed; height: calc(100vh - 50px); overflow: scroll; top: 50px; } .body-container { overflow: visible; } } } // End styling for mod_forum. .maincalendar .calendarmonth td, .maincalendar .calendarmonth th { border: 1px dotted $table-border-color; } .path-grade-report-grader h1 { text-align: inherit; } #page-mod-chat-gui_basic input#message { max-width: 100%; } #page-mod-data-view #singleimage { width: auto; } .template_heading { margin-top: 10px; } .breadcrumb-button { margin-top: 4px; } .breadcrumb-button .singlebutton { float: left; margin-left: 4px; } .langmenu form { margin: 0; } // contributed by Paul Hibbitts, see http://msdn.microsoft@mixin com/en-us/library/ie/jj583807(v=vs.85).aspx canvas { -ms-touch-action: auto; } div#dock { display: none; } // Choice module // Lesson module /** General styles (scope: all of lesson) **/ .path-mod-lesson .invisiblefieldset.fieldsetfix { display: block; } .path-mod-lesson .answeroption .checkbox label p { display: inline; } .path-mod-lesson .form-inline label.form-check-label { display: inline-block; } .path-mod-lesson .slideshow { overflow: auto; padding: 15px; } #page-mod-lesson-view .branchbuttoncontainer .singlebutton button[type="submit"] { white-space: normal; } #page-mod-lesson-view { .vertical .singlebutton { display: block; + .singlebutton { margin-left: 0; margin-top: 1rem; } } .fitem .felement .custom-select { align-self: flex-start; } } .path-mod-lesson .generaltable td { vertical-align: middle; label { margin-bottom: 0; } .highlight { display: inline-block; margin-left: 0.25rem; } input[type="checkbox"] { display: block; } } .path-mod-wiki .wiki_headingtitle, .path-mod-wiki .midpad, .path-mod-wiki .wiki_headingtime { text-align: inherit; } .path-mod-wiki .wiki_contentbox { width: 100%; } // Survey module .path-mod-survey { .surveytable { > tbody > tr:nth-of-type(odd) { background-color: $table-bg; } > tbody > tr:nth-of-type(even) { background-color: $table-accent-bg; } .rblock label { text-align: center; } } } .nav .caret { margin-left: 4px; } // Dividers .nav { .divider { overflow: hidden; width: 0; } } // Usermenu .userloggedinas, .userswitchedrole, .loginfailures { .usermenu { .usertext { float: left; text-align: right; margin-right: $spacer * 0.5; height: 35px; .meta { font-size: $font-size-sm; align-items: center; } } .avatar { img { margin: 0; } } } } .userloggedinas .usermenu { .userbutton .avatars { position: relative; display: inline-block; .avatar { &.current { display: inline-block; position: absolute; bottom: 0; right: 0; width: 20px; height: 20px; border-radius: 50%; img { vertical-align: baseline; } .userinitials.size-35 { width: 20px; height: 20px; border: $border-width solid $border-color; background-color: $white; font-size: $font-size-base * .6; } } img { width: inherit; height: inherit; } } .realuser { width: 35px; height: 35px; display: inline-block; } } } .userinitials { background-color: $gray-200; vertical-align: middle; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; color: $gray-800; font-weight: normal; margin-right: $spacer * 0.25; &.size-16, &.size-30 { font-size: 0.7rem; width: 30px; height: 30px; } &.size-35 { width: 35px; height: 35px; } &.size-50 { width: 50px; height: 50px; } &.size-64 { width: 64px; height: 64px; } &.size-100 { width: 100px; height: 100px; font-size: $h2-font-size; } } img.userpicture { margin-right: $spacer * 0.25; } @include media-breakpoint-down(sm) { .usertext { display: none; } } // Quiz module #page-mod-quiz-mod #id_reviewoptionshdr .col-md-3, #page-mod-quiz-mod #id_reviewoptionshdr .col-md-9 { width: auto; max-width: none; } #page-mod-quiz-mod #id_reviewoptionshdr .form-group { float: left; width: 20rem; display: inline-block; min-height: 12rem; } #page-mod-quiz-mod #id_reviewoptionshdr .btn-link { line-height: 1.5; vertical-align: bottom; } #page-mod-quiz-mod #id_reviewoptionshdr .form-inline { float: left; clear: left; } #page-mod-quiz-mod #id_reviewoptionshdr .form-check { width: auto; height: 22px; justify-content: flex-start; } #page-mod-quiz-mod #id_reviewoptionshdr .review_option_item { width: 90%; height: 22px; } // Question navigation block. .path-mod-quiz #mod_quiz_navblock { .qnbutton { text-decoration: none; font-size: 14px; line-height: 20px; font-weight: normal; background-color: $card-bg; background-image: none; height: 40px; width: 30px; border-radius: 3px; border: 0; overflow: hidden; white-space: nowrap; margin: 0 6px 6px 0; } span.qnbutton { cursor: default; background-color: $input-disabled-bg; color: $gray-700; } a.qnbutton:hover, a.qnbutton:active, a.qnbutton:focus { text-decoration: underline; } .qnbutton .thispageholder { border: 1px solid; border-radius: 3px; z-index: 1; } .qnbutton.thispage .thispageholder { border-width: 3px; } .allquestionsononepage .qnbutton.thispage .thispageholder { border-width: 1px; } .qnbutton.flagged .thispageholder { background: transparent url([[pix:theme|mod/quiz/flag-on]]) 15px 0 no-repeat; } .qnbutton .trafficlight { border: 0; background: $card-bg none center / 10px no-repeat scroll; height: 20px; margin-top: 20px; border-radius: 0 0 3px 3px; } .qnbutton.notyetanswered .trafficlight, .qnbutton.invalidanswer .trafficlight { background-color: $card-bg; } .qnbutton.invalidanswer .trafficlight { background-image: url([[pix:theme|mod/quiz/warningtriangle]]); } .qnbutton.correct .trafficlight { background-image: url([[pix:theme|mod/quiz/checkmark]]); background-color: $success; } .qnbutton.blocked .trafficlight { background-image: url([[pix:core|t/locked]]); background-color: $input-disabled-bg; } .qnbutton.notanswered .trafficlight, .qnbutton.incorrect .trafficlight { background-color: $danger; } .qnbutton.partiallycorrect .trafficlight { background-image: url([[pix:theme|mod/quiz/whitecircle]]); background-color: $warning; } .qnbutton.complete .trafficlight, .qnbutton.answersaved .trafficlight, .qnbutton.requiresgrading .trafficlight { background-color: $gray-600; } } #page-mod-quiz-edit ul.slots li.section li.activity .instancemaxmarkcontainer form input { height: 1.4em; vertical-align: middle; } #page-mod-quiz-edit ul.slots li.section li.activity .instancemaxmarkcontainer { padding: 0.5em 0 0.5em 0.1em; margin: 2px; } /* Countdown timer. */ #page-mod-quiz-attempt #region-main { overflow-x: inherit; } #quiz-timer-wrapper { display: none; position: sticky; justify-content: end; top: $navbar-height + 5px; z-index: $zindex-sticky; #quiz-timer { border: $border-width solid $red; background-color: $white; } } .pagelayout-embedded #quiz-timer-wrapper { top: 5px; } @for $i from 0 through 16 { #quiz-timer-wrapper #quiz-timer.timeleft#{$i} { $bg: lighten($red, ($i * 3%)); background-color: $bg; color: color-yiq($bg); } } // Assign. .path-mod-assign [data-region="grade-actions-panel"] [data-region="grade-actions"] .collapse-buttons { top: auto; } // This section removes the responsiveness from the form in the grading panel $popout-header-font-size: 1.5 * $font-size-base; // This can't be calculated from modal-title-padding because we are mixing px and rem units. $popout-header-height: 4rem; .path-mod-assign #page-content [data-region="grade-panel"] .mform:not(.unresponsive) .fcontainer .fitem.popout .felement { height: calc(100% - #{$popout-header-height}); } .path-mod-assign [data-region="grade-panel"] { padding-top: $spacer; } .path-mod-assign [data-region="grade-panel"] .fitem > .col-md-3, .path-mod-assign [data-region="grade-panel"] .fitem > .col-md-9 { width: 100%; padding: 0; max-width: 100%; flex: none; } .path-mod-assign [data-region="grade-panel"] fieldset, .path-mod-assign [data-region="grade-panel"] .fitem.row { margin: 0; } .path-mod-assign [data-region="grade-panel"] .mform .fitem.has-popout .felement { width: 100%; overflow: auto; height: calc(100% - 4rem); } .path-mod-assign [data-region="grade-panel"] .mform .fitem .felement { width: auto; } // Now styles for the popout sections. .path-mod-assign [data-region="grade-panel"] .popout { background-color: $modal-content-bg; } .path-mod-assign [data-region="grade-panel"] .fitem.has-popout { background-color: $card-bg; @include border-radius($card-border-radius); border: $card-border-width solid $card-border-color; padding: $card-spacer-x; margin-bottom: $spacer; } .path-mod-assign [data-region="grade-panel"] .has-popout .col-md-3 { border-bottom: $hr-border-width solid $hr-border-color; margin-bottom: $spacer; } .path-mod-assign [data-region="grade-panel"] .popout > .col-md-3 { display: flex; align-items: flex-start; justify-content: space-between; font-size: $popout-header-font-size; } .path-mod-assign [data-region="grade-panel"] .popout [data-region="popout-button"] { margin-top: 0; } // Now style the fixed header elements. .path-mod-assign [data-region="assignment-info"] { overflow-y: hidden; } .path-mod-assign [data-region="grading-navigation"] { padding: 6px; } .path-mod-assign [data-region="grade-actions"] { padding: 10px; } .path-mod-assign [data-region="user-info"] .img-rounded { margin-top: 0; } .path-mod-assign [data-region="grading-navigation-panel"] { height: 85px; } @media (max-width: 767px) { .path-mod-assign [data-region="grading-navigation-panel"] { height: auto; } .path-mod-assign [data-region="user-info"] { margin-top: 1rem; } } .path-mod-assign [data-region="grading-navigation"] [data-region="input-field"] input { width: auto; display: inline-block; } /** * Assign feedback. */ .assignfeedback_editpdf_widget * { box-sizing: content-box; } .assignfeedback_editpdf_widget button { box-sizing: border-box; } .assignfeedback_editpdf_widget .commentcolourbutton img { border-width: 0; } .assignfeedback_editpdf_widget .label { position: relative; padding: $alert-padding-y $alert-padding-x; margin-bottom: $alert-margin-bottom; border: $alert-border-width solid transparent; @include border-radius($alert-border-radius); @include alert-variant(theme-color-level('info', $alert-bg-level), theme-color-level('info', $alert-border-level), theme-color-level('info', $alert-color-level)); /* stylelint-disable-line max-line-length */ } .assignfeedback_editpdf_menu { padding: 0; } .path-mod-assign [data-region="grade-panel"] .gradingform_guide .remark .commentchooser { float: none; } .path-mod-assign [data-region="grade-panel"] .gradingform_guide .markingguideremark { width: 100%; } .path-mod-assign [data-region="grade-panel"] .mform .fitem .felement[data-fieldtype="grading"] { padding-left: $spacer; padding-right: $spacer; } .path-mod-assign [data-region="grade-panel"] .showmarkerdesc, .path-mod-assign [data-region="grade-panel"] .showstudentdesc { background-color: $card-bg; } /** * Mod LTI. */ .path-admin-mod-lti { .btn .loader img, #tool-list-loader-container .loader img { height: auto; } } boost/scss/moodle/contentbank.scss 0000604 00000007404 15062070724 0013333 0 ustar 00 .content-bank-container { .cb-content-wrapper { padding: 0.5rem; min-height: 140px; max-height: 500px; overflow-x: auto; flex-wrap: wrap; } .cb-thumbnail { width: 24px; height: 24px; background-repeat: no-repeat; background-position: center; background-size: cover; } &.view-grid { .cb-listitem { margin-bottom: 0.5rem; } .cb-listitem.cb-unlisted { position: relative; } @include media-breakpoint-down(sm) { .cb-listitem { flex-basis: 50%; } } @include media-breakpoint-up(sm) { .cb-listitem { max-width: 120px; min-width: 120px; } } .cb-name { text-align: center; } .cb-file { padding: 0.5rem; } .cb-thumbnail { width: 64px; height: 64px; margin-left: auto; margin-right: auto; margin-bottom: 0.5rem; } .cb-unlisted .cb-thumbnail { opacity: .15; } /* Display a centered eye slash on top of unlisted content icons. */ .cb-unlisted::after { @extend .fa-regular; content: fa-content($fa-var-eye-slash); position: absolute; top: 20px; left: 0; width: 100%; font-size: 26px; text-align: center; opacity: 0.9; text-shadow: 0 0 10px $body-bg; } .cb-heading, .cb-uses, .cb-date, .cb-size, .cb-type, .cb-author { display: none; } } &.view-list { .cb-content-wrapper { padding: 0 0.5rem; flex-direction: column; flex-wrap: nowrap; } .cb-thumbnail { margin-right: 0.5rem; } .cb-listitem, .cb-heading { display: flex; flex-wrap: wrap; width: 100%; border-bottom: $border-width solid $border-color; } .cb-column { display: flex; padding: 0.25rem; } .cb-column { border-right: $border-width solid $border-color; } .cb-listitem.cb-unlisted .cb-thumbnail { opacity: .3; } .cb-listitem.cb-unlisted .cb-column, .cb-listitem.cb-unlisted .cb-column a { color: $text-muted; } @include media-breakpoint-down(sm) { .cb-column { flex: 0 0 50%; max-width: 50%; } } @include media-breakpoint-up(sm) { .cb-heading { position: sticky; top: 0; z-index: 1; } .cb-file { flex: 0 0 40%; max-width: 40%; } .cb-uses, .cb-date, .cb-size, .cb-type, .cb-author { flex: 0 0 12%; max-width: 12%; } .cb-column.last { border-right: 0; } } .cb-btnsort { span { display: none; } .title { display: inline; } &.dir-none .default, &.dir-asc .asc, &.dir-desc .desc { display: inline; } } } } .cb-toolbar-container .dropdown-scrollable { max-height: 190px; overflow-y: auto; } .cb-navigation-container .singleselect, .cb-navigation-container .singleselect .custom-select { width: 100%; } boost/scss/moodle/atto.scss 0000604 00000011764 15062070724 0012000 0 ustar 00 .editor_atto_content_wrap { background-color: $atto-content-wrap-bg; color: $atto-content-wrap-color; } .editor_atto_content { padding: 4px; resize: vertical; overflow: auto; } .editor_atto_content_wrap, .editor_atto + textarea { width: 100%; padding: 0; } .editor_atto + textarea { border-radius: 0; resize: vertical; margin-top: -1px; } div.editor_atto_toolbar { display: block; background: $atto-toolbar-bg; min-height: 35px; border: 1px solid $input-border-color; width: 100%; padding: 0 0 9px 0; border-top-left-radius: $border-radius; border-top-right-radius: $border-radius; } div.editor_atto_toolbar button { padding: 4px 9px; background: none; border: 0; margin: 0; border-radius: 0; cursor: pointer; } div.editor_atto_toolbar .menuplaceholder { display: inline-block; } div.editor_atto_toolbar { button + button, .menuplaceholder + button { border-left: 1px solid $atto-toolbar-border-color; } } div.editor_atto_toolbar button[disabled] { opacity: .45; background: none; cursor: default; } .editor_atto_toolbar button:hover { background-image: radial-gradient( ellipse at center, $atto-toolbar-button-gradient-inner 60%, $atto-toolbar-button-gradient-outer 100% ); background-color: $atto-toolbar-button-hover-bg; } .editor_atto_toolbar button:active, .editor_atto_toolbar button.highlight { background-image: radial-gradient( ellipse at center, $atto-toolbar-button-gradient-inner 40%, $atto-toolbar-button-gradient-outer 100% ); background-color: $atto-toolbar-button-active-bg; } /* Make firefox button sizes match other browsers */ div.editor_atto_toolbar button::-moz-focus-inner { border: 0; padding: 0; } div.editor_atto_toolbar button .icon { padding: 0; margin: 2px 0; } div.editor_atto_toolbar div.atto_group { display: inline-block; border: 1px solid $atto-toolbar-border-color; border-bottom: 1px solid $atto-toolbar-group-border-bottom-color; border-radius: 4px; margin: 9px 0 0 9px; background: $atto-toolbar-group-bg; } div.editor_atto_toolbar .atto_toolbar_row { margin: 6px 0 -3px 5px; display: table; div.atto_group { margin: 3px 5px 3px 4px; } } .editor_atto_content img { resize: both; overflow: auto; } .atto_hasmenu { /* IE8 places the images on top of each other if that is not set. */ white-space: nowrap; } .atto_menuentry .icon { width: 16px; height: 16px; } .atto_menuentry { clear: left; } .atto_menuentry h1, .atto_menuentry h2, .atto_menuentry p { margin: 4px; } /*.atto_form label.sameline { display: inline-block; min-width: 10em; }*/ .atto_form textarea.fullwidth, .atto_form input.fullwidth { width: 100%; } .atto_form { padding: 0.5rem; } /*.atto_form label { display: block; margin: 0 0 5px 0; }*/ .atto_control { position: absolute; right: -6px; bottom: -6px; display: none; cursor: pointer; } .atto_control .icon { background-color: $atto-control-icon-bg; } div.editor_atto_content:focus .atto_control, div.editor_atto_content:hover .atto_control { display: block; } .editor_atto_menu.yui3-menu-hidden { display: none; } /* Get broken images back in firefox */ .editor_atto_content img:-moz-broken { -moz-force-broken-image-icon: 1; min-width: 24px; min-height: 24px; } /* Atto menu styling */ .moodle-dialogue-base .editor_atto_menu .moodle-dialogue-content .moodle-dialogue-bd { padding: 0; z-index: 1000; } .editor_atto_menu .dropdown-menu > li > a { margin: 3px 14px; } .editor_atto_menu .open ul.dropdown-menu { padding-top: 5px; padding-bottom: 5px; } .editor_atto_wrap { position: relative; } /*rtl:ignore*/ .editor_atto_wrap textarea { direction: ltr; } .editor_atto_notification { display: inline-block; padding: 0.5em; padding-left: 1em; padding-right: 1em; border-bottom-left-radius: 1em; border-bottom-right-radius: 1em; .atto_info { background-color: $atto-notif-info; } .atto_warning { background-color: $atto-notif-warning; } } .editor_atto_toolbar, .editor_atto_content_wrap, .editor_atto + textarea { box-sizing: border-box; } .editor_atto_content.form-control { width: 100%; border-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; } /** Atto fields do not have form-control because that would break the layout of the editor. So they need these extra styles to highlight the editor when there is a validation error. */ .has-danger .editor_atto_content.form-control, .has-danger .editor_atto_content.form-control-danger { @include form-validation-state('invalid', $form-feedback-invalid-color, $form-feedback-icon-invalid); } .open.atto_menu > .dropdown-menu { display: block; } div.editor_atto_toolbar button .icon { color: $atto-toolbar-button-color; } boost/scss/moodle/layout.scss 0000604 00000013307 15062070724 0012341 0 ustar 00 .layout { &.fullscreen { height: 100vh; position: fixed; top: 0; left: 0; z-index: $zindex-modal-backdrop; @include transition(0.5s); width: 100vw; margin: 0; opacity: 1; background-color: $modal-content-bg; > div { height: 100%; width: 100%; } .loading-icon { margin-left: auto; margin-right: auto; text-align: center; display: inline-block; width: 100%; top: 40%; position: fixed; .icon { width: 1em; height: 1em; font-size: 4em; } } } } #page.drawers { margin-top: $navbar-height; @include thin-scrolls($gray-100); .main-inner { max-width: 100%; width: 100%; margin: 0 auto; @include border-radius(); background-color: $white; padding: 1.5rem 0.5rem; margin-top: 0.5rem; margin-bottom: 3rem; flex: 1 0 auto; } .activity-header { margin-left: 15px; margin-right: 15px; } } @include media-breakpoint-up(md) { .pagelayout-standard, body.limitedwidth { #page.drawers { .main-inner { max-width: $course-content-maxwidth; } .footer-popover { max-width: $course-content-maxwidth; width: 100%; margin: 0 auto; @include border-radius(); } } } body.mediumwidth { #page.drawers { .main-inner { max-width: $medium-content-maxwidth; } .footer-popover { max-width: $medium-content-maxwidth; width: 100%; margin: 0 auto; @include border-radius(); } } } .header-maxwidth { max-width: $course-content-maxwidth; margin: 0 auto; padding-left: 15px; padding-right: 15px; .header-inner { padding-left: 0; padding-right: 0; } } } .drawer-toggles { .drawer-toggler { position: fixed; top: calc(#{$navbar-height} + 0.7rem); z-index: 2; .btn { border-radius: 200px; padding: 16px; background-color: $gray-300; box-shadow: $box-shadow-sm; .icon { width: auto; height: auto; } &:focus { box-shadow: $input-btn-focus-box-shadow; } transition: padding 200ms; } } .drawer-left-toggle { left: 0; .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; padding-right: 14px; padding-left: 10px; &:hover { padding-left: 20px; } } } .drawer-right-toggle { right: 0; .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; padding-right: 10px; padding-left: 14px; &:hover { padding-right: 20px; } } } } #page.drawers.show-drawer-left .drawer-left-toggle { display: none; } #page.drawers.show-drawer-right .drawer-right-toggle { display: none; } @include media-breakpoint-down(sm) { //the scroll to top button .drawer-toggles { z-index: 100; .drawer-right-toggle, .drawer-left-toggle { top: calc(99vh - (#{$navbar-height} * 2.5)); } } #page.drawers.scroll-down { .drawer-right-toggle { transform: translateX(150%); pointer-events: auto; visibility: hidden; } .drawer-left-toggle { transform: translateX(-150%); pointer-events: auto; visibility: hidden; } } } @include media-breakpoint-up(sm) { #page.drawers .main-inner { margin-top: 1.5rem; } } @include media-breakpoint-up(md) { // Add some padding for the drawer toggle buttons #page.drawers { padding-left: 3rem; padding-right: 3rem; .main-inner { padding: 1.5rem 0.5rem; } div[role="main"] { padding-left: 15px; padding-right: 15px; } } } @include media-breakpoint-up(lg) { .drawer-left, .drawer-right { top: $navbar-height; height: calc(100vh - #{$navbar-height}); } .hasstickyfooter { .drawer-left, .drawer-right { top: $navbar-height; height: calc(100vh - #{$navbar-height} - #{$stickyfooter-height}); } } #page.drawers { position: relative; overflow-y: visible; @include transition(0.2s); left: 0; right: 0; &.show-drawer-left { margin-left: $drawer-left-width; margin-right: 0; padding-left: 1rem; } &.show-drawer-right { margin-left: 0; margin-right: $drawer-right-width; padding-right: 1rem; .jsenabled & .btn-footer-popover, .jsenabled & .btn-footer-communication { right: calc(#{$drawer-right-width} + 2rem); } } &.show-drawer-left.show-drawer-right { margin-left: $drawer-left-width; margin-right: $drawer-right-width; } &.hasstickyfooter { margin-bottom: $stickyfooter-height; } } } .drawercontrolbuttons { margin-top: 92px; .buttons { z-index: 1; } } boost/scss/moodle/expendable.scss 0000604 00000001472 15062070724 0013133 0 ustar 00 table.flexible, .generaltable { tbody tr:nth-of-type(#{$table-striped-order}) { background-color: $table-accent-bg; } } table { caption { font-size: 24px; font-weight: bold; line-height: 42px; text-align: left; caption-side: top; } } #page-report-loglive-index .generaltable, #page-admin-report-log-index .generaltable, #page-report-log-user .generaltable, #page-admin-user table, .environmenttable, .category_subcategories, .rcs-results { th, td { padding: $table-cell-padding-sm; } } .forumheaderlist, .generaltable, table.flexible, .category_subcategories, table#modules, table#permissions { tbody tr { @include hover { color: $table-hover-color; background-color: $table-hover-bg; } } } boost/scss/moodle/user.scss 0000604 00000012343 15062070724 0012001 0 ustar 00 /* user.less */ .userprofile .fullprofilelink { text-align: center; margin: 10px; } .userprofile .page-context-header { margin-bottom: 10px; column-count: 1; } .userprofile .description { margin-top: 10px; margin-bottom: 30px; } .userprofile .profile_tree { column-count: 2; } // This rule overrides the automatic no-overflow on the participants table. It kills the auto-complete. #participantsform .no-overflow { overflow: visible; } .userprofile dl.list { // Copied from dl.row. > dd + dt { clear: left; } } .user-box { margin: 8px; width: 115px; height: 160px; text-align: center; float: left; clear: none; } #page-user-profile .node_category, .path-user .node_category { ul { margin: 0; list-style: none; padding-left: 0; } li { margin-top: 5px; } .editprofile, .viewmore { text-align: right; } } .ajax-contact-button { box-sizing: border-box; position: relative; &.loading { .loading-icon { display: block; } } .loading-icon { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: $user-loading-icon-bg; .icon { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } } } @media (max-width: 480px) { .userprofile .profile_tree { /** Display the profile on one column on phones@mixin */ column-count: 1; } } .userlist #showall { margin: 10px 0; } .userlist .buttons { text-align: center; } .userlist .buttons label { padding: 0 3px; } .userlist table#participants { text-align: center; } .userlist table#participants td { text-align: left; padding: 4px; vertical-align: middle; } .userlist table#participants th { text-align: left; padding: 4px; } .userlist { table.controls { width: 100%; tr { vertical-align: top; } .right { text-align: right; } .groupselector { margin-bottom: 0; margin-top: 0; label { display: block; } } } } .userinfobox { width: 100%; border: 1px solid; border-collapse: separate; padding: 10px; } .userinfobox .left, .userinfobox .side { width: 100px; vertical-align: top; } .userinfobox .userpicture { width: 100px; height: 100px; } .userinfobox .content { vertical-align: top; } .userinfobox .links { width: 100px; padding: 5px; vertical-align: bottom; } .userinfobox .links a { display: block; } .userinfobox .list td { padding: 3px; } .userinfobox .username { padding-bottom: 20px; font-weight: bold; } .userinfobox td.label { text-align: right; white-space: nowrap; vertical-align: top; font-weight: bold; } .group-edit { position: absolute; right: 0; margin-right: 0.6em; } .group-image { display: block; float: left; margin-right: 1em; .grouppicture { border-radius: 50%; } } .groupinfobox .left { padding: 10px; width: 100px; vertical-align: top; } .course-participation #showall { text-align: center; margin: 10px 0; } #user-policy .noticebox { text-align: center; margin-left: auto; margin-right: auto; margin-bottom: 10px; width: 80%; height: 250px; } #user-policy #policyframe { width: 100%; height: 100%; } .iplookup #map { margin: auto; } .userselector select { width: 100%; } .userselector div { margin-top: 0.2em; } .userselector div label { margin-right: 0.3em; } /* Next style does not work in all browsers but looks nicer when it does */ .userselector .userselector-infobelow { font-size: 0.8em; } #userselector_options .collapsibleregioncaption { font-weight: bold; } #userselector_options p { margin: 0.2em 0; text-align: left; } /** user full profile */ #page-user-profile .messagebox { text-align: center; margin-left: auto; margin-right: auto; } /** user course profile */ #page-course-view-weeks .messagebox { text-align: center; margin-left: auto; margin-right: auto; } .profileeditor { > .singleselect { margin: 0 0.5em 0 0; } > .singlebutton { display: inline-block; margin: 0 0 0 0.5em; div, input { margin: 0; } } } // Remove the little cog from participants page because we are putting a cog menu there. .userlist h3 .action-icon { display: none; } #page-enrol-users .popover { max-width: none; } .user-enroller-panel { width: 600px; } [data-filterverbfor], [data-filterregion="filter"]:last-child [data-filterregion="joinadverb"] { display: none; } [data-filterverb="0"] [data-filterverbfor="0"], [data-filterverb="1"] [data-filterverbfor="1"], [data-filterverb="2"] [data-filterverbfor="2"] { display: block; } [data-filterregion="value"] { div:first-of-type { @extend .align-top; } } #page-user-contactsitesupport { .supporticon { i { font-size: 35px; } } } boost/scss/moodle/message.scss 0000604 00000036233 15062070724 0012453 0 ustar 00 /** The message area **/ @mixin setSelectedContact() { background-color: $message-selected-bg; color: $message-selected-color; border: none; .information { .lastmessage { color: $message-selected-color; } } .picture { border: none; } } .hidden { display: none; } .preferences-container { .container-fluid { padding: 0; .col-md-6 { min-height: 20px; } } .align-bottom { vertical-align: bottom; } .preference-table { border: 1px solid $message-preference-table-border-color; thead { th { text-align: center; .config-warning { display: none; } &.unconfigured { .config-warning { display: inline-block; } } } } tr { th { border-left: 1px solid $border-color; } td { &:not(:first-child) { width: 150px; text-align: center; } &:nth-child(even) { border: 1px solid $border-color; } } } .preference-row { .hover-tooltip-container { display: inline-block; } .preference-name { vertical-align: middle; } .disabled-message { text-align: center; height: 30px; line-height: 30px; } &.loading { .preference-name { .loading-icon { display: block; } } } } } } .disabled-message { display: none; } .disabled { .disabled-message { display: block; + form { display: none; } } } .general-settings-container { .loading-icon { display: none; } .loading { .loading-icon { display: inline-block; } } label { display: inline-block; } } .processor-container { position: relative; .loading-container { display: none; position: absolute; width: 100%; height: 100%; text-align: center; background-color: $message-loading-bg; .vertical-align { height: 100%; width: 0%; display: inline-block; vertical-align: middle; } } &.loading { .loading-container { display: block; } } } .preferences-page-container { .checkbox-container { margin: 30px 5px; line-height: 20px; input { line-height: 20px; margin: 0; } .loading-icon { display: none; } &.loading { .loading-icon { display: inline-block; } } } } .notification-area { height: 600px; @media (max-height: 670px) { height: 500px; } box-sizing: border-box; border-radius: 4px; margin-bottom: 30px; border: 1px solid $message-notif-area-border-color; .control-area { box-sizing: border-box; display: inline-block; width: 300px; height: 100%; overflow: auto; -webkit-overflow-scrolling: touch; border-right: 1px solid $message-notif-area-border-color; .content { position: relative; .content-item-container { cursor: pointer; } &:empty + .empty-text { display: block; } } .loading-icon { display: none; } .empty-text { display: none; text-align: center; padding-top: 20px; } &.loading { .loading-icon { display: block; text-align: center; box-sizing: border-box; padding: 5px; } .content:empty + .empty-text { display: none; } } } .content-area { box-sizing: border-box; display: inline-block; width: calc(100% - 300px); float: right; .toggle-mode { display: none; } .header { height: 50px; box-sizing: border-box; border-bottom: 1px solid $message-notif-area-border-color; padding: 5px; .image-container { display: inline-block; height: 25px; width: 24px; float: left; } .subject-container { display: inline-block; max-width: calc(100% - 24px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; height: 25px; padding-left: 5px; box-sizing: border-box; } .timestamp { font-size: 10px; line-height: 10px; margin: 0; color: $message-notif-area-timestamp-color; margin-left: 30px; } &:empty { display: none; } } > .content { height: 500px; @media (max-height: 670px) { height: 400px; } box-sizing: border-box; overflow: auto; -webkit-overflow-scrolling: touch; padding: 15px; &:empty { display: none; & + .empty-text { display: block; text-align: center; padding-top: 100px; } } } .empty-text { display: none; } .footer { height: 50px; box-sizing: border-box; text-align: center; a { line-height: 50px; } &:empty { display: none; } } } } @media (max-width: 979px) { .notification-area { position: relative; overflow: hidden; .control-area { border-right: none; width: 100%; position: absolute; top: 0; left: 0; opacity: 1; visibility: visible; transition: left 0.25s; } .content-area { width: 100%; position: absolute; top: 0; right: -100%; opacity: 0; visibility: hidden; transition: right 0.25s, opacity 0.25s, visibility 0.25s; .toggle-mode { display: inline-block; float: left; width: 70px; height: 50px; line-height: 50px; box-sizing: border-box; border-right: 1px solid $message-notif-area-border-color; border-bottom: 1px solid $message-notif-area-border-color; } .header { display: inline-block; width: calc(100% - 70px); } } &.show-content-area { .control-area { left: -100%; opacity: 0; visibility: hidden; transition: left 0.25s, opacity 0.25s, visibility 0.25s; } .content-area { right: 0; opacity: 1; visibility: visible; transition: right 0.25s; } } } } $message-send-bg: $gray-300 !default; $message-send-color: color-yiq($message-send-bg) !default; $message-send-time-color: mix($message-send-color, $message-send-bg, 100%) !default; $message-received-bg: $body-bg !default; $message-received-color: color-yiq($message-received-bg) !default; $message-received-color-muted: mix($message-received-color, $message-received-bg, 70%) !default; $message-app-bg: mix($message-send-bg, $message-received-bg, 50%) !default; $message-day-color: color-yiq($message-app-bg) !default; .drawer { .message-app { height: 100%; .icon-back-in-app { display: none; } .icon-back-in-drawer { display: inherit; } } } .message-app { display: flex; flex-direction: column; background-color: $message-app-bg; .icon-back-in-drawer { display: none; } &.main { min-height: 400px; } .header-container { flex-shrink: 0; } .overflow-y { overflow-y: auto; } @media (max-height: 320px) { .header-container [data-region="view-overview"]:not(.hidden) { display: flex; align-items: center; } .footer-container [data-region="view-overview"] { display: none; } .overflow-y { overflow-y: unset; } } .body-container { flex: 1; overflow: hidden; & > * { position: absolute; right: 0; left: 0; top: 0; bottom: 0; overflow: auto; } } .footer-container { flex-shrink: 0; textarea { direction: ltr; } } .contact-status { position: absolute; left: 39px; top: 39px; width: 10px; height: 10px; border-radius: 50%; &.online { border: 1px solid $body-bg; background-color: $green; } } .message { p { margin: 0; } } .clickable { cursor: pointer; &:hover { filter: drop-shadow(2px 2px 2px $message-clickable-hover-shadow); } } a, .btn-link { color: inherit; } .btn-link { &:hover, &:focus { background-color: rgba($black, .035); text-decoration: none; } } .icon { margin-right: 0; } .overview-section-toggle { .collapsed-icon-container { display: none; } .expanded-icon-container { display: inline-block; } &.collapsed { .collapsed-icon-container { display: inline-block; } .expanded-icon-container { display: none; } } } .btn.btn-link.btn-icon { height: $icon-width; width: $icon-width; padding: 0; border-radius: 50%; flex-shrink: 0; @include hover-focus { background-color: $gray-200; } @each $size, $length in $iconsizes { &.icon-size-#{$size} { height: ($length + 20px) !important; /* stylelint-disable-line declaration-no-important */ width: ($length + 20px) !important; /* stylelint-disable-line declaration-no-important */ } } } .view-overview-body { .section { display: block; &.expanded { display: flex; } div[data-region="toggle"] { padding: 0.1rem; } } } .view-conversation { .content-message-container { img { max-width: 100%; } } } .list-group { border-radius: 0; .list-group-item { border-left: 0; border-right: 0; &:hover { color: $white; background-color: $primary; .badge-primary { background-color: $white; color: $primary; } } &:first-child { border-top: 0; } &:last-child { border-bottom: 0; } &.list-group-item-action { margin: 0.1rem; width: auto; text-align: inherit; } } } .last-message { min-height: 1.5rem; } .section { .collapsing { overflow: hidden; } } .message { &.send { background-color: $message-send-bg; color: $message-send-color; .time { color: $message-send-time-color; } .tail { right: 0; margin-right: -0.5rem; border-bottom-color: $message-send-bg; } } &.received { background-color: $message-received-bg; color: $message-received-color; .time { color: $message-received-color-muted; } .tail { left: 0; margin-left: -0.5rem; border-bottom-color: $message-received-bg; } } .tail { content: ''; bottom: 0; width: 0; height: 0; border: 0.5rem solid transparent; position: relative; } } .day { color: $message-day-color; } .lazy-load-list { overflow-y: auto; } } #page-message-index { #page-header { display: none; } #region-main { height: 100%; margin-top: 0; .conversationcontainer { .section { max-height: calc(100vh - 50px); } } div[role="main"] { height: 100%; #maincontent { margin-top: -1px; } .message-app.main { height: 100%; } } } } .dir-rtl { .message-drawer { box-shadow: 2px 2px 4px $message-drawer-shadow; } } .message-app { .emoji-picker-container { position: absolute; top: -5px; right: 5px; transform: translateY(-100%); .emoji-picker { .picker-row { // To override the button styling for the message app. .emoji-button { height: $picker-emoji-button-size; width: $picker-emoji-button-size; } } } @include media-breakpoint-down(xs) { right: -1 * map-get($spacers, 2); } } @media (max-height: 495px) { .emoji-picker-container { position: fixed; top: 0; transform: none; } } .emoji-auto-complete-container { overflow: auto; // Add a 50px buffer to account for scroll bars. max-height: $picker-row-height + 50px; transition: max-height .15s ease-in-out; visibility: visible; &.hidden { display: block; max-height: 0; visibility: hidden; overflow: hidden; transition: max-height .15s ease-in-out, visibility 0s linear .15s, overflow 0s linear .15s; } } } boost/scss/moodle/process-monitor.scss 0000604 00000001564 15062070724 0014171 0 ustar 00 // The popover process monitor. $popover-process-monitor-right: 2rem !default; $popover-process-monitor-bottom: 5rem !default; $popover-process-monitor-max-height: 30vh !default; $popover-process-monitor-width: 350px !default; $popover-process-monitor-scroll-bg: $gray-100 !default; .popover-process-monitor { position: fixed; right: $popover-process-monitor-right; bottom: $popover-process-monitor-bottom; width: $popover-process-monitor-width; background-color: $white; @include border-radius(); border: $border-width solid $border-color; .process-list { max-height: $popover-process-monitor-max-height; overflow: auto; @include thin-scrolls($popover-process-monitor-scroll-bg); } .queue-process { border-bottom: 1px solid $gray-200; } .queue-process:last-child { border-bottom: 0; } } boost/scss/moodle/forms.scss 0000604 00000027132 15062070724 0012153 0 ustar 00 /** * Moodle forms HTML isn't changeable via renderers (yet?) so this * .less file imports styles from the bootstrap $variables file and * adds them to the existing Moodle form CSS ids and classes. * */ .jsenabled .mform .containsadvancedelements .advanced { display: none; } .mform .containsadvancedelements .advanced.show { display: flex; } #adminsettings span.error { display: inline-block; border: 1px solid $state-danger-border; border-radius: 4px; background-color: $state-danger-bg; padding: 4px; margin-bottom: 4px; } .mform .form-inline { .form-control, .custom-select { max-width: 100%; } textarea.form-control { width: 100%; } .form-group { margin: 0.1rem 0.25rem 0.1rem 0; } br + label { justify-content: flex-start; width: 100%; margin-right: 0; } } .unresponsive.mform .form-inline, .unresponsive.mform .form-inline label { display: inline-flex; } #jump-to-activity.custom-select { width: 100%; } .mform fieldset { margin-bottom: $spacer * 0.5; border-bottom: $border-width solid $table-border-color; } #adminsettings .form-control[size] { width: auto; } #adminsettings .error { color: $danger; } .mform ul.file-list { padding: 0; margin: 0; list-style: none; } .mform label .req, .mform label .adv { cursor: help; } /*rtl:ignore*/ input#id_externalurl { direction: ltr; } #portfolio-add-button { display: inline; } .form-defaultinfo, .form-label .form-shortname { color: $text-muted; } .form-label .form-shortname { font-size: $font-size-xs; display: block; } .form-item .form-inline { display: inline; } .form-inline label:not(.sr-only):not(.accesshide) + select { margin-left: 0.5rem; } .formsettingheading .form-horizontal { color: $text-muted; } // Moodle doesn't differentiate between what Bootstrap calls // .uneditable-inputs and form help text. Styling them both as // uneditable looks ugly, styling both as form help is fairly // subtle in it's impact. Going for the latter as the best option. .no-felement.fstatic { color: $text-muted; padding-top: 5px; } .no-fitem .fstaticlabel { font-weight: bold; } .form-item .form-setting .defaultsnext > input { display: inline-block; } .form-item .form-setting .form-checkbox.defaultsnext { // Need to specify .defaultsnext and the .form-checkbox class // is somewhat randomly re-used on various actual checkboxes // throughout the admin forms, instead of on the wrapper div. margin-top: 5px; // Push down checkboxes to align. display: inline-block; // So above style sticks. } #adminsettings h3 { // Copied from bootstrap/forms.less tag legend. display: block; width: 100%; padding: 0; margin-bottom: $line-height-base; font-size: $font-size-lg; line-height: $line-height-base * 2; border: 0; border-bottom: 1px solid $forms-adminsettings-border-bottom-color; } // I think this could be avoided (or at least tidied up) ifr // we used HTML5 input types like url, phone, email, number etc. /* rtl:ignore */ .mform .fitem .felement input[name="email"], .mform .fitem .felement input[name="email2"], .mform .fitem .felement input[name="url"], .mform .fitem .felement input[name="idnumber"], .mform .fitem .felement input[name="phone1"], .mform .fitem .felement input[name="phone2"] { text-align: left; direction: ltr; } // Reduce the mediaplugin width when using inside forms. .que.match .mediaplugin { width: 50vw; } /* rtl:ignore */ #page-admin-grade-edit-scale-edit .error input#id_name { margin-right: 170px; } #page-grade-edit-outcome-course .courseoutcomes { margin-left: auto; margin-right: auto; width: 100%; } #page-grade-edit-outcome-course .courseoutcomes td { text-align: center; } /* Install Process' text fields Forms, should always be justified to the left */ /* rtl:ignore */ #installform #id_wwwroot, #installform #id_dirroot, #installform #id_dataroot, #installform #id_dbhost, #installform #id_dbname, #installform #id_dbuser, #installform #id_dbpass, #installform #id_prefix { direction: ltr; } .mdl-right > label { // Workaround for repository pop-up because the : are outside the label, // can/should be fixed in filemanager renderers. display: inline-block; } .singleselect { max-width: 100%; } .form-item .form-label label { margin-bottom: 0; } div#dateselector-calendar-panel { z-index: 3100; /* Set higher than the z-index of the filemanager - see MDL-39047. */ } fieldset.coursesearchbox label { display: inline; } /** * Show the labels above text editors and file managers except on wide screens. */ /* Section and module editing forms contain special JS components for the availability system (if enabled). */ #id_availabilityconditionsjson[aria-hidden=true], .availability-field [aria-hidden=true] { display: none; } .availability-field { label { display: inline-flex; } .availability-group label { vertical-align: top; } } .availability-eye { clear: left; float: left; } .availability-inner, .availability-plugincontrols { float: left; @include border-radius($card-border-radius); border: $card-border-width solid $card-border-color; padding: 1rem; margin-top: 0.5rem; } .availability-plugincontrols, .availability-childlist .availability-inner { margin-left: .625rem; } .availability-field .availability-plugincontrols .availability-group select { max-width: 12rem; } /* Custom styles for autocomplete form element */ /* These styles reserve a standard amount of space in the DOM to avoid flicker when the original select element is replaced */ [data-fieldtype=autocomplete] select, [data-fieldtype=tags] select, .form-autocomplete-original-select { visibility: hidden; overflow: hidden; width: 15rem; height: 44px; margin: 0; padding: 0; border: 0; margin-top: $font-size-base * $line-height-base + $input-padding-y-sm; vertical-align: bottom; } .form-autocomplete-selection { margin: $input-padding-y-sm 0; // Padding top and bottom, plus mb-1 and the 100% lineheight. min-height: 2 * $input-padding-y-sm + 2 * $font-size-base; } .form-autocomplete-selection [role=option] { cursor: pointer; white-space: inherit; word-break: break-word; line-height: 1.4; text-align: left; } .form-autocomplete-suggestions { position: absolute; background-color: $forms-autocomplete-bg; border: $border-width solid $input-border-color; min-width: 206px; max-height: 20em; overflow: auto; margin: $dropdown-spacer 0 0; padding: $dropdown-padding-y 0; z-index: 3; } .form-autocomplete-suggestions li { list-style-type: none; padding: $dropdown-item-padding-y $dropdown-item-padding-x; margin: 0; cursor: pointer; color: $body-color; &:hover, &:focus, &[aria-selected="true"] { background-color: $dropdown-link-active-bg; color: $dropdown-link-active-color; } &[aria-disabled="true"] { pointer-events: none; color: $custom-select-disabled-color; background-color: $custom-select-disabled-bg; } &::before { content: "\200B"; } } .form-autocomplete-downarrow { color: $body-color; top: 0.2rem; right: 0.5rem; cursor: pointer; .loading-icon { position: absolute; top: 0; left: 0; background-color: $white; } } /** Undo some bootstrap things */ .form-autocomplete-selection + input.form-control { width: auto; display: inline-block; vertical-align: middle; } .form-autocomplete-selection [data-active-selection=true] { box-shadow: $input-btn-focus-box-shadow; } select.form-control { &[size], &[multiple] { padding-right: 0; option { width: fit-content; } } } /* Non-bootstrap selects with a size show their contents outside of the element. * Remove when we update to stable bootstrap 4. (MDL-56511) */ select[size], select[multiple] { overflow: auto; } select[size="1"] { overflow: visible; } textarea[data-auto-rows] { overflow-x: hidden; resize: none; } /** Display elements under labels in vertical forms regardless of the screen size. */ .mform.full-width-labels { .fitem.row { margin-left: 0; margin-right: 0; & > .col-md-3, & > .col-md-9 { flex: 0 0 100%; max-width: 100%; width: inherit; padding-right: 0; padding-left: 0; } &.femptylabel > .col-md-3 { display: none; } .form-control { width: 100%; } } } .mform .col-form-label .form-label-addon { margin-left: 0.25rem; } @include media-breakpoint-up(sm) { .mform:not(.full-width-labels) .col-form-label .form-label-addon { margin-left: auto; } } /** Allow wrapping an mform in a div with the form-inline class to have an inline, responsive form. */ .form-inline { @include media-breakpoint-up(md) { .col-md-9, .col-md-3 { label { margin-left: 1rem; } margin-bottom: 1rem; width: auto; } } } [data-fieldtype="modgrade"] .form-group { padding-bottom: $input-padding-y; } // We dont' use the mixin because it's expensive. [data-fieldtype="modgrade"] { background-color: $card-bg; @include border-radius($card-border-radius); border: $card-border-width solid $card-border-color; padding: $card-spacer-x; margin-left: $grid-gutter-width * 0.5; max-width: 30rem; } // Styles for the JS file types browser provided by the "filetypes" element. [data-filetypesbrowserbody] { [aria-expanded="false"] > [role="group"], [aria-expanded="false"] [data-filetypesbrowserfeature="hideifcollapsed"], [aria-expanded="true"] [data-filetypesbrowserfeature="hideifexpanded"] { display: none; } } // The autocomplete popup needs a display:block container to correctly position to popup. .form-inline[data-fieldtype="autocomplete"], .form-inline[data-fieldtype="tags"] { display: block; } // Show editor at 100% width by default. [data-fieldtype="editor"] > div { flex-grow: 1; } @include media-breakpoint-up(md) { .mform fieldset .fcontainer.collapseable .col-form-label { padding-left: ($spacer * 2.5); } } @include media-breakpoint-up(sm) { .mform { .form-inline { .fdefaultcustom { label { justify-content: initial; } } } } } .collapsemenu { .collapseall { display: block; } .expandall { display: none; } &.collapsed { .collapseall { display: none; } .expandall { display: block; } } } // Form inset on the left/right. // Used to display an icon/button within the form control. .input-group { &.form-inset { .form-inset-item { position: absolute; padding-top: calc(#{$input-padding-y} + #{$input-border-width}); z-index: 3; } &.form-inset-left { .form-control { padding-left: $spacer * 1.5; } } &.form-inset-right { .form-control { padding-right: $spacer * 1.5; } .form-inset-item { right: 0; } } } } // For form elements aligned to the left with no padding (e.g. Completion conditions activity settings). .form-check { &.left-indented { padding-left: 0; } } boost/scss/moodle/popover-region.scss 0000604 00000024245 15062070724 0014002 0 ustar 00 $standard-border: 1px solid $popover-standard-border-color; $region-container-height: 500px; $region-container-width: 380px; $region-container-z-index: 1; $region-header-height: 25px; $region-footer-height: 30px; $content-item-hover-colour-bg: $primary; $content-item-hover-colour-text: $white; $content-item-selected-colour-bg: #4f94cd; $content-item-unread-colour: #f4f4f4; $content-header-footer-height: $region-header-height + $region-footer-height; @mixin invisible() { opacity: 0; visibility: hidden; } @mixin visible() { opacity: 1; visibility: visible; } .popover-region { position: relative; &.collapsed { .popover-region-toggle { &:before, &:after { display: none; } } .popover-region-container { @include invisible(); height: 0; overflow: hidden; transition: height 0.25s, opacity 101ms 0.25s, visibility 101ms 0.25s; } } } .popover-region-toggle { cursor: pointer; &::before { content: ''; display: inline-block; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid $popover-standard-border-color; position: absolute; bottom: 0; right: 7px; } &::after { content: ''; display: inline-block; border-left: 9px solid transparent; border-right: 9px solid transparent; border-bottom: 9px solid $popover-region-toggle-border-bottom-color; position: absolute; bottom: -1px; right: 8px; z-index: $region-container-z-index + 1; } } .count-container { padding: 2px; border-radius: 2px; background-color: $danger; color: $popover-count-color; font-size: 11px; line-height: 11px; position: absolute; top: 5px; right: 0; } .popover-region-container { @include visible(); position: absolute; right: 0; top: 0; height: $region-container-height; width: $region-container-width; border: $standard-border; transition: height 0.25s; background-color: $popover-region-container-bg; z-index: $region-container-z-index; } .popover-region-header-container { height: $region-header-height; line-height: $region-header-height; padding-left: 5px; padding-right: 5px; border-bottom: $standard-border; box-sizing: border-box; } .popover-region-footer-container { height: $region-footer-height; text-align: center; border-top: $standard-border; background-color: $popover-bg; padding-top: 3px; } .popover-region-header-text { float: left; margin: 0; font-size: 14px; line-height: $region-header-height; } .popover-region-header-actions { float: right; > * { margin-left: 10px; min-width: 20px; display: inline-block; } .loading-icon { display: none; height: 12px; width: 12px; } .newmessage-link { margin-right: 10px; } label { display: inline-block; text-align: center; margin-bottom: 0; } } .popover-region-content-container { height: calc(100% - #{$content-header-footer-height}); width: 100%; overflow-y: auto; -webkit-overflow-scrolling: touch; > .loading-icon { display: none; text-align: center; padding: 5px; box-sizing: border-box; } .empty-message { display: none; text-align: center; padding: 10px; } &.loading { > .loading-icon { display: block; } .empty-message { display: none; } } } .navbar-nav { .popover-region { .icon { font-weight: bolder; } } } .navbar { .popover-region { &.collapsed { .popover-region-container { @include invisible(); height: 0; overflow: hidden; transition: height 0.25s, opacity 101ms 0.25s, visibility 101ms 0.25s; } } } .count-container { padding: 2px; border-radius: 2px; background-color: $danger; color: $popover-count-color; font-size: 11px; line-height: 11px; position: absolute; top: $navbar-height * 0.25; right: 0; } .popover-region-container { top: $navbar-height; } } .content-item-container { width: 100%; border-bottom: $standard-border; box-sizing: border-box; padding: 5px; position: relative; margin: 0; display: block; color: inherit; text-decoration: none; &:hover { color: $content-item-hover-colour-text; background-color: $content-item-hover-colour-bg; .content-item-footer { .timestamp { color: $content-item-hover-colour-text; } } .view-more { color: inherit; } } &.unread { margin: 0; background-color: $content-item-unread-colour; &:hover { color: $content-item-hover-colour-text; background-color: $content-item-hover-colour-bg; } .content-item-body { .notification-message { font-weight: 600; } } } .context-link { color: inherit; text-decoration: none; } .content-item-body { box-sizing: border-box; margin-bottom: 5px; } .content-item-footer { text-align: left; box-sizing: border-box; .timestamp { font-size: 10px; line-height: 10px; margin: 0; color: inherit; margin-left: 24px; } } .view-more { &:hover { color: inherit; } position: absolute; bottom: 5px; right: 5px; font-size: 12px; line-height: 12px; } &.notification { .content-item-body { .notification-image { display: inline-block; width: 24px; height: 24px; float: left; img { height: 75%; } } .notification-message { display: inline-block; font-size: 12px; width: calc(100% - 24px); } } } &.selected { background-color: $content-item-selected-colour-bg; color: $content-item-hover-colour-text; border-color: $content-item-selected-colour-bg; .content-item-footer { .timestamp { color: $content-item-hover-colour-text; } } } } .popover-region-notifications { .popover-region-header-container { .mark-all-read-button { .normal-icon { display: inline-block; } &.loading { .normal-icon { display: none; } .loading-icon { display: inline-block; } } } } .all-notifications { @include visible(); height: auto; overflow: hidden; &:empty + .empty-message { display: block; } } .notification-image { display: inline-block; width: 8%; vertical-align: top; img { height: 75%; } } .notification-message { display: inline-block; font-size: 12px; } .popover-region-content-container { &.loading { .all-notifications { &:empty + .empty-message { display: none; } } } } } .popover-region-messages { .mark-all-read-button { .normal-icon { display: inline-block; } &.loading { .normal-icon { display: none; } .loading-icon { display: inline-block; } } } .popover-region-content-container { &.loading { .popover-region-content { .messages { &:empty + .empty-message { display: none; } } } } } .messages { &:empty + .empty-message { display: block; } } .content-item-container { &.unread { .content-item-body { font-weight: 600; width: calc(90% - 30px); } .unread-count-container { display: inline-block; width: 10%; text-align: center; float: right; } } } .content-item { height: 100%; width: 100%; box-sizing: border-box; } .profile-image-container { width: 30px; display: inline-block; text-align: center; float: left; img { width: 100%; display: inline-block; vertical-align: middle; border-radius: 50%; } } .content-item-body { display: inline-block; box-sizing: border-box; width: calc(100% - 30px); font-size: 12px; padding-left: 10px; overflow: hidden; h3 { font-size: 12px; line-height: 12px; margin: 0; width: 100%; } p { margin: 0; } } .unread-count-container { display: none; } } @media (max-width: 767px) { .navbar { .popover-region { .popover-region-container { right: -70px; } } } } @media (max-width: 480px) { .navbar { .popover-region { .popover-region-container { position: fixed; top: 46px; right: 0; left: 0; bottom: 0; width: auto; height: auto; } } } } boost/scss/moodle/secondarynavigation.scss 0000604 00000001056 15062070724 0015071 0 ustar 00 .secondary-navigation { padding-bottom: 15px; .navigation { border-bottom: 1px solid $nav-tabs-border-color; background-color: $body-bg; margin: 0 -0.5rem; padding: 0 0.5rem; .nav-tabs { border: none; max-width: $course-content-maxwidth; margin: 0 auto; .nav-link { border-radius: initial; } } } } @include media-breakpoint-up(md) { .secondary-navigation .navigation { padding: 0 calc(0.5rem + 15px); } } boost/scss/moodle/calendar.scss 0000604 00000045200 15062070724 0012572 0 ustar 00 /* calendar.less */ // Calendar colour variables defined. $calendarEventCategoryColor: #e0cbe0 !default; // Pale purple. $calendarEventCourseColor: #ffd3bd !default; // Pale red. $calendarEventGlobalColor: #d6f8cd !default; // Pale green. $calendarEventGroupColor: #fee7ae !default; // Pale yellow. $calendarEventUserColor: #dce7ec !default; // Pale blue. $calendarEventOtherColor: #ced4da !default; // Pale gray. // Border colours for the event colour indicators. $calendarEventCategoryBorderColor:#9e619f !default; // Purple. $calendarEventCourseBorderColor:#d34600 !default; // Red-orange. $calendarEventGlobalBorderColor:#2b8713 !default; // Green. $calendarEventGroupBorderColor:#9a6e02 !default; // Dark orange. $calendarEventUserBorderColor:#4e7c91 !default; // Blue. $calendarEventOtherBorderColor:#687889 !default; // Gray. // Border for the event colour indicators. $calendarEventCategoryBorder: 2px solid $calendarEventCategoryBorderColor !default; // Purple. $calendarEventCourseBorder: 2px solid $calendarEventCourseBorderColor !default; // Red-orange. $calendarEventGlobalBorder: 2px solid $calendarEventGlobalBorderColor !default; // Green. $calendarEventGroupBorder: 2px solid $calendarEventGroupBorderColor !default; // Dark orange. $calendarEventUserBorder: 2px solid $calendarEventUserBorderColor !default; // Blue. $calendarEventOtherBorder: 2px solid $calendarEventOtherBorderColor !default; // Gray. // This will be the colour of mini-calendar links, hide/show filter icons, edit/delete icon buttons. $calendarEventColor: #0d5ca1 !default; $calendarCurrentDateColor: $white; $calendarCurrentDateBackground: $primary; // Calendar event background colours defined. .calendar_event_category { background-color: $calendarEventCategoryColor; .commands a { color: $calendarEventColor; } } .calendar_event_course { background-color: $calendarEventCourseColor; .commands a { color: $calendarEventColor; } } .calendar_event_site { background-color: $calendarEventGlobalColor; .commands a { color: $calendarEventColor; } } .calendar_event_group { background-color: $calendarEventGroupColor; .commands a { color: $calendarEventColor; } } .calendar_event_user { background-color: $calendarEventUserColor; .commands a { color: $calendarEventColor; } } .calendar_event_other { background-color: $calendarEventOtherColor; .commands a { color: $calendarEventColor; } } @mixin footer-links { span.footer-link:after { content: "\2022"; color: $primary; } span.footer-link:last-child:after { content: none; } } // Calendar restyling. .calendartable { width: 100%; table-layout: fixed; th, td { width: 14%; vertical-align: top; text-align: center; border: 0; } } .calendar-controls { .previous, .next, .current { display: block; float: left; width: 12%; } .previous { text-align: left; border: 1px solid transparent; width: 25%; } .current { text-align: center; width: 50%; } .next { text-align: right; border: 1px solid transparent; width: 25%; } .drop-target { box-sizing: border-box; border: 1px dashed $primary; } } .filters { table { border-collapse: separate; border-spacing: 2px; width: 100%; } } #region-main { .maincalendar { .calendarwrapper { td { & > div { height: 11.5em; overflow: hidden; } } } } } .maincalendar { vertical-align: top; padding: 0; .bottom { text-align: left; width: 98%; margin: 10px auto; @include footer-links; } .heightcontainer { height: 100%; position: relative; } .calendarmonth { width: 98%; margin: 10px auto; ul { margin: 0; padding: 0; li[data-event-folded="true"] { display: none; } li { list-style-type: none; line-height: 1.2em; > a { @include text-truncate; max-width: 100%; display: inline-block; &:hover { text-decoration: $link-decoration; .eventname { text-decoration: $link-hover-decoration; } } } a[data-action="view-day-link"] { @include text-truncate; } .icon { margin-left: 0.25em; margin-right: 0.25em; vertical-align: initial; } .calendar-circle { width: 12px; height: 12px; border-radius: 6px; vertical-align: middle; display: inline-block; &.calendar_event_category { background-color: $calendarEventCategoryColor; border: $calendarEventCategoryBorder; } &.calendar_event_course { background-color: $calendarEventCourseColor; border: $calendarEventCourseBorder; } &.calendar_event_site { background-color: $calendarEventGlobalColor; border: $calendarEventGlobalBorder; } &.calendar_event_group { background-color: $calendarEventGroupColor; border: $calendarEventGroupBorder; } &.calendar_event_user { background-color: $calendarEventUserColor; border: $calendarEventUserBorder; } &.calendar_event_other { background-color: $calendarEventOtherColor; border: $calendarEventOtherBorder; } } } } th { text-align: left; padding-left: 16px; } td { a.day:focus { display: inline-block; border-radius: 50%; box-shadow: $input-btn-focus-box-shadow; } .day-number-circle { display: inline-block; line-height: 0; width: 30px; height: 30px; .day-number { display: inline-block; padding: 50% 4px; width: 100%; text-align: center; } } &.today { .day-number-circle { border-radius: 50%; color: $calendarCurrentDateColor; background-color: $calendarCurrentDateBackground; } } } .clickable:hover { background-color: $calendar-month-clickable-bg; } } .controls { width: 98%; margin: 10px auto; } .calendar_event_category, .calendar_event_course, .calendar_event_site, .calendar_event_group, .calendar_event_user { &:hover { a { color: $link-hover-color; text-decoration: $link-hover-decoration; } } } .calendar_event_category { border-color: $calendarEventCategoryColor; } .calendar_event_course { border-color: $calendarEventCourseColor; } .calendar_event_site { border-color: $calendarEventGlobalColor; } .calendar_event_group { border-color: $calendarEventGroupColor; } .calendar_event_user { border-color: $calendarEventUserColor; } .calendar_event_other { border-color: $calendarEventOtherColor; } .calendartable { td, li { padding: 4px; } li { text-align: left; } } .header { overflow: hidden; .buttons { float: right; } } .event { .card-header img { vertical-align: baseline; } .location { word-break: break-all; overflow-wrap: break-word; } } table#subscription_details_table { td { vertical-align: middle; > .btn-group button { padding-left: 0; } } } } // Calendar export. #page-calendar-export { .indent { padding-left: 20px; } } // Block minicalendar. .block { .bottom { width: 98%; margin: 10px auto; @include footer-links; } .minicalendar { max-width: 280px; margin: 0 auto; width: 100%; th, td { padding: 2px; font-size: 0.8em; text-align: center; } td { &.weekend { color: $text-muted; } a { width: 100%; height: 100%; display: block; color: $calendarEventColor; } &.duration_global { border-top: 1px solid $calendarEventGlobalColor; border-bottom: 1px solid $calendarEventGlobalColor; &.duration_finish { background-color: $calendarEventGlobalColor; } } &.duration_category { border-top: 1px solid $calendarEventCategoryColor; border-bottom: 1px solid $calendarEventCategoryColor; &.duration_finish { background-color: $calendarEventCategoryColor; } } &.duration_course { border-top: 1px solid $calendarEventCourseColor; border-bottom: 1px solid $calendarEventCourseColor; &.duration_finish { background-color: $calendarEventCourseColor; } } &.duration_group { border-top: 1px solid $calendarEventGroupColor; border-bottom: 1px solid $calendarEventGroupColor; &.duration_finish { background-color: $calendarEventGroupColor; } } &.duration_user { border-top: 1px solid $calendarEventUserColor; border-bottom: 1px solid $calendarEventUserColor; &.duration_finish { background-color: $calendarEventUserColor; } } &.duration_other { border-top: 1px solid $calendarEventOtherColor; border-bottom: 1px solid $calendarEventOtherColor; &.duration_finish { background-color: $calendarEventOtherColor; } } } caption { font-size: inherit; font-weight: inherit; line-height: inherit; text-align: center; } } .calendar_filters { ul { list-style: none; margin: 0; padding: 0; } li { margin-bottom: 0.2em; span { &.calendar_event_category { i { color: $calendarEventColor; } } &.calendar_event_course { i { color: $calendarEventColor; } } &.calendar_event_site { i { color: $calendarEventColor; } } &.calendar_event_group { i { color: $calendarEventColor; } } &.calendar_event_user { i { color: $calendarEventColor; } } &.calendar_event_other { i { color: $calendarEventColor; } } img { padding: 0 0.2em; margin: 0; } } .icon { vertical-align: initial; margin: 0 0.1rem 0 0.4rem; } > a { &:hover { text-decoration: $link-decoration; .eventname { text-decoration: $link-hover-decoration; } } } } } .content { h3 { &.eventskey { margin-top: 0.5em; } } } } // Side block in Course view page is different with other side blocks. // We should hide the navigation text and re-arrange the Calendar links. .path-course-view { .block { &.block_calendar_month { .maincalendar { div.header { visibility: hidden; height: 0; } .calendarwrapper { .arrow_text { display: none; } } } .footer { .bottom { .footer-link { display: block; } .footer-link:after { content: none; } } } } } } /* Display month name above the calendar */ table.calendartable caption { caption-side: top; } @mixin day-number-has-event { .day-number { display: inline-block; position: relative; &:before { content: '.'; display: inline-block; position: absolute; bottom: 0.4em; left: 0; text-align: center; width: 100%; font-size: 3em; color: inherit; } } } @media (min-width: 768px) { #page-calender-view { .container-fluid { min-width: 1024px; } } } @media (min-width: 768px) { section:not(#region-main) { .block { &.block_calendar_month { .maincalendar { div.header { visibility: hidden; height: 0; } .calendarwrapper { .current { width: 40%; font-size: inherit; line-height: inherit; } .previous, .next { width: 30%; font-size: 0.8em; } } .calendartable { &.calendarmonth { th, td { border: none; text-align: center !important; // stylelint-disable-line declaration-no-important padding: 0; } td { height: auto; font-size: 0.8em; &.hasevent { [data-region="day-content"] { display: none; } @include day-number-has-event; } &:after { content: ''; display: block; margin-top: calc(100% - 26px); } &.clickable:hover { background-color: inherit; } &.clickable:not(.today):hover { .day-number-circle { border-radius: 50%; background-color: $calendar-month-clickable-bg; } } } } } } .bottom { // This adds a border on the top side of the footer container. // So we won't have to add a <hr> element in the footer_options template. border-top: $border-width solid $card-border-color; padding-top: map-get($spacers, 2); } } } } } @media (max-width: 768px) { .maincalendar { .calendartable { &.calendarmonth { th, td { border: none; text-align: center !important; // stylelint-disable-line declaration-no-important padding: 0; } td { height: auto; font-size: inherit; padding: 0; &.hasevent { [data-region="day-content"] { display: none; } @include day-number-has-event; } &:after { content: ''; display: block; margin-top: calc(100% - 26px); } & > div { height: auto !important; // stylelint-disable-line declaration-no-important } } } } } } .calendarwrapper { position: relative; } .day-popover-content { &:empty + .day-popover-alternate { display: block; } } .location-content { overflow-wrap: break-word; } .description-content { overflow-wrap: break-word; > p { margin: 0; } } .cal_courses_flt { color: $gray-600; max-width: 75%; } boost/scss/moodle/question.scss 0000604 00000032521 15062070724 0012672 0 ustar 00 /* Question */ .questionbank h2 { margin-top: 0; } .questioncategories h3 { margin-top: 0; } #chooseqtypebox { margin-top: 1em; } #chooseqtype h3 { margin: 0 0 0.3em; } #chooseqtype .instruction { display: none; } #chooseqtype .fakeqtypes { border-top: 1px solid silver; } #chooseqtype .qtypeoption { margin-bottom: 0.5em; } #chooseqtype label { display: block; } #chooseqtype .qtypename img { padding: 0 0.3em; } #chooseqtype .qtypename { display: inline-table; width: 16em; } #chooseqtype .qtypesummary { display: block; margin: 0 2em; } #chooseqtype .submitbuttons { margin: 0.7em 0; text-align: center; } #qtypechoicecontainer { display: none; } #qtypechoicecontainer_c.yui-panel-container.shadow .underlay { background: none; } #qtypechoicecontainer.yui-panel .hd { color: $question-choice-color; letter-spacing: 1px; text-shadow: 1px 1px 1px $question-choice-text-shadow; @include border-top-radius(10px); border: 1px solid $question-border-color; border-bottom: 1px solid $question-border-bottom-color; @include gradient-y($question-gradient-start-color, $question-gradient-end-color); } #qtypechoicecontainer { font-size: 12px; color: $question-choice-color; background: $question-choice-bg; @include border-radius(10px); border: 1px solid $question-border-color; border-top: 0 none; @include box-shadow(5px 5px 20px 0 $question-choice-shadow); } #qtypechoicecontainer #chooseqtype { width: 40em; } #chooseqtypehead h3 { margin: 0; font-weight: normal; } #chooseqtype .qtypes { position: relative; border-bottom: 1px solid $question-border-bottom-color; padding: 0.24em 0; } #chooseqtype .alloptions { overflow-x: hidden; overflow-y: auto; max-height: calc(100vh - 15em); width: 60%; } #chooseqtype .qtypeoption { margin-bottom: 0; padding: 0.3em 0.3em 0.3em 1.6em; } #chooseqtype .qtypeoption img { vertical-align: text-bottom; padding-left: 1em; padding-right: 0.5em; } #chooseqtype .selected { background-color: $question-type-bg; @include box-shadow(0 0 10px 0 $question-type-shadow); } #chooseqtype .instruction, #chooseqtype .qtypesummary { display: none; position: absolute; top: 0; right: 0; bottom: 0; left: 60%; margin: 0; overflow-x: hidden; overflow-y: auto; padding: 1.5em 1.6em; background-color: $question-type-bg; } #chooseqtype .instruction, #chooseqtype .selected .qtypesummary { display: block; } table.question-bank-table { margin: 0; background-color: $white; table-layout: fixed; overflow-x: scroll; width: min-content; td, th { max-width: 40vw; width: max-content; } th { text-align: left; } & > tbody > tr.r1 { background-color: $table-accent-bg; } & > tbody > tr.highlight { border: $border-width solid $info; } .checkbox input[type="checkbox"] { margin-left: 0; float: none; } .iconcol { padding: 3px; box-sizing: content-box; .icon { margin: 0; width: 12px; height: 12px; } } label { margin: 0; display: block; } .header { text-align: left; &.sortable-list-current-position { background-color: lighten($primary, 40%); } &.sortable-list-is-dragged { background-color: $white; opacity: 0.85; } .header-text > div { display: inline-block; } .dropdown-toggle::after { margin-left: 0; } &.checkbox .form-check { padding-left: 0; } } } #page-mod-quiz-edit { div.questionbankwindow div.header { margin: 0; } div.questionbankwindow.block { padding: 0; } } .questionbank .singleselect { margin: 0; } /* Question editing form */ #combinedfeedbackhdr div.fhtmleditor { padding: 0; } #combinedfeedbackhdr div.fcheckbox { margin-bottom: 1em; } #multitriesheader div.fitem_feditor { margin-top: 1em; } #multitriesheader div.fitem_fgroup { margin-bottom: 1em; } #multitriesheader div.fitem_fgroup fieldset.felement label { margin-left: 0.3em; margin-right: 0.3em; } body.path-question-type { /* Hacks to display the labels within a form group. */ .form-group .col-form-label.sr-only:not(legend):not([for="id_category"]) { position: static; width: auto; height: auto; padding: 0; margin: 0 0.5rem 0 0; overflow: visible; clip: auto; clip-path: none; border: 0; } } .que { clear: left; text-align: left; margin: 0 auto 1.8em auto; } .que .info { float: left; width: 7em; padding: 0.5em; margin-bottom: 1.8em; background-color: $gray-100; border: 1px solid darken($gray-300, 7%); @include border-radius(2px); } .que h3.no { margin: 0; font-size: 0.8em; line-height: 1; } .que span.qno { font-size: 1.5em; font-weight: bold; word-break: break-word; } .que .info > div { font-size: 0.8em; margin-top: 0.7em; } .que .info .questionflag.editable { cursor: pointer; } .que .info .editquestion img, .que .info .questionflag img, .que .info .questionflag input { vertical-align: bottom; } .que .content { margin: 0 0 0 8.5em; } .que .formulation, .que .outcome, .que .comment { position: relative; padding: $alert-padding-y $alert-padding-x; margin-bottom: $alert-margin-bottom; border: $alert-border-width solid transparent; @include border-radius($alert-border-radius); } .que .outcome, .que .comment { @include alert-variant(theme-color-level('warning', $alert-bg-level), theme-color-level('warning', $alert-border-level), theme-color-level('warning', $alert-color-level - 0.9)); /* stylelint-disable-line max-line-length */ // Darken link colour inside comments for better colour contrast against regular text. a { color: darken($link-color, 30%); } } .que .formulation { @include alert-variant(theme-color-level('info', $alert-bg-level - 1.30), theme-color-level('info', $alert-border-level), theme-color-level('info', $alert-color-level + 4)); /* stylelint-disable-line max-line-length */ } .que.multichoice .answer div.r0 .icon.fa-check, .que.multichoice .answer div.r1 .icon.fa-check, .que.multichoice .answer div.r0 .icon.fa-remove, .que.multichoice .answer div.r1 .icon.fa-remove { text-indent: 0; } .formulation input[type="text"], .formulation select { width: auto; vertical-align: baseline; } .que.multianswer .formulation .yui3-widget-positioned { box-sizing: content-box; .feedbackspan { width: inherit; max-width: inherit; } } .path-mod-quiz input[size] { width: auto; max-width: 100%; } .que .comment { @include alert-variant(theme-color-level('success', $alert-bg-level), theme-color-level('success', $alert-border-level), theme-color-level('success', $alert-color-level)); /* stylelint-disable-line max-line-length */ } .que .ablock { margin: 0.7em 0 0.3em 0; } .que .im-controls { margin-top: 0.5em; text-align: left; } .que .specificfeedback, .que .generalfeedback, .que .numpartscorrect .que .rightanswer, .que .im-feedback, .que .feedback, .que p { margin: 0 0 0.5em; } .que .correctness { &.correct { @include badge-variant($success); } &.partiallycorrect { @include badge-variant($warning); } &.notanswered, &.incorrect { @include badge-variant($danger); } } .que .qtext { margin-bottom: 1.5em; } .que .validationerror { color: map-get($theme-colors, 'danger'); } // copied from .formFieldState in mixin.less // and made more specific .que .grading, .que .comment, .que .commentlink, .que .history { margin-top: 0.5em; } .que .history h3 { margin: 0 0 0.2em; font-size: 1em; } .que .history table { width: 100%; margin: 0; } .que .history .current { font-weight: bold; } .que .questioncorrectnessicon { vertical-align: text-bottom; } body.jsenabled .questionflag input[type=checkbox] { display: none; } .que .questionflagimage { padding-right: 3px; height: 16px; width: 16px; } .importerror { margin-top: 10px; border-bottom: 1px solid $question-import-error-border-color; } .mform .que.comment .fitemtitle { width: 20%; } #page-question-preview #techinfo { margin: 1em 0; } #page-question-preview .collapsibleregion { .collapsibleregioncaption, .collapsibleregionextracontent { display: inline-block; } } // imported from quiz.css #page-mod-quiz-edit ul.slots .activityinstance { > a { display: flex; max-width: 100%; align-items: center; text-indent: 0; padding-left: 0; } img.activityicon { margin-left: 0; width: 16px; height: 16px; padding-right: 4px; } } #page-mod-quiz-edit .activity { img.activityicon { vertical-align: text-top; } } #page-mod-quiz-edit .box.generalbox.questionbank { padding: 0.5em; } #page-mod-quiz-edit .questionbank .categorypagingbarcontainer, #page-mod-quiz-edit .questionbank .categoryquestionscontainer, #page-mod-quiz-edit .questionbank .choosecategory { padding: 0; } #page-mod-quiz-edit .questionbank .choosecategory select { width: 100%; } #page-mod-quiz-edit div.questionbank .categoryquestionscontainer { background: transparent; } #page-mod-quiz-edit .questionbankwindow div.header { color: $question-bank-header-color; text-shadow: none; @include border-top-radius(4px); margin: 0 -10px 0 -10px; padding: 2px 10px 2px 10px; background: transparent; /* Old browsers */ } #page-mod-quiz-edit .questionbankwindow div.header a:link, #page-mod-quiz-edit .questionbankwindow div.header a:visited { color: $link-color; } #page-mod-quiz-edit .questionbankwindow div.header a:hover { color: $link-hover-color; } #page-mod-quiz-edit .createnewquestion { padding: 0.3em 0; div, input { margin: 0; } } #page-mod-quiz-edit .questionbankwindow div.header .title { color: $body-color; } #page-mod-quiz-edit div.container div.generalbox { background-color: transparent; padding: 1.5em; } #page-mod-quiz-edit .categoryinfo { background-color: transparent; border-bottom: none; } #page-mod-quiz-edit .createnewquestion .singlebutton input { margin-bottom: 0; } #page-mod-quiz-edit div.questionbank .categorysortopotionscontainer, #page-mod-quiz-edit div.questionbank .categoryselectallcontainer { padding: 0 0 1.5em 0; } #page-mod-quiz-edit div.questionbank .categorypagingbarcontainer { background-color: transparent; margin: 0; border-top: 0; border-bottom: 0; .paging { padding: 0 0.3em; } } #page-mod-quiz-edit div.question div.content div.questioncontrols { background-color: $body-bg; } #page-mod-quiz-edit div.question div.content div.points { margin-top: -0.5em; padding-bottom: 0; border: none; background-color: $body-bg; position: static; width: 12.1em; float: right; margin-right: 60px; } #page-mod-quiz-edit div.question div.content div.points br { display: none; } #page-mod-quiz-edit div.question div.content div.points label { display: inline-block; } #page-mod-quiz-edit div.quizpage .pagecontent .pagestatus { background-color: $body-bg; } #page-mod-quiz-edit .quizpagedelete, #page-mod-quiz-edit .quizpagedelete img { background-color: transparent; } #page-mod-quiz-edit div.quizpage .pagecontent { border: 1px solid $question-quiz-edit-border-color; @include border-radius(2px); overflow: hidden; } #page-mod-quiz-edit div.questionbank .categoryinfo { padding: 0.3em 0; } .questionbankwindow .module { width: auto; } .questionbankwindow .form-autocomplete-selection { margin-left: 0; } #page-mod-quiz-edit div.editq div.question div.content { background-color: $body-bg; border: 1px solid $question-quiz-edit-border-color; @include border-radius(2px); overflow: hidden; } #page-mod-quiz-edit ul.slots .activityinstance img.activityicon { margin-top: 0; padding-right: 4px; } .path-mod-quiz .statedetails { display: block; font-size: 0.9em; } a#hidebankcmd { color: $link-color; } // override question plugins // qtype_shortanswer .que.shortanswer .answer { padding: 0; } .que label { display: inline; } .que .content .answer div[data-region="answer-label"] .mediaplugin { width: 400px; } body.path-question-type .mform fieldset.hidden { padding: 0; margin: 0.7em 0 0; } // Fix for accurate positioning of ddwtos drag and drop question types. .que.ddwtos, .que.ddwtos .drop { box-sizing: content-box; } .tag-condition-container { position: relative; } // qbank_managecategories [data-filterregion=filter][data-filter-type=category] .form-autocomplete-suggestions li[aria-disabled=true] { font-weight: bold; color: $body-color; background-color: $body-bg; } @include media-breakpoint-down(sm) { .que .info { float: none; width: auto; } .que .content { margin: 0; } } @include media-breakpoint-down(md) { .question-bank-table { td, th { max-width: 75vw; } } } boost/scss/moodle/toasts.scss 0000604 00000002152 15062070724 0012335 0 ustar 00 @mixin toast-icon($content) { @extend .fa-solid; margin: 2px 5px 0 0; content: fa-content($content); } @mixin toast-variant($color) { background-color: rgba(theme-color-level($color, $alert-bg-level), .95); color: theme-color-level($color, $alert-color-level); .toast-header { color: theme-color-level($color, $alert-color-level); } } .toast { border-radius: $toast-border-radius; &.toast-success { @include toast-variant('success'); .toast-body:before { @include toast-icon($fa-var-check-circle); } } &.toast-danger { @include toast-variant('danger'); .toast-body:before { @include toast-icon($fa-var-times-circle); } } &.toast-info { @include toast-variant('info'); .toast-body:before { @include toast-icon($fa-var-info-circle); } } &.toast-warning { @include toast-variant('warning'); .toast-body:before { @include toast-icon($fa-var-exclamation-circle); } } .close { color: inherit; } } boost/scss/moodle/course.scss 0000604 00000121316 15062070724 0012324 0 ustar 00 /* course.less */ /* COURSE CONTENT */ .section_add_menus { text-align: right; clear: both; } .section-modchooser { clear: both; margin-top: map-get($spacers, 1); } .block_tree .tree_item.branch { margin-left: 8px; } .section_add_menus .horizontal div, .section_add_menus .horizontal form { display: inline; } .section_add_menus optgroup { font-weight: normal; font-style: italic; } /*rtl:ignore*/ .section_add_menus .urlselect { text-align: left; margin-left: .4em; } /*rtl:ignore*/ .section_add_menus .urlselect select { margin-left: .2em; } .sitetopic ul.section { margin: 0; } body:not(.editing) .sitetopic ul.section { padding-left: 0; .label .mod-indent-outer { padding-left: 0; } } @include media-breakpoint-up(sm) { .course-content ul.section { margin: $spacer; } } .section { .side { &.left { float: left; } &.right { float: right; clear: right; } margin-top: 0.5rem; } .spinner { height: 16px; width: 16px; } .activity { list-style: none; padding: map-get($spacers, 1) 0; .spinner { left: 100%; position: absolute; } /* The command block for each activity */ .actions { position: absolute; right: 0; top: 0; display: flex; } .contentwithoutlink, .activityinstance { min-width: 40%; > a { display: inline-flex; align-items: center; } .dimmed { .activityicon { opacity: .5; } } } .stealth { color: $text-muted; } a.stealth, a.stealth:hover { color: lighten($link-color, 25%) !important; /* stylelint-disable-line declaration-no-important */ } &.indented { .activity-item { border: 0; margin-left: map-get($spacers, 3); } } &.indented + .indented { .activity-item { border-top: $border-width solid $border-color; border-radius: unset; } } } .label { .contentwithoutlink, .activityinstance { padding-right: 32px; display: block; height: inherit; } @include media-breakpoint-up(sm) { .mod-indent-outer { padding-left: 24px; display: block; } } } .filler { // This must be sized like an icon to fill the space. width: 16px; height: 16px; padding: 0; margin: 0 ($spacer * 0.5); display: inline-block; } .activity.editor_displayed { a.editing_title, .moodle-actionmenu { display: none; } div.activityinstance { padding-right: initial; input { margin-bottom: initial; padding-top: initial; padding-bottom: initial; vertical-align: text-bottom; } } } } .section .activity .activityinstance { display: inline-flex; align-items: center; margin-bottom: 1rem; } .editing { .section { .activity { .contentwithoutlink, .activityinstance { padding-right: 200px; } .editing_move { position: absolute; display: flex; left: 5px; top: 5px; } .mod-indent-outer { /** * Add appropriate padding such that nothing overlaps the * absolute positioned move icon. */ padding-left: 2rem; } } } .activity .editing_move_activity { position: absolute; display: flex; left: 5px; top: 5px; } // Remove old spinners if the reactive state is ready. .course-content .stateready .section .spinner { display: none; } // New editing in progress spinners. .editinprogress { position: relative; & > * { opacity: .4; } .corelightbox, .lightbox { display: none; } &:after { @extend .fa-solid; position: absolute; font-size: 20px; color: $gray-600; content: fa-content($fa-var-spinner); display: flex; justify-content: center; align-items: center; width: 30px; height: 30px; left: calc(50% - 15px); top: calc(50% - 15px); animation: editinprogress-rotation 2s infinite linear; } // Prevent inner editingprogress. .editinprogress { &:after { display: none; } } } } @keyframes editinprogress-rotation { 0% { opacity: 0; transform: rotate(0deg); } 50% { opacity: 1; } 100% { opacity: 0; transform: rotate(359deg); } } .editing_show + .editing_assign, .editing_hide + .editing_assign { // if roles icon missing, add space margin-left: 20px; } .section .activity .commands { white-space: nowrap; display: inline-block; } .section .activity.modtype_label.label { font-weight: normal; // Remove min-height for labels so top and bottom paddings can be displayed more consistently. .contentwithoutlink { min-height: 0; } // When activity information is shown remove the bottom margin for the last p/i elements. &.hasinfo { p:last-child, i:last-child { margin-bottom: 0; } } } // The activity-wrapper class ensures these styles are not used when the new activity styles // from MDL-71691 are not affected. As soons as MDL-72656 is integrated and these styles // are removed the core_courseformat/local/content/cm template no longer needs this class. .section li.activity:not(.activity-wrapper) { padding: 0.2em; clear: both; &.hasinfo { border-bottom: $border-width solid $table-border-color; padding-top: map-get($spacers, 3); padding-bottom: map-get($spacers, 3); &:last-child { border-bottom: 0; padding-bottom: 0; } } } // Compensate for the border widths when dropzones are displayed. .course-content .section.dropready { &.main.drop-down { border-bottom: 1px solid $dropzone-border; } .course-section-header.dropready.drop-zone { margin-top: -2px; } li.activity.dropready.drop-down { border-bottom: 1px solid $dropzone-border; margin-bottom: -1px; } li.activity.dropready.drop-up { border-top: 1px solid $dropzone-border; margin-top: -1px; } } .section .activity .activityinstance .groupinglabel { padding-left: 30px; } .section.main:not(.course-section) .activity .availabilityinfo, .section.main:not(.course-section) .activity .contentafterlink { margin-top: 0.5em; margin-left: 30px; } .section .activity .contentafterlink p { margin: .5em 0; } .editing .section.main:not(.course-section) { .activity:hover, .activity.action-menu-shown, .sectionname:hover { background-color: $table-accent-bg; } } .course-content .current { position: relative; } .course-content .current::before { border-left: $primary 3px solid; bottom: 0; content: ""; left: -8px; position: absolute; top: 0; } .course-content .section-summary { border: 1px solid $table-border-color; margin-top: 5px; list-style: none; } .course-content .section-summary .section-title { margin: 2px 5px 10px 5px; } .course-content .section-summary .summarytext { margin: 2px 5px 2px 5px; } .course-content .section-summary .section-summary-activities .activity-count { color: $text-muted; font-size: $font-size-sm; margin: 3px; white-space: nowrap; display: inline-block; } .course-content .section-summary .summary { margin-top: 5px; } .course-content .single-section { margin-top: 1em; } .course-content .single-section .section-navigation { display: block; padding: 0.5em; margin-bottom: -0.5em; } .course-content .single-section .section-navigation .title { font-weight: bold; font-size: 108%; clear: both; } .course-content .single-section .section-navigation .mdl-left { font-weight: normal; float: left; margin-right: 1em; } .course-content .single-section .section-navigation .mdl-left .larrow { margin-right: 0.1em; } .course-content .single-section .section-navigation .mdl-right { font-weight: normal; float: right; margin-left: 1em; } .course-content .single-section .section-navigation .mdl-right .rarrow { margin-left: 0.1em; } .course-content .single-section .section-navigation .mdl-bottom { margin-top: 0; } .course-content ul li.section.main:not(.course-section) { border-bottom: $border-width solid $table-border-color; margin-top: 0; &:last-child { border-bottom: 0; } } .course-content ul li.section.hidden:not(.course-section) { .sectionname > span, .content > div.summary, .activity .activityinstance { color: $text-muted; } } .course-content ul.topics, .course-content ul.weeks { padding: 0; margin: 0; list-style: none; li.section { padding-top: $spacer; padding-bottom: $spacer; .content { margin: 0; padding: 0; } @include media-breakpoint-up(sm) { .summary, .content > .availabilityinfo { margin-left: 25px; } } .left, .right { padding: 0 6px 0; text-align: right; width: auto; } } } @include media-breakpoint-down(sm) { body:not(.editing) { .course-content ul.topics, .course-content ul.weeks { li.section { .left, .right { display: none; } } } } } .course-content { margin-top: 0; } .course-content .hidden { display: none; } .course-content li { &.section:not(.course-section) { @include media-breakpoint-down(sm) { ul { padding-left: 0; } } ul { list-style: disc; ul { list-style: circle; ul { list-style: square; } } } li { &.activity { ul { list-style: disc; ul { list-style: circle; ul { list-style: square; } } } } } .right { > .icon:first-child { /* Remove the spacer icon. */ display: none; } } } } .path-course-view.editing #region-main > .card-block { padding-bottom: 13rem; } .jumpmenu .form-inline { display: block; } .path-course-view .completionprogress { margin-left: 25px; } .path-course-view .completionprogress { display: block; float: right; height: 20px; position: relative; } #page-site-index .subscribelink { text-align: right; } #site-news-forum h2, #frontpage-course-list h2, #frontpage-category-names h2, #frontpage-category-combo h2 { margin-bottom: 9px; } .path-course-view a.reduce-sections { padding-left: 0.2em; } .path-course-view .subscribelink { text-align: right; } .path-course-view .unread { margin-left: 30px; } .path-course-view .block.drag .header { cursor: move; } .path-course-view .completionprogress { text-align: right; } .path-course-view .single-section .completionprogress { margin-right: 5px; } .path-site li.activity > div:not(.activity-item), .path-course-view li.activity > div:not(.activity-item) { position: relative; padding: 0 16px 0 0; /* to accommodate the floated completion icon with highlighting */ } .path-course-view li.activity span.autocompletion img { vertical-align: text-bottom; margin-left: 0; } .path-course-view li.activity form.togglecompletion .btn { padding: 0; } .path-course-view li.activity form.togglecompletion img { max-width: none; /* The width is 0 so ensure we don't end up with a relative max-width */ } .path-course-view { &.editing { li.activity span.autocompletion img { /* Use the same spacing as the filler. */ margin-right: $spacer * 0.5; margin-left: $spacer * 0.5; } } } .path-course-view li.activity form.togglecompletion .ajaxworking { width: 16px; height: 16px; position: absolute; right: 22px; top: 3px; background: url([[pix:i/ajaxloader]]) no-repeat; } li.section.hidden span.commands a.editing_hide, li.section.hidden span.commands a.editing_show { cursor: default; } .single-section h3.sectionname { text-align: center; clear: both; } input.titleeditor { width: 330px; vertical-align: text-bottom; } span.editinstructions { position: absolute; top: 0; margin-top: -22px; margin-left: 30px; font-size: $font-size-sm; padding: .1em .4em; text-decoration: none; z-index: 9999; border: $alert-border-width solid transparent; @include alert-variant( theme-color-level('info', $alert-bg-level), theme-color-level('info', $alert-border-level), theme-color-level('info', $alert-color-level) ); } /* Course drag and drop upload styles */ #dndupload-status { position: fixed; left: 0; width: 40%; margin: 0 30%; padding: 6px; text-align: center; z-index: 1; // Required in order to have this above relatively positioned course content@mixin border: $alert-border-width solid transparent; @include alert-variant( theme-color-level('info', $alert-bg-level), theme-color-level('info', $alert-border-level), theme-color-level('info', $alert-color-level) ); } .dndupload-preview { padding: $modal-inner-padding; background-color: $primary; color: $white; text-align: center; font-size: $font-size-lg; max-width: 600px; margin: 0 auto; @include border-radius(); } .dndupload-hidden { display: none; } /* COURSES LISTINGS AND COURSE SUMMARY */ #page-course-pending .singlebutton, #page-course-index .singlebutton, #page-course-index-category .singlebutton, #page-course-editsection .singlebutton { text-align: center; } #page-admin-course-manage #movecourses td img { margin: 0 .22em; vertical-align: text-bottom; } #coursesearch { margin-top: 1em; text-align: left; } #page-course-pending .pendingcourserequests { margin-bottom: 1em; } #page-course-pending .pendingcourserequests .singlebutton { display: inline; } #page-course-pending .pendingcourserequests .cell { padding: 0 5px; } #page-course-pending .pendingcourserequests .cell.c6 { white-space: nowrap; } .coursebox { display: flex; flex-direction: column; .info { display: flex; align-items: center; } } #frontpage-available-course-list, #frontpage-course-list, .course-search-result { margin-top: $spacer * 0.5; .coursebox { padding: $spacer * 0.5; border: $border-width solid $border-color; margin-bottom: $spacer * 0.5; @include border-radius(); } } .subcategories, #frontpage-category-names, #frontpage-category-combo { .coursebox > .info > .coursename a { display: block; background-image: url([[pix:moodle|i/course]]); background-repeat: no-repeat; padding-left: 21px; background-position: left 0.2em; } } .coursebox > .info > .coursename { font-size: $font-size-base; font-weight: normal; margin: 5px; padding: 0; } .coursebox .content .teachers li { list-style-type: none; padding: 0; margin: 0; } .coursebox .customfieldname, .coursebox .customfieldseparator { font-weight: $font-weight-bold; } .coursebox .content .coursefile { max-width: 100px; } .coursebox .content .courseimage img { max-width: 100px; max-height: 100px; } .coursebox .content .coursecat, .coursebox .content .summary, .coursebox .content .courseimage, .coursebox .content .coursefile, .coursebox .content .teachers, .coursebox.remotecoursebox .remotecourseinfo, .coursebox .content .customfields-container { margin: 15px 5px 5px; padding: 0; } .category-browse { .coursebox .content .coursecat, .coursebox .content .summary, .coursebox .content .courseimage, .coursebox .content .coursefile, .coursebox .content .teachers, .coursebox.remotecoursebox .remotecourseinfo, .coursebox .content .customfields-container { margin-top: 0; } } .coursebox.collapsed > .content { display: none; } .courses > .paging.paging-morelink { text-align: center; padding: $spacer; } .course_category_tree .category .numberofcourse { font-size: $font-size-sm; } .course_category_tree .category > .info > .categoryname { margin: 5px; font-size: $font-size-base; font-weight: normal; padding: 2px 18px; } .course_category_tree .category.with_children > .info > .categoryname { background-image: url([[pix:moodle|t/expanded]]); background-repeat: no-repeat; background-position: center left; } .course_category_tree .category.with_children.collapsed > .info > .categoryname { background-image: url([[pix:moodle|t/collapsed]]); } /* rtl:raw: .course_category_tree .category.with_children.collapsed > .info > .categoryname { background-image:url([[pix:moodle|t/collapsed_rtl]]); } */ .course_category_tree .category.collapsed > .content { display: none; } .course_category_tree .category > .content { padding-left: 16px; } #page-course-index-category .categorypicker { margin: 10px 0 20px; } /** * Course management page * Palette * * Background (reg) #F5F5F5 * Background (light #fafafa * Background (highlight) #ddffaa * Borders #e1e1e8 */ #course-category-listings { margin-bottom: 0; /** Two column layout */ &.columns-2 { > #course-listing > div { position: relative; left: -1px; } } /** Three column layout */ &.columns-3 > #course-listing > div { height: 100%; } > div > div { min-height: 300px; > ul.ml > li:first-child > div { border-top: 0; } } h3 { margin: 0; padding: 0.4rem 0.6rem 0.3rem; } h4 { margin: 1rem 0 0; padding: 0.6rem 1rem 0.5rem; } .moodle-actionmenu { white-space: nowrap; } .listing-actions { text-align: center; > .moodle-actionmenu { display: inline-block; } } ul.ml { list-style: none; margin: 1rem 0; ul.ml { margin: 0; } } .listitem { &[data-selected='1'] { border-left: calc(#{$list-group-border-width} + 5px) solid map-get($theme-colors, 'primary'); padding-left: calc(#{$list-group-item-padding-x} - 5px); } &:hover { z-index: 2; } } .item-actions { margin-right: 1em; display: inline-block; &.show .menu { img { width: 12px; max-width: none; } } .menu-action-text { vertical-align: inherit; } } .listitem { > div { > .float-left { float: left; } > .float-right { float: right; text-align: right; } .item-actions { .action-show { display: none; } .action-hide { display: inline; } } .without-actions { color: $course-cat-without-actions-color; } .idnumber { margin-right: 2em; } } // The category or course is hidden. &[data-visible="0"] { color: $text-muted; > div { > a { color: $text-muted; } .item-actions { .action-show { display: inline; } .action-hide { display: none; } } } } &.highlight { background-color: $body-bg; > div, > div:hover, &[data-selected='1'] > div { background-color: $table-hover-bg; } } } #course-listing { .listitem { .categoryname { display: inline-block; margin-left: 1em; color: $course-listing-color; } .coursename { display: inline-block; flex-basis: 10rem; } } > .firstpage .listitem:first-child > div .item-actions .action-moveup, > .lastpage .listitem:last-child > div .item-actions .action-movedown { display: none; } .bulk-action-checkbox { margin: -2px 6px 0 0; } } #category-listing { .listitem.collapsed > ul.ml { display: none; } .listitem { &:first-child > div .item-actions .action-moveup, &:last-child > div .item-actions .action-movedown { display: none; } } .course-count { color: $course-listing-color; margin-right: 2rem; min-width: 3.5em; display: inline-block; } .bulk-action-checkbox { margin-right: -3px; } .category-listing > ul > .listitem:first-child { position: relative; } .category-bulk-actions { margin: 0 0.5em 0.5em; position: relative; } } .detail-pair { > * { display: inline-block; } .pair-key { font-weight: bold; vertical-align: top; span { margin-right: 1rem; display: block; } } .pair-value select { max-width: 100%; } } .bulk-actions .detail-pair { > * { display: block; width: 100%; } } .listing-pagination { text-align: center; .yui3-button { @include button-variant($info, $info); border: 0; margin: 0.4rem 0.2rem 0.45rem; font-size: 10.4px; &.active-page { @include button-variant($primary, $primary); } } } .listing-pagination-totals { text-align: center; &.dimmed { color: $text-muted; margin: 0.4rem 1rem 0.45rem; } } .select-a-category .notifymessage, .select-a-category .alert { margin: 1em; } } #course-category-listings #course-listing .listitem .drag-handle { display: none; } .jsenabled #course-category-listings #course-listing .listitem .drag-handle { display: inline-block; margin: 0 6px 0 0; cursor: pointer; } /** Management header styling **/ .coursecat-management-header { vertical-align: middle; h2 { display: inline-block; text-align: left; } > div { float: right; > div { margin: 10px 0 10px 1em; display: inline-block; } } select { max-width: 300px; cursor: pointer; padding: 0.4em 0.5em 0.45em 1em; vertical-align: baseline; white-space: nowrap; } .view-mode-selector { .moodle-actionmenu { white-space: nowrap; display: inline-block; } .moodle-actionmenu[data-enhanced].show .menu a { padding-left: 1em; } } } .course-being-dragged-proxy { border: 0; color: $link-color; vertical-align: middle; padding: 0 0 0 4em; } .course-being-dragged { opacity: 0.5; } /** * Display sizes: * Large displays 1200 + * Default displays 980 1199 * Tablets 768 979 * Small tablets and large phones 481 767 * Phones 0 480 */ @media (min-width: 1200px) and (max-width: 1600px) { #course-category-listings.columns-3 { background-color: $body-bg; border: 0; #category-listing, #course-listing { width: 50%; } #category-listing > div, #course-listing > div, #course-detail > div { background-color: $body-bg; } #course-detail { width: 100%; margin-top: 1em; } } } @media (max-width: 1199px) { #course-category-listings.columns-2, #course-category-listings.columns-3 { border: 0; #category-listing, #course-listing, #course-detail { width: 100%; margin: 0 0 1em; } } } .page-settings-menu .menubar > a > .icon { width: auto; height: 32px; font-size: 32px; } .activity-navigation { .row { align-items: center; } #prev-activity-link, #next-activity-link { white-space: pre-wrap; } } .automatic-completion-conditions { .badge { font-size: 100%; } } // These are the new styles for the renewed course UI in isssue MDL-71691 // once the old course renderers are removed in MDL-72656, all css related // to activities and sections above this commend needs to be reviewed an // possibly removed. /* Variables definition*/ $activity-item-background: theme-color-level('primary', -12) !default; $activity-item-border: theme-color-level('primary', -2) !default; $activity-item-color: $body-color !default; $activity-item-hover: theme-color-level('primary', -12) !default; $activity-item-border-radius: 1rem !default; $activity-add-hover: theme-color-level('primary', -10) !default; /* Functions/Mixins definition */ // Activity completion button custom styling mixin. @mixin completion-button() { &.btn { @include button-variant($white, $gray-400, $gray-600); min-height: map-get($iconsizes, 5); font-weight: bold; @include border-radius(); .icon { font-size: inherit; } } @each $color, $value in $theme-colors { &.btn-#{$color} { $bg-color: theme-color-level($color, $alert-bg-level); @include button-variant($bg-color, $bg-color, $value); color: theme-color-level($color, $alert-color-level); &:hover { color: color-yiq($value); } } } } /* Activity & Block 'add' buttons */ .activity-add, .block-add { @include alert-variant($primary-light-background, $primary-light-border, $primary); border-width: $border-width; .pluscontainer { border: $border-width solid $primary-light-border; border-radius: 50%; width: map-get($iconsizes, 5); height: map-get($iconsizes, 5); } &:hover { cursor: pointer; background-color: $activity-add-hover; .activity-add-text { text-decoration: underline; } } width: 100%; } .block-add { @include border-radius(); } .activity-add { @include border-radius($activity-item-border-radius); } /* Add section */ .changenumsections { border-top: $border-width solid $primary-light-border; } .add-sections { .icon { margin-right: map-get($spacers, 1); font-size: inherit; } } /* Section Expand all/Collapse all */ .section-collapsemenu { .collapseall { display: block; } .expandall { display: none; } &.collapsed { .collapseall { display: none; } .expandall { display: block; } } } /* Course section */ .course-section { list-style: none; padding-left: 0; border-bottom: $border-width solid $border-color; &:last-child:not(.section-summary) { border-bottom: 0; } .sectionbadges .badge { margin-left: map-get($spacers, 2); } .course-section-header.draggable { cursor: move; } .section_action_menu { .dropdown-toggle::after { display: none; } } .summarytext { // Add rounded borders to images. img { @include border-radius($activity-item-border-radius); } } // Availability styles for both section and activities. .availabilityinfo { margin-top: map-get($spacers, 2); padding: map-get($spacers, 1) map-get($spacers, 3); background-color: $gray-200; @include font-size($small-font-size); @include border-radius($activity-item-border-radius); .editavailability { a { @include border-radius(); font-weight: bold; &:hover { background-color: $gray-400; } .icon { font-size: inherit; margin-right: map-get($spacers, 1); } } } } &.section-summary { padding-left: map-get($spacers, 3); padding-right: map-get($spacers, 3); margin-bottom: map-get($spacers, 2); margin-top: map-get($spacers, 2); @if $enable-rounded { @include border-radius(); } } .section-summary-activities .activity-count { color: $text-muted; font-size: $font-size-sm; margin: 3px; white-space: nowrap; display: inline-block; } // Legacy dndupload classes. Can be removed in 4.4 as part of MDL-77124. &.dndupload-dropzone { border: 2px dashed $primary; padding-left: 2px; padding-right: 2px; position: relative; .dndupload-preview-overlay { background-color: $white; opacity: 0.8; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .dndupload-preview-wrapper { position: absolute; top: 0; padding: 2rem; width: 100%; } } } /* Re-style ordered list in course content */ .course-content .activity-altcontent { ul { list-style: disc; ul { list-style: circle; ul { list-style: square; } } } } /* Activity cards */ .activity-item { position: relative; @include border-radius($activity-item-border-radius); &:not(.activityinline) { border: $border-width solid $border-color; padding: map-get($spacers, 3); } &.activityinline { padding: map-get($spacers, 3) 0; } &.hiddenactivity { background-color: $gray-100; .activityiconcontainer, .badge { mix-blend-mode: multiply; } } // Activity card grid layout. .activity-grid { display: grid; align-items: center; grid-template-columns: min-content 1fr min-content min-content min-content; grid-template-rows: 1fr repeat(5, min-content); grid-template-areas: "icon name groupmode completion actions" "icon visibility groupmode completion actions" "icon dates groupmode completion actions" "altcontent altcontent altcontent altcontent altcontent" "afterlink afterlink afterlink afterlink afterlink" "availability availability availability availability availability"; @include media-breakpoint-down(xs) { grid-template-columns: min-content 1fr min-content min-content min-content; grid-template-rows: 1fr repeat(4, min-content); grid-template-areas: "icon name actions" "icon visibility actions" "dates dates dates" "groupmode groupmode groupmode" "completion completion completion" "altcontent altcontent altcontent" "afterlink afterlink afterlink" "availability availability availability"; } } // Activity card specific grid layout for activities without name. .activity-grid.noname-grid { grid-template-columns: min-content min-content 1fr min-content; grid-template-areas: "visibility groupmode completion actions" "altcontent altcontent altcontent altcontent" "afterlink afterlink afterlink afterlink" "availability availability availability availability"; @include media-breakpoint-down(xs) { grid-template-columns: 1fr min-content; grid-template-areas: "visibility actions" "altcontent altcontent" "groupmode groupmode" "afterlink afterlink" "completion completion" "availability availability"; } } .activity-actions { grid-area: actions; .actions { position: relative; } // Override '.btn.btn-icon' styles from buttons.scss to make action menu buttons smaller. .action-menu .btn.btn-icon { height: map-get($iconsizes, 5); width: map-get($iconsizes, 5); @include border-radius(); } } .activity-icon { grid-area: icon; } .activity-dates { grid-area: dates; @include font-size($small-font-size); color: $gray-700; display: flex; flex-wrap: wrap; column-gap: 0.75rem; @include media-breakpoint-down(xs) { margin-top: map-get($spacers, 2); } } .activity-name-area { grid-area: name; // Prevent bootstrap strech-link from covering the inplace editable button using z-index. .activityname { .afterlink { margin-left: 0.5rem; } .inplaceeditable .quickeditlink { position: relative; z-index: 2; margin-left: 0.5rem; } } .activitybadge { &.badge-none { font-weight: normal; @include font-size($small-font-size); padding: 0; } } } .activity-completion { grid-area: completion; justify-self: end; // Re-style completion buttons (mark as done & dropdown). button, a[role="button"] { @include completion-button(); } @include media-breakpoint-down(xs) { width: 100%; margin-top: map-get($spacers, 2); button { width: 100%; } } .completion-dialog { color: $gray-700; font-size: $font-size-sm; min-width: 12rem; .icon { font-size: $font-size-sm; width: $font-size-sm; height: $font-size-sm; margin-right: map-get($spacers, 1); } .editcompletion a { @include border-radius(); color: $gray-700; font-weight: bold; text-decoration: none; &:hover { background-color: $gray-200; } } } } .activity-groupmode-info { grid-area: groupmode; justify-self: end; .groupmode-information { height: map-get($iconsizes, 5); width: map-get($iconsizes, 5); @include border-radius(); } .groupmode-icon-info { display: none; } @include media-breakpoint-down(xs) { width: 100%; margin-top: map-get($spacers, 2); padding-top: map-get($spacers, 2); border-top: $border-width solid $border-color; .groupmode-information { width: auto; font-size: inherit; padding: 0 map-get($spacers, 2); } .groupmode-icon-info { display: inline; } // Disable v-parent-focus behaviour on small devices to always show the groupmode button. .v-parent-focus { opacity: 1; visibility: visible; } } } .activity-badges { grid-area: visibility; .badge { font-weight: normal; .icon { font-size: 12px; width: 12px; height: 12px; } } } .activity-altcontent { grid-area: altcontent; margin-top: map-get($spacers, 1); &.activity-description { margin-top: map-get($spacers, 2); padding-top: map-get($spacers, 2); border-top: $border-width solid $border-color; @include font-size($small-font-size); } // Add rounded borders to images. img { @include border-radius($activity-item-border-radius); } } .activity-availability { grid-area: availability; } .activity-afterlink { grid-area: afterlink; margin-top: map-get($spacers, 2); padding-top: map-get($spacers, 2); border-top: $border-width solid $border-color; } .no-overflow { width: 100%; } @include media-breakpoint-up(md) { &:not(.activityinline) { padding: map-get($spacers, 3); } } } /* Activity card in editing mode */ .editing .activity-item { cursor: move; .a { cursor: pointer; } &:hover, &.selected { @include alert-variant($activity-item-hover, $activity-item-border, $activity-item-color); .activityiconcontainer, .badge { mix-blend-mode: multiply; } } } .section .draggable .activity-item .dragicon { display: none; } /* Activity divider */ .activity:focus-within + .activity div.divider button, .course-section-header:focus-within + .content .section .activity:first-child div.divider button, .content .section .activity:focus-within div.divider button { visibility: visible; } .activity { div.divider { height: 2rem; margin-top: -1.25rem; margin-bottom: -0.75rem; z-index: 5; button { border-radius: 100%; width: 2rem; height: 2rem; position: relative; left: calc(50%); opacity: 0; visibility: hidden; transition: visibility 0.1s; margin: 0; padding: 0; i.icon { height: 1.5rem; width: 1.5rem; font-size: 1.5rem; position: absolute; left: calc(0.25rem - 1px); top: calc(0.25rem - 0.5px); } } } &:not(.dragging) div.divider { &:hover button, &:focus button, &:focus-within button { opacity: 1; visibility: visible; } } } /* Bulk editing */ .bulkenabled .bulk-hidden { display: none !important; // stylelint-disable-line declaration-no-important } .activity-item .bulkselect { position: absolute; left: -2rem; } .course-section-header .bulkselect { left: -2rem; position: relative; width: 0; } @include media-breakpoint-down(sm) { .bulkenabled .course-content { margin-left: 2rem; } } /* Activity completion */ .defaultactivitycompletion-item { a { color: $black; text-decoration: none; img { filter: invert(25%) sepia(86%) saturate(1158%) hue-rotate(189deg) brightness(104%) contrast(92%); } } .activityicon { width: 32px; height: 32px; } } boost/scss/moodle/navbar.scss 0000604 00000011146 15062070724 0012274 0 ustar 00 @mixin hover-navbar { border-color: transparent; background-color: $gray-100; } .navbar.fixed-top { padding-top: 0; padding-bottom: 0; box-shadow: none; border-bottom: $gray-300 1px solid; align-items: stretch; height: $navbar-height + 1px; .navbar-brand { .logo { max-height: calc(#{$navbar-height} - (#{$primary-nav-padding-y} * 2)); } } .nav-link { height: 100%; display: flex; align-items: center; white-space: nowrap; } .divider { width: 1px; background-color: $gray-300; } #usernavigation .nav-link { padding: 0 $primary-nav-padding-x; } .login { display: flex; align-items: center; } .usermenu { display: flex; .action-menu { display: flex; align-items: center; } .dropdown { display: flex; align-items: center; .dropdown-toggle { padding-top: 0; padding-bottom: 0; border-radius: 0; display: flex; align-items: center; height: 100%; } } .dropdown-menu { min-width: 235px; .carousel-navigation-link { > * { pointer-events: none; } } .dropdown-item { padding: .25rem 1.75rem .25rem .75rem; &.carousel-navigation-link::after { @extend .fa-solid; content: fa-content($fa-var-caret-right); font-size: 1rem; right: .75rem; position: absolute; } } .submenu { .header { padding: .25rem .75rem; font-size: .975rem; .icon { font-size: 20px; height: 20px; width: 20px; margin: 0; } } .items { .dropdown-item { &[aria-current="true"]::before { @extend .fa-solid; content: fa-content($fa-var-check); font-size: 0.75rem; padding-left: .25rem; } } } } } .login { display: flex; align-items: center; } } .usermenu, .langmenu { .dropdown { display: flex; align-items: center; height: 100%; .dropdown-toggle { padding-top: 0; padding-bottom: 0; border-radius: 0; display: flex; align-items: center; height: 100%; } } } .langmenu { .dropdown-menu { .dropdown-item { &[aria-current="true"]::before { content: "\f00c"; font-size: 0.75rem; padding-left: .25rem; } } } @include media-breakpoint-down(sm) { .langbutton { display: none; } } } .moodle-actionmenu .menubar, .action-menu-trigger .dropdown { height: 100%; display: flex; } } .dir-rtl .navbar.fixed-top { .usermenu { .dropdown-menu { .dropdown-item { &.carousel-navigation-link::after { @extend .fa-solid; content: fa-content($fa-var-caret-left); } } .carousel { .carousel-inner { .carousel-item-prev.carousel-item-right, .carousel-item-next.carousel-item-left { transform: translateX(0); } .carousel-item-next, .carousel-item-right.active { transform: translateX(-100%); } .carousel-item-prev, .carousel-item-left.active { transform: translateX(100%); } } } } } } #page { margin-top: $navbar-height; } .pagelayout-embedded #page { margin-top: 0; } // Make navbar height available for non-sass use. :root { --navbar-height: #{$navbar-height}; } boost/scss/moodle/print.scss 0000604 00000000470 15062070724 0012155 0 ustar 00 @media print { // Fix body margin for drawer in print mode. body.drawer-open-left.jsenabled, body.drawer-open-right.jsenabled { margin: 0; } // Safari fix see: http://v4-alpha.getbootstrap.com/getting-started/browsers-devices/#printing. .container { width: auto; } } boost/scss/moodle/buttons.scss 0000604 00000003465 15062070724 0012526 0 ustar 00 .singlebutton { display: inline-block; + .singlebutton { margin-left: $spacer * 0.5; } } .continuebutton { text-align: center; } p.arrow_button { margin-top: 5em; text-align: center; } #addcontrols { // This is displayed in a column between 2 20 row multi-selects. This should be just short of half way. margin-top: 8 * $line-height-base * $font-size-base; text-align: center; margin-bottom: 3em; label { display: inline; } } #addcontrols, #removecontrols { input { width: 100%; margin: auto; } } .btn-lineup { margin: 0 0 10px 5px; } .btn.btn-icon { height: ($icon-width + 20px); width: ($icon-width + 20px); font-size: $icon-width; line-height: $icon-width; padding: 0; border-radius: 50%; flex-shrink: 0; @include hover-focus { background-color: $gray-200; } @each $size, $length in $iconsizes { &.icon-size-#{$size} { height: ($length + 20px) !important; /* stylelint-disable-line declaration-no-important */ width: ($length + 20px) !important; /* stylelint-disable-line declaration-no-important */ font-size: $length !important; /* stylelint-disable-line declaration-no-important */ line-height: $length !important; /* stylelint-disable-line declaration-no-important */ } } } @mixin button-focus($background, $innershadow) { &:focus, &.focus { outline: $btn-focus-width solid darken($background, 40%); box-shadow: inset 0 0 0 2px $innershadow; } } @each $color, $value in $theme-colors { .btn-#{$color} { @include button-focus($value, $white); } } @each $color, $value in $theme-colors { .btn-outline-#{$color} { @include button-focus($value, $gray-800); } } boost/scss/moodle/variables.scss 0000604 00000026562 15062070724 0013003 0 ustar 00 /** * Moodle variables * * Variables written for Moodle specific components * * Please do not override any Bootstrap variables here, custom Bootstrap variable should go in * preset files instead. */ $state-success-bg: theme-color-level("success", -10) !default; $state-success-border: theme-color-level("success", -9) !default; $state-info-bg: theme-color-level("info", -10) !default; $state-info-border: theme-color-level("info", -9) !default; $state-warning-bg: theme-color-level("warning", -10) !default; $state-warning-border: theme-color-level("warning", -10) !default; $state-danger-bg: theme-color-level("danger", -10) !default; $state-danger-border: theme-color-level("danger", -9) !default; $primary-nav-padding-y: ($spacer * 0.25) !default; $primary-nav-padding-x: ($spacer * 0.5) !default; $navbar-height: 60px !default; $stickyfooter-height: calc(max(96px, calc(#{$font-size-base} * 3))) !default; $course-content-maxwidth: 830px !default; $medium-content-maxwidth: 1120px !default; $h5p-content-maxwidth: 960px !default; $box-shadow-drawer-left: -0.25rem .25rem .8rem rgba($black, .025) !default; $box-shadow-drawer-right: 0 .25rem .8rem rgba($black, .025) !default; $moremenu-height: 60px !default; $primary-light-background: theme-color-level('primary', -12) !default; $primary-light-border: theme-color-level('primary', -2) !default; $primary-light-color: $body-color; $primary-light-hover: theme-color-level('primary', -10) !default; $activity-iconcontainer-height: 52px; $activity-iconcontainer-width: 52px; $activity-icon-administration-bg: #5d63f6 !default; $activity-icon-assessment-bg: #eb66a2 !default; $activity-icon-collaboration-bg: #f7634d !default; $activity-icon-communication-bg: #11a676 !default; $activity-icon-content-bg: #399be2 !default; $activity-icon-interface-bg: #a378ff !default; $activity-icon-colors: () !default; $activity-icon-colors: map-merge( ( "administration": $activity-icon-administration-bg, "assessment": $activity-icon-assessment-bg, "collaboration": $activity-icon-collaboration-bg, "communication": $activity-icon-communication-bg, "content": $activity-icon-content-bg, "interface": $activity-icon-interface-bg ), $activity-icon-colors ); // Atto $atto-content-wrap-bg: $white !default; $atto-content-wrap-color: #333 !default; $atto-toolbar-bg: #f2f2f2 !default; $atto-toolbar-border-color: #ccc !default; $atto-toolbar-group-bg: $white !default; $atto-toolbar-group-border-bottom-color: #b3b3b3 !default; $atto-toolbar-button-color: $gray-700 !default; $atto-toolbar-button-hover-bg: #ebebeb !default; $atto-toolbar-button-active-bg: #dfdfdf !default; $atto-toolbar-button-gradient-inner: $white !default; $atto-toolbar-button-gradient-outer: #dfdfdf !default; $atto-control-icon-bg: $white !default; $atto-notif-info: #f2f2f2 !default; $atto-notif-warning: #ffd700 !default; // Backup restore $backup-restore-wibbler-border-color: $black !default; $backup-restore-state0-bg: #eee !default; $backup-restore-state1-bg: #ddd !default; $backup-restore-state2-bg: #ccc !default; $backup-restore-state3-bg: #bbb !default; $backup-restore-state4-bg: #aaa !default; $backup-restore-state5-bg: #999 !default; $backup-restore-state6-bg: #888 !default; $backup-restore-state7-bg: #777 !default; $backup-restore-state8-bg: #666 !default; $backup-restore-state9-bg: #555 !default; $backup-restore-state10-bg: #444 !default; $backup-restore-state11-bg: #333 !default; $backup-restore-state12-bg: #222 !default; // Calendar $calendar-month-clickable-bg: #ededed !default; // Chat $chat-users-list-img-border-color: #ccc !default; // Core $yui-overlay-bg: #ffee69 !default; $yui-overlay-color: $black !default; $yui-overlay-border-color: #a6982b !default; $yui-overlay-border-top-color: #d4c237 !default; $comment-meta-color: gray !default; $comment-paging-current-border-color: #ccc !default; $tags-tagarea-border-color: #e3e3e3 !default; $tags-tagarea-title-color: #999 !default; $tags-tagarea-title-border-color: #e3e3e3 !default; $tags-tagarea-title-text-shadow-color: rgba($white, .5) !default; $webservice-doc-td-border-color: $black !default; $userenrolment-link-hover-border-color: #666 !default; $corelightbox-bg: #ccc !default; $dialogue-base-bg: $white !default; $dialogue-base-border-color: #ccc !default; $dialogue-base-hd-border-color: #dee2e6 !default; $dialogue-exception-label-bg: #eee !default; $dialogue-exception-label-border-color: #ccc !default; $dialogue-exception-pre-bg: $white !default; $dialogue-exception-pre-border-color: #ccc !default; $dialogue-exception-file-color: navy !default; $dialogue-exception-call-color: #333 !default; $dialogue-exception-call-border-color: #eee !default; $dialogue-lightbox-bg: $white !default; $chooserdialogue-bg: #f2f2f2 !default; $chooserdialogue-options-border-color: #bbb !default; $choosercontainer-label-border-color: $white !default; $choosercontainer-instruction-bg: $white !default; $choosercontainer-chooseform-selected-bg: $white !default; $formlisting-bg: $white !default; $formlisting-border-color: #ddd !default; $formlistingmore-bg: whitesmoke !default; $formlistingmore-border-color: #ddd !default; $formlistingmore-color: #9da0a4 !default; $formlistingrow-bg: #f7f7f9 !default; $formlistingrow-border-color: #e1e1e8 !default; $criteria-desc-bg: #f9f9f9 !default; $criteria-desc-border-color: #eee !default; $hover-tooltip-bg: $white !default; $hover-tooltip-border-color: rgba($black, .2) !default; $hover-tooltip-border-top-color: $white !default; $sr-only-active-bg: $white !default; $overlay-icon-bg: rgba($white, .6) !default; $overlay-preview-bg: rgba($white, .8) !default; // Course $course-cat-without-actions-color: #333 !default; $course-listing-color: #a1a1a8 !default; // Debug $phpinfo-color: $black !default; $phpinfo-bg: #ccc !default; $phpinfo-border-color: $black !default; $phpinfo-e-bg: #ccf !default; $phpinfo-h-bg: #99c !default; // Filemanager $filemanager-panel-button-bg: $white !default; $filemanager-panel-button-shadow: #999 !default; $filemanager-picker-bg: $white !default; $filemanager-picker-active-bg: #f2f2f2 !default; $filemanager-thumbnail-border-color: $white !default; $filemanager-thumbnail-img-border-color: #ddd !default; $filemanager-thumbnail-shadow: #ccc !default; $filemanager-thumbnail-over-bg: $white !default; $filemanager-thumbnail-hover-border-color: #ddd !default; $filemanager-thumbnail-hover-shadow: #ccc !default; $filemanager-filename-bg: $white !default; $filemanager-picker-table-border-color: #bbb !default; $filemanager-ygtvfocus-bg: #eee !default; $filemanager-picker-thumbnail-bg: $white !default; $filemanager-picker-thumbnail-border-color: #ddd !default; $filemanager-item-disabled-bg: #ebebe4 !default; $filemanager-yui-table-border-color: #bbb !default; $filemanager-yui-table-header-bg: $white !default; $filemanager-yui-table-header-border-bottom-color: #ccc !default; $filemanager-yui-table-header-border-left-color: $white !default; $filemanager-yui-table-header-color: #555 !default; $filemanager-yui-table-cell-odd-bg: #f6f6f6 !default; $filemanager-yui-table-cell-odd-border-color: #f6f6f6 !default; $filemanager-yui-table-cell-even-bg: $white !default; $filemanager-yui-table-cell-even-border-color: $white !default; $filemanager-dnd-border-color: #bbb !default; $filemanager-dnd-upload-target-bg: $white !default; $filemanager-dnd-upload-target-border-color: #fb7979 !default; $filemanager-dnd-upload-target-shadow: $white !default; $filemanager-dnd-upload-over-bg: $white !default; $filemanager-dnd-upload-over-border-color: #6c8cd3 !default; $filemanager-select-bg: #f9f9f9 !default; $filemanager-select-border-color: #bbb !default; // Forms $forms-autocomplete-bg: $white !default; $forms-adminsettings-border-bottom-color: #e5e5e5 !default; // Grade $grade-manage-action-border-color: #aaa !default; $grade-criterion-level-hover-bg: #dff0d8 !default; $grade-criterion-level-currentchecked-bg: #fff0f0 !default; $grade-criterion-level-checked-bg: #d0ffd0 !default; $grade-criterion-level-checked-border-color: #555 !default; $grade-criterion-level-delete-bg: #ddd !default; $grade-table-td-bg: $white !default; $grade-table-toggle-icon-color: #1d2125 !default; $grade-badge-bg: #ced4da !default; $grade-badge-color: #1d2125 !default; $grade-search-hover-color: $white !default; $grade-search-container-border-color: #dee2e6 !default; // Message $message-selected-bg: #4f94cd !default; $message-selected-color: $white !default; $message-preference-table-border-color: #ddd !default; $message-notif-area-border-color: #e3e3e3 !default; $message-notif-area-timestamp-color: #666 !default; $message-clickable-hover-shadow: rgba($black, .3) !default; $message-loading-bg: rgba($white, 0.5) !default; $message-drawer-shadow: rgba($black, .08) !default; // Modules $modules-badge-bg: #f6f6f6 !default; $modules-badge-color: #5b5b5b !default; $modules-rating-aggregate-bg: #f6f6f6 !default; $modules-rating-aggregate-color: #5b5b5b !default; $modules-forum-muted-color: #707070 !default; $modules-forum-post-border-color: #dee2e6 !default; $modules-highlight-bg: rgba(0, 123, 255, 0.5) !default; // Moodlenet $moodlenet-share-notice-bg: #f8f9fa !default; // Popover $popover-standard-border-color: #ddd !default; $popover-region-toggle-border-bottom-color: $white !default; $popover-count-color: $white !default; $popover-region-container-bg: $white !default; // Question $question-choice-bg: #f2f2f2 !default; $question-choice-color: #333 !default; $question-choice-text-shadow: $white !default; $question-choice-shadow: #666 !default; $question-border-color: #ccc !default; $question-border-bottom-color: #bbb !default; $question-gradient-start-color: $white !default; $question-gradient-end-color: #ccc !default; $question-type-bg: $white !default; $question-type-shadow: #ccc !default; $question-import-error-border-color: #555 !default; $question-bank-header-color: #444 !default; $question-quiz-edit-border-color: #ddd !default; // Report builder $report-audience-border-color: rgba($black, .125) !default; // User $user-loading-icon-bg: rgba($white, 0.7) !default; boost/scss/moodle/grade.scss 0000604 00000045066 15062070724 0012115 0 ustar 00 // The class gradetreebox matches the pages displaying the gradebook // "Gradebook setup" > "Simple view" and "Full view". .gradetreebox { margin: 20px 0 30px 0; h4 { // Force back the base font-size to minimise width. font-size: $font-size-base; } th.cell, input[type=text] { // Fallback on the minimum width. width: auto; } input[type=text], select { // Remove the bottom margin to gain height. margin-bottom: 0; } } // Grade upgrade notice. .core_grades_notices { .singlebutton { display: inline-block; } } .path-grade-report #maincontent + .urlselect { position: absolute; left: 40vw; } .path-grade-report-grader { #region-main { min-width: 100%; width: auto; display: flex; flex-direction: column; & > .card { width: auto; overflow-x: initial; } div[role="main"] { flex: 1 1 auto; } } [data-region="blocks-column"] { width: 100%; clear: both; } } .path-grade-report-grader, .path-grade-report-user { .gradepass { color: $success; } .gradefail { color: $danger; } } .path-grade { #region-main { overflow-x: visible; } .user-heading .userinitials { width: 50px; height: 50px; } } // Rubrics #page-grade-grading-manage { #activemethodselector { label { display: inline-block; } .helptooltip { margin-right: 0.5em; } } .actions { display: block; text-align: center; margin-bottom: 1em; .action { display: inline-block; position: relative; vertical-align: top; width: 150px; text-align: center; overflow: hidden; margin: 0.5em; padding: 1em; border: 1px solid $grade-manage-action-border-color; .action-text { position: relative; top: 0.4em; font-size: 14px; white-space: normal; } } } } #page-grade-grading-form-rubric-edit { .gradingform_rubric_editform .status { font-size: 70%; } } .gradingform_rubric { margin-bottom: 1em; $rubricPadding: 6px; // When doing evaluation on the rubrics table. &.evaluate .criterion .levels .level { &:hover, &.checked { background: $grade-criterion-level-hover-bg; } &.checked { border: none; border-left: 1px solid $border-color; } } .criterion { .description { vertical-align: top; padding: $rubricPadding; textarea { margin-bottom: 0; height: 115px; } } .definition { textarea { width: 80%; margin-bottom: 0; } } .score { margin-top: 5px; margin-right: 28px; font-style: italic; font-weight: bold; color: #{theme-color-level('success', 2)}; input { margin-bottom: 0; } } .level { vertical-align: top; padding: $rubricPadding; &.currentchecked { background: $grade-criterion-level-currentchecked-bg; } &.checked { background: $grade-criterion-level-checked-bg; border: 1px solid $grade-criterion-level-checked-border-color; } .delete { position: relative; width: 32px; height: 32px; margin-top: -32px; clear: both; float: right; input { display: block; position: absolute; right: 0; bottom: 0; height: 24px; width: 24px; margin: 0; &:hover { background-color: $grade-criterion-level-delete-bg; } } } } .scorevalue { input { // Should handle at least three chars with room to spare. float: none; width: 2em; &.hiddenelement, &.pseudotablink { // Zero out the width if it's still in the block flow for some reason // when hidden width: 0; } } } .addlevel { vertical-align: top; padding-top: 6px; input { height: 30px; line-height: 1rem; } } } .addcriterion { margin-left: 5px; padding: 0; input { margin: 0; color: inherit; text-shadow: inherit; border: 0 none; line-height: inherit; background: transparent url([[pix:t/add]]) no-repeat 7px 8px; padding-left: 26px; } margin-bottom: 1em; } .options { clear: both; .option { label { margin: 0; padding: 0; font-size: inherit; font-weight: normal; line-height: 2em; color: inherit; text-shadow: none; background-color: transparent; } input { margin-left: 5px; margin-right: 12px; } } } } .grade-display { .description { font-size: 1rem; } } .criterion { .description { font-size: 1rem; } .criterion-toggle { .expanded-icon { display: block; } .collapsed-icon { display: none; } &.collapsed { .expanded-icon { display: none; } .collapsed-icon { display: block; } } } } // Set up grades layout. .path-grade-edit-tree { .collapse-list { .unlist { padding-left: 2rem; [data-for="sectionnode"] { &:focus { > .collapse-list-item:first-child { background-color: $collapse-list-item-hover-bg; border-color: $collapse-list-item-hover-border; } } &[data-selected="true"] { > .collapse-list-item:first-child { background-color: $collapse-list-item-hover-bg; border-color: $collapse-list-item-hover-border; color: $blue; } } .collapse-list-item-content { &[aria-hidden="true"] { display: none; } } &[aria-expanded="true"] { > .collapse-list-item { .collapsed-icon { display: none; } } } &[aria-expanded="false"] { > .collapse-list-item { .expanded-icon { display: none; } } } } .collapse-list-item { padding: 0.5rem 1rem; cursor: pointer; .collapse-list-item-name { font-weight: bold; } .collapse-list-link { color: $gray-900; padding: 0 0.2rem; margin-right: 0.3rem; i { font-size: 12px; width: 12px; height: 12px; margin: 0; } } } } } .gradetree-wrapper { padding: 10px 10px; background-color: $gray-100; .setup-grades { h4 { margin: 0; } .column-rowspan { padding: 0; width: 24px; min-width: 24px; max-width: 24px; } .emptyrow { display: none; } .gradeitemdescription { font-weight: normal; padding-left: 24px; } &.generaltable { tr { &.spacer { height: 0.5rem; } &[data-hidden="true"] { display: none; } th { vertical-align: bottom; border: none; text-align: left; background-color: $gray-100; &.rowspan { padding: 0; width: 24px; min-width: 24px; } } td { min-width: 4.5em; background-color: $gray-100; border: none; vertical-align: middle; &.column-name { .small { font-size: 70%; } .itemselect { margin-right: 15px; } .itemicon { font-size: 18px; width: 18px; height: 18px; } } &.column-weight { .weightoverride { margin-right: 5px; } min-width: 15em; } &.column-actions { .dropdown-toggle::after { display: none; } } &.movehere { padding: 0; a.movehere { display: block; width: 100%; margin: 5px 0 5px 0; padding: 3px 0 3px 0; hr { border-top: 2px dashed $gray-500; margin: 0; } &:hover { hr { border-top: 2px dashed $blue; } } } } } &.category { td { background-color: $grade-table-td-bg; border-top: 1px solid $gray-300; border-bottom: 1px solid $gray-300; &:first-child { border-left: 1px solid $gray-300; } &:last-child { border-right: 1px solid $gray-300; } &.column-name { font-weight: bold; div { display: flex; min-height: 30px; align-items: center; .form-check { padding: 0; .itemselect { margin-right: 5px; } } a { &.toggle-category { height: 24px; width: 24px; font-size: 12px; line-height: 24px; margin-right: 3px; &[aria-expanded="true"] .expanded, &[aria-expanded="false"] .collapsed { display: none; } i { font-size: 12px; width: 12px; height: 12px; color: $grade-table-toggle-icon-color; margin: 0; } } } } } } } &.item { td { background-color: $grade-table-td-bg; border-top: 3px solid $gray-100; } &.categoryitem, &.courseitem { td { min-width: 4.5em; background-color: $gray-100; border: none; vertical-align: middle; &.column-name { padding-left: 0; } &:not(.column-actions) { font-weight: bold; } } } } } } } .badge-light { color: $grade-badge-color; background-color: $grade-badge-bg; margin-right: 0.5em; margin-bottom: 0.5em; } } } /** * Grader report. */ .path-grade-report-grader { .gradeparent { tr .cell, .floater .cell { background-color: $pagination-bg; &.gradecell { .dropdown-menu { &.show { z-index: 1; } } } } table, .cell { border-color: $table-border-color; } .heading .cell, .cell.category, .avg .cell { background-color: $gray-100; } table .clickable { cursor: pointer; } tr.heading { position: sticky; top: $navbar-height; z-index: 4; } tr.userrow { th { z-index: 2; &.actions-menu-active { z-index: 3; } } } tr.lastrow { position: sticky; // Hack used by the observer to help detecting when the sticky 'Overall average' row is pinned. */ bottom: -1px; &.pinned { z-index: 4; } td, th { border-top: 1px solid $table-border-color; } } th.header { left: 0; position: sticky; &#studentheader { z-index: 1; } } td.noborder { border-right: transparent; } } &.hasstickyfooter { .gradeparent { tr.lastrow { // Hack used by the observer to help detecting when the sticky 'Overall average' row is pinned when // sticky footer is present. bottom: calc(#{$stickyfooter-height} - 1px); } } } } /** * User report. */ .path-grade-report-user .user-grade { border: none; &.generaltable { .levelodd { background-color: $table-accent-bg; } .leveleven { background-color: $table-bg; } } .column-contributiontocoursetotal, .column-range, .column-percentage, .column-weight { /*rtl:ignore*/ direction: ltr; } } /** * Single view. */ .path-grade-report-singleview .reporttable { input[name^="finalgrade"] { width: 80px; display: inline-block; } .action-menu { display: inline-block; margin-left: 0.5rem; float: right; } .dropdown-toggle::after { display: none; } } .gradereport-grader-table { input[name^="grade"] { width: 80px; display: inline-block; } .dropdown-toggle::after { display: none; } } .search-widget { .dropdown-menu { padding: 0.8rem 1.2rem; &.wide { width: 350px; } &.narrow { width: 250px; } .dropdown-item { span { &.email { color: $text-muted; } } } .dropdown-item:hover, .dropdown-item:active { span { color: $grade-search-hover-color; } } .searchresultscontainer { height: 178px; font-size: 90%; .searchresultitemscontainer { height: 178px; max-height: 178px; overflow: auto; } } .unsearchablecontentcontainer { border-top: 1px solid $grade-search-container-border-color; padding-top: 10px; font-size: 90%; } } } #fitem_id_submitbutton { padding-right: 2em; } .gradestatus { padding-top: 10px; } .gradestatus .icon { margin-right: 1rem; } boost/scss/moodle/chat.scss 0000604 00000004440 15062070724 0011741 0 ustar 00 // Chat (more!) // ------------------------- .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax { background-color: $body-bg; .yui-layout-unit div.yui-layout-bd-nohd, .yui-layout-unit div.yui-layout-bd-noft, .yui-layout-unit div.yui-layout-bd, .yui-layout-unit-right, .yui-layout-unit-bottom { border: 0; } .yui-layout-unit-right, .yui-layout-unit-bottom { border-radius: 0; } .yui-layout-unit div.yui-layout-bd { background-color: transparent; } .yui-layout-unit.yui-layout-unit-center div.yui-layout-bd { background-color: $gray-100; } // Override the default padding added by function $OUTPUT->box(); #chat-input-area.py-3 { padding: 0 !important; /* stylelint-disable-line declaration-no-important */ } #chat-input-area table.generaltable, #chat-input-area table.generaltable td.cell { border: 0; padding: 3px 15px; white-space: nowrap; margin-bottom: 0; } #chat-userlist { padding: 10px 5px; #users-list { border-top: 1px solid $gray-300; border-bottom: 1px solid $body-bg; li { border-top: 1px solid $body-bg; border-bottom: 1px solid $gray-300; padding: 5px 10px; } img { margin-right: 8px; border: 1px solid $chat-users-list-img-border-color; border-radius: 4px; max-width: none; } } } #chat-messages { margin: 20px 25px; .chat-event.course-theme { text-align: center; margin: 10px 0; font-size: $font-size-sm; color: $gray-700; } .chat-message.course-theme { margin-bottom: $card-spacer-y; @include border-radius($card-border-radius); border: $card-border-width solid $card-border-color; padding: $card-spacer-x; .time { float: right; font-size: 11px; color: $gray-700; } } .chat-message.course-theme { background-color: $white; .user { font-weight: bold; } } } } boost/scss/moodle/blocks.scss 0000604 00000020463 15062070724 0012302 0 ustar 00 .blockmovetarget .accesshide { position: relative; left: initial; } .block:target { padding-top: 0 !important; /* stylelint-disable declaration-no-important */ margin-top: 0 !important; } .block_search_forums .searchform { /* Override plugin's default. */ text-align: left; } .block.block_navigation .block_tree ul, .block_settings .block_tree ul { margin-left: 0; } .block .block-controls { .dropdown-toggle { /* So that the caret takes the colour of the icon. */ color: $body-color; } } $blocks-column-width: 360px !default; [data-region="blocks-column"] { width: $blocks-column-width; float: right; } $blocks-plus-gutter: $blocks-column-width + ( $grid-gutter-width * 0.5 ); /* We put an absolutely positioned div in a relatively positioned div so it takes up no space */ @include media-breakpoint-up(sm) { #region-main-settings-menu { position: relative; float: left; width: 100%; } #region-main-settings-menu > div { position: absolute; right: 0; z-index: 100; margin: 1rem; } .region_main_settings_menu_proxy { width: 4rem; height: 2rem; background-color: $body-bg; margin-left: $card-spacer-x * 0.5; margin-bottom: $card-spacer-x * 0.5; border-bottom-left-radius: 0.5rem; float: right; } } @include media-breakpoint-down(sm) { #region-main-settings-menu .menubar { justify-content: flex-end; } } // Required for IE11 to prevent blocks being pushed under the content. #region-main.has-blocks { display: inline-block; width: calc(100% - #{$blocks-plus-gutter}); @include media-breakpoint-down(lg) { width: 100%; /* MDL-63102 - Remove extra space at bottom. If modifying make sure block-region is horizontally stacked when in full screen */ display: block; } } .header-action { #region-main-settings-menu { position: unset; float: none; width: auto; & > div { position: unset; right: auto; margin: 0; } } } [data-region="blocks-column"] { @include media-breakpoint-down(lg) { width: 100%; } } $card-gutter : $card-deck-margin * 2; .block .empty-placeholder-image-lg { height: 5rem; } .block { .searchbar { .icon { margin-right: 0; } } } .block .block-cards { .course-info-container { padding: 0.8rem; } .progress { height: 0.5rem; } .course-summaryitem { border: $border-width solid $border-color; background-color: $body-bg; } .icon { margin-right: 0; } .card .coursemenubtn { margin-top: -0.5rem; } span.categoryname, .btn-link { color: $gray-900; } .progress-text { color: $gray-600; } .multiline { white-space: normal; } .btn.btn-link.btn-icon { height: 36px; width: 36px; padding: 0; border-radius: 50%; @include hover-focus { background-color: $gray-200; } } } .dashboard-card-deck.one-row { flex-flow: nowrap; overflow-x: scroll; } .summaryimage { height: 5rem; width: 5rem; background-position: center; background-size: cover; } .dashboard-list-img { height: 5rem; width: 20rem; background-position: center; background-size: cover; @include media-breakpoint-down(lg) { width: 100%; } } .dashboard-card-deck { .dashboard-card { margin-bottom: $card-gutter; flex-basis: auto; width: 100%; flex-grow: 0; flex-shrink: 0; .dashboard-card-img { height: 7rem; background-position: center; background-size: cover; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .dashboard-card-footer { padding: 0.8rem; } } @include media-breakpoint-up(sm) { &.fixed-width-cards { .dashboard-card { width: 300px; max-width: 100%; } } } } .dashboard-card-deck:not(.fixed-width-cards) { @media (min-width: 576px) { .dashboard-card { width: calc(50% - #{$card-gutter}); } } @media (min-width: 840px) { .dashboard-card { width: calc(33.33% - #{$card-gutter}); } } } #block-region-side-pre { .dashboard-card-deck:not(.fixed-width-cards) { margin-left: 0; margin-right: 0; .dashboard-card { width: calc(100% - #{$card-gutter}) !important; } } } .block_recentlyaccessedcourses { .paging-bar-container { margin-top: -2.4rem; padding-right: 0.5rem; justify-content: flex-end; } @include media-breakpoint-down(xs) { .paging-bar-container { margin-top: 0; } } } #block-region-side-pre { .block_recentlyaccessedcourses { .paging-bar-container { margin-top: 0; } } } .block_recentlyaccesseditems { .activityiconcontainer { width: 40px; height: 40px; } aside[id^="block-region-side-"] & .dashboard-card-deck.one-row { flex-flow: wrap; overflow-x: hidden; } aside[id^="block-region-side-"] & .dashboard-card-deck .card:nth-of-type(n+4) { display: none; } #block-region-content & [data-region="more-items-button-container"] { display: none; } a.dashboard-card { @include hover-focus { text-decoration: none; h6 { text-decoration: underline; } } small { color: $body-color; } } } .block_myoverview { .content { min-height: 19.35rem; } .paged-content-page-container { min-height: 13rem; } } .block_timeline { .paged-content-page-container { background-color: $list-group-bg; } } .block_timeline { .event-action { padding-left: 5.55em; } } // Show expand collapse with font-awesome. .block_settings .block_tree [aria-expanded="true"], .block_settings .block_tree [aria-expanded="true"].emptybranch, .block_settings .block_tree [aria-expanded="false"], .block_navigation .block_tree [aria-expanded="true"], .block_navigation .block_tree [aria-expanded="true"].emptybranch, .block_navigation .block_tree [aria-expanded="false"] { background-image: none; } .block_settings .block_tree [aria-expanded="true"] > p:before, .block_navigation .block_tree [aria-expanded="true"] > p:before { @extend .fa-solid; content: fa-content($fa-var-angle-down); margin-right: 0; font-size: 16px; width: 16px; } .block_settings .block_tree [aria-expanded="false"] > p:before, .block_navigation .block_tree [aria-expanded="false"] > p:before { @extend .fa-solid; content: fa-content($fa-var-angle-right); margin-right: 0; font-size: 16px; width: 16px; } .dir-rtl { .block_settings .block_tree [aria-expanded="false"] > p:before, .block_navigation .block_tree [aria-expanded="false"] > p:before { @extend .fa-solid; content: fa-content($fa-var-angle-left); } } .block_navigation .block_tree p.hasicon, .block_settings .block_tree p.hasicon { text-indent: -3px; .icon { margin-right: 2px; } } .block.invisibleblock .card-title { color: $text-muted; } @include media-breakpoint-down(sm) { .block.card { border-left: 0; border-right: 0; } } .block_social_activities li a.movehere, .block_site_main_menu li a.movehere { display: block; width: 100%; height: 2rem; border: 2px dashed $gray-800; margin: 4px 0; } .pagelayout-embedded { .has-fake-blocks { padding: 1rem; display: flex; } .has-fake-blocks .embedded-main { order: 0; width: calc(100% - #{$blocks-column-width}); margin-right: 1rem; } .embedded-blocks { order: 1; width: $blocks-column-width; } @media (max-width: 767.98px) { .has-fake-blocks { display: block; } .has-fake-blocks .embedded-main { width: 100%; } .embedded-blocks { width: 100%; } } } boost/scss/moodle/search.scss 0000604 00000003277 15062070724 0012276 0 ustar 00 .search-results .result { margin-left: 0; margin-right: 0; } .search-results .result .result-content { margin: 7px 0; } .search-results .result .filename { font-style: italic; } .simplesearchform { @if $enable-rounded { .input-group input.form-control { border-top-left-radius: $border-radius; border-bottom-left-radius: $border-radius; } } .btn { padding-left: 0.5rem; padding-right: 0.5rem; } .btn .icon { margin: 0; } .btn-submit { border-color: $input-border-color; color: $gray-600; } .btn-close, .btn-clear { position: absolute; top: 0; right: 0; color: $gray-600; z-index: 4; } .btn-close { right: 2.2rem; } .btn-submit { background-color: $gray-100; } .withclear { padding-right: 2rem; } .searchinput { display: flex; flex: 1 1 auto; } .collapsing { height: inherit; transition: none; width: inherit; } } .simplesearchform .collapse.show, .simplesearchform .collapsing { position: absolute; left: 0; top: 0; width: 100%; display: flex; background-color: $white; z-index: $zindex-popover; height: $navbar-height; .form-inline { width: auto; margin-left: auto; margin-right: auto; } } .search-areas-actions { margin-bottom: $spacer; } .search-areas-actions > div { margin-right: $spacer; display: inline-block; } #core-search-areas .lastcol li { margin-left: 24px; text-indent: -24px; } #core-search-areas .lastcol li > i { text-indent: 0; } boost/scss/moodle/tertiarynavigation.scss 0000604 00000003120 15062070724 0014737 0 ustar 00 .tertiary-navigation { padding-top: 10px; &.full-width-bottom-border { width: calc(100% + 1rem + 30px); margin-left: calc(-0.5rem - 15px); margin-right: calc(-0.5rem - 15px); border-bottom: 1px solid $gray-300; margin-bottom: 25px; @include media-breakpoint-down(sm) { width: calc(100% + 1rem); margin-left: -0.5rem; margin-right: -0.5rem; } .row { margin: 0; padding-left: 0.5rem; padding-right: 0.5rem; } } .navitem, .navitem-divider { display: flex; margin-bottom: 25px; } .navitem-divider { width: 1px; background-color: $gray-300; } & > a.btn, & > div.urlselect { margin-bottom: 25px; } .row { column-gap: 10px; } .tertiary-navigation-selector { .dropdown-toggle { padding: 0; font-size: 1.4rem; font-weight: bold; } } .navitem:not(:last-child), .navitem-divider:not(:last-child) { margin-right: 20px; } // Constrain the width of each tertiary buttons triggering element. .btn { & > div { max-width: 200px; } } } @include media-breakpoint-down(sm) { .tertiary-navigation { .mform { padding-left: initial; } } } @include media-breakpoint-down(xs) { .tertiary-navigation .page-toggler > p { font-size: 80%; } } @media print { .tertiary-navigation { display: none; } } boost/scss/moodle/tables.scss 0000604 00000003467 15062070724 0012304 0 ustar 00 .generaltable { width: 100%; margin-bottom: $spacer; color: $table-color; background-color: $table-bg; // Reset for nesting within parents with `background-color`. th, td { padding: $table-cell-padding; vertical-align: top; border-top: $table-border-width solid $table-border-color; } thead th, thead td { vertical-align: bottom; border-bottom: (2 * $table-border-width) solid $table-border-color; } tbody + tbody { border-top: (2 * $table-border-width) solid $table-border-color; } tbody tr:nth-of-type(#{$table-striped-order}) { background-color: $table-accent-bg; } thead .sticky-column, tbody tr:nth-of-type(even) { background-color: $white; } tbody tr:nth-of-type(#{$table-striped-order}) .sticky-column { background-color: $table-accent-bg; } &.table-sm { th, td { padding: $table-cell-padding-sm; } } tbody tr { @include hover { color: $table-hover-color; background-color: $table-hover-bg; &.dimmed_text { a:not(.menu-action) { color: $table-hover-color; } } td.sticky-column { background-color: $table-hover-bg; } } } } table { caption { font-size: 24px; font-weight: bold; line-height: 42px; text-align: left; caption-side: top; } .sticky-column { position: sticky; left: 0; background-color: inherit; } } .table-dynamic .loading-icon { position: absolute; left: calc(50% - 1.5rem); top: 200px; .icon { height: 3rem; width: 3rem; font-size: 3rem; } } boost/scss/moodle/reports.scss 0000604 00000001046 15062070724 0012517 0 ustar 00 /* reports.less */ // The home for small tweaks to reports that don't require // changes drastic enough to pull in the full module css // and replace it completely. #page-report-participation-index .participationselectform div label { // Using 'div' here to override the report styles.css display: inline-block; margin: 0 5px; // No top and bottom margin with a 5px left and right for LTR and RTL. } #page-report-participation-index .participationselectform div label[for=menuinstanceid] { margin-left: 0; // No left margin for LTR. } boost/scss/moodle/undo.scss 0000604 00000017350 15062070724 0011773 0 ustar 00 /* some very targetted corrections to roll back nameclashes between * Moodle and Bootstrap like .row, .label, .content, .controls * * Mostly relies on these styles being more specific than the Bootstrap * ones in order to overule them. */ // .label vs .label li.activity.label, .file-picker td.label { background: inherit; color: inherit; border: inherit; text-shadow: none; white-space: normal; display: block; font-size: inherit; line-height: inherit; text-align: inherit; } .file-picker td.label { display: table-cell; text-align: right; padding: 8px; } // Some of this dialog is sized in ems so a different font size // effects the whole layout. .choosercontainer #chooseform .option { font-size: 12px; } /* block.invisible vs .invisible * block.hidden vs .invisible * * uses .invisible where the rest of Moodle uses @mixin dimmed * fixible in block renderer? * * There's seems to be even more naming confusion here since, * blocks can be actually 'visible' (or not) to students, * marked 'visible' but really just dimmed to indicate to editors * that students can't see them or 'visible' to the user who * collapses them, 'visible' if you have the right role and in * different circumstances different sections of a block can * be 'visible' or not. * * currently worked around in renderers.php function block{} * by rewriting the class name "invisible" to "dimmed", * though the blocks don't look particularly different apart * from their contents disappearing. Maybe try .muted? or * dimming all the edit icons apart from unhide, might be a * nice effect, though they'd still be active. Maybe reverse * it to white? */ li.section.hidden, .block.hidden, .block.invisible { visibility: visible; display: block; } /* .row vs .row * * very tricky to track down this when it goes wrong, * since the styles are applied to generated content * * basically if you see things shifted left or right compared * with where they should be check for a .row */ .forumpost .row { margin-left: 0 !important; /* stylelint-disable-line declaration-no-important */ } .forumpost .row:before, .forumpost .row:after { content: none; } /* fieldset.hidden vs .hidden * * Moodle uses fieldset.hidden for mforms, to signify a collection of * form elements that don't have a box drawn round them. Bootstrap * uses hidden for stuff that is hidden in various responsive modes. * * Relatedly, there is also fieldset.invisiblefieldset which hides the * border and sets the display to inline. * * Originally this just set block and visible, but it is used * in random question dialogue in Quiz, * that dialogue is hidden and shown, so when hidden the * above workaround leaves you with a button floating around */ fieldset.hidden { display: inherit; visibility: inherit; } /* .container vs .container * * bootstrap uses .container to set the width of the layout at 960px or so, Moodle uses it * in the Quiz to contain the questions to add. If you don't overule the Bootstrap code, * it becomes near unuseable. */ #questionbank + .container { width: auto; } // Allow the custom menu to expand/collapse when the user hovers over it with JS disabled. body:not(.jsenabled) .dropdown:hover > .dropdown-menu { display: block; margin-top: -6px; // We need to move it up to counter the arrows as they introduce hover bugs. } // Enable scroll in the language menu. body:not(.jsenabled) .langmenu:hover > .dropdown-menu, .langmenu.open > .dropdown-menu { display: block; max-height: 150px; overflow-y: auto; } // Set menus in the fixed header to scroll vertically when they are longer than the page. .navbar.fixed-top .dropdown .dropdown-menu { max-height: calc(100vh - #{$navbar-height}); overflow-y: auto; } // Dont allow z-index creep anywhere. .page-item { &.active .page-link { @include plain-hover-focus { z-index: inherit; } } } /* Force positioning of popover arrows. * * The Css prefixer used in Moodle does not support complex calc statements used * in Bootstrap 4 CSS. For example: * calc((0.5rem + 1px) * -1); is stripped out by lib/php-css-parser/Parser.php. * See MDL-61879. For now the arrow positions of popovers are fixed until this is resolved. */ .bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow { left: -9px; } .bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow { right: -9px; } .bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow { bottom: -9px; } .bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow { top: -9px; } // Fixes an issue on Safari when the .custom-select is inside a .card class. .custom-select { word-wrap: normal; } /* Add commented out carousel transistions back in. * * The Css prefixer used in Moodle breaks on @supports syntax, See MDL-61515. */ .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right { transform: translateX(0); } .carousel-item-next, .active.carousel-item-right { transform: translateX(100%); } .carousel-item-prev, .active.carousel-item-left { transform: translateX(-100%); } /** * Reset all of the forced style on the page. * - Remove borders on header and content. * - Remove most of the vertical padding. * - Make the content region flex grow so it pushes things like the * next activity selector to the bottom of the page. */ $allow-reset-style: true !default; @if $allow-reset-style { body.reset-style { #page-header { .card { border: none; .page-header-headings { h1 { margin-bottom: 0; } } .card-body { @include media-breakpoint-down(sm) { padding-left: 0; padding-right: 0; } } } & > div { padding-top: 0 !important; /* stylelint-disable-line declaration-no-important */ padding-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */ } } #page-content { padding-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */ #region-main-box { #region-main { border: none; display: inline-flex; flex-direction: column; padding: 0; height: 100%; width: 100%; padding-left: $card-spacer-x; padding-right: $card-spacer-x; vertical-align: top; div[role="main"] { flex: 1 0 auto; } .activity-navigation { overflow: hidden; } &.has-blocks { width: calc(100% - #{$blocks-plus-gutter}); @include media-breakpoint-down(lg) { width: 100%; } } @include media-breakpoint-down(sm) { padding-left: 0; padding-right: 0; } } [data-region="blocks-column"] { margin-left: auto; } @include media-breakpoint-down(lg) { display: flex; flex-direction: column; } } } select, input, textarea, .btn:not(.btn-icon) { border-radius: $border-radius-lg; } } } boost/scss/moodle/debug.scss 0000604 00000005011 15062070724 0012103 0 ustar 00 // Here we are forcing the navbar to be absolutely positioned for behat, because // when driver scrolls something into view in browser it doesn't account // for fixed positioned elements that end up obscuring the item thus // leading to errors that could be avoided by scrolling an additional amount. body.behat-site { .fixed-top { position: absolute; } // Sticky footer can overlap with elements so we keep it relative for behat. &.hasstickyfooter .stickyfooter, .stickyfooter { position: inherit; z-index: inherit; } // We need more spacing in action menus so behat does not click on the wrong menu item. .dropdown-item { margin-top: 4px !important; /* stylelint-disable declaration-no-important */ } // Remove following after MDL-57172 is fixed. &.drawer-ease { -webkit-transition: initial; -moz-transition: initial; transition: initial; } [data-region="drawer"] { -webkit-transition: initial; -moz-transition: initial; transition: initial; position: absolute; } .custom-control, .custom-switch { padding-left: 0; } .custom-control-input { position: static; z-index: 0; opacity: 1; width: auto; } .custom-control-label { &::before, &::after { content: none; } } // Workaround for MDL-70411. // Pad the side of the message drawer out slightly to ensure that Firefox scroll bar does not cover controls at the // edge of the screen. [data-region="message-drawer"] { padding-right: 10px; } &.jsenabled #page-footer .footer-content-popover { display: block; } &.path-grade-report-grader .gradeparent { tr.heading, tr.lastrow, th.header { position: relative; left: auto; } tr.heading { top: auto; } } } .phpinfo table, .phpinfo th, .phpinfo h2 { margin: auto; } .phpinfo .e, .phpinfo .v, .phpinfo .h { border: 1px solid $phpinfo-border-color; font-size: 0.8em; vertical-align: baseline; color: $phpinfo-color; background-color: $phpinfo-bg; } .phpinfo .e { background-color: $phpinfo-e-bg; font-weight: bold; } .phpinfo .h { background-color: $phpinfo-h-bg; font-weight: bold; } // PHP debug messages. body > .debuggingmessage { margin-top: $navbar-height; } body > .debuggingmessage ~ .debuggingmessage { margin-top: .5rem; } boost/scss/moodle/prefixes.scss 0000604 00000002323 15062070724 0012645 0 ustar 00 .form-control:-ms-input-placeholder { color: $input-placeholder-color; } .custom-select { -webkit-appearance: none; -moz-appearance: none; } .custom-range { -webkit-appearance: none; -moz-appearance: none; &::-webkit-slider-thumb, &::-moz-range-thumb, &::-ms-thumb { -webkit-appearance: none; -moz-appearance: none; } } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { &.form-control { -webkit-appearance: none; -moz-appearance: none; } } .card-columns { @include media-breakpoint-up(sm) { -webkit-column-gap: $card-columns-gap; -moz-column-gap: $card-columns-gap; } } .carousel-item { -webkit-backface-visibility: hidden; } .card { -webkit-background-clip: border-box; } .carousel-indicators li, .dropdown-menu, .form-control, .modal-content, .popover, .toast { -webkit-background-clip: padding-box; } .btn { -webkit-user-select: none; -ms-user-select: none; } @each $value in $user-selects { .user-select-#{$value} { -webkit-user-select: $value !important; /* stylelint-disable-line declaration-no-important */ -ms-user-select: none; } } boost/scss/moodle/editor.scss 0000604 00000000076 15062070724 0012311 0 ustar 00 // Over ride bootstrap editor CSS. body { margin: 8px; } boost/scss/moodle/bootstrap-rtl.scss 0000604 00000002064 15062070724 0013636 0 ustar 00 /** * Bootstrap overrides for RTL * * This file is only for overriding sass from upstream bootstrap, all general rtl fixes for * moodle scss should be placed immediately after the definition of the ltr rule. */ .breadcrumb-item { + .breadcrumb-item::before { content: "#{$breadcrumb-divider-rtl}"; /*rtl:remove*/ content: "#{$breadcrumb-divider}"; /* stylelint-disable-line declaration-block-no-duplicate-properties */ } } .dir-rtl { .custom-select { background-position: 0.75rem center; } .custom-switch .custom-control-input:checked ~ .custom-control-label::after { transform: translateX(-($custom-switch-width - $custom-control-indicator-size)); } .tooltip { &.bs-tooltip-left, &.bs-tooltip-right { .arrow { transform: rotate(180deg); } } &.bs-tooltip-left .arrow { left: auto; right: 0; } &.bs-tooltip-right .arrow { left: 0; right: auto; } } } boost/scss/moodle/drawer.scss 0000604 00000016375 15062070724 0012320 0 ustar 00 /* Anchor link offset fix. This makes hash links scroll 60px down to account for the fixed header. */ $fixed-header-y: $navbar-height; $drawer-width: 285px !default; $drawer-left-width: 285px !default; $drawer-right-width: 315px !default; $drawer-padding-x: 20px !default; $drawer-padding-y: 20px !default; $drawer-offscreen-gutter: 20px !default; $drawer-bg-color: $gray-100 !default; $drawer-scroll-bg-track: $gray-100 !default; $drawer-shadow-color: rgba(0, 0, 0, .25) !default; :target { scroll-margin-top: $fixed-header-y + 10px; } .pagelayout-embedded :target { padding-top: initial; margin-top: initial; } #nav-drawer.closed { left: -($drawer-width + $drawer-offscreen-gutter); } #nav-drawer[aria-hidden=true] .list-group-item { display: none; } /* Use a variable for the drawer background colors. */ $drawer-bg: darken($body-bg, 5%) !default; [data-region="drawer"] { position: fixed; width: $drawer-width; top: $fixed-header-y; height: calc(100% - #{$navbar-height}); overflow-y: auto; -webkit-overflow-scrolling: touch; z-index: $zindex-dropdown - 1; background-color: $drawer-bg; @include transition(right 0.5s ease, left 0.5s ease); } @include media-breakpoint-up(sm) { [data-region="drawer"] { padding: $drawer-padding-x $drawer-padding-y; } .jsenabled .btn-footer-popover, .jsenabled .btn-footer-communication { @include transition(0.2s); } } #nav-drawer { right: auto; left: 0; /* Override the z-indexes defined in bootstrap/_list-group.scss that lead to side effects on the user tours positioning. */ .list-group-item-action.active, .list-group-item.active { z-index: inherit; } .list-group-item-action.active + .list-group-item, .list-group-item.active + .list-group-item { border-top: none; } .list-group { // Remove default list styling in nav menus. ul { list-style: none; padding: 0; margin: 0; } // Add margin to be consistent with `.list-group-item` spacing. li { margin-bottom: -1px; } li:last-child { margin-bottom: 0; } } } body.drawer-ease { @include transition(margin-left 0.5s ease, margin-right 0.5s ease); } body:not(.uses-drawers).drawer-open-left { @include media-breakpoint-up(md) { margin-left: $drawer-left-width; } } body.drawer-open-left #page.drawers { @include media-breakpoint-up(md) { margin-left: $drawer-left-width; padding-left: 1rem; } } body.drawer-open-right { @include media-breakpoint-up(md) { margin-right: $drawer-right-width; } } $right-drawer-width: 320px; [data-region=right-hand-drawer] { display: flex; flex-direction: column; @include transition(right .2s ease-in-out); &.drawer { z-index: $zindex-sticky + 1; position: fixed; top: $navbar-height; right: 0; height: calc(100% - #{$navbar-height}); width: $right-drawer-width; box-shadow: -2px 2px 4px $drawer-shadow-color; padding: 0; visibility: visible; opacity: 1; } &.hidden { display: block; right: $right-drawer-width * -1; // Turn off visibility so that nothing in the drawer can receive focus when // it is hidden. visibility: hidden; opacity: 0; // Delay visibility changes until after the slide right animation has completed. @include transition(right .2s ease-in-out, visibility 0s ease-in-out .2s, opacity 0s ease-in-out .2s); } } @include media-breakpoint-down(sm) { [data-region=right-hand-drawer] { &.drawer { top: 0; height: 100%; z-index: $zindex-fixed + 1; } } body.drawer-open-left, body.drawer-open-right { overflow: hidden; } } .dir-rtl { [data-region=right-hand-drawer] { box-shadow: 2px 2px 4px $drawer-shadow-color; } } @mixin drawer() { background-color: $drawer-bg-color; // Drawers has a z-index higher than the page content, // lower than the top navbar and the sticky footer, // and lower to the message drawer. z-index: $zindex-sticky - 5; @include media-breakpoint-down(md) { // In small screens the drawer goes over the top navbar with a modal with a backdrop effect. z-index: $zindex-fixed + 5; } position: fixed; height: 100vh; top: 0; &.not-initialized { display: none; } } @mixin drawertypes() { &.drawer-right { @include transition(right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease); width: $drawer-right-width; max-width: $drawer-right-width; right: calc(-#{$drawer-right-width} + -10px); visibility: hidden; @include box-shadow($box-shadow-drawer-right); &.show { right: 0; visibility: visible; } .drawertoggle { margin-left: auto; margin-right: 5px; } } &.drawer-left { @include transition(left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease); width: $drawer-left-width; max-width: $drawer-left-width; left: calc(-#{$drawer-left-width} + -10px); visibility: hidden; @include box-shadow($box-shadow-drawer-left); &.show { left: 0; visibility: visible; } .drawertoggle { margin-right: auto; margin-left: 5px; } } &.drawer-bottom { bottom: -110%; &.show { bottom: 0; } } } .drawer { @include drawer(); @include drawertypes(); } @include media-breakpoint-up(lg) { .drawer { // Workaround to display the skip link elements from the blocks drawer infront of the navbar. // As the skip link is in a fixed position and z-index for this element is ignored // then it is hidden behind the top navbar. // The workaround is to actually give a z-index to the drawer so it appears in front of the // navbar (https://developer.mozilla.org/en-US/docs/Web/CSS/z-index). &#theme_boost-drawers-blocks:focus-within { z-index: $zindex-fixed + 1; } &.not-initialized { display: block; } } } .drawer-md, .drawer-sm { display: none; } .drawerheader { padding: 0; height: $navbar-height; display: flex; align-items: center; } .drawer.scrolled .drawerheader { box-shadow: 0 8px 11px -7px $drawer-shadow-color; } @include media-breakpoint-down(md) { .drawer-md { display: block; @include drawer(); @include drawertypes(); } } @include media-breakpoint-down(sm) { .drawer-sm { display: block; @include drawer(); @include drawertypes(); } } .drawercontent { position: relative; z-index: -1; height: calc(100% - #{$navbar-height}); display: flex; flex-direction: column; flex-wrap: nowrap; overflow-y: auto; padding: 0.4rem; .dropdown-menu .dropdown-item { width: 220px; white-space: normal; } @include thin-scrolls($drawer-scroll-bg-track); } boost/scss/moodle/templates.scss 0000604 00000000356 15062070724 0013022 0 ustar 00 // Style for template 3 columns auto. .columns-autoflow-1to1to1 { column-count: 3; } @media (max-width: 767px) { // Change to a single column for smaller screens. .columns-autoflow-1to1to1 { column-count: 1; } } boost/scss/moodle/moremenu.scss 0000604 00000005306 15062070724 0012653 0 ustar 00 .moremenu { opacity: 0; height: $moremenu-height; &.observed { opacity: 1; } .nav-link { height: $moremenu-height; display: flex; align-items: center; border-right: none; border-bottom: solid 3px transparent; border-left: none; border-top: none; @include hover-focus() { @include hover-navbar(); } &.active { background-color: $gray-100; border-color: transparent; border-bottom-color: $primary; &:focus, &:hover { background-color: $gray-100; border-bottom-color: $primary; } } &.focus, &:focus { position: relative; } &[data-toggle="tab"] { display: inline-flex; flex-direction: column; align-items: center; justify-content: center; &::after { content: attr(data-text) / ""; height: 0; visibility: hidden; overflow: hidden; user-select: none; pointer-events: none; font-weight: bold; @media speech { display: none; } } } } .nav-tabs { margin-left: 0; background-color: $body-bg; } .show > .nav-link, .active > .nav-link, .nav-link.show, .nav-link.active { background: transparent; } // Styling for dropdown menus inside the MoreButton. .dropdownmoremenu > .dropdown-menu { & > .dropdown-item { padding: 0; } .dropdown-menu { position: static; padding: 0; border: 0; &.show { display: block; } .dropdown-item { background-color: $gray-100; @include hover-focus() { color: $dropdown-link-hover-color; @include gradient-bg($dropdown-link-active-bg); } } .dropdown-divider { display: none; } } } .dropdown-item[aria-current="true"], .dropdown-item.active { background-color: transparent; color: $dropdown-link-color; &:focus-within, &:hover { background-color: $dropdown-link-active-bg; color: $dropdown-link-active-color; a { color: $dropdown-link-active-color; } } &:before { @extend .fa-solid; content: fa-content($fa-var-check); } } } boost/scss/moodle/primarynavigation.scss 0000604 00000001263 15062070724 0014565 0 ustar 00 .primary-navigation { .navigation { height: $navbar-height; .nav-link { height: $navbar-height; color: $gray-900; border-top: 3px solid transparent; } } } @include media-breakpoint-down(sm) { .primary-navigation { display: none; } .editmode-switch-form label { @include sr-only(); } } .editmode-switch-form .custom-control-input { width: 100%; z-index: 1; } .drawer-primary .drawercontent { padding: 0; .list-group { border-radius: 0; margin-top: -1px; .list-group-item { border-left: 0; border-right: 0; } } } boost/scss/moodle/reportbuilder.scss 0000604 00000025175 15062070724 0013714 0 ustar 00 /** * Reportbuilder. */ /* Table */ .reportbuilder-table { td { @extend .align-middle; } .action-menu .menubar { justify-content: end; } } /* Filters */ .reportbuilder-wrapper { .filters-dropdown { width: 27rem; padding: 0; z-index: $zindex-modal; overflow: hidden; @include media-breakpoint-down(sm) { width: 100%; } .reportbuilder-filters-sidebar { max-height: calc(100vh - #{$navbar-height} - 1rem); overflow-y: auto; @include thin-scrolls($white); } } .reportbuilder-filters-wrapper, .reportbuilder-conditions-list { .mform { &.full-width-labels { .fitem.row { > .col-md-3, > .col-md-9 { flex: 0 0 100%; max-width: 100%; } .fdate_selector { flex-wrap: wrap; } } } .form-group { margin-bottom: 0; max-width: 100%; > span { max-width: 100%; } } } .filter { .filter-header { font-size: $h5-font-size; .filter-name { font-size: 1rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-right: 1rem; } .filter-name:hover { white-space: normal; text-overflow: clip; word-break: break-all; } } } } } /** * Custom Reports. */ $rb-left-sidebar-width: 250px; $rb-right-sidebar-width: 350px; .reportbuilder-report-container { @extend .flex-fill; min-width: 0; button[data-action="toggle-edit-preview"] .loading-icon { margin-left: .5rem; } } // Allow horizontal scroll in editor table. .reportbuilder-editor-table-container { overflow-x: auto; } /* Custom table headers */ .reportbuilder-table th { button[data-action="report-remove-column"], span[data-drag-type="move"] { .icon { width: 12px; height: 12px; font-size: 12px; vertical-align: text-top; color: $body-color; } } button[data-action="report-remove-column"] .icon { margin-right: 0; } } /* Sidebar menu */ .reportbuilder-sidebar-menu { @include media-breakpoint-up(lg) { width: $rb-left-sidebar-width; flex-shrink: 0; } .card-body .list-group-item { padding: .75rem; .icon { width: 12px; height: 12px; font-size: 12px; } } } .reportbuilder-sidebar-menu-cards { overflow-y: auto; @include thin-scrolls($gray-100); } /* Settings sidebar */ .reportbuilder-sidebar-settings { overflow-y: auto; @include thin-scrolls($gray-100); @include media-breakpoint-up(lg) { width: $rb-right-sidebar-width; flex-shrink: 0; } .list-group-item { padding: .75rem; .icon { width: 12px; height: 12px; font-size: 12px; color: $body-color; } button[data-action="report-remove-filter"], button[data-action="report-remove-condition"] { .icon { margin-right: 0; vertical-align: text-top; } } span[data-drag-type="move"] .icon { vertical-align: text-top; } } div[data-region="settings-sorting"] .list-group-item span[data-drag-type="move"] .icon { vertical-align: middle; } div[data-region="settings-cardview"] form { .col-md-3, .col-md-9 { flex: 1 1; max-width: initial; } div[data-fieldtype="submit"] { flex-basis: auto; } } .inplaceeditable.inplaceeditingon input { width: 100%; } } /* Add button styles when a toggle button is active. */ .reportbuilder-wrapper { button.btn-outline-secondary[data-toggle="collapse"]:not(.collapsed), .dropdown.show button.btn-outline-secondary[data-toggle="dropdown"] { color: color-yiq($gray-600); background-color: $gray-600; border-color: $gray-600; } } /* Drag&drop styles. */ .reportbuilder-sortable-list li, .reportbuilder-table th, .reportbuilder-conditions-list .condition { &.sortable-list-current-position { background-color: lighten($primary, 40%); } &.sortable-list-is-dragged { background-color: $white; opacity: 0.85; } } /* Reportbuilder full page styles. */ @include media-breakpoint-up(lg) { $tabs-height: 83px; $sidebar-margin-top: $navbar-height + $tabs-height + 20px; .path-admin-reportbuilder.pagelayout-popup { // Fix for behat-site defined in theme/boost/scss/moodle/debug.scss:7 is not needed. Override it. &.behat-site .fixed-top { position: fixed; } #region-main { border: none; padding: 0; } #maincontent { visibility: hidden; } .dynamictabs .nav-tabs { position: fixed; z-index: $zindex-fixed; width: calc(100% - 35px); padding-top: 1.25rem; background-color: $white; box-shadow: 0 1.25rem 0 $white; // Small hack to simulate padding bottom after nav-tabs border. } .dynamictabs .tab-content { padding-top: $tabs-height; } .reportbuilder-sidebar-menu { position: fixed; .reportbuilder-sidebar-menu-cards { max-height: calc(100vh - #{$sidebar-margin-top} - 52px); // 52px corresponds to "search" input size. } } .reportbuilder-sidebar-settings { position: fixed; right: 30px; max-height: calc(100vh - #{$sidebar-margin-top}); } .reportbuilder-report[data-editing] .reportbuilder-report-container { max-height: calc(100vh - #{$sidebar-margin-top}); overflow-y: auto; @include thin-scrolls($gray-100); margin-left: calc(#{$rb-left-sidebar-width} + 1rem); margin-right: calc(#{$rb-right-sidebar-width} + 1rem); } .reportbuilder-audiences-container { margin-left: calc(#{$rb-left-sidebar-width} + 1rem); } } } // Fix popper.js behaviour in fullpage report (using 'popup' page layout). #page-admin-reportbuilder-edit #page { overflow-y: auto; } /* Toggle cards. */ .reportbuilder-toggle-card { .card-header { border-bottom: none; } .card-body { border-top: $card-border-width solid $card-border-color; } .toggle-card-button { i.toggle-card-icon { color: $gray-600; font-size: 1.5em; font-weight: 700; } // Toggle icons using standard bootstrap collapse. .collapsed-icon-container { display: none; } .expanded-icon-container { display: inline-block; } &.collapsed { .collapsed-icon-container { display: inline-block; } .expanded-icon-container { display: none; } } } } /* Audiences. */ .reportbuilder-audiences-container { /* 'OR' separator. */ .audience-separator { text-transform: uppercase; &::before, &::after { content: ''; flex: 1; border-bottom: 1px solid $report-audience-border-color; } &:not(:empty)::before { margin-right: 1rem; } &:not(:empty)::after { margin-left: 1rem; } } /* Card action icons. */ .instance-card { .card-header { i.icon { margin-right: 0; } } } } /* Report table card view styles */ @mixin table-cards { table.reportbuilder-table { thead { display: none; } tr { display: flex; flex-direction: column; margin: .5rem 0; padding: .25rem .5rem 0 .5rem; background-color: $card-bg !important; /* stylelint-disable-line declaration-no-important */ word-wrap: break-word; background-clip: border-box; border: $card-border-width solid $card-border-color; @include border-radius($card-border-radius); &:hover { background-color: $card-bg !important; /* stylelint-disable-line declaration-no-important */ } &.emptyrow { display: none; } &:not(.show) { td[data-cardviewhidden] { display: none; } } td { display: block; min-height: 3.6rem; padding: .5rem .25rem; border: none; &::before { content: attr(data-cardtitle); display: block; text-transform: uppercase; font-size: 70%; color: $gray-800; } &:not([data-cardtitle]) { min-height: 3rem; } &:not(:first-child):not(.card-toggle) { border-top: $card-border-width solid $card-border-color; } &:first-child { padding-right: 2rem; } } td.card-toggle { display: block !important; /* stylelint-disable-line declaration-no-important */ position: absolute; right: 10px; button { padding: 0 .5rem; color: $gray-600; i { font-size: 1.5em; font-weight: bold; } } } } } } .reportbuilder-report[data-report-type="0"]:not([data-editing]) { // Report card view for small screens (if not forcing table). @include media-breakpoint-down(xs) { &:not([data-force-table]) { @include table-cards; } } // Report card view for bigger screens (if forcing card). @include media-breakpoint-up(sm) { &[data-force-card] { @include table-cards; } } } boost/scss/moodle/backup-restore.scss 0000604 00000011007 15062070724 0013745 0 ustar 00 .path-backup .mform { .grouped_settings { clear: both; overflow: hidden; /* Use card styles but avoid extend because that brings in too much. */ &.section_level { background-color: $card-bg; @include border-radius($card-border-radius); border: $card-border-width solid $card-border-color; @include clearfix; padding: $card-spacer-x; margin-bottom: $card-spacer-x; } } /* These are long labels with checkboxes on the right. */ .include_setting { width: 50%; display: inline-block; float: left; padding: $table-cell-padding-sm; } .normal_setting { width: 50%; display: inline-block; float: left; padding: $table-cell-padding-sm; } } .path-backup { /* Bold section labels */ .section_level { font-weight: bold; } .section_level .activity_level { font-weight: normal; } .proceedbutton { margin-left: auto; } } /* Override the columns width to leave more room for the labels. */ .path-backup .mform { .root_setting, .grouped_settings { /* Striped rows like a table */ &:nth-of-type(odd) { background-color: $table-accent-bg; } &:nth-of-type(even) { background-color: $card-bg; } .form-group { /* These checkboxes with no label on the left. */ .col-md-3.checkbox { width: 0%; } .col-md-9.checkbox { width: 100%; left: 0; } } } } /* Detail pair is (usually) some short label with a longer value */ .path-backup .detail-pair { .detail-pair-label { width: 25%; float: left; clear: left; } .detail-pair-value { width: 75%; float: left; } } .path-backup .backup-restore .singlebutton { float: right; } /* Make these bits full width and work with the detail-pair */ .path-backup .backup-section { .sub-header, .backup-sub-section, .singlebutton, .header { width: 100%; float: left; clear: both; } /* Fix for nested table headers */ th.header { width: auto; float: none; } /* Add card styles to backup sections */ ::after { content: ""; display: table; clear: both; } background-color: $card-bg; @include border-radius($card-border-radius); border: $card-border-width solid $card-border-color; @include clearfix; padding: $card-spacer-x; margin-bottom: $card-spacer-x; } .path-backup .notification.dependencies_enforced { color: $danger; font-weight: bold; } .path-backup .backup_progress { margin-top: $spacer; margin-bottom: $spacer; .backup_stage { color: $text-muted; &.backup_stage_current { font-weight: bold; color: inherit; } } } .path-backup .backup_progress span.backup_stage.backup_stage_complete { color: inherit; } #page-backup-restore .filealiasesfailures { background-color: $state-danger-bg; .aliaseslist { background-color: $body-bg; } } .path-backup .wibbler { width: 500px; margin: 0 auto 10px; border-bottom: 1px solid $backup-restore-wibbler-border-color; border-right: 1px solid $backup-restore-wibbler-border-color; border-left: 1px solid $backup-restore-wibbler-border-color; position: relative; min-height: 4px; .wibble { position: absolute; left: 0; right: 0; top: 0; height: 4px; } .state0 { background: $backup-restore-state0-bg; } .state1 { background: $backup-restore-state1-bg; } .state2 { background: $backup-restore-state2-bg; } .state3 { background: $backup-restore-state3-bg; } .state4 { background: $backup-restore-state4-bg; } .state5 { background: $backup-restore-state5-bg; } .state6 { background: $backup-restore-state6-bg; } .state7 { background: $backup-restore-state7-bg; } .state8 { background: $backup-restore-state8-bg; } .state9 { background: $backup-restore-state9-bg; } .state10 { background: $backup-restore-state10-bg; } .state11 { background: $backup-restore-state11-bg; } .state12 { background: $backup-restore-state12-bg; } } boost/scss/moodle/admin.scss 0000604 00000031345 15062070724 0012116 0 ustar 00 /* admin.less */ .formtable tbody th { font-weight: normal; text-align: right; } .path-admin #assignrole { width: 60%; margin-left: auto; margin-right: auto; } .path-admin .admintable .leftalign { text-align: left; } .environmenttable { .warn { @extend .alert-warning; } .error { @extend .alert-danger; } .ok { @extend .alert-success; } } .path-admin .admintable.environmenttable .name, .path-admin .admintable.environmenttable .info, .path-admin #assignrole .admintable .role, .path-admin #assignrole .admintable .userrole, .path-admin #assignrole .admintable .roleholder { white-space: nowrap; } .path-admin .incompatibleblockstable td.c0 { font-weight: bold; } #page-admin-course-category .addcategory { padding: 10px; } #page-admin-course-index .editcourse { margin: 20px auto; } #page-admin-course-index .editcourse th, #page-admin-course-index .editcourse td { padding-left: 10px; padding-right: 10px; } .timewarninghidden { display: none; } #page-admin-qtypes #qtypes div, #page-admin-qtypes #qtypes form, #page-admin-qbehaviours #qbehaviours div, #page-admin-qbehaviours #qbehaviours form { display: inline; } #page-admin-qtypes #qtypes img.spacer, #page-admin-qbehaviours #qbehaviours img.spacer { width: 16px; } #page-admin-qbehaviours .cell.c3, #page-admin-qtypes .cell.c3 { font-size: $font-size-sm; } #page-admin-lang .generalbox, #page-admin-course-index .singlebutton, #page-admin-course-index .addcategory, #page-course-index .buttons, #page-course-index-category .buttons, #page-admin-course-category .addcategory, #page-admin-stickyblocks .generalbox, #page-admin-maintenance .buttons, #page-admin-course-index .buttons, #page-admin-course-category .buttons, #page-admin-index .copyright, #page-admin-index .copyrightnotice, #page-admin-index .adminerror .singlebutton, #page-admin-index .adminwarning .singlebutton, #page-admin-index #layout-table .singlebutton { text-align: center; margin-bottom: 1em; } .path-admin-roles .capabilitysearchui { text-align: left; margin-left: auto; margin-right: auto; margin-top: $spacer; } #page-admin-roles-define .topfields { margin: 1em 0 2em; } #page-admin-roles-override .capcurrent, #page-admin-roles-define .capdefault { background-color: $table-hover-bg; } #page-filter-manage .backlink, .path-admin-roles .backlink { margin-top: 1em; } #page-admin-roles-explain #chooseuser h3, #page-admin-roles-usersroles .contextname { margin-top: 0; } #page-admin-roles-explain #chooseusersubmit { margin-top: 0; text-align: center; } #page-admin-roles-usersroles p { margin: 0; } #page-admin-roles-override .cell.c1, #page-admin-roles-assign .cell.c3, #page-admin-roles-assign .cell.c1 { padding-top: 0.75em; } #page-admin-roles-override .overridenotice, #page-admin-roles-define .definenotice { margin: 1em 10% 2em 10%; text-align: left; } #page-admin-index .adminwarning.availableupdatesinfo .moodleupdateinfo span { display: block; } #page-admin-index .updateplugin div { margin-bottom: 0.5em; } #page-admin-user-user_bulk #users .fgroup { white-space: nowrap; } #page-admin-report-stats-index .graph { text-align: center; margin-bottom: 1em; } #page-admin-report-courseoverview-index .graph { text-align: center; margin-bottom: 1em; } #page-admin-lang .translator { border-width: 1px; border-style: solid; } // This is the CSS for the role assignment control. .path-admin .roleassigntable { width: 100%; } .path-admin .roleassigntable td { vertical-align: top; padding: 0.2em 0.3em; } .path-admin .roleassigntable p { text-align: left; margin: 0.2em 0; } .path-admin .roleassigntable #existingcell, .path-admin .roleassigntable #potentialcell { width: 42%; } // Targetting the label at the top. .path-admin .roleassigntable #existingcell p > label:first-child, .path-admin .roleassigntable #potentialcell p > label:first-child { font-weight: bold; } .path-admin .roleassigntable #buttonscell { width: 16%; } .path-admin .roleassigntable #buttonscell #assignoptions { font-size: $font-size-sm; } .path-admin .roleassigntable #removeselect_wrapper, .path-admin .roleassigntable #addselect_wrapper { width: 100%; } .path-admin table.rolecap tr.rolecap th { text-align: left; font-weight: normal; } .path-admin .rolecap .hiddenrow { display: none; } .path-admin #defineroletable { .rolecap { .inherit, .allow, .prevent, .prohibit { text-align: center; padding: 0; min-width: 3.5em; } } } .path-admin .rolecap .cap-name, .path-admin .rolecap .note { display: block; font-size: $font-size-sm; white-space: nowrap; font-weight: normal; } .path-admin .rolecap label { display: block; text-align: center; padding: 0.5em; margin: 0; } .path-admin, .format-site { .header-maxwidth, .secondary-navigation .navigation .nav-tabs { max-width: none; } } .path-admin.path-admin-roles:not(.format-site), .path-admin.path-admin-tool-lp { .header-maxwidth, .secondary-navigation .navigation .nav-tabs { max-width: $course-content-maxwidth; } } .plugincheckwrapper { width: 100%; } .environmentbox { margin-top: 1em; } #mnetconfig table { margin-left: auto; margin-right: auto; } .environmenttable .cell { padding: .15em .5em; } #trustedhosts .generaltable { margin-left: auto; margin-right: auto; width: 500px; } #trustedhosts .standard { width: auto; } // This usage of legend is a bit weird, // seems to be using them as error text // that's only sometimes visible. Should // look into sorting it. #adminsettings legend { display: none; } #adminsettings fieldset.error { margin: .2em 0 .5em 0; } #adminsettings fieldset.error legend { display: block; } #admin-spelllanguagelist textarea { /* rtl:ignore */ text-align: left; /* rtl:ignore */ direction: ltr; } /* Styles for flags on admin settings */ .adminsettingsflags { float: right; } .adminsettingsflags label { margin-right: 7px; } .form-description pre, .formsettingheading pre { /*rtl:ignore*/ direction: ltr; } .form-item .form-setting .form-htmlarea { display: inline; } .form-item .form-setting .form-htmlarea .htmlarea { width: 640px; display: block; } .form-item .form-setting .form-multicheckbox ul { list-style: none; padding: 0; margin: 7px 0 0 0; } .form-item .form-setting .defaultsnext { display: inline; } .form-item .form-setting .locked-checkbox { margin-right: 0.2em; margin-left: 0.5em; display: inline; } .form-item .form-setting .form-password .unmask, .form-item .form-setting .form-defaultinfo { display: inline-block; } .form-item .form-setting .form-defaultinfo { max-width: 100%; word-wrap: break-word; } #admin-emoticons td input { width: 8em; } #admin-emoticons td.c0 input { width: 4em; } #adminthemeselector table { border-collapse: collapse; } #adminthemeselector .selectedtheme { border: 1px solid $state-info-border; } .admin_colourpicker, .admin_colourpicker_preview { display: none; } .jsenabled .admin_colourpicker_preview { display: inline; } @include media-breakpoint-up(md) { .jsenabled .admin_colourpicker { display: block; height: 102px; width: 410px; margin-bottom: 10px; box-sizing: content-box; } .admin_colourpicker .colourdialogue { float: left; border: 1px solid $input-border-color; } .admin_colourpicker .previewcolour { border: 1px solid $input-border-color; margin-left: 301px; } .admin_colourpicker .currentcolour { border: 1px solid $input-border-color; margin-left: 301px; border-top-width: 0; } } @include media-breakpoint-down(sm) { .jsenabled .admin_colourpicker { height: 150px; margin-bottom: 10px; display: block; position: relative; } .admin_colourpicker .previewcolour { display: none; } .admin_colourpicker .currentcolour { position: absolute; border: 1px solid $border-color; top: 100px; left: 0; } } .admin_colourpicker .loadingicon { vertical-align: middle; margin-left: auto; } #page-admin-index #notice .checkforupdates { text-align: center; } // Plugins overview page at admin/plugins.php #page-admin-plugins { #plugins-overview-panel { .info { display: inline-block; margin-right: 1em; } } .checkforupdates { margin: 10px 0; .singlebutton { margin: 5px 0; padding: 0; div, input { margin: 0 3px 0 0; } } } .updateavailableinstallall { margin: 5px 0; padding: 0; div, input { margin: 0 3px 5px 0; } } #plugins-control-panel { .status-missing td { background-color: $state-warning-bg; } .pluginname { .componentname { font-size: $font-size-sm; color: $text-muted; margin-left: 22px; } } .version { .versionnumber { font-size: $font-size-sm; color: $text-muted; } } .uninstall { a { color: $danger; } } .notes { .label { margin-right: 3px; } .requiredby { font-size: $font-size-sm; color: $text-muted; } } } } // Plugins check page displayed during upgrade. #plugins-check-page { // Plugins check table. #plugins-check { .status-missing, .status-downgrade { td { background-color: $state-danger-bg; } } } } // Available plugin update notification. #plugins-check-page, #plugins-control-panel { .pluginupdateinfo { background-color: $state-info-bg; &.maturity50 { background-color: $state-danger-bg; } &.maturity100, &.maturity150 { background-color: $state-warning-bg; } padding: 5px; margin: 10px 0; @include border-radius(5px); .info { display: inline-block; } .separator:after { content: " | "; } .singlebutton { margin: 5px 0; padding: 0; div, input { margin: 0 3px 0 0; } } } } .plugins-management-confirm-buttons { > div { display: inline-block; margin: 1em 1em 1em 0; } .continue { padding: 0; div, input { margin: 0; } } } #page-admin-index .upgradepluginsinfo { text-align: center; } #page-admin-index .adminwarning.availableupdatesinfo .moodleupdateinfo .separator:after { content: " | "; } /** MNet networking */ #page-admin-mnet-peers .box.deletedhosts { margin-bottom: 1em; font-size: $font-size-sm; } #core-cache-plugin-summaries table, #core-cache-store-summaries table { width: 100%; } #core-cache-lock-summary table, #core-cache-definition-summaries table, #core-cache-mode-mappings table { margin: 0 auto; } #core-cache-store-summaries .default-store td { font-style: italic; } #core-cache-rescan-definitions, #core-cache-mode-mappings .edit-link, #core-cache-lock-additional-actions .new-instance { margin-top: 0.5em; text-align: center; } .maintenancewarning { position: fixed; bottom: 0; right: 0; overflow: hidden; z-index: $zindex-dropdown; } .modal.modal-in-page { z-index: 0; } #page-admin-search { .adminpagetitle { margin-bottom: 0; border-bottom: none; } .adminpagepath { display: flex; flex-wrap: wrap; list-style: none; padding: 0; margin: 0 0 1.5rem 0; li { + li:before { padding-right: 0.5rem; padding-left: 0.5rem; content: "#{$breadcrumb-divider}"; } } } @media (min-width: 576px) { .container { overflow-wrap: break-word; } } } #page-admin-tasklogs { .task-class { font-size: $font-size-sm; color: $gray-600; } } .path-admin-tool-uploaduser { .uuwarning { background-color: $state-warning-bg; } .uuerror { background-color: $state-danger-bg; } .uuinfo { background-color: $state-success-bg; } } boost/scss/moodle/moodlenet.scss 0000604 00000004751 15062070724 0013015 0 ustar 00 .moodlenet-share-dialog { min-height: 500px; .modal-header { .moodlenet-share-moodlenetinfo { align-items: baseline; .moodlenet-logo { display: flex; .icon { width: auto; height: 1.3rem; } } .moodlenet-title { display: flex; padding-left: 0.5em; } } &.no-border { border-bottom: none; } &.no-header-text { .moodlenet-share-moodlenetinfo { .moodlenet-title { display: none; } } } } .modal-body { .moodlenet-share-activity-info { @include border-radius(); @include alert-variant($primary-light-background, $primary-light-border, $body-color); border-width: 1px; border-style: solid; padding: 0.6em 1.5em; margin-bottom: 1rem; .moodlenet-share-activity-info-hr { border-bottom: 1px solid $gray-300; } .moodlenet-activity-type, .moodlenet-activity-name { display: block; } } .moodlenet-share-notice { background-color: $moodlenet-share-notice-bg; padding: 1rem; } .moodlenet-share-modal-content { .loading-icon { .icon { width: 60px; height: 60px; font-size: 60px; } } .moodlenet-circle-status { height: 18rem; margin: auto; &.success { background: radial-gradient(circle, rgba(25, 143, 81, 0.1) 9rem, transparent 9rem); } &.fail { background: radial-gradient(circle, rgba(202, 49, 32, 0.1) 9rem, transparent 9rem); } span { display: block; margin: auto; &.status-icon { .icon { font-size: 8rem; width: auto; margin: 0; } } } } } } .modal-footer { .moodlenet-share-to { margin-right: auto; } } } boost/scss/moodle/courseindex.scss 0000604 00000012151 15062070724 0013350 0 ustar 00 $courseindex-link-color: $list-group-action-color !default; $courseindex-link-color-selected: color-yiq($primary) !default; $courseindex-link-dimmed-color: $gray-600 !default; $courseindex-link-hover-color: black !default; $courseindex-item-dragging-bg: theme-color-level('info', -11) !default; $courseindex-item-dragging-border: theme-color-level('info', -9) !default; $courseindex-item-active-border: $gray-300 !default; $courseindex-item-active-bg: $gray-100 !default; $courseindex-item-page-bg: $primary !default; $courseindex-item-padding-y: 0.5rem; $courseindex-item-padding-x: 0.5rem; $courseindex-item-radius: $border-radius !default; $courseindex-item-current: $primary !default; @mixin courseindex-item-hover() { @include hover-focus() { color: $courseindex-link-hover-color; .courseindex-link, .courseindex-chevron { color: $courseindex-link-hover-color; cursor: pointer; } &.dimmed { color: $courseindex-link-hover-color; .courseindex-link, .courseindex-chevron { color: $courseindex-link-hover-color; } } &.draggable { cursor: pointer; } } } @mixin courseindex-item-dragging() { &.dragging { border: $border-width solid $courseindex-item-dragging-border; background-color: $courseindex-item-dragging-bg; } } .courseindex { // Both activity and section items. .courseindex-item { padding: $courseindex-item-padding-y $courseindex-item-padding-x; border: $border-width solid transparent; @include border-radius($courseindex-item-radius); &.courseindex-section-title a { font-weight: bold; } .icons-collapse-expand { padding-right: 4px; } .courseindex-link, .courseindex-chevron { color: $courseindex-link-color; @include hover-focus() { color: $courseindex-link-hover-color; text-decoration: none; } } @include courseindex-item-hover(); @include courseindex-item-dragging(); &.active { background-color: $courseindex-item-active-bg; border-color: $courseindex-item-active-border; } // Hidden elements. &.dimmed { color: $courseindex-link-dimmed-color; .courseindex-link, .courseindex-chevron { color: $courseindex-link-dimmed-color; } // Current page dimmed item. &.pageitem { color: $courseindex-link-color-selected; a { color: $courseindex-link-color-selected; } } } // Restrictions icon. .courseindex-locked { display: none; } &.restrictions { .courseindex-locked { display: block; } } // Current page item. &.pageitem { background-color: $courseindex-item-page-bg; color: $courseindex-link-color-selected; scroll-margin: 6rem; a { color: $courseindex-link-color-selected; } @include hover-focus() { background-color: darken($courseindex-item-page-bg, 7.5%); color: darken($courseindex-link-color-selected, 10%); .courseindex-link, .courseindex-chevron { color: darken($courseindex-link-color-selected, 10%); } } } // Completion. .completioninfo { min-width: 24px; &.completion_complete { color: $success; } &.completion_fail { color: $danger; } } &.indented { margin-left: map-get($spacers, 3); } } // The full section collapsable. .courseindex-section { @include courseindex-item-dragging(); border-left: solid 3px transparent; .current-badge { line-height: $line-height-base; display: none; } &.current { border-left: solid 3px $courseindex-item-current; .current-badge { display: inline-block; } } &.dropready .courseindex-item-content { /* Extra dropzone space */ padding-bottom: 1em; } .courseindex-sectioncontent { .courseindex-item { padding-left: $courseindex-item-padding-x; } } } // General icons size. .icon { font-size: 12px; } // Element visible only on editing mode. .d-flex-noedit { display: none; } &.editing { .d-flex-noedit { display: flex; } } // Placeholders. .media-list { .rounded-circle { height: 1rem; width: 1rem; } .w-100 { height: 1rem; margin: 0.5rem 0; } } } boost/scss/moodle/modal.scss 0000604 00000001457 15062070724 0012123 0 ustar 00 .modal { .modal-body { & > .loading-icon { display: block; position: relative; width: 100%; height: 100%; .icon { position: absolute; top: 50%; /*rtl:ignore*/ left: 50%; transform: translate(-50%, -50%); } } } // Override Bootstrap .close for better accessibility. .close { // Adjust the margins so the focus outline does not look clipped. margin: -0.8rem -0.8rem -0.8rem auto; // Inherit the opacity when focus is received for better focus outline contrast. &:not(:disabled):not(.disabled) { @include hover-focus() { opacity: inherit; } } } } boost/scss/moodle/action-menu.scss 0000604 00000004666 15062070724 0013253 0 ustar 00 .action-menu .dropdown-toggle { text-decoration: none; display: inline-block; } .action-menu { white-space: nowrap; display: inline; // Kebab action menus do no show chevrons or extra dropdown icons. .dropdown-toggle.no-caret { &::after { display: none; } &::before { display: none; } } .dropdown.downleft .dropdown-subpanel-content { right: 0; left: auto; } .dropdown-subpanel.content-displayed { background-color: $gray-200; } .dropdown-subpanel-content { max-width: $modal-sm; box-shadow: 0 0 1rem rgba($black, .15); } .dropdown-subpanel-content.show { @include optional-animation(0.15s animate-pop); } // Chevrons in sub panel items are always to end. .dropdown-subpanel .dropdown-item { &::after { border: 0; @extend .fa-solid; content: fa-content($fa-var-chevron-right); } &::before { display: none; } } } @keyframes animate-pop { 0% { transform: scale(0.90, 0.90); } 100% { transform: scale(1, 1); } } .dir-rtl .action-menu { // Chevrons in subpanels items are always to end. .dropdown-subpanel .dropdown-item { &::after { border: 0; @extend .fa-solid; content: fa-content($fa-var-chevron-left); } &::before { display: none; } } } // Make links in a menu clickable anywhere in the row. .dropdown-item { a { display: block; width: 100%; color: $body-color; } &.active, &:active, &:hover, &:focus, &:focus-within { outline: 0; background-color: $dropdown-link-active-bg; color: $dropdown-link-active-color; a { color: $dropdown-link-active-color; } } &[aria-current="true"], &[aria-selected="true"] { position: relative; display: flex; align-items: center; &:before { @extend .fa-solid; content: fa-content($fa-var-check); position: absolute; left: 0.4rem; font-size: 0.7rem; } } } .dropdown-item-outline { &:focus, &:focus-within { outline: solid $dropdown-link-active-bg; } a:focus, a:focus-visible { outline: 0; } } boost/scss/moodle/tool_usertours.scss 0000604 00000006653 15062070724 0014142 0 ustar 00 /** * Tour step must sit above all other UI components. * The backdrop is the lowest point in the tour. * Everything else is in the container, and the target background should be at the same z-index. * ----- moodle * ---- step backdrop * --- step container * --- step target background */ $flexitour-base-zindex: 1040; // The backdrop is the backdrop used in 'modal' step display. div[data-flexitour="backdrop"] { background-color: #{$modal-backdrop-bg}; opacity: #{$modal-backdrop-opacity}; // The backdrop needs to have a lower z-index than everything else in the tour, but higher than everything else in Moodle. z-index: #{$flexitour-base-zindex}; } // The step-background is used to highlight the region targetted in the step. div[data-flexitour="step-background-fader"], div[data-flexitour="step-background"] { @include border-radius($border-radius-lg); // The step container, and the target background should be at the same z-index. padding: 10px; z-index: ($flexitour-base-zindex + 1); } span[data-flexitour="container"], div[data-flexitour="step-background-fader"], [data-flexitour="step-backdrop"] > td, [data-flexitour="step-backdrop"] { // The step container, and the target background should be at the same z-index. z-index: ($flexitour-base-zindex + 2); } span[data-flexitour="container"] { .modal-dialog { /** * Remove all margins to: * 1) ensure that the arrow touches the target; and * 2) ensure that the focus border touches the modal. */ margin: 0; } div[data-role="arrow"] { border-width: $popover-arrow-width; } div[data-role="arrow"], div[data-role="arrow"]:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: #{$popover-arrow-width}; } // We need to know the opposite sides for arrow placement. $opposites: ( top: bottom, bottom: top, left: right, right: left, ); // These are the next leading side and allow for placement half-way along the step dialogue. $sides: ( top: left, bottom: left, left: top, right: top, ); @each $direction in map-keys($opposites) { $opposite: map_get($opposites, $direction); $side: map_get($sides, $direction); $oppositeside: map_get($opposites, $side); &[x-placement="#{$direction}"], &[x-placement="#{$direction}-start"] { margin-#{$opposite}: #{$popover-arrow-width}; div[data-role="arrow"] { #{$opposite}: -$popover-arrow-width; #{$side}: 50%; margin-#{$side}: -$popover-arrow-width; border-#{$opposite}-width: 0; border-#{$direction}-color: #{$popover-arrow-outer-color}; } div[data-role="arrow"]:after { #{$opposite}: 1px; margin-#{$side}: -#{$popover-arrow-width}; content: " "; border-#{$opposite}-width: 0; border-#{$direction}-color: #{$popover-arrow-color}; } } } } // Hack the bone! Hack the bone! [data-region="drawer"] [data-flexitour="container"] { /*rtl:ignore*/ margin-left: -15px; width: $drawer-width - 10px; } boost/scss/moodle/dropdown.scss 0000604 00000002223 15062070724 0012653 0 ustar 00 /** * Dropdown menu Moodle specific styles. */ // Make links in a menu clickable anywhere in the row. .dropdown-item { a { display: block; width: 100%; color: $body-color; } &.active, &:active, &:hover, &:focus, &:focus-within { outline: 0; background-color: $dropdown-link-active-bg; color: $dropdown-link-active-color; a { color: $dropdown-link-active-color; } } &[aria-current="true"], &[aria-selected="true"] { position: relative; display: flex; align-items: center; &:before { @extend .fa-solid; content: fa-content($fa-var-check); position: absolute; left: 0.4rem; font-size: 0.7rem; } } } // Add dropdown menu items styles for each theme color (mantainning default hover colour for contrast). @each $color, $value in $theme-colors { .dropdown-item.text-#{$color} { color: $value; &:hover { color: $dropdown-link-hover-color !important; /* stylelint-disable-line declaration-no-important */ } } } boost/scss/moodle/icons.scss 0000604 00000010622 15062070724 0012134 0 ustar 00 // The only class we need for icons is .icon // Standardize the size, padding and alignment for all icons in Moodle. // Size of default icons. $icon-width: 16px; $icon-height: 16px; // Size of big icons. $icon-medium-width: 24px; $icon-medium-height: 24px; // Size of big icons. $icon-big-width: 64px; $icon-big-height: 64px; // Size of icon boxes. $icon-box-width: 48px; $icon-box-height: 48px; // stylelint-disable $iconsizes: () !default; $iconsizes: map-merge(( 0: 0, 1: ($icon-width * .25), 2: ($icon-width * .5), 3: $icon-width, 4: ($icon-width * 1.5), 5: ($icon-width * 2), 6: ($icon-width * 2.5), 7: ($icon-width * 3) ), $iconsizes); // stylelint-enable .icon { font-size: $icon-height; width: $icon-width; height: $icon-height; margin: 0; padding: 0; box-sizing: content-box; margin-right: 0.5rem; &.spacer { margin-right: 0; } &.iconsize-big { width: $icon-big-width; height: $icon-big-height; font-size: $icon-big-height; } } .navbar-dark a .icon { color: $navbar-dark-color !important; /* stylelint-disable-line declaration-no-important */ } .action-menu-item a:first-of-type > .icon { margin-left: 0.5rem; } // YUI 2 Tree View icons must not have a margin left. .ygtvcell .icon { margin-left: 0 !important; /* stylelint-disable-line declaration-no-important */ } // In the navigation, tree icons should not have margins. .block_navigation, .block_settings { .tree_item .icon { margin-left: 0; } } [data-action=toggle-drawer] .icon { margin: 0; } // Apply in special cases where the default icons styles does not work properly. Eg file picker buttons. .icon-no-spacing a > .icon { margin: 0; } .icon-no-margin { .icon { margin-left: 0; margin-right: 0; margin-top: 0; margin-bottom: 0; } } .icon-large > .icon { width: ($icon-width * 2); height: ($icon-height * 2); } @each $size, $length in $iconsizes { .icon-size-#{$size} { .icon { height: $length !important; /* stylelint-disable-line declaration-no-important */ width: $length !important; /* stylelint-disable-line declaration-no-important */ font-size: $length !important; /* stylelint-disable-line declaration-no-important */ } } } .helplink .icon { margin-left: 0.5rem; } .icons-collapse-expand { display: flex; align-items: center; .expanded-icon { display: flex; align-items: center; } .collapsed-icon { display: none; } &.collapsed { .expanded-icon { display: none; } .collapsed-icon { display: flex; align-items: center; } } } // Revisit these styles when MDL-78284 lands with new icons. // Icon container will be removed and icons will be used directly. .activityiconcontainer { width: $activity-iconcontainer-width; height: $activity-iconcontainer-height; display: inline-flex; justify-content: center; align-items: center; background-color: $gray-100; border-radius: 4px; padding: 0.7rem; .activityicon, .icon { margin: 0; font-size: $icon-medium-width; height: $icon-medium-width; width: $icon-medium-height; } &.small { width: $activity-iconcontainer-width - 10px; height: $activity-iconcontainer-height - 10px; } &.smaller { width: $activity-iconcontainer-width - 20px; height: $activity-iconcontainer-width - 20px; .activityicon { width: $icon-medium-width; height: $icon-medium-height; } } } @each $type, $value in $activity-icon-colors { .activityiconcontainer.#{$type} { background-color: $value; .activityicon, .icon { &:not(.nofilter) { filter: brightness(0) invert(1); } } } } .icon-box { width: $icon-box-width; height: $icon-box-height; display: inline-flex; justify-content: center; align-items: center; background-color: $gray-100; border-radius: 12px; padding: 0.7rem; .icon { margin: 0; height: $icon-medium-width; width: $icon-medium-height; } } // Make activtity colours available for custom modules. :root { @each $type, $value in $activity-icon-colors { --activity#{$type}: #{$value}; } } boost/scss/moodle/filemanager.scss 0000604 00000052107 15062070724 0013277 0 ustar 00 // File Picker and File Manager .fp-content-center { height: 100%; width: 100%; display: table-cell; vertical-align: middle; } .fp-content-hidden { visibility: hidden; } // Dialogue (File Picker and File Manager) .yui3-panel-focused { outline: none; } .fp-panel-button { background: $filemanager-panel-button-bg; padding: 3px 20px 2px 20px; text-align: center; margin: 10px; @include border-radius(10px); display: inline-block; @include box-shadow(2px 2px 3px .1px $filemanager-panel-button-shadow); } // File Picker layout .filepicker .yui3-widget-content-expanded { height: auto; } /* The javascript is adding a style="height: 0px;" to this element - we need to set the min-height so the height is ignored. */ .filepicker .moodle-dialogue-bd { min-height: 520px; } .file-picker .fp-navbar { min-height: 40px; padding: 4px; } .fp-navbar { border-color: $input-border-color; border-bottom: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .file-picker .fp-content { border-top: 0; background: $filemanager-picker-bg; clear: none; overflow: auto; height: 452px; } .filepicker.moodle-dialogue-fullscreen .file-picker .fp-content { width: 100%; } .file-picker .fp-content-loading { height: 100%; width: 100%; display: table; text-align: center; } .file-picker .fp-content .fp-object-container { width: 98%; height: 98%; } .file-picker .fp-def-search { margin-top: 0; } // Repositories on fp-repo-area (File Picker only) .file-picker .fp-list { list-style-type: none; padding: 0; float: left; width: 100%; margin: 0; } .file-picker .fp-list .fp-repo a { display: block; padding: .5em .7em; } .file-picker .fp-list .fp-repo.active { background: $filemanager-picker-active-bg; } .file-picker .fp-list .fp-repo-icon { padding: 0 7px 0 5px; width: 16px; height: 16px; } // Tools, Path & View on fp-navbar (File Picker and File Manager) .fp-toolbar { float: left; } .fp-toolbar.empty { display: none; } .fp-toolbar .disabled { display: none; } .fp-toolbar div { display: block; float: left; margin-right: 4px; } .fp-toolbar img { vertical-align: -15%; margin-right: 5px; } .fp-viewbar:not(.disabled) a.checked { background-color: darken(map-get($theme-colors, 'secondary'), 10%); color: color-yiq(darken(map-get($theme-colors, 'secondary'), 10%)); border-color: darken(map-get($theme-colors, 'secondary'), 12.5%); } .fp-viewbar.disabled a { pointer-events: none; opacity: $btn-disabled-opacity; @include box-shadow(none); } .file-picker .fp-clear-left { clear: left; } .fp-pathbar.empty { display: none; } .fp-pathbar .fp-path-folder { background: url('[[pix:theme|fp/path_folder]]') left 3px no-repeat; background-size: 12px 12px; height: 12px; margin-left: 12px; } /*rtl:raw: .fp-pathbar .fp-path-folder { background-image: url('[[pix:theme|fp/path_folder_rtl]]'); } */ .fp-pathbar .fp-path-folder-name { margin-left: 24px; } // Icon view (File Picker and File Manager) .fp-iconview .fp-file { float: left; text-align: center; position: relative; margin: 10px 10px 35px; } .fp-iconview .fp-thumbnail { min-width: 110px; min-height: 110px; line-height: 110px; text-align: center; border: 1px solid $filemanager-thumbnail-border-color; display: block; } .fp-iconview .fp-thumbnail img { border: 1px solid $filemanager-thumbnail-img-border-color; padding: 3px; vertical-align: middle; @include box-shadow(1px 1px 2px 0 $filemanager-thumbnail-shadow); } .fp-iconview .fp-thumbnail:hover { background: $filemanager-thumbnail-over-bg; border: 1px solid $filemanager-thumbnail-hover-border-color; @include box-shadow(inset 0 0 10px0 $filemanager-thumbnail-hover-shadow); } .fp-iconview .fp-filename-field { height: 33px; margin-top: 3px; word-wrap: break-word; overflow: hidden; position: absolute; } .fp-iconview .fp-file:focus, .fp-iconview .fp-file:hover { // Undo truncating of text on hover. .fp-filename-field { overflow: visible; z-index: 1000; } .fp-filename { overflow: inherit; white-space: normal; text-overflow: inherit; } } .fp-iconview .fp-filename-field .fp-filename { background: $filemanager-filename-bg; padding-top: 5px; padding-bottom: 12px; min-width: 112px; } // Table view (File Picker only) .file-picker .yui3-datatable table { border: 0 solid $filemanager-picker-table-border-color; width: 100%; } // Tree view (File Manager only) // first or middle sibling, no children .file-picker .ygtvtn, .filemanager .ygtvtn { /*rtl:remove*/ background: url('[[pix:moodle|y/tn]]') 0 0 no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/tn_rtl]]') 0 0 no-repeat; */ width: 19px; height: 32px; } // first or middle sibling, collapsable .file-picker .ygtvtm, .filemanager .ygtvtm { background: url('[[pix:moodle|y/tm]]') 0 10px no-repeat; /*rtl:raw: background-position: 2px 10px; */ width: 13px; height: 12px; cursor: pointer; } // first or middle sibling, collapsable, hover .file-picker .ygtvtmh, .filemanager .ygtvtmh { background: url('[[pix:moodle|y/tm]]') 0 10px no-repeat; /*rtl:raw: background-position: 2px 10px; */ width: 13px; height: 12px; cursor: pointer; } // first or middle sibling, expandable .file-picker .ygtvtp, .filemanager .ygtvtp { /*rtl:remove*/ background: url('[[pix:moodle|y/tp]]') 0 10px no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/tp_rtl]]') 2px 10px no-repeat; */ width: 13px; height: 12px; cursor: pointer; } // first or middle sibling, expandable, hover .file-picker .ygtvtph, .filemanager .ygtvtph { /*rtl:remove*/ background: url('[[pix:moodle|y/tp]]') 0 10px no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/tp_rtl]]') 2px 10px no-repeat; */ width: 13px; height: 22px; cursor: pointer; } // last sibling, no children .file-picker .ygtvln, .filemanager .ygtvln { /*rtl:remove*/ background: url('[[pix:moodle|y/ln]]') 0 0 no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/ln_rtl]]') 0 0 no-repeat; */ width: 19px; height: 32px; } // Last sibling, collapsable .file-picker .ygtvlm, .filemanager .ygtvlm { background: url('[[pix:moodle|y/lm]]') 0 10px no-repeat; /*rtl:raw: background-position: 2px 10px; */ width: 13px; height: 12px; cursor: pointer; } // Last sibling, collapsable, hover .file-picker .ygtvlmh, .filemanager .ygtvlmh { background: url('[[pix:moodle|y/lm]]') 0 10px no-repeat; /*rtl:raw: background-position: 2px 10px; */ width: 13px; height: 12px; cursor: pointer; } // Last sibling, expandable .file-picker .ygtvlp, .filemanager .ygtvlp { /*rtl:remove*/ background: url('[[pix:moodle|y/lp]]') 0 10px no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/lp_rtl]]') 2px 10px no-repeat; */ width: 13px; height: 12px; cursor: pointer; } // Last sibling, expandable, hover .file-picker .ygtvlph, .filemanager .ygtvlph { /*rtl:remove*/ background: url('[[pix:moodle|y/lp]]') 0 10px no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/lp_rtl]]') 2px 10px no-repeat; */ width: 13px; height: 12px; cursor: pointer; } // Loading icon .file-picker .ygtvloading, .filemanager .ygtvloading { background: transparent url('[[pix:moodle|y/loading]]') 0 0 no-repeat; width: 16px; height: 22px; } // the style for the empty cells that are used for rendering the depth of the node .file-picker .ygtvdepthcell, .filemanager .ygtvdepthcell { background: url('[[pix:moodle|y/vline]]') 0 0 no-repeat; /*rtl:raw: background-position: 0 0; */ width: 17px; height: 32px; } .file-picker .ygtvblankdepthcell, .filemanager .ygtvblankdepthcell { width: 17px; height: 22px; } a.ygtvspacer:hover { color: transparent; text-decoration: none; } .ygtvlabel, .ygtvlabel:link, .ygtvlabel:visited, .ygtvlabel:hover { background-color: transparent; cursor: pointer; margin-left: 2px; text-decoration: none; } .file-picker .ygtvfocus, .filemanager .ygtvfocus { background-color: $filemanager-ygtvfocus-bg; } .fp-filename-icon { margin-top: 10px; display: block; position: relative; } .fp-icon { float: left; margin-top: -7px; width: 24px; height: 24px; margin-right: 10px; text-align: center; line-height: 24px; } .fp-icon img { max-height: 24px; max-width: 24px; vertical-align: middle; } .fp-filename { padding-right: 10px; } // Repositories Login on fp-content (File Picker only) .file-picker .fp-login-form { height: 100%; width: 100%; display: table; } // Upload on fp-content (File Picker only) .file-picker .fp-upload-form { height: 100%; width: 100%; display: table; } .file-picker .fp-upload-form table { margin: 0 auto; } // File exists dialogue on Upload (File Picker only) .file-picker.fp-dlg { text-align: center; } .file-picker.fp-dlg .fp-dlg-buttons { margin: 0 20px; } // Error dialogue on Upload (File Picker only) .file-picker.fp-msg { text-align: center; } // Error on fp-content (File Picker only) .file-picker .fp-content-error { height: 100%; width: 100%; display: table; text-align: center; } // Lazy loading on fp-content (File Picker only) .file-picker .fp-nextpage { clear: both; } .file-picker .fp-nextpage .fp-nextpage-loading { display: none; } .file-picker .fp-nextpage.loading .fp-nextpage-link { display: none; } .file-picker .fp-nextpage.loading .fp-nextpage-loading { display: block; text-align: center; height: 100px; padding-top: 50px; } // Select Dialogue (File Picker and File Manager) .fp-select .fp-select-loading { text-align: center; margin-top: 20px; } .fp-select table { padding: 0 0 10px; } .fp-select table .mdl-right { min-width: 84px; } .fp-select .fp-reflist .mdl-right { vertical-align: top; } .fp-select .fp-select-buttons { float: right; } .fp-select .fp-info { font-size: $font-size-xs; } .fp-select .fp-thumbnail { float: left; min-width: 110px; min-height: 110px; line-height: 110px; text-align: center; margin: 10px 20px 0 0; background: $filemanager-picker-thumbnail-bg; border: 1px solid $filemanager-picker-thumbnail-border-color; @include box-shadow(inset 0 0 10px 0 $filemanager-thumbnail-shadow); } .fp-select .fp-thumbnail img { border: 1px solid $filemanager-thumbnail-img-border-color; padding: 3px; vertical-align: middle; margin: 10px; } .fp-select .fp-fileinfo { display: inline-block; margin-top: 10px; } .file-picker.fp-select .fp-fileinfo { max-width: 240px; } .fp-select .fp-fileinfo div { padding-bottom: 5px; } .file-picker.fp-select .uneditable { display: none; } .file-picker.fp-select .fp-select-loading { display: none; } .file-picker.fp-select.loading .fp-select-loading { display: block; } .file-picker.fp-select.loading form { display: none; } .fp-select .fp-dimensions.fp-unknown { display: none; } .fp-select .fp-size.fp-unknown { display: none; } // File Manager .filemanager-loading { display: none; } .jsenabled .filemanager-loading { display: block; margin-top: 100px; } .filemanager.fm-loading .filemanager-toolbar, .filemanager.fm-loading .fp-pathbar, .filemanager.fm-loading .filemanager-container, .filemanager.fm-loaded .filemanager-loading, .filemanager.fm-maxfiles .fp-btn-add, .filemanager.fm-maxfiles .dndupload-message, .filemanager.fm-noitems .fp-btn-download, .filemanager.fm-noitems .fp-btn-delete, .filemanager .fm-empty-container, .filemanager.fm-noitems .filemanager-container .fp-content { display: none; } .filemanager .fp-img-downloading { display: none; padding-top: 7px; } .filemanager .filemanager-updating { display: none; text-align: center; } .filemanager.fm-updating .filemanager-updating { display: block; margin-top: 37px; } .filemanager.fm-updating .fm-content-wrapper, .filemanager.fm-nomkdir .fp-btn-mkdir, .fitem.disabled .filemanager .filemanager-toolbar, .fitem.disabled .filemanager .fp-pathbar, .fitem.disabled .filemanager .fp-restrictions, .fitem.disabled .filemanager .fm-content-wrapper { display: none; } // File Manager layout .filemanager { .fp-restrictions { text-align: right; } } .filemanager-toolbar { padding: 4px; overflow: hidden; } .filemanager .fp-pathbar.empty { display: none; } .filepicker-filelist, .filemanager-container { min-height: 140px; border: 1px solid $input-border-color; @include border-radius(); } .filemanager .fp-content { overflow: auto; max-height: 472px; min-height: 157px; } .filemanager-container, .filepicker-filelist { overflow: hidden; border-top-left-radius: 0; border-top-right-radius: 0; } .file-picker .yui3-datatable-header { /*rtl:raw: text-align: right; */ background: initial; } .fitem.disabled .filepicker-filelist, .fitem.disabled .filemanager-container { background-color: $filemanager-item-disabled-bg; } .fitem.disabled .fp-btn-choose { color: $text-muted; } .fitem.disabled .filepicker-filelist .filepicker-filename { display: none; } // Icon view (File Manager only) .fp-iconview .fp-reficons1 { position: absolute; height: 100%; width: 100%; top: 0; left: 0; } .fp-iconview .fp-reficons2 { position: absolute; height: 100%; width: 100%; top: 0; left: 0; } .fp-iconview .fp-file.fp-hasreferences .fp-reficons1 { background: url('[[pix:theme|fp/link]]') no-repeat; /*rtl:raw: transform: scaleX(-1); */ /*rtl:ignore*/ background-position: bottom right; background-size: 16px 16px; } .fp-iconview .fp-file.fp-isreference .fp-reficons2 { background: url('[[pix:theme|fp/alias]]') no-repeat; /*rtl:raw: transform: scaleX(-1); */ /*rtl:ignore*/ background-position: bottom left; background-size: 16px 16px; } .filemanager .fp-iconview .fp-file.fp-originalmissing .fp-thumbnail img { display: none; } .filemanager .fp-iconview .fp-file.fp-originalmissing .fp-thumbnail { background: url([[pix:s/dead]]) no-repeat; background-position: center center; } // Table view (File Manager only) .filemanager .yui3-datatable table { border: 0 solid $filemanager-yui-table-border-color; width: 100%; } /* Override YUI default styling */ /* stylelint-disable declaration-no-important */ .filemanager { .yui3-datatable-header { /*rtl:raw: text-align: right; */ background: $filemanager-yui-table-header-bg !important; border-bottom: 1px solid $filemanager-yui-table-header-border-bottom-color !important; border-left: 0 solid $filemanager-yui-table-header-border-left-color !important; color: $filemanager-yui-table-header-color !important; } .yui3-datatable-odd .yui3-datatable-cell { background-color: $filemanager-yui-table-cell-odd-bg !important; border-left: 0 solid $filemanager-yui-table-cell-odd-border-color; } .yui3-datatable-even .yui3-datatable-cell { background-color: $filemanager-yui-table-cell-even-bg !important; border-left: 0 solid $filemanager-yui-table-cell-even-border-color; } } /* stylelint-enable */ .filemanager .fp-filename-icon.fp-hasreferences .fp-reficons1 { background: url('[[pix:theme|fp/link_sm]]') no-repeat 0 0; height: 100%; width: 100%; /*rtl:raw: transform: scaleX(-1); */ position: absolute; top: 8px; left: 17px; background-size: 16px 16px; } .filemanager .fp-filename-icon.fp-isreference .fp-reficons2 { background: url('[[pix:theme|fp/alias_sm]]') no-repeat 0 0; height: 100%; width: 100%; /*rtl:raw: transform: scaleX(-1); */ position: absolute; top: 9px; left: -6px; background-size: 16px 16px; } // Folder Context Menu (File Manager only) .filemanager .fp-contextmenu { display: none; } .filemanager .fp-iconview .fp-folder.fp-hascontextmenu .fp-contextmenu { position: absolute; right: 0; bottom: 0; display: flex; align-items: center; justify-content: center; } .filemanager .fp-treeview .fp-folder.fp-hascontextmenu .fp-contextmenu, .filemanager .fp-tableview .fp-folder.fp-hascontextmenu .fp-contextmenu { display: inline; position: absolute; left: 14px; margin-right: -20px; top: 6px; } // Drag and drop support (filemanager and filepicker form elements) .filepicker-filelist .filepicker-container, .filemanager.fm-noitems .fm-empty-container { display: block; position: absolute; top: 10px; bottom: 10px; left: 10px; right: 10px; border: 2px dashed $filemanager-dnd-border-color; padding-top: 85px; text-align: center; } .filepicker-filelist .dndupload-target, .filemanager-container .dndupload-target { background: $filemanager-dnd-upload-target-bg; position: absolute; top: 10px; bottom: 10px; left: 10px; right: 10px; border: 2px dashed $filemanager-dnd-upload-target-border-color; padding-top: 85px; text-align: center; @include box-shadow(0 0 0 10px $filemanager-dnd-upload-target-shadow); } .filepicker-filelist.dndupload-over .dndupload-target, .filemanager-container.dndupload-over .dndupload-target { background: $filemanager-dnd-upload-over-bg; position: absolute; top: 10px; bottom: 10px; left: 10px; right: 10px; border: 2px dashed $filemanager-dnd-upload-over-border-color; padding-top: 85px; text-align: center; } .dndupload-message { display: none; } .dndsupported .dndupload-message { display: inline; } .dnduploadnotsupported-message { display: none; } .dndnotsupported .dnduploadnotsupported-message { display: inline; } .dndupload-target { display: none; } .dndsupported .dndupload-ready .dndupload-target { display: block; } .dndupload-uploadinprogress { display: none; text-align: center; } .dndupload-uploading .dndupload-uploadinprogress { display: block; } .dndupload-arrow { width: 100%; height: 80px; position: absolute; top: 5px; color: $gray-500; } .fitem.disabled .filepicker-container, .fitem.disabled .fm-empty-container { display: none; } .dndupload-progressbars { padding: 10px; display: none; } .dndupload-inprogress .dndupload-progressbars { display: block; } .dndupload-inprogress .fp-content { display: none; } .filemanager.fm-noitems .dndupload-inprogress .fm-empty-container { display: none; } .filepicker-filelist.dndupload-inprogress .filepicker-container { display: none; } .filepicker-filelist.dndupload-inprogress a { display: none; } // Select Dialogue (File Manager only) .filemanager.fp-select .fp-select-loading { display: none; } .filemanager.fp-select.loading .fp-select-loading { display: block; } .filemanager.fp-select.loading form { display: none; } .filemanager.fp-select.fp-folder .fp-license, .filemanager.fp-select.fp-folder .fp-author, .filemanager.fp-select.fp-file .fp-file-unzip, .filemanager.fp-select.fp-folder .fp-file-unzip, .filemanager.fp-select.fp-file .fp-file-zip, .filemanager.fp-select.fp-zip .fp-file-zip { display: none; } .filemanager.fp-select .fp-file-setmain, .filemanager.fp-select .fp-file-setmain-help { display: none; } .filemanager.fp-select.fp-cansetmain .fp-file-setmain, .filemanager.fp-select.fp-cansetmain .fp-file-setmain-help { display: inline-block; } .filemanager .fp-mainfile .fp-filename { font-weight: bold; } .filemanager.fp-select.fp-folder .fp-file-download { display: none; } // to be implemented .fm-operation { font-weight: bold; } .filemanager.fp-select .fp-original.fp-unknown, .filemanager.fp-select .fp-original .fp-originloading { display: none; } .filemanager.fp-select .fp-original.fp-loading .fp-originloading { display: inline; } .filemanager.fp-select .fp-reflist.fp-unknown, .filemanager.fp-select .fp-reflist .fp-reflistloading { display: none; } .filemanager.fp-select .fp-reflist.fp-loading .fp-reflistloading { display: inline; } .filemanager.fp-select .fp-reflist .fp-value { background: $filemanager-select-bg; border: 1px solid $filemanager-select-border-color; padding: 8px 7px; margin: 0; max-height: 75px; overflow: auto; } .filemanager.fp-select .fp-reflist .fp-value li { padding-bottom: 7px; } // Create folder dialogue (File Manager only) .filemanager.fp-mkdir-dlg { text-align: center; } .filemanager.fp-mkdir-dlg .fp-mkdir-dlg-text { text-align: left; margin: 20px; } // Confirm dialogue for delete (File Manager only) .filemanager.fp-dlg { text-align: center; } // file picker search dialog .file-picker div.bd { text-align: left; } // Upload form for file picker. .fp-formset { padding: 10px; input[type="file"] { line-height: inherit; } } .fp-forminset { padding: 0 10px; } .fp-fileinfo .fp-value { display: inline-block; padding-left: 5px; } boost/scss/bootstrap/_functions.scss 0000604 00000012417 15062070724 0013732 0 ustar 00 // Bootstrap functions // // Utility mixins and functions for evaluating source code across our variables, maps, and mixins. // Ascending // Used to evaluate Sass maps like our grid breakpoints. @mixin _assert-ascending($map, $map-name) { $prev-key: null; $prev-num: null; @each $key, $num in $map { @if $prev-num == null or unit($num) == "%" or unit($prev-num) == "%" { // Do nothing } @else if not comparable($prev-num, $num) { @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !"; } @else if $prev-num >= $num { @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; } $prev-key: $key; $prev-num: $num; } } // Starts at zero // Used to ensure the min-width of the lowest breakpoint starts at 0. @mixin _assert-starts-at-zero($map, $map-name: "$grid-breakpoints") { @if length($map) > 0 { $values: map-values($map); $first-value: nth($values, 1); @if $first-value != 0 { @warn "First breakpoint in #{$map-name} must start at 0, but starts at #{$first-value}."; } } } // Replace `$search` with `$replace` in `$string` // Used on our SVG icon backgrounds for custom forms. // // @author Hugo Giraudel // @param {String} $string - Initial string // @param {String} $search - Substring to replace // @param {String} $replace ('') - New value // @return {String} - Updated string @function str-replace($string, $search, $replace: "") { $index: str-index($string, $search); @if $index { @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); } @return $string; } // See https://codepen.io/kevinweber/pen/dXWoRw // // Requires the use of quotes around data URIs. @function escape-svg($string) { @if str-index($string, "data:image/svg+xml") { @each $char, $encoded in $escaped-characters { // Do not escape the url brackets @if str-index($string, "url(") == 1 { $string: url("#{str-replace(str-slice($string, 6, -3), $char, $encoded)}"); } @else { $string: str-replace($string, $char, $encoded); } } } @return $string; } // Color contrast @function color-yiq($color, $dark: $yiq-text-dark, $light: $yiq-text-light) { $r: red($color); $g: green($color); $b: blue($color); $yiq: (($r * 299) + ($g * 587) + ($b * 114)) * .001; @if ($yiq >= $yiq-contrasted-threshold) { @return $dark; } @else { @return $light; } } // Retrieve color Sass maps @function color($key: "blue") { @return map-get($colors, $key); } @function theme-color($key: "primary") { @return map-get($theme-colors, $key); } @function gray($key: "100") { @return map-get($grays, $key); } // Request a theme color level @function theme-color-level($color-name: "primary", $level: 0) { $color: theme-color($color-name); $color-base: if($level > 0, $black, $white); $level: abs($level); @return mix($color-base, $color, $level * $theme-color-interval); } // Return valid calc @function add($value1, $value2, $return-calc: true) { @if $value1 == null { @return $value2; } @if $value2 == null { @return $value1; } @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { @return $value1 + $value2; } @return if($return-calc == true, calc(#{$value1} + #{$value2}), $value1 + unquote(" + ") + $value2); } @function subtract($value1, $value2, $return-calc: true) { @if $value1 == null and $value2 == null { @return null; } @if $value1 == null { @return -$value2; } @if $value2 == null { @return $value1; } @if type-of($value1) == number and type-of($value2) == number and comparable($value1, $value2) { @return $value1 - $value2; } @if type-of($value2) != number { $value2: unquote("(") + $value2 + unquote(")"); } @return if($return-calc == true, calc(#{$value1} - #{$value2}), $value1 + unquote(" - ") + $value2); } @function divide($dividend, $divisor, $precision: 10) { $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1); $dividend: abs($dividend); $divisor: abs($divisor); @if $dividend == 0 { @return 0; } @if $divisor == 0 { @error "Cannot divide by 0"; } $remainder: $dividend; $result: 0; $factor: 10; @while ($remainder > 0 and $precision >= 0) { $quotient: 0; @while ($remainder >= $divisor) { $remainder: $remainder - $divisor; $quotient: $quotient + 1; } $result: $result * 10 + $quotient; $factor: $factor * .1; $remainder: $remainder * 10; $precision: $precision - 1; @if ($precision < 0 and $remainder >= $divisor * 5) { $result: $result + 1; } } $result: $result * $factor * $sign; $dividend-unit: unit($dividend); $divisor-unit: unit($divisor); $unit-map: ( "px": 1px, "rem": 1rem, "em": 1em, "%": 1% ); @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) { $result: $result * map-get($unit-map, $dividend-unit); } @return $result; } boost/scss/bootstrap/_root.scss 0000604 00000001074 15062070724 0012702 0 ustar 00 :root { // Custom variable values only support SassScript inside `#{}`. @each $color, $value in $colors { --#{$color}: #{$value}; } @each $color, $value in $theme-colors { --#{$color}: #{$value}; } @each $bp, $value in $grid-breakpoints { --breakpoint-#{$bp}: #{$value}; } // Use `inspect` for lists so that quoted items keep the quotes. // See https://github.com/sass/sass/issues/2383#issuecomment-336349172 --font-family-sans-serif: #{inspect($font-family-sans-serif)}; --font-family-monospace: #{inspect($font-family-monospace)}; } boost/scss/bootstrap/_tables.scss 0000604 00000006730 15062070724 0013175 0 ustar 00 // // Basic Bootstrap table // .table { width: 100%; margin-bottom: $spacer; color: $table-color; background-color: $table-bg; // Reset for nesting within parents with `background-color`. th, td { padding: $table-cell-padding; vertical-align: top; border-top: $table-border-width solid $table-border-color; } thead th { vertical-align: bottom; border-bottom: (2 * $table-border-width) solid $table-border-color; } tbody + tbody { border-top: (2 * $table-border-width) solid $table-border-color; } } // // Condensed table w/ half padding // .table-sm { th, td { padding: $table-cell-padding-sm; } } // Border versions // // Add or remove borders all around the table and between all the columns. .table-bordered { border: $table-border-width solid $table-border-color; th, td { border: $table-border-width solid $table-border-color; } thead { th, td { border-bottom-width: 2 * $table-border-width; } } } .table-borderless { th, td, thead th, tbody + tbody { border: 0; } } // Zebra-striping // // Default zebra-stripe styles (alternating gray and transparent backgrounds) .table-striped { tbody tr:nth-of-type(#{$table-striped-order}) { background-color: $table-accent-bg; } } // Hover effect // // Placed here since it has to come after the potential zebra striping .table-hover { tbody tr { @include hover() { color: $table-hover-color; background-color: $table-hover-bg; } } } // Table backgrounds // // Exact selectors below required to override `.table-striped` and prevent // inheritance to nested tables. @each $color, $value in $theme-colors { @include table-row-variant($color, theme-color-level($color, $table-bg-level), theme-color-level($color, $table-border-level)); } @include table-row-variant(active, $table-active-bg); // Dark styles // // Same table markup, but inverted color scheme: dark background and light text. // stylelint-disable-next-line no-duplicate-selectors .table { .thead-dark { th { color: $table-dark-color; background-color: $table-dark-bg; border-color: $table-dark-border-color; } } .thead-light { th { color: $table-head-color; background-color: $table-head-bg; border-color: $table-border-color; } } } .table-dark { color: $table-dark-color; background-color: $table-dark-bg; th, td, thead th { border-color: $table-dark-border-color; } &.table-bordered { border: 0; } &.table-striped { tbody tr:nth-of-type(#{$table-striped-order}) { background-color: $table-dark-accent-bg; } } &.table-hover { tbody tr { @include hover() { color: $table-dark-hover-color; background-color: $table-dark-hover-bg; } } } } // Responsive tables // // Generate series of `.table-responsive-*` classes for configuring the screen // size of where your table will overflow. .table-responsive { @each $breakpoint in map-keys($grid-breakpoints) { $next: breakpoint-next($breakpoint, $grid-breakpoints); $infix: breakpoint-infix($next, $grid-breakpoints); &#{$infix} { @include media-breakpoint-down($breakpoint) { display: block; width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; // Prevent double border on horizontal scroll due to use of `display: block;` > .table-bordered { border: 0; } } } } } boost/scss/bootstrap/_forms.scss 0000604 00000022036 15062070724 0013046 0 ustar 00 // stylelint-disable selector-no-qualifying-type // // Textual form controls // .form-control { display: block; width: 100%; height: $input-height; padding: $input-padding-y $input-padding-x; font-family: $input-font-family; @include font-size($input-font-size); font-weight: $input-font-weight; line-height: $input-line-height; color: $input-color; background-color: $input-bg; background-clip: padding-box; border: $input-border-width solid $input-border-color; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of `<select>`s in CSS. @include border-radius($input-border-radius, 0); @include box-shadow($input-box-shadow); @include transition($input-transition); // Unstyle the caret on `<select>`s in IE10+. &::-ms-expand { background-color: transparent; border: 0; } // Customize the `:focus` state to imitate native WebKit styles. @include form-control-focus($ignore-warning: true); // Placeholder &::placeholder { color: $input-placeholder-color; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526. opacity: 1; } // Disabled and read-only inputs // // HTML5 says that controls under a fieldset > legend:first-child won't be // disabled if the fieldset is disabled. Due to implementation difficulty, we // don't honor that edge case; we style them as disabled anyway. &:disabled, &[readonly] { background-color: $input-disabled-bg; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655. opacity: 1; } } input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] { &.form-control { appearance: none; // Fix appearance for date inputs in Safari } } select.form-control { // Remove select outline from select box in FF &:-moz-focusring { color: transparent; text-shadow: 0 0 0 $input-color; } &:focus::-ms-value { // Suppress the nested default white text on blue background highlight given to // the selected option text when the (still closed) <select> receives focus // in IE and (under certain conditions) Edge, as it looks bad and cannot be made to // match the appearance of the native widget. // See https://github.com/twbs/bootstrap/issues/19398. color: $input-color; background-color: $input-bg; } } // Make file inputs better match text inputs by forcing them to new lines. .form-control-file, .form-control-range { display: block; width: 100%; } // // Labels // // For use with horizontal and inline forms, when you need the label (or legend) // text to align with the form controls. .col-form-label { padding-top: add($input-padding-y, $input-border-width); padding-bottom: add($input-padding-y, $input-border-width); margin-bottom: 0; // Override the `<label>/<legend>` default @include font-size(inherit); // Override the `<legend>` default line-height: $input-line-height; } .col-form-label-lg { padding-top: add($input-padding-y-lg, $input-border-width); padding-bottom: add($input-padding-y-lg, $input-border-width); @include font-size($input-font-size-lg); line-height: $input-line-height-lg; } .col-form-label-sm { padding-top: add($input-padding-y-sm, $input-border-width); padding-bottom: add($input-padding-y-sm, $input-border-width); @include font-size($input-font-size-sm); line-height: $input-line-height-sm; } // Readonly controls as plain text // // Apply class to a readonly input to make it appear like regular plain // text (without any border, background color, focus indicator) .form-control-plaintext { display: block; width: 100%; padding: $input-padding-y 0; margin-bottom: 0; // match inputs if this class comes on inputs with default margins @include font-size($input-font-size); line-height: $input-line-height; color: $input-plaintext-color; background-color: transparent; border: solid transparent; border-width: $input-border-width 0; &.form-control-sm, &.form-control-lg { padding-right: 0; padding-left: 0; } } // Form control sizing // // Build on `.form-control` with modifier classes to decrease or increase the // height and font-size of form controls. // // Repeated in `_input_group.scss` to avoid Sass extend issues. .form-control-sm { height: $input-height-sm; padding: $input-padding-y-sm $input-padding-x-sm; @include font-size($input-font-size-sm); line-height: $input-line-height-sm; @include border-radius($input-border-radius-sm); } .form-control-lg { height: $input-height-lg; padding: $input-padding-y-lg $input-padding-x-lg; @include font-size($input-font-size-lg); line-height: $input-line-height-lg; @include border-radius($input-border-radius-lg); } // stylelint-disable-next-line no-duplicate-selectors select.form-control { &[size], &[multiple] { height: auto; } } textarea.form-control { height: auto; } // Form groups // // Designed to help with the organization and spacing of vertical forms. For // horizontal forms, use the predefined grid classes. .form-group { margin-bottom: $form-group-margin-bottom; } .form-text { display: block; margin-top: $form-text-margin-top; } // Form grid // // Special replacement for our grid system's `.row` for tighter form layouts. .form-row { display: flex; flex-wrap: wrap; margin-right: -$form-grid-gutter-width * .5; margin-left: -$form-grid-gutter-width * .5; > .col, > [class*="col-"] { padding-right: $form-grid-gutter-width * .5; padding-left: $form-grid-gutter-width * .5; } } // Checkboxes and radios // // Indent the labels to position radios/checkboxes as hanging controls. .form-check { position: relative; display: block; padding-left: $form-check-input-gutter; } .form-check-input { position: absolute; margin-top: $form-check-input-margin-y; margin-left: -$form-check-input-gutter; // Use [disabled] and :disabled for workaround https://github.com/twbs/bootstrap/issues/28247 &[disabled] ~ .form-check-label, &:disabled ~ .form-check-label { color: $text-muted; } } .form-check-label { margin-bottom: 0; // Override default `<label>` bottom margin } .form-check-inline { display: inline-flex; align-items: center; padding-left: 0; // Override base .form-check margin-right: $form-check-inline-margin-x; // Undo .form-check-input defaults and add some `margin-right`. .form-check-input { position: static; margin-top: 0; margin-right: $form-check-inline-input-margin-x; margin-left: 0; } } // Form validation // // Provide feedback to users when form field values are valid or invalid. Works // primarily for client-side validation via scoped `:invalid` and `:valid` // pseudo-classes but also includes `.is-invalid` and `.is-valid` classes for // server side validation. @each $state, $data in $form-validation-states { @include form-validation-state($state, map-get($data, color), map-get($data, icon)); } // Inline forms // // Make forms appear inline(-block) by adding the `.form-inline` class. Inline // forms begin stacked on extra small (mobile) devices and then go inline when // viewports reach <768px. // // Requires wrapping inputs and labels with `.form-group` for proper display of // default HTML form controls and our custom form controls (e.g., input groups). .form-inline { display: flex; flex-flow: row wrap; align-items: center; // Prevent shorter elements from growing to same height as others (e.g., small buttons growing to normal sized button height) // Because we use flex, the initial sizing of checkboxes is collapsed and // doesn't occupy the full-width (which is what we want for xs grid tier), // so we force that here. .form-check { width: 100%; } // Kick in the inline @include media-breakpoint-up(sm) { label { display: flex; align-items: center; justify-content: center; margin-bottom: 0; } // Inline-block all the things for "inline" .form-group { display: flex; flex: 0 0 auto; flex-flow: row wrap; align-items: center; margin-bottom: 0; } // Allow folks to *not* use `.form-group` .form-control { display: inline-block; width: auto; // Prevent labels from stacking above inputs in `.form-group` vertical-align: middle; } // Make static controls behave like regular ones .form-control-plaintext { display: inline-block; } .input-group, .custom-select { width: auto; } // Remove default margin on radios/checkboxes that were used for stacking, and // then undo the floating of radios and checkboxes to match. .form-check { display: flex; align-items: center; justify-content: center; width: auto; padding-left: 0; } .form-check-input { position: relative; flex-shrink: 0; margin-top: 0; margin-right: $form-check-input-margin-x; margin-left: 0; } .custom-control { align-items: center; justify-content: center; } .custom-control-label { margin-bottom: 0; } } } boost/scss/bootstrap/_progress.scss 0000604 00000002223 15062070724 0013560 0 ustar 00 // Disable animation if transitions are disabled @if $enable-transitions { @keyframes progress-bar-stripes { from { background-position: $progress-height 0; } to { background-position: 0 0; } } } .progress { display: flex; height: $progress-height; overflow: hidden; // force rounded corners by cropping it line-height: 0; @include font-size($progress-font-size); background-color: $progress-bg; @include border-radius($progress-border-radius); @include box-shadow($progress-box-shadow); } .progress-bar { display: flex; flex-direction: column; justify-content: center; overflow: hidden; color: $progress-bar-color; text-align: center; white-space: nowrap; background-color: $progress-bar-bg; @include transition($progress-bar-transition); } .progress-bar-striped { @include gradient-striped(); background-size: $progress-height $progress-height; } @if $enable-transitions { .progress-bar-animated { animation: $progress-bar-animation-timing progress-bar-stripes; @if $enable-prefers-reduced-motion-media-query { @media (prefers-reduced-motion: reduce) { animation: none; } } } } boost/scss/bootstrap/utilities/_spacing.scss 0000604 00000004074 15062070724 0015361 0 ustar 00 // stylelint-disable declaration-no-important // Margin and Padding @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); @each $prop, $abbrev in (margin: m, padding: p) { @each $size, $length in $spacers { .#{$abbrev}#{$infix}-#{$size} { #{$prop}: $length !important; } .#{$abbrev}t#{$infix}-#{$size}, .#{$abbrev}y#{$infix}-#{$size} { #{$prop}-top: $length !important; } .#{$abbrev}r#{$infix}-#{$size}, .#{$abbrev}x#{$infix}-#{$size} { #{$prop}-right: $length !important; } .#{$abbrev}b#{$infix}-#{$size}, .#{$abbrev}y#{$infix}-#{$size} { #{$prop}-bottom: $length !important; } .#{$abbrev}l#{$infix}-#{$size}, .#{$abbrev}x#{$infix}-#{$size} { #{$prop}-left: $length !important; } } } // Negative margins (e.g., where `.mb-n1` is negative version of `.mb-1`) @each $size, $length in $spacers { @if "#{$size}" != "0" { .m#{$infix}-n#{$size} { margin: -$length !important; } .mt#{$infix}-n#{$size}, .my#{$infix}-n#{$size} { margin-top: -$length !important; } .mr#{$infix}-n#{$size}, .mx#{$infix}-n#{$size} { margin-right: -$length !important; } .mb#{$infix}-n#{$size}, .my#{$infix}-n#{$size} { margin-bottom: -$length !important; } .ml#{$infix}-n#{$size}, .mx#{$infix}-n#{$size} { margin-left: -$length !important; } } } // Some special margin utils .m#{$infix}-auto { margin: auto !important; } .mt#{$infix}-auto, .my#{$infix}-auto { margin-top: auto !important; } .mr#{$infix}-auto, .mx#{$infix}-auto { margin-right: auto !important; } .mb#{$infix}-auto, .my#{$infix}-auto { margin-bottom: auto !important; } .ml#{$infix}-auto, .mx#{$infix}-auto { margin-left: auto !important; } } } boost/scss/bootstrap/utilities/_display.scss 0000604 00000001007 15062070724 0015373 0 ustar 00 // stylelint-disable declaration-no-important // // Utilities for common `display` values // @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); @each $value in $displays { .d#{$infix}-#{$value} { display: $value !important; } } } } // // Utilities for toggling `display` in print // @media print { @each $value in $displays { .d-print-#{$value} { display: $value !important; } } } boost/scss/bootstrap/utilities/_text.scss 0000604 00000004072 15062070724 0014717 0 ustar 00 // stylelint-disable declaration-no-important // // Text // .text-monospace { font-family: $font-family-monospace !important; } // Alignment .text-justify { text-align: justify !important; } .text-wrap { white-space: normal !important; } .text-nowrap { white-space: nowrap !important; } .text-truncate { @include text-truncate(); } // Responsive alignment @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); .text#{$infix}-left { text-align: left !important; } .text#{$infix}-right { text-align: right !important; } .text#{$infix}-center { text-align: center !important; } } } // Transformation .text-lowercase { text-transform: lowercase !important; } .text-uppercase { text-transform: uppercase !important; } .text-capitalize { text-transform: capitalize !important; } // Weight and italics .font-weight-light { font-weight: $font-weight-light !important; } .font-weight-lighter { font-weight: $font-weight-lighter !important; } .font-weight-normal { font-weight: $font-weight-normal !important; } .font-weight-bold { font-weight: $font-weight-bold !important; } .font-weight-bolder { font-weight: $font-weight-bolder !important; } .font-italic { font-style: italic !important; } // Contextual colors .text-white { color: $white !important; } @each $color, $value in $theme-colors { @include text-emphasis-variant(".text-#{$color}", $value, true); } .text-body { color: $body-color !important; } .text-muted { color: $text-muted !important; } .text-black-50 { color: rgba($black, .5) !important; } .text-white-50 { color: rgba($white, .5) !important; } // Misc .text-hide { @include text-hide($ignore-warning: true); } .text-decoration-none { text-decoration: none !important; } .text-break { word-break: break-word !important; // Deprecated, but avoids issues with flex containers word-wrap: break-word !important; // Used instead of `overflow-wrap` for IE & Edge Legacy } // Reset .text-reset { color: inherit !important; } boost/scss/bootstrap/utilities/_flex.scss 0000604 00000005321 15062070724 0014667 0 ustar 00 // stylelint-disable declaration-no-important // Flex variation // // Custom styles for additional flex alignment options. @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); .flex#{$infix}-row { flex-direction: row !important; } .flex#{$infix}-column { flex-direction: column !important; } .flex#{$infix}-row-reverse { flex-direction: row-reverse !important; } .flex#{$infix}-column-reverse { flex-direction: column-reverse !important; } .flex#{$infix}-wrap { flex-wrap: wrap !important; } .flex#{$infix}-nowrap { flex-wrap: nowrap !important; } .flex#{$infix}-wrap-reverse { flex-wrap: wrap-reverse !important; } .flex#{$infix}-fill { flex: 1 1 auto !important; } .flex#{$infix}-grow-0 { flex-grow: 0 !important; } .flex#{$infix}-grow-1 { flex-grow: 1 !important; } .flex#{$infix}-shrink-0 { flex-shrink: 0 !important; } .flex#{$infix}-shrink-1 { flex-shrink: 1 !important; } .justify-content#{$infix}-start { justify-content: flex-start !important; } .justify-content#{$infix}-end { justify-content: flex-end !important; } .justify-content#{$infix}-center { justify-content: center !important; } .justify-content#{$infix}-between { justify-content: space-between !important; } .justify-content#{$infix}-around { justify-content: space-around !important; } .align-items#{$infix}-start { align-items: flex-start !important; } .align-items#{$infix}-end { align-items: flex-end !important; } .align-items#{$infix}-center { align-items: center !important; } .align-items#{$infix}-baseline { align-items: baseline !important; } .align-items#{$infix}-stretch { align-items: stretch !important; } .align-content#{$infix}-start { align-content: flex-start !important; } .align-content#{$infix}-end { align-content: flex-end !important; } .align-content#{$infix}-center { align-content: center !important; } .align-content#{$infix}-between { align-content: space-between !important; } .align-content#{$infix}-around { align-content: space-around !important; } .align-content#{$infix}-stretch { align-content: stretch !important; } .align-self#{$infix}-auto { align-self: auto !important; } .align-self#{$infix}-start { align-self: flex-start !important; } .align-self#{$infix}-end { align-self: flex-end !important; } .align-self#{$infix}-center { align-self: center !important; } .align-self#{$infix}-baseline { align-self: baseline !important; } .align-self#{$infix}-stretch { align-self: stretch !important; } } } boost/scss/bootstrap/utilities/_clearfix.scss 0000604 00000000045 15062070724 0015524 0 ustar 00 .clearfix { @include clearfix(); } boost/scss/bootstrap/utilities/_visibility.scss 0000604 00000000256 15062070724 0016122 0 ustar 00 // stylelint-disable declaration-no-important // // Visibility utilities // .visible { visibility: visible !important; } .invisible { visibility: hidden !important; } boost/scss/bootstrap/utilities/_stretched-link.scss 0000604 00000000657 15062070724 0016660 0 ustar 00 // // Stretched link // .stretched-link { &::after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; // Just in case `pointer-events: none` is set on a parent pointer-events: auto; content: ""; // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color background-color: rgba(0, 0, 0, 0); } } boost/scss/bootstrap/utilities/_shadows.scss 0000604 00000000371 15062070724 0015401 0 ustar 00 // stylelint-disable declaration-no-important .shadow-sm { box-shadow: $box-shadow-sm !important; } .shadow { box-shadow: $box-shadow !important; } .shadow-lg { box-shadow: $box-shadow-lg !important; } .shadow-none { box-shadow: none !important; } boost/scss/bootstrap/utilities/_screenreaders.scss 0000604 00000000163 15062070724 0016555 0 ustar 00 // // Screenreaders // .sr-only { @include sr-only(); } .sr-only-focusable { @include sr-only-focusable(); } boost/scss/bootstrap/utilities/_float.scss 0000604 00000000570 15062070724 0015037 0 ustar 00 // stylelint-disable declaration-no-important @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); .float#{$infix}-left { float: left !important; } .float#{$infix}-right { float: right !important; } .float#{$infix}-none { float: none !important; } } } boost/scss/bootstrap/utilities/_overflow.scss 0000604 00000000205 15062070724 0015570 0 ustar 00 // stylelint-disable declaration-no-important @each $value in $overflows { .overflow-#{$value} { overflow: $value !important; } } boost/scss/bootstrap/utilities/_position.scss 0000604 00000000744 15062070724 0015601 0 ustar 00 // stylelint-disable declaration-no-important // Common values @each $position in $positions { .position-#{$position} { position: $position !important; } } // Shorthand .fixed-top { position: fixed; top: 0; right: 0; left: 0; z-index: $zindex-fixed; } .fixed-bottom { position: fixed; right: 0; bottom: 0; left: 0; z-index: $zindex-fixed; } .sticky-top { @supports (position: sticky) { position: sticky; top: 0; z-index: $zindex-sticky; } } boost/scss/bootstrap/utilities/_interactions.scss 0000604 00000000216 15062070724 0016431 0 ustar 00 // stylelint-disable declaration-no-important @each $value in $user-selects { .user-select-#{$value} { user-select: $value !important; } } boost/scss/bootstrap/utilities/_align.scss 0000604 00000000644 15062070724 0015026 0 ustar 00 // stylelint-disable declaration-no-important .align-baseline { vertical-align: baseline !important; } // Browser default .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; } boost/scss/bootstrap/utilities/_background.scss 0000604 00000000631 15062070724 0016047 0 ustar 00 // stylelint-disable declaration-no-important @each $color, $value in $theme-colors { @include bg-variant(".bg-#{$color}", $value, true); } @if $enable-gradients { @each $color, $value in $theme-colors { @include bg-gradient-variant(".bg-gradient-#{$color}", $value, true); } } .bg-white { background-color: $white !important; } .bg-transparent { background-color: transparent !important; } boost/scss/bootstrap/utilities/_embed.scss 0000604 00000001525 15062070724 0015007 0 ustar 00 // Credit: Nicolas Gallagher and SUIT CSS. .embed-responsive { position: relative; display: block; width: 100%; padding: 0; overflow: hidden; &::before { display: block; content: ""; } .embed-responsive-item, iframe, embed, object, video { position: absolute; top: 0; bottom: 0; left: 0; width: 100%; height: 100%; border: 0; } } @each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios { $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1); $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2); .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} { &::before { padding-top: percentage(divide($embed-responsive-aspect-ratio-y, $embed-responsive-aspect-ratio-x)); } } } boost/scss/bootstrap/utilities/_borders.scss 0000604 00000003353 15062070724 0015374 0 ustar 00 // stylelint-disable property-disallowed-list, declaration-no-important // // Border // .border { border: $border-width solid $border-color !important; } .border-top { border-top: $border-width solid $border-color !important; } .border-right { border-right: $border-width solid $border-color !important; } .border-bottom { border-bottom: $border-width solid $border-color !important; } .border-left { border-left: $border-width solid $border-color !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; } @each $color, $value in $theme-colors { .border-#{$color} { border-color: $value !important; } } .border-white { border-color: $white !important; } // // Border-radius // .rounded-sm { border-radius: $border-radius-sm !important; } .rounded { border-radius: $border-radius !important; } .rounded-top { border-top-left-radius: $border-radius !important; border-top-right-radius: $border-radius !important; } .rounded-right { border-top-right-radius: $border-radius !important; border-bottom-right-radius: $border-radius !important; } .rounded-bottom { border-bottom-right-radius: $border-radius !important; border-bottom-left-radius: $border-radius !important; } .rounded-left { border-top-left-radius: $border-radius !important; border-bottom-left-radius: $border-radius !important; } .rounded-lg { border-radius: $border-radius-lg !important; } .rounded-circle { border-radius: 50% !important; } .rounded-pill { border-radius: $rounded-pill !important; } .rounded-0 { border-radius: 0 !important; } boost/scss/bootstrap/utilities/_sizing.scss 0000604 00000000762 15062070724 0015240 0 ustar 00 // stylelint-disable declaration-no-important // Width and height @each $prop, $abbrev in (width: w, height: h) { @each $size, $length in $sizes { .#{$abbrev}-#{$size} { #{$prop}: $length !important; } } } .mw-100 { max-width: 100% !important; } .mh-100 { max-height: 100% !important; } // Viewport additional helpers .min-vw-100 { min-width: 100vw !important; } .min-vh-100 { min-height: 100vh !important; } .vw-100 { width: 100vw !important; } .vh-100 { height: 100vh !important; } boost/scss/bootstrap/_custom-forms.scss 0000604 00000036524 15062070724 0014365 0 ustar 00 // Embedded icons from Open Iconic. // Released under MIT and copyright 2014 Waybury. // https://useiconic.com/open // Checkboxes and radios // // Base class takes care of all the key behavioral aspects. .custom-control { position: relative; z-index: 1; display: block; min-height: $font-size-base * $line-height-base; padding-left: $custom-control-gutter + $custom-control-indicator-size; print-color-adjust: exact; // Keep themed appearance for print } .custom-control-inline { display: inline-flex; margin-right: $custom-control-spacer-x; } .custom-control-input { position: absolute; left: 0; z-index: -1; // Put the input behind the label so it doesn't overlay text width: $custom-control-indicator-size; height: ($font-size-base * $line-height-base + $custom-control-indicator-size) * .5; opacity: 0; &:checked ~ .custom-control-label::before { color: $custom-control-indicator-checked-color; border-color: $custom-control-indicator-checked-border-color; @include gradient-bg($custom-control-indicator-checked-bg); @include box-shadow($custom-control-indicator-checked-box-shadow); } &:focus ~ .custom-control-label::before { // the mixin is not used here to make sure there is feedback @if $enable-shadows { box-shadow: $input-box-shadow, $custom-control-indicator-focus-box-shadow; } @else { box-shadow: $custom-control-indicator-focus-box-shadow; } } &:focus:not(:checked) ~ .custom-control-label::before { border-color: $custom-control-indicator-focus-border-color; } &:not(:disabled):active ~ .custom-control-label::before { color: $custom-control-indicator-active-color; background-color: $custom-control-indicator-active-bg; border-color: $custom-control-indicator-active-border-color; @include box-shadow($custom-control-indicator-active-box-shadow); } // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247 &[disabled], &:disabled { ~ .custom-control-label { color: $custom-control-label-disabled-color; &::before { background-color: $custom-control-indicator-disabled-bg; } } } } // Custom control indicators // // Build the custom controls out of pseudo-elements. .custom-control-label { position: relative; margin-bottom: 0; color: $custom-control-label-color; vertical-align: top; cursor: $custom-control-cursor; // Background-color and (when enabled) gradient &::before { position: absolute; top: ($font-size-base * $line-height-base - $custom-control-indicator-size) * .5; left: -($custom-control-gutter + $custom-control-indicator-size); display: block; width: $custom-control-indicator-size; height: $custom-control-indicator-size; pointer-events: none; content: ""; background-color: $custom-control-indicator-bg; border: $custom-control-indicator-border-width solid $custom-control-indicator-border-color; @include box-shadow($custom-control-indicator-box-shadow); } // Foreground (icon) &::after { position: absolute; top: ($font-size-base * $line-height-base - $custom-control-indicator-size) * .5; left: -($custom-control-gutter + $custom-control-indicator-size); display: block; width: $custom-control-indicator-size; height: $custom-control-indicator-size; content: ""; background: 50% / #{$custom-control-indicator-bg-size} no-repeat; } } // Checkboxes // // Tweak just a few things for checkboxes. .custom-checkbox { .custom-control-label::before { @include border-radius($custom-checkbox-indicator-border-radius); } .custom-control-input:checked ~ .custom-control-label { &::after { background-image: escape-svg($custom-checkbox-indicator-icon-checked); } } .custom-control-input:indeterminate ~ .custom-control-label { &::before { border-color: $custom-checkbox-indicator-indeterminate-border-color; @include gradient-bg($custom-checkbox-indicator-indeterminate-bg); @include box-shadow($custom-checkbox-indicator-indeterminate-box-shadow); } &::after { background-image: escape-svg($custom-checkbox-indicator-icon-indeterminate); } } .custom-control-input:disabled { &:checked ~ .custom-control-label::before { @include gradient-bg($custom-control-indicator-checked-disabled-bg); } &:indeterminate ~ .custom-control-label::before { @include gradient-bg($custom-control-indicator-checked-disabled-bg); } } } // Radios // // Tweak just a few things for radios. .custom-radio { .custom-control-label::before { // stylelint-disable-next-line property-disallowed-list border-radius: $custom-radio-indicator-border-radius; } .custom-control-input:checked ~ .custom-control-label { &::after { background-image: escape-svg($custom-radio-indicator-icon-checked); } } .custom-control-input:disabled { &:checked ~ .custom-control-label::before { @include gradient-bg($custom-control-indicator-checked-disabled-bg); } } } // switches // // Tweak a few things for switches .custom-switch { padding-left: $custom-switch-width + $custom-control-gutter; .custom-control-label { &::before { left: -($custom-switch-width + $custom-control-gutter); width: $custom-switch-width; pointer-events: all; // stylelint-disable-next-line property-disallowed-list border-radius: $custom-switch-indicator-border-radius; } &::after { top: add(($font-size-base * $line-height-base - $custom-control-indicator-size) * .5, $custom-control-indicator-border-width * 2); left: add(-($custom-switch-width + $custom-control-gutter), $custom-control-indicator-border-width * 2); width: $custom-switch-indicator-size; height: $custom-switch-indicator-size; background-color: $custom-control-indicator-border-color; // stylelint-disable-next-line property-disallowed-list border-radius: $custom-switch-indicator-border-radius; @include transition(transform .15s ease-in-out, $custom-forms-transition); } } .custom-control-input:checked ~ .custom-control-label { &::after { background-color: $custom-control-indicator-bg; transform: translateX($custom-switch-width - $custom-control-indicator-size); } } .custom-control-input:disabled { &:checked ~ .custom-control-label::before { @include gradient-bg($custom-control-indicator-checked-disabled-bg); } } } // Select // // Replaces the browser default select with a custom one, mostly pulled from // https://primer.github.io/. // .custom-select { display: inline-block; width: 100%; height: $custom-select-height; padding: $custom-select-padding-y ($custom-select-padding-x + $custom-select-indicator-padding) $custom-select-padding-y $custom-select-padding-x; font-family: $custom-select-font-family; @include font-size($custom-select-font-size); font-weight: $custom-select-font-weight; line-height: $custom-select-line-height; color: $custom-select-color; vertical-align: middle; background: $custom-select-bg $custom-select-background; border: $custom-select-border-width solid $custom-select-border-color; @include border-radius($custom-select-border-radius, 0); @include box-shadow($custom-select-box-shadow); appearance: none; &:focus { border-color: $custom-select-focus-border-color; outline: 0; @if $enable-shadows { @include box-shadow($custom-select-box-shadow, $custom-select-focus-box-shadow); } @else { // Avoid using mixin so we can pass custom focus shadow properly box-shadow: $custom-select-focus-box-shadow; } &::-ms-value { // For visual consistency with other platforms/browsers, // suppress the default white text on blue background highlight given to // the selected option text when the (still closed) <select> receives focus // in IE and (under certain conditions) Edge. // See https://github.com/twbs/bootstrap/issues/19398. color: $input-color; background-color: $input-bg; } } &[multiple], &[size]:not([size="1"]) { height: auto; padding-right: $custom-select-padding-x; background-image: none; } &:disabled { color: $custom-select-disabled-color; background-color: $custom-select-disabled-bg; } // Hides the default caret in IE11 &::-ms-expand { display: none; } // Remove outline from select box in FF &:-moz-focusring { color: transparent; text-shadow: 0 0 0 $custom-select-color; } } .custom-select-sm { height: $custom-select-height-sm; padding-top: $custom-select-padding-y-sm; padding-bottom: $custom-select-padding-y-sm; padding-left: $custom-select-padding-x-sm; @include font-size($custom-select-font-size-sm); } .custom-select-lg { height: $custom-select-height-lg; padding-top: $custom-select-padding-y-lg; padding-bottom: $custom-select-padding-y-lg; padding-left: $custom-select-padding-x-lg; @include font-size($custom-select-font-size-lg); } // File // // Custom file input. .custom-file { position: relative; display: inline-block; width: 100%; height: $custom-file-height; margin-bottom: 0; } .custom-file-input { position: relative; z-index: 2; width: 100%; height: $custom-file-height; margin: 0; overflow: hidden; opacity: 0; &:focus ~ .custom-file-label { border-color: $custom-file-focus-border-color; box-shadow: $custom-file-focus-box-shadow; } // Use [disabled] and :disabled to work around https://github.com/twbs/bootstrap/issues/28247 &[disabled] ~ .custom-file-label, &:disabled ~ .custom-file-label { background-color: $custom-file-disabled-bg; } @each $lang, $value in $custom-file-text { &:lang(#{$lang}) ~ .custom-file-label::after { content: $value; } } ~ .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: $custom-file-height; padding: $custom-file-padding-y $custom-file-padding-x; overflow: hidden; font-family: $custom-file-font-family; font-weight: $custom-file-font-weight; line-height: $custom-file-line-height; color: $custom-file-color; background-color: $custom-file-bg; border: $custom-file-border-width solid $custom-file-border-color; @include border-radius($custom-file-border-radius); @include box-shadow($custom-file-box-shadow); &::after { position: absolute; top: 0; right: 0; bottom: 0; z-index: 3; display: block; height: $custom-file-height-inner; padding: $custom-file-padding-y $custom-file-padding-x; line-height: $custom-file-line-height; color: $custom-file-button-color; content: "Browse"; @include gradient-bg($custom-file-button-bg); border-left: inherit; @include border-radius(0 $custom-file-border-radius $custom-file-border-radius 0); } } // Range // // Style range inputs the same across browsers. Vendor-specific rules for pseudo // elements cannot be mixed. As such, there are no shared styles for focus or // active states on prefixed selectors. .custom-range { width: 100%; height: add($custom-range-thumb-height, $custom-range-thumb-focus-box-shadow-width * 2); padding: 0; // Need to reset padding background-color: transparent; appearance: none; &:focus { outline: 0; // Pseudo-elements must be split across multiple rulesets to have an effect. // No box-shadow() mixin for focus accessibility. &::-webkit-slider-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; } &::-moz-range-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; } &::-ms-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; } } &::-moz-focus-outer { border: 0; } &::-webkit-slider-thumb { width: $custom-range-thumb-width; height: $custom-range-thumb-height; margin-top: ($custom-range-track-height - $custom-range-thumb-height) * .5; // Webkit specific @include gradient-bg($custom-range-thumb-bg); border: $custom-range-thumb-border; @include border-radius($custom-range-thumb-border-radius); @include box-shadow($custom-range-thumb-box-shadow); @include transition($custom-forms-transition); appearance: none; &:active { @include gradient-bg($custom-range-thumb-active-bg); } } &::-webkit-slider-runnable-track { width: $custom-range-track-width; height: $custom-range-track-height; color: transparent; // Why? cursor: $custom-range-track-cursor; background-color: $custom-range-track-bg; border-color: transparent; @include border-radius($custom-range-track-border-radius); @include box-shadow($custom-range-track-box-shadow); } &::-moz-range-thumb { width: $custom-range-thumb-width; height: $custom-range-thumb-height; @include gradient-bg($custom-range-thumb-bg); border: $custom-range-thumb-border; @include border-radius($custom-range-thumb-border-radius); @include box-shadow($custom-range-thumb-box-shadow); @include transition($custom-forms-transition); appearance: none; &:active { @include gradient-bg($custom-range-thumb-active-bg); } } &::-moz-range-track { width: $custom-range-track-width; height: $custom-range-track-height; color: transparent; cursor: $custom-range-track-cursor; background-color: $custom-range-track-bg; border-color: transparent; // Firefox specific? @include border-radius($custom-range-track-border-radius); @include box-shadow($custom-range-track-box-shadow); } &::-ms-thumb { width: $custom-range-thumb-width; height: $custom-range-thumb-height; margin-top: 0; // Edge specific margin-right: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden. margin-left: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden. @include gradient-bg($custom-range-thumb-bg); border: $custom-range-thumb-border; @include border-radius($custom-range-thumb-border-radius); @include box-shadow($custom-range-thumb-box-shadow); @include transition($custom-forms-transition); appearance: none; &:active { @include gradient-bg($custom-range-thumb-active-bg); } } &::-ms-track { width: $custom-range-track-width; height: $custom-range-track-height; color: transparent; cursor: $custom-range-track-cursor; background-color: transparent; border-color: transparent; border-width: $custom-range-thumb-height * .5; @include box-shadow($custom-range-track-box-shadow); } &::-ms-fill-lower { background-color: $custom-range-track-bg; @include border-radius($custom-range-track-border-radius); } &::-ms-fill-upper { margin-right: 15px; // arbitrary? background-color: $custom-range-track-bg; @include border-radius($custom-range-track-border-radius); } &:disabled { &::-webkit-slider-thumb { background-color: $custom-range-thumb-disabled-bg; } &::-webkit-slider-runnable-track { cursor: default; } &::-moz-range-thumb { background-color: $custom-range-thumb-disabled-bg; } &::-moz-range-track { cursor: default; } &::-ms-thumb { background-color: $custom-range-thumb-disabled-bg; } } } .custom-control-label::before, .custom-file-label, .custom-select { @include transition($custom-forms-transition); } boost/scss/bootstrap/_dropdown.scss 0000604 00000010524 15062070724 0013553 0 ustar 00 // The dropdown wrapper (`<div>`) .dropup, .dropright, .dropdown, .dropleft { position: relative; } .dropdown-toggle { white-space: nowrap; // Generate the caret automatically @include caret(); } // The dropdown menu .dropdown-menu { position: absolute; top: 100%; left: 0; z-index: $zindex-dropdown; display: none; // none by default, but block on "open" of the menu float: left; min-width: $dropdown-min-width; padding: $dropdown-padding-y $dropdown-padding-x; margin: $dropdown-spacer 0 0; // override default ul @include font-size($dropdown-font-size); color: $dropdown-color; text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) list-style: none; background-color: $dropdown-bg; background-clip: padding-box; border: $dropdown-border-width solid $dropdown-border-color; @include border-radius($dropdown-border-radius); @include box-shadow($dropdown-box-shadow); } @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); .dropdown-menu#{$infix}-left { right: auto; left: 0; } .dropdown-menu#{$infix}-right { right: 0; left: auto; } } } // Allow for dropdowns to go bottom up (aka, dropup-menu) // Just add .dropup after the standard .dropdown class and you're set. .dropup { .dropdown-menu { top: auto; bottom: 100%; margin-top: 0; margin-bottom: $dropdown-spacer; } .dropdown-toggle { @include caret(up); } } .dropright { .dropdown-menu { top: 0; right: auto; left: 100%; margin-top: 0; margin-left: $dropdown-spacer; } .dropdown-toggle { @include caret(right); &::after { vertical-align: 0; } } } .dropleft { .dropdown-menu { top: 0; right: 100%; left: auto; margin-top: 0; margin-right: $dropdown-spacer; } .dropdown-toggle { @include caret(left); &::before { vertical-align: 0; } } } // When Popper is enabled, reset the basic dropdown position // stylelint-disable-next-line no-duplicate-selectors .dropdown-menu { &[x-placement^="top"], &[x-placement^="right"], &[x-placement^="bottom"], &[x-placement^="left"] { right: auto; bottom: auto; } } // Dividers (basically an `<hr>`) within the dropdown .dropdown-divider { @include nav-divider($dropdown-divider-bg, $dropdown-divider-margin-y, true); } // Links, buttons, and more within the dropdown menu // // `<button>`-specific styles are denoted with `// For <button>s` .dropdown-item { display: block; width: 100%; // For `<button>`s padding: $dropdown-item-padding-y $dropdown-item-padding-x; clear: both; font-weight: $font-weight-normal; color: $dropdown-link-color; text-align: inherit; // For `<button>`s text-decoration: if($link-decoration == none, null, none); white-space: nowrap; // prevent links from randomly breaking onto new lines background-color: transparent; // For `<button>`s border: 0; // For `<button>`s // Prevent dropdown overflow if there's no padding // See https://github.com/twbs/bootstrap/pull/27703 @if $dropdown-padding-y == 0 { &:first-child { @include border-top-radius($dropdown-inner-border-radius); } &:last-child { @include border-bottom-radius($dropdown-inner-border-radius); } } @include hover-focus() { color: $dropdown-link-hover-color; text-decoration: none; @include gradient-bg($dropdown-link-hover-bg); } &.active, &:active { color: $dropdown-link-active-color; text-decoration: none; @include gradient-bg($dropdown-link-active-bg); } &.disabled, &:disabled { color: $dropdown-link-disabled-color; pointer-events: none; background-color: transparent; // Remove CSS gradients if they're enabled @if $enable-gradients { background-image: none; } } } .dropdown-menu.show { display: block; } // Dropdown section headers .dropdown-header { display: block; padding: $dropdown-header-padding; margin-bottom: 0; // for use with heading elements @include font-size($font-size-sm); color: $dropdown-header-color; white-space: nowrap; // as with > li > a } // Dropdown text .dropdown-item-text { display: block; padding: $dropdown-item-padding-y $dropdown-item-padding-x; color: $dropdown-link-color; } boost/scss/bootstrap/_popover.scss 0000604 00000011163 15062070724 0013411 0 ustar 00 .popover { position: absolute; top: 0; // left: 0; z-index: $zindex-popover; display: block; max-width: $popover-max-width; // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. // So reset our font and text properties to avoid inheriting weird values. @include reset-text(); @include font-size($popover-font-size); // Allow breaking very long words so they don't overflow the popover's bounds word-wrap: break-word; background-color: $popover-bg; background-clip: padding-box; border: $popover-border-width solid $popover-border-color; @include border-radius($popover-border-radius); @include box-shadow($popover-box-shadow); .arrow { position: absolute; display: block; width: $popover-arrow-width; height: $popover-arrow-height; margin: 0 $popover-border-radius; &::before, &::after { position: absolute; display: block; content: ""; border-color: transparent; border-style: solid; } } } .bs-popover-top { margin-bottom: $popover-arrow-height; > .arrow { bottom: subtract(-$popover-arrow-height, $popover-border-width); &::before { bottom: 0; border-width: $popover-arrow-height ($popover-arrow-width * .5) 0; border-top-color: $popover-arrow-outer-color; } &::after { bottom: $popover-border-width; border-width: $popover-arrow-height ($popover-arrow-width * .5) 0; border-top-color: $popover-arrow-color; } } } .bs-popover-right { margin-left: $popover-arrow-height; > .arrow { left: subtract(-$popover-arrow-height, $popover-border-width); width: $popover-arrow-height; height: $popover-arrow-width; margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners &::before { left: 0; border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0; border-right-color: $popover-arrow-outer-color; } &::after { left: $popover-border-width; border-width: ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5) 0; border-right-color: $popover-arrow-color; } } } .bs-popover-bottom { margin-top: $popover-arrow-height; > .arrow { top: subtract(-$popover-arrow-height, $popover-border-width); &::before { top: 0; border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5); border-bottom-color: $popover-arrow-outer-color; } &::after { top: $popover-border-width; border-width: 0 ($popover-arrow-width * .5) $popover-arrow-height ($popover-arrow-width * .5); border-bottom-color: $popover-arrow-color; } } // This will remove the popover-header's border just below the arrow .popover-header::before { position: absolute; top: 0; left: 50%; display: block; width: $popover-arrow-width; margin-left: -$popover-arrow-width * .5; content: ""; border-bottom: $popover-border-width solid $popover-header-bg; } } .bs-popover-left { margin-right: $popover-arrow-height; > .arrow { right: subtract(-$popover-arrow-height, $popover-border-width); width: $popover-arrow-height; height: $popover-arrow-width; margin: $popover-border-radius 0; // make sure the arrow does not touch the popover's rounded corners &::before { right: 0; border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height; border-left-color: $popover-arrow-outer-color; } &::after { right: $popover-border-width; border-width: ($popover-arrow-width * .5) 0 ($popover-arrow-width * .5) $popover-arrow-height; border-left-color: $popover-arrow-color; } } } .bs-popover-auto { &[x-placement^="top"] { @extend .bs-popover-top; } &[x-placement^="right"] { @extend .bs-popover-right; } &[x-placement^="bottom"] { @extend .bs-popover-bottom; } &[x-placement^="left"] { @extend .bs-popover-left; } } // Offset the popover to account for the popover arrow .popover-header { padding: $popover-header-padding-y $popover-header-padding-x; margin-bottom: 0; // Reset the default from Reboot @include font-size($font-size-base); color: $popover-header-color; background-color: $popover-header-bg; border-bottom: $popover-border-width solid darken($popover-header-bg, 5%); @include border-top-radius($popover-inner-border-radius); &:empty { display: none; } } .popover-body { padding: $popover-body-padding-y $popover-body-padding-x; color: $popover-body-color; } boost/scss/bootstrap/_buttons.scss 0000604 00000005175 15062070724 0013423 0 ustar 00 // stylelint-disable selector-no-qualifying-type // // Base styles // .btn { display: inline-block; font-family: $btn-font-family; font-weight: $btn-font-weight; color: $body-color; text-align: center; text-decoration: if($link-decoration == none, null, none); white-space: $btn-white-space; vertical-align: middle; user-select: none; background-color: transparent; border: $btn-border-width solid transparent; @include button-size($btn-padding-y, $btn-padding-x, $btn-font-size, $btn-line-height, $btn-border-radius); @include transition($btn-transition); @include hover() { color: $body-color; text-decoration: none; } &:focus, &.focus { outline: 0; box-shadow: $btn-focus-box-shadow; } // Disabled comes first so active can properly restyle &.disabled, &:disabled { opacity: $btn-disabled-opacity; @include box-shadow(none); } &:not(:disabled):not(.disabled) { cursor: if($enable-pointer-cursor-for-buttons, pointer, null); &:active, &.active { @include box-shadow($btn-active-box-shadow); &:focus { @include box-shadow($btn-focus-box-shadow, $btn-active-box-shadow); } } } } // Future-proof disabling of clicks on `<a>` elements a.btn.disabled, fieldset:disabled a.btn { pointer-events: none; } // // Alternate buttons // @each $color, $value in $theme-colors { .btn-#{$color} { @include button-variant($value, $value); } } @each $color, $value in $theme-colors { .btn-outline-#{$color} { @include button-outline-variant($value); } } // // Link buttons // // Make a button look and behave like a link .btn-link { font-weight: $font-weight-normal; color: $link-color; text-decoration: $link-decoration; @include hover() { color: $link-hover-color; text-decoration: $link-hover-decoration; } &:focus, &.focus { text-decoration: $link-hover-decoration; } &:disabled, &.disabled { color: $btn-link-disabled-color; pointer-events: none; } // No need for an active state here } // // Button Sizes // .btn-lg { @include button-size($btn-padding-y-lg, $btn-padding-x-lg, $btn-font-size-lg, $btn-line-height-lg, $btn-border-radius-lg); } .btn-sm { @include button-size($btn-padding-y-sm, $btn-padding-x-sm, $btn-font-size-sm, $btn-line-height-sm, $btn-border-radius-sm); } // // Block button // .btn-block { display: block; width: 100%; // Vertically space out multiple block buttons + .btn-block { margin-top: $btn-block-spacing-y; } } // Specificity overrides input[type="submit"], input[type="reset"], input[type="button"] { &.btn-block { width: 100%; } } boost/scss/bootstrap/_pagination.scss 0000604 00000003437 15062070724 0014055 0 ustar 00 .pagination { display: flex; @include list-unstyled(); @include border-radius(); } .page-link { position: relative; display: block; padding: $pagination-padding-y $pagination-padding-x; margin-left: -$pagination-border-width; line-height: $pagination-line-height; color: $pagination-color; text-decoration: if($link-decoration == none, null, none); background-color: $pagination-bg; border: $pagination-border-width solid $pagination-border-color; &:hover { z-index: 2; color: $pagination-hover-color; text-decoration: none; background-color: $pagination-hover-bg; border-color: $pagination-hover-border-color; } &:focus { z-index: 3; outline: $pagination-focus-outline; box-shadow: $pagination-focus-box-shadow; } } .page-item { &:first-child { .page-link { margin-left: 0; @include border-left-radius($border-radius); } } &:last-child { .page-link { @include border-right-radius($border-radius); } } &.active .page-link { z-index: 3; color: $pagination-active-color; background-color: $pagination-active-bg; border-color: $pagination-active-border-color; } &.disabled .page-link { color: $pagination-disabled-color; pointer-events: none; // Opinionated: remove the "hand" cursor set previously for .page-link cursor: auto; background-color: $pagination-disabled-bg; border-color: $pagination-disabled-border-color; } } // // Sizing // .pagination-lg { @include pagination-size($pagination-padding-y-lg, $pagination-padding-x-lg, $font-size-lg, $line-height-lg, $pagination-border-radius-lg); } .pagination-sm { @include pagination-size($pagination-padding-y-sm, $pagination-padding-x-sm, $font-size-sm, $line-height-sm, $pagination-border-radius-sm); } boost/scss/bootstrap/_utilities.scss 0000604 00000001030 15062070724 0013722 0 ustar 00 @import "utilities/align"; @import "utilities/background"; @import "utilities/borders"; @import "utilities/clearfix"; @import "utilities/display"; @import "utilities/embed"; @import "utilities/flex"; @import "utilities/float"; @import "utilities/interactions"; @import "utilities/overflow"; @import "utilities/position"; @import "utilities/screenreaders"; @import "utilities/shadows"; @import "utilities/sizing"; @import "utilities/spacing"; @import "utilities/stretched-link"; @import "utilities/text"; @import "utilities/visibility"; boost/scss/bootstrap/_mixins.scss 0000604 00000002032 15062070724 0013221 0 ustar 00 // Toggles // // Used in conjunction with global variables to enable certain theme features. // Vendor @import "vendor/rfs"; // Deprecate @import "mixins/deprecate"; // Utilities @import "mixins/breakpoints"; @import "mixins/hover"; @import "mixins/image"; @import "mixins/badge"; @import "mixins/resize"; @import "mixins/screen-reader"; @import "mixins/size"; @import "mixins/reset-text"; @import "mixins/text-emphasis"; @import "mixins/text-hide"; @import "mixins/text-truncate"; @import "mixins/visibility"; // Components @import "mixins/alert"; @import "mixins/buttons"; @import "mixins/caret"; @import "mixins/pagination"; @import "mixins/lists"; @import "mixins/list-group"; @import "mixins/nav-divider"; @import "mixins/forms"; @import "mixins/table-row"; // Skins @import "mixins/background-variant"; @import "mixins/border-radius"; @import "mixins/box-shadow"; @import "mixins/gradients"; @import "mixins/transition"; // Layout @import "mixins/clearfix"; @import "mixins/grid-framework"; @import "mixins/grid"; @import "mixins/float"; boost/scss/bootstrap/_transitions.scss 0000604 00000000553 15062070724 0014275 0 ustar 00 .fade { @include transition($transition-fade); &:not(.show) { opacity: 0; } } .collapse { &:not(.show) { display: none; } } .collapsing { position: relative; height: 0; overflow: hidden; @include transition($transition-collapse); &.width { width: 0; height: auto; @include transition($transition-collapse-width); } } boost/scss/bootstrap/_grid.scss 0000604 00000003321 15062070724 0012641 0 ustar 00 // Container widths // // Set the container width, and override it for fixed navbars in media queries. @if $enable-grid-classes { // Single container class with breakpoint max-widths .container, // 100% wide container at all breakpoints .container-fluid { @include make-container(); } // Responsive containers that are 100% wide until a breakpoint @each $breakpoint, $container-max-width in $container-max-widths { .container-#{$breakpoint} { @extend .container-fluid; } @include media-breakpoint-up($breakpoint, $grid-breakpoints) { %responsive-container-#{$breakpoint} { max-width: $container-max-width; } // Extend each breakpoint which is smaller or equal to the current breakpoint $extend-breakpoint: true; @each $name, $width in $grid-breakpoints { @if ($extend-breakpoint) { .container#{breakpoint-infix($name, $grid-breakpoints)} { @extend %responsive-container-#{$breakpoint}; } // Once the current breakpoint is reached, stop extending @if ($breakpoint == $name) { $extend-breakpoint: false; } } } } } } // Row // // Rows contain your columns. @if $enable-grid-classes { .row { @include make-row(); } // Remove the negative margin from default .row, then the horizontal padding // from all immediate children columns (to prevent runaway style inheritance). .no-gutters { margin-right: 0; margin-left: 0; > .col, > [class*="col-"] { padding-right: 0; padding-left: 0; } } } // Columns // // Common styles for small and large grid columns @if $enable-grid-classes { @include make-grid-columns(); } boost/scss/bootstrap/_list-group.scss 0000604 00000007436 15062070724 0014034 0 ustar 00 // Base class // // Easily usable on <ul>, <ol>, or <div>. .list-group { display: flex; flex-direction: column; // No need to set list-style: none; since .list-group-item is block level padding-left: 0; // reset padding because ul and ol margin-bottom: 0; @include border-radius($list-group-border-radius); } // Interactive list items // // Use anchor or button elements instead of `li`s or `div`s to create interactive // list items. Includes an extra `.active` modifier class for selected items. .list-group-item-action { width: 100%; // For `<button>`s (anchors become 100% by default though) color: $list-group-action-color; text-align: inherit; // For `<button>`s (anchors inherit) // Hover state @include hover-focus() { z-index: 1; // Place hover/focus items above their siblings for proper border styling color: $list-group-action-hover-color; text-decoration: none; background-color: $list-group-hover-bg; } &:active { color: $list-group-action-active-color; background-color: $list-group-action-active-bg; } } // Individual list items // // Use on `li`s or `div`s within the `.list-group` parent. .list-group-item { position: relative; display: block; padding: $list-group-item-padding-y $list-group-item-padding-x; color: $list-group-color; text-decoration: if($link-decoration == none, null, none); background-color: $list-group-bg; border: $list-group-border-width solid $list-group-border-color; &:first-child { @include border-top-radius(inherit); } &:last-child { @include border-bottom-radius(inherit); } &.disabled, &:disabled { color: $list-group-disabled-color; pointer-events: none; background-color: $list-group-disabled-bg; } // Include both here for `<a>`s and `<button>`s &.active { z-index: 2; // Place active items above their siblings for proper border styling color: $list-group-active-color; background-color: $list-group-active-bg; border-color: $list-group-active-border-color; } & + & { border-top-width: 0; &.active { margin-top: -$list-group-border-width; border-top-width: $list-group-border-width; } } } // Horizontal // // Change the layout of list group items from vertical (default) to horizontal. @each $breakpoint in map-keys($grid-breakpoints) { @include media-breakpoint-up($breakpoint) { $infix: breakpoint-infix($breakpoint, $grid-breakpoints); .list-group-horizontal#{$infix} { flex-direction: row; > .list-group-item { &:first-child { @include border-bottom-left-radius($list-group-border-radius); @include border-top-right-radius(0); } &:last-child { @include border-top-right-radius($list-group-border-radius); @include border-bottom-left-radius(0); } &.active { margin-top: 0; } + .list-group-item { border-top-width: $list-group-border-width; border-left-width: 0; &.active { margin-left: -$list-group-border-width; border-left-width: $list-group-border-width; } } } } } } // Flush list items // // Remove borders and border-radius to keep list group items edge-to-edge. Most // useful within other components (e.g., cards). .list-group-flush { @include border-radius(0); > .list-group-item { border-width: 0 0 $list-group-border-width; &:last-child { border-bottom-width: 0; } } } // Contextual variants // // Add modifier classes to change text and background color on individual items. // Organizationally, this must come after the `:hover` states. @each $color, $value in $theme-colors { @include list-group-item-variant($color, theme-color-level($color, -9), theme-color-level($color, 6)); } boost/scss/bootstrap/_reboot.scss 0000604 00000026423 15062070724 0013216 0 ustar 00 // stylelint-disable declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix // Reboot // // Normalization of HTML elements, manually forked from Normalize.css to remove // styles targeting irrelevant browsers while applying new styles. // // Normalize is licensed MIT. https://github.com/necolas/normalize.css // Document // // 1. Change from `box-sizing: content-box` so that `width` is not affected by `padding` or `border`. // 2. Change the default font family in all browsers. // 3. Correct the line height in all browsers. // 4. Prevent adjustments of font size after orientation changes in IE on Windows Phone and in iOS. // 5. Change the default tap highlight to be completely transparent in iOS. *, *::before, *::after { box-sizing: border-box; // 1 } html { font-family: sans-serif; // 2 line-height: 1.15; // 3 -webkit-text-size-adjust: 100%; // 4 -webkit-tap-highlight-color: rgba($black, 0); // 5 } // Shim for "new" HTML5 structural elements to display correctly (IE10, older browsers) // TODO: remove in v5 // stylelint-disable-next-line selector-list-comma-newline-after article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { display: block; } // Body // // 1. Remove the margin in all browsers. // 2. As a best practice, apply a default `background-color`. // 3. Set an explicit initial text-align value so that we can later use // the `inherit` value on things like `<th>` elements. body { margin: 0; // 1 font-family: $font-family-base; @include font-size($font-size-base); font-weight: $font-weight-base; line-height: $line-height-base; color: $body-color; text-align: left; // 3 background-color: $body-bg; // 2 } // Future-proof rule: in browsers that support :focus-visible, suppress the focus outline // on elements that programmatically receive focus but wouldn't normally show a visible // focus outline. In general, this would mean that the outline is only applied if the // interaction that led to the element receiving programmatic focus was a keyboard interaction, // or the browser has somehow determined that the user is primarily a keyboard user and/or // wants focus outlines to always be presented. // // See https://developer.mozilla.org/en-US/docs/Web/CSS/:focus-visible // and https://developer.paciellogroup.com/blog/2018/03/focus-visible-and-backwards-compatibility/ [tabindex="-1"]:focus:not(:focus-visible) { outline: 0 !important; } // Content grouping // // 1. Add the correct box sizing in Firefox. // 2. Show the overflow in Edge and IE. hr { box-sizing: content-box; // 1 height: 0; // 1 overflow: visible; // 2 } // // Typography // // Remove top margins from headings // // By default, `<h1>`-`<h6>` all receive top and bottom margins. We nuke the top // margin for easier control within type scales as it avoids margin collapsing. // stylelint-disable-next-line selector-list-comma-newline-after h1, h2, h3, h4, h5, h6 { margin-top: 0; margin-bottom: $headings-margin-bottom; } // Reset margins on paragraphs // // Similarly, the top margin on `<p>`s get reset. However, we also reset the // bottom margin to use `rem` units instead of `em`. p { margin-top: 0; margin-bottom: $paragraph-margin-bottom; } // Abbreviations // // 1. Duplicate behavior to the data-* attribute for our tooltip plugin // 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. // 3. Add explicit cursor to indicate changed behavior. // 4. Remove the bottom border in Firefox 39-. // 5. Prevent the text-decoration to be skipped. abbr[title], abbr[data-original-title] { // 1 text-decoration: underline; // 2 text-decoration: underline dotted; // 2 cursor: help; // 3 border-bottom: 0; // 4 text-decoration-skip-ink: none; // 5 } 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: $dt-font-weight; } dd { margin-bottom: .5rem; margin-left: 0; // Undo browser default } blockquote { margin: 0 0 1rem; } b, strong { font-weight: $font-weight-bolder; // Add the correct font weight in Chrome, Edge, and Safari } small { @include font-size(80%); // Add the correct font size in all browsers } // // Prevent `sub` and `sup` elements from affecting the line height in // all browsers. // sub, sup { position: relative; @include font-size(75%); line-height: 0; vertical-align: baseline; } sub { bottom: -.25em; } sup { top: -.5em; } // // Links // a { color: $link-color; text-decoration: $link-decoration; background-color: transparent; // Remove the gray background on active links in IE 10. @include hover() { color: $link-hover-color; text-decoration: $link-hover-decoration; } } // And undo these styles for placeholder links/named anchors (without href). // It would be more straightforward to just use a[href] in previous block, but that // causes specificity issues in many other styles that are too complex to fix. // See https://github.com/twbs/bootstrap/issues/19402 a:not([href]):not([class]) { color: inherit; text-decoration: none; @include hover() { color: inherit; text-decoration: none; } } // // Code // pre, code, kbd, samp { font-family: $font-family-monospace; @include font-size(1em); // Correct the odd `em` font sizing in all browsers. } pre { // Remove browser default top margin margin-top: 0; // Reset browser default of `1em` to use `rem`s margin-bottom: 1rem; // Don't allow content to break outside overflow: auto; // Disable auto-hiding scrollbar in IE & legacy Edge to avoid overlap, // making it impossible to interact with the content -ms-overflow-style: scrollbar; } // // Figures // figure { // Apply a consistent margin strategy (matches our type styles). margin: 0 0 1rem; } // // Images and content // img { vertical-align: middle; border-style: none; // Remove the border on images inside links in IE 10-. } svg { // Workaround for the SVG overflow bug in IE10/11 is still required. // See https://github.com/twbs/bootstrap/issues/26878 overflow: hidden; vertical-align: middle; } // // Tables // table { border-collapse: collapse; // Prevent double borders } caption { padding-top: $table-cell-padding; padding-bottom: $table-cell-padding; color: $table-caption-color; text-align: left; caption-side: bottom; } // 1. Removes font-weight bold by inheriting // 2. Matches default `<td>` alignment by inheriting `text-align`. // 3. Fix alignment for Safari th { font-weight: $table-th-font-weight; // 1 text-align: inherit; // 2 text-align: -webkit-match-parent; // 3 } // // Forms // label { // Allow labels to use `margin` for spacing. display: inline-block; margin-bottom: $label-margin-bottom; } // Remove the default `border-radius` that macOS Chrome adds. // // Details at https://github.com/twbs/bootstrap/issues/24093 button { // stylelint-disable-next-line property-disallowed-list border-radius: 0; } // Explicitly remove focus outline in Chromium when it shouldn't be // visible (e.g. as result of mouse click or touch tap). It already // should be doing this automatically, but seems to currently be // confused and applies its very visible two-tone outline anyway. button:focus:not(:focus-visible) { outline: 0; } input, button, select, optgroup, textarea { margin: 0; // Remove the margin in Firefox and Safari font-family: inherit; @include font-size(inherit); line-height: inherit; } button, input { overflow: visible; // Show the overflow in Edge } button, select { text-transform: none; // Remove the inheritance of text transform in Firefox } // Set the cursor for non-`<button>` buttons // // Details at https://github.com/twbs/bootstrap/pull/30562 [role="button"] { cursor: pointer; } // Remove the inheritance of word-wrap in Safari. // // Details at https://github.com/twbs/bootstrap/issues/24990 select { word-wrap: normal; } // 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` // controls in Android 4. // 2. Correct the inability to style clickable types in iOS and Safari. button, [type="button"], // 1 [type="reset"], [type="submit"] { -webkit-appearance: button; // 2 } // Opinionated: add "hand" cursor to non-disabled button elements. @if $enable-pointer-cursor-for-buttons { button, [type="button"], [type="reset"], [type="submit"] { &:not(:disabled) { cursor: pointer; } } } // Remove inner border and padding from Firefox, but don't restore the outline like Normalize. 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; // 1. Add the correct box sizing in IE 10- padding: 0; // 2. Remove the padding in IE 10- } textarea { overflow: auto; // Remove the default vertical scrollbar in IE. // Textareas should really only resize vertically so they don't break their (horizontal) containers. resize: vertical; } fieldset { // Browsers set a default `min-width: min-content;` on fieldsets, // unlike e.g. `<div>`s, which have `min-width: 0;` by default. // So we reset that to ensure fieldsets behave more like a standard block element. // See https://github.com/twbs/bootstrap/issues/12359 // and https://html.spec.whatwg.org/multipage/#the-fieldset-and-legend-elements min-width: 0; // Reset the default outline behavior of fieldsets so they don't affect page layout. padding: 0; margin: 0; border: 0; } // 1. Correct the text wrapping in Edge and IE. // 2. Correct the color inheritance from `fieldset` elements in IE. legend { display: block; width: 100%; max-width: 100%; // 1 padding: 0; margin-bottom: .5rem; @include font-size(1.5rem); line-height: inherit; color: inherit; // 2 white-space: normal; // 1 } progress { vertical-align: baseline; // Add the correct vertical alignment in Chrome, Firefox, and Opera. } // Correct the cursor style of increment and decrement buttons in Chrome. [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button { height: auto; } [type="search"] { // This overrides the extra rounded corners on search inputs in iOS so that our // `.form-control` class can properly style them. Note that this cannot simply // be added to `.form-control` as it's not specific enough. For details, see // https://github.com/twbs/bootstrap/issues/11586. outline-offset: -2px; // 2. Correct the outline style in Safari. -webkit-appearance: none; } // // Remove the inner padding in Chrome and Safari on macOS. // [type="search"]::-webkit-search-decoration { -webkit-appearance: none; } // // 1. Correct the inability to style clickable types in iOS and Safari. // 2. Change font properties to `inherit` in Safari. // ::-webkit-file-upload-button { font: inherit; // 2 -webkit-appearance: button; // 1 } // // Correct element displays // output { display: inline-block; } summary { display: list-item; // Add the correct display in all browsers cursor: pointer; } template { display: none; // Add the correct display in IE } // Always hide an element with the `hidden` HTML attribute (from PureCSS). // Needed for proper display in IE 10-. [hidden] { display: none !important; } boost/scss/bootstrap/_print.scss 0000604 00000005437 15062070724 0013062 0 ustar 00 // stylelint-disable declaration-no-important, selector-no-qualifying-type // Source: https://github.com/h5bp/main.css/blob/master/src/_print.css // ========================================================================== // Print styles. // Inlined to avoid the additional HTTP request: // https://www.phpied.com/delay-loading-your-print-css/ // ========================================================================== @if $enable-print-styles { @media print { *, *::before, *::after { // Bootstrap specific; comment out `color` and `background` //color: $black !important; // Black prints faster text-shadow: none !important; //background: transparent !important; box-shadow: none !important; } a { &:not(.btn) { text-decoration: underline; } } // Bootstrap specific; comment the following selector out //a[href]::after { // content: " (" attr(href) ")"; //} abbr[title]::after { content: " (" attr(title) ")"; } // Bootstrap specific; comment the following selector out // // Don't show links that are fragment identifiers, // or use the `javascript:` pseudo protocol // //a[href^="#"]::after, //a[href^="javascript:"]::after { // content: ""; //} pre { white-space: pre-wrap !important; } pre, blockquote { border: $border-width solid $gray-500; // Bootstrap custom code; using `$border-width` instead of 1px page-break-inside: avoid; } tr, img { page-break-inside: avoid; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } // Bootstrap specific changes start // Specify a size and min-width to make printing closer across browsers. // We don't set margin here because it breaks `size` in Chrome. We also // don't use `!important` on `size` as it breaks in Chrome. // @page { // size: $print-page-size; // } body { min-width: $print-body-min-width !important; } .container { min-width: $print-body-min-width !important; } // Bootstrap components .navbar { display: none; } .badge { border: $border-width solid $black; } .table { border-collapse: collapse !important; td, th { background-color: $white !important; } } .table-bordered { th, td { border: 1px solid $gray-300 !important; } } .table-dark { color: inherit; th, td, thead th, tbody + tbody { border-color: $table-border-color; } } .table .thead-dark th { color: inherit; border-color: $table-border-color; } // Bootstrap specific changes end } } boost/scss/bootstrap/_card.scss 0000604 00000013464 15062070724 0012636 0 ustar 00 // // Base styles // .card { position: relative; display: flex; flex-direction: column; min-width: 0; // See https://github.com/twbs/bootstrap/pull/22740#issuecomment-305868106 height: $card-height; word-wrap: break-word; background-color: $card-bg; background-clip: border-box; border: $card-border-width solid $card-border-color; @include border-radius($card-border-radius); > hr { margin-right: 0; margin-left: 0; } > .list-group { border-top: inherit; border-bottom: inherit; &:first-child { border-top-width: 0; @include border-top-radius($card-inner-border-radius); } &:last-child { border-bottom-width: 0; @include border-bottom-radius($card-inner-border-radius); } } // Due to specificity of the above selector (`.card > .list-group`), we must // use a child selector here to prevent double borders. > .card-header + .list-group, > .list-group + .card-footer { border-top: 0; } } .card-body { // Enable `flex-grow: 1` for decks and groups so that card blocks take up // as much space as possible, ensuring footers are aligned to the bottom. flex: 1 1 auto; // Workaround for the image size bug in IE // See: https://github.com/twbs/bootstrap/pull/28855 min-height: 1px; padding: $card-spacer-x; color: $card-color; } .card-title { margin-bottom: $card-spacer-y; } .card-subtitle { margin-top: -$card-spacer-y * .5; margin-bottom: 0; } .card-text:last-child { margin-bottom: 0; } .card-link { @include hover() { text-decoration: none; } + .card-link { margin-left: $card-spacer-x; } } // // Optional textual caps // .card-header { padding: $card-spacer-y $card-spacer-x; margin-bottom: 0; // Removes the default margin-bottom of <hN> color: $card-cap-color; background-color: $card-cap-bg; border-bottom: $card-border-width solid $card-border-color; &:first-child { @include border-radius($card-inner-border-radius $card-inner-border-radius 0 0); } } .card-footer { padding: $card-spacer-y $card-spacer-x; color: $card-cap-color; background-color: $card-cap-bg; border-top: $card-border-width solid $card-border-color; &:last-child { @include border-radius(0 0 $card-inner-border-radius $card-inner-border-radius); } } // // Header navs // .card-header-tabs { margin-right: -$card-spacer-x * .5; margin-bottom: -$card-spacer-y; margin-left: -$card-spacer-x * .5; border-bottom: 0; } .card-header-pills { margin-right: -$card-spacer-x * .5; margin-left: -$card-spacer-x * .5; } // Card image .card-img-overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0; padding: $card-img-overlay-padding; @include border-radius($card-inner-border-radius); } .card-img, .card-img-top, .card-img-bottom { flex-shrink: 0; // For IE: https://github.com/twbs/bootstrap/issues/29396 width: 100%; // Required because we use flexbox and this inherently applies align-self: stretch } .card-img, .card-img-top { @include border-top-radius($card-inner-border-radius); } .card-img, .card-img-bottom { @include border-bottom-radius($card-inner-border-radius); } // Card deck .card-deck { .card { margin-bottom: $card-deck-margin; } @include media-breakpoint-up(sm) { display: flex; flex-flow: row wrap; margin-right: -$card-deck-margin; margin-left: -$card-deck-margin; .card { // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4 flex: 1 0 0%; margin-right: $card-deck-margin; margin-bottom: 0; // Override the default margin-left: $card-deck-margin; } } } // // Card groups // .card-group { // The child selector allows nested `.card` within `.card-group` // to display properly. > .card { margin-bottom: $card-group-margin; } @include media-breakpoint-up(sm) { display: flex; flex-flow: row wrap; // The child selector allows nested `.card` within `.card-group` // to display properly. > .card { // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4 flex: 1 0 0%; margin-bottom: 0; + .card { margin-left: 0; border-left: 0; } // Handle rounded corners @if $enable-rounded { &:not(:last-child) { @include border-right-radius(0); .card-img-top, .card-header { // stylelint-disable-next-line property-disallowed-list border-top-right-radius: 0; } .card-img-bottom, .card-footer { // stylelint-disable-next-line property-disallowed-list border-bottom-right-radius: 0; } } &:not(:first-child) { @include border-left-radius(0); .card-img-top, .card-header { // stylelint-disable-next-line property-disallowed-list border-top-left-radius: 0; } .card-img-bottom, .card-footer { // stylelint-disable-next-line property-disallowed-list border-bottom-left-radius: 0; } } } } } } // // Columns // .card-columns { .card { margin-bottom: $card-columns-margin; } @include media-breakpoint-up(sm) { column-count: $card-columns-count; column-gap: $card-columns-gap; orphans: 1; widows: 1; .card { display: inline-block; // Don't let them vertically span multiple columns width: 100%; // Don't let their width change } } } // // Accordion // .accordion { overflow-anchor: none; > .card { overflow: hidden; &:not(:last-of-type) { border-bottom: 0; @include border-bottom-radius(0); } &:not(:first-of-type) { @include border-top-radius(0); } > .card-header { @include border-radius(0); margin-bottom: -$card-border-width; } } } boost/scss/bootstrap/_carousel.scss 0000604 00000011353 15062070724 0013535 0 ustar 00 // Notes on the classes: // // 1. .carousel.pointer-event should ideally be pan-y (to allow for users to scroll vertically) // even when their scroll action started on a carousel, but for compatibility (with Firefox) // we're preventing all actions instead // 2. The .carousel-item-left and .carousel-item-right is used to indicate where // the active slide is heading. // 3. .active.carousel-item is the current slide. // 4. .active.carousel-item-left and .active.carousel-item-right is the current // slide in its in-transition state. Only one of these occurs at a time. // 5. .carousel-item-next.carousel-item-left and .carousel-item-prev.carousel-item-right // is the upcoming slide in transition. .carousel { position: relative; } .carousel.pointer-event { touch-action: pan-y; } .carousel-inner { position: relative; width: 100%; overflow: hidden; @include clearfix(); } .carousel-item { position: relative; display: none; float: left; width: 100%; margin-right: -100%; backface-visibility: hidden; @include transition($carousel-transition); } .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%); } // // Alternate transitions // .carousel-fade { .carousel-item { opacity: 0; transition-property: opacity; transform: none; } .carousel-item.active, .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right { z-index: 1; opacity: 1; } .active.carousel-item-left, .active.carousel-item-right { z-index: 0; opacity: 0; @include transition(opacity 0s $carousel-transition-duration); } } // // Left/right controls for nav // .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; z-index: 1; // Use flex for alignment (1-3) display: flex; // 1. allow flex styles align-items: center; // 2. vertically center contents justify-content: center; // 3. horizontally center contents width: $carousel-control-width; padding: 0; color: $carousel-control-color; text-align: center; background: none; border: 0; opacity: $carousel-control-opacity; @include transition($carousel-control-transition); // Hover/focus state @include hover-focus() { color: $carousel-control-color; text-decoration: none; outline: 0; opacity: $carousel-control-hover-opacity; } } .carousel-control-prev { left: 0; @if $enable-gradients { background-image: linear-gradient(90deg, rgba($black, .25), rgba($black, .001)); } } .carousel-control-next { right: 0; @if $enable-gradients { background-image: linear-gradient(270deg, rgba($black, .25), rgba($black, .001)); } } // Icons for within .carousel-control-prev-icon, .carousel-control-next-icon { display: inline-block; width: $carousel-control-icon-width; height: $carousel-control-icon-width; background: 50% / 100% 100% no-repeat; } .carousel-control-prev-icon { background-image: escape-svg($carousel-control-prev-icon-bg); } .carousel-control-next-icon { background-image: escape-svg($carousel-control-next-icon-bg); } // Optional indicator pips // // Add an ordered list with the following class and add a list item for each // slide your carousel holds. .carousel-indicators { position: absolute; right: 0; bottom: 0; left: 0; z-index: 15; display: flex; justify-content: center; padding-left: 0; // override <ol> default // Use the .carousel-control's width as margin so we don't overlay those margin-right: $carousel-control-width; margin-left: $carousel-control-width; list-style: none; li { box-sizing: content-box; flex: 0 1 auto; width: $carousel-indicator-width; height: $carousel-indicator-height; margin-right: $carousel-indicator-spacer; margin-left: $carousel-indicator-spacer; text-indent: -999px; cursor: pointer; background-color: $carousel-indicator-active-bg; background-clip: padding-box; // Use transparent borders to increase the hit area by 10px on top and bottom. border-top: $carousel-indicator-hit-area-height solid transparent; border-bottom: $carousel-indicator-hit-area-height solid transparent; opacity: .5; @include transition($carousel-indicator-transition); } .active { opacity: 1; } } // Optional captions // // .carousel-caption { position: absolute; right: (100% - $carousel-caption-width) * .5; bottom: 20px; left: (100% - $carousel-caption-width) * .5; z-index: 10; padding-top: 20px; padding-bottom: 20px; color: $carousel-caption-color; text-align: center; } boost/scss/bootstrap/bootstrap.scss 0000604 00000001626 15062070724 0013600 0 ustar 00 /*! * Bootstrap v4.6.2 (https://getbootstrap.com/) * Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ @import "functions"; @import "variables"; @import "mixins"; @import "root"; @import "reboot"; @import "type"; @import "images"; @import "code"; @import "grid"; @import "tables"; @import "forms"; @import "buttons"; @import "transitions"; @import "dropdown"; @import "button-group"; @import "input-group"; @import "custom-forms"; @import "nav"; @import "navbar"; @import "card"; @import "breadcrumb"; @import "pagination"; @import "badge"; @import "jumbotron"; @import "alert"; @import "progress"; @import "media"; @import "list-group"; @import "close"; @import "toasts"; @import "modal"; @import "tooltip"; @import "popover"; @import "carousel"; @import "spinners"; @import "utilities"; @import "print"; boost/scss/bootstrap/mixins/_visibility.scss 0000604 00000000275 15062070724 0015417 0 ustar 00 // stylelint-disable declaration-no-important // Visibility @mixin invisible($visibility) { visibility: $visibility !important; @include deprecate("`invisible()`", "v4.3.0", "v5"); } boost/scss/bootstrap/mixins/_clearfix.scss 0000604 00000000135 15062070724 0015020 0 ustar 00 @mixin clearfix() { &::after { display: block; clear: both; content: ""; } } boost/scss/bootstrap/mixins/_table-row.scss 0000604 00000001432 15062070724 0015120 0 ustar 00 // Tables @mixin table-row-variant($state, $background, $border: null) { // Exact selectors below required to override `.table-striped` and prevent // inheritance to nested tables. .table-#{$state} { &, > th, > td { background-color: $background; } @if $border != null { th, td, thead th, tbody + tbody { border-color: $border; } } } // Hover states for `.table-hover` // Note: this is not available for cells or rows within `thead` or `tfoot`. .table-hover { $hover-background: darken($background, 5%); .table-#{$state} { @include hover() { background-color: $hover-background; > td, > th { background-color: $hover-background; } } } } } boost/scss/bootstrap/mixins/_breakpoints.scss 0000604 00000010602 15062070724 0015544 0 ustar 00 // Breakpoint viewport sizes and media queries. // // Breakpoints are defined as a map of (name: minimum width), order from small to large: // // (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px) // // The map defined in the `$grid-breakpoints` global variable is used as the `$breakpoints` argument by default. // Name of the next breakpoint, or null for the last breakpoint. // // >> breakpoint-next(sm) // md // >> breakpoint-next(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) // md // >> breakpoint-next(sm, $breakpoint-names: (xs sm md lg xl)) // md @function breakpoint-next($name, $breakpoints: $grid-breakpoints, $breakpoint-names: map-keys($breakpoints)) { $n: index($breakpoint-names, $name); @return if($n != null and $n < length($breakpoint-names), nth($breakpoint-names, $n + 1), null); } // Minimum breakpoint width. Null for the smallest (first) breakpoint. // // >> breakpoint-min(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) // 576px @function breakpoint-min($name, $breakpoints: $grid-breakpoints) { $min: map-get($breakpoints, $name); @return if($min != 0, $min, null); } // Maximum breakpoint width. Null for the largest (last) breakpoint. // The maximum value is calculated as the minimum of the next one less 0.02px // to work around the limitations of `min-` and `max-` prefixes and viewports with fractional widths. // See https://www.w3.org/TR/mediaqueries-4/#mq-min-max // Uses 0.02px rather than 0.01px to work around a current rounding bug in Safari. // See https://bugs.webkit.org/show_bug.cgi?id=178261 // // >> breakpoint-max(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) // 767.98px @function breakpoint-max($name, $breakpoints: $grid-breakpoints) { $next: breakpoint-next($name, $breakpoints); @return if($next, breakpoint-min($next, $breakpoints) - .02, null); } // Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front. // Useful for making responsive utilities. // // >> breakpoint-infix(xs, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) // "" (Returns a blank string) // >> breakpoint-infix(sm, (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)) // "-sm" @function breakpoint-infix($name, $breakpoints: $grid-breakpoints) { @return if(breakpoint-min($name, $breakpoints) == null, "", "-#{$name}"); } // Media of at least the minimum breakpoint width. No query for the smallest breakpoint. // Makes the @content apply to the given breakpoint and wider. @mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints) { $min: breakpoint-min($name, $breakpoints); @if $min { @media (min-width: $min) { @content; } } @else { @content; } } // Media of at most the maximum breakpoint width. No query for the largest breakpoint. // Makes the @content apply to the given breakpoint and narrower. @mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints) { $max: breakpoint-max($name, $breakpoints); @if $max { @media (max-width: $max) { @content; } } @else { @content; } } // Media that spans multiple breakpoint widths. // Makes the @content apply between the min and max breakpoints @mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints) { $min: breakpoint-min($lower, $breakpoints); $max: breakpoint-max($upper, $breakpoints); @if $min != null and $max != null { @media (min-width: $min) and (max-width: $max) { @content; } } @else if $max == null { @include media-breakpoint-up($lower, $breakpoints) { @content; } } @else if $min == null { @include media-breakpoint-down($upper, $breakpoints) { @content; } } } // Media between the breakpoint's minimum and maximum widths. // No minimum for the smallest breakpoint, and no maximum for the largest one. // Makes the @content apply only to the given breakpoint, not viewports any wider or narrower. @mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints) { $min: breakpoint-min($name, $breakpoints); $max: breakpoint-max($name, $breakpoints); @if $min != null and $max != null { @media (min-width: $min) and (max-width: $max) { @content; } } @else if $max == null { @include media-breakpoint-up($name, $breakpoints) { @content; } } @else if $min == null { @include media-breakpoint-down($name, $breakpoints) { @content; } } } boost/scss/bootstrap/mixins/_transition.scss 0000604 00000001251 15062070724 0015415 0 ustar 00 // stylelint-disable property-disallowed-list @mixin transition($transition...) { @if length($transition) == 0 { $transition: $transition-base; } @if length($transition) > 1 { @each $value in $transition { @if $value == null or $value == none { @warn "The keyword 'none' or 'null' must be used as a single argument."; } } } @if $enable-transitions { @if nth($transition, 1) != null { transition: $transition; } @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none { @media (prefers-reduced-motion: reduce) { transition: none; } } } } boost/scss/bootstrap/mixins/_caret.scss 0000604 00000002616 15062070724 0014327 0 ustar 00 @mixin caret-down() { border-top: $caret-width solid; border-right: $caret-width solid transparent; border-bottom: 0; border-left: $caret-width solid transparent; } @mixin caret-up() { border-top: 0; border-right: $caret-width solid transparent; border-bottom: $caret-width solid; border-left: $caret-width solid transparent; } @mixin caret-right() { border-top: $caret-width solid transparent; border-right: 0; border-bottom: $caret-width solid transparent; border-left: $caret-width solid; } @mixin caret-left() { border-top: $caret-width solid transparent; border-right: $caret-width solid; border-bottom: $caret-width solid transparent; } @mixin caret($direction: down) { @if $enable-caret { &::after { display: inline-block; margin-left: $caret-spacing; vertical-align: $caret-vertical-align; content: ""; @if $direction == down { @include caret-down(); } @else if $direction == up { @include caret-up(); } @else if $direction == right { @include caret-right(); } } @if $direction == left { &::after { display: none; } &::before { display: inline-block; margin-right: $caret-spacing; vertical-align: $caret-vertical-align; content: ""; @include caret-left(); } } &:empty::after { margin-left: 0; } } } boost/scss/bootstrap/mixins/_nav-divider.scss 0000604 00000000561 15062070724 0015436 0 ustar 00 // Horizontal dividers // // Dividers (basically an hr) within dropdowns and nav lists @mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) { height: 0; margin: $margin-y 0; overflow: hidden; border-top: 1px solid $color; @include deprecate("The `nav-divider()` mixin", "v4.4.0", "v5", $ignore-warning); } boost/scss/bootstrap/mixins/_background-variant.scss 0000604 00000001267 15062070724 0017013 0 ustar 00 // stylelint-disable declaration-no-important // Contextual backgrounds @mixin bg-variant($parent, $color, $ignore-warning: false) { #{$parent} { background-color: $color !important; } a#{$parent}, button#{$parent} { @include hover-focus() { background-color: darken($color, 10%) !important; } } @include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning); } @mixin bg-gradient-variant($parent, $color, $ignore-warning: false) { #{$parent} { background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important; } @include deprecate("The `bg-gradient-variant` mixin", "v4.5.0", "v5", $ignore-warning); } boost/scss/bootstrap/mixins/_grid.scss 0000604 00000004046 15062070724 0014155 0 ustar 00 /// Grid system // // Generate semantic grid columns with these mixins. @mixin make-container($gutter: $grid-gutter-width) { width: 100%; padding-right: $gutter * .5; padding-left: $gutter * .5; margin-right: auto; margin-left: auto; } @mixin make-row($gutter: $grid-gutter-width) { display: flex; flex-wrap: wrap; margin-right: -$gutter * .5; margin-left: -$gutter * .5; } // For each breakpoint, define the maximum width of the container in a media query @mixin make-container-max-widths($max-widths: $container-max-widths, $breakpoints: $grid-breakpoints) { @each $breakpoint, $container-max-width in $max-widths { @include media-breakpoint-up($breakpoint, $breakpoints) { max-width: $container-max-width; } } @include deprecate("The `make-container-max-widths` mixin", "v4.5.2", "v5"); } @mixin make-col-ready($gutter: $grid-gutter-width) { position: relative; // Prevent columns from becoming too narrow when at smaller grid tiers by // always setting `width: 100%;`. This works because we use `flex` values // later on to override this initial width. width: 100%; padding-right: $gutter * .5; padding-left: $gutter * .5; } @mixin make-col($size, $columns: $grid-columns) { flex: 0 0 percentage(divide($size, $columns)); // Add a `max-width` to ensure content within each column does not blow out // the width of the column. Applies to IE10+ and Firefox. Chrome and Safari // do not appear to require this. max-width: percentage(divide($size, $columns)); } @mixin make-col-auto() { flex: 0 0 auto; width: auto; max-width: 100%; // Reset earlier grid tiers } @mixin make-col-offset($size, $columns: $grid-columns) { $num: divide($size, $columns); margin-left: if($num == 0, 0, percentage($num)); } // Row columns // // Specify on a parent element(e.g., .row) to force immediate children into NN // numberof columns. Supports wrapping to new lines, but does not do a Masonry // style grid. @mixin row-cols($count) { > * { flex: 0 0 divide(100%, $count); max-width: divide(100%, $count); } } boost/scss/bootstrap/mixins/_box-shadow.scss 0000604 00000001024 15062070724 0015274 0 ustar 00 @mixin box-shadow($shadow...) { @if $enable-shadows { $result: (); @if (length($shadow) == 1) { // We can pass `@include box-shadow(none);` $result: $shadow; } @else { // Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;` @for $i from 1 through length($shadow) { @if nth($shadow, $i) != "none" { $result: append($result, nth($shadow, $i), "comma"); } } } @if (length($result) > 0) { box-shadow: $result; } } } boost/scss/bootstrap/mixins/_size.scss 0000604 00000000224 15062070724 0014174 0 ustar 00 // Sizing shortcuts @mixin size($width, $height: $width) { width: $width; height: $height; @include deprecate("`size()`", "v4.3.0", "v5"); } boost/scss/bootstrap/mixins/_forms.scss 0000604 00000013267 15062070724 0014363 0 ustar 00 // Form control focus state // // Generate a customized focus state and for any input with the specified color, // which defaults to the `$input-focus-border-color` variable. // // We highly encourage you to not customize the default value, but instead use // this to tweak colors on an as-needed basis. This aesthetic change is based on // WebKit's default styles, but applicable to a wider range of browsers. Its // usability and accessibility should be taken into account with any change. // // Example usage: change the default blue border and shadow to white for better // contrast against a dark gray background. @mixin form-control-focus($ignore-warning: false) { &:focus { color: $input-focus-color; background-color: $input-focus-bg; border-color: $input-focus-border-color; outline: 0; @if $enable-shadows { @include box-shadow($input-box-shadow, $input-focus-box-shadow); } @else { // Avoid using mixin so we can pass custom focus shadow properly box-shadow: $input-focus-box-shadow; } } @include deprecate("The `form-control-focus()` mixin", "v4.4.0", "v5", $ignore-warning); } // This mixin uses an `if()` technique to be compatible with Dart Sass // See https://github.com/sass/sass/issues/1873#issuecomment-152293725 for more details @mixin form-validation-state-selector($state) { @if ($state == "valid" or $state == "invalid") { .was-validated #{if(&, "&", "")}:#{$state}, #{if(&, "&", "")}.is-#{$state} { @content; } } @else { #{if(&, "&", "")}.is-#{$state} { @content; } } } @mixin form-validation-state($state, $color, $icon) { .#{$state}-feedback { display: none; width: 100%; margin-top: $form-feedback-margin-top; @include font-size($form-feedback-font-size); color: $color; } .#{$state}-tooltip { position: absolute; top: 100%; left: 0; z-index: 5; display: none; max-width: 100%; // Contain to parent when possible padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x; margin-top: .1rem; @include font-size($form-feedback-tooltip-font-size); line-height: $form-feedback-tooltip-line-height; color: color-yiq($color); background-color: rgba($color, $form-feedback-tooltip-opacity); @include border-radius($form-feedback-tooltip-border-radius); // See https://github.com/twbs/bootstrap/pull/31557 // Align tooltip to form elements .form-row > .col > &, .form-row > [class*="col-"] > & { left: $form-grid-gutter-width * .5; } } @include form-validation-state-selector($state) { ~ .#{$state}-feedback, ~ .#{$state}-tooltip { display: block; } } .form-control { @include form-validation-state-selector($state) { border-color: $color; @if $enable-validation-icons { padding-right: $input-height-inner !important; // stylelint-disable-line declaration-no-important background-image: escape-svg($icon); background-repeat: no-repeat; background-position: right $input-height-inner-quarter center; background-size: $input-height-inner-half $input-height-inner-half; } &:focus { border-color: $color; box-shadow: 0 0 0 $input-focus-width rgba($color, .25); } } } // stylelint-disable-next-line selector-no-qualifying-type select.form-control { @include form-validation-state-selector($state) { @if $enable-validation-icons { padding-right: $input-padding-x * 4 !important; // stylelint-disable-line declaration-no-important background-position: right $input-padding-x * 2 center; } } } // stylelint-disable-next-line selector-no-qualifying-type textarea.form-control { @include form-validation-state-selector($state) { @if $enable-validation-icons { padding-right: $input-height-inner; background-position: top $input-height-inner-quarter right $input-height-inner-quarter; } } } .custom-select { @include form-validation-state-selector($state) { border-color: $color; @if $enable-validation-icons { padding-right: $custom-select-feedback-icon-padding-right !important; // stylelint-disable-line declaration-no-important background: $custom-select-background, $custom-select-bg escape-svg($icon) $custom-select-feedback-icon-position / $custom-select-feedback-icon-size no-repeat; } &:focus { border-color: $color; box-shadow: 0 0 0 $input-focus-width rgba($color, .25); } } } .form-check-input { @include form-validation-state-selector($state) { ~ .form-check-label { color: $color; } ~ .#{$state}-feedback, ~ .#{$state}-tooltip { display: block; } } } .custom-control-input { @include form-validation-state-selector($state) { ~ .custom-control-label { color: $color; &::before { border-color: $color; } } &:checked { ~ .custom-control-label::before { border-color: lighten($color, 10%); @include gradient-bg(lighten($color, 10%)); } } &:focus { ~ .custom-control-label::before { box-shadow: 0 0 0 $input-focus-width rgba($color, .25); } &:not(:checked) ~ .custom-control-label::before { border-color: $color; } } } } // custom file .custom-file-input { @include form-validation-state-selector($state) { ~ .custom-file-label { border-color: $color; } &:focus { ~ .custom-file-label { border-color: $color; box-shadow: 0 0 0 $input-focus-width rgba($color, .25); } } } } } boost/scss/bootstrap/mixins/_deprecate.scss 0000604 00000001145 15062070724 0015161 0 ustar 00 // Deprecate mixin // // This mixin can be used to deprecate mixins or functions. // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap) @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) { @if ($enable-deprecation-messages != false and $ignore-warning != true) { @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}."; } } boost/scss/bootstrap/mixins/_list-group.scss 0000604 00000000661 15062070724 0015334 0 ustar 00 // List Groups @mixin list-group-item-variant($state, $background, $color) { .list-group-item-#{$state} { color: $color; background-color: $background; &.list-group-item-action { @include hover-focus() { color: $color; background-color: darken($background, 5%); } &.active { color: $white; background-color: $color; border-color: $color; } } } } boost/scss/bootstrap/mixins/_text-hide.scss 0000604 00000000506 15062070724 0015120 0 ustar 00 // CSS image replacement @mixin text-hide($ignore-warning: false) { // stylelint-disable-next-line font-family-no-missing-generic-family-keyword font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; @include deprecate("`text-hide()`", "v4.1.0", "v5", $ignore-warning); } boost/scss/bootstrap/mixins/_grid-framework.scss 0000604 00000004051 15062070724 0016144 0 ustar 00 // Framework grid generation // // Used only by Bootstrap to generate the correct number of grid classes given // any value of `$grid-columns`. @mixin make-grid-columns($columns: $grid-columns, $gutter: $grid-gutter-width, $breakpoints: $grid-breakpoints) { // Common properties for all breakpoints %grid-column { position: relative; width: 100%; padding-right: $gutter * .5; padding-left: $gutter * .5; } @each $breakpoint in map-keys($breakpoints) { $infix: breakpoint-infix($breakpoint, $breakpoints); @if $columns > 0 { // Allow columns to stretch full width below their breakpoints @for $i from 1 through $columns { .col#{$infix}-#{$i} { @extend %grid-column; } } } .col#{$infix}, .col#{$infix}-auto { @extend %grid-column; } @include media-breakpoint-up($breakpoint, $breakpoints) { // Provide basic `.col-{bp}` classes for equal-width flexbox columns .col#{$infix} { flex-basis: 0; flex-grow: 1; max-width: 100%; } @if $grid-row-columns > 0 { @for $i from 1 through $grid-row-columns { .row-cols#{$infix}-#{$i} { @include row-cols($i); } } } .col#{$infix}-auto { @include make-col-auto(); } @if $columns > 0 { @for $i from 1 through $columns { .col#{$infix}-#{$i} { @include make-col($i, $columns); } } } .order#{$infix}-first { order: -1; } .order#{$infix}-last { order: $columns + 1; } @for $i from 0 through $columns { .order#{$infix}-#{$i} { order: $i; } } @if $columns > 0 { // `$columns - 1` because offsetting by the width of an entire row isn't possible @for $i from 0 through ($columns - 1) { @if not ($infix == "" and $i == 0) { // Avoid emitting useless .offset-0 .offset#{$infix}-#{$i} { @include make-col-offset($i, $columns); } } } } } } } boost/scss/bootstrap/mixins/_border-radius.scss 0000604 00000003444 15062070724 0015773 0 ustar 00 // stylelint-disable property-disallowed-list // Single side border-radius // Helper function to replace negative values with 0 @function valid-radius($radius) { $return: (); @each $value in $radius { @if type-of($value) == number { $return: append($return, max($value, 0)); } @else { $return: append($return, $value); } } @return $return; } @mixin border-radius($radius: $border-radius, $fallback-border-radius: false) { @if $enable-rounded { border-radius: valid-radius($radius); } @else if $fallback-border-radius != false { border-radius: $fallback-border-radius; } } @mixin border-top-radius($radius) { @if $enable-rounded { border-top-left-radius: valid-radius($radius); border-top-right-radius: valid-radius($radius); } } @mixin border-right-radius($radius) { @if $enable-rounded { border-top-right-radius: valid-radius($radius); border-bottom-right-radius: valid-radius($radius); } } @mixin border-bottom-radius($radius) { @if $enable-rounded { border-bottom-right-radius: valid-radius($radius); border-bottom-left-radius: valid-radius($radius); } } @mixin border-left-radius($radius) { @if $enable-rounded { border-top-left-radius: valid-radius($radius); border-bottom-left-radius: valid-radius($radius); } } @mixin border-top-left-radius($radius) { @if $enable-rounded { border-top-left-radius: valid-radius($radius); } } @mixin border-top-right-radius($radius) { @if $enable-rounded { border-top-right-radius: valid-radius($radius); } } @mixin border-bottom-right-radius($radius) { @if $enable-rounded { border-bottom-right-radius: valid-radius($radius); } } @mixin border-bottom-left-radius($radius) { @if $enable-rounded { border-bottom-left-radius: valid-radius($radius); } } boost/scss/bootstrap/mixins/_text-truncate.scss 0000604 00000000250 15062070724 0016030 0 ustar 00 // Text truncate // Requires inline-block or block for proper styling @mixin text-truncate() { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } boost/scss/bootstrap/mixins/_screen-reader.scss 0000604 00000001473 15062070724 0015750 0 ustar 00 // Only display content to screen readers // // See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/ // See: https://kittygiraudel.com/2016/10/13/css-hide-and-seek/ @mixin sr-only() { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686 overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } // Use in conjunction with .sr-only to only display content when it's focused. // // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 // // Credit: HTML5 Boilerplate @mixin sr-only-focusable() { &:active, &:focus { position: static; width: auto; height: auto; overflow: visible; clip: auto; white-space: normal; } } boost/scss/bootstrap/mixins/_hover.scss 0000604 00000001365 15062070724 0014354 0 ustar 00 // Hover mixin and `$enable-hover-media-query` are deprecated. // // Originally added during our alphas and maintained during betas, this mixin was // designed to prevent `:hover` stickiness on iOS-an issue where hover styles // would persist after initial touch. // // For backward compatibility, we've kept these mixins and updated them to // always return their regular pseudo-classes instead of a shimmed media query. // // Issue: https://github.com/twbs/bootstrap/issues/25195 @mixin hover() { &:hover { @content; } } @mixin hover-focus() { &:hover, &:focus { @content; } } @mixin plain-hover-focus() { &, &:hover, &:focus { @content; } } @mixin hover-focus-active() { &:hover, &:focus, &:active { @content; } } boost/scss/bootstrap/mixins/_pagination.scss 0000604 00000000716 15062070724 0015361 0 ustar 00 // Pagination @mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { .page-link { padding: $padding-y $padding-x; @include font-size($font-size); line-height: $line-height; } .page-item { &:first-child { .page-link { @include border-left-radius($border-radius); } } &:last-child { .page-link { @include border-right-radius($border-radius); } } } } boost/scss/bootstrap/mixins/_alert.scss 0000604 00000000362 15062070724 0014334 0 ustar 00 @mixin alert-variant($background, $border, $color) { color: $color; @include gradient-bg($background); border-color: $border; hr { border-top-color: darken($border, 5%); } .alert-link { color: darken($color, 10%); } } boost/scss/bootstrap/mixins/_image.scss 0000604 00000002203 15062070724 0014303 0 ustar 00 // Image Mixins // - Responsive image // - Retina image // Responsive image // // Keep images from scaling beyond the width of their parents. @mixin img-fluid() { // Part 1: Set a maximum relative to the parent max-width: 100%; // Part 2: Override the height to auto, otherwise images will be stretched // when setting a width and height attribute on the img element. height: auto; } // Retina image // // Short retina mixin for setting background-image and -size. @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { background-image: url($file-1x); // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, // but doesn't convert dppx=>dpi. // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. // Compatibility info: https://caniuse.com/css-media-resolution @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx only screen and (min-resolution: 2dppx) { // Standardized background-image: url($file-2x); background-size: $width-1x $height-1x; } @include deprecate("`img-retina()`", "v4.3.0", "v5"); } boost/scss/bootstrap/mixins/_reset-text.scss 0000604 00000000741 15062070724 0015332 0 ustar 00 @mixin reset-text() { font-family: $font-family-base; // We deliberately do NOT reset font-size or word-wrap. font-style: normal; font-weight: $font-weight-normal; line-height: $line-height-base; text-align: left; // Fallback for where `start` is not supported text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; white-space: normal; word-spacing: normal; line-break: auto; } boost/scss/bootstrap/mixins/_text-emphasis.scss 0000604 00000000732 15062070724 0016021 0 ustar 00 // stylelint-disable declaration-no-important // Typography @mixin text-emphasis-variant($parent, $color, $ignore-warning: false) { #{$parent} { color: $color !important; } @if $emphasized-link-hover-darken-percentage != 0 { a#{$parent} { @include hover-focus() { color: darken($color, $emphasized-link-hover-darken-percentage) !important; } } } @include deprecate("`text-emphasis-variant()`", "v4.4.0", "v5", $ignore-warning); } boost/scss/bootstrap/mixins/_lists.scss 0000604 00000000252 15062070724 0014361 0 ustar 00 // Lists // Unstyled keeps list items block level, just removes default browser padding and list-style @mixin list-unstyled() { padding-left: 0; list-style: none; } boost/scss/bootstrap/mixins/_gradients.scss 0000604 00000004002 15062070724 0015200 0 ustar 00 // Gradients @mixin gradient-bg($color) { @if $enable-gradients { background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x; } @else { background-color: $color; } } // Horizontal gradient, from left to right // // Creates two color stops, start and end, by specifying a color and position for each color stop. @mixin gradient-x($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) { background-image: linear-gradient(to right, $start-color $start-percent, $end-color $end-percent); background-repeat: repeat-x; } // Vertical gradient, from top to bottom // // Creates two color stops, start and end, by specifying a color and position for each color stop. @mixin gradient-y($start-color: $gray-700, $end-color: $gray-800, $start-percent: 0%, $end-percent: 100%) { background-image: linear-gradient(to bottom, $start-color $start-percent, $end-color $end-percent); background-repeat: repeat-x; } @mixin gradient-directional($start-color: $gray-700, $end-color: $gray-800, $deg: 45deg) { background-image: linear-gradient($deg, $start-color, $end-color); background-repeat: repeat-x; } @mixin gradient-x-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) { background-image: linear-gradient(to right, $start-color, $mid-color $color-stop, $end-color); background-repeat: no-repeat; } @mixin gradient-y-three-colors($start-color: $blue, $mid-color: $purple, $color-stop: 50%, $end-color: $red) { background-image: linear-gradient($start-color, $mid-color $color-stop, $end-color); background-repeat: no-repeat; } @mixin gradient-radial($inner-color: $gray-700, $outer-color: $gray-800) { background-image: radial-gradient(circle, $inner-color, $outer-color); background-repeat: no-repeat; } @mixin gradient-striped($color: rgba($white, .15), $angle: 45deg) { background-image: linear-gradient($angle, $color 25%, transparent 25%, transparent 50%, $color 50%, $color 75%, transparent 75%, transparent); } boost/scss/bootstrap/mixins/_resize.scss 0000604 00000000312 15062070724 0014521 0 ustar 00 // Resize anything @mixin resizable($direction) { overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` resize: $direction; // Options: horizontal, vertical, both } boost/scss/bootstrap/mixins/_float.scss 0000604 00000000610 15062070724 0014326 0 ustar 00 // stylelint-disable declaration-no-important @mixin float-left() { float: left !important; @include deprecate("The `float-left` mixin", "v4.3.0", "v5"); } @mixin float-right() { float: right !important; @include deprecate("The `float-right` mixin", "v4.3.0", "v5"); } @mixin float-none() { float: none !important; @include deprecate("The `float-none` mixin", "v4.3.0", "v5"); } boost/scss/bootstrap/mixins/_buttons.scss 0000604 00000006705 15062070724 0014732 0 ustar 00 // Button variants // // Easily pump out default styles, as well as :hover, :focus, :active, // and disabled options for all buttons @mixin button-variant($background, $border, $hover-background: darken($background, 7.5%), $hover-border: darken($border, 10%), $active-background: darken($background, 10%), $active-border: darken($border, 12.5%)) { color: color-yiq($background); @include gradient-bg($background); border-color: $border; @include box-shadow($btn-box-shadow); @include hover() { color: color-yiq($hover-background); @include gradient-bg($hover-background); border-color: $hover-border; } &:focus, &.focus { color: color-yiq($hover-background); @include gradient-bg($hover-background); border-color: $hover-border; @if $enable-shadows { @include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5)); } @else { // Avoid using mixin so we can pass custom focus shadow properly box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5); } } // Disabled comes first so active can properly restyle &.disabled, &:disabled { color: color-yiq($background); background-color: $background; border-color: $border; // Remove CSS gradients if they're enabled @if $enable-gradients { background-image: none; } } &:not(:disabled):not(.disabled):active, &:not(:disabled):not(.disabled).active, .show > &.dropdown-toggle { color: color-yiq($active-background); background-color: $active-background; @if $enable-gradients { background-image: none; // Remove the gradient for the pressed/active state } border-color: $active-border; &:focus { @if $enable-shadows and $btn-active-box-shadow != none { @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5)); } @else { // Avoid using mixin so we can pass custom focus shadow properly box-shadow: 0 0 0 $btn-focus-width rgba(mix(color-yiq($background), $border, 15%), .5); } } } } @mixin button-outline-variant($color, $color-hover: color-yiq($color), $active-background: $color, $active-border: $color) { color: $color; border-color: $color; @include hover() { color: $color-hover; background-color: $active-background; border-color: $active-border; } &:focus, &.focus { box-shadow: 0 0 0 $btn-focus-width rgba($color, .5); } &.disabled, &:disabled { color: $color; background-color: transparent; } &:not(:disabled):not(.disabled):active, &:not(:disabled):not(.disabled).active, .show > &.dropdown-toggle { color: color-yiq($active-background); background-color: $active-background; border-color: $active-border; &:focus { @if $enable-shadows and $btn-active-box-shadow != none { @include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5)); } @else { // Avoid using mixin so we can pass custom focus shadow properly box-shadow: 0 0 0 $btn-focus-width rgba($color, .5); } } } } // Button sizes @mixin button-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { padding: $padding-y $padding-x; @include font-size($font-size); line-height: $line-height; // Manually declare to provide an override to the browser default @include border-radius($border-radius, 0); } boost/scss/bootstrap/mixins/_badge.scss 0000604 00000000500 15062070724 0014261 0 ustar 00 @mixin badge-variant($bg) { color: color-yiq($bg); background-color: $bg; @at-root a#{&} { @include hover-focus() { color: color-yiq($bg); background-color: darken($bg, 10%); } &:focus, &.focus { outline: 0; box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5); } } } boost/scss/bootstrap/_jumbotron.scss 0000604 00000000626 15062070724 0013740 0 ustar 00 .jumbotron { padding: $jumbotron-padding ($jumbotron-padding * .5); margin-bottom: $jumbotron-padding; color: $jumbotron-color; background-color: $jumbotron-bg; @include border-radius($border-radius-lg); @include media-breakpoint-up(sm) { padding: ($jumbotron-padding * 2) $jumbotron-padding; } } .jumbotron-fluid { padding-right: 0; padding-left: 0; @include border-radius(0); } boost/scss/bootstrap/_variables.scss 0000604 00000136747 15062070724 0013707 0 ustar 00 // Variables // // Variables should follow the `$component-state-property-size` formula for // consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. // Color system $white: #fff !default; $gray-100: #f8f9fa !default; $gray-200: #e9ecef !default; $gray-300: #dee2e6 !default; $gray-400: #ced4da !default; $gray-500: #adb5bd !default; $gray-600: #6c757d !default; $gray-700: #495057 !default; $gray-800: #343a40 !default; $gray-900: #212529 !default; $black: #000 !default; $grays: () !default; $grays: map-merge( ( "100": $gray-100, "200": $gray-200, "300": $gray-300, "400": $gray-400, "500": $gray-500, "600": $gray-600, "700": $gray-700, "800": $gray-800, "900": $gray-900 ), $grays ); $blue: #007bff !default; $indigo: #6610f2 !default; $purple: #6f42c1 !default; $pink: #e83e8c !default; $red: #dc3545 !default; $orange: #fd7e14 !default; $yellow: #ffc107 !default; $green: #28a745 !default; $teal: #20c997 !default; $cyan: #17a2b8 !default; $colors: () !default; $colors: map-merge( ( "blue": $blue, "indigo": $indigo, "purple": $purple, "pink": $pink, "red": $red, "orange": $orange, "yellow": $yellow, "green": $green, "teal": $teal, "cyan": $cyan, "white": $white, "gray": $gray-600, "gray-dark": $gray-800 ), $colors ); $primary: $blue !default; $secondary: $gray-600 !default; $success: $green !default; $info: $cyan !default; $warning: $yellow !default; $danger: $red !default; $light: $gray-100 !default; $dark: $gray-800 !default; $theme-colors: () !default; $theme-colors: map-merge( ( "primary": $primary, "secondary": $secondary, "success": $success, "info": $info, "warning": $warning, "danger": $danger, "light": $light, "dark": $dark ), $theme-colors ); // Set a specific jump point for requesting color jumps $theme-color-interval: 8% !default; // The yiq lightness value that determines when the lightness of color changes from "dark" to "light". Acceptable values are between 0 and 255. $yiq-contrasted-threshold: 150 !default; // Customize the light and dark text colors for use in our YIQ color contrast function. $yiq-text-dark: $gray-900 !default; $yiq-text-light: $white !default; // Characters which are escaped by the escape-svg function $escaped-characters: ( ("<", "%3c"), (">", "%3e"), ("#", "%23"), ("(", "%28"), (")", "%29"), ) !default; // Options // // Quickly modify global styling by enabling or disabling optional features. $enable-caret: true !default; $enable-rounded: true !default; $enable-shadows: false !default; $enable-gradients: false !default; $enable-transitions: true !default; $enable-prefers-reduced-motion-media-query: true !default; $enable-hover-media-query: false !default; // Deprecated, no longer affects any compiled CSS $enable-grid-classes: true !default; $enable-pointer-cursor-for-buttons: true !default; $enable-print-styles: true !default; $enable-responsive-font-sizes: false !default; $enable-validation-icons: true !default; $enable-deprecation-messages: true !default; // Spacing // // Control the default styling of most Bootstrap elements by modifying these // variables. Mostly focused on spacing. // You can add more entries to the $spacers map, should you need more variation. $spacer: 1rem !default; $spacers: () !default; $spacers: map-merge( ( 0: 0, 1: ($spacer * .25), 2: ($spacer * .5), 3: $spacer, 4: ($spacer * 1.5), 5: ($spacer * 3) ), $spacers ); // This variable affects the `.h-*` and `.w-*` classes. $sizes: () !default; $sizes: map-merge( ( 25: 25%, 50: 50%, 75: 75%, 100: 100%, auto: auto ), $sizes ); // Body // // Settings for the `<body>` element. $body-bg: $white !default; $body-color: $gray-900 !default; // Links // // Style anchor elements. $link-color: theme-color("primary") !default; $link-decoration: none !default; $link-hover-color: darken($link-color, 15%) !default; $link-hover-decoration: underline !default; // Darken percentage for links with `.text-*` class (e.g. `.text-success`) $emphasized-link-hover-darken-percentage: 15% !default; // Paragraphs // // Style p element. $paragraph-margin-bottom: 1rem !default; // Grid breakpoints // // Define the minimum dimensions at which your layout will change, // adapting to different screen sizes, for use in media queries. $grid-breakpoints: ( xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px ) !default; @include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); @include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints"); // Grid containers // // Define the maximum width of `.container` for different screen sizes. $container-max-widths: ( sm: 540px, md: 720px, lg: 960px, xl: 1140px ) !default; @include _assert-ascending($container-max-widths, "$container-max-widths"); // Grid columns // // Set the number of columns and specify the width of the gutters. $grid-columns: 12 !default; $grid-gutter-width: 30px !default; $grid-row-columns: 6 !default; // Components // // Define common padding and border radius sizes and more. $line-height-lg: 1.5 !default; $line-height-sm: 1.5 !default; $border-width: 1px !default; $border-color: $gray-300 !default; $border-radius: .25rem !default; $border-radius-lg: .3rem !default; $border-radius-sm: .2rem !default; $rounded-pill: 50rem !default; $box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default; $box-shadow: 0 .5rem 1rem rgba($black, .15) !default; $box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default; $component-active-color: $white !default; $component-active-bg: theme-color("primary") !default; $caret-width: .3em !default; $caret-vertical-align: $caret-width * .85 !default; $caret-spacing: $caret-width * .85 !default; $transition-base: all .2s ease-in-out !default; $transition-fade: opacity .15s linear !default; $transition-collapse: height .35s ease !default; $transition-collapse-width: width .35s ease !default; $embed-responsive-aspect-ratios: () !default; $embed-responsive-aspect-ratios: join( ( (21 9), (16 9), (4 3), (1 1), ), $embed-responsive-aspect-ratios ); // Typography // // Font, line-height, and color for body text, headings, and more. // stylelint-disable value-keyword-case $font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; $font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; $font-family-base: $font-family-sans-serif !default; // stylelint-enable value-keyword-case $font-size-base: 1rem !default; // Assumes the browser default, typically `16px` $font-size-lg: $font-size-base * 1.25 !default; $font-size-sm: $font-size-base * .875 !default; $font-weight-lighter: lighter !default; $font-weight-light: 300 !default; $font-weight-normal: 400 !default; $font-weight-bold: 700 !default; $font-weight-bolder: bolder !default; $font-weight-base: $font-weight-normal !default; $line-height-base: 1.5 !default; $h1-font-size: $font-size-base * 2.5 !default; $h2-font-size: $font-size-base * 2 !default; $h3-font-size: $font-size-base * 1.75 !default; $h4-font-size: $font-size-base * 1.5 !default; $h5-font-size: $font-size-base * 1.25 !default; $h6-font-size: $font-size-base !default; $headings-margin-bottom: $spacer * .5 !default; $headings-font-family: null !default; $headings-font-weight: 500 !default; $headings-line-height: 1.2 !default; $headings-color: null !default; $display1-size: 6rem !default; $display2-size: 5.5rem !default; $display3-size: 4.5rem !default; $display4-size: 3.5rem !default; $display1-weight: 300 !default; $display2-weight: 300 !default; $display3-weight: 300 !default; $display4-weight: 300 !default; $display-line-height: $headings-line-height !default; $lead-font-size: $font-size-base * 1.25 !default; $lead-font-weight: 300 !default; $small-font-size: .875em !default; $text-muted: $gray-600 !default; $blockquote-small-color: $gray-600 !default; $blockquote-small-font-size: $small-font-size !default; $blockquote-font-size: $font-size-base * 1.25 !default; $hr-border-color: rgba($black, .1) !default; $hr-border-width: $border-width !default; $mark-padding: .2em !default; $dt-font-weight: $font-weight-bold !default; $kbd-box-shadow: inset 0 -.1rem 0 rgba($black, .25) !default; $nested-kbd-font-weight: $font-weight-bold !default; $list-inline-padding: .5rem !default; $mark-bg: #fcf8e3 !default; $hr-margin-y: $spacer !default; // Tables // // Customizes the `.table` component with basic values, each used across all table variations. $table-cell-padding: .75rem !default; $table-cell-padding-sm: .3rem !default; $table-color: $body-color !default; $table-bg: null !default; $table-accent-bg: rgba($black, .05) !default; $table-hover-color: $table-color !default; $table-hover-bg: rgba($black, .075) !default; $table-active-bg: $table-hover-bg !default; $table-border-width: $border-width !default; $table-border-color: $border-color !default; $table-head-bg: $gray-200 !default; $table-head-color: $gray-700 !default; $table-th-font-weight: null !default; $table-dark-color: $white !default; $table-dark-bg: $gray-800 !default; $table-dark-accent-bg: rgba($white, .05) !default; $table-dark-hover-color: $table-dark-color !default; $table-dark-hover-bg: rgba($white, .075) !default; $table-dark-border-color: lighten($table-dark-bg, 7.5%) !default; $table-striped-order: odd !default; $table-caption-color: $text-muted !default; $table-bg-level: -9 !default; $table-border-level: -6 !default; // Buttons + Forms // // Shared variables that are reassigned to `$input-` and `$btn-` specific variables. $input-btn-padding-y: .375rem !default; $input-btn-padding-x: .75rem !default; $input-btn-font-family: null !default; $input-btn-font-size: $font-size-base !default; $input-btn-line-height: $line-height-base !default; $input-btn-focus-width: .2rem !default; $input-btn-focus-color: rgba($component-active-bg, .25) !default; $input-btn-focus-box-shadow: 0 0 0 $input-btn-focus-width $input-btn-focus-color !default; $input-btn-padding-y-sm: .25rem !default; $input-btn-padding-x-sm: .5rem !default; $input-btn-font-size-sm: $font-size-sm !default; $input-btn-line-height-sm: $line-height-sm !default; $input-btn-padding-y-lg: .5rem !default; $input-btn-padding-x-lg: 1rem !default; $input-btn-font-size-lg: $font-size-lg !default; $input-btn-line-height-lg: $line-height-lg !default; $input-btn-border-width: $border-width !default; // Buttons // // For each of Bootstrap's buttons, define text, background, and border color. $btn-padding-y: $input-btn-padding-y !default; $btn-padding-x: $input-btn-padding-x !default; $btn-font-family: $input-btn-font-family !default; $btn-font-size: $input-btn-font-size !default; $btn-line-height: $input-btn-line-height !default; $btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping $btn-padding-y-sm: $input-btn-padding-y-sm !default; $btn-padding-x-sm: $input-btn-padding-x-sm !default; $btn-font-size-sm: $input-btn-font-size-sm !default; $btn-line-height-sm: $input-btn-line-height-sm !default; $btn-padding-y-lg: $input-btn-padding-y-lg !default; $btn-padding-x-lg: $input-btn-padding-x-lg !default; $btn-font-size-lg: $input-btn-font-size-lg !default; $btn-line-height-lg: $input-btn-line-height-lg !default; $btn-border-width: $input-btn-border-width !default; $btn-font-weight: $font-weight-normal !default; $btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default; $btn-focus-width: $input-btn-focus-width !default; $btn-focus-box-shadow: $input-btn-focus-box-shadow !default; $btn-disabled-opacity: .65 !default; $btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default; $btn-link-disabled-color: $gray-600 !default; $btn-block-spacing-y: .5rem !default; // Allows for customizing button radius independently from global border radius $btn-border-radius: $border-radius !default; $btn-border-radius-lg: $border-radius-lg !default; $btn-border-radius-sm: $border-radius-sm !default; $btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; // Forms $label-margin-bottom: .5rem !default; $input-padding-y: $input-btn-padding-y !default; $input-padding-x: $input-btn-padding-x !default; $input-font-family: $input-btn-font-family !default; $input-font-size: $input-btn-font-size !default; $input-font-weight: $font-weight-base !default; $input-line-height: $input-btn-line-height !default; $input-padding-y-sm: $input-btn-padding-y-sm !default; $input-padding-x-sm: $input-btn-padding-x-sm !default; $input-font-size-sm: $input-btn-font-size-sm !default; $input-line-height-sm: $input-btn-line-height-sm !default; $input-padding-y-lg: $input-btn-padding-y-lg !default; $input-padding-x-lg: $input-btn-padding-x-lg !default; $input-font-size-lg: $input-btn-font-size-lg !default; $input-line-height-lg: $input-btn-line-height-lg !default; $input-bg: $white !default; $input-disabled-bg: $gray-200 !default; $input-color: $gray-700 !default; $input-border-color: $gray-400 !default; $input-border-width: $input-btn-border-width !default; $input-box-shadow: inset 0 1px 1px rgba($black, .075) !default; $input-border-radius: $border-radius !default; $input-border-radius-lg: $border-radius-lg !default; $input-border-radius-sm: $border-radius-sm !default; $input-focus-bg: $input-bg !default; $input-focus-border-color: lighten($component-active-bg, 25%) !default; $input-focus-color: $input-color !default; $input-focus-width: $input-btn-focus-width !default; $input-focus-box-shadow: $input-btn-focus-box-shadow !default; $input-placeholder-color: $gray-600 !default; $input-plaintext-color: $body-color !default; $input-height-border: $input-border-width * 2 !default; $input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default; $input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default; $input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y * .5) !default; $input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default; $input-height-sm: add($input-line-height-sm * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default; $input-height-lg: add($input-line-height-lg * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default; $input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; $form-text-margin-top: .25rem !default; $form-check-input-gutter: 1.25rem !default; $form-check-input-margin-y: .3rem !default; $form-check-input-margin-x: .25rem !default; $form-check-inline-margin-x: .75rem !default; $form-check-inline-input-margin-x: .3125rem !default; $form-grid-gutter-width: 10px !default; $form-group-margin-bottom: 1rem !default; $input-group-addon-color: $input-color !default; $input-group-addon-bg: $gray-200 !default; $input-group-addon-border-color: $input-border-color !default; $custom-forms-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; $custom-control-gutter: .5rem !default; $custom-control-spacer-x: 1rem !default; $custom-control-cursor: null !default; $custom-control-indicator-size: 1rem !default; $custom-control-indicator-bg: $input-bg !default; $custom-control-indicator-bg-size: 50% 50% !default; $custom-control-indicator-box-shadow: $input-box-shadow !default; $custom-control-indicator-border-color: $gray-500 !default; $custom-control-indicator-border-width: $input-border-width !default; $custom-control-label-color: null !default; $custom-control-indicator-disabled-bg: $input-disabled-bg !default; $custom-control-label-disabled-color: $gray-600 !default; $custom-control-indicator-checked-color: $component-active-color !default; $custom-control-indicator-checked-bg: $component-active-bg !default; $custom-control-indicator-checked-disabled-bg: rgba(theme-color("primary"), .5) !default; $custom-control-indicator-checked-box-shadow: null !default; $custom-control-indicator-checked-border-color: $custom-control-indicator-checked-bg !default; $custom-control-indicator-focus-box-shadow: $input-focus-box-shadow !default; $custom-control-indicator-focus-border-color: $input-focus-border-color !default; $custom-control-indicator-active-color: $component-active-color !default; $custom-control-indicator-active-bg: lighten($component-active-bg, 35%) !default; $custom-control-indicator-active-box-shadow: null !default; $custom-control-indicator-active-border-color: $custom-control-indicator-active-bg !default; $custom-checkbox-indicator-border-radius: $border-radius !default; $custom-checkbox-indicator-icon-checked: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$custom-control-indicator-checked-color}' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/></svg>") !default; $custom-checkbox-indicator-indeterminate-bg: $component-active-bg !default; $custom-checkbox-indicator-indeterminate-color: $custom-control-indicator-checked-color !default; $custom-checkbox-indicator-icon-indeterminate: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'><path stroke='#{$custom-checkbox-indicator-indeterminate-color}' d='M0 2h4'/></svg>") !default; $custom-checkbox-indicator-indeterminate-box-shadow: null !default; $custom-checkbox-indicator-indeterminate-border-color: $custom-checkbox-indicator-indeterminate-bg !default; $custom-radio-indicator-border-radius: 50% !default; $custom-radio-indicator-icon-checked: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'><circle r='3' fill='#{$custom-control-indicator-checked-color}'/></svg>") !default; $custom-switch-width: $custom-control-indicator-size * 1.75 !default; $custom-switch-indicator-border-radius: $custom-control-indicator-size * .5 !default; $custom-switch-indicator-size: subtract($custom-control-indicator-size, $custom-control-indicator-border-width * 4) !default; $custom-select-padding-y: $input-padding-y !default; $custom-select-padding-x: $input-padding-x !default; $custom-select-font-family: $input-font-family !default; $custom-select-font-size: $input-font-size !default; $custom-select-height: $input-height !default; $custom-select-indicator-padding: 1rem !default; // Extra padding to account for the presence of the background-image based indicator $custom-select-font-weight: $input-font-weight !default; $custom-select-line-height: $input-line-height !default; $custom-select-color: $input-color !default; $custom-select-disabled-color: $gray-600 !default; $custom-select-bg: $input-bg !default; $custom-select-disabled-bg: $gray-200 !default; $custom-select-bg-size: 8px 10px !default; // In pixels because image dimensions $custom-select-indicator-color: $gray-800 !default; $custom-select-indicator: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'><path fill='#{$custom-select-indicator-color}' d='M2 0L0 2h4zm0 5L0 3h4z'/></svg>") !default; $custom-select-background: escape-svg($custom-select-indicator) right $custom-select-padding-x center / $custom-select-bg-size no-repeat !default; // Used so we can have multiple background elements (e.g., arrow and feedback icon) $custom-select-feedback-icon-padding-right: add(1em * .75, (2 * $custom-select-padding-y * .75) + $custom-select-padding-x + $custom-select-indicator-padding) !default; $custom-select-feedback-icon-position: center right ($custom-select-padding-x + $custom-select-indicator-padding) !default; $custom-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default; $custom-select-border-width: $input-border-width !default; $custom-select-border-color: $input-border-color !default; $custom-select-border-radius: $border-radius !default; $custom-select-box-shadow: inset 0 1px 2px rgba($black, .075) !default; $custom-select-focus-border-color: $input-focus-border-color !default; $custom-select-focus-width: $input-focus-width !default; $custom-select-focus-box-shadow: 0 0 0 $custom-select-focus-width $input-btn-focus-color !default; $custom-select-padding-y-sm: $input-padding-y-sm !default; $custom-select-padding-x-sm: $input-padding-x-sm !default; $custom-select-font-size-sm: $input-font-size-sm !default; $custom-select-height-sm: $input-height-sm !default; $custom-select-padding-y-lg: $input-padding-y-lg !default; $custom-select-padding-x-lg: $input-padding-x-lg !default; $custom-select-font-size-lg: $input-font-size-lg !default; $custom-select-height-lg: $input-height-lg !default; $custom-range-track-width: 100% !default; $custom-range-track-height: .5rem !default; $custom-range-track-cursor: pointer !default; $custom-range-track-bg: $gray-300 !default; $custom-range-track-border-radius: 1rem !default; $custom-range-track-box-shadow: inset 0 .25rem .25rem rgba($black, .1) !default; $custom-range-thumb-width: 1rem !default; $custom-range-thumb-height: $custom-range-thumb-width !default; $custom-range-thumb-bg: $component-active-bg !default; $custom-range-thumb-border: 0 !default; $custom-range-thumb-border-radius: 1rem !default; $custom-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default; $custom-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default; $custom-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in IE/Edge $custom-range-thumb-active-bg: lighten($component-active-bg, 35%) !default; $custom-range-thumb-disabled-bg: $gray-500 !default; $custom-file-height: $input-height !default; $custom-file-height-inner: $input-height-inner !default; $custom-file-focus-border-color: $input-focus-border-color !default; $custom-file-focus-box-shadow: $input-focus-box-shadow !default; $custom-file-disabled-bg: $input-disabled-bg !default; $custom-file-padding-y: $input-padding-y !default; $custom-file-padding-x: $input-padding-x !default; $custom-file-line-height: $input-line-height !default; $custom-file-font-family: $input-font-family !default; $custom-file-font-weight: $input-font-weight !default; $custom-file-color: $input-color !default; $custom-file-bg: $input-bg !default; $custom-file-border-width: $input-border-width !default; $custom-file-border-color: $input-border-color !default; $custom-file-border-radius: $input-border-radius !default; $custom-file-box-shadow: $input-box-shadow !default; $custom-file-button-color: $custom-file-color !default; $custom-file-button-bg: $input-group-addon-bg !default; $custom-file-text: ( en: "Browse" ) !default; // Form validation $form-feedback-margin-top: $form-text-margin-top !default; $form-feedback-font-size: $small-font-size !default; $form-feedback-valid-color: theme-color("success") !default; $form-feedback-invalid-color: theme-color("danger") !default; $form-feedback-icon-valid-color: $form-feedback-valid-color !default; $form-feedback-icon-valid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'><path fill='#{$form-feedback-icon-valid-color}' 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'/></svg>") !default; $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default; $form-feedback-icon-invalid: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='#{$form-feedback-icon-invalid-color}' viewBox='0 0 12 12'><circle cx='6' cy='6' r='4.5'/><path stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/><circle cx='6' cy='8.2' r='.6' fill='#{$form-feedback-icon-invalid-color}' stroke='none'/></svg>") !default; $form-validation-states: () !default; $form-validation-states: map-merge( ( "valid": ( "color": $form-feedback-valid-color, "icon": $form-feedback-icon-valid ), "invalid": ( "color": $form-feedback-invalid-color, "icon": $form-feedback-icon-invalid ), ), $form-validation-states ); // Z-index master list // // Warning: Avoid customizing these values. They're used for a bird's eye view // of components dependent on the z-axis and are designed to all work together. $zindex-dropdown: 1000 !default; $zindex-sticky: 1020 !default; $zindex-fixed: 1030 !default; $zindex-modal-backdrop: 1040 !default; $zindex-modal: 1050 !default; $zindex-popover: 1060 !default; $zindex-tooltip: 1070 !default; // Navs $nav-link-padding-y: .5rem !default; $nav-link-padding-x: 1rem !default; $nav-link-disabled-color: $gray-600 !default; $nav-tabs-border-color: $gray-300 !default; $nav-tabs-border-width: $border-width !default; $nav-tabs-border-radius: $border-radius !default; $nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default; $nav-tabs-link-active-color: $gray-700 !default; $nav-tabs-link-active-bg: $body-bg !default; $nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default; $nav-pills-border-radius: $border-radius !default; $nav-pills-link-active-color: $component-active-color !default; $nav-pills-link-active-bg: $component-active-bg !default; $nav-divider-color: $gray-200 !default; $nav-divider-margin-y: $spacer * .5 !default; // Navbar $navbar-padding-y: $spacer * .5 !default; $navbar-padding-x: $spacer !default; $navbar-nav-link-padding-x: .5rem !default; $navbar-brand-font-size: $font-size-lg !default; // Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link $nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default; $navbar-brand-height: $navbar-brand-font-size * $line-height-base !default; $navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) * .5 !default; $navbar-toggler-padding-y: .25rem !default; $navbar-toggler-padding-x: .75rem !default; $navbar-toggler-font-size: $font-size-lg !default; $navbar-toggler-border-radius: $btn-border-radius !default; $navbar-nav-scroll-max-height: 75vh !default; $navbar-dark-color: rgba($white, .5) !default; $navbar-dark-hover-color: rgba($white, .75) !default; $navbar-dark-active-color: $white !default; $navbar-dark-disabled-color: rgba($white, .25) !default; $navbar-dark-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-dark-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default; $navbar-dark-toggler-border-color: rgba($white, .1) !default; $navbar-light-color: rgba($black, .5) !default; $navbar-light-hover-color: rgba($black, .7) !default; $navbar-light-active-color: rgba($black, .9) !default; $navbar-light-disabled-color: rgba($black, .3) !default; $navbar-light-toggler-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'><path stroke='#{$navbar-light-color}' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/></svg>") !default; $navbar-light-toggler-border-color: rgba($black, .1) !default; $navbar-light-brand-color: $navbar-light-active-color !default; $navbar-light-brand-hover-color: $navbar-light-active-color !default; $navbar-dark-brand-color: $navbar-dark-active-color !default; $navbar-dark-brand-hover-color: $navbar-dark-active-color !default; // Dropdowns // // Dropdown menu container and contents. $dropdown-min-width: 10rem !default; $dropdown-padding-x: 0 !default; $dropdown-padding-y: .5rem !default; $dropdown-spacer: .125rem !default; $dropdown-font-size: $font-size-base !default; $dropdown-color: $body-color !default; $dropdown-bg: $white !default; $dropdown-border-color: rgba($black, .15) !default; $dropdown-border-radius: $border-radius !default; $dropdown-border-width: $border-width !default; $dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default; $dropdown-divider-bg: $gray-200 !default; $dropdown-divider-margin-y: $nav-divider-margin-y !default; $dropdown-box-shadow: 0 .5rem 1rem rgba($black, .175) !default; $dropdown-link-color: $gray-900 !default; $dropdown-link-hover-color: darken($gray-900, 5%) !default; $dropdown-link-hover-bg: $gray-200 !default; $dropdown-link-active-color: $component-active-color !default; $dropdown-link-active-bg: $component-active-bg !default; $dropdown-link-disabled-color: $gray-500 !default; $dropdown-item-padding-y: .25rem !default; $dropdown-item-padding-x: 1.5rem !default; $dropdown-header-color: $gray-600 !default; $dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default; // Pagination $pagination-padding-y: .5rem !default; $pagination-padding-x: .75rem !default; $pagination-padding-y-sm: .25rem !default; $pagination-padding-x-sm: .5rem !default; $pagination-padding-y-lg: .75rem !default; $pagination-padding-x-lg: 1.5rem !default; $pagination-line-height: 1.25 !default; $pagination-color: $link-color !default; $pagination-bg: $white !default; $pagination-border-width: $border-width !default; $pagination-border-color: $gray-300 !default; $pagination-focus-box-shadow: $input-btn-focus-box-shadow !default; $pagination-focus-outline: 0 !default; $pagination-hover-color: $link-hover-color !default; $pagination-hover-bg: $gray-200 !default; $pagination-hover-border-color: $gray-300 !default; $pagination-active-color: $component-active-color !default; $pagination-active-bg: $component-active-bg !default; $pagination-active-border-color: $pagination-active-bg !default; $pagination-disabled-color: $gray-600 !default; $pagination-disabled-bg: $white !default; $pagination-disabled-border-color: $gray-300 !default; $pagination-border-radius-sm: $border-radius-sm !default; $pagination-border-radius-lg: $border-radius-lg !default; // Jumbotron $jumbotron-padding: 2rem !default; $jumbotron-color: null !default; $jumbotron-bg: $gray-200 !default; // Cards $card-spacer-y: .75rem !default; $card-spacer-x: 1.25rem !default; $card-border-width: $border-width !default; $card-border-radius: $border-radius !default; $card-border-color: rgba($black, .125) !default; $card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default; $card-cap-bg: rgba($black, .03) !default; $card-cap-color: null !default; $card-height: null !default; $card-color: null !default; $card-bg: $white !default; $card-img-overlay-padding: 1.25rem !default; $card-group-margin: $grid-gutter-width * .5 !default; $card-deck-margin: $card-group-margin !default; $card-columns-count: 3 !default; $card-columns-gap: 1.25rem !default; $card-columns-margin: $card-spacer-y !default; // Tooltips $tooltip-font-size: $font-size-sm !default; $tooltip-max-width: 200px !default; $tooltip-color: $white !default; $tooltip-bg: $black !default; $tooltip-border-radius: $border-radius !default; $tooltip-opacity: .9 !default; $tooltip-padding-y: .25rem !default; $tooltip-padding-x: .5rem !default; $tooltip-margin: 0 !default; $tooltip-arrow-width: .8rem !default; $tooltip-arrow-height: .4rem !default; $tooltip-arrow-color: $tooltip-bg !default; // Form tooltips must come after regular tooltips $form-feedback-tooltip-padding-y: $tooltip-padding-y !default; $form-feedback-tooltip-padding-x: $tooltip-padding-x !default; $form-feedback-tooltip-font-size: $tooltip-font-size !default; $form-feedback-tooltip-line-height: $line-height-base !default; $form-feedback-tooltip-opacity: $tooltip-opacity !default; $form-feedback-tooltip-border-radius: $tooltip-border-radius !default; // Popovers $popover-font-size: $font-size-sm !default; $popover-bg: $white !default; $popover-max-width: 276px !default; $popover-border-width: $border-width !default; $popover-border-color: rgba($black, .2) !default; $popover-border-radius: $border-radius-lg !default; $popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default; $popover-box-shadow: 0 .25rem .5rem rgba($black, .2) !default; $popover-header-bg: darken($popover-bg, 3%) !default; $popover-header-color: $headings-color !default; $popover-header-padding-y: .5rem !default; $popover-header-padding-x: .75rem !default; $popover-body-color: $body-color !default; $popover-body-padding-y: $popover-header-padding-y !default; $popover-body-padding-x: $popover-header-padding-x !default; $popover-arrow-width: 1rem !default; $popover-arrow-height: .5rem !default; $popover-arrow-color: $popover-bg !default; $popover-arrow-outer-color: fade-in($popover-border-color, .05) !default; // Toasts $toast-max-width: 350px !default; $toast-padding-x: .75rem !default; $toast-padding-y: .25rem !default; $toast-font-size: .875rem !default; $toast-color: null !default; $toast-background-color: rgba($white, .85) !default; $toast-border-width: 1px !default; $toast-border-color: rgba(0, 0, 0, .1) !default; $toast-border-radius: .25rem !default; $toast-box-shadow: 0 .25rem .75rem rgba($black, .1) !default; $toast-header-color: $gray-600 !default; $toast-header-background-color: rgba($white, .85) !default; $toast-header-border-color: rgba(0, 0, 0, .05) !default; // Badges $badge-font-size: 75% !default; $badge-font-weight: $font-weight-bold !default; $badge-padding-y: .25em !default; $badge-padding-x: .4em !default; $badge-border-radius: $border-radius !default; $badge-transition: $btn-transition !default; $badge-focus-width: $input-btn-focus-width !default; $badge-pill-padding-x: .6em !default; // Use a higher than normal value to ensure completely rounded edges when // customizing padding or font-size on labels. $badge-pill-border-radius: 10rem !default; // Modals // Padding applied to the modal body $modal-inner-padding: 1rem !default; // Margin between elements in footer, must be lower than or equal to 2 * $modal-inner-padding $modal-footer-margin-between: .5rem !default; $modal-dialog-margin: .5rem !default; $modal-dialog-margin-y-sm-up: 1.75rem !default; $modal-title-line-height: $line-height-base !default; $modal-content-color: null !default; $modal-content-bg: $white !default; $modal-content-border-color: rgba($black, .2) !default; $modal-content-border-width: $border-width !default; $modal-content-border-radius: $border-radius-lg !default; $modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default; $modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default; $modal-content-box-shadow-sm-up: 0 .5rem 1rem rgba($black, .5) !default; $modal-backdrop-bg: $black !default; $modal-backdrop-opacity: .5 !default; $modal-header-border-color: $border-color !default; $modal-footer-border-color: $modal-header-border-color !default; $modal-header-border-width: $modal-content-border-width !default; $modal-footer-border-width: $modal-header-border-width !default; $modal-header-padding-y: 1rem !default; $modal-header-padding-x: 1rem !default; $modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility $modal-xl: 1140px !default; $modal-lg: 800px !default; $modal-md: 500px !default; $modal-sm: 300px !default; $modal-fade-transform: translate(0, -50px) !default; $modal-show-transform: none !default; $modal-transition: transform .3s ease-out !default; $modal-scale-transform: scale(1.02) !default; // Alerts // // Define alert colors, border radius, and padding. $alert-padding-y: .75rem !default; $alert-padding-x: 1.25rem !default; $alert-margin-bottom: 1rem !default; $alert-border-radius: $border-radius !default; $alert-link-font-weight: $font-weight-bold !default; $alert-border-width: $border-width !default; $alert-bg-level: -10 !default; $alert-border-level: -9 !default; $alert-color-level: 6 !default; // Progress bars $progress-height: 1rem !default; $progress-font-size: $font-size-base * .75 !default; $progress-bg: $gray-200 !default; $progress-border-radius: $border-radius !default; $progress-box-shadow: inset 0 .1rem .1rem rgba($black, .1) !default; $progress-bar-color: $white !default; $progress-bar-bg: theme-color("primary") !default; $progress-bar-animation-timing: 1s linear infinite !default; $progress-bar-transition: width .6s ease !default; // List group $list-group-color: null !default; $list-group-bg: $white !default; $list-group-border-color: rgba($black, .125) !default; $list-group-border-width: $border-width !default; $list-group-border-radius: $border-radius !default; $list-group-item-padding-y: .75rem !default; $list-group-item-padding-x: 1.25rem !default; $list-group-hover-bg: $gray-100 !default; $list-group-active-color: $component-active-color !default; $list-group-active-bg: $component-active-bg !default; $list-group-active-border-color: $list-group-active-bg !default; $list-group-disabled-color: $gray-600 !default; $list-group-disabled-bg: $list-group-bg !default; $list-group-action-color: $gray-700 !default; $list-group-action-hover-color: $list-group-action-color !default; $list-group-action-active-color: $body-color !default; $list-group-action-active-bg: $gray-200 !default; // Image thumbnails $thumbnail-padding: .25rem !default; $thumbnail-bg: $body-bg !default; $thumbnail-border-width: $border-width !default; $thumbnail-border-color: $gray-300 !default; $thumbnail-border-radius: $border-radius !default; $thumbnail-box-shadow: 0 1px 2px rgba($black, .075) !default; // Figures $figure-caption-font-size: 90% !default; $figure-caption-color: $gray-600 !default; // Breadcrumbs $breadcrumb-font-size: null !default; $breadcrumb-padding-y: .75rem !default; $breadcrumb-padding-x: 1rem !default; $breadcrumb-item-padding: .5rem !default; $breadcrumb-margin-bottom: 1rem !default; $breadcrumb-bg: $gray-200 !default; $breadcrumb-divider-color: $gray-600 !default; $breadcrumb-active-color: $gray-600 !default; $breadcrumb-divider: quote("/") !default; $breadcrumb-border-radius: $border-radius !default; // Carousel $carousel-control-color: $white !default; $carousel-control-width: 15% !default; $carousel-control-opacity: .5 !default; $carousel-control-hover-opacity: .9 !default; $carousel-control-transition: opacity .15s ease !default; $carousel-indicator-width: 30px !default; $carousel-indicator-height: 3px !default; $carousel-indicator-hit-area-height: 10px !default; $carousel-indicator-spacer: 3px !default; $carousel-indicator-active-bg: $white !default; $carousel-indicator-transition: opacity .6s ease !default; $carousel-caption-width: 70% !default; $carousel-caption-color: $white !default; $carousel-control-icon-width: 20px !default; $carousel-control-prev-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/></svg>") !default; $carousel-control-next-icon-bg: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' fill='#{$carousel-control-color}' width='8' height='8' viewBox='0 0 8 8'><path d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/></svg>") !default; $carousel-transition-duration: .6s !default; $carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) // Spinners $spinner-width: 2rem !default; $spinner-height: $spinner-width !default; $spinner-vertical-align: -.125em !default; $spinner-border-width: .25em !default; $spinner-width-sm: 1rem !default; $spinner-height-sm: $spinner-width-sm !default; $spinner-border-width-sm: .2em !default; // Close $close-font-size: $font-size-base * 1.5 !default; $close-font-weight: $font-weight-bold !default; $close-color: $black !default; $close-text-shadow: 0 1px 0 $white !default; // Code $code-font-size: 87.5% !default; $code-color: $pink !default; $kbd-padding-y: .2rem !default; $kbd-padding-x: .4rem !default; $kbd-font-size: $code-font-size !default; $kbd-color: $white !default; $kbd-bg: $gray-900 !default; $pre-color: $gray-900 !default; $pre-scrollable-max-height: 340px !default; // Utilities $displays: none, inline, inline-block, block, table, table-row, table-cell, flex, inline-flex !default; $overflows: auto, hidden !default; $positions: static, relative, absolute, fixed, sticky !default; $user-selects: all, auto, none !default; // Printing $print-page-size: a3 !default; $print-body-min-width: map-get($grid-breakpoints, "lg") !default; boost/scss/bootstrap/vendor/_rfs.scss 0000604 00000015633 15062070724 0014014 0 ustar 00 // stylelint-disable property-blacklist, scss/dollar-variable-default // SCSS RFS mixin // // Automated responsive font sizes // // Licensed under MIT (https://github.com/twbs/rfs/blob/v8.x/LICENSE) // Configuration // Base font size $rfs-base-font-size: 1.25rem !default; $rfs-font-size-unit: rem !default; @if $rfs-font-size-unit != rem and $rfs-font-size-unit != px { @error "`#{$rfs-font-size-unit}` is not a valid unit for $rfs-font-size-unit. Use `px` or `rem`."; } // Breakpoint at where font-size starts decreasing if screen width is smaller $rfs-breakpoint: 1200px !default; $rfs-breakpoint-unit: px !default; @if $rfs-breakpoint-unit != px and $rfs-breakpoint-unit != em and $rfs-breakpoint-unit != rem { @error "`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`."; } // Resize font size based on screen height and width $rfs-two-dimensional: false !default; // Factor of decrease $rfs-factor: 10 !default; @if type-of($rfs-factor) != "number" or $rfs-factor <= 1 { @error "`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1."; } // Generate enable or disable classes. Possibilities: false, "enable" or "disable" $rfs-class: false !default; // 1 rem = $rfs-rem-value px $rfs-rem-value: 16 !default; // Safari iframe resize bug: https://github.com/twbs/rfs/issues/14 $rfs-safari-iframe-resize-bug-fix: false !default; // Disable RFS by setting $enable-responsive-font-sizes to false $enable-responsive-font-sizes: true !default; // Cache $rfs-base-font-size unit $rfs-base-font-size-unit: unit($rfs-base-font-size); @function divide($dividend, $divisor, $precision: 10) { $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1); $dividend: abs($dividend); $divisor: abs($divisor); @if $dividend == 0 { @return 0; } @if $divisor == 0 { @error "Cannot divide by 0"; } $remainder: $dividend; $result: 0; $factor: 10; @while ($remainder > 0 and $precision >= 0) { $quotient: 0; @while ($remainder >= $divisor) { $remainder: $remainder - $divisor; $quotient: $quotient + 1; } $result: $result * 10 + $quotient; $factor: $factor * .1; $remainder: $remainder * 10; $precision: $precision - 1; @if ($precision < 0 and $remainder >= $divisor * 5) { $result: $result + 1; } } $result: $result * $factor * $sign; $dividend-unit: unit($dividend); $divisor-unit: unit($divisor); $unit-map: ( "px": 1px, "rem": 1rem, "em": 1em, "%": 1% ); @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) { $result: $result * map-get($unit-map, $dividend-unit); } @return $result; } // Remove px-unit from $rfs-base-font-size for calculations @if $rfs-base-font-size-unit == "px" { $rfs-base-font-size: divide($rfs-base-font-size, $rfs-base-font-size * 0 + 1); } @else if $rfs-base-font-size-unit == "rem" { $rfs-base-font-size: divide($rfs-base-font-size, divide($rfs-base-font-size * 0 + 1, $rfs-rem-value)); } // Cache $rfs-breakpoint unit to prevent multiple calls $rfs-breakpoint-unit-cache: unit($rfs-breakpoint); // Remove unit from $rfs-breakpoint for calculations @if $rfs-breakpoint-unit-cache == "px" { $rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1); } @else if $rfs-breakpoint-unit-cache == "rem" or $rfs-breakpoint-unit-cache == "em" { $rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value)); } // Internal mixin that adds disable classes to the selector if needed. @mixin _rfs-disable-class { @if $rfs-class == "disable" { // Adding an extra class increases specificity, which prevents the media query to override the font size &, .disable-responsive-font-size &, &.disable-responsive-font-size { @content; } } @else { @content; } } // Internal mixin that adds enable classes to the selector if needed. @mixin _rfs-enable-class { @if $rfs-class == "enable" { .enable-responsive-font-size &, &.enable-responsive-font-size { @content; } } @else { @content; } } // Internal mixin used to determine which media query needs to be used @mixin _rfs-media-query($mq-value) { @if $rfs-two-dimensional { @media (max-width: #{$mq-value}), (max-height: #{$mq-value}) { @content; } } @else { @media (max-width: #{$mq-value}) { @content; } } } // Responsive font size mixin @mixin rfs($fs, $important: false) { // Cache $fs unit $fs-unit: if(type-of($fs) == "number", unit($fs), false); // Add !important suffix if needed $rfs-suffix: if($important, " !important", ""); // If $fs isn't a number (like inherit) or $fs has a unit (not px or rem, like 1.5em) or $ is 0, just print the value @if not $fs-unit or $fs-unit != "" and $fs-unit != "px" and $fs-unit != "rem" or $fs == 0 { font-size: #{$fs}#{$rfs-suffix}; } @else { // Remove unit from $fs for calculations @if $fs-unit == "px" { $fs: divide($fs, $fs * 0 + 1); } @else if $fs-unit == "rem" { $fs: divide($fs, divide($fs * 0 + 1, $rfs-rem-value)); } // Set default font size $rfs-static: if($rfs-font-size-unit == rem, #{divide($fs, $rfs-rem-value)}rem, #{$fs}px); // Only add the media query if the font size is bigger than the minimum font size @if $fs <= $rfs-base-font-size or not $enable-responsive-font-sizes { font-size: #{$rfs-static}#{$rfs-suffix}; } @else { // Calculate the minimum font size for $fs $fs-min: $rfs-base-font-size + divide($fs - $rfs-base-font-size, $rfs-factor); // Calculate difference between $fs and the minimum font size $fs-diff: $fs - $fs-min; // Base font-size formatting $min-width: if($rfs-font-size-unit == rem, #{divide($fs-min, $rfs-rem-value)}rem, #{$fs-min}px); // Use `vmin` if two-dimensional is enabled $variable-unit: if($rfs-two-dimensional, vmin, vw); // Calculate the variable width between 0 and $rfs-breakpoint $variable-width: #{divide($fs-diff * 100, $rfs-breakpoint)}#{$variable-unit}; // Set the calculated font-size $rfs-fluid: calc(#{$min-width} + #{$variable-width}) #{$rfs-suffix}; // Breakpoint formatting $mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit}); @include _rfs-disable-class { font-size: #{$rfs-static}#{$rfs-suffix}; } @include _rfs-media-query($mq-value) { @include _rfs-enable-class { font-size: $rfs-fluid; } // Include safari iframe resize fix if needed min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null); } } } } // The font-size & responsive-font-size mixins use RFS to rescale the font size @mixin font-size($fs, $important: false) { @include rfs($fs, $important); } @mixin responsive-font-size($fs, $important: false) { @include rfs($fs, $important); } boost/scss/bootstrap/_input-group.scss 0000604 00000014571 15062070724 0014216 0 ustar 00 // stylelint-disable selector-no-qualifying-type // // Base styles // .input-group { position: relative; display: flex; flex-wrap: wrap; // For form validation feedback align-items: stretch; width: 100%; > .form-control, > .form-control-plaintext, > .custom-select, > .custom-file { position: relative; // For focus state's z-index flex: 1 1 auto; width: 1%; min-width: 0; // https://stackoverflow.com/questions/36247140/why-dont-flex-items-shrink-past-content-size margin-bottom: 0; + .form-control, + .custom-select, + .custom-file { margin-left: -$input-border-width; } } // Bring the "active" form control to the top of surrounding elements > .form-control:focus, > .custom-select:focus, > .custom-file .custom-file-input:focus ~ .custom-file-label { z-index: 3; } // Bring the custom file input above the label > .custom-file .custom-file-input:focus { z-index: 4; } > .form-control, > .custom-select { &:not(:first-child) { @include border-left-radius(0); } } // Custom file inputs have more complex markup, thus requiring different // border-radius overrides. > .custom-file { display: flex; align-items: center; &:not(:last-child) .custom-file-label, &:not(:last-child) .custom-file-label::after { @include border-right-radius(0); } &:not(:first-child) .custom-file-label { @include border-left-radius(0); } } &:not(.has-validation) { > .form-control:not(:last-child), > .custom-select:not(:last-child), > .custom-file:not(:last-child) .custom-file-label, > .custom-file:not(:last-child) .custom-file-label::after { @include border-right-radius(0); } } &.has-validation { > .form-control:nth-last-child(n + 3), > .custom-select:nth-last-child(n + 3), > .custom-file:nth-last-child(n + 3) .custom-file-label, > .custom-file:nth-last-child(n + 3) .custom-file-label::after { @include border-right-radius(0); } } } // Prepend and append // // While it requires one extra layer of HTML for each, dedicated prepend and // append elements allow us to 1) be less clever, 2) simplify our selectors, and // 3) support HTML5 form validation. .input-group-prepend, .input-group-append { display: flex; // Ensure buttons are always above inputs for more visually pleasing borders. // This isn't needed for `.input-group-text` since it shares the same border-color // as our inputs. .btn { position: relative; z-index: 2; &:focus { z-index: 3; } } .btn + .btn, .btn + .input-group-text, .input-group-text + .input-group-text, .input-group-text + .btn { margin-left: -$input-border-width; } } .input-group-prepend { margin-right: -$input-border-width; } .input-group-append { margin-left: -$input-border-width; } // Textual addons // // Serves as a catch-all element for any text or radio/checkbox input you wish // to prepend or append to an input. .input-group-text { display: flex; align-items: center; padding: $input-padding-y $input-padding-x; margin-bottom: 0; // Allow use of <label> elements by overriding our default margin-bottom @include font-size($input-font-size); // Match inputs font-weight: $font-weight-normal; line-height: $input-line-height; color: $input-group-addon-color; text-align: center; white-space: nowrap; background-color: $input-group-addon-bg; border: $input-border-width solid $input-group-addon-border-color; @include border-radius($input-border-radius); // Nuke default margins from checkboxes and radios to vertically center within. input[type="radio"], input[type="checkbox"] { margin-top: 0; } } // Sizing // // Remix the default form control sizing classes into new ones for easier // manipulation. .input-group-lg > .form-control:not(textarea), .input-group-lg > .custom-select { height: $input-height-lg; } .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: $input-padding-y-lg $input-padding-x-lg; @include font-size($input-font-size-lg); line-height: $input-line-height-lg; @include border-radius($input-border-radius-lg); } .input-group-sm > .form-control:not(textarea), .input-group-sm > .custom-select { height: $input-height-sm; } .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: $input-padding-y-sm $input-padding-x-sm; @include font-size($input-font-size-sm); line-height: $input-line-height-sm; @include border-radius($input-border-radius-sm); } .input-group-lg > .custom-select, .input-group-sm > .custom-select { padding-right: $custom-select-padding-x + $custom-select-indicator-padding; } // Prepend and append rounded corners // // These rulesets must come after the sizing ones to properly override sm and lg // border-radius values when extending. They're more specific than we'd like // with the `.input-group >` part, but without it, we cannot override the sizing. .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn, .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text, .input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .btn, .input-group.has-validation > .input-group-append:nth-last-child(n + 3) > .input-group-text, .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { @include border-right-radius(0); } .input-group > .input-group-append > .btn, .input-group > .input-group-append > .input-group-text, .input-group > .input-group-prepend:not(:first-child) > .btn, .input-group > .input-group-prepend:not(:first-child) > .input-group-text, .input-group > .input-group-prepend:first-child > .btn:not(:first-child), .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { @include border-left-radius(0); } boost/scss/bootstrap/_code.scss 0000604 00000001764 15062070724 0012637 0 ustar 00 // Inline code code { @include font-size($code-font-size); color: $code-color; word-wrap: break-word; // Streamline the style when inside anchors to avoid broken underline and more a > & { color: inherit; } } // User input typically entered via keyboard kbd { padding: $kbd-padding-y $kbd-padding-x; @include font-size($kbd-font-size); color: $kbd-color; background-color: $kbd-bg; @include border-radius($border-radius-sm); @include box-shadow($kbd-box-shadow); kbd { padding: 0; @include font-size(100%); font-weight: $nested-kbd-font-weight; @include box-shadow(none); } } // Blocks of code pre { display: block; @include font-size($code-font-size); color: $pre-color; // Account for some code outputs that place code tags in pre tags code { @include font-size(inherit); color: inherit; word-break: normal; } } // Enable scrollable blocks of code .pre-scrollable { max-height: $pre-scrollable-max-height; overflow-y: scroll; } boost/scss/bootstrap/_badge.scss 0000604 00000002141 15062070724 0012755 0 ustar 00 // Base class // // Requires one of the contextual, color modifier classes for `color` and // `background-color`. .badge { display: inline-block; padding: $badge-padding-y $badge-padding-x; @include font-size($badge-font-size); font-weight: $badge-font-weight; line-height: 1; text-align: center; white-space: nowrap; vertical-align: baseline; @include border-radius($badge-border-radius); @include transition($badge-transition); @at-root a#{&} { @include hover-focus() { text-decoration: none; } } // Empty badges collapse automatically &:empty { display: none; } } // Quick fix for badges in buttons .btn .badge { position: relative; top: -1px; } // Pill badges // // Make them extra rounded with a modifier to replace v3's badges. .badge-pill { padding-right: $badge-pill-padding-x; padding-left: $badge-pill-padding-x; @include border-radius($badge-pill-border-radius); } // Colors // // Contextual variations (linked badges get darker on :hover). @each $color, $value in $theme-colors { .badge-#{$color} { @include badge-variant($value); } } boost/scss/bootstrap/_tooltip.scss 0000604 00000004726 15062070724 0013420 0 ustar 00 // Base class .tooltip { position: absolute; z-index: $zindex-tooltip; display: block; margin: $tooltip-margin; // Our parent element can be arbitrary since tooltips are by default inserted as a sibling of their target element. // So reset our font and text properties to avoid inheriting weird values. @include reset-text(); @include font-size($tooltip-font-size); // Allow breaking very long words so they don't overflow the tooltip's bounds word-wrap: break-word; opacity: 0; &.show { opacity: $tooltip-opacity; } .arrow { position: absolute; display: block; width: $tooltip-arrow-width; height: $tooltip-arrow-height; &::before { position: absolute; content: ""; border-color: transparent; border-style: solid; } } } .bs-tooltip-top { padding: $tooltip-arrow-height 0; .arrow { bottom: 0; &::before { top: 0; border-width: $tooltip-arrow-height ($tooltip-arrow-width * .5) 0; border-top-color: $tooltip-arrow-color; } } } .bs-tooltip-right { padding: 0 $tooltip-arrow-height; .arrow { left: 0; width: $tooltip-arrow-height; height: $tooltip-arrow-width; &::before { right: 0; border-width: ($tooltip-arrow-width * .5) $tooltip-arrow-height ($tooltip-arrow-width * .5) 0; border-right-color: $tooltip-arrow-color; } } } .bs-tooltip-bottom { padding: $tooltip-arrow-height 0; .arrow { top: 0; &::before { bottom: 0; border-width: 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height; border-bottom-color: $tooltip-arrow-color; } } } .bs-tooltip-left { padding: 0 $tooltip-arrow-height; .arrow { right: 0; width: $tooltip-arrow-height; height: $tooltip-arrow-width; &::before { left: 0; border-width: ($tooltip-arrow-width * .5) 0 ($tooltip-arrow-width * .5) $tooltip-arrow-height; border-left-color: $tooltip-arrow-color; } } } .bs-tooltip-auto { &[x-placement^="top"] { @extend .bs-tooltip-top; } &[x-placement^="right"] { @extend .bs-tooltip-right; } &[x-placement^="bottom"] { @extend .bs-tooltip-bottom; } &[x-placement^="left"] { @extend .bs-tooltip-left; } } // Wrapper for the tooltip content .tooltip-inner { max-width: $tooltip-max-width; padding: $tooltip-padding-y $tooltip-padding-x; color: $tooltip-color; text-align: center; background-color: $tooltip-bg; @include border-radius($tooltip-border-radius); } boost/scss/bootstrap/_type.scss 0000604 00000004256 15062070724 0012705 0 ustar 00 // stylelint-disable selector-list-comma-newline-after // // Headings // h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { margin-bottom: $headings-margin-bottom; font-family: $headings-font-family; font-weight: $headings-font-weight; line-height: $headings-line-height; color: $headings-color; } h1, .h1 { @include font-size($h1-font-size); } h2, .h2 { @include font-size($h2-font-size); } h3, .h3 { @include font-size($h3-font-size); } h4, .h4 { @include font-size($h4-font-size); } h5, .h5 { @include font-size($h5-font-size); } h6, .h6 { @include font-size($h6-font-size); } .lead { @include font-size($lead-font-size); font-weight: $lead-font-weight; } // Type display classes .display-1 { @include font-size($display1-size); font-weight: $display1-weight; line-height: $display-line-height; } .display-2 { @include font-size($display2-size); font-weight: $display2-weight; line-height: $display-line-height; } .display-3 { @include font-size($display3-size); font-weight: $display3-weight; line-height: $display-line-height; } .display-4 { @include font-size($display4-size); font-weight: $display4-weight; line-height: $display-line-height; } // // Horizontal rules // hr { margin-top: $hr-margin-y; margin-bottom: $hr-margin-y; border: 0; border-top: $hr-border-width solid $hr-border-color; } // // Emphasis // small, .small { @include font-size($small-font-size); font-weight: $font-weight-normal; } mark, .mark { padding: $mark-padding; background-color: $mark-bg; } // // Lists // .list-unstyled { @include list-unstyled(); } // Inline turns list items into inline-block .list-inline { @include list-unstyled(); } .list-inline-item { display: inline-block; &:not(:last-child) { margin-right: $list-inline-padding; } } // // Misc // // Builds on `abbr` .initialism { @include font-size(90%); text-transform: uppercase; } // Blockquotes .blockquote { margin-bottom: $spacer; @include font-size($blockquote-font-size); } .blockquote-footer { display: block; @include font-size($blockquote-small-font-size); color: $blockquote-small-color; &::before { content: "\2014\00A0"; // em dash, nbsp } } boost/scss/bootstrap/_nav.scss 0000604 00000004450 15062070724 0012504 0 ustar 00 // Base class // // Kickstart any navigation component with a set of style resets. Works with // `<nav>`s, `<ul>`s or `<ol>`s. .nav { display: flex; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; list-style: none; } .nav-link { display: block; padding: $nav-link-padding-y $nav-link-padding-x; text-decoration: if($link-decoration == none, null, none); @include hover-focus() { text-decoration: none; } // Disabled state lightens text &.disabled { color: $nav-link-disabled-color; pointer-events: none; cursor: default; } } // // Tabs // .nav-tabs { border-bottom: $nav-tabs-border-width solid $nav-tabs-border-color; .nav-link { margin-bottom: -$nav-tabs-border-width; background-color: transparent; border: $nav-tabs-border-width solid transparent; @include border-top-radius($nav-tabs-border-radius); @include hover-focus() { // Prevents active .nav-link tab overlapping focus outline of previous/next .nav-link isolation: isolate; border-color: $nav-tabs-link-hover-border-color; } &.disabled { color: $nav-link-disabled-color; background-color: transparent; border-color: transparent; } } .nav-link.active, .nav-item.show .nav-link { color: $nav-tabs-link-active-color; background-color: $nav-tabs-link-active-bg; border-color: $nav-tabs-link-active-border-color; } .dropdown-menu { // Make dropdown border overlap tab border margin-top: -$nav-tabs-border-width; // Remove the top rounded corners here since there is a hard edge above the menu @include border-top-radius(0); } } // // Pills // .nav-pills { .nav-link { background: none; border: 0; @include border-radius($nav-pills-border-radius); } .nav-link.active, .show > .nav-link { color: $nav-pills-link-active-color; background-color: $nav-pills-link-active-bg; } } // // Justified variants // .nav-fill { > .nav-link, .nav-item { flex: 1 1 auto; text-align: center; } } .nav-justified { > .nav-link, .nav-item { flex-basis: 0; flex-grow: 1; text-align: center; } } // Tabbable tabs // // Hide tabbable panes to start, show them when `.active` .tab-content { > .tab-pane { display: none; } > .active { display: block; } } boost/scss/bootstrap/_toasts.scss 0000604 00000002154 15062070724 0013234 0 ustar 00 .toast { // Prevents from shrinking in IE11, when in a flex container // See https://github.com/twbs/bootstrap/issues/28341 flex-basis: $toast-max-width; max-width: $toast-max-width; @include font-size($toast-font-size); color: $toast-color; background-color: $toast-background-color; background-clip: padding-box; border: $toast-border-width solid $toast-border-color; box-shadow: $toast-box-shadow; opacity: 0; @include border-radius($toast-border-radius); &:not(:last-child) { margin-bottom: $toast-padding-x; } &.showing { opacity: 1; } &.show { display: block; opacity: 1; } &.hide { display: none; } } .toast-header { display: flex; align-items: center; padding: $toast-padding-y $toast-padding-x; color: $toast-header-color; background-color: $toast-header-background-color; background-clip: padding-box; border-bottom: $toast-border-width solid $toast-header-border-color; @include border-top-radius(subtract($toast-border-radius, $toast-border-width)); } .toast-body { padding: $toast-padding-x; // apply to both vertical and horizontal } boost/scss/bootstrap/_images.scss 0000604 00000002206 15062070724 0013162 0 ustar 00 // Responsive images (ensure images don't scale beyond their parents) // // This is purposefully opt-in via an explicit class rather than being the default for all `<img>`s. // We previously tried the "images are responsive by default" approach in Bootstrap v2, // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) // which weren't expecting the images within themselves to be involuntarily resized. // See also https://github.com/twbs/bootstrap/issues/18178 .img-fluid { @include img-fluid(); } // Image thumbnails .img-thumbnail { padding: $thumbnail-padding; background-color: $thumbnail-bg; border: $thumbnail-border-width solid $thumbnail-border-color; @include border-radius($thumbnail-border-radius); @include box-shadow($thumbnail-box-shadow); // Keep them at most 100% wide @include img-fluid(); } // // Figures // .figure { // Ensures the caption's text aligns with the image. display: inline-block; } .figure-img { margin-bottom: $spacer * .5; line-height: 1; } .figure-caption { @include font-size($figure-caption-font-size); color: $figure-caption-color; } boost/scss/bootstrap/bootstrap-grid.scss 0000604 00000001126 15062070724 0014516 0 ustar 00 /*! * Bootstrap Grid v4.6.2 (https://getbootstrap.com/) * Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ html { box-sizing: border-box; -ms-overflow-style: scrollbar; } *, *::before, *::after { box-sizing: inherit; } @import "functions"; @import "variables"; @import "mixins/deprecate"; @import "mixins/breakpoints"; @import "mixins/grid-framework"; @import "mixins/grid"; @import "grid"; @import "utilities/display"; @import "utilities/flex"; @import "utilities/spacing"; boost/scss/bootstrap/_navbar.scss 0000604 00000016551 15062070724 0013176 0 ustar 00 // Contents // // Navbar // Navbar brand // Navbar nav // Navbar text // Navbar divider // Responsive navbar // Navbar position // Navbar themes // Navbar // // Provide a static navbar from which we expand to create full-width, fixed, and // other navbar variations. .navbar { position: relative; display: flex; flex-wrap: wrap; // allow us to do the line break for collapsing content align-items: center; justify-content: space-between; // space out brand from logo padding: $navbar-padding-y $navbar-padding-x; // Because flex properties aren't inherited, we need to redeclare these first // few properties so that content nested within behave properly. %container-flex-properties { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; } .container, .container-fluid { @extend %container-flex-properties; } @each $breakpoint, $container-max-width in $container-max-widths { > .container#{breakpoint-infix($breakpoint, $container-max-widths)} { @extend %container-flex-properties; } } } // Navbar brand // // Used for brand, project, or site names. .navbar-brand { display: inline-block; padding-top: $navbar-brand-padding-y; padding-bottom: $navbar-brand-padding-y; margin-right: $navbar-padding-x; @include font-size($navbar-brand-font-size); line-height: inherit; white-space: nowrap; @include hover-focus() { text-decoration: none; } } // Navbar nav // // Custom navbar navigation (doesn't require `.nav`, but does make use of `.nav-link`). .navbar-nav { display: flex; flex-direction: column; // cannot use `inherit` to get the `.navbar`s value padding-left: 0; margin-bottom: 0; list-style: none; .nav-link { padding-right: 0; padding-left: 0; } .dropdown-menu { position: static; float: none; } } // Navbar text // // .navbar-text { display: inline-block; padding-top: $nav-link-padding-y; padding-bottom: $nav-link-padding-y; } // Responsive navbar // // Custom styles for responsive collapsing and toggling of navbar contents. // Powered by the collapse Bootstrap JavaScript plugin. // When collapsed, prevent the toggleable navbar contents from appearing in // the default flexbox row orientation. Requires the use of `flex-wrap: wrap` // on the `.navbar` parent. .navbar-collapse { flex-basis: 100%; flex-grow: 1; // For always expanded or extra full navbars, ensure content aligns itself // properly vertically. Can be easily overridden with flex utilities. align-items: center; } // Button for toggling the navbar when in its collapsed state .navbar-toggler { padding: $navbar-toggler-padding-y $navbar-toggler-padding-x; @include font-size($navbar-toggler-font-size); line-height: 1; background-color: transparent; // remove default button style border: $border-width solid transparent; // remove default button style @include border-radius($navbar-toggler-border-radius); @include hover-focus() { text-decoration: none; } } // Keep as a separate element so folks can easily override it with another icon // or image file as needed. .navbar-toggler-icon { display: inline-block; width: 1.5em; height: 1.5em; vertical-align: middle; content: ""; background: 50% / 100% 100% no-repeat; } .navbar-nav-scroll { max-height: $navbar-nav-scroll-max-height; overflow-y: auto; } // Generate series of `.navbar-expand-*` responsive classes for configuring // where your navbar collapses. .navbar-expand { @each $breakpoint in map-keys($grid-breakpoints) { $next: breakpoint-next($breakpoint, $grid-breakpoints); $infix: breakpoint-infix($next, $grid-breakpoints); &#{$infix} { @include media-breakpoint-down($breakpoint) { %container-navbar-expand-#{$breakpoint} { padding-right: 0; padding-left: 0; } > .container, > .container-fluid { @extend %container-navbar-expand-#{$breakpoint}; } @each $size, $container-max-width in $container-max-widths { > .container#{breakpoint-infix($size, $container-max-widths)} { @extend %container-navbar-expand-#{$breakpoint}; } } } @include media-breakpoint-up($next) { flex-flow: row nowrap; justify-content: flex-start; .navbar-nav { flex-direction: row; .dropdown-menu { position: absolute; } .nav-link { padding-right: $navbar-nav-link-padding-x; padding-left: $navbar-nav-link-padding-x; } } // For nesting containers, have to redeclare for alignment purposes %container-nesting-#{$breakpoint} { flex-wrap: nowrap; } > .container, > .container-fluid { @extend %container-nesting-#{$breakpoint}; } @each $size, $container-max-width in $container-max-widths { > .container#{breakpoint-infix($size, $container-max-widths)} { @extend %container-nesting-#{$breakpoint}; } } .navbar-nav-scroll { overflow: visible; } .navbar-collapse { display: flex !important; // stylelint-disable-line declaration-no-important // Changes flex-bases to auto because of an IE10 bug flex-basis: auto; } .navbar-toggler { display: none; } } } } } // Navbar themes // // Styles for switching between navbars with light or dark background. // Dark links against a light background .navbar-light { .navbar-brand { color: $navbar-light-brand-color; @include hover-focus() { color: $navbar-light-brand-hover-color; } } .navbar-nav { .nav-link { color: $navbar-light-color; @include hover-focus() { color: $navbar-light-hover-color; } &.disabled { color: $navbar-light-disabled-color; } } .show > .nav-link, .active > .nav-link, .nav-link.show, .nav-link.active { color: $navbar-light-active-color; } } .navbar-toggler { color: $navbar-light-color; border-color: $navbar-light-toggler-border-color; } .navbar-toggler-icon { background-image: escape-svg($navbar-light-toggler-icon-bg); } .navbar-text { color: $navbar-light-color; a { color: $navbar-light-active-color; @include hover-focus() { color: $navbar-light-active-color; } } } } // White links against a dark background .navbar-dark { .navbar-brand { color: $navbar-dark-brand-color; @include hover-focus() { color: $navbar-dark-brand-hover-color; } } .navbar-nav { .nav-link { color: $navbar-dark-color; @include hover-focus() { color: $navbar-dark-hover-color; } &.disabled { color: $navbar-dark-disabled-color; } } .show > .nav-link, .active > .nav-link, .nav-link.show, .nav-link.active { color: $navbar-dark-active-color; } } .navbar-toggler { color: $navbar-dark-color; border-color: $navbar-dark-toggler-border-color; } .navbar-toggler-icon { background-image: escape-svg($navbar-dark-toggler-icon-bg); } .navbar-text { color: $navbar-dark-color; a { color: $navbar-dark-active-color; @include hover-focus() { color: $navbar-dark-active-color; } } } } boost/scss/bootstrap/_media.scss 0000604 00000000123 15062070724 0012770 0 ustar 00 .media { display: flex; align-items: flex-start; } .media-body { flex: 1; } boost/scss/bootstrap/_spinners.scss 0000604 00000002407 15062070724 0013561 0 ustar 00 // // Rotating border // @keyframes spinner-border { to { transform: rotate(360deg); } } .spinner-border { display: inline-block; width: $spinner-width; height: $spinner-height; vertical-align: $spinner-vertical-align; border: $spinner-border-width solid currentcolor; border-right-color: transparent; // stylelint-disable-next-line property-disallowed-list border-radius: 50%; animation: .75s linear infinite spinner-border; } .spinner-border-sm { width: $spinner-width-sm; height: $spinner-height-sm; border-width: $spinner-border-width-sm; } // // Growing circle // @keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } .spinner-grow { display: inline-block; width: $spinner-width; height: $spinner-height; vertical-align: $spinner-vertical-align; background-color: currentcolor; // stylelint-disable-next-line property-disallowed-list border-radius: 50%; opacity: 0; animation: .75s linear infinite spinner-grow; } .spinner-grow-sm { width: $spinner-width-sm; height: $spinner-height-sm; } @if $enable-prefers-reduced-motion-media-query { @media (prefers-reduced-motion: reduce) { .spinner-border, .spinner-grow { animation-duration: 1.5s; } } } boost/scss/bootstrap/_breadcrumb.scss 0000604 00000002456 15062070724 0014032 0 ustar 00 .breadcrumb { display: flex; flex-wrap: wrap; padding: $breadcrumb-padding-y $breadcrumb-padding-x; margin-bottom: $breadcrumb-margin-bottom; @include font-size($breadcrumb-font-size); list-style: none; background-color: $breadcrumb-bg; @include border-radius($breadcrumb-border-radius); } .breadcrumb-item { // The separator between breadcrumbs (by default, a forward-slash: "/") + .breadcrumb-item { padding-left: $breadcrumb-item-padding; &::before { float: left; // Suppress inline spacings and underlining of the separator padding-right: $breadcrumb-item-padding; color: $breadcrumb-divider-color; content: escape-svg($breadcrumb-divider); } } // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built // without `<ul>`s. The `::before` pseudo-element generates an element // *within* the .breadcrumb-item and thereby inherits the `text-decoration`. // // To trick IE into suppressing the underline, we give the pseudo-element an // underline and then immediately remove it. + .breadcrumb-item:hover::before { text-decoration: underline; } // stylelint-disable-next-line no-duplicate-selectors + .breadcrumb-item:hover::before { text-decoration: none; } &.active { color: $breadcrumb-active-color; } } boost/scss/bootstrap/_modal.scss 0000604 00000014246 15062070724 0013020 0 ustar 00 // .modal-open - body class for killing the scroll // .modal - container to scroll within // .modal-dialog - positioning shell for the actual modal // .modal-content - actual modal w/ bg and corners and stuff .modal-open { // Kill the scroll on the body overflow: hidden; .modal { overflow-x: hidden; overflow-y: auto; } } // Container that the modal scrolls within .modal { position: fixed; top: 0; left: 0; z-index: $zindex-modal; display: none; width: 100%; height: 100%; overflow: hidden; // Prevent Chrome on Windows from adding a focus outline. For details, see // https://github.com/twbs/bootstrap/pull/10951. outline: 0; // We deliberately don't use `-webkit-overflow-scrolling: touch;` due to a // gnarly iOS Safari bug: https://bugs.webkit.org/show_bug.cgi?id=158342 // See also https://github.com/twbs/bootstrap/issues/17695 } // Shell div to position the modal with bottom padding .modal-dialog { position: relative; width: auto; margin: $modal-dialog-margin; // allow clicks to pass through for custom click handling to close modal pointer-events: none; // When fading in the modal, animate it to slide down .modal.fade & { @include transition($modal-transition); transform: $modal-fade-transform; } .modal.show & { transform: $modal-show-transform; } // When trying to close, animate focus to scale .modal.modal-static & { transform: $modal-scale-transform; } } .modal-dialog-scrollable { display: flex; // IE10/11 max-height: subtract(100%, $modal-dialog-margin * 2); .modal-content { max-height: subtract(100vh, $modal-dialog-margin * 2); // IE10/11 overflow: hidden; } .modal-header, .modal-footer { flex-shrink: 0; } .modal-body { overflow-y: auto; } } .modal-dialog-centered { display: flex; align-items: center; min-height: subtract(100%, $modal-dialog-margin * 2); // Ensure `modal-dialog-centered` extends the full height of the view (IE10/11) &::before { display: block; // IE10 height: subtract(100vh, $modal-dialog-margin * 2); height: min-content; // Reset height to 0 except on IE content: ""; } // Ensure `.modal-body` shows scrollbar (IE10/11) &.modal-dialog-scrollable { flex-direction: column; justify-content: center; height: 100%; .modal-content { max-height: none; } &::before { content: none; } } } // Actual modal .modal-content { position: relative; display: flex; flex-direction: column; width: 100%; // Ensure `.modal-content` extends the full width of the parent `.modal-dialog` // counteract the pointer-events: none; in the .modal-dialog color: $modal-content-color; pointer-events: auto; background-color: $modal-content-bg; background-clip: padding-box; border: $modal-content-border-width solid $modal-content-border-color; @include border-radius($modal-content-border-radius); @include box-shadow($modal-content-box-shadow-xs); // Remove focus outline from opened modal outline: 0; } // Modal background .modal-backdrop { position: fixed; top: 0; left: 0; z-index: $zindex-modal-backdrop; width: 100vw; height: 100vh; background-color: $modal-backdrop-bg; // Fade for backdrop &.fade { opacity: 0; } &.show { opacity: $modal-backdrop-opacity; } } // Modal header // Top section of the modal w/ title and dismiss .modal-header { display: flex; align-items: flex-start; // so the close btn always stays on the upper right corner justify-content: space-between; // Put modal header elements (title and dismiss) on opposite ends padding: $modal-header-padding; border-bottom: $modal-header-border-width solid $modal-header-border-color; @include border-top-radius($modal-content-inner-border-radius); .close { padding: $modal-header-padding; // auto on the left force icon to the right even when there is no .modal-title margin: (-$modal-header-padding-y) (-$modal-header-padding-x) (-$modal-header-padding-y) auto; } } // Title text within header .modal-title { margin-bottom: 0; line-height: $modal-title-line-height; } // Modal body // Where all modal content resides (sibling of .modal-header and .modal-footer) .modal-body { position: relative; // Enable `flex-grow: 1` so that the body take up as much space as possible // when there should be a fixed height on `.modal-dialog`. flex: 1 1 auto; padding: $modal-inner-padding; } // Footer (for actions) .modal-footer { display: flex; flex-wrap: wrap; align-items: center; // vertically center justify-content: flex-end; // Right align buttons with flex property because text-align doesn't work on flex items padding: $modal-inner-padding - $modal-footer-margin-between * .5; border-top: $modal-footer-border-width solid $modal-footer-border-color; @include border-bottom-radius($modal-content-inner-border-radius); // Place margin between footer elements // This solution is far from ideal because of the universal selector usage, // but is needed to fix https://github.com/twbs/bootstrap/issues/24800 > * { margin: $modal-footer-margin-between * .5; } } // Measure scrollbar width for padding body during modal show/hide .modal-scrollbar-measure { position: absolute; top: -9999px; width: 50px; height: 50px; overflow: scroll; } // Scale up the modal @include media-breakpoint-up(sm) { // Automatically set modal's width for larger viewports .modal-dialog { max-width: $modal-md; margin: $modal-dialog-margin-y-sm-up auto; } .modal-dialog-scrollable { max-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2); .modal-content { max-height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2); } } .modal-dialog-centered { min-height: subtract(100%, $modal-dialog-margin-y-sm-up * 2); &::before { height: subtract(100vh, $modal-dialog-margin-y-sm-up * 2); height: min-content; } } .modal-content { @include box-shadow($modal-content-box-shadow-sm-up); } .modal-sm { max-width: $modal-sm; } } @include media-breakpoint-up(lg) { .modal-lg, .modal-xl { max-width: $modal-lg; } } @include media-breakpoint-up(xl) { .modal-xl { max-width: $modal-xl; } } boost/scss/bootstrap/_button-group.scss 0000604 00000007052 15062070724 0014366 0 ustar 00 // stylelint-disable selector-no-qualifying-type // Make the div behave like a button .btn-group, .btn-group-vertical { position: relative; display: inline-flex; vertical-align: middle; // match .btn alignment given font-size hack above > .btn { position: relative; flex: 1 1 auto; // Bring the hover, focused, and "active" buttons to the front to overlay // the borders properly @include hover() { z-index: 1; } &:focus, &:active, &.active { z-index: 1; } } } // Optional: Group multiple button groups together for a toolbar .btn-toolbar { display: flex; flex-wrap: wrap; justify-content: flex-start; .input-group { width: auto; } } .btn-group { // Prevent double borders when buttons are next to each other > .btn:not(:first-child), > .btn-group:not(:first-child) { margin-left: -$btn-border-width; } // Reset rounded corners > .btn:not(:last-child):not(.dropdown-toggle), > .btn-group:not(:last-child) > .btn { @include border-right-radius(0); } > .btn:not(:first-child), > .btn-group:not(:first-child) > .btn { @include border-left-radius(0); } } // Sizing // // Remix the default button sizing classes into new ones for easier manipulation. .btn-group-sm > .btn { @extend .btn-sm; } .btn-group-lg > .btn { @extend .btn-lg; } // // Split button dropdowns // .dropdown-toggle-split { padding-right: $btn-padding-x * .75; padding-left: $btn-padding-x * .75; &::after, .dropup &::after, .dropright &::after { margin-left: 0; } .dropleft &::before { margin-right: 0; } } .btn-sm + .dropdown-toggle-split { padding-right: $btn-padding-x-sm * .75; padding-left: $btn-padding-x-sm * .75; } .btn-lg + .dropdown-toggle-split { padding-right: $btn-padding-x-lg * .75; padding-left: $btn-padding-x-lg * .75; } // The clickable button for toggling the menu // Set the same inset shadow as the :active state .btn-group.show .dropdown-toggle { @include box-shadow($btn-active-box-shadow); // Show no shadow for `.btn-link` since it has no other button styles. &.btn-link { @include box-shadow(none); } } // // Vertical button groups // .btn-group-vertical { flex-direction: column; align-items: flex-start; justify-content: center; > .btn, > .btn-group { width: 100%; } > .btn:not(:first-child), > .btn-group:not(:first-child) { margin-top: -$btn-border-width; } // Reset rounded corners > .btn:not(:last-child):not(.dropdown-toggle), > .btn-group:not(:last-child) > .btn { @include border-bottom-radius(0); } > .btn:not(:first-child), > .btn-group:not(:first-child) > .btn { @include border-top-radius(0); } } // Checkbox and radio options // // In order to support the browser's form validation feedback, powered by the // `required` attribute, we have to "hide" the inputs via `clip`. We cannot use // `display: none;` or `visibility: hidden;` as that also hides the popover. // Simply visually hiding the inputs via `opacity` would leave them clickable in // certain cases which is prevented by using `clip` and `pointer-events`. // This way, we ensure a DOM element is visible to position the popover from. // // See https://github.com/twbs/bootstrap/pull/12794 and // https://github.com/twbs/bootstrap/pull/14559 for more information. .btn-group-toggle { > .btn, > .btn-group > .btn { margin-bottom: 0; // Override default `<label>` value input[type="radio"], input[type="checkbox"] { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } } } boost/scss/bootstrap/_alert.scss 0000604 00000002214 15062070724 0013023 0 ustar 00 // // Base styles // .alert { position: relative; padding: $alert-padding-y $alert-padding-x; margin-bottom: $alert-margin-bottom; border: $alert-border-width solid transparent; @include border-radius($alert-border-radius); } // Headings for larger alerts .alert-heading { // Specified to prevent conflicts of changing $headings-color color: inherit; } // Provide class for links that match alerts .alert-link { font-weight: $alert-link-font-weight; } // Dismissible alerts // // Expand the right padding and account for the close button's positioning. .alert-dismissible { padding-right: $close-font-size + $alert-padding-x * 2; // Adjust close link position .close { position: absolute; top: 0; right: 0; z-index: 2; padding: $alert-padding-y $alert-padding-x; color: inherit; } } // Alternate styles // // Generate contextual modifier classes for colorizing the alert. @each $color, $value in $theme-colors { .alert-#{$color} { @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); } } boost/scss/bootstrap/bootstrap-reboot.scss 0000604 00000000631 15062070724 0015063 0 ustar 00 /*! * Bootstrap Reboot v4.6.2 (https://getbootstrap.com/) * Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) */ @import "functions"; @import "variables"; @import "mixins"; @import "reboot"; boost/scss/bootstrap/_close.scss 0000604 00000001654 15062070724 0013030 0 ustar 00 .close { float: right; @include font-size($close-font-size); font-weight: $close-font-weight; line-height: 1; color: $close-color; text-shadow: $close-text-shadow; opacity: .5; // Override <a>'s hover style @include hover() { color: $close-color; text-decoration: none; } &:not(:disabled):not(.disabled) { @include hover-focus() { opacity: .75; } } } // Additional properties for button version // iOS requires the button element instead of an anchor tag. // If you want the anchor version, it requires `href="#"`. // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile // stylelint-disable-next-line selector-no-qualifying-type button.close { padding: 0; background-color: transparent; border: 0; } // Future-proof disabling of clicks on `<a>` elements // stylelint-disable-next-line selector-no-qualifying-type a.close.disabled { pointer-events: none; } boost/scss/fontawesome.scss 0000604 00000000324 15062070724 0012067 0 ustar 00 // Import FonAwesome. $fa-version: "6.3.0" !default; @import "fontawesome/brands"; @import "fontawesome/regular"; @import "fontawesome/solid"; @import "fontawesome/v4-shims"; @import "fontawesome/fontawesome"; boost/scss/editor.scss 0000604 00000000115 15062070724 0011024 0 ustar 00 /* Give editor access to all of bootstrap. */ @import "bootstrap/bootstrap"; boost/scss/moodle.scss 0000604 00000002711 15062070724 0011021 0 ustar 00 $breadcrumb-divider: "▶" !default; $breadcrumb-divider-rtl: "◀" !default; // Specific overrides to make Bootstrap RTL. @import "moodle/bootstrap-rtl"; // Old Moodle stuff from base theme. // Massive, needs broken up. @import "moodle/variables"; @import "moodle/core"; @import "moodle/action-menu"; @import "moodle/icons"; @import "moodle/admin"; @import "moodle/blocks"; @import "moodle/calendar"; @import "moodle/contentbank"; @import "moodle/course"; @import "moodle/drawer"; @import "moodle/filemanager"; @import "moodle/message"; @import "moodle/question"; @import "moodle/user"; @import "moodle/search"; @import "moodle/forms"; @import "moodle/login"; @import "moodle/modules"; @import "moodle/chat"; @import "moodle/reports"; @import "moodle/backup-restore"; @import "moodle/tables"; @import "moodle/buttons"; @import "moodle/grade"; @import "moodle/templates"; @import "moodle/undo"; @import "moodle/debug"; @import "moodle/sticky-footer"; @import "moodle/popover-region"; @import "moodle/tool_usertours"; @import "moodle/print"; @import "moodle/modal"; @import "moodle/layout"; @import "moodle/prefixes"; @import "moodle/atto"; @import "moodle/toasts"; @import "moodle/navbar"; @import "moodle/reportbuilder"; @import "moodle/courseindex"; @import "moodle/moremenu"; @import "moodle/primarynavigation"; @import "moodle/secondarynavigation"; @import "moodle/tertiarynavigation"; @import "moodle/process-monitor"; @import "moodle/moodlenet"; @import "moodle/dropdown"; boost/scss/preset/default.scss 0000604 00000007131 15062070724 0012471 0 ustar 00 // Bootstrap variables $white: #fff !default; $gray-100: #f8f9fa !default; $gray-200: #e9ecef !default; $gray-300: #dee2e6 !default; $gray-400: #ced4da !default; $gray-500: #8f959e !default; $gray-600: #6a737b !default; $gray-700: #495057 !default; $gray-800: #343a40 !default; $gray-900: #1d2125 !default; $black: #000 !default; $blue: #0f6cbf !default; $indigo: #6610f2 !default; $purple: #613d7c !default; $pink: #e83e8c !default; $red: #ca3120 !default; $orange: #f0ad4e !default; $yellow: #ff7518 !default; $green: #357a32 !default; $teal: #20c997 !default; $cyan: #008196 !default; $primary: $blue !default; $success: $green !default; $info: $cyan !default; $warning: $orange !default; $danger: $red !default; $secondary: $gray-400 !default; $info-outline: #1f7e9a; $warning-outline: #a6670e; // Tables $table-accent-bg: rgba($black, .03) !default; // Options $enable-responsive-font-sizes: true !default; // Body $body-color: $gray-900 !default; // Fonts $font-size-base: 0.9375rem !default; $rfs-base-font-size: 0.9rem !default; $headings-font-weight: 700 !default; // Navbar $navbar-dark-hover-color: rgba($white, 1) !default; $navbar-light-color: rgba($black, 0.6) !default; $navbar-light-hover-color: rgba($black, .9) !default; // Breadcrumbs $breadcrumb-padding-y: .5rem !default; $breadcrumb-padding-x: 0 !default; $breadcrumb-item-padding: .5rem !default; $breadcrumb-margin-bottom: 0 !default; $breadcrumb-bg: transparent !default; $breadcrumb-divider: "/" !default; $breadcrumb-divider-rtl: "/" !default; // Alerts $alert-border-width: 0 !default; $card-group-margin: .25rem; // Toasts $toast-color: $white !default; $toast-background-color: rgba($gray-900, .95) !default; $toast-header-color: $gray-100 !default; $toast-header-background-color: rgba($white, .1) !default; // Custom control size $custom-control-indicator-size: 1.25rem; $input-btn-focus-color: rgba($primary, .75) !default; $input-border-color: $gray-500 !default; $dropdown-link-hover-color: $white; $dropdown-link-hover-bg: $primary; $popover-max-width: 300px !default; $border-radius: .5rem !default; $border-radius-lg: .6rem !default; // stylelint-disable $theme-colors: () !default; $theme-colors: map-merge(( primary: $primary, secondary: $secondary, success: $success, info: $info, warning: $warning, danger: $danger, ), $theme-colors); // stylelint-enable $spacer: 1rem !default; $spacers: ( 0: 0, 1: ($spacer * .25), 2: ($spacer * .5), 3: $spacer, 4: ($spacer * 1.5), 5: ($spacer * 2), 6: ($spacer * 3) ) !default; // Import FontAwesome. @import "fontawesome"; // Import All of Bootstrap @import "bootstrap"; // Import Core moodle CSS @import "moodle"; // Preset CSS body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .navbar { box-shadow: 0 2px 4px rgba(0, 0, 0, .08); } // Rounded user pictures .userpicture { border-radius: 50%; } // Reset the default styling back to the bootstrap defaults for // the secondary outline button because gray-200 is much too light // for an outline button. .btn-outline-secondary { @include button-outline-variant($gray-600); border-color: $gray-600; } .btn-outline-info { @include button-outline-variant($info-outline); } .btn-outline-warning { @include button-outline-variant($warning-outline); } @include bg-variant(".bg-gray", $gray-200, true); boost/scss/preset/plain.scss 0000604 00000001010 15062070724 0012136 0 ustar 00 /** * Plain preset file. * * This preset is plain Moodle & Bootstrap and must not contain anything else. * * To create your own preset file: * - Duplicate this file and rename it, for instance to preset-apple.scss. * - In settings.php, find the references to 'plain', duplicate them and rename * them to 'apple'. (Look around the choices for 'theme_boost/preset'). */ // Import FontAwesome. @import "fontawesome"; // Import All of Bootstrap @import "bootstrap"; // Import Core moodle CSS @import "moodle"; boost/lang/en/deprecated.txt 0000604 00000000170 15062070724 0012053 0 ustar 00 totop,theme_boost privacy:drawernavclosed,theme_boost privacy:drawernavopen,theme_boost currentinparentheses,theme_boost boost/lang/en/theme_boost.php 0000604 00000010357 15062070724 0012243 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Language file. * * @package theme_boost * @copyright 2016 Frédéric Massart * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); $string['advancedsettings'] = 'Advanced settings'; $string['backgroundimage'] = 'Background image'; $string['backgroundimage_desc'] = 'The image to display as a background of the site. The background image you upload here will override the background image in your theme preset files.'; $string['brandcolor'] = 'Brand colour'; $string['brandcolor_desc'] = 'The accent colour.'; $string['bootswatch'] = 'Bootswatch'; $string['bootswatch_desc'] = 'A bootswatch is a set of Bootstrap variables and css to style Bootstrap'; $string['choosereadme'] = 'Boost is a modern highly-customisable theme. This theme is intended to be used directly, or as a parent theme when creating new themes utilising Bootstrap 4.'; $string['configtitle'] = 'Boost'; $string['generalsettings'] = 'General settings'; $string['loginbackgroundimage'] = 'Login page background image'; $string['loginbackgroundimage_desc'] = 'The image to display as a background for the login page.'; $string['nobootswatch'] = 'None'; $string['pluginname'] = 'Boost'; $string['presetfiles'] = 'Additional theme preset files'; $string['presetfiles_desc'] = 'Preset files can be used to dramatically alter the appearance of the theme. See <a href="https://docs.moodle.org/dev/Boost_Presets">Boost presets</a> for information on creating and sharing your own preset files, and see the <a href="https://archive.moodle.net/boost">Presets repository</a> for presets that others have shared.'; $string['preset'] = 'Theme preset'; $string['preset_desc'] = 'Pick a preset to broadly change the look of the theme.'; $string['privacy:metadata'] = 'The Boost theme does not store any personal data about any user.'; $string['rawscss'] = 'Raw SCSS'; $string['rawscss_desc'] = 'Use this field to provide SCSS or CSS code which will be injected at the end of the style sheet.'; $string['rawscsspre'] = 'Raw initial SCSS'; $string['rawscsspre_desc'] = 'In this field you can provide initialising SCSS code, it will be injected before everything else. Most of the time you will use this setting to define variables.'; $string['region-side-pre'] = 'Right'; $string['showfooter'] = 'Show footer'; $string['unaddableblocks'] = 'Unneeded blocks'; $string['unaddableblocks_desc'] = 'The blocks specified are not needed when using this theme and will not be listed in the \'Add a block\' menu.'; $string['privacy:metadata:preference:draweropenblock'] = 'The user\'s preference for hiding or showing the drawer with blocks.'; $string['privacy:metadata:preference:draweropenindex'] = 'The user\'s preference for hiding or showing the drawer with course index.'; $string['privacy:metadata:preference:draweropennav'] = 'The user\'s preference for hiding or showing the drawer menu navigation.'; $string['privacy:drawerindexclosed'] = 'The current preference for the index drawer is closed.'; $string['privacy:drawerindexopen'] = 'The current preference for the index drawer is open.'; $string['privacy:drawerblockclosed'] = 'The current preference for the block drawer is closed.'; $string['privacy:drawerblockopen'] = 'The current preference for the block drawer is open.'; // Deprecated since Moodle 4.0. $string['totop'] = 'Go to top'; // Deprecated since Moodle 4.1. $string['currentinparentheses'] = '(current)'; $string['privacy:drawernavclosed'] = 'The current preference for the navigation drawer is closed.'; $string['privacy:drawernavopen'] = 'The current preference for the navigation drawer is open.'; boost/classes/autoprefixer.php 0000604 00000020135 15062070724 0012555 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Autoprefixer. * * This autoprefixer has been developed to satisfy the basic needs of the * theme Boost when working with Bootstrap 4 alpha. We do not recommend * that this tool is shared, nor used outside of this theme. * * @package theme_boost * @copyright 2016 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace theme_boost; defined('MOODLE_INTERNAL') || die(); use Sabberworm\CSS\CSSList\CSSList; use Sabberworm\CSS\CSSList\Document; use Sabberworm\CSS\CSSList\KeyFrame; use Sabberworm\CSS\OutputFormat; use Sabberworm\CSS\Parser; use Sabberworm\CSS\Property\AtRule; use Sabberworm\CSS\Property\Selector; use Sabberworm\CSS\Rule\Rule; use Sabberworm\CSS\RuleSet\AtRuleSet; use Sabberworm\CSS\RuleSet\DeclarationBlock; use Sabberworm\CSS\RuleSet\RuleSet; use Sabberworm\CSS\Settings; use Sabberworm\CSS\Value\CSSFunction; use Sabberworm\CSS\Value\CSSString; use Sabberworm\CSS\Value\PrimitiveValue; use Sabberworm\CSS\Value\RuleValueList; use Sabberworm\CSS\Value\Size; use Sabberworm\CSS\Value\ValueList; /** * Autoprefixer class. * * Very basic implementation covering simple needs for Bootstrap 4. * * @package theme_boost * @copyright 2016 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class autoprefixer { /** @var object The CSS tree. */ protected $tree; /** @var string Pseudo classes regex. */ protected $pseudosregex; /** @var array At rules prefixes. */ protected static $atrules = [ 'keyframes' => ['-webkit-', '-o-'] ]; /** @var array Pseudo classes prefixes. */ protected static $pseudos = [ '::placeholder' => ['::-webkit-input-placeholder', '::-moz-placeholder', ':-ms-input-placeholder'] ]; /** @var array Rule properties prefixes. */ protected static $rules = [ 'animation' => ['-webkit-'], 'appearance' => ['-webkit-', '-moz-'], 'backface-visibility' => ['-webkit-'], 'box-sizing' => ['-webkit-'], 'box-shadow' => ['-webkit-'], 'background-clip' => ['-webkit-'], 'background-size' => ['-webkit-'], 'box-shadow' => ['-webkit-'], 'column-count' => ['-webkit-', '-moz-'], 'column-gap' => ['-webkit-', '-moz-'], 'perspective' => ['-webkit-'], 'touch-action' => ['-ms-'], 'transform' => ['-webkit-', '-moz-', '-ms-', '-o-'], 'transition' => ['-webkit-', '-o-'], 'transition-timing-function' => ['-webkit-', '-o-'], 'transition-duration' => ['-webkit-', '-o-'], 'transition-property' => ['-webkit-', '-o-'], 'user-select' => ['-webkit-', '-moz-', '-ms-'], ]; /** * Constructor. * * @param Document $tree The CSS tree. */ public function __construct(Document $tree) { debugging('theme_boost\autoprefixer() is deprecated. Required prefixes for Bootstrap ' . 'are now in theme/boost/scss/moodle/prefixes.scss', DEBUG_DEVELOPER); $this->tree = $tree; $pseudos = array_map(function($pseudo) { return '(' . preg_quote($pseudo) . ')'; }, array_keys(self::$pseudos)); $this->pseudosregex = '(' . implode('|', $pseudos) . ')'; } /** * Manipulate an array of rules to adapt their values. * * @param array $rules The rules. * @return New array of rules. */ protected function manipulateRuleValues(array $rules) { $finalrules = []; foreach ($rules as $rule) { $property = $rule->getRule(); $value = $rule->getValue(); if ($property === 'position' && $value === 'sticky') { $newrule = clone $rule; $newrule->setValue('-webkit-sticky'); $finalrules[] = $newrule; } else if ($property === 'background-image' && $value instanceof CSSFunction && $value->getName() === 'linear-gradient') { foreach (['-webkit-', '-o-'] as $prefix) { $newfunction = clone $value; $newfunction->setName($prefix . $value->getName()); $newrule = clone $rule; $newrule->setValue($newfunction); $finalrules[] = $newrule; } } $finalrules[] = $rule; } return $finalrules; } /** * Prefix all the things! */ public function prefix() { $this->processBlock($this->tree); } /** * Process block. * * @param object $block A block. * @param object $parent The parent of the block. */ protected function processBlock($block) { foreach ($block->getContents() as $node) { if ($node instanceof AtRule) { $name = $node->atRuleName(); if (isset(self::$atrules[$name])) { foreach (self::$atrules[$name] as $prefix) { $newname = $prefix . $name; $newnode = clone $node; if ($node instanceof KeyFrame) { $newnode->setVendorKeyFrame($newname); $block->insert($newnode, $node); } else { debugging('Unhandled atRule prefixing.', DEBUG_DEVELOPER); } } } } if ($node instanceof CSSList) { $this->processBlock($node); } else if ($node instanceof RuleSet) { $this->processDeclaration($node, $block); } } } /** * Process declaration. * * @param object $node The declaration block. * @param object $parent The parent. */ protected function processDeclaration($node, $parent) { $rules = []; foreach ($node->getRules() as $key => $rule) { $name = $rule->getRule(); $seen[$name] = true; if (!isset(self::$rules[$name])) { $rules[] = $rule; continue; } foreach (self::$rules[$name] as $prefix) { $newname = $prefix . $name; if (isset($seen[$newname])) { continue; } $newrule = clone $rule; $newrule->setRule($newname); $rules[] = $newrule; } $rules[] = $rule; } $node->setRules($this->manipulateRuleValues($rules)); if ($node instanceof DeclarationBlock) { $selectors = $node->getSelectors(); foreach ($selectors as $key => $selector) { $matches = []; if (preg_match($this->pseudosregex, $selector->getSelector(), $matches)) { $newnode = clone $node; foreach (self::$pseudos[$matches[1]] as $newpseudo) { $newselector = new Selector(str_replace($matches[1], $newpseudo, $selector->getSelector())); $selectors[$key] = $newselector; $newnode = clone $node; $newnode->setSelectors($selectors); $parent->insert($newnode, $node); } // We're only expecting one affected pseudo class per block. break; } } } } } boost/classes/output/core_renderer.php 0000604 00000027502 15062070724 0014223 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. namespace theme_boost\output; use moodle_url; use html_writer; use get_string; defined('MOODLE_INTERNAL') || die; /** * Renderers to align Moodle's HTML with that expected by Bootstrap * * @package theme_boost * @copyright 2012 Bas Brands, www.basbrands.nl * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class core_renderer extends \core_renderer { /** * Returns HTML to display a "Turn editing on/off" button in a form. * * @param moodle_url $url The URL + params to send through when clicking the button * @param string $method * @return string HTML the button */ public function edit_button(moodle_url $url, string $method = 'post') { if ($this->page->theme->haseditswitch) { return; } $url->param('sesskey', sesskey()); if ($this->page->user_is_editing()) { $url->param('edit', 'off'); $editstring = get_string('turneditingoff'); } else { $url->param('edit', 'on'); $editstring = get_string('turneditingon'); } $button = new \single_button($url, $editstring, $method, ['class' => 'btn btn-primary']); return $this->render_single_button($button); } /** * Renders the "breadcrumb" for all pages in boost. * * @return string the HTML for the navbar. */ public function navbar(): string { $newnav = new \theme_boost\boostnavbar($this->page); return $this->render_from_template('core/navbar', $newnav); } /** * Renders the context header for the page. * * @param array $headerinfo Heading information. * @param int $headinglevel What 'h' level to make the heading. * @return string A rendered context header. */ public function context_header($headerinfo = null, $headinglevel = 1): string { global $DB, $USER, $CFG; require_once($CFG->dirroot . '/user/lib.php'); $context = $this->page->context; $heading = null; $imagedata = null; $userbuttons = null; // Make sure to use the heading if it has been set. if (isset($headerinfo['heading'])) { $heading = $headerinfo['heading']; } else { $heading = $this->page->heading; } // The user context currently has images and buttons. Other contexts may follow. if ((isset($headerinfo['user']) || $context->contextlevel == CONTEXT_USER) && $this->page->pagetype !== 'my-index') { if (isset($headerinfo['user'])) { $user = $headerinfo['user']; } else { // Look up the user information if it is not supplied. $user = $DB->get_record('user', array('id' => $context->instanceid)); } // If the user context is set, then use that for capability checks. if (isset($headerinfo['usercontext'])) { $context = $headerinfo['usercontext']; } // Only provide user information if the user is the current user, or a user which the current user can view. // When checking user_can_view_profile(), either: // If the page context is course, check the course context (from the page object) or; // If page context is NOT course, then check across all courses. $course = ($this->page->context->contextlevel == CONTEXT_COURSE) ? $this->page->course : null; if (user_can_view_profile($user, $course)) { // Use the user's full name if the heading isn't set. if (empty($heading)) { $heading = fullname($user); } $imagedata = $this->user_picture($user, array('size' => 100)); // Check to see if we should be displaying a message button. if (!empty($CFG->messaging) && has_capability('moodle/site:sendmessage', $context)) { $userbuttons = array( 'messages' => array( 'buttontype' => 'message', 'title' => get_string('message', 'message'), 'url' => new moodle_url('/message/index.php', array('id' => $user->id)), 'image' => 'message', 'linkattributes' => \core_message\helper::messageuser_link_params($user->id), 'page' => $this->page ) ); if ($USER->id != $user->id) { $iscontact = \core_message\api::is_contact($USER->id, $user->id); $contacttitle = $iscontact ? 'removefromyourcontacts' : 'addtoyourcontacts'; $contacturlaction = $iscontact ? 'removecontact' : 'addcontact'; $contactimage = $iscontact ? 'removecontact' : 'addcontact'; $userbuttons['togglecontact'] = array( 'buttontype' => 'togglecontact', 'title' => get_string($contacttitle, 'message'), 'url' => new moodle_url('/message/index.php', array( 'user1' => $USER->id, 'user2' => $user->id, $contacturlaction => $user->id, 'sesskey' => sesskey()) ), 'image' => $contactimage, 'linkattributes' => \core_message\helper::togglecontact_link_params($user, $iscontact), 'page' => $this->page ); } $this->page->requires->string_for_js('changesmadereallygoaway', 'moodle'); } } else { $heading = null; } } $prefix = null; if ($context->contextlevel == CONTEXT_MODULE) { if ($this->page->course->format === 'singleactivity') { $heading = format_string($this->page->course->fullname, true, ['context' => $context]); } else { $heading = $this->page->cm->get_formatted_name(); $iconurl = $this->page->cm->get_icon_url(); $iconclass = $iconurl->get_param('filtericon') ? '' : 'nofilter'; $iconattrs = [ 'class' => "icon activityicon $iconclass", 'aria-hidden' => 'true' ]; $imagedata = html_writer::img($iconurl->out(false), '', $iconattrs); $purposeclass = plugin_supports('mod', $this->page->activityname, FEATURE_MOD_PURPOSE); $purposeclass .= ' activityiconcontainer icon-size-6'; $purposeclass .= ' modicon_' . $this->page->activityname; $imagedata = html_writer::tag('div', $imagedata, ['class' => $purposeclass]); if (!empty($USER->editing)) { $prefix = get_string('modulename', $this->page->activityname); } } } $contextheader = new \context_header($heading, $headinglevel, $imagedata, $userbuttons, $prefix); return $this->render_context_header($contextheader); } /** * Renders the header bar. * * @param context_header $contextheader Header bar object. * @return string HTML for the header bar. */ protected function render_context_header(\context_header $contextheader) { // Generate the heading first and before everything else as we might have to do an early return. if (!isset($contextheader->heading)) { $heading = $this->heading($this->page->heading, $contextheader->headinglevel, 'h2'); } else { $heading = $this->heading($contextheader->heading, $contextheader->headinglevel, 'h2'); } // All the html stuff goes here. $html = html_writer::start_div('page-context-header'); // Image data. if (isset($contextheader->imagedata)) { // Header specific image. $html .= html_writer::div($contextheader->imagedata, 'page-header-image mr-2'); } // Headings. if (isset($contextheader->prefix)) { $prefix = html_writer::div($contextheader->prefix, 'text-muted text-uppercase small line-height-3'); $heading = $prefix . $heading; } $html .= html_writer::tag('div', $heading, array('class' => 'page-header-headings')); // Buttons. if (isset($contextheader->additionalbuttons)) { $html .= html_writer::start_div('btn-group header-button-group'); foreach ($contextheader->additionalbuttons as $button) { if (!isset($button->page)) { // Include js for messaging. if ($button['buttontype'] === 'togglecontact') { \core_message\helper::togglecontact_requirejs(); } if ($button['buttontype'] === 'message') { \core_message\helper::messageuser_requirejs(); } $image = $this->pix_icon($button['formattedimage'], $button['title'], 'moodle', array( 'class' => 'iconsmall', 'role' => 'presentation' )); $image .= html_writer::span($button['title'], 'header-button-title'); } else { $image = html_writer::empty_tag('img', array( 'src' => $button['formattedimage'], 'role' => 'presentation' )); } $html .= html_writer::link($button['url'], html_writer::tag('span', $image), $button['linkattributes']); } $html .= html_writer::end_div(); } $html .= html_writer::end_div(); return $html; } /** * See if this is the first view of the current cm in the session if it has fake blocks. * * (We track up to 100 cms so as not to overflow the session.) * This is done for drawer regions containing fake blocks so we can show blocks automatically. * * @return boolean true if the page has fakeblocks and this is the first visit. */ public function firstview_fakeblocks(): bool { global $SESSION; $firstview = false; if ($this->page->cm) { if (!$this->page->blocks->region_has_fakeblocks('side-pre')) { return false; } if (!property_exists($SESSION, 'firstview_fakeblocks')) { $SESSION->firstview_fakeblocks = []; } if (array_key_exists($this->page->cm->id, $SESSION->firstview_fakeblocks)) { $firstview = false; } else { $SESSION->firstview_fakeblocks[$this->page->cm->id] = true; $firstview = true; if (count($SESSION->firstview_fakeblocks) > 100) { array_shift($SESSION->firstview_fakeblocks); } } } return $firstview; } } boost/classes/boostnavbar.php 0000604 00000032241 15062070724 0012361 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. namespace theme_boost; use core\navigation\views\view; use navigation_node; use moodle_url; use action_link; use lang_string; /** * Creates a navbar for boost that allows easy control of the navbar items. * * @package theme_boost * @copyright 2021 Adrian Greeve <adrian@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class boostnavbar implements \renderable { /** @var array The individual items of the navbar. */ protected $items = []; /** @var moodle_page The current moodle page. */ protected $page; /** * Takes a navbar object and picks the necessary parts for display. * * @param \moodle_page $page The current moodle page. */ public function __construct(\moodle_page $page) { $this->page = $page; foreach ($this->page->navbar->get_items() as $item) { $this->items[] = $item; } $this->prepare_nodes_for_boost(); } /** * Prepares the navigation nodes for use with boost. */ protected function prepare_nodes_for_boost(): void { global $PAGE; // Remove the navbar nodes that already exist in the primary navigation menu. $this->remove_items_that_exist_in_navigation($PAGE->primarynav); // Defines whether section items with an action should be removed by default. $removesections = true; if ($this->page->context->contextlevel == CONTEXT_COURSECAT) { // Remove the 'Permissions' navbar node in the Check permissions page. if ($this->page->pagetype === 'admin-roles-check') { $this->remove('permissions'); } } if ($this->page->context->contextlevel == CONTEXT_COURSE) { // Remove any duplicate navbar nodes. $this->remove_duplicate_items(); // Remove 'My courses' and 'Courses' if we are in the course context. $this->remove('mycourses'); $this->remove('courses'); // Remove the course category breadcrumb nodes. foreach ($this->items as $key => $item) { // Remove if it is a course category breadcrumb node. $this->remove($item->key, \breadcrumb_navigation_node::TYPE_CATEGORY); } // Remove the course breadcrumb node. $this->remove($this->page->course->id, \breadcrumb_navigation_node::TYPE_COURSE); // Remove the navbar nodes that already exist in the secondary navigation menu. $this->remove_items_that_exist_in_navigation($PAGE->secondarynav); switch ($this->page->pagetype) { case 'group-groupings': case 'group-grouping': case 'group-overview': case 'group-assign': // Remove the 'Groups' navbar node in the Groupings, Grouping, group Overview and Assign pages. $this->remove('groups'); case 'backup-backup': case 'backup-restorefile': case 'backup-copy': case 'course-reset': // Remove the 'Import' navbar node in the Backup, Restore, Copy course and Reset pages. $this->remove('import'); case 'course-user': $this->remove('mygrades'); $this->remove('grades'); } } // Remove 'My courses' if we are in the module context. if ($this->page->context->contextlevel == CONTEXT_MODULE) { $this->remove('mycourses'); $this->remove('courses'); // Remove the course category breadcrumb nodes. foreach ($this->items as $key => $item) { // Remove if it is a course category breadcrumb node. $this->remove($item->key, \breadcrumb_navigation_node::TYPE_CATEGORY); } $courseformat = course_get_format($this->page->course)->get_course(); // Section items can be only removed if a course layout (coursedisplay) is not explicitly set in the // given course format or the set course layout is not 'One section per page'. $removesections = !isset($courseformat->coursedisplay) || $courseformat->coursedisplay != COURSE_DISPLAY_MULTIPAGE; if ($removesections) { // If the course sections are removed, we need to add the anchor of current section to the Course. $coursenode = $this->get_item($this->page->course->id); if (!is_null($coursenode) && $this->page->cm->sectionnum !== null) { $coursenode->action = course_get_format($this->page->course)->get_view_url($this->page->cm->sectionnum); } } } if ($this->page->context->contextlevel == CONTEXT_SYSTEM) { // Remove the navbar nodes that already exist in the secondary navigation menu. $this->remove_items_that_exist_in_navigation($PAGE->secondarynav); } // Set the designated one path for courses. $mycoursesnode = $this->get_item('mycourses'); if (!is_null($mycoursesnode)) { $url = new \moodle_url('/my/courses.php'); $mycoursesnode->action = $url; $mycoursesnode->text = get_string('mycourses'); } $this->remove_no_link_items($removesections); // Don't display the navbar if there is only one item. Apparently this is bad UX design. if ($this->item_count() <= 1) { $this->clear_items(); return; } // Make sure that the last item is not a link. Not sure if this is always a good idea. $this->remove_last_item_action(); } /** * Get all the boostnavbaritem elements. * * @return boostnavbaritem[] Boost navbar items. */ public function get_items(): array { return $this->items; } /** * Removes all navigation items out of this boost navbar */ protected function clear_items(): void { $this->items = []; } /** * Retrieve a single navbar item. * * @param string|int $key The identifier of the navbar item to return. * @return \breadcrumb_navigation_node|null The navbar item. */ protected function get_item($key): ?\breadcrumb_navigation_node { foreach ($this->items as $item) { if ($key === $item->key) { return $item; } } return null; } /** * Counts all of the navbar items. * * @return int How many navbar items there are. */ protected function item_count(): int { return count($this->items); } /** * Remove a boostnavbaritem from the boost navbar. * * @param string|int $itemkey An identifier for the boostnavbaritem * @param int|null $itemtype An additional type identifier for the boostnavbaritem (optional) */ protected function remove($itemkey, ?int $itemtype = null): void { $itemfound = false; foreach ($this->items as $key => $item) { if ($item->key === $itemkey) { // If a type identifier is also specified, check whether the type of the breadcrumb item matches the // specified type. Skip if types to not match. if (!is_null($itemtype) && $item->type !== $itemtype) { continue; } unset($this->items[$key]); $itemfound = true; break; } } if (!$itemfound) { return; } $itemcount = $this->item_count(); if ($itemcount <= 0) { return; } $this->items = array_values($this->items); // Set the last item to last item if it is not. $lastitem = $this->items[$itemcount - 1]; if (!$lastitem->is_last()) { $lastitem->set_last(true); } } /** * Removes the action from the last item of the boostnavbaritem. */ protected function remove_last_item_action(): void { $item = end($this->items); $item->action = null; reset($this->items); } /** * Returns the second last navbar item. This is for use in the mobile view where we are showing just the second * last item in the breadcrumb navbar. * * @return breakcrumb_navigation_node|null The second last navigation node. */ public function get_penultimate_item(): ?\breadcrumb_navigation_node { $number = $this->item_count() - 2; return ($number >= 0) ? $this->items[$number] : null; } /** * Remove items that have no actions associated with them and optionally remove items that are sections. * * The only exception is the last item in the list which may not have a link but needs to be displayed. * * @param bool $removesections Whether section items should be also removed (only applies when they have an action) */ protected function remove_no_link_items(bool $removesections = true): void { foreach ($this->items as $key => $value) { if (!$value->is_last() && (!$value->has_action() || ($value->type == \navigation_node::TYPE_SECTION && $removesections))) { unset($this->items[$key]); } } $this->items = array_values($this->items); } /** * Remove breadcrumb items that already exist in a given navigation view. * * This method removes the breadcrumb items that have a text => action match in a given navigation view * (primary or secondary). * * @param view $navigationview The navigation view object. */ protected function remove_items_that_exist_in_navigation(view $navigationview): void { // Loop through the navigation view items and create a 'text' => 'action' array which will be later used // to compare whether any of the breadcrumb items matches these pairs. $navigationviewitems = []; foreach ($navigationview->children as $child) { list($childtext, $childaction) = $this->get_node_text_and_action($child); if ($childaction) { $navigationviewitems[$childtext] = $childaction; } } // Loop through the breadcrumb items and if the item's 'text' and 'action' values matches with any of the // existing navigation view items, remove it from the breadcrumbs. foreach ($this->items as $item) { list($itemtext, $itemaction) = $this->get_node_text_and_action($item); if ($itemaction) { if (array_key_exists($itemtext, $navigationviewitems) && $navigationviewitems[$itemtext] === $itemaction) { $this->remove($item->key); } } } } /** * Remove duplicate breadcrumb items. * * This method looks for breadcrumb items that have identical text and action values and removes the first item. */ protected function remove_duplicate_items(): void { $taken = []; // Reverse the order of the items before filtering so that the first occurrence is removed instead of the last. $filtereditems = array_values(array_filter(array_reverse($this->items), function($item) use (&$taken) { list($itemtext, $itemaction) = $this->get_node_text_and_action($item); if ($itemaction) { if (array_key_exists($itemtext, $taken) && $taken[$itemtext] === $itemaction) { return false; } $taken[$itemtext] = $itemaction; } return true; })); // Reverse back the order. $this->items = array_reverse($filtereditems); } /** * Helper function that returns an array of the text and the outputted action url (if exists) for a given * navigation node. * * @param navigation_node $node The navigation node object. * @return array */ protected function get_node_text_and_action(navigation_node $node): array { $text = $node->text instanceof lang_string ? $node->text->out() : $node->text; $action = null; if ($node->has_action()) { if ($node->action instanceof moodle_url) { $action = $node->action->out(); } else if ($node->action instanceof action_link) { $action = $node->action->url->out(); } else { $action = $node->action; } } return [$text, $action]; } } boost/classes/privacy/provider.php 0000604 00000007111 15062070724 0013346 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Privacy Subsystem implementation for theme_boost. * * @package theme_boost * @copyright 2018 Andrew Nicols <andrew@nicols.co.uk> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace theme_boost\privacy; use \core_privacy\local\metadata\collection; defined('MOODLE_INTERNAL') || die(); /** * The boost theme stores a user preference data. * * @copyright 2018 Andrew Nicols <andrew@nicols.co.uk> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class provider implements // This plugin has data. \core_privacy\local\metadata\provider, // This plugin has some sitewide user preferences to export. \core_privacy\local\request\user_preference_provider { /** The user preferences for the course index. */ const DRAWER_OPEN_INDEX = 'drawer-open-index'; /** The user preferences for the blocks drawer. */ const DRAWER_OPEN_BLOCK = 'drawer-open-block'; /** * Returns meta data about this system. * * @param collection $items The initialised item collection to add items to. * @return collection A listing of user data stored through this system. */ public static function get_metadata(collection $items) : collection { $items->add_user_preference(self::DRAWER_OPEN_INDEX, 'privacy:metadata:preference:draweropenindex'); $items->add_user_preference(self::DRAWER_OPEN_BLOCK, 'privacy:metadata:preference:draweropenblock'); return $items; } /** * Store all user preferences for the plugin. * * @param int $userid The userid of the user whose data is to be exported. */ public static function export_user_preferences(int $userid) { $draweropenindexpref = get_user_preferences(self::DRAWER_OPEN_INDEX, null, $userid); if (isset($draweropenindexpref)) { $preferencestring = get_string('privacy:drawerindexclosed', 'theme_boost'); if ($draweropenindexpref == 1) { $preferencestring = get_string('privacy:drawerindexopen', 'theme_boost'); } \core_privacy\local\request\writer::export_user_preference( 'theme_boost', self::DRAWER_OPEN_INDEX, $draweropenindexpref, $preferencestring ); } $draweropenblockpref = get_user_preferences(self::DRAWER_OPEN_BLOCK, null, $userid); if (isset($draweropenblockpref)) { $preferencestring = get_string('privacy:drawerblockclosed', 'theme_boost'); if ($draweropenblockpref == 1) { $preferencestring = get_string('privacy:drawerblockopen', 'theme_boost'); } \core_privacy\local\request\writer::export_user_preference( 'theme_boost', self::DRAWER_OPEN_BLOCK, $draweropenblockpref, $preferencestring ); } } } boost/classes/admin_settingspage_tabs.php 0000604 00000005217 15062070724 0014722 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * @package theme_boost * @copyright 2016 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); /** * @package theme_boost * @copyright 2016 Ryan Wyllie * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class theme_boost_admin_settingspage_tabs extends admin_settingpage { /** @var The tabs */ protected $tabs = array(); /** * Add a tab. * * @param admin_settingpage $tab A tab. */ public function add_tab(admin_settingpage $tab) { foreach ($tab->settings as $setting) { $this->settings->{$setting->name} = $setting; } $this->tabs[] = $tab; return true; } public function add($tab) { return $this->add_tab($tab); } /** * Get tabs. * * @return array */ public function get_tabs() { return $this->tabs; } /** * Generate the HTML output. * * @return string */ public function output_html() { global $OUTPUT; $activetab = optional_param('activetab', '', PARAM_TEXT); $context = array('tabs' => array()); $havesetactive = false; foreach ($this->get_tabs() as $tab) { $active = false; // Default to first tab it not told otherwise. if (empty($activetab) && !$havesetactive) { $active = true; $havesetactive = true; } else if ($activetab === $tab->name) { $active = true; } $context['tabs'][] = array( 'name' => $tab->name, 'displayname' => $tab->visiblename, 'html' => $tab->output_html(), 'active' => $active, ); } if (empty($context['tabs'])) { return ''; } return $OUTPUT->render_from_template('theme_boost/admin_setting_tabs', $context); } } boost/lib.php 0000604 00000013561 15062070724 0007156 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Theme functions. * * @package theme_boost * @copyright 2016 Frédéric Massart - FMCorz.net * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); /** * Post process the CSS tree. * * @param string $tree The CSS tree. * @param theme_config $theme The theme config object. */ function theme_boost_css_tree_post_processor($tree, $theme) { error_log('theme_boost_css_tree_post_processor() is deprecated. Required' . 'prefixes for Bootstrap are now in theme/boost/scss/moodle/prefixes.scss'); $prefixer = new theme_boost\autoprefixer($tree); $prefixer->prefix(); } /** * Inject additional SCSS. * * @param theme_config $theme The theme config object. * @return string */ function theme_boost_get_extra_scss($theme) { $content = ''; $imageurl = $theme->setting_file_url('backgroundimage', 'backgroundimage'); // Sets the background image, and its settings. if (!empty($imageurl)) { $content .= '@media (min-width: 768px) {'; $content .= 'body { '; $content .= "background-image: url('$imageurl'); background-size: cover;"; $content .= ' } }'; } // Sets the login background image. $loginbackgroundimageurl = $theme->setting_file_url('loginbackgroundimage', 'loginbackgroundimage'); if (!empty($loginbackgroundimageurl)) { $content .= 'body.pagelayout-login #page { '; $content .= "background-image: url('$loginbackgroundimageurl'); background-size: cover;"; $content .= ' }'; } // Always return the background image with the scss when we have it. return !empty($theme->settings->scss) ? $theme->settings->scss . ' ' . $content : $content; } /** * Serves any files associated with the theme settings. * * @param stdClass $course * @param stdClass $cm * @param context $context * @param string $filearea * @param array $args * @param bool $forcedownload * @param array $options * @return bool */ function theme_boost_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options = array()) { if ($context->contextlevel == CONTEXT_SYSTEM && ($filearea === 'logo' || $filearea === 'backgroundimage' || $filearea === 'loginbackgroundimage')) { $theme = theme_config::load('boost'); // By default, theme files must be cache-able by both browsers and proxies. if (!array_key_exists('cacheability', $options)) { $options['cacheability'] = 'public'; } return $theme->setting_file_serve($filearea, $args, $forcedownload, $options); } else { send_file_not_found(); } } /** * Get the current user preferences that are available * * @return array[] */ function theme_boost_user_preferences(): array { return [ 'drawer-open-block' => [ 'type' => PARAM_BOOL, 'null' => NULL_NOT_ALLOWED, 'default' => false, 'permissioncallback' => [core_user::class, 'is_current_user'], ], 'drawer-open-index' => [ 'type' => PARAM_BOOL, 'null' => NULL_NOT_ALLOWED, 'default' => true, 'permissioncallback' => [core_user::class, 'is_current_user'], ], ]; } /** * Returns the main SCSS content. * * @param theme_config $theme The theme config object. * @return string */ function theme_boost_get_main_scss_content($theme) { global $CFG; $scss = ''; $filename = !empty($theme->settings->preset) ? $theme->settings->preset : null; $fs = get_file_storage(); $context = context_system::instance(); if ($filename == 'default.scss') { $scss .= file_get_contents($CFG->dirroot . '/theme/boost/scss/preset/default.scss'); } else if ($filename == 'plain.scss') { $scss .= file_get_contents($CFG->dirroot . '/theme/boost/scss/preset/plain.scss'); } else if ($filename && ($presetfile = $fs->get_file($context->id, 'theme_boost', 'preset', 0, '/', $filename))) { $scss .= $presetfile->get_content(); } else { // Safety fallback - maybe new installs etc. $scss .= file_get_contents($CFG->dirroot . '/theme/boost/scss/preset/default.scss'); } return $scss; } /** * Get compiled css. * * @return string compiled css */ function theme_boost_get_precompiled_css() { global $CFG; return file_get_contents($CFG->dirroot . '/theme/boost/style/moodle.css'); } /** * Get SCSS to prepend. * * @param theme_config $theme The theme config object. * @return string */ function theme_boost_get_pre_scss($theme) { global $CFG; $scss = ''; $configurable = [ // Config key => [variableName, ...]. 'brandcolor' => ['primary'], ]; // Prepend variables first. foreach ($configurable as $configkey => $targets) { $value = isset($theme->settings->{$configkey}) ? $theme->settings->{$configkey} : null; if (empty($value)) { continue; } array_map(function($target) use (&$scss, $value) { $scss .= '$' . $target . ': ' . $value . ";\n"; }, (array) $targets); } // Prepend pre-scss. if (!empty($theme->settings->scsspre)) { $scss .= $theme->settings->scsspre; } return $scss; } boost/config.php 0000604 00000014047 15062070724 0007655 0 ustar 00 <?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. /** * Boost config. * * @package theme_boost * @copyright 2016 Frédéric Massart * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ defined('MOODLE_INTERNAL') || die(); require_once(__DIR__ . '/lib.php'); $THEME->name = 'boost'; $THEME->sheets = []; $THEME->editor_sheets = []; $THEME->editor_scss = ['editor']; $THEME->usefallback = true; $THEME->scss = function($theme) { return theme_boost_get_main_scss_content($theme); }; $THEME->layouts = [ // Most backwards compatible layout without the blocks. 'base' => array( 'file' => 'drawers.php', 'regions' => array(), ), // Standard layout with blocks. 'standard' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', ), // Main course page. 'course' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', 'options' => array('langmenu' => true), ), 'coursecategory' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', ), // Part of course, typical for modules - default page layout if $cm specified in require_login(). 'incourse' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', ), // The site home page. 'frontpage' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', 'options' => array('nonavbar' => true), ), // Server administration scripts. 'admin' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', ), // My courses page. 'mycourses' => array( 'file' => 'drawers.php', 'regions' => ['side-pre'], 'defaultregion' => 'side-pre', 'options' => array('nonavbar' => true), ), // My dashboard page. 'mydashboard' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', 'options' => array('nonavbar' => true, 'langmenu' => true), ), // My public page. 'mypublic' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', ), 'login' => array( 'file' => 'login.php', 'regions' => array(), 'options' => array('langmenu' => true), ), // Pages that appear in pop-up windows - no navigation, no blocks, no header and bare activity header. 'popup' => array( 'file' => 'columns1.php', 'regions' => array(), 'options' => array( 'nofooter' => true, 'nonavbar' => true, 'activityheader' => [ 'notitle' => true, 'nocompletion' => true, 'nodescription' => true ] ) ), // No blocks and minimal footer - used for legacy frame layouts only! 'frametop' => array( 'file' => 'columns1.php', 'regions' => array(), 'options' => array( 'nofooter' => true, 'nocoursefooter' => true, 'activityheader' => [ 'nocompletion' => true ] ), ), // Embeded pages, like iframe/object embeded in moodleform - it needs as much space as possible. 'embedded' => array( 'file' => 'embedded.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', ), // Used during upgrade and install, and for the 'This site is undergoing maintenance' message. // This must not have any blocks, links, or API calls that would lead to database or cache interaction. // Please be extremely careful if you are modifying this layout. 'maintenance' => array( 'file' => 'maintenance.php', 'regions' => array(), ), // Should display the content and basic headers only. 'print' => array( 'file' => 'columns1.php', 'regions' => array(), 'options' => array('nofooter' => true, 'nonavbar' => false, 'noactivityheader' => true), ), // The pagelayout used when a redirection is occuring. 'redirect' => array( 'file' => 'embedded.php', 'regions' => array(), ), // The pagelayout used for reports. 'report' => array( 'file' => 'drawers.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre', ), // The pagelayout used for safebrowser and securewindow. 'secure' => array( 'file' => 'secure.php', 'regions' => array('side-pre'), 'defaultregion' => 'side-pre' ) ]; $THEME->parents = []; $THEME->enable_dock = false; $THEME->extrascsscallback = 'theme_boost_get_extra_scss'; $THEME->prescsscallback = 'theme_boost_get_pre_scss'; $THEME->precompiledcsscallback = 'theme_boost_get_precompiled_css'; $THEME->yuicssmodules = array(); $THEME->rendererfactory = 'theme_overridden_renderer_factory'; $THEME->requiredblocks = ''; $THEME->addblockposition = BLOCK_ADDBLOCK_POSITION_FLATNAV; $THEME->iconsystem = \core\output\icon_system::FONTAWESOME; $THEME->haseditswitch = true; $THEME->usescourseindex = true; // By default, all boost theme do not need their titles displayed. $THEME->activityheaderconfig = [ 'notitle' => true ]; boost/upgrade.txt 0000604 00000010654 15062070724 0010067 0 ustar 00 This file describes API changes in /theme/boost information provided here is intended especially for theme designers. === 4.3 === * The $activity-iconcontainer-height and $activity-iconcontainer-width variables have been changed from 50px to 52px. * New SCSS mixin optional_animate to animate an element unless if the user has reduced motion in their preferences. === 4.0 === * Following the adopted standards, breadcrumbs have been removed for pages that reside on the 1st level within a course e.g. participants, grades, settings, reports. * Any custom complex node structures added to the nav tree will now be displayed as a flattened structure within the corresponding secondary navigation. It is dependent on what the first url for the construct. Refer to secondary_test.php:test_add_external_nodes_to_secondary for examples. * New function addblockbutton in the renderer, which generates the new 'Add a block' button. Call this and output it into your templates. * In order to view additional custom nodes, leverage the 'get_overflow_menu_data' which returns url_select if there are nodes available. * In order for existing themes to leverage the changes in the Boost theme, it is recommended to follow the guidelines in the 4.0 docs https://moodledev.io/docs/4.1/devupdate === 3.7 === * Templates and renderers moved to core. * Behat override steps moved to core. Form element template --------------------- A 'wrapperid' has been added to 'templates/core_form/element-template.mustache' to restore unique ids on Boost form element wrappers. This restores the same unique element ids seen on elements in BS2 themes, which were mistakenly dropped when introducing the Boost theme. === 3.5 === The Boost theme now uses Bootstrap 4 Stable (BS4S). We are trying to use as much BS4S classes in MDL Templates to reduce the amount of Moodle CSS. The biggest changes are: JavaScript ---------- * All Bootstrap javascript has been updated. Sass ---- * A number of variables are no longer available in Bootstrap 4 Stable. For now a bs4alpha compatibility file has been added, see scss/bs4alphacompat.scss which translates veriable names from the Alpha version to the stable version. * m-t-* and other spacing utilities should be replaced with mt-*. The units that were used for margins have changed too m-t-1 is now mt-3 m-t-2 is now mt-4 m-t-3 is now mt-5 Grid and Flexbox ---------------- The Boostrap grid uses CSS's flexbox grid to build layouts. New breakpoints for grids have been added: .col-* <576px .col-sm-* >= 576px .col-md-* >= 768px .col-lg-* >= 992px .col-xl-* >= 1200px All usage of '*-xs-*' have been dropped. So what used to be col-xs-6 should now be written as col-6. *-md-* has become *-lg-*, and *-lg-* has become *-xl-*. Typography ---------- Boostrap 4 uses a native font stack that selects the best font-family for each OS and device. For font sizing the browser default root font-size (typically 16px) is used. this variable can be changed using the variable '$font-size-base'. In the default Boost preset we use: "0.9375rem" which computes to 15px on most browser. Presets ------- The structure of preset files have changed. The new structure of a preset file is: // Space to set variables. $font-size-base: 0.9375rem // Import FontAwesome. @import "fontawesome"; // Import All of Bootstrap. @import "bootstrap"; // Import Core moodle CSS. @import "moodle"; // Space to use Bootstrap mixins and extends. .navbar { @include shadow(); } Bootswatches ------------ Bootstrap 4 bootswatches can be imported using the theme/boost/cli/import-bootswatch.php script. Generated bootswatches can be added in the theme boost settings page. Changed Components ------------------ Cards need this structure class='card' class='card-body' This used to be 'card-block' The header.mustache template has been replace by a navbar.mustache template for name consistancy with Bootstrap A new header.mustache template has been created served from core/core_renderer.php. This should be move to core at some point. === 3.4 === * For improved accessibility, the footer links for boost have been changed to use $bg-inverse-link-color (defaults to white) and now have an underline text-decoration. To override the link colour simply set $bg-inverse-link-color in your preset file or theme scss. * To match the new primary colour we are switching to using the UX pallette, which uses a purple colour for info. To override, set $brand-info in your preset file or theme scss. boost/style/moodle.css 0000604 00002677563 15062070724 0011054 0 ustar 00 @charset "UTF-8"; /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ :root, :host { --fa-style-family-brands: "Font Awesome 6 Brands"; --fa-font-brands: normal 400 1em/1 "Font Awesome 6 Brands"; } @font-face { font-family: "Font Awesome 6 Brands"; font-style: normal; font-weight: 400; font-display: block; src: url("[[font:core|fa-brands-400.woff2]]") format("woff2"), url("[[font:core|fa-brands-400.ttf]]") format("truetype"); } .fab, .fa-brands { font-weight: 400; } .fa-monero:before { content: "\f3d0"; } .fa-hooli:before { content: "\f427"; } .fa-yelp:before { content: "\f1e9"; } .fa-cc-visa:before { content: "\f1f0"; } .fa-lastfm:before { content: "\f202"; } .fa-shopware:before { content: "\f5b5"; } .fa-creative-commons-nc:before { content: "\f4e8"; } .fa-aws:before { content: "\f375"; } .fa-redhat:before { content: "\f7bc"; } .fa-yoast:before { content: "\f2b1"; } .fa-cloudflare:before { content: "\e07d"; } .fa-ups:before { content: "\f7e0"; } .fa-wpexplorer:before { content: "\f2de"; } .fa-dyalog:before { content: "\f399"; } .fa-bity:before { content: "\f37a"; } .fa-stackpath:before { content: "\f842"; } .fa-buysellads:before { content: "\f20d"; } .fa-first-order:before { content: "\f2b0"; } .fa-modx:before { content: "\f285"; } .fa-guilded:before { content: "\e07e"; } .fa-vnv:before { content: "\f40b"; } .fa-square-js:before { content: "\f3b9"; } .fa-js-square:before { content: "\f3b9"; } .fa-microsoft:before { content: "\f3ca"; } .fa-qq:before { content: "\f1d6"; } .fa-orcid:before { content: "\f8d2"; } .fa-java:before { content: "\f4e4"; } .fa-invision:before { content: "\f7b0"; } .fa-creative-commons-pd-alt:before { content: "\f4ed"; } .fa-centercode:before { content: "\f380"; } .fa-glide-g:before { content: "\f2a6"; } .fa-drupal:before { content: "\f1a9"; } .fa-hire-a-helper:before { content: "\f3b0"; } .fa-creative-commons-by:before { content: "\f4e7"; } .fa-unity:before { content: "\e049"; } .fa-whmcs:before { content: "\f40d"; } .fa-rocketchat:before { content: "\f3e8"; } .fa-vk:before { content: "\f189"; } .fa-untappd:before { content: "\f405"; } .fa-mailchimp:before { content: "\f59e"; } .fa-css3-alt:before { content: "\f38b"; } .fa-square-reddit:before { content: "\f1a2"; } .fa-reddit-square:before { content: "\f1a2"; } .fa-vimeo-v:before { content: "\f27d"; } .fa-contao:before { content: "\f26d"; } .fa-square-font-awesome:before { content: "\e5ad"; } .fa-deskpro:before { content: "\f38f"; } .fa-sistrix:before { content: "\f3ee"; } .fa-square-instagram:before { content: "\e055"; } .fa-instagram-square:before { content: "\e055"; } .fa-battle-net:before { content: "\f835"; } .fa-the-red-yeti:before { content: "\f69d"; } .fa-square-hacker-news:before { content: "\f3af"; } .fa-hacker-news-square:before { content: "\f3af"; } .fa-edge:before { content: "\f282"; } .fa-napster:before { content: "\f3d2"; } .fa-square-snapchat:before { content: "\f2ad"; } .fa-snapchat-square:before { content: "\f2ad"; } .fa-google-plus-g:before { content: "\f0d5"; } .fa-artstation:before { content: "\f77a"; } .fa-markdown:before { content: "\f60f"; } .fa-sourcetree:before { content: "\f7d3"; } .fa-google-plus:before { content: "\f2b3"; } .fa-diaspora:before { content: "\f791"; } .fa-foursquare:before { content: "\f180"; } .fa-stack-overflow:before { content: "\f16c"; } .fa-github-alt:before { content: "\f113"; } .fa-phoenix-squadron:before { content: "\f511"; } .fa-pagelines:before { content: "\f18c"; } .fa-algolia:before { content: "\f36c"; } .fa-red-river:before { content: "\f3e3"; } .fa-creative-commons-sa:before { content: "\f4ef"; } .fa-safari:before { content: "\f267"; } .fa-google:before { content: "\f1a0"; } .fa-square-font-awesome-stroke:before { content: "\f35c"; } .fa-font-awesome-alt:before { content: "\f35c"; } .fa-atlassian:before { content: "\f77b"; } .fa-linkedin-in:before { content: "\f0e1"; } .fa-digital-ocean:before { content: "\f391"; } .fa-nimblr:before { content: "\f5a8"; } .fa-chromecast:before { content: "\f838"; } .fa-evernote:before { content: "\f839"; } .fa-hacker-news:before { content: "\f1d4"; } .fa-creative-commons-sampling:before { content: "\f4f0"; } .fa-adversal:before { content: "\f36a"; } .fa-creative-commons:before { content: "\f25e"; } .fa-watchman-monitoring:before { content: "\e087"; } .fa-fonticons:before { content: "\f280"; } .fa-weixin:before { content: "\f1d7"; } .fa-shirtsinbulk:before { content: "\f214"; } .fa-codepen:before { content: "\f1cb"; } .fa-git-alt:before { content: "\f841"; } .fa-lyft:before { content: "\f3c3"; } .fa-rev:before { content: "\f5b2"; } .fa-windows:before { content: "\f17a"; } .fa-wizards-of-the-coast:before { content: "\f730"; } .fa-square-viadeo:before { content: "\f2aa"; } .fa-viadeo-square:before { content: "\f2aa"; } .fa-meetup:before { content: "\f2e0"; } .fa-centos:before { content: "\f789"; } .fa-adn:before { content: "\f170"; } .fa-cloudsmith:before { content: "\f384"; } .fa-pied-piper-alt:before { content: "\f1a8"; } .fa-square-dribbble:before { content: "\f397"; } .fa-dribbble-square:before { content: "\f397"; } .fa-codiepie:before { content: "\f284"; } .fa-node:before { content: "\f419"; } .fa-mix:before { content: "\f3cb"; } .fa-steam:before { content: "\f1b6"; } .fa-cc-apple-pay:before { content: "\f416"; } .fa-scribd:before { content: "\f28a"; } .fa-openid:before { content: "\f19b"; } .fa-instalod:before { content: "\e081"; } .fa-expeditedssl:before { content: "\f23e"; } .fa-sellcast:before { content: "\f2da"; } .fa-square-twitter:before { content: "\f081"; } .fa-twitter-square:before { content: "\f081"; } .fa-r-project:before { content: "\f4f7"; } .fa-delicious:before { content: "\f1a5"; } .fa-freebsd:before { content: "\f3a4"; } .fa-vuejs:before { content: "\f41f"; } .fa-accusoft:before { content: "\f369"; } .fa-ioxhost:before { content: "\f208"; } .fa-fonticons-fi:before { content: "\f3a2"; } .fa-app-store:before { content: "\f36f"; } .fa-cc-mastercard:before { content: "\f1f1"; } .fa-itunes-note:before { content: "\f3b5"; } .fa-golang:before { content: "\e40f"; } .fa-kickstarter:before { content: "\f3bb"; } .fa-grav:before { content: "\f2d6"; } .fa-weibo:before { content: "\f18a"; } .fa-uncharted:before { content: "\e084"; } .fa-firstdraft:before { content: "\f3a1"; } .fa-square-youtube:before { content: "\f431"; } .fa-youtube-square:before { content: "\f431"; } .fa-wikipedia-w:before { content: "\f266"; } .fa-wpressr:before { content: "\f3e4"; } .fa-rendact:before { content: "\f3e4"; } .fa-angellist:before { content: "\f209"; } .fa-galactic-republic:before { content: "\f50c"; } .fa-nfc-directional:before { content: "\e530"; } .fa-skype:before { content: "\f17e"; } .fa-joget:before { content: "\f3b7"; } .fa-fedora:before { content: "\f798"; } .fa-stripe-s:before { content: "\f42a"; } .fa-meta:before { content: "\e49b"; } .fa-laravel:before { content: "\f3bd"; } .fa-hotjar:before { content: "\f3b1"; } .fa-bluetooth-b:before { content: "\f294"; } .fa-sticker-mule:before { content: "\f3f7"; } .fa-creative-commons-zero:before { content: "\f4f3"; } .fa-hips:before { content: "\f452"; } .fa-behance:before { content: "\f1b4"; } .fa-reddit:before { content: "\f1a1"; } .fa-discord:before { content: "\f392"; } .fa-chrome:before { content: "\f268"; } .fa-app-store-ios:before { content: "\f370"; } .fa-cc-discover:before { content: "\f1f2"; } .fa-wpbeginner:before { content: "\f297"; } .fa-confluence:before { content: "\f78d"; } .fa-mdb:before { content: "\f8ca"; } .fa-dochub:before { content: "\f394"; } .fa-accessible-icon:before { content: "\f368"; } .fa-ebay:before { content: "\f4f4"; } .fa-amazon:before { content: "\f270"; } .fa-unsplash:before { content: "\e07c"; } .fa-yarn:before { content: "\f7e3"; } .fa-square-steam:before { content: "\f1b7"; } .fa-steam-square:before { content: "\f1b7"; } .fa-500px:before { content: "\f26e"; } .fa-square-vimeo:before { content: "\f194"; } .fa-vimeo-square:before { content: "\f194"; } .fa-asymmetrik:before { content: "\f372"; } .fa-font-awesome:before { content: "\f2b4"; } .fa-font-awesome-flag:before { content: "\f2b4"; } .fa-font-awesome-logo-full:before { content: "\f2b4"; } .fa-gratipay:before { content: "\f184"; } .fa-apple:before { content: "\f179"; } .fa-hive:before { content: "\e07f"; } .fa-gitkraken:before { content: "\f3a6"; } .fa-keybase:before { content: "\f4f5"; } .fa-apple-pay:before { content: "\f415"; } .fa-padlet:before { content: "\e4a0"; } .fa-amazon-pay:before { content: "\f42c"; } .fa-square-github:before { content: "\f092"; } .fa-github-square:before { content: "\f092"; } .fa-stumbleupon:before { content: "\f1a4"; } .fa-fedex:before { content: "\f797"; } .fa-phoenix-framework:before { content: "\f3dc"; } .fa-shopify:before { content: "\e057"; } .fa-neos:before { content: "\f612"; } .fa-hackerrank:before { content: "\f5f7"; } .fa-researchgate:before { content: "\f4f8"; } .fa-swift:before { content: "\f8e1"; } .fa-angular:before { content: "\f420"; } .fa-speakap:before { content: "\f3f3"; } .fa-angrycreative:before { content: "\f36e"; } .fa-y-combinator:before { content: "\f23b"; } .fa-empire:before { content: "\f1d1"; } .fa-envira:before { content: "\f299"; } .fa-square-gitlab:before { content: "\e5ae"; } .fa-gitlab-square:before { content: "\e5ae"; } .fa-studiovinari:before { content: "\f3f8"; } .fa-pied-piper:before { content: "\f2ae"; } .fa-wordpress:before { content: "\f19a"; } .fa-product-hunt:before { content: "\f288"; } .fa-firefox:before { content: "\f269"; } .fa-linode:before { content: "\f2b8"; } .fa-goodreads:before { content: "\f3a8"; } .fa-square-odnoklassniki:before { content: "\f264"; } .fa-odnoklassniki-square:before { content: "\f264"; } .fa-jsfiddle:before { content: "\f1cc"; } .fa-sith:before { content: "\f512"; } .fa-themeisle:before { content: "\f2b2"; } .fa-page4:before { content: "\f3d7"; } .fa-hashnode:before { content: "\e499"; } .fa-react:before { content: "\f41b"; } .fa-cc-paypal:before { content: "\f1f4"; } .fa-squarespace:before { content: "\f5be"; } .fa-cc-stripe:before { content: "\f1f5"; } .fa-creative-commons-share:before { content: "\f4f2"; } .fa-bitcoin:before { content: "\f379"; } .fa-keycdn:before { content: "\f3ba"; } .fa-opera:before { content: "\f26a"; } .fa-itch-io:before { content: "\f83a"; } .fa-umbraco:before { content: "\f8e8"; } .fa-galactic-senate:before { content: "\f50d"; } .fa-ubuntu:before { content: "\f7df"; } .fa-draft2digital:before { content: "\f396"; } .fa-stripe:before { content: "\f429"; } .fa-houzz:before { content: "\f27c"; } .fa-gg:before { content: "\f260"; } .fa-dhl:before { content: "\f790"; } .fa-square-pinterest:before { content: "\f0d3"; } .fa-pinterest-square:before { content: "\f0d3"; } .fa-xing:before { content: "\f168"; } .fa-blackberry:before { content: "\f37b"; } .fa-creative-commons-pd:before { content: "\f4ec"; } .fa-playstation:before { content: "\f3df"; } .fa-quinscape:before { content: "\f459"; } .fa-less:before { content: "\f41d"; } .fa-blogger-b:before { content: "\f37d"; } .fa-opencart:before { content: "\f23d"; } .fa-vine:before { content: "\f1ca"; } .fa-paypal:before { content: "\f1ed"; } .fa-gitlab:before { content: "\f296"; } .fa-typo3:before { content: "\f42b"; } .fa-reddit-alien:before { content: "\f281"; } .fa-yahoo:before { content: "\f19e"; } .fa-dailymotion:before { content: "\e052"; } .fa-affiliatetheme:before { content: "\f36b"; } .fa-pied-piper-pp:before { content: "\f1a7"; } .fa-bootstrap:before { content: "\f836"; } .fa-odnoklassniki:before { content: "\f263"; } .fa-nfc-symbol:before { content: "\e531"; } .fa-ethereum:before { content: "\f42e"; } .fa-speaker-deck:before { content: "\f83c"; } .fa-creative-commons-nc-eu:before { content: "\f4e9"; } .fa-patreon:before { content: "\f3d9"; } .fa-avianex:before { content: "\f374"; } .fa-ello:before { content: "\f5f1"; } .fa-gofore:before { content: "\f3a7"; } .fa-bimobject:before { content: "\f378"; } .fa-facebook-f:before { content: "\f39e"; } .fa-square-google-plus:before { content: "\f0d4"; } .fa-google-plus-square:before { content: "\f0d4"; } .fa-mandalorian:before { content: "\f50f"; } .fa-first-order-alt:before { content: "\f50a"; } .fa-osi:before { content: "\f41a"; } .fa-google-wallet:before { content: "\f1ee"; } .fa-d-and-d-beyond:before { content: "\f6ca"; } .fa-periscope:before { content: "\f3da"; } .fa-fulcrum:before { content: "\f50b"; } .fa-cloudscale:before { content: "\f383"; } .fa-forumbee:before { content: "\f211"; } .fa-mizuni:before { content: "\f3cc"; } .fa-schlix:before { content: "\f3ea"; } .fa-square-xing:before { content: "\f169"; } .fa-xing-square:before { content: "\f169"; } .fa-bandcamp:before { content: "\f2d5"; } .fa-wpforms:before { content: "\f298"; } .fa-cloudversify:before { content: "\f385"; } .fa-usps:before { content: "\f7e1"; } .fa-megaport:before { content: "\f5a3"; } .fa-magento:before { content: "\f3c4"; } .fa-spotify:before { content: "\f1bc"; } .fa-optin-monster:before { content: "\f23c"; } .fa-fly:before { content: "\f417"; } .fa-aviato:before { content: "\f421"; } .fa-itunes:before { content: "\f3b4"; } .fa-cuttlefish:before { content: "\f38c"; } .fa-blogger:before { content: "\f37c"; } .fa-flickr:before { content: "\f16e"; } .fa-viber:before { content: "\f409"; } .fa-soundcloud:before { content: "\f1be"; } .fa-digg:before { content: "\f1a6"; } .fa-tencent-weibo:before { content: "\f1d5"; } .fa-symfony:before { content: "\f83d"; } .fa-maxcdn:before { content: "\f136"; } .fa-etsy:before { content: "\f2d7"; } .fa-facebook-messenger:before { content: "\f39f"; } .fa-audible:before { content: "\f373"; } .fa-think-peaks:before { content: "\f731"; } .fa-bilibili:before { content: "\e3d9"; } .fa-erlang:before { content: "\f39d"; } .fa-cotton-bureau:before { content: "\f89e"; } .fa-dashcube:before { content: "\f210"; } .fa-42-group:before { content: "\e080"; } .fa-innosoft:before { content: "\e080"; } .fa-stack-exchange:before { content: "\f18d"; } .fa-elementor:before { content: "\f430"; } .fa-square-pied-piper:before { content: "\e01e"; } .fa-pied-piper-square:before { content: "\e01e"; } .fa-creative-commons-nd:before { content: "\f4eb"; } .fa-palfed:before { content: "\f3d8"; } .fa-superpowers:before { content: "\f2dd"; } .fa-resolving:before { content: "\f3e7"; } .fa-xbox:before { content: "\f412"; } .fa-searchengin:before { content: "\f3eb"; } .fa-tiktok:before { content: "\e07b"; } .fa-square-facebook:before { content: "\f082"; } .fa-facebook-square:before { content: "\f082"; } .fa-renren:before { content: "\f18b"; } .fa-linux:before { content: "\f17c"; } .fa-glide:before { content: "\f2a5"; } .fa-linkedin:before { content: "\f08c"; } .fa-hubspot:before { content: "\f3b2"; } .fa-deploydog:before { content: "\f38e"; } .fa-twitch:before { content: "\f1e8"; } .fa-ravelry:before { content: "\f2d9"; } .fa-mixer:before { content: "\e056"; } .fa-square-lastfm:before { content: "\f203"; } .fa-lastfm-square:before { content: "\f203"; } .fa-vimeo:before { content: "\f40a"; } .fa-mendeley:before { content: "\f7b3"; } .fa-uniregistry:before { content: "\f404"; } .fa-figma:before { content: "\f799"; } .fa-creative-commons-remix:before { content: "\f4ee"; } .fa-cc-amazon-pay:before { content: "\f42d"; } .fa-dropbox:before { content: "\f16b"; } .fa-instagram:before { content: "\f16d"; } .fa-cmplid:before { content: "\e360"; } .fa-facebook:before { content: "\f09a"; } .fa-gripfire:before { content: "\f3ac"; } .fa-jedi-order:before { content: "\f50e"; } .fa-uikit:before { content: "\f403"; } .fa-fort-awesome-alt:before { content: "\f3a3"; } .fa-phabricator:before { content: "\f3db"; } .fa-ussunnah:before { content: "\f407"; } .fa-earlybirds:before { content: "\f39a"; } .fa-trade-federation:before { content: "\f513"; } .fa-autoprefixer:before { content: "\f41c"; } .fa-whatsapp:before { content: "\f232"; } .fa-slideshare:before { content: "\f1e7"; } .fa-google-play:before { content: "\f3ab"; } .fa-viadeo:before { content: "\f2a9"; } .fa-line:before { content: "\f3c0"; } .fa-google-drive:before { content: "\f3aa"; } .fa-servicestack:before { content: "\f3ec"; } .fa-simplybuilt:before { content: "\f215"; } .fa-bitbucket:before { content: "\f171"; } .fa-imdb:before { content: "\f2d8"; } .fa-deezer:before { content: "\e077"; } .fa-raspberry-pi:before { content: "\f7bb"; } .fa-jira:before { content: "\f7b1"; } .fa-docker:before { content: "\f395"; } .fa-screenpal:before { content: "\e570"; } .fa-bluetooth:before { content: "\f293"; } .fa-gitter:before { content: "\f426"; } .fa-d-and-d:before { content: "\f38d"; } .fa-microblog:before { content: "\e01a"; } .fa-cc-diners-club:before { content: "\f24c"; } .fa-gg-circle:before { content: "\f261"; } .fa-pied-piper-hat:before { content: "\f4e5"; } .fa-kickstarter-k:before { content: "\f3bc"; } .fa-yandex:before { content: "\f413"; } .fa-readme:before { content: "\f4d5"; } .fa-html5:before { content: "\f13b"; } .fa-sellsy:before { content: "\f213"; } .fa-sass:before { content: "\f41e"; } .fa-wirsindhandwerk:before { content: "\e2d0"; } .fa-wsh:before { content: "\e2d0"; } .fa-buromobelexperte:before { content: "\f37f"; } .fa-salesforce:before { content: "\f83b"; } .fa-octopus-deploy:before { content: "\e082"; } .fa-medapps:before { content: "\f3c6"; } .fa-ns8:before { content: "\f3d5"; } .fa-pinterest-p:before { content: "\f231"; } .fa-apper:before { content: "\f371"; } .fa-fort-awesome:before { content: "\f286"; } .fa-waze:before { content: "\f83f"; } .fa-cc-jcb:before { content: "\f24b"; } .fa-snapchat:before { content: "\f2ab"; } .fa-snapchat-ghost:before { content: "\f2ab"; } .fa-fantasy-flight-games:before { content: "\f6dc"; } .fa-rust:before { content: "\e07a"; } .fa-wix:before { content: "\f5cf"; } .fa-square-behance:before { content: "\f1b5"; } .fa-behance-square:before { content: "\f1b5"; } .fa-supple:before { content: "\f3f9"; } .fa-rebel:before { content: "\f1d0"; } .fa-css3:before { content: "\f13c"; } .fa-staylinked:before { content: "\f3f5"; } .fa-kaggle:before { content: "\f5fa"; } .fa-space-awesome:before { content: "\e5ac"; } .fa-deviantart:before { content: "\f1bd"; } .fa-cpanel:before { content: "\f388"; } .fa-goodreads-g:before { content: "\f3a9"; } .fa-square-git:before { content: "\f1d2"; } .fa-git-square:before { content: "\f1d2"; } .fa-square-tumblr:before { content: "\f174"; } .fa-tumblr-square:before { content: "\f174"; } .fa-trello:before { content: "\f181"; } .fa-creative-commons-nc-jp:before { content: "\f4ea"; } .fa-get-pocket:before { content: "\f265"; } .fa-perbyte:before { content: "\e083"; } .fa-grunt:before { content: "\f3ad"; } .fa-weebly:before { content: "\f5cc"; } .fa-connectdevelop:before { content: "\f20e"; } .fa-leanpub:before { content: "\f212"; } .fa-black-tie:before { content: "\f27e"; } .fa-themeco:before { content: "\f5c6"; } .fa-python:before { content: "\f3e2"; } .fa-android:before { content: "\f17b"; } .fa-bots:before { content: "\e340"; } .fa-free-code-camp:before { content: "\f2c5"; } .fa-hornbill:before { content: "\f592"; } .fa-js:before { content: "\f3b8"; } .fa-ideal:before { content: "\e013"; } .fa-git:before { content: "\f1d3"; } .fa-dev:before { content: "\f6cc"; } .fa-sketch:before { content: "\f7c6"; } .fa-yandex-international:before { content: "\f414"; } .fa-cc-amex:before { content: "\f1f3"; } .fa-uber:before { content: "\f402"; } .fa-github:before { content: "\f09b"; } .fa-php:before { content: "\f457"; } .fa-alipay:before { content: "\f642"; } .fa-youtube:before { content: "\f167"; } .fa-skyatlas:before { content: "\f216"; } .fa-firefox-browser:before { content: "\e007"; } .fa-replyd:before { content: "\f3e6"; } .fa-suse:before { content: "\f7d6"; } .fa-jenkins:before { content: "\f3b6"; } .fa-twitter:before { content: "\f099"; } .fa-rockrms:before { content: "\f3e9"; } .fa-pinterest:before { content: "\f0d2"; } .fa-buffer:before { content: "\f837"; } .fa-npm:before { content: "\f3d4"; } .fa-yammer:before { content: "\f840"; } .fa-btc:before { content: "\f15a"; } .fa-dribbble:before { content: "\f17d"; } .fa-stumbleupon-circle:before { content: "\f1a3"; } .fa-internet-explorer:before { content: "\f26b"; } .fa-stubber:before { content: "\e5c7"; } .fa-telegram:before { content: "\f2c6"; } .fa-telegram-plane:before { content: "\f2c6"; } .fa-old-republic:before { content: "\f510"; } .fa-odysee:before { content: "\e5c6"; } .fa-square-whatsapp:before { content: "\f40c"; } .fa-whatsapp-square:before { content: "\f40c"; } .fa-node-js:before { content: "\f3d3"; } .fa-edge-legacy:before { content: "\e078"; } .fa-slack:before { content: "\f198"; } .fa-slack-hash:before { content: "\f198"; } .fa-medrt:before { content: "\f3c8"; } .fa-usb:before { content: "\f287"; } .fa-tumblr:before { content: "\f173"; } .fa-vaadin:before { content: "\f408"; } .fa-quora:before { content: "\f2c4"; } .fa-reacteurope:before { content: "\f75d"; } .fa-medium:before { content: "\f23a"; } .fa-medium-m:before { content: "\f23a"; } .fa-amilia:before { content: "\f36d"; } .fa-mixcloud:before { content: "\f289"; } .fa-flipboard:before { content: "\f44d"; } .fa-viacoin:before { content: "\f237"; } .fa-critical-role:before { content: "\f6c9"; } .fa-sitrox:before { content: "\e44a"; } .fa-discourse:before { content: "\f393"; } .fa-joomla:before { content: "\f1aa"; } .fa-mastodon:before { content: "\f4f6"; } .fa-airbnb:before { content: "\f834"; } .fa-wolf-pack-battalion:before { content: "\f514"; } .fa-buy-n-large:before { content: "\f8a6"; } .fa-gulp:before { content: "\f3ae"; } .fa-creative-commons-sampling-plus:before { content: "\f4f1"; } .fa-strava:before { content: "\f428"; } .fa-ember:before { content: "\f423"; } .fa-canadian-maple-leaf:before { content: "\f785"; } .fa-teamspeak:before { content: "\f4f9"; } .fa-pushed:before { content: "\f3e1"; } .fa-wordpress-simple:before { content: "\f411"; } .fa-nutritionix:before { content: "\f3d6"; } .fa-wodu:before { content: "\e088"; } .fa-google-pay:before { content: "\e079"; } .fa-intercom:before { content: "\f7af"; } .fa-zhihu:before { content: "\f63f"; } .fa-korvue:before { content: "\f42f"; } .fa-pix:before { content: "\e43a"; } .fa-steam-symbol:before { content: "\f3f6"; } /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ :root, :host { --fa-style-family-classic: "Font Awesome 6 Free"; --fa-font-regular: normal 400 1em/1 "Font Awesome 6 Free"; } @font-face { font-family: "Font Awesome 6 Free"; font-style: normal; font-weight: 400; font-display: block; src: url("[[font:core|fa-regular-400.woff2]]") format("woff2"), url("[[font:core|fa-regular-400.ttf]]") format("truetype"); } .far, .fa-regular, .content-bank-container.view-grid .cb-unlisted::after { font-weight: 400; } /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ :root, :host { --fa-style-family-classic: "Font Awesome 6 Free"; --fa-font-solid: normal 900 1em/1 "Font Awesome 6 Free"; } @font-face { font-family: "Font Awesome 6 Free"; font-style: normal; font-weight: 900; font-display: block; src: url("[[font:core|fa-solid-900.woff2]]") format("woff2"), url("[[font:core|fa-solid-900.ttf]]") format("truetype"); } .fas, .fa-solid, .moremenu .dropdown-item[aria-current=true]:before, .moremenu .dropdown-item.active:before, .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item.carousel-navigation-link::after, .navbar.fixed-top .usermenu .dropdown-menu .submenu .items .dropdown-item[aria-current=true]::before, .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item.carousel-navigation-link::after, .toast.toast-warning .toast-body:before, .toast.toast-info .toast-body:before, .toast.toast-danger .toast-body:before, .toast.toast-success .toast-body:before, .editing .editinprogress:after, .dir-rtl .block_settings .block_tree [aria-expanded=false] > p:before, .dir-rtl .block_navigation .block_tree [aria-expanded=false] > p:before, .block_settings .block_tree [aria-expanded=false] > p:before, .block_navigation .block_tree [aria-expanded=false] > p:before, .block_settings .block_tree [aria-expanded=true] > p:before, .block_navigation .block_tree [aria-expanded=true] > p:before, .dropdown-item[aria-current=true]:before, .dropdown-item[aria-selected=true]:before, .dir-rtl .action-menu .dropdown-subpanel .dropdown-item::after, .action-menu .dropdown-subpanel .dropdown-item::after, .dropup .dropdown-toggle::after, .dropright .dropdown-toggle::after, .dropleft .dropdown-toggle::before, .dropdown-toggle::after { font-weight: 900; } /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ .fa.fa-glass:before { content: "\f000"; } .fa.fa-envelope-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-envelope-o:before { content: "\f0e0"; } .fa.fa-star-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-star-o:before { content: "\f005"; } .fa.fa-remove:before { content: "\f00d"; } .fa.fa-close:before { content: "\f00d"; } .fa.fa-gear:before { content: "\f013"; } .fa.fa-trash-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-trash-o:before { content: "\f2ed"; } .fa.fa-home:before { content: "\f015"; } .fa.fa-file-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-o:before { content: "\f15b"; } .fa.fa-clock-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-clock-o:before { content: "\f017"; } .fa.fa-arrow-circle-o-down { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-arrow-circle-o-down:before { content: "\f358"; } .fa.fa-arrow-circle-o-up { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-arrow-circle-o-up:before { content: "\f35b"; } .fa.fa-play-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-play-circle-o:before { content: "\f144"; } .fa.fa-repeat:before { content: "\f01e"; } .fa.fa-rotate-right:before { content: "\f01e"; } .fa.fa-refresh:before { content: "\f021"; } .fa.fa-list-alt { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-list-alt:before { content: "\f022"; } .fa.fa-dedent:before { content: "\f03b"; } .fa.fa-video-camera:before { content: "\f03d"; } .fa.fa-picture-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-picture-o:before { content: "\f03e"; } .fa.fa-photo { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-photo:before { content: "\f03e"; } .fa.fa-image { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-image:before { content: "\f03e"; } .fa.fa-map-marker:before { content: "\f3c5"; } .fa.fa-pencil-square-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-pencil-square-o:before { content: "\f044"; } .fa.fa-edit { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-edit:before { content: "\f044"; } .fa.fa-share-square-o:before { content: "\f14d"; } .fa.fa-check-square-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-check-square-o:before { content: "\f14a"; } .fa.fa-arrows:before { content: "\f0b2"; } .fa.fa-times-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-times-circle-o:before { content: "\f057"; } .fa.fa-check-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-check-circle-o:before { content: "\f058"; } .fa.fa-mail-forward:before { content: "\f064"; } .fa.fa-expand:before { content: "\f424"; } .fa.fa-compress:before { content: "\f422"; } .fa.fa-eye { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-eye-slash { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-warning:before { content: "\f071"; } .fa.fa-calendar:before { content: "\f073"; } .fa.fa-arrows-v:before { content: "\f338"; } .fa.fa-arrows-h:before { content: "\f337"; } .fa.fa-bar-chart:before { content: "\e0e3"; } .fa.fa-bar-chart-o:before { content: "\e0e3"; } .fa.fa-twitter-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-twitter-square:before { content: "\f081"; } .fa.fa-facebook-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-facebook-square:before { content: "\f082"; } .fa.fa-gears:before { content: "\f085"; } .fa.fa-thumbs-o-up { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-thumbs-o-up:before { content: "\f164"; } .fa.fa-thumbs-o-down { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-thumbs-o-down:before { content: "\f165"; } .fa.fa-heart-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-heart-o:before { content: "\f004"; } .fa.fa-sign-out:before { content: "\f2f5"; } .fa.fa-linkedin-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-linkedin-square:before { content: "\f08c"; } .fa.fa-thumb-tack:before { content: "\f08d"; } .fa.fa-external-link:before { content: "\f35d"; } .fa.fa-sign-in:before { content: "\f2f6"; } .fa.fa-github-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-github-square:before { content: "\f092"; } .fa.fa-lemon-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-lemon-o:before { content: "\f094"; } .fa.fa-square-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-square-o:before { content: "\f0c8"; } .fa.fa-bookmark-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-bookmark-o:before { content: "\f02e"; } .fa.fa-twitter { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-facebook { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-facebook:before { content: "\f39e"; } .fa.fa-facebook-f { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-facebook-f:before { content: "\f39e"; } .fa.fa-github { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-credit-card { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-feed:before { content: "\f09e"; } .fa.fa-hdd-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hdd-o:before { content: "\f0a0"; } .fa.fa-hand-o-right { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-o-right:before { content: "\f0a4"; } .fa.fa-hand-o-left { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-o-left:before { content: "\f0a5"; } .fa.fa-hand-o-up { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-o-up:before { content: "\f0a6"; } .fa.fa-hand-o-down { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-o-down:before { content: "\f0a7"; } .fa.fa-globe:before { content: "\f57d"; } .fa.fa-tasks:before { content: "\f828"; } .fa.fa-arrows-alt:before { content: "\f31e"; } .fa.fa-group:before { content: "\f0c0"; } .fa.fa-chain:before { content: "\f0c1"; } .fa.fa-cut:before { content: "\f0c4"; } .fa.fa-files-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-files-o:before { content: "\f0c5"; } .fa.fa-floppy-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-floppy-o:before { content: "\f0c7"; } .fa.fa-save { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-save:before { content: "\f0c7"; } .fa.fa-navicon:before { content: "\f0c9"; } .fa.fa-reorder:before { content: "\f0c9"; } .fa.fa-magic:before { content: "\e2ca"; } .fa.fa-pinterest { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-pinterest-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-pinterest-square:before { content: "\f0d3"; } .fa.fa-google-plus-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-google-plus-square:before { content: "\f0d4"; } .fa.fa-google-plus { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-google-plus:before { content: "\f0d5"; } .fa.fa-money:before { content: "\f3d1"; } .fa.fa-unsorted:before { content: "\f0dc"; } .fa.fa-sort-desc:before { content: "\f0dd"; } .fa.fa-sort-asc:before { content: "\f0de"; } .fa.fa-linkedin { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-linkedin:before { content: "\f0e1"; } .fa.fa-rotate-left:before { content: "\f0e2"; } .fa.fa-legal:before { content: "\f0e3"; } .fa.fa-tachometer:before { content: "\f625"; } .fa.fa-dashboard:before { content: "\f625"; } .fa.fa-comment-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-comment-o:before { content: "\f075"; } .fa.fa-comments-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-comments-o:before { content: "\f086"; } .fa.fa-flash:before { content: "\f0e7"; } .fa.fa-clipboard:before { content: "\f0ea"; } .fa.fa-lightbulb-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-lightbulb-o:before { content: "\f0eb"; } .fa.fa-exchange:before { content: "\f362"; } .fa.fa-cloud-download:before { content: "\f0ed"; } .fa.fa-cloud-upload:before { content: "\f0ee"; } .fa.fa-bell-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-bell-o:before { content: "\f0f3"; } .fa.fa-cutlery:before { content: "\f2e7"; } .fa.fa-file-text-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-text-o:before { content: "\f15c"; } .fa.fa-building-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-building-o:before { content: "\f1ad"; } .fa.fa-hospital-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hospital-o:before { content: "\f0f8"; } .fa.fa-tablet:before { content: "\f3fa"; } .fa.fa-mobile:before { content: "\f3cd"; } .fa.fa-mobile-phone:before { content: "\f3cd"; } .fa.fa-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-circle-o:before { content: "\f111"; } .fa.fa-mail-reply:before { content: "\f3e5"; } .fa.fa-github-alt { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-folder-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-folder-o:before { content: "\f07b"; } .fa.fa-folder-open-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-folder-open-o:before { content: "\f07c"; } .fa.fa-smile-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-smile-o:before { content: "\f118"; } .fa.fa-frown-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-frown-o:before { content: "\f119"; } .fa.fa-meh-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-meh-o:before { content: "\f11a"; } .fa.fa-keyboard-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-keyboard-o:before { content: "\f11c"; } .fa.fa-flag-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-flag-o:before { content: "\f024"; } .fa.fa-mail-reply-all:before { content: "\f122"; } .fa.fa-star-half-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-star-half-o:before { content: "\f5c0"; } .fa.fa-star-half-empty { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-star-half-empty:before { content: "\f5c0"; } .fa.fa-star-half-full { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-star-half-full:before { content: "\f5c0"; } .fa.fa-code-fork:before { content: "\f126"; } .fa.fa-chain-broken:before { content: "\f127"; } .fa.fa-unlink:before { content: "\f127"; } .fa.fa-calendar-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-calendar-o:before { content: "\f133"; } .fa.fa-maxcdn { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-html5 { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-css3 { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-unlock-alt:before { content: "\f09c"; } .fa.fa-minus-square-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-minus-square-o:before { content: "\f146"; } .fa.fa-level-up:before { content: "\f3bf"; } .fa.fa-level-down:before { content: "\f3be"; } .fa.fa-pencil-square:before { content: "\f14b"; } .fa.fa-external-link-square:before { content: "\f360"; } .fa.fa-compass { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-caret-square-o-down { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-caret-square-o-down:before { content: "\f150"; } .fa.fa-toggle-down { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-toggle-down:before { content: "\f150"; } .fa.fa-caret-square-o-up { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-caret-square-o-up:before { content: "\f151"; } .fa.fa-toggle-up { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-toggle-up:before { content: "\f151"; } .fa.fa-caret-square-o-right { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-caret-square-o-right:before { content: "\f152"; } .fa.fa-toggle-right { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-toggle-right:before { content: "\f152"; } .fa.fa-eur:before { content: "\f153"; } .fa.fa-euro:before { content: "\f153"; } .fa.fa-gbp:before { content: "\f154"; } .fa.fa-usd:before { content: "\$"; } .fa.fa-dollar:before { content: "\$"; } .fa.fa-inr:before { content: "\e1bc"; } .fa.fa-rupee:before { content: "\e1bc"; } .fa.fa-jpy:before { content: "\f157"; } .fa.fa-cny:before { content: "\f157"; } .fa.fa-rmb:before { content: "\f157"; } .fa.fa-yen:before { content: "\f157"; } .fa.fa-rub:before { content: "\f158"; } .fa.fa-ruble:before { content: "\f158"; } .fa.fa-rouble:before { content: "\f158"; } .fa.fa-krw:before { content: "\f159"; } .fa.fa-won:before { content: "\f159"; } .fa.fa-btc { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-bitcoin { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-bitcoin:before { content: "\f15a"; } .fa.fa-file-text:before { content: "\f15c"; } .fa.fa-sort-alpha-asc:before { content: "\f15d"; } .fa.fa-sort-alpha-desc:before { content: "\f881"; } .fa.fa-sort-amount-asc:before { content: "\f884"; } .fa.fa-sort-amount-desc:before { content: "\f160"; } .fa.fa-sort-numeric-asc:before { content: "\f162"; } .fa.fa-sort-numeric-desc:before { content: "\f886"; } .fa.fa-youtube-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-youtube-square:before { content: "\f431"; } .fa.fa-youtube { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-xing { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-xing-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-xing-square:before { content: "\f169"; } .fa.fa-youtube-play { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-youtube-play:before { content: "\f167"; } .fa.fa-dropbox { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-stack-overflow { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-instagram { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-flickr { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-adn { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-bitbucket { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-bitbucket-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-bitbucket-square:before { content: "\f171"; } .fa.fa-tumblr { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-tumblr-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-tumblr-square:before { content: "\f174"; } .fa.fa-long-arrow-down:before { content: "\f309"; } .fa.fa-long-arrow-up:before { content: "\f30c"; } .fa.fa-long-arrow-left:before { content: "\f30a"; } .fa.fa-long-arrow-right:before { content: "\f30b"; } .fa.fa-apple { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-windows { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-android { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-linux { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-dribbble { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-skype { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-foursquare { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-trello { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-gratipay { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-gittip { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-gittip:before { content: "\f184"; } .fa.fa-sun-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-sun-o:before { content: "\f185"; } .fa.fa-moon-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-moon-o:before { content: "\f186"; } .fa.fa-vk { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-weibo { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-renren { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-pagelines { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-stack-exchange { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-arrow-circle-o-right { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-arrow-circle-o-right:before { content: "\f35a"; } .fa.fa-arrow-circle-o-left { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-arrow-circle-o-left:before { content: "\f359"; } .fa.fa-caret-square-o-left { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-caret-square-o-left:before { content: "\f191"; } .fa.fa-toggle-left { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-toggle-left:before { content: "\f191"; } .fa.fa-dot-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-dot-circle-o:before { content: "\f192"; } .fa.fa-vimeo-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-vimeo-square:before { content: "\f194"; } .fa.fa-try:before { content: "\e2bb"; } .fa.fa-turkish-lira:before { content: "\e2bb"; } .fa.fa-plus-square-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-plus-square-o:before { content: "\f0fe"; } .fa.fa-slack { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wordpress { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-openid { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-institution:before { content: "\f19c"; } .fa.fa-bank:before { content: "\f19c"; } .fa.fa-mortar-board:before { content: "\f19d"; } .fa.fa-yahoo { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-google { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-reddit { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-reddit-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-reddit-square:before { content: "\f1a2"; } .fa.fa-stumbleupon-circle { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-stumbleupon { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-delicious { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-digg { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-pied-piper-pp { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-pied-piper-alt { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-drupal { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-joomla { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-behance { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-behance-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-behance-square:before { content: "\f1b5"; } .fa.fa-steam { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-steam-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-steam-square:before { content: "\f1b7"; } .fa.fa-automobile:before { content: "\f1b9"; } .fa.fa-cab:before { content: "\f1ba"; } .fa.fa-spotify { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-deviantart { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-soundcloud { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-file-pdf-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-pdf-o:before { content: "\f1c1"; } .fa.fa-file-word-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-word-o:before { content: "\f1c2"; } .fa.fa-file-excel-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-excel-o:before { content: "\f1c3"; } .fa.fa-file-powerpoint-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-powerpoint-o:before { content: "\f1c4"; } .fa.fa-file-image-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-image-o:before { content: "\f1c5"; } .fa.fa-file-photo-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-photo-o:before { content: "\f1c5"; } .fa.fa-file-picture-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-picture-o:before { content: "\f1c5"; } .fa.fa-file-archive-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-archive-o:before { content: "\f1c6"; } .fa.fa-file-zip-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-zip-o:before { content: "\f1c6"; } .fa.fa-file-audio-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-audio-o:before { content: "\f1c7"; } .fa.fa-file-sound-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-sound-o:before { content: "\f1c7"; } .fa.fa-file-video-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-video-o:before { content: "\f1c8"; } .fa.fa-file-movie-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-movie-o:before { content: "\f1c8"; } .fa.fa-file-code-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-file-code-o:before { content: "\f1c9"; } .fa.fa-vine { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-codepen { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-jsfiddle { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-life-bouy:before { content: "\f1cd"; } .fa.fa-life-buoy:before { content: "\f1cd"; } .fa.fa-life-saver:before { content: "\f1cd"; } .fa.fa-support:before { content: "\f1cd"; } .fa.fa-circle-o-notch:before { content: "\f1ce"; } .fa.fa-rebel { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-ra { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-ra:before { content: "\f1d0"; } .fa.fa-resistance { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-resistance:before { content: "\f1d0"; } .fa.fa-empire { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-ge { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-ge:before { content: "\f1d1"; } .fa.fa-git-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-git-square:before { content: "\f1d2"; } .fa.fa-git { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-hacker-news { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-y-combinator-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-y-combinator-square:before { content: "\f1d4"; } .fa.fa-yc-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-yc-square:before { content: "\f1d4"; } .fa.fa-tencent-weibo { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-qq { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-weixin { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wechat { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wechat:before { content: "\f1d7"; } .fa.fa-send:before { content: "\f1d8"; } .fa.fa-paper-plane-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-paper-plane-o:before { content: "\f1d8"; } .fa.fa-send-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-send-o:before { content: "\f1d8"; } .fa.fa-circle-thin { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-circle-thin:before { content: "\f111"; } .fa.fa-header:before { content: "\f1dc"; } .fa.fa-futbol-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-futbol-o:before { content: "\f1e3"; } .fa.fa-soccer-ball-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-soccer-ball-o:before { content: "\f1e3"; } .fa.fa-slideshare { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-twitch { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-yelp { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-newspaper-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-newspaper-o:before { content: "\f1ea"; } .fa.fa-paypal { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-google-wallet { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-cc-visa { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-cc-mastercard { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-cc-discover { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-cc-amex { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-cc-paypal { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-cc-stripe { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-bell-slash-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-bell-slash-o:before { content: "\f1f6"; } .fa.fa-trash:before { content: "\f2ed"; } .fa.fa-copyright { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-eyedropper:before { content: "\f1fb"; } .fa.fa-area-chart:before { content: "\f1fe"; } .fa.fa-pie-chart:before { content: "\f200"; } .fa.fa-line-chart:before { content: "\f201"; } .fa.fa-lastfm { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-lastfm-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-lastfm-square:before { content: "\f203"; } .fa.fa-ioxhost { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-angellist { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-cc { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-cc:before { content: "\f20a"; } .fa.fa-ils:before { content: "\f20b"; } .fa.fa-shekel:before { content: "\f20b"; } .fa.fa-sheqel:before { content: "\f20b"; } .fa.fa-buysellads { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-connectdevelop { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-dashcube { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-forumbee { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-leanpub { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-sellsy { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-shirtsinbulk { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-simplybuilt { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-skyatlas { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-diamond { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-diamond:before { content: "\f3a5"; } .fa.fa-transgender:before { content: "\f224"; } .fa.fa-intersex:before { content: "\f224"; } .fa.fa-transgender-alt:before { content: "\f225"; } .fa.fa-facebook-official { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-facebook-official:before { content: "\f09a"; } .fa.fa-pinterest-p { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-whatsapp { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-hotel:before { content: "\f236"; } .fa.fa-viacoin { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-medium { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-y-combinator { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-yc { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-yc:before { content: "\f23b"; } .fa.fa-optin-monster { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-opencart { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-expeditedssl { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-battery-4:before { content: "\f240"; } .fa.fa-battery:before { content: "\f240"; } .fa.fa-battery-3:before { content: "\f241"; } .fa.fa-battery-2:before { content: "\f242"; } .fa.fa-battery-1:before { content: "\f243"; } .fa.fa-battery-0:before { content: "\f244"; } .fa.fa-object-group { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-object-ungroup { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-sticky-note-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-sticky-note-o:before { content: "\f249"; } .fa.fa-cc-jcb { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-cc-diners-club { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-clone { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hourglass-o:before { content: "\f254"; } .fa.fa-hourglass-1:before { content: "\f251"; } .fa.fa-hourglass-2:before { content: "\f252"; } .fa.fa-hourglass-3:before { content: "\f253"; } .fa.fa-hand-rock-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-rock-o:before { content: "\f255"; } .fa.fa-hand-grab-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-grab-o:before { content: "\f255"; } .fa.fa-hand-paper-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-paper-o:before { content: "\f256"; } .fa.fa-hand-stop-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-stop-o:before { content: "\f256"; } .fa.fa-hand-scissors-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-scissors-o:before { content: "\f257"; } .fa.fa-hand-lizard-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-lizard-o:before { content: "\f258"; } .fa.fa-hand-spock-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-spock-o:before { content: "\f259"; } .fa.fa-hand-pointer-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-pointer-o:before { content: "\f25a"; } .fa.fa-hand-peace-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-hand-peace-o:before { content: "\f25b"; } .fa.fa-registered { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-creative-commons { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-gg { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-gg-circle { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-odnoklassniki { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-odnoklassniki-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-odnoklassniki-square:before { content: "\f264"; } .fa.fa-get-pocket { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wikipedia-w { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-safari { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-chrome { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-firefox { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-opera { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-internet-explorer { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-television:before { content: "\f26c"; } .fa.fa-contao { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-500px { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-amazon { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-calendar-plus-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-calendar-plus-o:before { content: "\f271"; } .fa.fa-calendar-minus-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-calendar-minus-o:before { content: "\f272"; } .fa.fa-calendar-times-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-calendar-times-o:before { content: "\f273"; } .fa.fa-calendar-check-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-calendar-check-o:before { content: "\f274"; } .fa.fa-map-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-map-o:before { content: "\f279"; } .fa.fa-commenting:before { content: "\f4ad"; } .fa.fa-commenting-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-commenting-o:before { content: "\f4ad"; } .fa.fa-houzz { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-vimeo { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-vimeo:before { content: "\f27d"; } .fa.fa-black-tie { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-fonticons { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-reddit-alien { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-edge { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-credit-card-alt:before { content: "\f09d"; } .fa.fa-codiepie { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-modx { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-fort-awesome { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-usb { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-product-hunt { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-mixcloud { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-scribd { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-pause-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-pause-circle-o:before { content: "\f28b"; } .fa.fa-stop-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-stop-circle-o:before { content: "\f28d"; } .fa.fa-bluetooth { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-bluetooth-b { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-gitlab { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wpbeginner { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wpforms { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-envira { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wheelchair-alt { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wheelchair-alt:before { content: "\f368"; } .fa.fa-question-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-question-circle-o:before { content: "\f059"; } .fa.fa-volume-control-phone:before { content: "\f2a0"; } .fa.fa-asl-interpreting:before { content: "\f2a3"; } .fa.fa-deafness:before { content: "\f2a4"; } .fa.fa-hard-of-hearing:before { content: "\f2a4"; } .fa.fa-glide { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-glide-g { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-signing:before { content: "\f2a7"; } .fa.fa-viadeo { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-viadeo-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-viadeo-square:before { content: "\f2aa"; } .fa.fa-snapchat { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-snapchat-ghost { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-snapchat-ghost:before { content: "\f2ab"; } .fa.fa-snapchat-square { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-snapchat-square:before { content: "\f2ad"; } .fa.fa-pied-piper { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-first-order { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-yoast { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-themeisle { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-google-plus-official { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-google-plus-official:before { content: "\f2b3"; } .fa.fa-google-plus-circle { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-google-plus-circle:before { content: "\f2b3"; } .fa.fa-font-awesome { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-fa { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-fa:before { content: "\f2b4"; } .fa.fa-handshake-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-handshake-o:before { content: "\f2b5"; } .fa.fa-envelope-open-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-envelope-open-o:before { content: "\f2b6"; } .fa.fa-linode { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-address-book-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-address-book-o:before { content: "\f2b9"; } .fa.fa-vcard:before { content: "\f2bb"; } .fa.fa-address-card-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-address-card-o:before { content: "\f2bb"; } .fa.fa-vcard-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-vcard-o:before { content: "\f2bb"; } .fa.fa-user-circle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-user-circle-o:before { content: "\f2bd"; } .fa.fa-user-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-user-o:before { content: "\f007"; } .fa.fa-id-badge { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-drivers-license:before { content: "\f2c2"; } .fa.fa-id-card-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-id-card-o:before { content: "\f2c2"; } .fa.fa-drivers-license-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-drivers-license-o:before { content: "\f2c2"; } .fa.fa-quora { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-free-code-camp { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-telegram { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-thermometer-4:before { content: "\f2c7"; } .fa.fa-thermometer:before { content: "\f2c7"; } .fa.fa-thermometer-3:before { content: "\f2c8"; } .fa.fa-thermometer-2:before { content: "\f2c9"; } .fa.fa-thermometer-1:before { content: "\f2ca"; } .fa.fa-thermometer-0:before { content: "\f2cb"; } .fa.fa-bathtub:before { content: "\f2cd"; } .fa.fa-s15:before { content: "\f2cd"; } .fa.fa-window-maximize { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-window-restore { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-times-rectangle:before { content: "\f410"; } .fa.fa-window-close-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-window-close-o:before { content: "\f410"; } .fa.fa-times-rectangle-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-times-rectangle-o:before { content: "\f410"; } .fa.fa-bandcamp { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-grav { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-etsy { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-imdb { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-ravelry { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-eercast { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-eercast:before { content: "\f2da"; } .fa.fa-snowflake-o { font-family: "Font Awesome 6 Free"; font-weight: 400; } .fa.fa-snowflake-o:before { content: "\f2dc"; } .fa.fa-superpowers { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-wpexplorer { font-family: "Font Awesome 6 Brands"; font-weight: 400; } .fa.fa-meetup { font-family: "Font Awesome 6 Brands"; font-weight: 400; } /*! * Font Awesome Free 6.4.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) * Copyright 2023 Fonticons, Inc. */ .fa { font-family: var(--fa-style-family, "Font Awesome 6 Free"); font-weight: var(--fa-style, 900); } .fa, .fa-classic, .fa-sharp, .fas, .fa-solid, .moremenu .dropdown-item[aria-current=true]:before, .moremenu .dropdown-item.active:before, .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item.carousel-navigation-link::after, .navbar.fixed-top .usermenu .dropdown-menu .submenu .items .dropdown-item[aria-current=true]::before, .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item.carousel-navigation-link::after, .toast.toast-warning .toast-body:before, .toast.toast-info .toast-body:before, .toast.toast-danger .toast-body:before, .toast.toast-success .toast-body:before, .editing .editinprogress:after, .dir-rtl .block_settings .block_tree [aria-expanded=false] > p:before, .dir-rtl .block_navigation .block_tree [aria-expanded=false] > p:before, .block_settings .block_tree [aria-expanded=false] > p:before, .block_navigation .block_tree [aria-expanded=false] > p:before, .block_settings .block_tree [aria-expanded=true] > p:before, .block_navigation .block_tree [aria-expanded=true] > p:before, .dropdown-item[aria-current=true]:before, .dropdown-item[aria-selected=true]:before, .dir-rtl .action-menu .dropdown-subpanel .dropdown-item::after, .action-menu .dropdown-subpanel .dropdown-item::after, .dropup .dropdown-toggle::after, .dropright .dropdown-toggle::after, .dropleft .dropdown-toggle::before, .dropdown-toggle::after, .far, .fa-regular, .content-bank-container.view-grid .cb-unlisted::after, .fab, .fa-brands { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: var(--fa-display, inline-block); font-style: normal; font-variant: normal; line-height: 1; text-rendering: auto; } .fas, .fa-classic, .fa-solid, .moremenu .dropdown-item[aria-current=true]:before, .moremenu .dropdown-item.active:before, .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item.carousel-navigation-link::after, .navbar.fixed-top .usermenu .dropdown-menu .submenu .items .dropdown-item[aria-current=true]::before, .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item.carousel-navigation-link::after, .toast.toast-warning .toast-body:before, .toast.toast-info .toast-body:before, .toast.toast-danger .toast-body:before, .toast.toast-success .toast-body:before, .editing .editinprogress:after, .dir-rtl .block_settings .block_tree [aria-expanded=false] > p:before, .dir-rtl .block_navigation .block_tree [aria-expanded=false] > p:before, .block_settings .block_tree [aria-expanded=false] > p:before, .block_navigation .block_tree [aria-expanded=false] > p:before, .block_settings .block_tree [aria-expanded=true] > p:before, .block_navigation .block_tree [aria-expanded=true] > p:before, .dropdown-item[aria-current=true]:before, .dropdown-item[aria-selected=true]:before, .dir-rtl .action-menu .dropdown-subpanel .dropdown-item::after, .action-menu .dropdown-subpanel .dropdown-item::after, .dropup .dropdown-toggle::after, .dropright .dropdown-toggle::after, .dropleft .dropdown-toggle::before, .dropdown-toggle::after, .far, .fa-regular, .content-bank-container.view-grid .cb-unlisted::after { font-family: "Font Awesome 6 Free"; } .fab, .fa-brands { font-family: "Font Awesome 6 Brands"; } .fa-1x { font-size: 1em; } .fa-2x { font-size: 2em; } .fa-3x { font-size: 3em; } .fa-4x { font-size: 4em; } .fa-5x { font-size: 5em; } .fa-6x { font-size: 6em; } .fa-7x { font-size: 7em; } .fa-8x { font-size: 8em; } .fa-9x { font-size: 9em; } .fa-10x { font-size: 10em; } .fa-2xs { font-size: 0.625em; line-height: 0.1em; vertical-align: 0.225em; } .fa-xs { font-size: 0.75em; line-height: 0.0833333337em; vertical-align: 0.125em; } .fa-sm { font-size: 0.875em; line-height: 0.0714285718em; vertical-align: 0.0535714295em; } .fa-lg { font-size: 1.25em; line-height: 0.05em; vertical-align: -0.075em; } .fa-xl { font-size: 1.5em; line-height: 0.0416666682em; vertical-align: -0.125em; } .fa-2xl { font-size: 2em; line-height: 0.03125em; vertical-align: -0.1875em; } .fa-fw { text-align: center; width: 1.25em; } .fa-ul { list-style-type: none; margin-left: var(--fa-li-margin, 2.5em); padding-left: 0; } .fa-ul > li { position: relative; } .fa-li { left: calc(var(--fa-li-width, 2em) * -1); position: absolute; text-align: center; width: var(--fa-li-width, 2em); line-height: inherit; } .fa-border { border-color: var(--fa-border-color, #eee); border-radius: var(--fa-border-radius, 0.1em); border-style: var(--fa-border-style, solid); border-width: var(--fa-border-width, 0.08em); padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } .fa-pull-left { float: left; margin-right: var(--fa-pull-margin, 0.3em); } .fa-pull-right { float: right; margin-left: var(--fa-pull-margin, 0.3em); } .fa-beat { animation-name: fa-beat; animation-delay: var(--fa-animation-delay, 0s); animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-timing-function: var(--fa-animation-timing, ease-in-out); } .fa-bounce { animation-name: fa-bounce; animation-delay: var(--fa-animation-delay, 0s); animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } .fa-fade { animation-name: fa-fade; animation-delay: var(--fa-animation-delay, 0s); animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } .fa-beat-fade { animation-name: fa-beat-fade; animation-delay: var(--fa-animation-delay, 0s); animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } .fa-flip { animation-name: fa-flip; animation-delay: var(--fa-animation-delay, 0s); animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-timing-function: var(--fa-animation-timing, ease-in-out); } .fa-shake { animation-name: fa-shake; animation-delay: var(--fa-animation-delay, 0s); animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-timing-function: var(--fa-animation-timing, linear); } .fa-spin { animation-name: fa-spin; animation-delay: var(--fa-animation-delay, 0s); animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 2s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-timing-function: var(--fa-animation-timing, linear); } .fa-spin-reverse { --fa-animation-direction: reverse; } .fa-pulse, .fa-spin-pulse { animation-name: fa-spin; animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); animation-timing-function: var(--fa-animation-timing, steps(8)); } @media (prefers-reduced-motion: reduce) { .fa-beat, .fa-bounce, .fa-fade, .fa-beat-fade, .fa-flip, .fa-pulse, .fa-shake, .fa-spin, .fa-spin-pulse { animation-delay: -1ms; animation-duration: 1ms; animation-iteration-count: 1; transition-delay: 0s; transition-duration: 0s; } } @keyframes fa-beat { 0%, 90% { transform: scale(1); } 45% { transform: scale(var(--fa-beat-scale, 1.25)); } } @keyframes fa-bounce { 0% { transform: scale(1, 1) translateY(0); } 10% { transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } 30% { transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } 50% { transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } 57% { transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } 64% { transform: scale(1, 1) translateY(0); } 100% { transform: scale(1, 1) translateY(0); } } @keyframes fa-fade { 50% { opacity: var(--fa-fade-opacity, 0.4); } } @keyframes fa-beat-fade { 0%, 100% { opacity: var(--fa-beat-fade-opacity, 0.4); transform: scale(1); } 50% { opacity: 1; transform: scale(var(--fa-beat-fade-scale, 1.125)); } } @keyframes fa-flip { 50% { transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } @keyframes fa-shake { 0% { transform: rotate(-15deg); } 4% { transform: rotate(15deg); } 8%, 24% { transform: rotate(-18deg); } 12%, 28% { transform: rotate(18deg); } 16% { transform: rotate(-22deg); } 20% { transform: rotate(22deg); } 32% { transform: rotate(-12deg); } 36% { transform: rotate(12deg); } 40%, 100% { transform: rotate(0deg); } } @keyframes fa-spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .fa-rotate-90 { transform: rotate(90deg); } .fa-rotate-180 { transform: rotate(180deg); } .fa-rotate-270 { transform: rotate(270deg); } .fa-flip-horizontal { transform: scale(-1, 1); } .fa-flip-vertical { transform: scale(1, -1); } .fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { transform: scale(-1, -1); } .fa-rotate-by { transform: rotate(var(--fa-rotate-angle, none)); } .fa-stack { display: inline-block; height: 2em; line-height: 2em; position: relative; vertical-align: middle; width: 2.5em; } .fa-stack-1x, .fa-stack-2x { left: 0; position: absolute; text-align: center; width: 100%; z-index: var(--fa-stack-z-index, auto); } .fa-stack-1x { line-height: inherit; } .fa-stack-2x { font-size: 2em; } .fa-inverse { color: var(--fa-inverse, #fff); } /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen readers do not read off random characters that represent icons */ .fa-0::before { content: "\30 "; } .fa-1::before { content: "\31 "; } .fa-2::before { content: "\32 "; } .fa-3::before { content: "\33 "; } .fa-4::before { content: "\34 "; } .fa-5::before { content: "\35 "; } .fa-6::before { content: "\36 "; } .fa-7::before { content: "\37 "; } .fa-8::before { content: "\38 "; } .fa-9::before { content: "\39 "; } .fa-fill-drip::before { content: "\f576"; } .fa-arrows-to-circle::before { content: "\e4bd"; } .fa-circle-chevron-right::before { content: "\f138"; } .fa-chevron-circle-right::before { content: "\f138"; } .fa-at::before { content: "\@"; } .fa-trash-can::before { content: "\f2ed"; } .fa-trash-alt::before { content: "\f2ed"; } .fa-text-height::before { content: "\f034"; } .fa-user-xmark::before { content: "\f235"; } .fa-user-times::before { content: "\f235"; } .fa-stethoscope::before { content: "\f0f1"; } .fa-message::before { content: "\f27a"; } .fa-comment-alt::before { content: "\f27a"; } .fa-info::before { content: "\f129"; } .fa-down-left-and-up-right-to-center::before { content: "\f422"; } .fa-compress-alt::before { content: "\f422"; } .fa-explosion::before { content: "\e4e9"; } .fa-file-lines::before { content: "\f15c"; } .fa-file-alt::before { content: "\f15c"; } .fa-file-text::before { content: "\f15c"; } .fa-wave-square::before { content: "\f83e"; } .fa-ring::before { content: "\f70b"; } .fa-building-un::before { content: "\e4d9"; } .fa-dice-three::before { content: "\f527"; } .fa-calendar-days::before { content: "\f073"; } .fa-calendar-alt::before { content: "\f073"; } .fa-anchor-circle-check::before { content: "\e4aa"; } .fa-building-circle-arrow-right::before { content: "\e4d1"; } .fa-volleyball::before { content: "\f45f"; } .fa-volleyball-ball::before { content: "\f45f"; } .fa-arrows-up-to-line::before { content: "\e4c2"; } .fa-sort-down::before { content: "\f0dd"; } .fa-sort-desc::before { content: "\f0dd"; } .fa-circle-minus::before { content: "\f056"; } .fa-minus-circle::before { content: "\f056"; } .fa-door-open::before { content: "\f52b"; } .fa-right-from-bracket::before { content: "\f2f5"; } .fa-sign-out-alt::before { content: "\f2f5"; } .fa-atom::before { content: "\f5d2"; } .fa-soap::before { content: "\e06e"; } .fa-icons::before { content: "\f86d"; } .fa-heart-music-camera-bolt::before { content: "\f86d"; } .fa-microphone-lines-slash::before { content: "\f539"; } .fa-microphone-alt-slash::before { content: "\f539"; } .fa-bridge-circle-check::before { content: "\e4c9"; } .fa-pump-medical::before { content: "\e06a"; } .fa-fingerprint::before { content: "\f577"; } .fa-hand-point-right::before { content: "\f0a4"; } .fa-magnifying-glass-location::before { content: "\f689"; } .fa-search-location::before { content: "\f689"; } .fa-forward-step::before { content: "\f051"; } .fa-step-forward::before { content: "\f051"; } .fa-face-smile-beam::before { content: "\f5b8"; } .fa-smile-beam::before { content: "\f5b8"; } .fa-flag-checkered::before { content: "\f11e"; } .fa-football::before { content: "\f44e"; } .fa-football-ball::before { content: "\f44e"; } .fa-school-circle-exclamation::before { content: "\e56c"; } .fa-crop::before { content: "\f125"; } .fa-angles-down::before { content: "\f103"; } .fa-angle-double-down::before { content: "\f103"; } .fa-users-rectangle::before { content: "\e594"; } .fa-people-roof::before { content: "\e537"; } .fa-people-line::before { content: "\e534"; } .fa-beer-mug-empty::before { content: "\f0fc"; } .fa-beer::before { content: "\f0fc"; } .fa-diagram-predecessor::before { content: "\e477"; } .fa-arrow-up-long::before { content: "\f176"; } .fa-long-arrow-up::before { content: "\f176"; } .fa-fire-flame-simple::before { content: "\f46a"; } .fa-burn::before { content: "\f46a"; } .fa-person::before { content: "\f183"; } .fa-male::before { content: "\f183"; } .fa-laptop::before { content: "\f109"; } .fa-file-csv::before { content: "\f6dd"; } .fa-menorah::before { content: "\f676"; } .fa-truck-plane::before { content: "\e58f"; } .fa-record-vinyl::before { content: "\f8d9"; } .fa-face-grin-stars::before { content: "\f587"; } .fa-grin-stars::before { content: "\f587"; } .fa-bong::before { content: "\f55c"; } .fa-spaghetti-monster-flying::before { content: "\f67b"; } .fa-pastafarianism::before { content: "\f67b"; } .fa-arrow-down-up-across-line::before { content: "\e4af"; } .fa-spoon::before { content: "\f2e5"; } .fa-utensil-spoon::before { content: "\f2e5"; } .fa-jar-wheat::before { content: "\e517"; } .fa-envelopes-bulk::before { content: "\f674"; } .fa-mail-bulk::before { content: "\f674"; } .fa-file-circle-exclamation::before { content: "\e4eb"; } .fa-circle-h::before { content: "\f47e"; } .fa-hospital-symbol::before { content: "\f47e"; } .fa-pager::before { content: "\f815"; } .fa-address-book::before { content: "\f2b9"; } .fa-contact-book::before { content: "\f2b9"; } .fa-strikethrough::before { content: "\f0cc"; } .fa-k::before { content: "K"; } .fa-landmark-flag::before { content: "\e51c"; } .fa-pencil::before { content: "\f303"; } .fa-pencil-alt::before { content: "\f303"; } .fa-backward::before { content: "\f04a"; } .fa-caret-right::before { content: "\f0da"; } .fa-comments::before { content: "\f086"; } .fa-paste::before { content: "\f0ea"; } .fa-file-clipboard::before { content: "\f0ea"; } .fa-code-pull-request::before { content: "\e13c"; } .fa-clipboard-list::before { content: "\f46d"; } .fa-truck-ramp-box::before { content: "\f4de"; } .fa-truck-loading::before { content: "\f4de"; } .fa-user-check::before { content: "\f4fc"; } .fa-vial-virus::before { content: "\e597"; } .fa-sheet-plastic::before { content: "\e571"; } .fa-blog::before { content: "\f781"; } .fa-user-ninja::before { content: "\f504"; } .fa-person-arrow-up-from-line::before { content: "\e539"; } .fa-scroll-torah::before { content: "\f6a0"; } .fa-torah::before { content: "\f6a0"; } .fa-broom-ball::before { content: "\f458"; } .fa-quidditch::before { content: "\f458"; } .fa-quidditch-broom-ball::before { content: "\f458"; } .fa-toggle-off::before { content: "\f204"; } .fa-box-archive::before { content: "\f187"; } .fa-archive::before { content: "\f187"; } .fa-person-drowning::before { content: "\e545"; } .fa-arrow-down-9-1::before { content: "\f886"; } .fa-sort-numeric-desc::before { content: "\f886"; } .fa-sort-numeric-down-alt::before { content: "\f886"; } .fa-face-grin-tongue-squint::before { content: "\f58a"; } .fa-grin-tongue-squint::before { content: "\f58a"; } .fa-spray-can::before { content: "\f5bd"; } .fa-truck-monster::before { content: "\f63b"; } .fa-w::before { content: "W"; } .fa-earth-africa::before { content: "\f57c"; } .fa-globe-africa::before { content: "\f57c"; } .fa-rainbow::before { content: "\f75b"; } .fa-circle-notch::before { content: "\f1ce"; } .fa-tablet-screen-button::before { content: "\f3fa"; } .fa-tablet-alt::before { content: "\f3fa"; } .fa-paw::before { content: "\f1b0"; } .fa-cloud::before { content: "\f0c2"; } .fa-trowel-bricks::before { content: "\e58a"; } .fa-face-flushed::before { content: "\f579"; } .fa-flushed::before { content: "\f579"; } .fa-hospital-user::before { content: "\f80d"; } .fa-tent-arrow-left-right::before { content: "\e57f"; } .fa-gavel::before { content: "\f0e3"; } .fa-legal::before { content: "\f0e3"; } .fa-binoculars::before { content: "\f1e5"; } .fa-microphone-slash::before { content: "\f131"; } .fa-box-tissue::before { content: "\e05b"; } .fa-motorcycle::before { content: "\f21c"; } .fa-bell-concierge::before { content: "\f562"; } .fa-concierge-bell::before { content: "\f562"; } .fa-pen-ruler::before { content: "\f5ae"; } .fa-pencil-ruler::before { content: "\f5ae"; } .fa-people-arrows::before { content: "\e068"; } .fa-people-arrows-left-right::before { content: "\e068"; } .fa-mars-and-venus-burst::before { content: "\e523"; } .fa-square-caret-right::before { content: "\f152"; } .fa-caret-square-right::before { content: "\f152"; } .fa-scissors::before { content: "\f0c4"; } .fa-cut::before { content: "\f0c4"; } .fa-sun-plant-wilt::before { content: "\e57a"; } .fa-toilets-portable::before { content: "\e584"; } .fa-hockey-puck::before { content: "\f453"; } .fa-table::before { content: "\f0ce"; } .fa-magnifying-glass-arrow-right::before { content: "\e521"; } .fa-tachograph-digital::before { content: "\f566"; } .fa-digital-tachograph::before { content: "\f566"; } .fa-users-slash::before { content: "\e073"; } .fa-clover::before { content: "\e139"; } .fa-reply::before { content: "\f3e5"; } .fa-mail-reply::before { content: "\f3e5"; } .fa-star-and-crescent::before { content: "\f699"; } .fa-house-fire::before { content: "\e50c"; } .fa-square-minus::before { content: "\f146"; } .fa-minus-square::before { content: "\f146"; } .fa-helicopter::before { content: "\f533"; } .fa-compass::before { content: "\f14e"; } .fa-square-caret-down::before { content: "\f150"; } .fa-caret-square-down::before { content: "\f150"; } .fa-file-circle-question::before { content: "\e4ef"; } .fa-laptop-code::before { content: "\f5fc"; } .fa-swatchbook::before { content: "\f5c3"; } .fa-prescription-bottle::before { content: "\f485"; } .fa-bars::before { content: "\f0c9"; } .fa-navicon::before { content: "\f0c9"; } .fa-people-group::before { content: "\e533"; } .fa-hourglass-end::before { content: "\f253"; } .fa-hourglass-3::before { content: "\f253"; } .fa-heart-crack::before { content: "\f7a9"; } .fa-heart-broken::before { content: "\f7a9"; } .fa-square-up-right::before { content: "\f360"; } .fa-external-link-square-alt::before { content: "\f360"; } .fa-face-kiss-beam::before { content: "\f597"; } .fa-kiss-beam::before { content: "\f597"; } .fa-film::before { content: "\f008"; } .fa-ruler-horizontal::before { content: "\f547"; } .fa-people-robbery::before { content: "\e536"; } .fa-lightbulb::before { content: "\f0eb"; } .fa-caret-left::before { content: "\f0d9"; } .fa-circle-exclamation::before { content: "\f06a"; } .fa-exclamation-circle::before { content: "\f06a"; } .fa-school-circle-xmark::before { content: "\e56d"; } .fa-arrow-right-from-bracket::before { content: "\f08b"; } .fa-sign-out::before { content: "\f08b"; } .fa-circle-chevron-down::before { content: "\f13a"; } .fa-chevron-circle-down::before { content: "\f13a"; } .fa-unlock-keyhole::before { content: "\f13e"; } .fa-unlock-alt::before { content: "\f13e"; } .fa-cloud-showers-heavy::before { content: "\f740"; } .fa-headphones-simple::before { content: "\f58f"; } .fa-headphones-alt::before { content: "\f58f"; } .fa-sitemap::before { content: "\f0e8"; } .fa-circle-dollar-to-slot::before { content: "\f4b9"; } .fa-donate::before { content: "\f4b9"; } .fa-memory::before { content: "\f538"; } .fa-road-spikes::before { content: "\e568"; } .fa-fire-burner::before { content: "\e4f1"; } .fa-flag::before { content: "\f024"; } .fa-hanukiah::before { content: "\f6e6"; } .fa-feather::before { content: "\f52d"; } .fa-volume-low::before { content: "\f027"; } .fa-volume-down::before { content: "\f027"; } .fa-comment-slash::before { content: "\f4b3"; } .fa-cloud-sun-rain::before { content: "\f743"; } .fa-compress::before { content: "\f066"; } .fa-wheat-awn::before { content: "\e2cd"; } .fa-wheat-alt::before { content: "\e2cd"; } .fa-ankh::before { content: "\f644"; } .fa-hands-holding-child::before { content: "\e4fa"; } .fa-asterisk::before { content: "\*"; } .fa-square-check::before { content: "\f14a"; } .fa-check-square::before { content: "\f14a"; } .fa-peseta-sign::before { content: "\e221"; } .fa-heading::before { content: "\f1dc"; } .fa-header::before { content: "\f1dc"; } .fa-ghost::before { content: "\f6e2"; } .fa-list::before { content: "\f03a"; } .fa-list-squares::before { content: "\f03a"; } .fa-square-phone-flip::before { content: "\f87b"; } .fa-phone-square-alt::before { content: "\f87b"; } .fa-cart-plus::before { content: "\f217"; } .fa-gamepad::before { content: "\f11b"; } .fa-circle-dot::before { content: "\f192"; } .fa-dot-circle::before { content: "\f192"; } .fa-face-dizzy::before { content: "\f567"; } .fa-dizzy::before { content: "\f567"; } .fa-egg::before { content: "\f7fb"; } .fa-house-medical-circle-xmark::before { content: "\e513"; } .fa-campground::before { content: "\f6bb"; } .fa-folder-plus::before { content: "\f65e"; } .fa-futbol::before { content: "\f1e3"; } .fa-futbol-ball::before { content: "\f1e3"; } .fa-soccer-ball::before { content: "\f1e3"; } .fa-paintbrush::before { content: "\f1fc"; } .fa-paint-brush::before { content: "\f1fc"; } .fa-lock::before { content: "\f023"; } .fa-gas-pump::before { content: "\f52f"; } .fa-hot-tub-person::before { content: "\f593"; } .fa-hot-tub::before { content: "\f593"; } .fa-map-location::before { content: "\f59f"; } .fa-map-marked::before { content: "\f59f"; } .fa-house-flood-water::before { content: "\e50e"; } .fa-tree::before { content: "\f1bb"; } .fa-bridge-lock::before { content: "\e4cc"; } .fa-sack-dollar::before { content: "\f81d"; } .fa-pen-to-square::before { content: "\f044"; } .fa-edit::before { content: "\f044"; } .fa-car-side::before { content: "\f5e4"; } .fa-share-nodes::before { content: "\f1e0"; } .fa-share-alt::before { content: "\f1e0"; } .fa-heart-circle-minus::before { content: "\e4ff"; } .fa-hourglass-half::before { content: "\f252"; } .fa-hourglass-2::before { content: "\f252"; } .fa-microscope::before { content: "\f610"; } .fa-sink::before { content: "\e06d"; } .fa-bag-shopping::before { content: "\f290"; } .fa-shopping-bag::before { content: "\f290"; } .fa-arrow-down-z-a::before { content: "\f881"; } .fa-sort-alpha-desc::before { content: "\f881"; } .fa-sort-alpha-down-alt::before { content: "\f881"; } .fa-mitten::before { content: "\f7b5"; } .fa-person-rays::before { content: "\e54d"; } .fa-users::before { content: "\f0c0"; } .fa-eye-slash::before { content: "\f070"; } .fa-flask-vial::before { content: "\e4f3"; } .fa-hand::before { content: "\f256"; } .fa-hand-paper::before { content: "\f256"; } .fa-om::before { content: "\f679"; } .fa-worm::before { content: "\e599"; } .fa-house-circle-xmark::before { content: "\e50b"; } .fa-plug::before { content: "\f1e6"; } .fa-chevron-up::before { content: "\f077"; } .fa-hand-spock::before { content: "\f259"; } .fa-stopwatch::before { content: "\f2f2"; } .fa-face-kiss::before { content: "\f596"; } .fa-kiss::before { content: "\f596"; } .fa-bridge-circle-xmark::before { content: "\e4cb"; } .fa-face-grin-tongue::before { content: "\f589"; } .fa-grin-tongue::before { content: "\f589"; } .fa-chess-bishop::before { content: "\f43a"; } .fa-face-grin-wink::before { content: "\f58c"; } .fa-grin-wink::before { content: "\f58c"; } .fa-ear-deaf::before { content: "\f2a4"; } .fa-deaf::before { content: "\f2a4"; } .fa-deafness::before { content: "\f2a4"; } .fa-hard-of-hearing::before { content: "\f2a4"; } .fa-road-circle-check::before { content: "\e564"; } .fa-dice-five::before { content: "\f523"; } .fa-square-rss::before { content: "\f143"; } .fa-rss-square::before { content: "\f143"; } .fa-land-mine-on::before { content: "\e51b"; } .fa-i-cursor::before { content: "\f246"; } .fa-stamp::before { content: "\f5bf"; } .fa-stairs::before { content: "\e289"; } .fa-i::before { content: "I"; } .fa-hryvnia-sign::before { content: "\f6f2"; } .fa-hryvnia::before { content: "\f6f2"; } .fa-pills::before { content: "\f484"; } .fa-face-grin-wide::before { content: "\f581"; } .fa-grin-alt::before { content: "\f581"; } .fa-tooth::before { content: "\f5c9"; } .fa-v::before { content: "V"; } .fa-bangladeshi-taka-sign::before { content: "\e2e6"; } .fa-bicycle::before { content: "\f206"; } .fa-staff-snake::before { content: "\e579"; } .fa-rod-asclepius::before { content: "\e579"; } .fa-rod-snake::before { content: "\e579"; } .fa-staff-aesculapius::before { content: "\e579"; } .fa-head-side-cough-slash::before { content: "\e062"; } .fa-truck-medical::before { content: "\f0f9"; } .fa-ambulance::before { content: "\f0f9"; } .fa-wheat-awn-circle-exclamation::before { content: "\e598"; } .fa-snowman::before { content: "\f7d0"; } .fa-mortar-pestle::before { content: "\f5a7"; } .fa-road-barrier::before { content: "\e562"; } .fa-school::before { content: "\f549"; } .fa-igloo::before { content: "\f7ae"; } .fa-joint::before { content: "\f595"; } .fa-angle-right::before { content: "\f105"; } .fa-horse::before { content: "\f6f0"; } .fa-q::before { content: "Q"; } .fa-g::before { content: "G"; } .fa-notes-medical::before { content: "\f481"; } .fa-temperature-half::before { content: "\f2c9"; } .fa-temperature-2::before { content: "\f2c9"; } .fa-thermometer-2::before { content: "\f2c9"; } .fa-thermometer-half::before { content: "\f2c9"; } .fa-dong-sign::before { content: "\e169"; } .fa-capsules::before { content: "\f46b"; } .fa-poo-storm::before { content: "\f75a"; } .fa-poo-bolt::before { content: "\f75a"; } .fa-face-frown-open::before { content: "\f57a"; } .fa-frown-open::before { content: "\f57a"; } .fa-hand-point-up::before { content: "\f0a6"; } .fa-money-bill::before { content: "\f0d6"; } .fa-bookmark::before { content: "\f02e"; } .fa-align-justify::before { content: "\f039"; } .fa-umbrella-beach::before { content: "\f5ca"; } .fa-helmet-un::before { content: "\e503"; } .fa-bullseye::before { content: "\f140"; } .fa-bacon::before { content: "\f7e5"; } .fa-hand-point-down::before { content: "\f0a7"; } .fa-arrow-up-from-bracket::before { content: "\e09a"; } .fa-folder::before { content: "\f07b"; } .fa-folder-blank::before { content: "\f07b"; } .fa-file-waveform::before { content: "\f478"; } .fa-file-medical-alt::before { content: "\f478"; } .fa-radiation::before { content: "\f7b9"; } .fa-chart-simple::before { content: "\e473"; } .fa-mars-stroke::before { content: "\f229"; } .fa-vial::before { content: "\f492"; } .fa-gauge::before { content: "\f624"; } .fa-dashboard::before { content: "\f624"; } .fa-gauge-med::before { content: "\f624"; } .fa-tachometer-alt-average::before { content: "\f624"; } .fa-wand-magic-sparkles::before { content: "\e2ca"; } .fa-magic-wand-sparkles::before { content: "\e2ca"; } .fa-e::before { content: "E"; } .fa-pen-clip::before { content: "\f305"; } .fa-pen-alt::before { content: "\f305"; } .fa-bridge-circle-exclamation::before { content: "\e4ca"; } .fa-user::before { content: "\f007"; } .fa-school-circle-check::before { content: "\e56b"; } .fa-dumpster::before { content: "\f793"; } .fa-van-shuttle::before { content: "\f5b6"; } .fa-shuttle-van::before { content: "\f5b6"; } .fa-building-user::before { content: "\e4da"; } .fa-square-caret-left::before { content: "\f191"; } .fa-caret-square-left::before { content: "\f191"; } .fa-highlighter::before { content: "\f591"; } .fa-key::before { content: "\f084"; } .fa-bullhorn::before { content: "\f0a1"; } .fa-globe::before { content: "\f0ac"; } .fa-synagogue::before { content: "\f69b"; } .fa-person-half-dress::before { content: "\e548"; } .fa-road-bridge::before { content: "\e563"; } .fa-location-arrow::before { content: "\f124"; } .fa-c::before { content: "C"; } .fa-tablet-button::before { content: "\f10a"; } .fa-building-lock::before { content: "\e4d6"; } .fa-pizza-slice::before { content: "\f818"; } .fa-money-bill-wave::before { content: "\f53a"; } .fa-chart-area::before { content: "\f1fe"; } .fa-area-chart::before { content: "\f1fe"; } .fa-house-flag::before { content: "\e50d"; } .fa-person-circle-minus::before { content: "\e540"; } .fa-ban::before { content: "\f05e"; } .fa-cancel::before { content: "\f05e"; } .fa-camera-rotate::before { content: "\e0d8"; } .fa-spray-can-sparkles::before { content: "\f5d0"; } .fa-air-freshener::before { content: "\f5d0"; } .fa-star::before { content: "\f005"; } .fa-repeat::before { content: "\f363"; } .fa-cross::before { content: "\f654"; } .fa-box::before { content: "\f466"; } .fa-venus-mars::before { content: "\f228"; } .fa-arrow-pointer::before { content: "\f245"; } .fa-mouse-pointer::before { content: "\f245"; } .fa-maximize::before { content: "\f31e"; } .fa-expand-arrows-alt::before { content: "\f31e"; } .fa-charging-station::before { content: "\f5e7"; } .fa-shapes::before { content: "\f61f"; } .fa-triangle-circle-square::before { content: "\f61f"; } .fa-shuffle::before { content: "\f074"; } .fa-random::before { content: "\f074"; } .fa-person-running::before { content: "\f70c"; } .fa-running::before { content: "\f70c"; } .fa-mobile-retro::before { content: "\e527"; } .fa-grip-lines-vertical::before { content: "\f7a5"; } .fa-spider::before { content: "\f717"; } .fa-hands-bound::before { content: "\e4f9"; } .fa-file-invoice-dollar::before { content: "\f571"; } .fa-plane-circle-exclamation::before { content: "\e556"; } .fa-x-ray::before { content: "\f497"; } .fa-spell-check::before { content: "\f891"; } .fa-slash::before { content: "\f715"; } .fa-computer-mouse::before { content: "\f8cc"; } .fa-mouse::before { content: "\f8cc"; } .fa-arrow-right-to-bracket::before { content: "\f090"; } .fa-sign-in::before { content: "\f090"; } .fa-shop-slash::before { content: "\e070"; } .fa-store-alt-slash::before { content: "\e070"; } .fa-server::before { content: "\f233"; } .fa-virus-covid-slash::before { content: "\e4a9"; } .fa-shop-lock::before { content: "\e4a5"; } .fa-hourglass-start::before { content: "\f251"; } .fa-hourglass-1::before { content: "\f251"; } .fa-blender-phone::before { content: "\f6b6"; } .fa-building-wheat::before { content: "\e4db"; } .fa-person-breastfeeding::before { content: "\e53a"; } .fa-right-to-bracket::before { content: "\f2f6"; } .fa-sign-in-alt::before { content: "\f2f6"; } .fa-venus::before { content: "\f221"; } .fa-passport::before { content: "\f5ab"; } .fa-heart-pulse::before { content: "\f21e"; } .fa-heartbeat::before { content: "\f21e"; } .fa-people-carry-box::before { content: "\f4ce"; } .fa-people-carry::before { content: "\f4ce"; } .fa-temperature-high::before { content: "\f769"; } .fa-microchip::before { content: "\f2db"; } .fa-crown::before { content: "\f521"; } .fa-weight-hanging::before { content: "\f5cd"; } .fa-xmarks-lines::before { content: "\e59a"; } .fa-file-prescription::before { content: "\f572"; } .fa-weight-scale::before { content: "\f496"; } .fa-weight::before { content: "\f496"; } .fa-user-group::before { content: "\f500"; } .fa-user-friends::before { content: "\f500"; } .fa-arrow-up-a-z::before { content: "\f15e"; } .fa-sort-alpha-up::before { content: "\f15e"; } .fa-chess-knight::before { content: "\f441"; } .fa-face-laugh-squint::before { content: "\f59b"; } .fa-laugh-squint::before { content: "\f59b"; } .fa-wheelchair::before { content: "\f193"; } .fa-circle-arrow-up::before { content: "\f0aa"; } .fa-arrow-circle-up::before { content: "\f0aa"; } .fa-toggle-on::before { content: "\f205"; } .fa-person-walking::before { content: "\f554"; } .fa-walking::before { content: "\f554"; } .fa-l::before { content: "L"; } .fa-fire::before { content: "\f06d"; } .fa-bed-pulse::before { content: "\f487"; } .fa-procedures::before { content: "\f487"; } .fa-shuttle-space::before { content: "\f197"; } .fa-space-shuttle::before { content: "\f197"; } .fa-face-laugh::before { content: "\f599"; } .fa-laugh::before { content: "\f599"; } .fa-folder-open::before { content: "\f07c"; } .fa-heart-circle-plus::before { content: "\e500"; } .fa-code-fork::before { content: "\e13b"; } .fa-city::before { content: "\f64f"; } .fa-microphone-lines::before { content: "\f3c9"; } .fa-microphone-alt::before { content: "\f3c9"; } .fa-pepper-hot::before { content: "\f816"; } .fa-unlock::before { content: "\f09c"; } .fa-colon-sign::before { content: "\e140"; } .fa-headset::before { content: "\f590"; } .fa-store-slash::before { content: "\e071"; } .fa-road-circle-xmark::before { content: "\e566"; } .fa-user-minus::before { content: "\f503"; } .fa-mars-stroke-up::before { content: "\f22a"; } .fa-mars-stroke-v::before { content: "\f22a"; } .fa-champagne-glasses::before { content: "\f79f"; } .fa-glass-cheers::before { content: "\f79f"; } .fa-clipboard::before { content: "\f328"; } .fa-house-circle-exclamation::before { content: "\e50a"; } .fa-file-arrow-up::before { content: "\f574"; } .fa-file-upload::before { content: "\f574"; } .fa-wifi::before { content: "\f1eb"; } .fa-wifi-3::before { content: "\f1eb"; } .fa-wifi-strong::before { content: "\f1eb"; } .fa-bath::before { content: "\f2cd"; } .fa-bathtub::before { content: "\f2cd"; } .fa-underline::before { content: "\f0cd"; } .fa-user-pen::before { content: "\f4ff"; } .fa-user-edit::before { content: "\f4ff"; } .fa-signature::before { content: "\f5b7"; } .fa-stroopwafel::before { content: "\f551"; } .fa-bold::before { content: "\f032"; } .fa-anchor-lock::before { content: "\e4ad"; } .fa-building-ngo::before { content: "\e4d7"; } .fa-manat-sign::before { content: "\e1d5"; } .fa-not-equal::before { content: "\f53e"; } .fa-border-top-left::before { content: "\f853"; } .fa-border-style::before { content: "\f853"; } .fa-map-location-dot::before { content: "\f5a0"; } .fa-map-marked-alt::before { content: "\f5a0"; } .fa-jedi::before { content: "\f669"; } .fa-square-poll-vertical::before { content: "\f681"; } .fa-poll::before { content: "\f681"; } .fa-mug-hot::before { content: "\f7b6"; } .fa-car-battery::before { content: "\f5df"; } .fa-battery-car::before { content: "\f5df"; } .fa-gift::before { content: "\f06b"; } .fa-dice-two::before { content: "\f528"; } .fa-chess-queen::before { content: "\f445"; } .fa-glasses::before { content: "\f530"; } .fa-chess-board::before { content: "\f43c"; } .fa-building-circle-check::before { content: "\e4d2"; } .fa-person-chalkboard::before { content: "\e53d"; } .fa-mars-stroke-right::before { content: "\f22b"; } .fa-mars-stroke-h::before { content: "\f22b"; } .fa-hand-back-fist::before { content: "\f255"; } .fa-hand-rock::before { content: "\f255"; } .fa-square-caret-up::before { content: "\f151"; } .fa-caret-square-up::before { content: "\f151"; } .fa-cloud-showers-water::before { content: "\e4e4"; } .fa-chart-bar::before { content: "\f080"; } .fa-bar-chart::before { content: "\f080"; } .fa-hands-bubbles::before { content: "\e05e"; } .fa-hands-wash::before { content: "\e05e"; } .fa-less-than-equal::before { content: "\f537"; } .fa-train::before { content: "\f238"; } .fa-eye-low-vision::before { content: "\f2a8"; } .fa-low-vision::before { content: "\f2a8"; } .fa-crow::before { content: "\f520"; } .fa-sailboat::before { content: "\e445"; } .fa-window-restore::before { content: "\f2d2"; } .fa-square-plus::before { content: "\f0fe"; } .fa-plus-square::before { content: "\f0fe"; } .fa-torii-gate::before { content: "\f6a1"; } .fa-frog::before { content: "\f52e"; } .fa-bucket::before { content: "\e4cf"; } .fa-image::before { content: "\f03e"; } .fa-microphone::before { content: "\f130"; } .fa-cow::before { content: "\f6c8"; } .fa-caret-up::before { content: "\f0d8"; } .fa-screwdriver::before { content: "\f54a"; } .fa-folder-closed::before { content: "\e185"; } .fa-house-tsunami::before { content: "\e515"; } .fa-square-nfi::before { content: "\e576"; } .fa-arrow-up-from-ground-water::before { content: "\e4b5"; } .fa-martini-glass::before { content: "\f57b"; } .fa-glass-martini-alt::before { content: "\f57b"; } .fa-rotate-left::before { content: "\f2ea"; } .fa-rotate-back::before { content: "\f2ea"; } .fa-rotate-backward::before { content: "\f2ea"; } .fa-undo-alt::before { content: "\f2ea"; } .fa-table-columns::before { content: "\f0db"; } .fa-columns::before { content: "\f0db"; } .fa-lemon::before { content: "\f094"; } .fa-head-side-mask::before { content: "\e063"; } .fa-handshake::before { content: "\f2b5"; } .fa-gem::before { content: "\f3a5"; } .fa-dolly::before { content: "\f472"; } .fa-dolly-box::before { content: "\f472"; } .fa-smoking::before { content: "\f48d"; } .fa-minimize::before { content: "\f78c"; } .fa-compress-arrows-alt::before { content: "\f78c"; } .fa-monument::before { content: "\f5a6"; } .fa-snowplow::before { content: "\f7d2"; } .fa-angles-right::before { content: "\f101"; } .fa-angle-double-right::before { content: "\f101"; } .fa-cannabis::before { content: "\f55f"; } .fa-circle-play::before { content: "\f144"; } .fa-play-circle::before { content: "\f144"; } .fa-tablets::before { content: "\f490"; } .fa-ethernet::before { content: "\f796"; } .fa-euro-sign::before { content: "\f153"; } .fa-eur::before { content: "\f153"; } .fa-euro::before { content: "\f153"; } .fa-chair::before { content: "\f6c0"; } .fa-circle-check::before { content: "\f058"; } .fa-check-circle::before { content: "\f058"; } .fa-circle-stop::before { content: "\f28d"; } .fa-stop-circle::before { content: "\f28d"; } .fa-compass-drafting::before { content: "\f568"; } .fa-drafting-compass::before { content: "\f568"; } .fa-plate-wheat::before { content: "\e55a"; } .fa-icicles::before { content: "\f7ad"; } .fa-person-shelter::before { content: "\e54f"; } .fa-neuter::before { content: "\f22c"; } .fa-id-badge::before { content: "\f2c1"; } .fa-marker::before { content: "\f5a1"; } .fa-face-laugh-beam::before { content: "\f59a"; } .fa-laugh-beam::before { content: "\f59a"; } .fa-helicopter-symbol::before { content: "\e502"; } .fa-universal-access::before { content: "\f29a"; } .fa-circle-chevron-up::before { content: "\f139"; } .fa-chevron-circle-up::before { content: "\f139"; } .fa-lari-sign::before { content: "\e1c8"; } .fa-volcano::before { content: "\f770"; } .fa-person-walking-dashed-line-arrow-right::before { content: "\e553"; } .fa-sterling-sign::before { content: "\f154"; } .fa-gbp::before { content: "\f154"; } .fa-pound-sign::before { content: "\f154"; } .fa-viruses::before { content: "\e076"; } .fa-square-person-confined::before { content: "\e577"; } .fa-user-tie::before { content: "\f508"; } .fa-arrow-down-long::before { content: "\f175"; } .fa-long-arrow-down::before { content: "\f175"; } .fa-tent-arrow-down-to-line::before { content: "\e57e"; } .fa-certificate::before { content: "\f0a3"; } .fa-reply-all::before { content: "\f122"; } .fa-mail-reply-all::before { content: "\f122"; } .fa-suitcase::before { content: "\f0f2"; } .fa-person-skating::before { content: "\f7c5"; } .fa-skating::before { content: "\f7c5"; } .fa-filter-circle-dollar::before { content: "\f662"; } .fa-funnel-dollar::before { content: "\f662"; } .fa-camera-retro::before { content: "\f083"; } .fa-circle-arrow-down::before { content: "\f0ab"; } .fa-arrow-circle-down::before { content: "\f0ab"; } .fa-file-import::before { content: "\f56f"; } .fa-arrow-right-to-file::before { content: "\f56f"; } .fa-square-arrow-up-right::before { content: "\f14c"; } .fa-external-link-square::before { content: "\f14c"; } .fa-box-open::before { content: "\f49e"; } .fa-scroll::before { content: "\f70e"; } .fa-spa::before { content: "\f5bb"; } .fa-location-pin-lock::before { content: "\e51f"; } .fa-pause::before { content: "\f04c"; } .fa-hill-avalanche::before { content: "\e507"; } .fa-temperature-empty::before { content: "\f2cb"; } .fa-temperature-0::before { content: "\f2cb"; } .fa-thermometer-0::before { content: "\f2cb"; } .fa-thermometer-empty::before { content: "\f2cb"; } .fa-bomb::before { content: "\f1e2"; } .fa-registered::before { content: "\f25d"; } .fa-address-card::before { content: "\f2bb"; } .fa-contact-card::before { content: "\f2bb"; } .fa-vcard::before { content: "\f2bb"; } .fa-scale-unbalanced-flip::before { content: "\f516"; } .fa-balance-scale-right::before { content: "\f516"; } .fa-subscript::before { content: "\f12c"; } .fa-diamond-turn-right::before { content: "\f5eb"; } .fa-directions::before { content: "\f5eb"; } .fa-burst::before { content: "\e4dc"; } .fa-house-laptop::before { content: "\e066"; } .fa-laptop-house::before { content: "\e066"; } .fa-face-tired::before { content: "\f5c8"; } .fa-tired::before { content: "\f5c8"; } .fa-money-bills::before { content: "\e1f3"; } .fa-smog::before { content: "\f75f"; } .fa-crutch::before { content: "\f7f7"; } .fa-cloud-arrow-up::before { content: "\f0ee"; } .fa-cloud-upload::before { content: "\f0ee"; } .fa-cloud-upload-alt::before { content: "\f0ee"; } .fa-palette::before { content: "\f53f"; } .fa-arrows-turn-right::before { content: "\e4c0"; } .fa-vest::before { content: "\e085"; } .fa-ferry::before { content: "\e4ea"; } .fa-arrows-down-to-people::before { content: "\e4b9"; } .fa-seedling::before { content: "\f4d8"; } .fa-sprout::before { content: "\f4d8"; } .fa-left-right::before { content: "\f337"; } .fa-arrows-alt-h::before { content: "\f337"; } .fa-boxes-packing::before { content: "\e4c7"; } .fa-circle-arrow-left::before { content: "\f0a8"; } .fa-arrow-circle-left::before { content: "\f0a8"; } .fa-group-arrows-rotate::before { content: "\e4f6"; } .fa-bowl-food::before { content: "\e4c6"; } .fa-candy-cane::before { content: "\f786"; } .fa-arrow-down-wide-short::before { content: "\f160"; } .fa-sort-amount-asc::before { content: "\f160"; } .fa-sort-amount-down::before { content: "\f160"; } .fa-cloud-bolt::before { content: "\f76c"; } .fa-thunderstorm::before { content: "\f76c"; } .fa-text-slash::before { content: "\f87d"; } .fa-remove-format::before { content: "\f87d"; } .fa-face-smile-wink::before { content: "\f4da"; } .fa-smile-wink::before { content: "\f4da"; } .fa-file-word::before { content: "\f1c2"; } .fa-file-powerpoint::before { content: "\f1c4"; } .fa-arrows-left-right::before { content: "\f07e"; } .fa-arrows-h::before { content: "\f07e"; } .fa-house-lock::before { content: "\e510"; } .fa-cloud-arrow-down::before { content: "\f0ed"; } .fa-cloud-download::before { content: "\f0ed"; } .fa-cloud-download-alt::before { content: "\f0ed"; } .fa-children::before { content: "\e4e1"; } .fa-chalkboard::before { content: "\f51b"; } .fa-blackboard::before { content: "\f51b"; } .fa-user-large-slash::before { content: "\f4fa"; } .fa-user-alt-slash::before { content: "\f4fa"; } .fa-envelope-open::before { content: "\f2b6"; } .fa-handshake-simple-slash::before { content: "\e05f"; } .fa-handshake-alt-slash::before { content: "\e05f"; } .fa-mattress-pillow::before { content: "\e525"; } .fa-guarani-sign::before { content: "\e19a"; } .fa-arrows-rotate::before { content: "\f021"; } .fa-refresh::before { content: "\f021"; } .fa-sync::before { content: "\f021"; } .fa-fire-extinguisher::before { content: "\f134"; } .fa-cruzeiro-sign::before { content: "\e152"; } .fa-greater-than-equal::before { content: "\f532"; } .fa-shield-halved::before { content: "\f3ed"; } .fa-shield-alt::before { content: "\f3ed"; } .fa-book-atlas::before { content: "\f558"; } .fa-atlas::before { content: "\f558"; } .fa-virus::before { content: "\e074"; } .fa-envelope-circle-check::before { content: "\e4e8"; } .fa-layer-group::before { content: "\f5fd"; } .fa-arrows-to-dot::before { content: "\e4be"; } .fa-archway::before { content: "\f557"; } .fa-heart-circle-check::before { content: "\e4fd"; } .fa-house-chimney-crack::before { content: "\f6f1"; } .fa-house-damage::before { content: "\f6f1"; } .fa-file-zipper::before { content: "\f1c6"; } .fa-file-archive::before { content: "\f1c6"; } .fa-square::before { content: "\f0c8"; } .fa-martini-glass-empty::before { content: "\f000"; } .fa-glass-martini::before { content: "\f000"; } .fa-couch::before { content: "\f4b8"; } .fa-cedi-sign::before { content: "\e0df"; } .fa-italic::before { content: "\f033"; } .fa-church::before { content: "\f51d"; } .fa-comments-dollar::before { content: "\f653"; } .fa-democrat::before { content: "\f747"; } .fa-z::before { content: "Z"; } .fa-person-skiing::before { content: "\f7c9"; } .fa-skiing::before { content: "\f7c9"; } .fa-road-lock::before { content: "\e567"; } .fa-a::before { content: "A"; } .fa-temperature-arrow-down::before { content: "\e03f"; } .fa-temperature-down::before { content: "\e03f"; } .fa-feather-pointed::before { content: "\f56b"; } .fa-feather-alt::before { content: "\f56b"; } .fa-p::before { content: "P"; } .fa-snowflake::before { content: "\f2dc"; } .fa-newspaper::before { content: "\f1ea"; } .fa-rectangle-ad::before { content: "\f641"; } .fa-ad::before { content: "\f641"; } .fa-circle-arrow-right::before { content: "\f0a9"; } .fa-arrow-circle-right::before { content: "\f0a9"; } .fa-filter-circle-xmark::before { content: "\e17b"; } .fa-locust::before { content: "\e520"; } .fa-sort::before { content: "\f0dc"; } .fa-unsorted::before { content: "\f0dc"; } .fa-list-ol::before { content: "\f0cb"; } .fa-list-1-2::before { content: "\f0cb"; } .fa-list-numeric::before { content: "\f0cb"; } .fa-person-dress-burst::before { content: "\e544"; } .fa-money-check-dollar::before { content: "\f53d"; } .fa-money-check-alt::before { content: "\f53d"; } .fa-vector-square::before { content: "\f5cb"; } .fa-bread-slice::before { content: "\f7ec"; } .fa-language::before { content: "\f1ab"; } .fa-face-kiss-wink-heart::before { content: "\f598"; } .fa-kiss-wink-heart::before { content: "\f598"; } .fa-filter::before { content: "\f0b0"; } .fa-question::before { content: "\?"; } .fa-file-signature::before { content: "\f573"; } .fa-up-down-left-right::before { content: "\f0b2"; } .fa-arrows-alt::before { content: "\f0b2"; } .fa-house-chimney-user::before { content: "\e065"; } .fa-hand-holding-heart::before { content: "\f4be"; } .fa-puzzle-piece::before { content: "\f12e"; } .fa-money-check::before { content: "\f53c"; } .fa-star-half-stroke::before { content: "\f5c0"; } .fa-star-half-alt::before { content: "\f5c0"; } .fa-code::before { content: "\f121"; } .fa-whiskey-glass::before { content: "\f7a0"; } .fa-glass-whiskey::before { content: "\f7a0"; } .fa-building-circle-exclamation::before { content: "\e4d3"; } .fa-magnifying-glass-chart::before { content: "\e522"; } .fa-arrow-up-right-from-square::before { content: "\f08e"; } .fa-external-link::before { content: "\f08e"; } .fa-cubes-stacked::before { content: "\e4e6"; } .fa-won-sign::before { content: "\f159"; } .fa-krw::before { content: "\f159"; } .fa-won::before { content: "\f159"; } .fa-virus-covid::before { content: "\e4a8"; } .fa-austral-sign::before { content: "\e0a9"; } .fa-f::before { content: "F"; } .fa-leaf::before { content: "\f06c"; } .fa-road::before { content: "\f018"; } .fa-taxi::before { content: "\f1ba"; } .fa-cab::before { content: "\f1ba"; } .fa-person-circle-plus::before { content: "\e541"; } .fa-chart-pie::before { content: "\f200"; } .fa-pie-chart::before { content: "\f200"; } .fa-bolt-lightning::before { content: "\e0b7"; } .fa-sack-xmark::before { content: "\e56a"; } .fa-file-excel::before { content: "\f1c3"; } .fa-file-contract::before { content: "\f56c"; } .fa-fish-fins::before { content: "\e4f2"; } .fa-building-flag::before { content: "\e4d5"; } .fa-face-grin-beam::before { content: "\f582"; } .fa-grin-beam::before { content: "\f582"; } .fa-object-ungroup::before { content: "\f248"; } .fa-poop::before { content: "\f619"; } .fa-location-pin::before { content: "\f041"; } .fa-map-marker::before { content: "\f041"; } .fa-kaaba::before { content: "\f66b"; } .fa-toilet-paper::before { content: "\f71e"; } .fa-helmet-safety::before { content: "\f807"; } .fa-hard-hat::before { content: "\f807"; } .fa-hat-hard::before { content: "\f807"; } .fa-eject::before { content: "\f052"; } .fa-circle-right::before { content: "\f35a"; } .fa-arrow-alt-circle-right::before { content: "\f35a"; } .fa-plane-circle-check::before { content: "\e555"; } .fa-face-rolling-eyes::before { content: "\f5a5"; } .fa-meh-rolling-eyes::before { content: "\f5a5"; } .fa-object-group::before { content: "\f247"; } .fa-chart-line::before { content: "\f201"; } .fa-line-chart::before { content: "\f201"; } .fa-mask-ventilator::before { content: "\e524"; } .fa-arrow-right::before { content: "\f061"; } .fa-signs-post::before { content: "\f277"; } .fa-map-signs::before { content: "\f277"; } .fa-cash-register::before { content: "\f788"; } .fa-person-circle-question::before { content: "\e542"; } .fa-h::before { content: "H"; } .fa-tarp::before { content: "\e57b"; } .fa-screwdriver-wrench::before { content: "\f7d9"; } .fa-tools::before { content: "\f7d9"; } .fa-arrows-to-eye::before { content: "\e4bf"; } .fa-plug-circle-bolt::before { content: "\e55b"; } .fa-heart::before { content: "\f004"; } .fa-mars-and-venus::before { content: "\f224"; } .fa-house-user::before { content: "\e1b0"; } .fa-home-user::before { content: "\e1b0"; } .fa-dumpster-fire::before { content: "\f794"; } .fa-house-crack::before { content: "\e3b1"; } .fa-martini-glass-citrus::before { content: "\f561"; } .fa-cocktail::before { content: "\f561"; } .fa-face-surprise::before { content: "\f5c2"; } .fa-surprise::before { content: "\f5c2"; } .fa-bottle-water::before { content: "\e4c5"; } .fa-circle-pause::before { content: "\f28b"; } .fa-pause-circle::before { content: "\f28b"; } .fa-toilet-paper-slash::before { content: "\e072"; } .fa-apple-whole::before { content: "\f5d1"; } .fa-apple-alt::before { content: "\f5d1"; } .fa-kitchen-set::before { content: "\e51a"; } .fa-r::before { content: "R"; } .fa-temperature-quarter::before { content: "\f2ca"; } .fa-temperature-1::before { content: "\f2ca"; } .fa-thermometer-1::before { content: "\f2ca"; } .fa-thermometer-quarter::before { content: "\f2ca"; } .fa-cube::before { content: "\f1b2"; } .fa-bitcoin-sign::before { content: "\e0b4"; } .fa-shield-dog::before { content: "\e573"; } .fa-solar-panel::before { content: "\f5ba"; } .fa-lock-open::before { content: "\f3c1"; } .fa-elevator::before { content: "\e16d"; } .fa-money-bill-transfer::before { content: "\e528"; } .fa-money-bill-trend-up::before { content: "\e529"; } .fa-house-flood-water-circle-arrow-right::before { content: "\e50f"; } .fa-square-poll-horizontal::before { content: "\f682"; } .fa-poll-h::before { content: "\f682"; } .fa-circle::before { content: "\f111"; } .fa-backward-fast::before { content: "\f049"; } .fa-fast-backward::before { content: "\f049"; } .fa-recycle::before { content: "\f1b8"; } .fa-user-astronaut::before { content: "\f4fb"; } .fa-plane-slash::before { content: "\e069"; } .fa-trademark::before { content: "\f25c"; } .fa-basketball::before { content: "\f434"; } .fa-basketball-ball::before { content: "\f434"; } .fa-satellite-dish::before { content: "\f7c0"; } .fa-circle-up::before { content: "\f35b"; } .fa-arrow-alt-circle-up::before { content: "\f35b"; } .fa-mobile-screen-button::before { content: "\f3cd"; } .fa-mobile-alt::before { content: "\f3cd"; } .fa-volume-high::before { content: "\f028"; } .fa-volume-up::before { content: "\f028"; } .fa-users-rays::before { content: "\e593"; } .fa-wallet::before { content: "\f555"; } .fa-clipboard-check::before { content: "\f46c"; } .fa-file-audio::before { content: "\f1c7"; } .fa-burger::before { content: "\f805"; } .fa-hamburger::before { content: "\f805"; } .fa-wrench::before { content: "\f0ad"; } .fa-bugs::before { content: "\e4d0"; } .fa-rupee-sign::before { content: "\f156"; } .fa-rupee::before { content: "\f156"; } .fa-file-image::before { content: "\f1c5"; } .fa-circle-question::before { content: "\f059"; } .fa-question-circle::before { content: "\f059"; } .fa-plane-departure::before { content: "\f5b0"; } .fa-handshake-slash::before { content: "\e060"; } .fa-book-bookmark::before { content: "\e0bb"; } .fa-code-branch::before { content: "\f126"; } .fa-hat-cowboy::before { content: "\f8c0"; } .fa-bridge::before { content: "\e4c8"; } .fa-phone-flip::before { content: "\f879"; } .fa-phone-alt::before { content: "\f879"; } .fa-truck-front::before { content: "\e2b7"; } .fa-cat::before { content: "\f6be"; } .fa-anchor-circle-exclamation::before { content: "\e4ab"; } .fa-truck-field::before { content: "\e58d"; } .fa-route::before { content: "\f4d7"; } .fa-clipboard-question::before { content: "\e4e3"; } .fa-panorama::before { content: "\e209"; } .fa-comment-medical::before { content: "\f7f5"; } .fa-teeth-open::before { content: "\f62f"; } .fa-file-circle-minus::before { content: "\e4ed"; } .fa-tags::before { content: "\f02c"; } .fa-wine-glass::before { content: "\f4e3"; } .fa-forward-fast::before { content: "\f050"; } .fa-fast-forward::before { content: "\f050"; } .fa-face-meh-blank::before { content: "\f5a4"; } .fa-meh-blank::before { content: "\f5a4"; } .fa-square-parking::before { content: "\f540"; } .fa-parking::before { content: "\f540"; } .fa-house-signal::before { content: "\e012"; } .fa-bars-progress::before { content: "\f828"; } .fa-tasks-alt::before { content: "\f828"; } .fa-faucet-drip::before { content: "\e006"; } .fa-cart-flatbed::before { content: "\f474"; } .fa-dolly-flatbed::before { content: "\f474"; } .fa-ban-smoking::before { content: "\f54d"; } .fa-smoking-ban::before { content: "\f54d"; } .fa-terminal::before { content: "\f120"; } .fa-mobile-button::before { content: "\f10b"; } .fa-house-medical-flag::before { content: "\e514"; } .fa-basket-shopping::before { content: "\f291"; } .fa-shopping-basket::before { content: "\f291"; } .fa-tape::before { content: "\f4db"; } .fa-bus-simple::before { content: "\f55e"; } .fa-bus-alt::before { content: "\f55e"; } .fa-eye::before { content: "\f06e"; } .fa-face-sad-cry::before { content: "\f5b3"; } .fa-sad-cry::before { content: "\f5b3"; } .fa-audio-description::before { content: "\f29e"; } .fa-person-military-to-person::before { content: "\e54c"; } .fa-file-shield::before { content: "\e4f0"; } .fa-user-slash::before { content: "\f506"; } .fa-pen::before { content: "\f304"; } .fa-tower-observation::before { content: "\e586"; } .fa-file-code::before { content: "\f1c9"; } .fa-signal::before { content: "\f012"; } .fa-signal-5::before { content: "\f012"; } .fa-signal-perfect::before { content: "\f012"; } .fa-bus::before { content: "\f207"; } .fa-heart-circle-xmark::before { content: "\e501"; } .fa-house-chimney::before { content: "\e3af"; } .fa-home-lg::before { content: "\e3af"; } .fa-window-maximize::before { content: "\f2d0"; } .fa-face-frown::before { content: "\f119"; } .fa-frown::before { content: "\f119"; } .fa-prescription::before { content: "\f5b1"; } .fa-shop::before { content: "\f54f"; } .fa-store-alt::before { content: "\f54f"; } .fa-floppy-disk::before { content: "\f0c7"; } .fa-save::before { content: "\f0c7"; } .fa-vihara::before { content: "\f6a7"; } .fa-scale-unbalanced::before { content: "\f515"; } .fa-balance-scale-left::before { content: "\f515"; } .fa-sort-up::before { content: "\f0de"; } .fa-sort-asc::before { content: "\f0de"; } .fa-comment-dots::before { content: "\f4ad"; } .fa-commenting::before { content: "\f4ad"; } .fa-plant-wilt::before { content: "\e5aa"; } .fa-diamond::before { content: "\f219"; } .fa-face-grin-squint::before { content: "\f585"; } .fa-grin-squint::before { content: "\f585"; } .fa-hand-holding-dollar::before { content: "\f4c0"; } .fa-hand-holding-usd::before { content: "\f4c0"; } .fa-bacterium::before { content: "\e05a"; } .fa-hand-pointer::before { content: "\f25a"; } .fa-drum-steelpan::before { content: "\f56a"; } .fa-hand-scissors::before { content: "\f257"; } .fa-hands-praying::before { content: "\f684"; } .fa-praying-hands::before { content: "\f684"; } .fa-arrow-rotate-right::before { content: "\f01e"; } .fa-arrow-right-rotate::before { content: "\f01e"; } .fa-arrow-rotate-forward::before { content: "\f01e"; } .fa-redo::before { content: "\f01e"; } .fa-biohazard::before { content: "\f780"; } .fa-location-crosshairs::before { content: "\f601"; } .fa-location::before { content: "\f601"; } .fa-mars-double::before { content: "\f227"; } .fa-child-dress::before { content: "\e59c"; } .fa-users-between-lines::before { content: "\e591"; } .fa-lungs-virus::before { content: "\e067"; } .fa-face-grin-tears::before { content: "\f588"; } .fa-grin-tears::before { content: "\f588"; } .fa-phone::before { content: "\f095"; } .fa-calendar-xmark::before { content: "\f273"; } .fa-calendar-times::before { content: "\f273"; } .fa-child-reaching::before { content: "\e59d"; } .fa-head-side-virus::before { content: "\e064"; } .fa-user-gear::before { content: "\f4fe"; } .fa-user-cog::before { content: "\f4fe"; } .fa-arrow-up-1-9::before { content: "\f163"; } .fa-sort-numeric-up::before { content: "\f163"; } .fa-door-closed::before { content: "\f52a"; } .fa-shield-virus::before { content: "\e06c"; } .fa-dice-six::before { content: "\f526"; } .fa-mosquito-net::before { content: "\e52c"; } .fa-bridge-water::before { content: "\e4ce"; } .fa-person-booth::before { content: "\f756"; } .fa-text-width::before { content: "\f035"; } .fa-hat-wizard::before { content: "\f6e8"; } .fa-pen-fancy::before { content: "\f5ac"; } .fa-person-digging::before { content: "\f85e"; } .fa-digging::before { content: "\f85e"; } .fa-trash::before { content: "\f1f8"; } .fa-gauge-simple::before { content: "\f629"; } .fa-gauge-simple-med::before { content: "\f629"; } .fa-tachometer-average::before { content: "\f629"; } .fa-book-medical::before { content: "\f7e6"; } .fa-poo::before { content: "\f2fe"; } .fa-quote-right::before { content: "\f10e"; } .fa-quote-right-alt::before { content: "\f10e"; } .fa-shirt::before { content: "\f553"; } .fa-t-shirt::before { content: "\f553"; } .fa-tshirt::before { content: "\f553"; } .fa-cubes::before { content: "\f1b3"; } .fa-divide::before { content: "\f529"; } .fa-tenge-sign::before { content: "\f7d7"; } .fa-tenge::before { content: "\f7d7"; } .fa-headphones::before { content: "\f025"; } .fa-hands-holding::before { content: "\f4c2"; } .fa-hands-clapping::before { content: "\e1a8"; } .fa-republican::before { content: "\f75e"; } .fa-arrow-left::before { content: "\f060"; } .fa-person-circle-xmark::before { content: "\e543"; } .fa-ruler::before { content: "\f545"; } .fa-align-left::before { content: "\f036"; } .fa-dice-d6::before { content: "\f6d1"; } .fa-restroom::before { content: "\f7bd"; } .fa-j::before { content: "J"; } .fa-users-viewfinder::before { content: "\e595"; } .fa-file-video::before { content: "\f1c8"; } .fa-up-right-from-square::before { content: "\f35d"; } .fa-external-link-alt::before { content: "\f35d"; } .fa-table-cells::before { content: "\f00a"; } .fa-th::before { content: "\f00a"; } .fa-file-pdf::before { content: "\f1c1"; } .fa-book-bible::before { content: "\f647"; } .fa-bible::before { content: "\f647"; } .fa-o::before { content: "O"; } .fa-suitcase-medical::before { content: "\f0fa"; } .fa-medkit::before { content: "\f0fa"; } .fa-user-secret::before { content: "\f21b"; } .fa-otter::before { content: "\f700"; } .fa-person-dress::before { content: "\f182"; } .fa-female::before { content: "\f182"; } .fa-comment-dollar::before { content: "\f651"; } .fa-business-time::before { content: "\f64a"; } .fa-briefcase-clock::before { content: "\f64a"; } .fa-table-cells-large::before { content: "\f009"; } .fa-th-large::before { content: "\f009"; } .fa-book-tanakh::before { content: "\f827"; } .fa-tanakh::before { content: "\f827"; } .fa-phone-volume::before { content: "\f2a0"; } .fa-volume-control-phone::before { content: "\f2a0"; } .fa-hat-cowboy-side::before { content: "\f8c1"; } .fa-clipboard-user::before { content: "\f7f3"; } .fa-child::before { content: "\f1ae"; } .fa-lira-sign::before { content: "\f195"; } .fa-satellite::before { content: "\f7bf"; } .fa-plane-lock::before { content: "\e558"; } .fa-tag::before { content: "\f02b"; } .fa-comment::before { content: "\f075"; } .fa-cake-candles::before { content: "\f1fd"; } .fa-birthday-cake::before { content: "\f1fd"; } .fa-cake::before { content: "\f1fd"; } .fa-envelope::before { content: "\f0e0"; } .fa-angles-up::before { content: "\f102"; } .fa-angle-double-up::before { content: "\f102"; } .fa-paperclip::before { content: "\f0c6"; } .fa-arrow-right-to-city::before { content: "\e4b3"; } .fa-ribbon::before { content: "\f4d6"; } .fa-lungs::before { content: "\f604"; } .fa-arrow-up-9-1::before { content: "\f887"; } .fa-sort-numeric-up-alt::before { content: "\f887"; } .fa-litecoin-sign::before { content: "\e1d3"; } .fa-border-none::before { content: "\f850"; } .fa-circle-nodes::before { content: "\e4e2"; } .fa-parachute-box::before { content: "\f4cd"; } .fa-indent::before { content: "\f03c"; } .fa-truck-field-un::before { content: "\e58e"; } .fa-hourglass::before { content: "\f254"; } .fa-hourglass-empty::before { content: "\f254"; } .fa-mountain::before { content: "\f6fc"; } .fa-user-doctor::before { content: "\f0f0"; } .fa-user-md::before { content: "\f0f0"; } .fa-circle-info::before { content: "\f05a"; } .fa-info-circle::before { content: "\f05a"; } .fa-cloud-meatball::before { content: "\f73b"; } .fa-camera::before { content: "\f030"; } .fa-camera-alt::before { content: "\f030"; } .fa-square-virus::before { content: "\e578"; } .fa-meteor::before { content: "\f753"; } .fa-car-on::before { content: "\e4dd"; } .fa-sleigh::before { content: "\f7cc"; } .fa-arrow-down-1-9::before { content: "\f162"; } .fa-sort-numeric-asc::before { content: "\f162"; } .fa-sort-numeric-down::before { content: "\f162"; } .fa-hand-holding-droplet::before { content: "\f4c1"; } .fa-hand-holding-water::before { content: "\f4c1"; } .fa-water::before { content: "\f773"; } .fa-calendar-check::before { content: "\f274"; } .fa-braille::before { content: "\f2a1"; } .fa-prescription-bottle-medical::before { content: "\f486"; } .fa-prescription-bottle-alt::before { content: "\f486"; } .fa-landmark::before { content: "\f66f"; } .fa-truck::before { content: "\f0d1"; } .fa-crosshairs::before { content: "\f05b"; } .fa-person-cane::before { content: "\e53c"; } .fa-tent::before { content: "\e57d"; } .fa-vest-patches::before { content: "\e086"; } .fa-check-double::before { content: "\f560"; } .fa-arrow-down-a-z::before { content: "\f15d"; } .fa-sort-alpha-asc::before { content: "\f15d"; } .fa-sort-alpha-down::before { content: "\f15d"; } .fa-money-bill-wheat::before { content: "\e52a"; } .fa-cookie::before { content: "\f563"; } .fa-arrow-rotate-left::before { content: "\f0e2"; } .fa-arrow-left-rotate::before { content: "\f0e2"; } .fa-arrow-rotate-back::before { content: "\f0e2"; } .fa-arrow-rotate-backward::before { content: "\f0e2"; } .fa-undo::before { content: "\f0e2"; } .fa-hard-drive::before { content: "\f0a0"; } .fa-hdd::before { content: "\f0a0"; } .fa-face-grin-squint-tears::before { content: "\f586"; } .fa-grin-squint-tears::before { content: "\f586"; } .fa-dumbbell::before { content: "\f44b"; } .fa-rectangle-list::before { content: "\f022"; } .fa-list-alt::before { content: "\f022"; } .fa-tarp-droplet::before { content: "\e57c"; } .fa-house-medical-circle-check::before { content: "\e511"; } .fa-person-skiing-nordic::before { content: "\f7ca"; } .fa-skiing-nordic::before { content: "\f7ca"; } .fa-calendar-plus::before { content: "\f271"; } .fa-plane-arrival::before { content: "\f5af"; } .fa-circle-left::before { content: "\f359"; } .fa-arrow-alt-circle-left::before { content: "\f359"; } .fa-train-subway::before { content: "\f239"; } .fa-subway::before { content: "\f239"; } .fa-chart-gantt::before { content: "\e0e4"; } .fa-indian-rupee-sign::before { content: "\e1bc"; } .fa-indian-rupee::before { content: "\e1bc"; } .fa-inr::before { content: "\e1bc"; } .fa-crop-simple::before { content: "\f565"; } .fa-crop-alt::before { content: "\f565"; } .fa-money-bill-1::before { content: "\f3d1"; } .fa-money-bill-alt::before { content: "\f3d1"; } .fa-left-long::before { content: "\f30a"; } .fa-long-arrow-alt-left::before { content: "\f30a"; } .fa-dna::before { content: "\f471"; } .fa-virus-slash::before { content: "\e075"; } .fa-minus::before { content: "\f068"; } .fa-subtract::before { content: "\f068"; } .fa-chess::before { content: "\f439"; } .fa-arrow-left-long::before { content: "\f177"; } .fa-long-arrow-left::before { content: "\f177"; } .fa-plug-circle-check::before { content: "\e55c"; } .fa-street-view::before { content: "\f21d"; } .fa-franc-sign::before { content: "\e18f"; } .fa-volume-off::before { content: "\f026"; } .fa-hands-asl-interpreting::before { content: "\f2a3"; } .fa-american-sign-language-interpreting::before { content: "\f2a3"; } .fa-asl-interpreting::before { content: "\f2a3"; } .fa-hands-american-sign-language-interpreting::before { content: "\f2a3"; } .fa-gear::before { content: "\f013"; } .fa-cog::before { content: "\f013"; } .fa-droplet-slash::before { content: "\f5c7"; } .fa-tint-slash::before { content: "\f5c7"; } .fa-mosque::before { content: "\f678"; } .fa-mosquito::before { content: "\e52b"; } .fa-star-of-david::before { content: "\f69a"; } .fa-person-military-rifle::before { content: "\e54b"; } .fa-cart-shopping::before { content: "\f07a"; } .fa-shopping-cart::before { content: "\f07a"; } .fa-vials::before { content: "\f493"; } .fa-plug-circle-plus::before { content: "\e55f"; } .fa-place-of-worship::before { content: "\f67f"; } .fa-grip-vertical::before { content: "\f58e"; } .fa-arrow-turn-up::before { content: "\f148"; } .fa-level-up::before { content: "\f148"; } .fa-u::before { content: "U"; } .fa-square-root-variable::before { content: "\f698"; } .fa-square-root-alt::before { content: "\f698"; } .fa-clock::before { content: "\f017"; } .fa-clock-four::before { content: "\f017"; } .fa-backward-step::before { content: "\f048"; } .fa-step-backward::before { content: "\f048"; } .fa-pallet::before { content: "\f482"; } .fa-faucet::before { content: "\e005"; } .fa-baseball-bat-ball::before { content: "\f432"; } .fa-s::before { content: "S"; } .fa-timeline::before { content: "\e29c"; } .fa-keyboard::before { content: "\f11c"; } .fa-caret-down::before { content: "\f0d7"; } .fa-house-chimney-medical::before { content: "\f7f2"; } .fa-clinic-medical::before { content: "\f7f2"; } .fa-temperature-three-quarters::before { content: "\f2c8"; } .fa-temperature-3::before { content: "\f2c8"; } .fa-thermometer-3::before { content: "\f2c8"; } .fa-thermometer-three-quarters::before { content: "\f2c8"; } .fa-mobile-screen::before { content: "\f3cf"; } .fa-mobile-android-alt::before { content: "\f3cf"; } .fa-plane-up::before { content: "\e22d"; } .fa-piggy-bank::before { content: "\f4d3"; } .fa-battery-half::before { content: "\f242"; } .fa-battery-3::before { content: "\f242"; } .fa-mountain-city::before { content: "\e52e"; } .fa-coins::before { content: "\f51e"; } .fa-khanda::before { content: "\f66d"; } .fa-sliders::before { content: "\f1de"; } .fa-sliders-h::before { content: "\f1de"; } .fa-folder-tree::before { content: "\f802"; } .fa-network-wired::before { content: "\f6ff"; } .fa-map-pin::before { content: "\f276"; } .fa-hamsa::before { content: "\f665"; } .fa-cent-sign::before { content: "\e3f5"; } .fa-flask::before { content: "\f0c3"; } .fa-person-pregnant::before { content: "\e31e"; } .fa-wand-sparkles::before { content: "\f72b"; } .fa-ellipsis-vertical::before { content: "\f142"; } .fa-ellipsis-v::before { content: "\f142"; } .fa-ticket::before { content: "\f145"; } .fa-power-off::before { content: "\f011"; } .fa-right-long::before { content: "\f30b"; } .fa-long-arrow-alt-right::before { content: "\f30b"; } .fa-flag-usa::before { content: "\f74d"; } .fa-laptop-file::before { content: "\e51d"; } .fa-tty::before { content: "\f1e4"; } .fa-teletype::before { content: "\f1e4"; } .fa-diagram-next::before { content: "\e476"; } .fa-person-rifle::before { content: "\e54e"; } .fa-house-medical-circle-exclamation::before { content: "\e512"; } .fa-closed-captioning::before { content: "\f20a"; } .fa-person-hiking::before { content: "\f6ec"; } .fa-hiking::before { content: "\f6ec"; } .fa-venus-double::before { content: "\f226"; } .fa-images::before { content: "\f302"; } .fa-calculator::before { content: "\f1ec"; } .fa-people-pulling::before { content: "\e535"; } .fa-n::before { content: "N"; } .fa-cable-car::before { content: "\f7da"; } .fa-tram::before { content: "\f7da"; } .fa-cloud-rain::before { content: "\f73d"; } .fa-building-circle-xmark::before { content: "\e4d4"; } .fa-ship::before { content: "\f21a"; } .fa-arrows-down-to-line::before { content: "\e4b8"; } .fa-download::before { content: "\f019"; } .fa-face-grin::before { content: "\f580"; } .fa-grin::before { content: "\f580"; } .fa-delete-left::before { content: "\f55a"; } .fa-backspace::before { content: "\f55a"; } .fa-eye-dropper::before { content: "\f1fb"; } .fa-eye-dropper-empty::before { content: "\f1fb"; } .fa-eyedropper::before { content: "\f1fb"; } .fa-file-circle-check::before { content: "\e5a0"; } .fa-forward::before { content: "\f04e"; } .fa-mobile::before { content: "\f3ce"; } .fa-mobile-android::before { content: "\f3ce"; } .fa-mobile-phone::before { content: "\f3ce"; } .fa-face-meh::before { content: "\f11a"; } .fa-meh::before { content: "\f11a"; } .fa-align-center::before { content: "\f037"; } .fa-book-skull::before { content: "\f6b7"; } .fa-book-dead::before { content: "\f6b7"; } .fa-id-card::before { content: "\f2c2"; } .fa-drivers-license::before { content: "\f2c2"; } .fa-outdent::before { content: "\f03b"; } .fa-dedent::before { content: "\f03b"; } .fa-heart-circle-exclamation::before { content: "\e4fe"; } .fa-house::before { content: "\f015"; } .fa-home::before { content: "\f015"; } .fa-home-alt::before { content: "\f015"; } .fa-home-lg-alt::before { content: "\f015"; } .fa-calendar-week::before { content: "\f784"; } .fa-laptop-medical::before { content: "\f812"; } .fa-b::before { content: "B"; } .fa-file-medical::before { content: "\f477"; } .fa-dice-one::before { content: "\f525"; } .fa-kiwi-bird::before { content: "\f535"; } .fa-arrow-right-arrow-left::before { content: "\f0ec"; } .fa-exchange::before { content: "\f0ec"; } .fa-rotate-right::before { content: "\f2f9"; } .fa-redo-alt::before { content: "\f2f9"; } .fa-rotate-forward::before { content: "\f2f9"; } .fa-utensils::before { content: "\f2e7"; } .fa-cutlery::before { content: "\f2e7"; } .fa-arrow-up-wide-short::before { content: "\f161"; } .fa-sort-amount-up::before { content: "\f161"; } .fa-mill-sign::before { content: "\e1ed"; } .fa-bowl-rice::before { content: "\e2eb"; } .fa-skull::before { content: "\f54c"; } .fa-tower-broadcast::before { content: "\f519"; } .fa-broadcast-tower::before { content: "\f519"; } .fa-truck-pickup::before { content: "\f63c"; } .fa-up-long::before { content: "\f30c"; } .fa-long-arrow-alt-up::before { content: "\f30c"; } .fa-stop::before { content: "\f04d"; } .fa-code-merge::before { content: "\f387"; } .fa-upload::before { content: "\f093"; } .fa-hurricane::before { content: "\f751"; } .fa-mound::before { content: "\e52d"; } .fa-toilet-portable::before { content: "\e583"; } .fa-compact-disc::before { content: "\f51f"; } .fa-file-arrow-down::before { content: "\f56d"; } .fa-file-download::before { content: "\f56d"; } .fa-caravan::before { content: "\f8ff"; } .fa-shield-cat::before { content: "\e572"; } .fa-bolt::before { content: "\f0e7"; } .fa-zap::before { content: "\f0e7"; } .fa-glass-water::before { content: "\e4f4"; } .fa-oil-well::before { content: "\e532"; } .fa-vault::before { content: "\e2c5"; } .fa-mars::before { content: "\f222"; } .fa-toilet::before { content: "\f7d8"; } .fa-plane-circle-xmark::before { content: "\e557"; } .fa-yen-sign::before { content: "\f157"; } .fa-cny::before { content: "\f157"; } .fa-jpy::before { content: "\f157"; } .fa-rmb::before { content: "\f157"; } .fa-yen::before { content: "\f157"; } .fa-ruble-sign::before { content: "\f158"; } .fa-rouble::before { content: "\f158"; } .fa-rub::before { content: "\f158"; } .fa-ruble::before { content: "\f158"; } .fa-sun::before { content: "\f185"; } .fa-guitar::before { content: "\f7a6"; } .fa-face-laugh-wink::before { content: "\f59c"; } .fa-laugh-wink::before { content: "\f59c"; } .fa-horse-head::before { content: "\f7ab"; } .fa-bore-hole::before { content: "\e4c3"; } .fa-industry::before { content: "\f275"; } .fa-circle-down::before { content: "\f358"; } .fa-arrow-alt-circle-down::before { content: "\f358"; } .fa-arrows-turn-to-dots::before { content: "\e4c1"; } .fa-florin-sign::before { content: "\e184"; } .fa-arrow-down-short-wide::before { content: "\f884"; } .fa-sort-amount-desc::before { content: "\f884"; } .fa-sort-amount-down-alt::before { content: "\f884"; } .fa-less-than::before { content: "\<"; } .fa-angle-down::before { content: "\f107"; } .fa-car-tunnel::before { content: "\e4de"; } .fa-head-side-cough::before { content: "\e061"; } .fa-grip-lines::before { content: "\f7a4"; } .fa-thumbs-down::before { content: "\f165"; } .fa-user-lock::before { content: "\f502"; } .fa-arrow-right-long::before { content: "\f178"; } .fa-long-arrow-right::before { content: "\f178"; } .fa-anchor-circle-xmark::before { content: "\e4ac"; } .fa-ellipsis::before { content: "\f141"; } .fa-ellipsis-h::before { content: "\f141"; } .fa-chess-pawn::before { content: "\f443"; } .fa-kit-medical::before { content: "\f479"; } .fa-first-aid::before { content: "\f479"; } .fa-person-through-window::before { content: "\e5a9"; } .fa-toolbox::before { content: "\f552"; } .fa-hands-holding-circle::before { content: "\e4fb"; } .fa-bug::before { content: "\f188"; } .fa-credit-card::before { content: "\f09d"; } .fa-credit-card-alt::before { content: "\f09d"; } .fa-car::before { content: "\f1b9"; } .fa-automobile::before { content: "\f1b9"; } .fa-hand-holding-hand::before { content: "\e4f7"; } .fa-book-open-reader::before { content: "\f5da"; } .fa-book-reader::before { content: "\f5da"; } .fa-mountain-sun::before { content: "\e52f"; } .fa-arrows-left-right-to-line::before { content: "\e4ba"; } .fa-dice-d20::before { content: "\f6cf"; } .fa-truck-droplet::before { content: "\e58c"; } .fa-file-circle-xmark::before { content: "\e5a1"; } .fa-temperature-arrow-up::before { content: "\e040"; } .fa-temperature-up::before { content: "\e040"; } .fa-medal::before { content: "\f5a2"; } .fa-bed::before { content: "\f236"; } .fa-square-h::before { content: "\f0fd"; } .fa-h-square::before { content: "\f0fd"; } .fa-podcast::before { content: "\f2ce"; } .fa-temperature-full::before { content: "\f2c7"; } .fa-temperature-4::before { content: "\f2c7"; } .fa-thermometer-4::before { content: "\f2c7"; } .fa-thermometer-full::before { content: "\f2c7"; } .fa-bell::before { content: "\f0f3"; } .fa-superscript::before { content: "\f12b"; } .fa-plug-circle-xmark::before { content: "\e560"; } .fa-star-of-life::before { content: "\f621"; } .fa-phone-slash::before { content: "\f3dd"; } .fa-paint-roller::before { content: "\f5aa"; } .fa-handshake-angle::before { content: "\f4c4"; } .fa-hands-helping::before { content: "\f4c4"; } .fa-location-dot::before { content: "\f3c5"; } .fa-map-marker-alt::before { content: "\f3c5"; } .fa-file::before { content: "\f15b"; } .fa-greater-than::before { content: "\>"; } .fa-person-swimming::before { content: "\f5c4"; } .fa-swimmer::before { content: "\f5c4"; } .fa-arrow-down::before { content: "\f063"; } .fa-droplet::before { content: "\f043"; } .fa-tint::before { content: "\f043"; } .fa-eraser::before { content: "\f12d"; } .fa-earth-americas::before { content: "\f57d"; } .fa-earth::before { content: "\f57d"; } .fa-earth-america::before { content: "\f57d"; } .fa-globe-americas::before { content: "\f57d"; } .fa-person-burst::before { content: "\e53b"; } .fa-dove::before { content: "\f4ba"; } .fa-battery-empty::before { content: "\f244"; } .fa-battery-0::before { content: "\f244"; } .fa-socks::before { content: "\f696"; } .fa-inbox::before { content: "\f01c"; } .fa-section::before { content: "\e447"; } .fa-gauge-high::before { content: "\f625"; } .fa-tachometer-alt::before { content: "\f625"; } .fa-tachometer-alt-fast::before { content: "\f625"; } .fa-envelope-open-text::before { content: "\f658"; } .fa-hospital::before { content: "\f0f8"; } .fa-hospital-alt::before { content: "\f0f8"; } .fa-hospital-wide::before { content: "\f0f8"; } .fa-wine-bottle::before { content: "\f72f"; } .fa-chess-rook::before { content: "\f447"; } .fa-bars-staggered::before { content: "\f550"; } .fa-reorder::before { content: "\f550"; } .fa-stream::before { content: "\f550"; } .fa-dharmachakra::before { content: "\f655"; } .fa-hotdog::before { content: "\f80f"; } .fa-person-walking-with-cane::before { content: "\f29d"; } .fa-blind::before { content: "\f29d"; } .fa-drum::before { content: "\f569"; } .fa-ice-cream::before { content: "\f810"; } .fa-heart-circle-bolt::before { content: "\e4fc"; } .fa-fax::before { content: "\f1ac"; } .fa-paragraph::before { content: "\f1dd"; } .fa-check-to-slot::before { content: "\f772"; } .fa-vote-yea::before { content: "\f772"; } .fa-star-half::before { content: "\f089"; } .fa-boxes-stacked::before { content: "\f468"; } .fa-boxes::before { content: "\f468"; } .fa-boxes-alt::before { content: "\f468"; } .fa-link::before { content: "\f0c1"; } .fa-chain::before { content: "\f0c1"; } .fa-ear-listen::before { content: "\f2a2"; } .fa-assistive-listening-systems::before { content: "\f2a2"; } .fa-tree-city::before { content: "\e587"; } .fa-play::before { content: "\f04b"; } .fa-font::before { content: "\f031"; } .fa-rupiah-sign::before { content: "\e23d"; } .fa-magnifying-glass::before { content: "\f002"; } .fa-search::before { content: "\f002"; } .fa-table-tennis-paddle-ball::before { content: "\f45d"; } .fa-ping-pong-paddle-ball::before { content: "\f45d"; } .fa-table-tennis::before { content: "\f45d"; } .fa-person-dots-from-line::before { content: "\f470"; } .fa-diagnoses::before { content: "\f470"; } .fa-trash-can-arrow-up::before { content: "\f82a"; } .fa-trash-restore-alt::before { content: "\f82a"; } .fa-naira-sign::before { content: "\e1f6"; } .fa-cart-arrow-down::before { content: "\f218"; } .fa-walkie-talkie::before { content: "\f8ef"; } .fa-file-pen::before { content: "\f31c"; } .fa-file-edit::before { content: "\f31c"; } .fa-receipt::before { content: "\f543"; } .fa-square-pen::before { content: "\f14b"; } .fa-pen-square::before { content: "\f14b"; } .fa-pencil-square::before { content: "\f14b"; } .fa-suitcase-rolling::before { content: "\f5c1"; } .fa-person-circle-exclamation::before { content: "\e53f"; } .fa-chevron-down::before { content: "\f078"; } .fa-battery-full::before { content: "\f240"; } .fa-battery::before { content: "\f240"; } .fa-battery-5::before { content: "\f240"; } .fa-skull-crossbones::before { content: "\f714"; } .fa-code-compare::before { content: "\e13a"; } .fa-list-ul::before { content: "\f0ca"; } .fa-list-dots::before { content: "\f0ca"; } .fa-school-lock::before { content: "\e56f"; } .fa-tower-cell::before { content: "\e585"; } .fa-down-long::before { content: "\f309"; } .fa-long-arrow-alt-down::before { content: "\f309"; } .fa-ranking-star::before { content: "\e561"; } .fa-chess-king::before { content: "\f43f"; } .fa-person-harassing::before { content: "\e549"; } .fa-brazilian-real-sign::before { content: "\e46c"; } .fa-landmark-dome::before { content: "\f752"; } .fa-landmark-alt::before { content: "\f752"; } .fa-arrow-up::before { content: "\f062"; } .fa-tv::before { content: "\f26c"; } .fa-television::before { content: "\f26c"; } .fa-tv-alt::before { content: "\f26c"; } .fa-shrimp::before { content: "\e448"; } .fa-list-check::before { content: "\f0ae"; } .fa-tasks::before { content: "\f0ae"; } .fa-jug-detergent::before { content: "\e519"; } .fa-circle-user::before { content: "\f2bd"; } .fa-user-circle::before { content: "\f2bd"; } .fa-user-shield::before { content: "\f505"; } .fa-wind::before { content: "\f72e"; } .fa-car-burst::before { content: "\f5e1"; } .fa-car-crash::before { content: "\f5e1"; } .fa-y::before { content: "Y"; } .fa-person-snowboarding::before { content: "\f7ce"; } .fa-snowboarding::before { content: "\f7ce"; } .fa-truck-fast::before { content: "\f48b"; } .fa-shipping-fast::before { content: "\f48b"; } .fa-fish::before { content: "\f578"; } .fa-user-graduate::before { content: "\f501"; } .fa-circle-half-stroke::before { content: "\f042"; } .fa-adjust::before { content: "\f042"; } .fa-clapperboard::before { content: "\e131"; } .fa-circle-radiation::before { content: "\f7ba"; } .fa-radiation-alt::before { content: "\f7ba"; } .fa-baseball::before { content: "\f433"; } .fa-baseball-ball::before { content: "\f433"; } .fa-jet-fighter-up::before { content: "\e518"; } .fa-diagram-project::before { content: "\f542"; } .fa-project-diagram::before { content: "\f542"; } .fa-copy::before { content: "\f0c5"; } .fa-volume-xmark::before { content: "\f6a9"; } .fa-volume-mute::before { content: "\f6a9"; } .fa-volume-times::before { content: "\f6a9"; } .fa-hand-sparkles::before { content: "\e05d"; } .fa-grip::before { content: "\f58d"; } .fa-grip-horizontal::before { content: "\f58d"; } .fa-share-from-square::before { content: "\f14d"; } .fa-share-square::before { content: "\f14d"; } .fa-child-combatant::before { content: "\e4e0"; } .fa-child-rifle::before { content: "\e4e0"; } .fa-gun::before { content: "\e19b"; } .fa-square-phone::before { content: "\f098"; } .fa-phone-square::before { content: "\f098"; } .fa-plus::before { content: "\+"; } .fa-add::before { content: "\+"; } .fa-expand::before { content: "\f065"; } .fa-computer::before { content: "\e4e5"; } .fa-xmark::before { content: "\f00d"; } .fa-close::before { content: "\f00d"; } .fa-multiply::before { content: "\f00d"; } .fa-remove::before { content: "\f00d"; } .fa-times::before { content: "\f00d"; } .fa-arrows-up-down-left-right::before { content: "\f047"; } .fa-arrows::before { content: "\f047"; } .fa-chalkboard-user::before { content: "\f51c"; } .fa-chalkboard-teacher::before { content: "\f51c"; } .fa-peso-sign::before { content: "\e222"; } .fa-building-shield::before { content: "\e4d8"; } .fa-baby::before { content: "\f77c"; } .fa-users-line::before { content: "\e592"; } .fa-quote-left::before { content: "\f10d"; } .fa-quote-left-alt::before { content: "\f10d"; } .fa-tractor::before { content: "\f722"; } .fa-trash-arrow-up::before { content: "\f829"; } .fa-trash-restore::before { content: "\f829"; } .fa-arrow-down-up-lock::before { content: "\e4b0"; } .fa-lines-leaning::before { content: "\e51e"; } .fa-ruler-combined::before { content: "\f546"; } .fa-copyright::before { content: "\f1f9"; } .fa-equals::before { content: "\="; } .fa-blender::before { content: "\f517"; } .fa-teeth::before { content: "\f62e"; } .fa-shekel-sign::before { content: "\f20b"; } .fa-ils::before { content: "\f20b"; } .fa-shekel::before { content: "\f20b"; } .fa-sheqel::before { content: "\f20b"; } .fa-sheqel-sign::before { content: "\f20b"; } .fa-map::before { content: "\f279"; } .fa-rocket::before { content: "\f135"; } .fa-photo-film::before { content: "\f87c"; } .fa-photo-video::before { content: "\f87c"; } .fa-folder-minus::before { content: "\f65d"; } .fa-store::before { content: "\f54e"; } .fa-arrow-trend-up::before { content: "\e098"; } .fa-plug-circle-minus::before { content: "\e55e"; } .fa-sign-hanging::before { content: "\f4d9"; } .fa-sign::before { content: "\f4d9"; } .fa-bezier-curve::before { content: "\f55b"; } .fa-bell-slash::before { content: "\f1f6"; } .fa-tablet::before { content: "\f3fb"; } .fa-tablet-android::before { content: "\f3fb"; } .fa-school-flag::before { content: "\e56e"; } .fa-fill::before { content: "\f575"; } .fa-angle-up::before { content: "\f106"; } .fa-drumstick-bite::before { content: "\f6d7"; } .fa-holly-berry::before { content: "\f7aa"; } .fa-chevron-left::before { content: "\f053"; } .fa-bacteria::before { content: "\e059"; } .fa-hand-lizard::before { content: "\f258"; } .fa-notdef::before { content: "\e1fe"; } .fa-disease::before { content: "\f7fa"; } .fa-briefcase-medical::before { content: "\f469"; } .fa-genderless::before { content: "\f22d"; } .fa-chevron-right::before { content: "\f054"; } .fa-retweet::before { content: "\f079"; } .fa-car-rear::before { content: "\f5de"; } .fa-car-alt::before { content: "\f5de"; } .fa-pump-soap::before { content: "\e06b"; } .fa-video-slash::before { content: "\f4e2"; } .fa-battery-quarter::before { content: "\f243"; } .fa-battery-2::before { content: "\f243"; } .fa-radio::before { content: "\f8d7"; } .fa-baby-carriage::before { content: "\f77d"; } .fa-carriage-baby::before { content: "\f77d"; } .fa-traffic-light::before { content: "\f637"; } .fa-thermometer::before { content: "\f491"; } .fa-vr-cardboard::before { content: "\f729"; } .fa-hand-middle-finger::before { content: "\f806"; } .fa-percent::before { content: "\%"; } .fa-percentage::before { content: "\%"; } .fa-truck-moving::before { content: "\f4df"; } .fa-glass-water-droplet::before { content: "\e4f5"; } .fa-display::before { content: "\e163"; } .fa-face-smile::before { content: "\f118"; } .fa-smile::before { content: "\f118"; } .fa-thumbtack::before { content: "\f08d"; } .fa-thumb-tack::before { content: "\f08d"; } .fa-trophy::before { content: "\f091"; } .fa-person-praying::before { content: "\f683"; } .fa-pray::before { content: "\f683"; } .fa-hammer::before { content: "\f6e3"; } .fa-hand-peace::before { content: "\f25b"; } .fa-rotate::before { content: "\f2f1"; } .fa-sync-alt::before { content: "\f2f1"; } .fa-spinner::before { content: "\f110"; } .fa-robot::before { content: "\f544"; } .fa-peace::before { content: "\f67c"; } .fa-gears::before { content: "\f085"; } .fa-cogs::before { content: "\f085"; } .fa-warehouse::before { content: "\f494"; } .fa-arrow-up-right-dots::before { content: "\e4b7"; } .fa-splotch::before { content: "\f5bc"; } .fa-face-grin-hearts::before { content: "\f584"; } .fa-grin-hearts::before { content: "\f584"; } .fa-dice-four::before { content: "\f524"; } .fa-sim-card::before { content: "\f7c4"; } .fa-transgender::before { content: "\f225"; } .fa-transgender-alt::before { content: "\f225"; } .fa-mercury::before { content: "\f223"; } .fa-arrow-turn-down::before { content: "\f149"; } .fa-level-down::before { content: "\f149"; } .fa-person-falling-burst::before { content: "\e547"; } .fa-award::before { content: "\f559"; } .fa-ticket-simple::before { content: "\f3ff"; } .fa-ticket-alt::before { content: "\f3ff"; } .fa-building::before { content: "\f1ad"; } .fa-angles-left::before { content: "\f100"; } .fa-angle-double-left::before { content: "\f100"; } .fa-qrcode::before { content: "\f029"; } .fa-clock-rotate-left::before { content: "\f1da"; } .fa-history::before { content: "\f1da"; } .fa-face-grin-beam-sweat::before { content: "\f583"; } .fa-grin-beam-sweat::before { content: "\f583"; } .fa-file-export::before { content: "\f56e"; } .fa-arrow-right-from-file::before { content: "\f56e"; } .fa-shield::before { content: "\f132"; } .fa-shield-blank::before { content: "\f132"; } .fa-arrow-up-short-wide::before { content: "\f885"; } .fa-sort-amount-up-alt::before { content: "\f885"; } .fa-house-medical::before { content: "\e3b2"; } .fa-golf-ball-tee::before { content: "\f450"; } .fa-golf-ball::before { content: "\f450"; } .fa-circle-chevron-left::before { content: "\f137"; } .fa-chevron-circle-left::before { content: "\f137"; } .fa-house-chimney-window::before { content: "\e00d"; } .fa-pen-nib::before { content: "\f5ad"; } .fa-tent-arrow-turn-left::before { content: "\e580"; } .fa-tents::before { content: "\e582"; } .fa-wand-magic::before { content: "\f0d0"; } .fa-magic::before { content: "\f0d0"; } .fa-dog::before { content: "\f6d3"; } .fa-carrot::before { content: "\f787"; } .fa-moon::before { content: "\f186"; } .fa-wine-glass-empty::before { content: "\f5ce"; } .fa-wine-glass-alt::before { content: "\f5ce"; } .fa-cheese::before { content: "\f7ef"; } .fa-yin-yang::before { content: "\f6ad"; } .fa-music::before { content: "\f001"; } .fa-code-commit::before { content: "\f386"; } .fa-temperature-low::before { content: "\f76b"; } .fa-person-biking::before { content: "\f84a"; } .fa-biking::before { content: "\f84a"; } .fa-broom::before { content: "\f51a"; } .fa-shield-heart::before { content: "\e574"; } .fa-gopuram::before { content: "\f664"; } .fa-earth-oceania::before { content: "\e47b"; } .fa-globe-oceania::before { content: "\e47b"; } .fa-square-xmark::before { content: "\f2d3"; } .fa-times-square::before { content: "\f2d3"; } .fa-xmark-square::before { content: "\f2d3"; } .fa-hashtag::before { content: "\#"; } .fa-up-right-and-down-left-from-center::before { content: "\f424"; } .fa-expand-alt::before { content: "\f424"; } .fa-oil-can::before { content: "\f613"; } .fa-t::before { content: "T"; } .fa-hippo::before { content: "\f6ed"; } .fa-chart-column::before { content: "\e0e3"; } .fa-infinity::before { content: "\f534"; } .fa-vial-circle-check::before { content: "\e596"; } .fa-person-arrow-down-to-line::before { content: "\e538"; } .fa-voicemail::before { content: "\f897"; } .fa-fan::before { content: "\f863"; } .fa-person-walking-luggage::before { content: "\e554"; } .fa-up-down::before { content: "\f338"; } .fa-arrows-alt-v::before { content: "\f338"; } .fa-cloud-moon-rain::before { content: "\f73c"; } .fa-calendar::before { content: "\f133"; } .fa-trailer::before { content: "\e041"; } .fa-bahai::before { content: "\f666"; } .fa-haykal::before { content: "\f666"; } .fa-sd-card::before { content: "\f7c2"; } .fa-dragon::before { content: "\f6d5"; } .fa-shoe-prints::before { content: "\f54b"; } .fa-circle-plus::before { content: "\f055"; } .fa-plus-circle::before { content: "\f055"; } .fa-face-grin-tongue-wink::before { content: "\f58b"; } .fa-grin-tongue-wink::before { content: "\f58b"; } .fa-hand-holding::before { content: "\f4bd"; } .fa-plug-circle-exclamation::before { content: "\e55d"; } .fa-link-slash::before { content: "\f127"; } .fa-chain-broken::before { content: "\f127"; } .fa-chain-slash::before { content: "\f127"; } .fa-unlink::before { content: "\f127"; } .fa-clone::before { content: "\f24d"; } .fa-person-walking-arrow-loop-left::before { content: "\e551"; } .fa-arrow-up-z-a::before { content: "\f882"; } .fa-sort-alpha-up-alt::before { content: "\f882"; } .fa-fire-flame-curved::before { content: "\f7e4"; } .fa-fire-alt::before { content: "\f7e4"; } .fa-tornado::before { content: "\f76f"; } .fa-file-circle-plus::before { content: "\e494"; } .fa-book-quran::before { content: "\f687"; } .fa-quran::before { content: "\f687"; } .fa-anchor::before { content: "\f13d"; } .fa-border-all::before { content: "\f84c"; } .fa-face-angry::before { content: "\f556"; } .fa-angry::before { content: "\f556"; } .fa-cookie-bite::before { content: "\f564"; } .fa-arrow-trend-down::before { content: "\e097"; } .fa-rss::before { content: "\f09e"; } .fa-feed::before { content: "\f09e"; } .fa-draw-polygon::before { content: "\f5ee"; } .fa-scale-balanced::before { content: "\f24e"; } .fa-balance-scale::before { content: "\f24e"; } .fa-gauge-simple-high::before { content: "\f62a"; } .fa-tachometer::before { content: "\f62a"; } .fa-tachometer-fast::before { content: "\f62a"; } .fa-shower::before { content: "\f2cc"; } .fa-desktop::before { content: "\f390"; } .fa-desktop-alt::before { content: "\f390"; } .fa-m::before { content: "M"; } .fa-table-list::before { content: "\f00b"; } .fa-th-list::before { content: "\f00b"; } .fa-comment-sms::before { content: "\f7cd"; } .fa-sms::before { content: "\f7cd"; } .fa-book::before { content: "\f02d"; } .fa-user-plus::before { content: "\f234"; } .fa-check::before { content: "\f00c"; } .fa-battery-three-quarters::before { content: "\f241"; } .fa-battery-4::before { content: "\f241"; } .fa-house-circle-check::before { content: "\e509"; } .fa-angle-left::before { content: "\f104"; } .fa-diagram-successor::before { content: "\e47a"; } .fa-truck-arrow-right::before { content: "\e58b"; } .fa-arrows-split-up-and-left::before { content: "\e4bc"; } .fa-hand-fist::before { content: "\f6de"; } .fa-fist-raised::before { content: "\f6de"; } .fa-cloud-moon::before { content: "\f6c3"; } .fa-briefcase::before { content: "\f0b1"; } .fa-person-falling::before { content: "\e546"; } .fa-image-portrait::before { content: "\f3e0"; } .fa-portrait::before { content: "\f3e0"; } .fa-user-tag::before { content: "\f507"; } .fa-rug::before { content: "\e569"; } .fa-earth-europe::before { content: "\f7a2"; } .fa-globe-europe::before { content: "\f7a2"; } .fa-cart-flatbed-suitcase::before { content: "\f59d"; } .fa-luggage-cart::before { content: "\f59d"; } .fa-rectangle-xmark::before { content: "\f410"; } .fa-rectangle-times::before { content: "\f410"; } .fa-times-rectangle::before { content: "\f410"; } .fa-window-close::before { content: "\f410"; } .fa-baht-sign::before { content: "\e0ac"; } .fa-book-open::before { content: "\f518"; } .fa-book-journal-whills::before { content: "\f66a"; } .fa-journal-whills::before { content: "\f66a"; } .fa-handcuffs::before { content: "\e4f8"; } .fa-triangle-exclamation::before { content: "\f071"; } .fa-exclamation-triangle::before { content: "\f071"; } .fa-warning::before { content: "\f071"; } .fa-database::before { content: "\f1c0"; } .fa-share::before { content: "\f064"; } .fa-arrow-turn-right::before { content: "\f064"; } .fa-mail-forward::before { content: "\f064"; } .fa-bottle-droplet::before { content: "\e4c4"; } .fa-mask-face::before { content: "\e1d7"; } .fa-hill-rockslide::before { content: "\e508"; } .fa-right-left::before { content: "\f362"; } .fa-exchange-alt::before { content: "\f362"; } .fa-paper-plane::before { content: "\f1d8"; } .fa-road-circle-exclamation::before { content: "\e565"; } .fa-dungeon::before { content: "\f6d9"; } .fa-align-right::before { content: "\f038"; } .fa-money-bill-1-wave::before { content: "\f53b"; } .fa-money-bill-wave-alt::before { content: "\f53b"; } .fa-life-ring::before { content: "\f1cd"; } .fa-hands::before { content: "\f2a7"; } .fa-sign-language::before { content: "\f2a7"; } .fa-signing::before { content: "\f2a7"; } .fa-calendar-day::before { content: "\f783"; } .fa-water-ladder::before { content: "\f5c5"; } .fa-ladder-water::before { content: "\f5c5"; } .fa-swimming-pool::before { content: "\f5c5"; } .fa-arrows-up-down::before { content: "\f07d"; } .fa-arrows-v::before { content: "\f07d"; } .fa-face-grimace::before { content: "\f57f"; } .fa-grimace::before { content: "\f57f"; } .fa-wheelchair-move::before { content: "\e2ce"; } .fa-wheelchair-alt::before { content: "\e2ce"; } .fa-turn-down::before { content: "\f3be"; } .fa-level-down-alt::before { content: "\f3be"; } .fa-person-walking-arrow-right::before { content: "\e552"; } .fa-square-envelope::before { content: "\f199"; } .fa-envelope-square::before { content: "\f199"; } .fa-dice::before { content: "\f522"; } .fa-bowling-ball::before { content: "\f436"; } .fa-brain::before { content: "\f5dc"; } .fa-bandage::before { content: "\f462"; } .fa-band-aid::before { content: "\f462"; } .fa-calendar-minus::before { content: "\f272"; } .fa-circle-xmark::before { content: "\f057"; } .fa-times-circle::before { content: "\f057"; } .fa-xmark-circle::before { content: "\f057"; } .fa-gifts::before { content: "\f79c"; } .fa-hotel::before { content: "\f594"; } .fa-earth-asia::before { content: "\f57e"; } .fa-globe-asia::before { content: "\f57e"; } .fa-id-card-clip::before { content: "\f47f"; } .fa-id-card-alt::before { content: "\f47f"; } .fa-magnifying-glass-plus::before { content: "\f00e"; } .fa-search-plus::before { content: "\f00e"; } .fa-thumbs-up::before { content: "\f164"; } .fa-user-clock::before { content: "\f4fd"; } .fa-hand-dots::before { content: "\f461"; } .fa-allergies::before { content: "\f461"; } .fa-file-invoice::before { content: "\f570"; } .fa-window-minimize::before { content: "\f2d1"; } .fa-mug-saucer::before { content: "\f0f4"; } .fa-coffee::before { content: "\f0f4"; } .fa-brush::before { content: "\f55d"; } .fa-mask::before { content: "\f6fa"; } .fa-magnifying-glass-minus::before { content: "\f010"; } .fa-search-minus::before { content: "\f010"; } .fa-ruler-vertical::before { content: "\f548"; } .fa-user-large::before { content: "\f406"; } .fa-user-alt::before { content: "\f406"; } .fa-train-tram::before { content: "\e5b4"; } .fa-user-nurse::before { content: "\f82f"; } .fa-syringe::before { content: "\f48e"; } .fa-cloud-sun::before { content: "\f6c4"; } .fa-stopwatch-20::before { content: "\e06f"; } .fa-square-full::before { content: "\f45c"; } .fa-magnet::before { content: "\f076"; } .fa-jar::before { content: "\e516"; } .fa-note-sticky::before { content: "\f249"; } .fa-sticky-note::before { content: "\f249"; } .fa-bug-slash::before { content: "\e490"; } .fa-arrow-up-from-water-pump::before { content: "\e4b6"; } .fa-bone::before { content: "\f5d7"; } .fa-user-injured::before { content: "\f728"; } .fa-face-sad-tear::before { content: "\f5b4"; } .fa-sad-tear::before { content: "\f5b4"; } .fa-plane::before { content: "\f072"; } .fa-tent-arrows-down::before { content: "\e581"; } .fa-exclamation::before { content: "\!"; } .fa-arrows-spin::before { content: "\e4bb"; } .fa-print::before { content: "\f02f"; } .fa-turkish-lira-sign::before { content: "\e2bb"; } .fa-try::before { content: "\e2bb"; } .fa-turkish-lira::before { content: "\e2bb"; } .fa-dollar-sign::before { content: "\$"; } .fa-dollar::before { content: "\$"; } .fa-usd::before { content: "\$"; } .fa-x::before { content: "X"; } .fa-magnifying-glass-dollar::before { content: "\f688"; } .fa-search-dollar::before { content: "\f688"; } .fa-users-gear::before { content: "\f509"; } .fa-users-cog::before { content: "\f509"; } .fa-person-military-pointing::before { content: "\e54a"; } .fa-building-columns::before { content: "\f19c"; } .fa-bank::before { content: "\f19c"; } .fa-institution::before { content: "\f19c"; } .fa-museum::before { content: "\f19c"; } .fa-university::before { content: "\f19c"; } .fa-umbrella::before { content: "\f0e9"; } .fa-trowel::before { content: "\e589"; } .fa-d::before { content: "D"; } .fa-stapler::before { content: "\e5af"; } .fa-masks-theater::before { content: "\f630"; } .fa-theater-masks::before { content: "\f630"; } .fa-kip-sign::before { content: "\e1c4"; } .fa-hand-point-left::before { content: "\f0a5"; } .fa-handshake-simple::before { content: "\f4c6"; } .fa-handshake-alt::before { content: "\f4c6"; } .fa-jet-fighter::before { content: "\f0fb"; } .fa-fighter-jet::before { content: "\f0fb"; } .fa-square-share-nodes::before { content: "\f1e1"; } .fa-share-alt-square::before { content: "\f1e1"; } .fa-barcode::before { content: "\f02a"; } .fa-plus-minus::before { content: "\e43c"; } .fa-video::before { content: "\f03d"; } .fa-video-camera::before { content: "\f03d"; } .fa-graduation-cap::before { content: "\f19d"; } .fa-mortar-board::before { content: "\f19d"; } .fa-hand-holding-medical::before { content: "\e05c"; } .fa-person-circle-check::before { content: "\e53e"; } .fa-turn-up::before { content: "\f3bf"; } .fa-level-up-alt::before { content: "\f3bf"; } .sr-only, .fa-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } .sr-only-focusable:not(:focus), .fa-sr-only-focusable:not(:focus) { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border-width: 0; } /*! * Bootstrap v4.6.2 (https://getbootstrap.com/) * Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ :root { --blue: #0f6cbf; --indigo: #6610f2; --purple: #613d7c; --pink: #e83e8c; --red: #ca3120; --orange: #f0ad4e; --yellow: #ff7518; --green: #357a32; --teal: #20c997; --cyan: #008196; --white: #fff; --gray: #6a737b; --gray-dark: #343a40; --primary: #0f6cbf; --secondary: #ced4da; --success: #357a32; --info: #008196; --warning: #f0ad4e; --danger: #ca3120; --light: #f8f9fa; --dark: #343a40; --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", "Liberation 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: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 0.9375rem; font-weight: 400; line-height: 1.5; color: #1d2125; text-align: left; background-color: #fff; } @media (max-width: 1200px) { body { font-size: calc(0.90375rem + 0.045vw); } } [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.5rem; } 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: 0.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: -0.25em; } sup { top: -0.5em; } a { color: #0f6cbf; text-decoration: none; background-color: transparent; } a:hover { color: #094478; 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: #6a737b; text-align: left; caption-side: bottom; } th { text-align: inherit; text-align: -webkit-match-parent; } label { display: inline-block; margin-bottom: 0.5rem; } button { border-radius: 0; } button:focus:not(:focus-visible) { outline: 0; } 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: 0.5rem; font-size: 1.5rem; line-height: inherit; color: inherit; white-space: normal; } @media (max-width: 1200px) { legend { font-size: calc(0.96rem + 0.72vw); } } 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.5rem; font-weight: 700; line-height: 1.2; } h1, .h1 { font-size: 2.34375rem; } @media (max-width: 1200px) { h1, .h1 { font-size: calc(1.044375rem + 1.7325vw); } } h2, .h2 { font-size: 1.875rem; } @media (max-width: 1200px) { h2, .h2 { font-size: calc(0.9975rem + 1.17vw); } } h3, .h3 { font-size: 1.640625rem; } @media (max-width: 1200px) { h3, .h3 { font-size: calc(0.9740625rem + 0.88875vw); } } h4, .h4 { font-size: 1.40625rem; } @media (max-width: 1200px) { h4, .h4 { font-size: calc(0.950625rem + 0.6075vw); } } h5, .h5 { font-size: 1.171875rem; } @media (max-width: 1200px) { h5, .h5 { font-size: calc(0.9271875rem + 0.32625vw); } } h6, .h6 { font-size: 0.9375rem; } @media (max-width: 1200px) { h6, .h6 { font-size: calc(0.90375rem + 0.045vw); } } .lead { font-size: 1.171875rem; font-weight: 300; } @media (max-width: 1200px) { .lead { font-size: calc(0.9271875rem + 0.32625vw); } } .display-1 { font-size: 6rem; font-weight: 300; line-height: 1.2; } @media (max-width: 1200px) { .display-1 { font-size: calc(1.41rem + 6.12vw); } } .display-2 { font-size: 5.5rem; font-weight: 300; line-height: 1.2; } @media (max-width: 1200px) { .display-2 { font-size: calc(1.36rem + 5.52vw); } } .display-3 { font-size: 4.5rem; font-weight: 300; line-height: 1.2; } @media (max-width: 1200px) { .display-3 { font-size: calc(1.26rem + 4.32vw); } } .display-4 { font-size: 3.5rem; font-weight: 300; line-height: 1.2; } @media (max-width: 1200px) { .display-4 { font-size: calc(1.16rem + 3.12vw); } } hr { margin-top: 1rem; margin-bottom: 1rem; border: 0; border-top: 1px solid rgba(0, 0, 0, 0.1); } small, .small { font-size: 0.875em; 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: 1rem; font-size: 1.171875rem; } @media (max-width: 1200px) { .blockquote { font-size: calc(0.9271875rem + 0.32625vw); } } .blockquote-footer { display: block; font-size: 0.875em; color: #6a737b; } .blockquote-footer::before { content: "— "; } .img-fluid { max-width: 100%; height: auto; } .img-thumbnail { padding: 0.25rem; background-color: #fff; border: 1px solid #dee2e6; border-radius: 0.5rem; max-width: 100%; height: auto; } .figure { display: inline-block; } .figure-img { margin-bottom: 0.5rem; line-height: 1; } .figure-caption { font-size: 90%; color: #6a737b; } 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: #1d2125; border-radius: 0.2rem; } kbd kbd { padding: 0; font-size: 100%; font-weight: 700; } pre { display: block; font-size: 87.5%; color: #1d2125; } pre code { font-size: inherit; color: inherit; word-break: normal; } .pre-scrollable { max-height: 340px; overflow-y: scroll; } .container, .container-fluid, .container-xl, .container-lg, .container-md, .container-sm { width: 100%; padding-right: 15px; padding-left: 15px; margin-right: auto; margin-left: auto; } @media (min-width: 576px) { .container-sm, .container { max-width: 540px; } } @media (min-width: 768px) { .container-md, .container-sm, .container { max-width: 720px; } } @media (min-width: 992px) { .container-lg, .container-md, .container-sm, .container { max-width: 960px; } } @media (min-width: 1200px) { .container-xl, .container-lg, .container-md, .container-sm, .container { 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-xl, .col-xl-auto, .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-lg, .col-lg-auto, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-md, .col-md-auto, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-sm, .col-sm-auto, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col, .col-auto, .col-12, .col-11, .col-10, .col-9, .col-8, .col-7, .col-6, .col-5, .col-4, .col-3, .col-2, .col-1 { 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.3333333333%; max-width: 33.3333333333%; } .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.6666666667%; max-width: 16.6666666667%; } .col-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-1 { flex: 0 0 8.33333333%; max-width: 8.33333333%; } .col-2 { flex: 0 0 16.66666667%; max-width: 16.66666667%; } .col-3 { flex: 0 0 25%; max-width: 25%; } .col-4 { flex: 0 0 33.33333333%; max-width: 33.33333333%; } .col-5 { flex: 0 0 41.66666667%; max-width: 41.66666667%; } .col-6 { flex: 0 0 50%; max-width: 50%; } .col-7 { flex: 0 0 58.33333333%; max-width: 58.33333333%; } .col-8 { flex: 0 0 66.66666667%; max-width: 66.66666667%; } .col-9 { flex: 0 0 75%; max-width: 75%; } .col-10 { flex: 0 0 83.33333333%; max-width: 83.33333333%; } .col-11 { flex: 0 0 91.66666667%; max-width: 91.66666667%; } .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.33333333%; } .offset-2 { margin-left: 16.66666667%; } .offset-3 { margin-left: 25%; } .offset-4 { margin-left: 33.33333333%; } .offset-5 { margin-left: 41.66666667%; } .offset-6 { margin-left: 50%; } .offset-7 { margin-left: 58.33333333%; } .offset-8 { margin-left: 66.66666667%; } .offset-9 { margin-left: 75%; } .offset-10 { margin-left: 83.33333333%; } .offset-11 { margin-left: 91.66666667%; } @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.3333333333%; max-width: 33.3333333333%; } .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.6666666667%; max-width: 16.6666666667%; } .col-sm-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-sm-1 { flex: 0 0 8.33333333%; max-width: 8.33333333%; } .col-sm-2 { flex: 0 0 16.66666667%; max-width: 16.66666667%; } .col-sm-3 { flex: 0 0 25%; max-width: 25%; } .col-sm-4 { flex: 0 0 33.33333333%; max-width: 33.33333333%; } .col-sm-5 { flex: 0 0 41.66666667%; max-width: 41.66666667%; } .col-sm-6 { flex: 0 0 50%; max-width: 50%; } .col-sm-7 { flex: 0 0 58.33333333%; max-width: 58.33333333%; } .col-sm-8 { flex: 0 0 66.66666667%; max-width: 66.66666667%; } .col-sm-9 { flex: 0 0 75%; max-width: 75%; } .col-sm-10 { flex: 0 0 83.33333333%; max-width: 83.33333333%; } .col-sm-11 { flex: 0 0 91.66666667%; max-width: 91.66666667%; } .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.33333333%; } .offset-sm-2 { margin-left: 16.66666667%; } .offset-sm-3 { margin-left: 25%; } .offset-sm-4 { margin-left: 33.33333333%; } .offset-sm-5 { margin-left: 41.66666667%; } .offset-sm-6 { margin-left: 50%; } .offset-sm-7 { margin-left: 58.33333333%; } .offset-sm-8 { margin-left: 66.66666667%; } .offset-sm-9 { margin-left: 75%; } .offset-sm-10 { margin-left: 83.33333333%; } .offset-sm-11 { margin-left: 91.66666667%; } } @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.3333333333%; max-width: 33.3333333333%; } .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.6666666667%; max-width: 16.6666666667%; } .col-md-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-md-1 { flex: 0 0 8.33333333%; max-width: 8.33333333%; } .col-md-2 { flex: 0 0 16.66666667%; max-width: 16.66666667%; } .col-md-3 { flex: 0 0 25%; max-width: 25%; } .col-md-4 { flex: 0 0 33.33333333%; max-width: 33.33333333%; } .col-md-5 { flex: 0 0 41.66666667%; max-width: 41.66666667%; } .col-md-6 { flex: 0 0 50%; max-width: 50%; } .col-md-7 { flex: 0 0 58.33333333%; max-width: 58.33333333%; } .col-md-8 { flex: 0 0 66.66666667%; max-width: 66.66666667%; } .col-md-9 { flex: 0 0 75%; max-width: 75%; } .col-md-10 { flex: 0 0 83.33333333%; max-width: 83.33333333%; } .col-md-11 { flex: 0 0 91.66666667%; max-width: 91.66666667%; } .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.33333333%; } .offset-md-2 { margin-left: 16.66666667%; } .offset-md-3 { margin-left: 25%; } .offset-md-4 { margin-left: 33.33333333%; } .offset-md-5 { margin-left: 41.66666667%; } .offset-md-6 { margin-left: 50%; } .offset-md-7 { margin-left: 58.33333333%; } .offset-md-8 { margin-left: 66.66666667%; } .offset-md-9 { margin-left: 75%; } .offset-md-10 { margin-left: 83.33333333%; } .offset-md-11 { margin-left: 91.66666667%; } } @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.3333333333%; max-width: 33.3333333333%; } .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.6666666667%; max-width: 16.6666666667%; } .col-lg-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-lg-1 { flex: 0 0 8.33333333%; max-width: 8.33333333%; } .col-lg-2 { flex: 0 0 16.66666667%; max-width: 16.66666667%; } .col-lg-3 { flex: 0 0 25%; max-width: 25%; } .col-lg-4 { flex: 0 0 33.33333333%; max-width: 33.33333333%; } .col-lg-5 { flex: 0 0 41.66666667%; max-width: 41.66666667%; } .col-lg-6 { flex: 0 0 50%; max-width: 50%; } .col-lg-7 { flex: 0 0 58.33333333%; max-width: 58.33333333%; } .col-lg-8 { flex: 0 0 66.66666667%; max-width: 66.66666667%; } .col-lg-9 { flex: 0 0 75%; max-width: 75%; } .col-lg-10 { flex: 0 0 83.33333333%; max-width: 83.33333333%; } .col-lg-11 { flex: 0 0 91.66666667%; max-width: 91.66666667%; } .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.33333333%; } .offset-lg-2 { margin-left: 16.66666667%; } .offset-lg-3 { margin-left: 25%; } .offset-lg-4 { margin-left: 33.33333333%; } .offset-lg-5 { margin-left: 41.66666667%; } .offset-lg-6 { margin-left: 50%; } .offset-lg-7 { margin-left: 58.33333333%; } .offset-lg-8 { margin-left: 66.66666667%; } .offset-lg-9 { margin-left: 75%; } .offset-lg-10 { margin-left: 83.33333333%; } .offset-lg-11 { margin-left: 91.66666667%; } } @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.3333333333%; max-width: 33.3333333333%; } .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.6666666667%; max-width: 16.6666666667%; } .col-xl-auto { flex: 0 0 auto; width: auto; max-width: 100%; } .col-xl-1 { flex: 0 0 8.33333333%; max-width: 8.33333333%; } .col-xl-2 { flex: 0 0 16.66666667%; max-width: 16.66666667%; } .col-xl-3 { flex: 0 0 25%; max-width: 25%; } .col-xl-4 { flex: 0 0 33.33333333%; max-width: 33.33333333%; } .col-xl-5 { flex: 0 0 41.66666667%; max-width: 41.66666667%; } .col-xl-6 { flex: 0 0 50%; max-width: 50%; } .col-xl-7 { flex: 0 0 58.33333333%; max-width: 58.33333333%; } .col-xl-8 { flex: 0 0 66.66666667%; max-width: 66.66666667%; } .col-xl-9 { flex: 0 0 75%; max-width: 75%; } .col-xl-10 { flex: 0 0 83.33333333%; max-width: 83.33333333%; } .col-xl-11 { flex: 0 0 91.66666667%; max-width: 91.66666667%; } .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.33333333%; } .offset-xl-2 { margin-left: 16.66666667%; } .offset-xl-3 { margin-left: 25%; } .offset-xl-4 { margin-left: 33.33333333%; } .offset-xl-5 { margin-left: 41.66666667%; } .offset-xl-6 { margin-left: 50%; } .offset-xl-7 { margin-left: 58.33333333%; } .offset-xl-8 { margin-left: 66.66666667%; } .offset-xl-9 { margin-left: 75%; } .offset-xl-10 { margin-left: 83.33333333%; } .offset-xl-11 { margin-left: 91.66666667%; } } .table { width: 100%; margin-bottom: 1rem; color: #1d2125; } .table th, .table td { padding: 0.75rem; vertical-align: top; border-top: 1px solid #dee2e6; } .table thead th { vertical-align: bottom; border-bottom: 2px solid #dee2e6; } .table tbody + tbody { border-top: 2px solid #dee2e6; } .table-sm th, .table-sm td { padding: 0.3rem; } .table-bordered { border: 1px solid #dee2e6; } .table-bordered th, .table-bordered td { border: 1px solid #dee2e6; } .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.03); } .table-hover tbody tr:hover { color: #1d2125; background-color: rgba(0, 0, 0, 0.075); } .table-primary, .table-primary > th, .table-primary > td { background-color: #bcd6ed; } .table-primary th, .table-primary td, .table-primary thead th, .table-primary tbody + tbody { border-color: #82b3de; } .table-hover .table-primary:hover { background-color: #a8cae8; } .table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th { background-color: #a8cae8; } .table-secondary, .table-secondary > th, .table-secondary > td { background-color: #f1f3f5; } .table-secondary th, .table-secondary td, .table-secondary thead th, .table-secondary tbody + tbody { border-color: #e6e9ec; } .table-hover .table-secondary:hover { background-color: #e2e6ea; } .table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th { background-color: #e2e6ea; } .table-success, .table-success > th, .table-success > td { background-color: #c6dac6; } .table-success th, .table-success td, .table-success thead th, .table-success tbody + tbody { border-color: #96ba94; } .table-hover .table-success:hover { background-color: #b7d0b7; } .table-hover .table-success:hover > td, .table-hover .table-success:hover > th { background-color: #b7d0b7; } .table-info, .table-info > th, .table-info > td { background-color: #b8dce2; } .table-info th, .table-info td, .table-info thead th, .table-info tbody + tbody { border-color: #7abdc8; } .table-hover .table-info:hover { background-color: #a6d3db; } .table-hover .table-info:hover > td, .table-hover .table-info:hover > th { background-color: #a6d3db; } .table-warning, .table-warning > th, .table-warning > td { background-color: #fbe8cd; } .table-warning th, .table-warning td, .table-warning thead th, .table-warning tbody + tbody { border-color: #f7d4a3; } .table-hover .table-warning:hover { background-color: #f9ddb5; } .table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th { background-color: #f9ddb5; } .table-danger, .table-danger > th, .table-danger > td { background-color: #f0c5c1; } .table-danger th, .table-danger td, .table-danger thead th, .table-danger tbody + tbody { border-color: #e3948b; } .table-hover .table-danger:hover { background-color: #ebb2ac; } .table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th { background-color: #ebb2ac; } .table-light, .table-light > th, .table-light > td { background-color: #fdfdfe; } .table-light th, .table-light td, .table-light thead th, .table-light tbody + tbody { border-color: #fbfcfc; } .table-hover .table-light:hover { background-color: #ececf6; } .table-hover .table-light:hover > td, .table-hover .table-light:hover > th { background-color: #ececf6; } .table-dark, .table-dark > th, .table-dark > td { background-color: #c6c8ca; } .table-dark th, .table-dark td, .table-dark thead th, .table-dark tbody + tbody { border-color: #95999c; } .table-hover .table-dark:hover { background-color: #b9bbbe; } .table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th { background-color: #b9bbbe; } .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: #dee2e6; } .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: 0.9375rem; font-weight: 400; line-height: 1.5; color: #495057; background-color: #fff; background-clip: padding-box; border: 1px solid #8f959e; border-radius: 0.5rem; transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (max-width: 1200px) { .form-control { font-size: calc(0.90375rem + 0.045vw); } } @media (prefers-reduced-motion: reduce) { .form-control { transition: none; } } .form-control::-ms-expand { background-color: transparent; border: 0; } .form-control:focus { color: #495057; background-color: #fff; border-color: #5babf2; outline: 0; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .form-control::placeholder { color: #6a737b; 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:-moz-focusring { color: transparent; text-shadow: 0 0 0 #495057; } 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.171875rem; line-height: 1.5; } @media (max-width: 1200px) { .col-form-label-lg { font-size: calc(0.9271875rem + 0.32625vw); } } .col-form-label-sm { padding-top: calc(0.25rem + 1px); padding-bottom: calc(0.25rem + 1px); font-size: 0.8203125rem; line-height: 1.5; } .form-control-plaintext { display: block; width: 100%; padding: 0.375rem 0; margin-bottom: 0; font-size: 0.9375rem; line-height: 1.5; color: #1d2125; background-color: transparent; border: solid transparent; border-width: 1px 0; } @media (max-width: 1200px) { .form-control-plaintext { font-size: calc(0.90375rem + 0.045vw); } } .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.8203125rem; line-height: 1.5; border-radius: 0.2rem; } .form-control-lg { height: calc(1.5em + 1rem + 2px); padding: 0.5rem 1rem; font-size: 1.171875rem; line-height: 1.5; border-radius: 0.6rem; } @media (max-width: 1200px) { .form-control-lg { font-size: calc(0.9271875rem + 0.32625vw); } } 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: #6a737b; } .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: 0.875em; color: #357a32; } .valid-tooltip { position: absolute; top: 100%; left: 0; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.8203125rem; line-height: 1.5; color: #fff; background-color: rgba(53, 122, 50, 0.9); border-radius: 0.5rem; } .form-row > .col > .valid-tooltip, .form-row > [class*=col-] > .valid-tooltip { left: 5px; } .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: #357a32; padding-right: calc(1.5em + 0.75rem) !important; 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='%23357a32' 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: #357a32; box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.25); } .was-validated select.form-control:valid, select.form-control.is-valid { padding-right: 3rem !important; background-position: right 1.5rem center; } .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: #357a32; padding-right: calc(0.75em + 2.3125rem) !important; 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") right 0.75rem center/8px 10px no-repeat, #fff 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='%23357a32' 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") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; } .was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { border-color: #357a32; box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.25); } .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { color: #357a32; } .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: #357a32; } .was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { border-color: #357a32; } .was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { border-color: #459e41; background-color: #459e41; } .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(53, 122, 50, 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: #357a32; } .was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { border-color: #357a32; } .was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { border-color: #357a32; box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.25); } .invalid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: #ca3120; } .invalid-tooltip { position: absolute; top: 100%; left: 0; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.8203125rem; line-height: 1.5; color: #fff; background-color: rgba(202, 49, 32, 0.9); border-radius: 0.5rem; } .form-row > .col > .invalid-tooltip, .form-row > [class*=col-] > .invalid-tooltip { left: 5px; } .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: #ca3120; padding-right: calc(1.5em + 0.75rem) !important; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' 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='%23ca3120' 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: #ca3120; box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); } .was-validated select.form-control:invalid, select.form-control.is-invalid { padding-right: 3rem !important; background-position: right 1.5rem center; } .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: #ca3120; padding-right: calc(0.75em + 2.3125rem) !important; 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") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' 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='%23ca3120' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; } .was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { border-color: #ca3120; box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); } .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { color: #ca3120; } .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: #ca3120; } .was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { border-color: #ca3120; } .was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { border-color: #e04d3d; background-color: #e04d3d; } .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(202, 49, 32, 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: #ca3120; } .was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { border-color: #ca3120; } .was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { border-color: #ca3120; box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 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: #1d2125; text-align: center; vertical-align: middle; user-select: none; background-color: transparent; border: 1px solid transparent; padding: 0.375rem 0.75rem; font-size: 0.9375rem; line-height: 1.5; border-radius: 0.5rem; 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 (max-width: 1200px) { .btn { font-size: calc(0.90375rem + 0.045vw); } } @media (prefers-reduced-motion: reduce) { .btn { transition: none; } } .btn:hover { color: #1d2125; text-decoration: none; } .btn:focus, .btn.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .btn.disabled, .btn:disabled { opacity: 0.65; } .btn:not(:disabled):not(.disabled) { cursor: pointer; } a.btn.disabled, fieldset:disabled a.btn { pointer-events: none; } .btn-primary { color: #fff; background-color: #0f6cbf; border-color: #0f6cbf; } .btn-primary:hover { color: #fff; background-color: #0c589c; border-color: #0b5190; } .btn-primary:focus, .btn-primary.focus { color: #fff; background-color: #0c589c; border-color: #0b5190; box-shadow: 0 0 0 0.2rem rgba(51, 130, 201, 0.5); } .btn-primary.disabled, .btn-primary:disabled { color: #fff; background-color: #0f6cbf; border-color: #0f6cbf; } .btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, .show > .btn-primary.dropdown-toggle { color: #fff; background-color: #0b5190; border-color: #0a4b84; } .btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(51, 130, 201, 0.5); } .btn-secondary { color: #1d2125; background-color: #ced4da; border-color: #ced4da; } .btn-secondary:hover { color: #1d2125; background-color: #b8c1ca; border-color: #b1bbc4; } .btn-secondary:focus, .btn-secondary.focus { color: #1d2125; background-color: #b8c1ca; border-color: #b1bbc4; box-shadow: 0 0 0 0.2rem rgba(179, 185, 191, 0.5); } .btn-secondary.disabled, .btn-secondary:disabled { color: #1d2125; background-color: #ced4da; border-color: #ced4da; } .btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, .show > .btn-secondary.dropdown-toggle { color: #1d2125; background-color: #b1bbc4; border-color: #aab4bf; } .btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(179, 185, 191, 0.5); } .btn-success { color: #fff; background-color: #357a32; border-color: #357a32; } .btn-success:hover { color: #fff; background-color: #295f27; border-color: #255623; } .btn-success:focus, .btn-success.focus { color: #fff; background-color: #295f27; border-color: #255623; box-shadow: 0 0 0 0.2rem rgba(83, 142, 81, 0.5); } .btn-success.disabled, .btn-success:disabled { color: #fff; background-color: #357a32; border-color: #357a32; } .btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, .show > .btn-success.dropdown-toggle { color: #fff; background-color: #255623; border-color: #214d1f; } .btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(83, 142, 81, 0.5); } .btn-info { color: #fff; background-color: #008196; border-color: #008196; } .btn-info:hover { color: #fff; background-color: #006070; border-color: #005563; } .btn-info:focus, .btn-info.focus { color: #fff; background-color: #006070; border-color: #005563; box-shadow: 0 0 0 0.2rem rgba(38, 148, 166, 0.5); } .btn-info.disabled, .btn-info:disabled { color: #fff; background-color: #008196; border-color: #008196; } .btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle { color: #fff; background-color: #005563; border-color: #004a56; } .btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(38, 148, 166, 0.5); } .btn-warning { color: #1d2125; background-color: #f0ad4e; border-color: #f0ad4e; } .btn-warning:hover { color: #1d2125; background-color: #ed9d2b; border-color: #ec971f; } .btn-warning:focus, .btn-warning.focus { color: #1d2125; background-color: #ed9d2b; border-color: #ec971f; box-shadow: 0 0 0 0.2rem rgba(208, 152, 72, 0.5); } .btn-warning.disabled, .btn-warning:disabled { color: #1d2125; background-color: #f0ad4e; border-color: #f0ad4e; } .btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, .show > .btn-warning.dropdown-toggle { color: #1d2125; background-color: #ec971f; border-color: #ea9214; } .btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(208, 152, 72, 0.5); } .btn-danger { color: #fff; background-color: #ca3120; border-color: #ca3120; } .btn-danger:hover { color: #fff; background-color: #a9291b; border-color: #9e2619; } .btn-danger:focus, .btn-danger.focus { color: #fff; background-color: #a9291b; border-color: #9e2619; box-shadow: 0 0 0 0.2rem rgba(210, 80, 65, 0.5); } .btn-danger.disabled, .btn-danger:disabled { color: #fff; background-color: #ca3120; border-color: #ca3120; } .btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, .show > .btn-danger.dropdown-toggle { color: #fff; background-color: #9e2619; border-color: #932417; } .btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(210, 80, 65, 0.5); } .btn-light { color: #1d2125; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-light:hover { color: #1d2125; background-color: #e2e6ea; border-color: #dae0e5; } .btn-light:focus, .btn-light.focus { color: #1d2125; background-color: #e2e6ea; border-color: #dae0e5; box-shadow: 0 0 0 0.2rem rgba(215, 217, 218, 0.5); } .btn-light.disabled, .btn-light:disabled { color: #1d2125; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, .show > .btn-light.dropdown-toggle { color: #1d2125; background-color: #dae0e5; border-color: #d3d9df; } .btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(215, 217, 218, 0.5); } .btn-dark { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-dark:hover { color: #fff; background-color: #23272b; border-color: #1d2124; } .btn-dark:focus, .btn-dark.focus { color: #fff; background-color: #23272b; border-color: #1d2124; box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-dark.disabled, .btn-dark:disabled { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, .show > .btn-dark.dropdown-toggle { color: #fff; background-color: #1d2124; border-color: #171a1d; } .btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(82, 88, 93, 0.5); } .btn-outline-primary { color: #0f6cbf; border-color: #0f6cbf; } .btn-outline-primary:hover { color: #fff; background-color: #0f6cbf; border-color: #0f6cbf; } .btn-outline-primary:focus, .btn-outline-primary.focus { box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.5); } .btn-outline-primary.disabled, .btn-outline-primary:disabled { color: #0f6cbf; 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: #0f6cbf; border-color: #0f6cbf; } .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: 0 0 0 0.2rem rgba(15, 108, 191, 0.5); } .btn-outline-secondary { color: #ced4da; border-color: #ced4da; } .btn-outline-secondary:hover { color: #1d2125; background-color: #ced4da; border-color: #ced4da; } .btn-outline-secondary:focus, .btn-outline-secondary.focus { box-shadow: 0 0 0 0.2rem rgba(206, 212, 218, 0.5); } .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { color: #ced4da; 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: #1d2125; background-color: #ced4da; border-color: #ced4da; } .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: 0 0 0 0.2rem rgba(206, 212, 218, 0.5); } .btn-outline-success { color: #357a32; border-color: #357a32; } .btn-outline-success:hover { color: #fff; background-color: #357a32; border-color: #357a32; } .btn-outline-success:focus, .btn-outline-success.focus { box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.5); } .btn-outline-success.disabled, .btn-outline-success:disabled { color: #357a32; 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: #357a32; border-color: #357a32; } .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: 0 0 0 0.2rem rgba(53, 122, 50, 0.5); } .btn-outline-info { color: #008196; border-color: #008196; } .btn-outline-info:hover { color: #fff; background-color: #008196; border-color: #008196; } .btn-outline-info:focus, .btn-outline-info.focus { box-shadow: 0 0 0 0.2rem rgba(0, 129, 150, 0.5); } .btn-outline-info.disabled, .btn-outline-info:disabled { color: #008196; 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: #fff; background-color: #008196; border-color: #008196; } .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: 0 0 0 0.2rem rgba(0, 129, 150, 0.5); } .btn-outline-warning { color: #f0ad4e; border-color: #f0ad4e; } .btn-outline-warning:hover { color: #1d2125; background-color: #f0ad4e; border-color: #f0ad4e; } .btn-outline-warning:focus, .btn-outline-warning.focus { box-shadow: 0 0 0 0.2rem rgba(240, 173, 78, 0.5); } .btn-outline-warning.disabled, .btn-outline-warning:disabled { color: #f0ad4e; 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: #1d2125; background-color: #f0ad4e; border-color: #f0ad4e; } .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: 0 0 0 0.2rem rgba(240, 173, 78, 0.5); } .btn-outline-danger { color: #ca3120; border-color: #ca3120; } .btn-outline-danger:hover { color: #fff; background-color: #ca3120; border-color: #ca3120; } .btn-outline-danger:focus, .btn-outline-danger.focus { box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.5); } .btn-outline-danger.disabled, .btn-outline-danger:disabled { color: #ca3120; 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: #ca3120; border-color: #ca3120; } .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: 0 0 0 0.2rem rgba(202, 49, 32, 0.5); } .btn-outline-light { color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-light:hover { color: #1d2125; background-color: #f8f9fa; border-color: #f8f9fa; } .btn-outline-light:focus, .btn-outline-light.focus { box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .btn-outline-light.disabled, .btn-outline-light:disabled { color: #f8f9fa; 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: #1d2125; background-color: #f8f9fa; border-color: #f8f9fa; } .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: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .btn-outline-dark { color: #343a40; border-color: #343a40; } .btn-outline-dark:hover { color: #fff; background-color: #343a40; border-color: #343a40; } .btn-outline-dark:focus, .btn-outline-dark.focus { box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .btn-outline-dark.disabled, .btn-outline-dark:disabled { color: #343a40; 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: #343a40; border-color: #343a40; } .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: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .btn-link { font-weight: 400; color: #0f6cbf; text-decoration: none; } .btn-link:hover { color: #094478; text-decoration: underline; } .btn-link:focus, .btn-link.focus { text-decoration: underline; } .btn-link:disabled, .btn-link.disabled { color: #6a737b; pointer-events: none; } .btn-lg, .btn-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.171875rem; line-height: 1.5; border-radius: 0.6rem; } @media (max-width: 1200px) { .btn-lg, .btn-group-lg > .btn { font-size: calc(0.9271875rem + 0.32625vw); } } .btn-sm, .btn-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.8203125rem; line-height: 1.5; border-radius: 0.2rem; } .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; } } .collapsing.width { width: 0; height: auto; transition: width 0.35s ease; } @media (prefers-reduced-motion: reduce) { .collapsing.width { 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: 0.9375rem; color: #1d2125; text-align: left; list-style: none; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.5rem; } @media (max-width: 1200px) { .dropdown-menu { font-size: calc(0.90375rem + 0.045vw); } } .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.5rem 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: #1d2125; text-align: inherit; white-space: nowrap; background-color: transparent; border: 0; } .dropdown-item:hover, .dropdown-item:focus { color: #fff; text-decoration: none; background-color: #0f6cbf; } .dropdown-item.active, .dropdown-item:active { color: #fff; text-decoration: none; background-color: #0f6cbf; } .dropdown-item.disabled, .dropdown-item:disabled { color: #8f959e; pointer-events: none; background-color: transparent; } .dropdown-menu.show { display: block; } .dropdown-header { display: block; padding: 0.5rem 1.5rem; margin-bottom: 0; font-size: 0.8203125rem; color: #6a737b; white-space: nowrap; } .dropdown-item-text { display: block; padding: 0.25rem 1.5rem; color: #1d2125; } .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; } .btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn:not(:first-child), .btn-group > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } .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-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-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-top-right-radius: 0; } .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 > .form-control:not(:first-child), .input-group > .custom-select:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group > .custom-file { display: flex; align-items: center; } .input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label::after { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .custom-file:not(:first-child) .custom-file-label { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group:not(.has-validation) > .form-control:not(:last-child), .input-group:not(.has-validation) > .custom-select:not(:last-child), .input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label, .input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group.has-validation > .form-control:nth-last-child(n+3), .input-group.has-validation > .custom-select:nth-last-child(n+3), .input-group.has-validation > .custom-file:nth-last-child(n+3) .custom-file-label, .input-group.has-validation > .custom-file:nth-last-child(n+3) .custom-file-label::after { border-top-right-radius: 0; border-bottom-right-radius: 0; } .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: 0.9375rem; font-weight: 400; line-height: 1.5; color: #495057; text-align: center; white-space: nowrap; background-color: #e9ecef; border: 1px solid #8f959e; border-radius: 0.5rem; } @media (max-width: 1200px) { .input-group-text { font-size: calc(0.90375rem + 0.045vw); } } .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.171875rem; line-height: 1.5; border-radius: 0.6rem; } @media (max-width: 1200px) { .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 { font-size: calc(0.9271875rem + 0.32625vw); } } .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.8203125rem; line-height: 1.5; border-radius: 0.2rem; } .input-group-lg > .custom-select, .input-group-sm > .custom-select { padding-right: 1.75rem; } .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn, .input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text, .input-group.has-validation > .input-group-append:nth-last-child(n+3) > .btn, .input-group.has-validation > .input-group-append:nth-last-child(n+3) > .input-group-text, .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .input-group-append > .btn, .input-group > .input-group-append > .input-group-text, .input-group > .input-group-prepend:not(:first-child) > .btn, .input-group > .input-group-prepend:not(:first-child) > .input-group-text, .input-group > .input-group-prepend:first-child > .btn:not(:first-child), .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .custom-control { position: relative; z-index: 1; display: block; min-height: 1.40625rem; padding-left: 1.75rem; print-color-adjust: exact; } .custom-control-inline { display: inline-flex; margin-right: 1rem; } .custom-control-input { position: absolute; left: 0; z-index: -1; width: 1.25rem; height: 1.328125rem; opacity: 0; } .custom-control-input:checked ~ .custom-control-label::before { color: #fff; border-color: #0f6cbf; background-color: #0f6cbf; } .custom-control-input:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .custom-control-input:focus:not(:checked) ~ .custom-control-label::before { border-color: #5babf2; } .custom-control-input:not(:disabled):active ~ .custom-control-label::before { color: #fff; background-color: #8bc3f6; border-color: #8bc3f6; } .custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label { color: #6a737b; } .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.078125rem; left: -1.75rem; display: block; width: 1.25rem; height: 1.25rem; pointer-events: none; content: ""; background-color: #fff; border: 1px solid #8f959e; } .custom-control-label::after { position: absolute; top: 0.078125rem; left: -1.75rem; display: block; width: 1.25rem; height: 1.25rem; content: ""; background: 50%/50% 50% no-repeat; } .custom-checkbox .custom-control-label::before { border-radius: 0.5rem; } .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: #0f6cbf; background-color: #0f6cbf; } .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-color: rgba(15, 108, 191, 0.5); } .custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { background-color: rgba(15, 108, 191, 0.5); } .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-color: rgba(15, 108, 191, 0.5); } .custom-switch { padding-left: 2.6875rem; } .custom-switch .custom-control-label::before { left: -2.6875rem; width: 2.1875rem; pointer-events: all; border-radius: 0.625rem; } .custom-switch .custom-control-label::after { top: calc(0.078125rem + 2px); left: calc(-2.6875rem + 2px); width: calc(1.25rem - 4px); height: calc(1.25rem - 4px); background-color: #8f959e; border-radius: 0.625rem; 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.9375rem); } .custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { background-color: rgba(15, 108, 191, 0.5); } .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: 0.9375rem; 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") right 0.75rem center/8px 10px no-repeat; border: 1px solid #8f959e; border-radius: 0.5rem; appearance: none; } @media (max-width: 1200px) { .custom-select { font-size: calc(0.90375rem + 0.045vw); } } .custom-select:focus { border-color: #5babf2; outline: 0; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .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: #6a737b; 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.8203125rem; } .custom-select-lg { height: calc(1.5em + 1rem + 2px); padding-top: 0.5rem; padding-bottom: 0.5rem; padding-left: 1rem; font-size: 1.171875rem; } @media (max-width: 1200px) { .custom-select-lg { font-size: calc(0.9271875rem + 0.32625vw); } } .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; overflow: hidden; opacity: 0; } .custom-file-input:focus ~ .custom-file-label { border-color: #5babf2; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .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; overflow: hidden; font-weight: 400; line-height: 1.5; color: #495057; background-color: #fff; border: 1px solid #8f959e; border-radius: 0.5rem; } .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-color: #e9ecef; border-left: inherit; border-radius: 0 0.5rem 0.5rem 0; } .custom-range { width: 100%; height: 1.4rem; padding: 0; background-color: transparent; appearance: none; } .custom-range:focus { outline: 0; } .custom-range:focus::-webkit-slider-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .custom-range:focus::-moz-range-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .custom-range:focus::-ms-thumb { box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .custom-range::-moz-focus-outer { border: 0; } .custom-range::-webkit-slider-thumb { width: 1rem; height: 1rem; margin-top: -0.25rem; background-color: #0f6cbf; border: 0; border-radius: 1rem; 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-color: #8bc3f6; } .custom-range::-webkit-slider-runnable-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dee2e6; border-color: transparent; border-radius: 1rem; } .custom-range::-moz-range-thumb { width: 1rem; height: 1rem; background-color: #0f6cbf; border: 0; border-radius: 1rem; 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-color: #8bc3f6; } .custom-range::-moz-range-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: #dee2e6; border-color: transparent; border-radius: 1rem; } .custom-range::-ms-thumb { width: 1rem; height: 1rem; margin-top: 0; margin-right: 0.2rem; margin-left: 0.2rem; background-color: #0f6cbf; border: 0; border-radius: 1rem; 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-color: #8bc3f6; } .custom-range::-ms-track { width: 100%; height: 0.5rem; color: transparent; cursor: pointer; background-color: transparent; border-color: transparent; border-width: 0.5rem; } .custom-range::-ms-fill-lower { background-color: #dee2e6; border-radius: 1rem; } .custom-range::-ms-fill-upper { margin-right: 15px; background-color: #dee2e6; border-radius: 1rem; } .custom-range:disabled::-webkit-slider-thumb { background-color: #8f959e; } .custom-range:disabled::-webkit-slider-runnable-track { cursor: default; } .custom-range:disabled::-moz-range-thumb { background-color: #8f959e; } .custom-range:disabled::-moz-range-track { cursor: default; } .custom-range:disabled::-ms-thumb { background-color: #8f959e; } .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: #6a737b; pointer-events: none; cursor: default; } .nav-tabs { border-bottom: 1px solid #dee2e6; } .nav-tabs .nav-link { margin-bottom: -1px; background-color: transparent; border: 1px solid transparent; border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; } .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { isolation: isolate; border-color: #e9ecef #e9ecef #dee2e6; } .nav-tabs .nav-link.disabled { color: #6a737b; 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; border-top-left-radius: 0; border-top-right-radius: 0; } .nav-pills .nav-link { background: none; border: 0; border-radius: 0.5rem; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; background-color: #0f6cbf; } .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.5rem 1rem; } .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.32421875rem; padding-bottom: 0.32421875rem; margin-right: 1rem; font-size: 1.171875rem; line-height: inherit; white-space: nowrap; } @media (max-width: 1200px) { .navbar-brand { font-size: calc(0.9271875rem + 0.32625vw); } } .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.171875rem; line-height: 1; background-color: transparent; border: 1px solid transparent; border-radius: 0.5rem; } @media (max-width: 1200px) { .navbar-toggler { font-size: calc(0.9271875rem + 0.32625vw); } } .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: 50%/100% 100% no-repeat; } .navbar-nav-scroll { max-height: 75vh; overflow-y: auto; } @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-nav-scroll { overflow: visible; } .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-nav-scroll { overflow: visible; } .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-nav-scroll { overflow: visible; } .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-nav-scroll { overflow: visible; } .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-nav-scroll { overflow: visible; } .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.6); } .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { color: rgba(0, 0, 0, 0.9); } .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.6); 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.6%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.6); } .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: white; } .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); border-radius: 0.5rem; } .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; border-top-left-radius: calc(0.5rem - 1px); border-top-right-radius: calc(0.5rem - 1px); } .card > .list-group:last-child { border-bottom-width: 0; border-bottom-right-radius: calc(0.5rem - 1px); border-bottom-left-radius: calc(0.5rem - 1px); } .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-header:first-child { border-radius: calc(0.5rem - 1px) calc(0.5rem - 1px) 0 0; } .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-footer:last-child { border-radius: 0 0 calc(0.5rem - 1px) calc(0.5rem - 1px); } .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; border-radius: calc(0.5rem - 1px); } .card-img, .card-img-top, .card-img-bottom { flex-shrink: 0; width: 100%; } .card-img, .card-img-top { border-top-left-radius: calc(0.5rem - 1px); border-top-right-radius: calc(0.5rem - 1px); } .card-img, .card-img-bottom { border-bottom-right-radius: calc(0.5rem - 1px); border-bottom-left-radius: calc(0.5rem - 1px); } .card-deck .card { margin-bottom: 0.25rem; } @media (min-width: 576px) { .card-deck { display: flex; flex-flow: row wrap; margin-right: -0.25rem; margin-left: -0.25rem; } .card-deck .card { flex: 1 0 0%; margin-right: 0.25rem; margin-bottom: 0; margin-left: 0.25rem; } } .card-group > .card { margin-bottom: 0.25rem; } @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-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-top, .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-bottom, .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-top, .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-bottom, .card-group > .card:not(:first-child) .card-footer { border-bottom-left-radius: 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; border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .accordion > .card:not(:first-of-type) { border-top-left-radius: 0; border-top-right-radius: 0; } .accordion > .card > .card-header { border-radius: 0; margin-bottom: -1px; } .breadcrumb { display: flex; flex-wrap: wrap; padding: 0.5rem 0; margin-bottom: 0; list-style: none; background-color: transparent; border-radius: 0.5rem; } .breadcrumb-item + .breadcrumb-item { padding-left: 0.5rem; } .breadcrumb-item + .breadcrumb-item::before { float: left; padding-right: 0.5rem; color: #6a737b; content: "/"; } .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: underline; } .breadcrumb-item + .breadcrumb-item:hover::before { text-decoration: none; } .breadcrumb-item.active { color: #6a737b; } .pagination { display: flex; padding-left: 0; list-style: none; border-radius: 0.5rem; } .page-link { position: relative; display: block; padding: 0.5rem 0.75rem; margin-left: -1px; line-height: 1.25; color: #0f6cbf; background-color: #fff; border: 1px solid #dee2e6; } .page-link:hover { z-index: 2; color: #094478; 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(15, 108, 191, 0.75); } .page-item:first-child .page-link { margin-left: 0; border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; } .page-item:last-child .page-link { border-top-right-radius: 0.5rem; border-bottom-right-radius: 0.5rem; } .page-item.active .page-link { z-index: 3; color: #fff; background-color: #0f6cbf; border-color: #0f6cbf; } .page-item.disabled .page-link { color: #6a737b; pointer-events: none; cursor: auto; background-color: #fff; border-color: #dee2e6; } .pagination-lg .page-link { padding: 0.75rem 1.5rem; font-size: 1.171875rem; line-height: 1.5; } @media (max-width: 1200px) { .pagination-lg .page-link { font-size: calc(0.9271875rem + 0.32625vw); } } .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.6rem; border-bottom-left-radius: 0.6rem; } .pagination-lg .page-item:last-child .page-link { border-top-right-radius: 0.6rem; border-bottom-right-radius: 0.6rem; } .pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.8203125rem; line-height: 1.5; } .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.2rem; border-bottom-left-radius: 0.2rem; } .pagination-sm .page-item:last-child .page-link { border-top-right-radius: 0.2rem; border-bottom-right-radius: 0.2rem; } .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; border-radius: 0.5rem; 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; border-radius: 10rem; } .badge-primary { color: #fff; background-color: #0f6cbf; } a.badge-primary:hover, a.badge-primary:focus { color: #fff; background-color: #0b5190; } a.badge-primary:focus, a.badge-primary.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.5); } .badge-secondary { color: #1d2125; background-color: #ced4da; } a.badge-secondary:hover, a.badge-secondary:focus { color: #1d2125; background-color: #b1bbc4; } a.badge-secondary:focus, a.badge-secondary.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(206, 212, 218, 0.5); } .badge-success { color: #fff; background-color: #357a32; } a.badge-success:hover, a.badge-success:focus { color: #fff; background-color: #255623; } a.badge-success:focus, a.badge-success.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.5); } .badge-info { color: #fff; background-color: #008196; } a.badge-info:hover, a.badge-info:focus { color: #fff; background-color: #005563; } a.badge-info:focus, a.badge-info.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(0, 129, 150, 0.5); } .badge-warning { color: #1d2125; background-color: #f0ad4e; } a.badge-warning:hover, a.badge-warning:focus { color: #1d2125; background-color: #ec971f; } a.badge-warning:focus, a.badge-warning.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(240, 173, 78, 0.5); } .badge-danger { color: #fff; background-color: #ca3120; } a.badge-danger:hover, a.badge-danger:focus { color: #fff; background-color: #9e2619; } a.badge-danger:focus, a.badge-danger.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.5); } .badge-light { color: #1d2125; background-color: #f8f9fa; } a.badge-light:hover, a.badge-light:focus { color: #1d2125; background-color: #dae0e5; } a.badge-light:focus, a.badge-light.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); } .badge-dark { color: #fff; background-color: #343a40; } a.badge-dark:hover, a.badge-dark:focus { color: #fff; background-color: #1d2124; } a.badge-dark:focus, a.badge-dark.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); } .jumbotron { padding: 2rem 1rem; margin-bottom: 2rem; background-color: #e9ecef; border-radius: 0.6rem; } @media (min-width: 576px) { .jumbotron { padding: 4rem 2rem; } } .jumbotron-fluid { padding-right: 0; padding-left: 0; border-radius: 0; } .alert { position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 0 solid transparent; border-radius: 0.5rem; } .alert-heading { color: inherit; } .alert-link { font-weight: 700; } .alert-dismissible { padding-right: 3.90625rem; } .alert-dismissible .close { position: absolute; top: 0; right: 0; z-index: 2; padding: 0.75rem 1.25rem; color: inherit; } .alert-primary { color: #083863; background-color: #cfe2f2; border-color: #bcd6ed; } .alert-primary hr { border-top-color: #a8cae8; } .alert-primary .alert-link { color: #041d34; } .alert-secondary { color: #6b6e71; background-color: #f5f6f8; border-color: #f1f3f5; } .alert-secondary hr { border-top-color: #e2e6ea; } .alert-secondary .alert-link { color: #525557; } .alert-success, .environmenttable .ok { color: #1c3f1a; background-color: #d7e4d6; border-color: #c6dac6; } .alert-success hr, .environmenttable .ok hr { border-top-color: #b7d0b7; } .alert-success .alert-link, .environmenttable .ok .alert-link { color: #0c1b0b; } .alert-info { color: #00434e; background-color: #cce6ea; border-color: #b8dce2; } .alert-info hr { border-top-color: #a6d3db; } .alert-info .alert-link { color: #00171b; } .alert-warning, .environmenttable .warn { color: #7d5a29; background-color: #fcefdc; border-color: #fbe8cd; } .alert-warning hr, .environmenttable .warn hr { border-top-color: #f9ddb5; } .alert-warning .alert-link, .environmenttable .warn .alert-link { color: #573e1c; } .alert-danger, .environmenttable .error { color: #691911; background-color: #f4d6d2; border-color: #f0c5c1; } .alert-danger hr, .environmenttable .error hr { border-top-color: #ebb2ac; } .alert-danger .alert-link, .environmenttable .error .alert-link { color: #3d0f0a; } .alert-light { color: #818182; background-color: #fefefe; border-color: #fdfdfe; } .alert-light hr { border-top-color: #ececf6; } .alert-light .alert-link { color: #686868; } .alert-dark { color: #1b1e21; background-color: #d6d8d9; border-color: #c6c8ca; } .alert-dark hr { border-top-color: #b9bbbe; } .alert-dark .alert-link { color: #040505; } @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.703125rem; background-color: #e9ecef; border-radius: 0.5rem; } .progress-bar { display: flex; flex-direction: column; justify-content: center; overflow: hidden; color: #fff; text-align: center; white-space: nowrap; background-color: #0f6cbf; 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: 1s linear infinite progress-bar-stripes; } @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; border-radius: 0.5rem; } .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: #1d2125; 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:first-child { border-top-left-radius: inherit; border-top-right-radius: inherit; } .list-group-item:last-child { border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; } .list-group-item.disabled, .list-group-item:disabled { color: #6a737b; pointer-events: none; background-color: #fff; } .list-group-item.active { z-index: 2; color: #fff; background-color: #0f6cbf; border-color: #0f6cbf; } .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:first-child { border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal > .list-group-item:last-child { border-top-right-radius: 0.5rem; border-bottom-left-radius: 0; } .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:first-child { border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal-sm > .list-group-item:last-child { border-top-right-radius: 0.5rem; border-bottom-left-radius: 0; } .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:first-child { border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal-md > .list-group-item:last-child { border-top-right-radius: 0.5rem; border-bottom-left-radius: 0; } .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:first-child { border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal-lg > .list-group-item:last-child { border-top-right-radius: 0.5rem; border-bottom-left-radius: 0; } .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:first-child { border-bottom-left-radius: 0.5rem; border-top-right-radius: 0; } .list-group-horizontal-xl > .list-group-item:last-child { border-top-right-radius: 0.5rem; border-bottom-left-radius: 0; } .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 { border-radius: 0; } .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: #083863; background-color: #bcd6ed; } .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { color: #083863; background-color: #a8cae8; } .list-group-item-primary.list-group-item-action.active { color: #fff; background-color: #083863; border-color: #083863; } .list-group-item-secondary { color: #6b6e71; background-color: #f1f3f5; } .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { color: #6b6e71; background-color: #e2e6ea; } .list-group-item-secondary.list-group-item-action.active { color: #fff; background-color: #6b6e71; border-color: #6b6e71; } .list-group-item-success { color: #1c3f1a; background-color: #c6dac6; } .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { color: #1c3f1a; background-color: #b7d0b7; } .list-group-item-success.list-group-item-action.active { color: #fff; background-color: #1c3f1a; border-color: #1c3f1a; } .list-group-item-info { color: #00434e; background-color: #b8dce2; } .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { color: #00434e; background-color: #a6d3db; } .list-group-item-info.list-group-item-action.active { color: #fff; background-color: #00434e; border-color: #00434e; } .list-group-item-warning { color: #7d5a29; background-color: #fbe8cd; } .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { color: #7d5a29; background-color: #f9ddb5; } .list-group-item-warning.list-group-item-action.active { color: #fff; background-color: #7d5a29; border-color: #7d5a29; } .list-group-item-danger { color: #691911; background-color: #f0c5c1; } .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { color: #691911; background-color: #ebb2ac; } .list-group-item-danger.list-group-item-action.active { color: #fff; background-color: #691911; border-color: #691911; } .list-group-item-light { color: #818182; background-color: #fdfdfe; } .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { color: #818182; background-color: #ececf6; } .list-group-item-light.list-group-item-action.active { color: #fff; background-color: #818182; border-color: #818182; } .list-group-item-dark { color: #1b1e21; background-color: #c6c8ca; } .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { color: #1b1e21; background-color: #b9bbbe; } .list-group-item-dark.list-group-item-action.active { color: #fff; background-color: #1b1e21; border-color: #1b1e21; } .close { float: right; font-size: 1.40625rem; font-weight: 700; line-height: 1; color: #000; text-shadow: 0 1px 0 #fff; opacity: 0.5; } @media (max-width: 1200px) { .close { font-size: calc(0.950625rem + 0.6075vw); } } .close:hover { color: #000; text-decoration: none; } .close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { opacity: 0.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; color: #fff; background-color: rgba(29, 33, 37, 0.95); 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; border-radius: 0.25rem; } .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: #f8f9fa; background-color: rgba(255, 255, 255, 0.1); background-clip: padding-box; border-bottom: 1px solid rgba(0, 0, 0, 0.05); border-top-left-radius: calc(0.25rem - 1px); border-top-right-radius: calc(0.25rem - 1px); } .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); border-radius: 0.6rem; 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 #dee2e6; border-top-left-radius: calc(0.6rem - 1px); border-top-right-radius: calc(0.6rem - 1px); } .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 #dee2e6; border-bottom-right-radius: calc(0.6rem - 1px); border-bottom-left-radius: calc(0.6rem - 1px); } .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-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: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 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; white-space: normal; word-spacing: normal; line-break: auto; font-size: 0.8203125rem; 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; border-radius: 0.5rem; } .popover { position: absolute; top: 0; z-index: 1060; display: block; max-width: 300px; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; 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; white-space: normal; word-spacing: normal; line-break: auto; font-size: 0.8203125rem; word-wrap: break-word; background-color: #fff; background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.6rem; } .popover .arrow { position: absolute; display: block; width: 1rem; height: 0.5rem; margin: 0 0.6rem; } .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.6rem 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.6rem 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: 0.9375rem; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; border-top-left-radius: calc(0.6rem - 1px); border-top-right-radius: calc(0.6rem - 1px); } @media (max-width: 1200px) { .popover-header { font-size: calc(0.90375rem + 0.045vw); } } .popover-header:empty { display: none; } .popover-body { padding: 0.5rem 0.75rem; color: #1d2125; } .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%; padding: 0; color: #fff; text-align: center; background: none; border: 0; 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; } .carousel-control-next { right: 0; } .carousel-control-prev-icon, .carousel-control-next-icon { display: inline-block; width: 20px; height: 20px; background: 50%/100% 100% no-repeat; } .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: 0.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: -0.125em; border: 0.25em solid currentcolor; border-right-color: transparent; border-radius: 50%; animation: 0.75s linear infinite spinner-border; } .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: -0.125em; background-color: currentcolor; border-radius: 50%; opacity: 0; animation: 0.75s linear infinite spinner-grow; } .spinner-grow-sm { width: 1rem; height: 1rem; } @media (prefers-reduced-motion: reduce) { .spinner-border, .spinner-grow { animation-duration: 1.5s; } } .align-baseline { vertical-align: baseline !important; } .align-top, [data-filterregion=value] div:first-of-type { vertical-align: top !important; } .align-middle, .reportbuilder-table td { 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: #0f6cbf !important; } a.bg-primary:hover, a.bg-primary:focus, button.bg-primary:hover, button.bg-primary:focus { background-color: #0b5190 !important; } .bg-secondary { background-color: #ced4da !important; } a.bg-secondary:hover, a.bg-secondary:focus, button.bg-secondary:hover, button.bg-secondary:focus { background-color: #b1bbc4 !important; } .bg-success { background-color: #357a32 !important; } a.bg-success:hover, a.bg-success:focus, button.bg-success:hover, button.bg-success:focus { background-color: #255623 !important; } .bg-info { background-color: #008196 !important; } a.bg-info:hover, a.bg-info:focus, button.bg-info:hover, button.bg-info:focus { background-color: #005563 !important; } .bg-warning { background-color: #f0ad4e !important; } a.bg-warning:hover, a.bg-warning:focus, button.bg-warning:hover, button.bg-warning:focus { background-color: #ec971f !important; } .bg-danger { background-color: #ca3120 !important; } a.bg-danger:hover, a.bg-danger:focus, button.bg-danger:hover, button.bg-danger:focus { background-color: #9e2619 !important; } .bg-light { background-color: #f8f9fa !important; } a.bg-light:hover, a.bg-light:focus, button.bg-light:hover, button.bg-light:focus { background-color: #dae0e5 !important; } .bg-dark { background-color: #343a40 !important; } a.bg-dark:hover, a.bg-dark:focus, button.bg-dark:hover, button.bg-dark:focus { background-color: #1d2124 !important; } .bg-white { background-color: #fff !important; } .bg-transparent { background-color: transparent !important; } .border { border: 1px solid #dee2e6 !important; } .border-top { border-top: 1px solid #dee2e6 !important; } .border-right { border-right: 1px solid #dee2e6 !important; } .border-bottom { border-bottom: 1px solid #dee2e6 !important; } .border-left { border-left: 1px solid #dee2e6 !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: #0f6cbf !important; } .border-secondary { border-color: #ced4da !important; } .border-success { border-color: #357a32 !important; } .border-info { border-color: #008196 !important; } .border-warning { border-color: #f0ad4e !important; } .border-danger { border-color: #ca3120 !important; } .border-light { border-color: #f8f9fa !important; } .border-dark { border-color: #343a40 !important; } .border-white { border-color: #fff !important; } .rounded-sm { border-radius: 0.2rem !important; } .rounded { border-radius: 0.5rem !important; } .rounded-top { border-top-left-radius: 0.5rem !important; border-top-right-radius: 0.5rem !important; } .rounded-right { border-top-right-radius: 0.5rem !important; border-bottom-right-radius: 0.5rem !important; } .rounded-bottom { border-bottom-right-radius: 0.5rem !important; border-bottom-left-radius: 0.5rem !important; } .rounded-left { border-top-left-radius: 0.5rem !important; border-bottom-left-radius: 0.5rem !important; } .rounded-lg { border-radius: 0.6rem !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.85714286%; } .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, .reportbuilder-report-container { 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.25rem !important; } .mt-1, .my-1 { margin-top: 0.25rem !important; } .mr-1, .mx-1 { margin-right: 0.25rem !important; } .mb-1, .my-1 { margin-bottom: 0.25rem !important; } .ml-1, .mx-1 { margin-left: 0.25rem !important; } .m-2 { margin: 0.5rem !important; } .mt-2, .my-2 { margin-top: 0.5rem !important; } .mr-2, .mx-2 { margin-right: 0.5rem !important; } .mb-2, .my-2 { margin-bottom: 0.5rem !important; } .ml-2, .mx-2 { margin-left: 0.5rem !important; } .m-3 { margin: 1rem !important; } .mt-3, .my-3 { margin-top: 1rem !important; } .mr-3, .mx-3 { margin-right: 1rem !important; } .mb-3, .my-3 { margin-bottom: 1rem !important; } .ml-3, .mx-3 { margin-left: 1rem !important; } .m-4 { margin: 1.5rem !important; } .mt-4, .my-4 { margin-top: 1.5rem !important; } .mr-4, .mx-4 { margin-right: 1.5rem !important; } .mb-4, .my-4 { margin-bottom: 1.5rem !important; } .ml-4, .mx-4 { margin-left: 1.5rem !important; } .m-5 { margin: 2rem !important; } .mt-5, .my-5 { margin-top: 2rem !important; } .mr-5, .mx-5 { margin-right: 2rem !important; } .mb-5, .my-5 { margin-bottom: 2rem !important; } .ml-5, .mx-5 { margin-left: 2rem !important; } .m-6 { margin: 3rem !important; } .mt-6, .my-6 { margin-top: 3rem !important; } .mr-6, .mx-6 { margin-right: 3rem !important; } .mb-6, .my-6 { margin-bottom: 3rem !important; } .ml-6, .mx-6 { margin-left: 3rem !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.25rem !important; } .pt-1, .py-1 { padding-top: 0.25rem !important; } .pr-1, .px-1 { padding-right: 0.25rem !important; } .pb-1, .py-1 { padding-bottom: 0.25rem !important; } .pl-1, .px-1 { padding-left: 0.25rem !important; } .p-2 { padding: 0.5rem !important; } .pt-2, .py-2 { padding-top: 0.5rem !important; } .pr-2, .px-2 { padding-right: 0.5rem !important; } .pb-2, .py-2 { padding-bottom: 0.5rem !important; } .pl-2, .px-2 { padding-left: 0.5rem !important; } .p-3 { padding: 1rem !important; } .pt-3, .py-3 { padding-top: 1rem !important; } .pr-3, .px-3 { padding-right: 1rem !important; } .pb-3, .py-3 { padding-bottom: 1rem !important; } .pl-3, .px-3 { padding-left: 1rem !important; } .p-4 { padding: 1.5rem !important; } .pt-4, .py-4 { padding-top: 1.5rem !important; } .pr-4, .px-4 { padding-right: 1.5rem !important; } .pb-4, .py-4 { padding-bottom: 1.5rem !important; } .pl-4, .px-4 { padding-left: 1.5rem !important; } .p-5 { padding: 2rem !important; } .pt-5, .py-5 { padding-top: 2rem !important; } .pr-5, .px-5 { padding-right: 2rem !important; } .pb-5, .py-5 { padding-bottom: 2rem !important; } .pl-5, .px-5 { padding-left: 2rem !important; } .p-6 { padding: 3rem !important; } .pt-6, .py-6 { padding-top: 3rem !important; } .pr-6, .px-6 { padding-right: 3rem !important; } .pb-6, .py-6 { padding-bottom: 3rem !important; } .pl-6, .px-6 { padding-left: 3rem !important; } .m-n1 { margin: -0.25rem !important; } .mt-n1, .my-n1 { margin-top: -0.25rem !important; } .mr-n1, .mx-n1 { margin-right: -0.25rem !important; } .mb-n1, .my-n1 { margin-bottom: -0.25rem !important; } .ml-n1, .mx-n1 { margin-left: -0.25rem !important; } .m-n2 { margin: -0.5rem !important; } .mt-n2, .my-n2 { margin-top: -0.5rem !important; } .mr-n2, .mx-n2 { margin-right: -0.5rem !important; } .mb-n2, .my-n2 { margin-bottom: -0.5rem !important; } .ml-n2, .mx-n2 { margin-left: -0.5rem !important; } .m-n3 { margin: -1rem !important; } .mt-n3, .my-n3 { margin-top: -1rem !important; } .mr-n3, .mx-n3 { margin-right: -1rem !important; } .mb-n3, .my-n3 { margin-bottom: -1rem !important; } .ml-n3, .mx-n3 { margin-left: -1rem !important; } .m-n4 { margin: -1.5rem !important; } .mt-n4, .my-n4 { margin-top: -1.5rem !important; } .mr-n4, .mx-n4 { margin-right: -1.5rem !important; } .mb-n4, .my-n4 { margin-bottom: -1.5rem !important; } .ml-n4, .mx-n4 { margin-left: -1.5rem !important; } .m-n5 { margin: -2rem !important; } .mt-n5, .my-n5 { margin-top: -2rem !important; } .mr-n5, .mx-n5 { margin-right: -2rem !important; } .mb-n5, .my-n5 { margin-bottom: -2rem !important; } .ml-n5, .mx-n5 { margin-left: -2rem !important; } .m-n6 { margin: -3rem !important; } .mt-n6, .my-n6 { margin-top: -3rem !important; } .mr-n6, .mx-n6 { margin-right: -3rem !important; } .mb-n6, .my-n6 { margin-bottom: -3rem !important; } .ml-n6, .mx-n6 { margin-left: -3rem !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.25rem !important; } .mt-sm-1, .my-sm-1 { margin-top: 0.25rem !important; } .mr-sm-1, .mx-sm-1 { margin-right: 0.25rem !important; } .mb-sm-1, .my-sm-1 { margin-bottom: 0.25rem !important; } .ml-sm-1, .mx-sm-1 { margin-left: 0.25rem !important; } .m-sm-2 { margin: 0.5rem !important; } .mt-sm-2, .my-sm-2 { margin-top: 0.5rem !important; } .mr-sm-2, .mx-sm-2 { margin-right: 0.5rem !important; } .mb-sm-2, .my-sm-2 { margin-bottom: 0.5rem !important; } .ml-sm-2, .mx-sm-2 { margin-left: 0.5rem !important; } .m-sm-3 { margin: 1rem !important; } .mt-sm-3, .my-sm-3 { margin-top: 1rem !important; } .mr-sm-3, .mx-sm-3 { margin-right: 1rem !important; } .mb-sm-3, .my-sm-3 { margin-bottom: 1rem !important; } .ml-sm-3, .mx-sm-3 { margin-left: 1rem !important; } .m-sm-4 { margin: 1.5rem !important; } .mt-sm-4, .my-sm-4 { margin-top: 1.5rem !important; } .mr-sm-4, .mx-sm-4 { margin-right: 1.5rem !important; } .mb-sm-4, .my-sm-4 { margin-bottom: 1.5rem !important; } .ml-sm-4, .mx-sm-4 { margin-left: 1.5rem !important; } .m-sm-5 { margin: 2rem !important; } .mt-sm-5, .my-sm-5 { margin-top: 2rem !important; } .mr-sm-5, .mx-sm-5 { margin-right: 2rem !important; } .mb-sm-5, .my-sm-5 { margin-bottom: 2rem !important; } .ml-sm-5, .mx-sm-5 { margin-left: 2rem !important; } .m-sm-6 { margin: 3rem !important; } .mt-sm-6, .my-sm-6 { margin-top: 3rem !important; } .mr-sm-6, .mx-sm-6 { margin-right: 3rem !important; } .mb-sm-6, .my-sm-6 { margin-bottom: 3rem !important; } .ml-sm-6, .mx-sm-6 { margin-left: 3rem !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.25rem !important; } .pt-sm-1, .py-sm-1 { padding-top: 0.25rem !important; } .pr-sm-1, .px-sm-1 { padding-right: 0.25rem !important; } .pb-sm-1, .py-sm-1 { padding-bottom: 0.25rem !important; } .pl-sm-1, .px-sm-1 { padding-left: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .pt-sm-2, .py-sm-2 { padding-top: 0.5rem !important; } .pr-sm-2, .px-sm-2 { padding-right: 0.5rem !important; } .pb-sm-2, .py-sm-2 { padding-bottom: 0.5rem !important; } .pl-sm-2, .px-sm-2 { padding-left: 0.5rem !important; } .p-sm-3 { padding: 1rem !important; } .pt-sm-3, .py-sm-3 { padding-top: 1rem !important; } .pr-sm-3, .px-sm-3 { padding-right: 1rem !important; } .pb-sm-3, .py-sm-3 { padding-bottom: 1rem !important; } .pl-sm-3, .px-sm-3 { padding-left: 1rem !important; } .p-sm-4 { padding: 1.5rem !important; } .pt-sm-4, .py-sm-4 { padding-top: 1.5rem !important; } .pr-sm-4, .px-sm-4 { padding-right: 1.5rem !important; } .pb-sm-4, .py-sm-4 { padding-bottom: 1.5rem !important; } .pl-sm-4, .px-sm-4 { padding-left: 1.5rem !important; } .p-sm-5 { padding: 2rem !important; } .pt-sm-5, .py-sm-5 { padding-top: 2rem !important; } .pr-sm-5, .px-sm-5 { padding-right: 2rem !important; } .pb-sm-5, .py-sm-5 { padding-bottom: 2rem !important; } .pl-sm-5, .px-sm-5 { padding-left: 2rem !important; } .p-sm-6 { padding: 3rem !important; } .pt-sm-6, .py-sm-6 { padding-top: 3rem !important; } .pr-sm-6, .px-sm-6 { padding-right: 3rem !important; } .pb-sm-6, .py-sm-6 { padding-bottom: 3rem !important; } .pl-sm-6, .px-sm-6 { padding-left: 3rem !important; } .m-sm-n1 { margin: -0.25rem !important; } .mt-sm-n1, .my-sm-n1 { margin-top: -0.25rem !important; } .mr-sm-n1, .mx-sm-n1 { margin-right: -0.25rem !important; } .mb-sm-n1, .my-sm-n1 { margin-bottom: -0.25rem !important; } .ml-sm-n1, .mx-sm-n1 { margin-left: -0.25rem !important; } .m-sm-n2 { margin: -0.5rem !important; } .mt-sm-n2, .my-sm-n2 { margin-top: -0.5rem !important; } .mr-sm-n2, .mx-sm-n2 { margin-right: -0.5rem !important; } .mb-sm-n2, .my-sm-n2 { margin-bottom: -0.5rem !important; } .ml-sm-n2, .mx-sm-n2 { margin-left: -0.5rem !important; } .m-sm-n3 { margin: -1rem !important; } .mt-sm-n3, .my-sm-n3 { margin-top: -1rem !important; } .mr-sm-n3, .mx-sm-n3 { margin-right: -1rem !important; } .mb-sm-n3, .my-sm-n3 { margin-bottom: -1rem !important; } .ml-sm-n3, .mx-sm-n3 { margin-left: -1rem !important; } .m-sm-n4 { margin: -1.5rem !important; } .mt-sm-n4, .my-sm-n4 { margin-top: -1.5rem !important; } .mr-sm-n4, .mx-sm-n4 { margin-right: -1.5rem !important; } .mb-sm-n4, .my-sm-n4 { margin-bottom: -1.5rem !important; } .ml-sm-n4, .mx-sm-n4 { margin-left: -1.5rem !important; } .m-sm-n5 { margin: -2rem !important; } .mt-sm-n5, .my-sm-n5 { margin-top: -2rem !important; } .mr-sm-n5, .mx-sm-n5 { margin-right: -2rem !important; } .mb-sm-n5, .my-sm-n5 { margin-bottom: -2rem !important; } .ml-sm-n5, .mx-sm-n5 { margin-left: -2rem !important; } .m-sm-n6 { margin: -3rem !important; } .mt-sm-n6, .my-sm-n6 { margin-top: -3rem !important; } .mr-sm-n6, .mx-sm-n6 { margin-right: -3rem !important; } .mb-sm-n6, .my-sm-n6 { margin-bottom: -3rem !important; } .ml-sm-n6, .mx-sm-n6 { margin-left: -3rem !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.25rem !important; } .mt-md-1, .my-md-1 { margin-top: 0.25rem !important; } .mr-md-1, .mx-md-1 { margin-right: 0.25rem !important; } .mb-md-1, .my-md-1 { margin-bottom: 0.25rem !important; } .ml-md-1, .mx-md-1 { margin-left: 0.25rem !important; } .m-md-2 { margin: 0.5rem !important; } .mt-md-2, .my-md-2 { margin-top: 0.5rem !important; } .mr-md-2, .mx-md-2 { margin-right: 0.5rem !important; } .mb-md-2, .my-md-2 { margin-bottom: 0.5rem !important; } .ml-md-2, .mx-md-2 { margin-left: 0.5rem !important; } .m-md-3 { margin: 1rem !important; } .mt-md-3, .my-md-3 { margin-top: 1rem !important; } .mr-md-3, .mx-md-3 { margin-right: 1rem !important; } .mb-md-3, .my-md-3 { margin-bottom: 1rem !important; } .ml-md-3, .mx-md-3 { margin-left: 1rem !important; } .m-md-4 { margin: 1.5rem !important; } .mt-md-4, .my-md-4 { margin-top: 1.5rem !important; } .mr-md-4, .mx-md-4 { margin-right: 1.5rem !important; } .mb-md-4, .my-md-4 { margin-bottom: 1.5rem !important; } .ml-md-4, .mx-md-4 { margin-left: 1.5rem !important; } .m-md-5 { margin: 2rem !important; } .mt-md-5, .my-md-5 { margin-top: 2rem !important; } .mr-md-5, .mx-md-5 { margin-right: 2rem !important; } .mb-md-5, .my-md-5 { margin-bottom: 2rem !important; } .ml-md-5, .mx-md-5 { margin-left: 2rem !important; } .m-md-6 { margin: 3rem !important; } .mt-md-6, .my-md-6 { margin-top: 3rem !important; } .mr-md-6, .mx-md-6 { margin-right: 3rem !important; } .mb-md-6, .my-md-6 { margin-bottom: 3rem !important; } .ml-md-6, .mx-md-6 { margin-left: 3rem !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.25rem !important; } .pt-md-1, .py-md-1 { padding-top: 0.25rem !important; } .pr-md-1, .px-md-1 { padding-right: 0.25rem !important; } .pb-md-1, .py-md-1 { padding-bottom: 0.25rem !important; } .pl-md-1, .px-md-1 { padding-left: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .pt-md-2, .py-md-2 { padding-top: 0.5rem !important; } .pr-md-2, .px-md-2 { padding-right: 0.5rem !important; } .pb-md-2, .py-md-2 { padding-bottom: 0.5rem !important; } .pl-md-2, .px-md-2 { padding-left: 0.5rem !important; } .p-md-3 { padding: 1rem !important; } .pt-md-3, .py-md-3 { padding-top: 1rem !important; } .pr-md-3, .px-md-3 { padding-right: 1rem !important; } .pb-md-3, .py-md-3 { padding-bottom: 1rem !important; } .pl-md-3, .px-md-3 { padding-left: 1rem !important; } .p-md-4 { padding: 1.5rem !important; } .pt-md-4, .py-md-4 { padding-top: 1.5rem !important; } .pr-md-4, .px-md-4 { padding-right: 1.5rem !important; } .pb-md-4, .py-md-4 { padding-bottom: 1.5rem !important; } .pl-md-4, .px-md-4 { padding-left: 1.5rem !important; } .p-md-5 { padding: 2rem !important; } .pt-md-5, .py-md-5 { padding-top: 2rem !important; } .pr-md-5, .px-md-5 { padding-right: 2rem !important; } .pb-md-5, .py-md-5 { padding-bottom: 2rem !important; } .pl-md-5, .px-md-5 { padding-left: 2rem !important; } .p-md-6 { padding: 3rem !important; } .pt-md-6, .py-md-6 { padding-top: 3rem !important; } .pr-md-6, .px-md-6 { padding-right: 3rem !important; } .pb-md-6, .py-md-6 { padding-bottom: 3rem !important; } .pl-md-6, .px-md-6 { padding-left: 3rem !important; } .m-md-n1 { margin: -0.25rem !important; } .mt-md-n1, .my-md-n1 { margin-top: -0.25rem !important; } .mr-md-n1, .mx-md-n1 { margin-right: -0.25rem !important; } .mb-md-n1, .my-md-n1 { margin-bottom: -0.25rem !important; } .ml-md-n1, .mx-md-n1 { margin-left: -0.25rem !important; } .m-md-n2 { margin: -0.5rem !important; } .mt-md-n2, .my-md-n2 { margin-top: -0.5rem !important; } .mr-md-n2, .mx-md-n2 { margin-right: -0.5rem !important; } .mb-md-n2, .my-md-n2 { margin-bottom: -0.5rem !important; } .ml-md-n2, .mx-md-n2 { margin-left: -0.5rem !important; } .m-md-n3 { margin: -1rem !important; } .mt-md-n3, .my-md-n3 { margin-top: -1rem !important; } .mr-md-n3, .mx-md-n3 { margin-right: -1rem !important; } .mb-md-n3, .my-md-n3 { margin-bottom: -1rem !important; } .ml-md-n3, .mx-md-n3 { margin-left: -1rem !important; } .m-md-n4 { margin: -1.5rem !important; } .mt-md-n4, .my-md-n4 { margin-top: -1.5rem !important; } .mr-md-n4, .mx-md-n4 { margin-right: -1.5rem !important; } .mb-md-n4, .my-md-n4 { margin-bottom: -1.5rem !important; } .ml-md-n4, .mx-md-n4 { margin-left: -1.5rem !important; } .m-md-n5 { margin: -2rem !important; } .mt-md-n5, .my-md-n5 { margin-top: -2rem !important; } .mr-md-n5, .mx-md-n5 { margin-right: -2rem !important; } .mb-md-n5, .my-md-n5 { margin-bottom: -2rem !important; } .ml-md-n5, .mx-md-n5 { margin-left: -2rem !important; } .m-md-n6 { margin: -3rem !important; } .mt-md-n6, .my-md-n6 { margin-top: -3rem !important; } .mr-md-n6, .mx-md-n6 { margin-right: -3rem !important; } .mb-md-n6, .my-md-n6 { margin-bottom: -3rem !important; } .ml-md-n6, .mx-md-n6 { margin-left: -3rem !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.25rem !important; } .mt-lg-1, .my-lg-1 { margin-top: 0.25rem !important; } .mr-lg-1, .mx-lg-1 { margin-right: 0.25rem !important; } .mb-lg-1, .my-lg-1 { margin-bottom: 0.25rem !important; } .ml-lg-1, .mx-lg-1 { margin-left: 0.25rem !important; } .m-lg-2 { margin: 0.5rem !important; } .mt-lg-2, .my-lg-2 { margin-top: 0.5rem !important; } .mr-lg-2, .mx-lg-2 { margin-right: 0.5rem !important; } .mb-lg-2, .my-lg-2 { margin-bottom: 0.5rem !important; } .ml-lg-2, .mx-lg-2 { margin-left: 0.5rem !important; } .m-lg-3 { margin: 1rem !important; } .mt-lg-3, .my-lg-3 { margin-top: 1rem !important; } .mr-lg-3, .mx-lg-3 { margin-right: 1rem !important; } .mb-lg-3, .my-lg-3 { margin-bottom: 1rem !important; } .ml-lg-3, .mx-lg-3 { margin-left: 1rem !important; } .m-lg-4 { margin: 1.5rem !important; } .mt-lg-4, .my-lg-4 { margin-top: 1.5rem !important; } .mr-lg-4, .mx-lg-4 { margin-right: 1.5rem !important; } .mb-lg-4, .my-lg-4 { margin-bottom: 1.5rem !important; } .ml-lg-4, .mx-lg-4 { margin-left: 1.5rem !important; } .m-lg-5 { margin: 2rem !important; } .mt-lg-5, .my-lg-5 { margin-top: 2rem !important; } .mr-lg-5, .mx-lg-5 { margin-right: 2rem !important; } .mb-lg-5, .my-lg-5 { margin-bottom: 2rem !important; } .ml-lg-5, .mx-lg-5 { margin-left: 2rem !important; } .m-lg-6 { margin: 3rem !important; } .mt-lg-6, .my-lg-6 { margin-top: 3rem !important; } .mr-lg-6, .mx-lg-6 { margin-right: 3rem !important; } .mb-lg-6, .my-lg-6 { margin-bottom: 3rem !important; } .ml-lg-6, .mx-lg-6 { margin-left: 3rem !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.25rem !important; } .pt-lg-1, .py-lg-1 { padding-top: 0.25rem !important; } .pr-lg-1, .px-lg-1 { padding-right: 0.25rem !important; } .pb-lg-1, .py-lg-1 { padding-bottom: 0.25rem !important; } .pl-lg-1, .px-lg-1 { padding-left: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .pt-lg-2, .py-lg-2 { padding-top: 0.5rem !important; } .pr-lg-2, .px-lg-2 { padding-right: 0.5rem !important; } .pb-lg-2, .py-lg-2 { padding-bottom: 0.5rem !important; } .pl-lg-2, .px-lg-2 { padding-left: 0.5rem !important; } .p-lg-3 { padding: 1rem !important; } .pt-lg-3, .py-lg-3 { padding-top: 1rem !important; } .pr-lg-3, .px-lg-3 { padding-right: 1rem !important; } .pb-lg-3, .py-lg-3 { padding-bottom: 1rem !important; } .pl-lg-3, .px-lg-3 { padding-left: 1rem !important; } .p-lg-4 { padding: 1.5rem !important; } .pt-lg-4, .py-lg-4 { padding-top: 1.5rem !important; } .pr-lg-4, .px-lg-4 { padding-right: 1.5rem !important; } .pb-lg-4, .py-lg-4 { padding-bottom: 1.5rem !important; } .pl-lg-4, .px-lg-4 { padding-left: 1.5rem !important; } .p-lg-5 { padding: 2rem !important; } .pt-lg-5, .py-lg-5 { padding-top: 2rem !important; } .pr-lg-5, .px-lg-5 { padding-right: 2rem !important; } .pb-lg-5, .py-lg-5 { padding-bottom: 2rem !important; } .pl-lg-5, .px-lg-5 { padding-left: 2rem !important; } .p-lg-6 { padding: 3rem !important; } .pt-lg-6, .py-lg-6 { padding-top: 3rem !important; } .pr-lg-6, .px-lg-6 { padding-right: 3rem !important; } .pb-lg-6, .py-lg-6 { padding-bottom: 3rem !important; } .pl-lg-6, .px-lg-6 { padding-left: 3rem !important; } .m-lg-n1 { margin: -0.25rem !important; } .mt-lg-n1, .my-lg-n1 { margin-top: -0.25rem !important; } .mr-lg-n1, .mx-lg-n1 { margin-right: -0.25rem !important; } .mb-lg-n1, .my-lg-n1 { margin-bottom: -0.25rem !important; } .ml-lg-n1, .mx-lg-n1 { margin-left: -0.25rem !important; } .m-lg-n2 { margin: -0.5rem !important; } .mt-lg-n2, .my-lg-n2 { margin-top: -0.5rem !important; } .mr-lg-n2, .mx-lg-n2 { margin-right: -0.5rem !important; } .mb-lg-n2, .my-lg-n2 { margin-bottom: -0.5rem !important; } .ml-lg-n2, .mx-lg-n2 { margin-left: -0.5rem !important; } .m-lg-n3 { margin: -1rem !important; } .mt-lg-n3, .my-lg-n3 { margin-top: -1rem !important; } .mr-lg-n3, .mx-lg-n3 { margin-right: -1rem !important; } .mb-lg-n3, .my-lg-n3 { margin-bottom: -1rem !important; } .ml-lg-n3, .mx-lg-n3 { margin-left: -1rem !important; } .m-lg-n4 { margin: -1.5rem !important; } .mt-lg-n4, .my-lg-n4 { margin-top: -1.5rem !important; } .mr-lg-n4, .mx-lg-n4 { margin-right: -1.5rem !important; } .mb-lg-n4, .my-lg-n4 { margin-bottom: -1.5rem !important; } .ml-lg-n4, .mx-lg-n4 { margin-left: -1.5rem !important; } .m-lg-n5 { margin: -2rem !important; } .mt-lg-n5, .my-lg-n5 { margin-top: -2rem !important; } .mr-lg-n5, .mx-lg-n5 { margin-right: -2rem !important; } .mb-lg-n5, .my-lg-n5 { margin-bottom: -2rem !important; } .ml-lg-n5, .mx-lg-n5 { margin-left: -2rem !important; } .m-lg-n6 { margin: -3rem !important; } .mt-lg-n6, .my-lg-n6 { margin-top: -3rem !important; } .mr-lg-n6, .mx-lg-n6 { margin-right: -3rem !important; } .mb-lg-n6, .my-lg-n6 { margin-bottom: -3rem !important; } .ml-lg-n6, .mx-lg-n6 { margin-left: -3rem !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.25rem !important; } .mt-xl-1, .my-xl-1 { margin-top: 0.25rem !important; } .mr-xl-1, .mx-xl-1 { margin-right: 0.25rem !important; } .mb-xl-1, .my-xl-1 { margin-bottom: 0.25rem !important; } .ml-xl-1, .mx-xl-1 { margin-left: 0.25rem !important; } .m-xl-2 { margin: 0.5rem !important; } .mt-xl-2, .my-xl-2 { margin-top: 0.5rem !important; } .mr-xl-2, .mx-xl-2 { margin-right: 0.5rem !important; } .mb-xl-2, .my-xl-2 { margin-bottom: 0.5rem !important; } .ml-xl-2, .mx-xl-2 { margin-left: 0.5rem !important; } .m-xl-3 { margin: 1rem !important; } .mt-xl-3, .my-xl-3 { margin-top: 1rem !important; } .mr-xl-3, .mx-xl-3 { margin-right: 1rem !important; } .mb-xl-3, .my-xl-3 { margin-bottom: 1rem !important; } .ml-xl-3, .mx-xl-3 { margin-left: 1rem !important; } .m-xl-4 { margin: 1.5rem !important; } .mt-xl-4, .my-xl-4 { margin-top: 1.5rem !important; } .mr-xl-4, .mx-xl-4 { margin-right: 1.5rem !important; } .mb-xl-4, .my-xl-4 { margin-bottom: 1.5rem !important; } .ml-xl-4, .mx-xl-4 { margin-left: 1.5rem !important; } .m-xl-5 { margin: 2rem !important; } .mt-xl-5, .my-xl-5 { margin-top: 2rem !important; } .mr-xl-5, .mx-xl-5 { margin-right: 2rem !important; } .mb-xl-5, .my-xl-5 { margin-bottom: 2rem !important; } .ml-xl-5, .mx-xl-5 { margin-left: 2rem !important; } .m-xl-6 { margin: 3rem !important; } .mt-xl-6, .my-xl-6 { margin-top: 3rem !important; } .mr-xl-6, .mx-xl-6 { margin-right: 3rem !important; } .mb-xl-6, .my-xl-6 { margin-bottom: 3rem !important; } .ml-xl-6, .mx-xl-6 { margin-left: 3rem !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.25rem !important; } .pt-xl-1, .py-xl-1 { padding-top: 0.25rem !important; } .pr-xl-1, .px-xl-1 { padding-right: 0.25rem !important; } .pb-xl-1, .py-xl-1 { padding-bottom: 0.25rem !important; } .pl-xl-1, .px-xl-1 { padding-left: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .pt-xl-2, .py-xl-2 { padding-top: 0.5rem !important; } .pr-xl-2, .px-xl-2 { padding-right: 0.5rem !important; } .pb-xl-2, .py-xl-2 { padding-bottom: 0.5rem !important; } .pl-xl-2, .px-xl-2 { padding-left: 0.5rem !important; } .p-xl-3 { padding: 1rem !important; } .pt-xl-3, .py-xl-3 { padding-top: 1rem !important; } .pr-xl-3, .px-xl-3 { padding-right: 1rem !important; } .pb-xl-3, .py-xl-3 { padding-bottom: 1rem !important; } .pl-xl-3, .px-xl-3 { padding-left: 1rem !important; } .p-xl-4 { padding: 1.5rem !important; } .pt-xl-4, .py-xl-4 { padding-top: 1.5rem !important; } .pr-xl-4, .px-xl-4 { padding-right: 1.5rem !important; } .pb-xl-4, .py-xl-4 { padding-bottom: 1.5rem !important; } .pl-xl-4, .px-xl-4 { padding-left: 1.5rem !important; } .p-xl-5 { padding: 2rem !important; } .pt-xl-5, .py-xl-5 { padding-top: 2rem !important; } .pr-xl-5, .px-xl-5 { padding-right: 2rem !important; } .pb-xl-5, .py-xl-5 { padding-bottom: 2rem !important; } .pl-xl-5, .px-xl-5 { padding-left: 2rem !important; } .p-xl-6 { padding: 3rem !important; } .pt-xl-6, .py-xl-6 { padding-top: 3rem !important; } .pr-xl-6, .px-xl-6 { padding-right: 3rem !important; } .pb-xl-6, .py-xl-6 { padding-bottom: 3rem !important; } .pl-xl-6, .px-xl-6 { padding-left: 3rem !important; } .m-xl-n1 { margin: -0.25rem !important; } .mt-xl-n1, .my-xl-n1 { margin-top: -0.25rem !important; } .mr-xl-n1, .mx-xl-n1 { margin-right: -0.25rem !important; } .mb-xl-n1, .my-xl-n1 { margin-bottom: -0.25rem !important; } .ml-xl-n1, .mx-xl-n1 { margin-left: -0.25rem !important; } .m-xl-n2 { margin: -0.5rem !important; } .mt-xl-n2, .my-xl-n2 { margin-top: -0.5rem !important; } .mr-xl-n2, .mx-xl-n2 { margin-right: -0.5rem !important; } .mb-xl-n2, .my-xl-n2 { margin-bottom: -0.5rem !important; } .ml-xl-n2, .mx-xl-n2 { margin-left: -0.5rem !important; } .m-xl-n3 { margin: -1rem !important; } .mt-xl-n3, .my-xl-n3 { margin-top: -1rem !important; } .mr-xl-n3, .mx-xl-n3 { margin-right: -1rem !important; } .mb-xl-n3, .my-xl-n3 { margin-bottom: -1rem !important; } .ml-xl-n3, .mx-xl-n3 { margin-left: -1rem !important; } .m-xl-n4 { margin: -1.5rem !important; } .mt-xl-n4, .my-xl-n4 { margin-top: -1.5rem !important; } .mr-xl-n4, .mx-xl-n4 { margin-right: -1.5rem !important; } .mb-xl-n4, .my-xl-n4 { margin-bottom: -1.5rem !important; } .ml-xl-n4, .mx-xl-n4 { margin-left: -1.5rem !important; } .m-xl-n5 { margin: -2rem !important; } .mt-xl-n5, .my-xl-n5 { margin-top: -2rem !important; } .mr-xl-n5, .mx-xl-n5 { margin-right: -2rem !important; } .mb-xl-n5, .my-xl-n5 { margin-bottom: -2rem !important; } .ml-xl-n5, .mx-xl-n5 { margin-left: -2rem !important; } .m-xl-n6 { margin: -3rem !important; } .mt-xl-n6, .my-xl-n6 { margin-top: -3rem !important; } .mr-xl-n6, .mx-xl-n6 { margin-right: -3rem !important; } .mb-xl-n6, .my-xl-n6 { margin-bottom: -3rem !important; } .ml-xl-n6, .mx-xl-n6 { margin-left: -3rem !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: #0f6cbf !important; } a.text-primary:hover, a.text-primary:focus { color: #094478 !important; } .text-secondary { color: #ced4da !important; } a.text-secondary:hover, a.text-secondary:focus { color: #a2aeb9 !important; } .text-success { color: #357a32 !important; } a.text-success:hover, a.text-success:focus { color: #1d441c !important; } .text-info { color: #008196 !important; } a.text-info:hover, a.text-info:focus { color: #003f4a !important; } .text-warning { color: #f0ad4e !important; } a.text-warning:hover, a.text-warning:focus { color: #df8a13 !important; } .text-danger { color: #ca3120 !important; } a.text-danger:hover, a.text-danger:focus { color: #882116 !important; } .text-light { color: #f8f9fa !important; } a.text-light:hover, a.text-light:focus { color: #cbd3da !important; } .text-dark { color: #343a40 !important; } a.text-dark:hover, a.text-dark:focus { color: #121416 !important; } .text-body { color: #1d2125 !important; } .text-muted { color: #6a737b !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; word-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 #8f959e; page-break-inside: avoid; } tr, img { page-break-inside: avoid; } p, h2, h3 { orphans: 3; widows: 3; } h2, h3 { page-break-after: avoid; } 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: #dee2e6; } .table .thead-dark th { color: inherit; border-color: #dee2e6; } } /** * Bootstrap overrides for RTL * * This file is only for overriding sass from upstream bootstrap, all general rtl fixes for * moodle scss should be placed immediately after the definition of the ltr rule. */ .breadcrumb-item + .breadcrumb-item::before { content: "/"; /*rtl:remove*/ content: "/"; /* stylelint-disable-line declaration-block-no-duplicate-properties */ } .dir-rtl .custom-select { background-position: 0.75rem center; } .dir-rtl .custom-switch .custom-control-input:checked ~ .custom-control-label::after { transform: translateX(-0.9375rem); } .dir-rtl .tooltip.bs-tooltip-left .arrow, .dir-rtl .tooltip.bs-tooltip-auto[x-placement^=left] .arrow, .dir-rtl .tooltip.bs-tooltip-right .arrow, .dir-rtl .tooltip.bs-tooltip-auto[x-placement^=right] .arrow { transform: rotate(180deg); } .dir-rtl .tooltip.bs-tooltip-left .arrow, .dir-rtl .tooltip.bs-tooltip-auto[x-placement^=left] .arrow { left: auto; right: 0; } .dir-rtl .tooltip.bs-tooltip-right .arrow, .dir-rtl .tooltip.bs-tooltip-auto[x-placement^=right] .arrow { left: 0; right: auto; } /** * Moodle variables * * Variables written for Moodle specific components * * Please do not override any Bootstrap variables here, custom Bootstrap variable should go in * preset files instead. */ /* core.less */ #region-main { overflow-y: visible; background-color: #fff; } @media (min-width: 576px) { .context-header-settings-menu, .region-main-settings-menu { float: right; width: auto; max-width: 4em; height: 2em; display: block; margin-top: 4px; } } @media (max-width: 767.98px) { .context-header-settings-menu, .region-main-settings-menu { display: flex; justify-content: flex-end; } } .context-header-settings-menu .dropdown-toggle > .icon, #region-main-settings-menu .dropdown-toggle > .icon { height: 24px; font-size: 24px; width: auto; } /** Prevent user notifications overlapping with region main settings menu */ #user-notifications { display: block; overflow: hidden; } /** Page layout CSS starts **/ .layout-option-noheader #page-header, .layout-option-nonavbar #page-navbar, .layout-option-nofooter #page-footer, .layout-option-nocourseheader .course-content-header, .layout-option-nocoursefooter .course-content-footer { display: none; } /** Page layout CSS ends **/ .mdl-left { text-align: left; } .mdl-right { text-align: right; } /*rtl:ignore*/ .text-ltr { direction: ltr !important; /* stylelint-disable-line declaration-no-important */ } #add, #remove, .centerpara, .mdl-align { text-align: center; } a.dimmed, a.dimmed:link, a.dimmed:visited, a.dimmed_text, a.dimmed_text:link, a.dimmed_text:visited, .dimmed_text, .dimmed_text a, .dimmed_text a:link, .dimmed_text a:visited, .usersuspended, .usersuspended a, .usersuspended a:link, .usersuspended a:visited, .dimmed_category, .dimmed_category a { color: #6a737b; } .aalink.focus, a.focus.autolink, .aalink:focus, a.autolink:focus, #page-footer a:not([class]).focus, #page-footer a:not([class]):focus, .arrow_link.focus, .arrow_link:focus, a:not([class]).focus, a:not([class]):focus, .activityinstance > a.focus, .activityinstance > a:focus { outline: 0.2rem solid transparent; color: #1d2125; background-color: #d2e8fb; box-shadow: 0 -0.2rem #d2e8fb, 0 0.2rem #343a40; } .aalink:focus:hover, a.autolink:focus:hover, #page-footer a:not([class]):focus:hover, .arrow_link:focus:hover, a:not([class]):focus:hover, .activityinstance > a:focus:hover { text-decoration: none; } .aabtn.focus, .aabtn:focus, .btn-link.focus, .btn-link:focus, .nav-link.focus, .nav-link:focus, .editor_atto_toolbar button.focus, .editor_atto_toolbar button:focus, .editor_atto_toolbar .atto_toolbar_row.focus, .editor_atto_toolbar .atto_toolbar_row:focus, [role=button].focus, [role=button]:focus, .list-group-item-action.focus, .list-group-item-action:focus, input[type=checkbox].focus, input[type=checkbox]:focus, input[type=radio].focus, input[type=radio]:focus, input[type=file].focus, input[type=file]:focus, input[type=image].focus, input[type=image]:focus, .sr-only-focusable.focus, .sr-only-focusable:focus, a.dropdown-toggle.focus, a.dropdown-toggle:focus, .moodle-dialogue-base .closebutton.focus, .moodle-dialogue-base .closebutton:focus, button.close.focus, button.close:focus, .form-autocomplete-selection.focus, .form-autocomplete-selection:focus, [role=treeitem]:not([aria-expanded=true]).focus, [role=treeitem]:not([aria-expanded=true]):focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .aabtn:focus:hover, .btn-link:focus:hover, .nav-link:focus:hover, .editor_atto_toolbar button:focus:hover, .editor_atto_toolbar .atto_toolbar_row:focus:hover, [role=button]:focus:hover, .list-group-item-action:focus:hover, input[type=checkbox]:focus:hover, input[type=radio]:focus:hover, input[type=file]:focus:hover, input[type=image]:focus:hover, .sr-only-focusable:focus:hover, a.dropdown-toggle:focus:hover, .moodle-dialogue-base .closebutton:focus:hover, button.close:focus:hover, .form-autocomplete-selection:focus:hover, [role=treeitem]:not([aria-expanded=true]):focus:hover { text-decoration: none; } .modal-dialog[tabindex="0"].focus, .modal-dialog[tabindex="0"]:focus { outline: 0; } .modal-dialog[tabindex="0"].focus .modal-content, .modal-dialog[tabindex="0"]:focus .modal-content { outline: 0; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); border-radius: 0.6rem; } [role=treeitem][aria-expanded=true] { outline: 0; } [role=treeitem][aria-expanded=true].focus > *:first-child, [role=treeitem][aria-expanded=true]:focus > *:first-child { outline: 0; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } [role=treeitem][aria-expanded=true]:focus:hover { text-decoration: none; } .form-autocomplete-suggestions li[aria-selected=true] { outline: 0; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .safari input[type=checkbox].focus, .safari input[type=checkbox]:focus, .safari input[type=radio].focus, .safari input[type=radio]:focus { outline: auto; } .unlist, .unlist li, .inline-list, .inline-list li, .block .list, .block .list li, .section li.movehere, .tabtree li { list-style: none; margin: 0; padding: 0; } .section li.movehere a { display: block; width: 100%; height: 2rem; border: 2px dashed #343a40; } .editing .course-content .hidden.sectionname { visibility: hidden; display: initial; } .inline, .inline-list li { display: inline; } .notifytiny { font-size: 0.703125rem; } .notifytiny li, .notifytiny td { font-size: 100%; } .red, .notifyproblem { color: #f0ad4e; } .green, .notifysuccess { color: #357a32; } .highlight { color: #008196; } .bg-primary-light { background-color: #f5f9fc; } .fitem.advanced .text-info { font-weight: bold; } .reportlink { text-align: right; } a.autolink.glossary:hover { cursor: help; } /* Block which is hidden if javascript enabled, prevents fickering visible when JS from footer used! */ .collapsibleregioncaption { white-space: nowrap; min-height: 1.40625rem; } .pagelayout-mydashboard.jsenabled .collapsibleregioncaption { cursor: pointer; } .pagelayout-mydashboard #region-main { border: 0; padding: 0; background-color: transparent; margin-top: -1px; } @media (max-width: 767.98px) { .pagelayout-mydashboard #region-main-box, .pagelayout-login #region-main-box { padding-left: 0; padding-right: 0; } } .collapsibleregioncaption img { vertical-align: middle; } .jsenabled .hiddenifjs { display: none; } .visibleifjs { display: none; } .jsenabled .visibleifjs { display: inline; } .jsenabled .collapsibleregion { overflow: hidden; box-sizing: content-box; } .jsenabled .collapsed .collapsibleregioninner { visibility: hidden; } .collapsible-actions { display: none; text-align: right; } .jsenabled .collapsible-actions { display: block; } .yui-overlay .yui-widget-bd { background-color: #ffee69; border: 1px solid #a6982b; border-top-color: #d4c237; color: #000; left: 0; padding: 2px 5px; position: relative; top: 0; z-index: 1; } .clearer { background: transparent; border-width: 0; clear: both; display: block; height: 1px; margin: 0; padding: 0; } .bold, .warning, .errorbox .title, .pagingbar .title, .pagingbar .thispage { font-weight: bold; } img.resize { height: 1em; width: 1em; } .block img.resize { height: 0.9em; width: 0.8em; } /* Icon styles */ img.activityicon { height: 24px; width: 24px; vertical-align: middle; } .headermain { font-weight: bold; } #maincontent { display: block; height: 1px; overflow: hidden; } img.uihint { cursor: help; } #addmembersform table { margin-left: auto; margin-right: auto; } table.flexible .emptyrow { display: none; } form.popupform, form.popupform div { display: inline; } .arrow_button input { overflow: hidden; } .no-overflow { overflow: auto; } .no-overflow > .generaltable { margin-bottom: 0; } .no-overflow .generaltable .sr-only, .no-overflow .generaltable .accesshide, .table-responsive .generaltable .sr-only, .table-responsive .generaltable .accesshide { position: relative; display: block; } .accesshide { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } span.hide, div.hide, .hidden { display: none; } a.skip-block, a.skip { position: absolute; top: -1000em; font-size: 0.85em; text-decoration: none; } a.skip-block:focus, a.skip-block:active, a.skip:focus, a.skip:active { position: static; display: block; } .skip-block-to { display: block; height: 1px; overflow: hidden; } .addbloglink { text-align: center; } .blog_entry .audience { text-align: right; padding-right: 4px; } .blog_entry .tags { margin-top: 15px; } .blog_entry .content { margin-left: 43px; } #doc-contents h1 { margin: 1em 0 0 0; } #doc-contents ul { margin: 0; padding: 0; width: 90%; } #doc-contents ul li { list-style-type: none; } .groupmanagementtable td { vertical-align: top; } .groupmanagementtable #existingcell, .groupmanagementtable #potentialcell { width: 42%; } .groupmanagementtable #buttonscell { width: 16%; } .groupmanagementtable #buttonscell p.arrow_button input { width: auto; min-width: 80%; margin: 0 auto; display: block; } .groupmanagementtable #removeselect_wrapper, .groupmanagementtable #addselect_wrapper { width: 100%; } .groupmanagementtable #removeselect_wrapper label, .groupmanagementtable #addselect_wrapper label { font-weight: normal; } #group-usersummary { width: 14em; } .groupselector { margin-top: 3px; margin-bottom: 3px; display: inline-block; } .groupselector label { display: inline-block; } .notepost { margin-bottom: 1em; } .notepost .userpicture { float: left; margin-right: 5px; } .notepost .content, .notepost .footer { clear: both; } .notesgroup { margin-left: 20px; } .path-my .coursebox { margin: 1rem 0; padding: 0; } .path-my .coursebox .overview { margin: 15px 30px 10px 30px; } .path-my .coursebox .info { float: none; margin: 0; } .mod_introbox { padding: 10px; } table.mod_index { width: 100%; } .comment-ctrl { font-size: 12px; display: none; margin: 0; padding: 0; } .comment-ctrl h5 { margin: 0; padding: 5px; } .comment-area { max-width: 400px; padding: 5px; } .comment-area textarea { width: 100%; overflow: auto; } .comment-area textarea.fullwidth { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .comment-area .fd { text-align: right; } .comment-meta span { color: gray; } .comment-link img { vertical-align: text-bottom; } .comment-list { font-size: 11px; overflow: auto; list-style: none; padding: 0; margin: 0; } .comment-list li { margin: 2px; list-style: none; margin-bottom: 5px; clear: both; padding: 0.3em; position: relative; } .comment-list li.first { display: none; } .comment-paging { text-align: center; } .comment-paging .pageno { padding: 2px; } .comment-paging .curpage { border: 1px solid #ccc; } .comment-message .picture { float: left; margin-right: 0.25rem; } .comment-message .text { margin: 0; padding: 0; } .comment-message .text p { padding: 0; margin: 0 18px 0 0; } .comment-delete { position: absolute; top: 0; right: 0; margin: 0.3em; } .comment-report-selectall { display: none; } .comment-link { display: none; } .jsenabled .comment-link { display: block; } .jsenabled .showcommentsnonjs { display: none; } .jsenabled .comment-report-selectall { display: inline; } /** * Completion progress report */ .completion-expired { color: #f0ad4e; } .completion-expected { font-size: 0.703125rem; } .completion-sortchoice, .completion-identifyfield { font-size: 0.703125rem; vertical-align: bottom; } .completion-progresscell { text-align: right; } .completion-expired .completion-expected { font-weight: bold; } /** * Tags */ img.user-image { height: 100px; width: 100px; } #tag-search-box { text-align: center; margin: 10px auto; } .path-tag .tag-index-items .tagarea { border: 1px solid #e3e3e3; border-radius: 4px; padding: 10px; margin-top: 10px; } .path-tag .tag-index-items .tagarea h3 { display: block; padding: 3px 0 10px 0; margin: 0; font-size: 1.1em; font-weight: bold; line-height: 20px; color: #999; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); text-transform: uppercase; word-wrap: break-word; border-bottom: solid 1px #e3e3e3; margin-bottom: 10px; } .path-tag .tagarea .controls::after, .path-tag .tagarea .taggeditems::after { display: block; clear: both; content: ""; } .path-tag .tagarea .controls, .path-tag .tag-backtoallitems { text-align: center; } .path-tag .tagarea .controls .gotopage.nextpage { float: right; } .path-tag .tagarea .controls .gotopage.prevpage { float: left; } .path-tag .tagarea .controls .exclusivemode { display: inline-block; } .path-tag .tagarea .controls.controls-bottom { margin-top: 5px; } .path-tag .tagarea .controls .gotopage.nextpage::after { padding-right: 5px; padding-left: 5px; content: "»"; } .path-tag .tagarea .controls .gotopage.prevpage::before { padding-right: 5px; padding-left: 5px; content: "«"; } span.flagged-tag, tr.flagged-tag, span.flagged-tag a, tr.flagged-tag a { color: #f0ad4e; } .tag-management-table td, .tag-management-table th { vertical-align: middle; padding: 4px; } .tag-management-table .inplaceeditable.inplaceeditingon input { width: 150px; } .path-admin-tag .addstandardtags { float: right; } .path-admin-tag .addstandardtags img { margin: 0 5px; } .path-tag .tag-relatedtags { padding-top: 10px; } .path-tag .tag-management-box { text-align: right; } .path-tag .tag-index-toc { padding: 10px; text-align: center; } .path-tag .tag-index-toc li, .path-tag .tag-management-box li { margin-left: 5px; margin-right: 5px; } .path-tag .tag-management-box li a.edittag { background-image: url([[pix:moodle|i/settings]]); } .path-tag .tag-management-box li a.flagasinappropriate { background-image: url([[pix:moodle|i/flagged]]); } .path-tag .tag-management-box li a.removefrommyinterests { background-image: url([[pix:moodle|t/delete]]); } .path-tag .tag-management-box li a.addtomyinterests { background-image: url([[pix:moodle|t/add]]); } .path-tag .tag-management-box li a { background-repeat: no-repeat; background-position: left; padding-left: 17px; } .tag_feed.media-list .media .itemimage { float: left; } .tag_feed.media-list .media .itemimage img { height: 35px; width: 35px; } .tag_feed.media-list .media .media-body { padding-right: 10px; padding-left: 10px; } .tag_feed .media .muted a { color: #6a737b; } .tag_cloud { text-align: center; } .tag_cloud .inline-list li { padding: 0 0.2em; } .tag_cloud .tag_overflow { margin-top: 1em; font-style: italic; } .tag_cloud .s20 { font-size: 2.7em; } .tag_cloud .s19 { font-size: 2.6em; } .tag_cloud .s18 { font-size: 2.5em; } .tag_cloud .s17 { font-size: 2.4em; } .tag_cloud .s16 { font-size: 2.3em; } .tag_cloud .s15 { font-size: 2.2em; } .tag_cloud .s14 { font-size: 2.1em; } .tag_cloud .s13 { font-size: 2em; } .tag_cloud .s12 { font-size: 1.9em; } .tag_cloud .s11 { font-size: 1.8em; } .tag_cloud .s10 { font-size: 1.7em; } .tag_cloud .s9 { font-size: 1.6em; } .tag_cloud .s8 { font-size: 1.5em; } .tag_cloud .s7 { font-size: 1.4em; } .tag_cloud .s6 { font-size: 1.3em; } .tag_cloud .s5 { font-size: 1.2em; } .tag_cloud .s4 { font-size: 1.1em; } .tag_cloud .s3 { font-size: 1em; } .tag_cloud .s2 { font-size: 0.9em; } .tag_cloud .s1 { font-size: 0.8em; } .tag_cloud .s0 { font-size: 0.7em; } .tag_list ul { display: inline; } .tag_list.hideoverlimit .overlimit { display: none; } .tag_list .tagmorelink { display: none; } .tag_list.hideoverlimit .tagmorelink { display: inline; } .tag_list.hideoverlimit .taglesslink { display: none; } /** * Web Service */ #webservice-doc-generator td { text-align: left; border: 0 solid #000; } /** * Enrol */ .userenrolment { width: 100%; border-collapse: collapse; } .userenrolment tr { vertical-align: top; } .userenrolment td { padding: 0; height: 41px; } .userenrolment .subfield { margin-right: 5px; } .userenrolment .col_userdetails .subfield { margin-left: 40px; } .userenrolment .col_userdetails .subfield_picture { float: left; margin-left: 0; } .userenrolment .col_lastseen { width: 150px; } .userenrolment .col_role { width: 262px; } .userenrolment .col_role .roles, .userenrolment .col_group .groups { margin-right: 30px; } .userenrolment .col_role .role { float: left; padding: 0 3px 3px; margin: 0 3px 3px; white-space: nowrap; } .userenrolment .col_group .group { float: left; padding: 3px; margin: 3px; white-space: nowrap; } .userenrolment .col_role .role a, .userenrolment .col_group .group a { margin-left: 3px; cursor: pointer; } .userenrolment .col_role .addrole, .userenrolment .col_group .addgroup { float: right; padding: 3px; margin: 3px; } .userenrolment .col_role .addrole > a:hover, .userenrolment .col_group .addgroup > a:hover { border-bottom: 1px solid #666; } .userenrolment .col_role .addrole img, .userenrolment .col_group .addgroup img { vertical-align: baseline; } .userenrolment .hasAllRoles .col_role .addrole { display: none; } .userenrolment .col_enrol .enrolment { float: left; padding: 0 3px 3px; margin: 0 3px 3px; } .userenrolment .col_enrol .enrolment a { float: right; margin-left: 3px; } #page-enrol-otherusers .userenrolment .col_role .role { float: none; margin: 3px 3px 3px 0; padding: 3px 3px 3px 0; } .corelightbox { background-color: #ccc; position: absolute; top: 0; left: 0; width: 100%; height: 100%; text-align: center; } .corelightbox img { position: fixed; top: 50%; left: 50%; } .mod-indent-outer { display: table; } .mod-indent { display: table-cell; } .label .mod-indent { float: left; padding-top: 20px; } .activity.label.modtype_label .mod-indent { float: none; } @media (min-width: 576px) { /* Creates a series of .mod-indent-# rule declarations based on indent size and number of indent levels. */ .mod-indent-1 { width: 30px; } .mod-indent-2 { width: 60px; } .mod-indent-3 { width: 90px; } .mod-indent-4 { width: 120px; } .mod-indent-5 { width: 150px; } .mod-indent-6 { width: 180px; } .mod-indent-7 { width: 210px; } .mod-indent-8 { width: 240px; } .mod-indent-9 { width: 270px; } .mod-indent-10 { width: 300px; } .mod-indent-11 { width: 330px; } .mod-indent-12 { width: 360px; } .mod-indent-13 { width: 390px; } .mod-indent-14 { width: 420px; } .mod-indent-15 { width: 450px; } .mod-indent-16 { width: 480px; } .mod-indent-huge { width: 480px; } } /* Audio player size in 'block' mode (can only change width, height is hardcoded in JS) */ .resourcecontent .mediaplugin_mp3 object { height: 25px; width: 600px; } .resourcecontent audio.mediaplugin_html5audio { width: 600px; } /** Large resource images should avoid hidden overflow **/ .resourceimage { max-width: 100%; } /* Audio player size in 'inline' mode (can only change width, as above) */ .mediaplugin_mp3 object { height: 15px; width: 300px; } audio.mediaplugin_html5audio { width: 300px; } .core_media_preview.pagelayout-embedded #maincontent { height: 0; } .path-rating .ratingtable { width: 100%; margin-bottom: 1em; } .path-rating .ratingtable th.rating { width: 100%; } .path-rating .ratingtable td.rating, .path-rating .ratingtable td.time { white-space: nowrap; text-align: center; } /* Moodle Dialogue Settings (moodle-core-dialogue) */ .moodle-dialogue-base .moodle-dialogue-lightbox { background-color: #495057; } .pagelayout-popup .moodle-dialogue-base .moodle-dialogue-lightbox { background-color: transparent; } .pagelayout-popup .moodle-dialogue-base .moodle-dialogue { box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2); } .moodle-dialogue-base .hidden, .moodle-dialogue-base .moodle-dialogue-hidden { display: none; } .no-scrolling { overflow: hidden; } .moodle-dialogue-base .moodle-dialogue-fullscreen { left: 0; top: 0; right: 0; bottom: -50px; position: fixed; } .moodle-dialogue-base .moodle-dialogue-fullscreen .moodle-dialogue-content { overflow: auto; } .moodle-dialogue-base .moodle-dialogue-wrap { background-color: #fff; border: 1px solid #ccc; } .modal.show { display: block; } .moodle-dialogue-base .moodle-dialogue-wrap .moodle-dialogue-hd { display: flex; padding: 1rem 1rem; border-bottom: 1px solid #dee2e6; } .moodle-dialogue-base .moodle-dialogue-wrap .moodle-dialogue-hd.yui3-widget-hd { min-height: 3rem; color: initial; background: initial; font-size: 1.5rem; line-height: 1.5; } .moodle-dialogue-base .moodle-dialogue-wrap .moodle-dialogue-hd h5 { font-size: 1.5rem; font-weight: 400; margin-bottom: 0; line-height: 1.5; } .moodle-dialogue-base .moodle-dialogue-wrap .moodle-dialogue-hd .yui3-widget-buttons { /*rtl:raw: left: 0; right: auto; */ padding: 0; position: relative; margin-left: auto; } .moodle-dialogue-base .closebutton { padding: 1rem 1rem; margin: -1rem -1rem -1rem auto; position: relative; background-color: transparent; border: 0; background-image: none; box-shadow: none; opacity: 0.7; } .moodle-dialogue-base .closebutton:hover, .moodle-dialogue-base .closebutton:active { opacity: 1; } .moodle-dialogue-base .closebutton::after { content: "×"; } .moodle-dialogue-base .moodle-dialogue .moodle-dialogue-bd { padding: 0.5rem; } .moodle-dialogue-base .moodle-dialogue .moodle-dialogue-bd body { background-color: #fff; } .moodle-dialogue-base .moodle-dialogue-fullscreen .moodle-dialogue-content { overflow: auto; position: absolute; top: 0; bottom: 50px; left: 0; right: 0; margin: 0; border: 0; } .moodle-dialogue-exception .moodle-exception-param label { font-weight: bold; } .moodle-dialogue-exception .param-stacktrace label { background-color: #eee; border: 1px solid #ccc; border-bottom-width: 0; } .moodle-dialogue-exception .param-stacktrace pre { border: 1px solid #ccc; background-color: #fff; } .moodle-dialogue-exception .param-stacktrace .stacktrace-file { color: navy; font-size: 0.8203125rem; } .moodle-dialogue-exception .param-stacktrace .stacktrace-line { color: #f0ad4e; font-size: 0.8203125rem; } .moodle-dialogue-exception .param-stacktrace .stacktrace-call { color: #333; font-size: 90%; border-bottom: 1px solid #eee; } .moodle-dialogue-base .moodle-dialogue .moodle-dialogue-content .moodle-dialogue-ft:empty { display: none; } .moodle-dialogue-base .moodle-dialogue .moodle-dialogue-content .moodle-dialogue-ft.yui3-widget-ft { background: initial; } .moodle-dialogue-confirm .confirmation-message { margin: 0.5rem 0; } .moodle-dialogue-confirm .confirmation-dialogue input { min-width: 80px; } .moodle-dialogue-exception .moodle-exception-message { margin: 1em; } .moodle-dialogue-exception .moodle-exception-param { margin-bottom: 0.5em; } .moodle-dialogue-exception .moodle-exception-param label { width: 150px; } .moodle-dialogue-exception .param-stacktrace label { display: block; margin: 0; padding: 4px 1em; } .moodle-dialogue-exception .param-stacktrace pre { display: block; height: 200px; overflow: auto; } .moodle-dialogue-exception .param-stacktrace .stacktrace-file { display: inline-block; margin: 4px 0; } .moodle-dialogue-exception .param-stacktrace .stacktrace-line { display: inline-block; width: 50px; margin: 4px 1em; } .moodle-dialogue-exception .param-stacktrace .stacktrace-call { padding-left: 25px; margin-bottom: 4px; padding-bottom: 4px; } .moodle-dialogue .moodle-dialogue-bd .content-lightbox { opacity: 0.75; width: 100%; height: 100%; top: 0; left: 0; background-color: #fff; text-align: center; padding: 10% 0; } /* Apply a default max-height on tooltip text */ .moodle-dialogue .tooltiptext { max-height: 300px; } .moodle-dialogue-base .moodle-dialogue.moodle-dialogue-tooltip { z-index: 3001; } .moodle-dialogue-base .moodle-dialogue.moodle-dialogue-tooltip .moodle-dialogue-bd { overflow: auto; } /** * Chooser Dialogues (moodle-core-chooserdialogue) * * This CSS belong to the chooser dialogue which should work both with, and * without javascript enabled */ /* Hide the dialog and it's title */ .chooserdialoguebody, .choosertitle { display: none; } .moodle-dialogue.chooserdialogue .moodle-dialogue-content .moodle-dialogue-ft { margin: 0; } .chooserdialogue .moodle-dialogue-wrap .moodle-dialogue-bd { padding: 0; background: #f2f2f2; border-bottom-right-radius: 10px; border-bottom-left-radius: 10px; } /* Center the submit buttons within the area */ .choosercontainer #chooseform .submitbuttons { padding: 0.7em 0; text-align: right; } /* Fixed for safari browser on iPhone4S with ios7@mixin */ @media (max-height: 639px) { .ios .choosercontainer #chooseform .submitbuttons { padding: 45px 0; } } .choosercontainer #chooseform .submitbuttons input { min-width: 100px; margin: 0 0.5em; } /* Various settings for the options area */ .choosercontainer #chooseform .options { position: relative; border-bottom: 1px solid #bbb; } /* Only set these options if we're showing the js container */ .jschooser .choosercontainer #chooseform .alloptions { overflow-x: hidden; overflow-y: auto; max-width: 240px; } .jschooser .choosercontainer #chooseform .alloptions .option input[type=radio] { display: inline-block; } .jschooser .choosercontainer #chooseform .alloptions .option .typename { display: inline-block; width: 55%; } /* Settings for option rows and option subtypes */ .choosercontainer #chooseform .moduletypetitle, .choosercontainer #chooseform .option, .choosercontainer #chooseform .nonoption { margin-bottom: 0; padding: 0 1.6em 0 1.6em; } .choosercontainer #chooseform .moduletypetitle { text-transform: uppercase; padding-top: 1.2em; padding-bottom: 0.4em; margin-bottom: 0.5rem; font-size: 100%; } .choosercontainer #chooseform .option .typename, .choosercontainer #chooseform .nonoption .typename { padding: 0 0 0 0.5em; } .choosercontainer #chooseform .modicon + .typename { padding-left: 0; } .choosercontainer #chooseform .option input[type=radio], .choosercontainer #chooseform .option span.typename { vertical-align: middle; } .choosercontainer #chooseform .option label { display: block; margin: 0; padding: 0.5rem 0; border-bottom: 1px solid #fff; } .choosercontainer #chooseform .option .icon { margin: 0; padding: 0 1rem; } .choosercontainer #chooseform .nonoption { padding-left: 2.7em; padding-top: 0.3em; padding-bottom: 0.1em; } .choosercontainer #chooseform .subtype { margin-bottom: 0; padding: 0 1.6em 0 3.2em; } .choosercontainer #chooseform .subtype .typename { margin: 0 0 0 0.2em; } /* The instruction/help area */ .jschooser .choosercontainer #chooseform .instruction, .jschooser .choosercontainer #chooseform .typesummary { display: none; position: absolute; top: 0; right: 0; bottom: 0; left: 240px; margin: 0; padding: 1.6em; background-color: #fff; overflow-x: hidden; overflow-y: auto; line-height: 2em; } /* Selected option settings */ .jschooser .choosercontainer #chooseform .instruction, .choosercontainer #chooseform .selected .typesummary { display: block; } .choosercontainer #chooseform .selected { background-color: #fff; margin-top: -1px; padding-top: 1px; } @media (max-width: 575.98px) { .jsenabled .choosercontainer #chooseform .alloptions { max-width: 100%; } .jsenabled .choosercontainer #chooseform .instruction, .jsenabled .choosercontainer #chooseform .typesummary { position: static; } } /** * Module chooser dialogue (moodle-core-chooserdialogue) * * This CSS belong to the chooser dialogue which should work both with, and * without javascript enabled */ .modchooser .modal-body { padding: 0; overflow-y: auto; min-height: 640px; display: flex; flex-direction: column; } .modchooser .modal-body .searchresultitemscontainer-wrapper { min-height: 495px; } .modchooser .modal-body .carousel-item.active { display: flex; } .modchooser .modal-body .chooser-container { display: flex; flex-direction: column; flex: 1 1 auto; } .modchooser .modal-body .loading-icon { opacity: 1; } .modchooser .modal-body .loading-icon .icon { display: block; font-size: 3em; height: 1em; width: 1em; } .modchooser .modal-body .carousel-item .loading-icon .icon { margin: 1em auto; } .modchooser .modal-body .searchbar { width: 100%; } .modchooser .modal-footer { height: 70px; background: #fff; } .modchooser .modal-footer .moodlenet-logo .icon { height: 2.5rem; width: 6rem; margin-bottom: 0.6rem; } .modchoosercontainer.noscroll { overflow-y: hidden; } .modchoosercontainer .optionscontainer, .modchoosercontainer .searchresultitemscontainer { overflow-x: hidden; } .modchoosercontainer .optionscontainer .option, .modchoosercontainer .searchresultitemscontainer .option { flex-basis: calc(50% - 0.5rem); } .modchoosercontainer .optionscontainer .option .optionactions .optionaction, .modchoosercontainer .searchresultitemscontainer .option .optionactions .optionaction { cursor: pointer; color: #6a737b; } .modchoosercontainer .optionscontainer .option .optionactions .optionaction i, .modchoosercontainer .searchresultitemscontainer .option .optionactions .optionaction i { margin: 0; } .modchoosercontainer .optionscontainer .option .optioninfo a, .modchoosercontainer .searchresultitemscontainer .option .optioninfo a { color: #495057; } .modchoosercontainer .optionscontainer .option .optioninfo a:hover, .modchoosercontainer .searchresultitemscontainer .option .optioninfo a:hover { text-decoration: none; } .modchooser .modal-body .optionsummary { background-color: #fff; overflow-x: hidden; overflow-y: auto; height: 640px; } .modchooser .modal-body .optionsummary .content { overflow-y: auto; } .modchooser .modal-body .optionsummary .content .heading .icon { height: 32px; width: 32px; font-size: 32px; padding: 0; } .modchooser .modal-body .optionsummary .actions { border-top: 1px solid #dee2e6; background: #fff; } @media (max-width: 575.98px) { .path-course-view .modal-dialog.modal-lg, .path-course-view .modal-content, .modchooser .modal-body, .modchooser .modal-body .carousel, .modchooser .modal-body .carousel-inner, .modchooser .modal-body .carousel-item, .modchooser .modal-body .optionsummary, .modchoosercontainer, .optionscontainer, .searchresultitemscontainer { min-height: auto; height: 100%; overflow-y: auto; } .path-course-view .modal-dialog.modal-lg { margin: 0; } .modchooser .modal-body .searchresultitemscontainer-wrapper { min-height: auto; } } @media (min-width: 576px) { .modchoosercontainer .optionscontainer .option, .modchoosercontainer .searchresultitemscontainer .option { flex-basis: calc(33.33% - 0.5rem); } } @media (min-width: 992px) { .modchoosercontainer .optionscontainer .option, .modchoosercontainer .searchresultitemscontainer .option { flex-basis: calc(16.66% - 0.5rem); } } /* Form element: listing */ .formlistingradio { padding-bottom: 25px; padding-right: 10px; } .formlistinginputradio { float: left; } .formlistingmain { min-height: 225px; } .formlisting { position: relative; margin: 15px 0; padding: 1px 19px 14px; background-color: #fff; border: 1px solid #ddd; border-radius: 4px; } .formlistingmore { position: absolute; cursor: pointer; bottom: -1px; right: -1px; padding: 3px 7px; font-size: 12px; font-weight: bold; background-color: whitesmoke; border: 1px solid #ddd; color: #9da0a4; border-radius: 4px 0 4px 0; } .formlistingall { margin: 15px 0; padding: 0; border-radius: 4px; } .formlistingrow { cursor: pointer; border-bottom: 1px solid; border-color: #e1e1e8; border-left: 1px solid #e1e1e8; border-right: 1px solid #e1e1e8; background-color: #f7f7f9; border-radius: 0 0 4px 4px; padding: 6px; top: 50%; left: 50%; min-height: 34px; float: left; width: 150px; } body.jsenabled .formlistingradio { display: none; } body.jsenabled .formlisting { display: block; } a.criteria-action { padding: 0 3px; float: right; } div.criteria-description { padding: 10px 15px; margin: 5px 0; background: none repeat scroll 0 0 #f9f9f9; border: 1px solid #eee; } ul.badges { margin: 0; list-style: none; } .badges li { position: relative; display: inline-block; padding-top: 1em; text-align: center; vertical-align: top; width: 150px; } .badges li .badge-name { display: block; padding: 5px; } .badges li > img { position: absolute; } .badges li .badge-image { width: 100px; height: 100px; left: 10px; top: 0; z-index: 1; } .badges li .badge-actions { position: relative; } .badges li .expireimage { background-image: url([[pix:i/expired]]); background-repeat: no-repeat; background-size: 100px 100px; width: 100px; height: 100px; left: 25px; top: 15px; position: absolute; z-index: 10; opacity: 0.85; } #badge-image { background-color: transparent; padding: 0; position: relative; min-width: 100px; width: 20%; display: inline-block; vertical-align: top; margin-top: 17px; margin-bottom: 20px; } #badge-image .expireimage { background-image: url([[pix:i/expired]]); background-repeat: no-repeat; background-size: 100px 100px; width: 100px; height: 100px; left: 0; top: 0; opacity: 0.85; position: absolute; z-index: 10; } #badge-image .singlebutton { padding-top: 5px; display: block; } #badge-image .singlebutton button { margin-left: 4px; } #badge-details { display: inline-block; width: 79%; } #badge-overview dl, #badge-details dl { margin: 0; } #badge-overview dl dt, #badge-overview dl dd, #badge-details dl dt, #badge-details dl dd { vertical-align: top; padding: 3px 0; } #badge-overview dl dt, #badge-details dl dt { clear: both; display: inline-block; width: 20%; min-width: 100px; } #badge-overview dl dd, #badge-details dl dd { display: inline-block; width: 79%; margin-left: 1%; } #badge-criteria li li { list-style-type: none; } #badge-image-col { flex: 0 0 400px; } .badge-profile { vertical-align: top; } .connected { color: #357a32; } .notconnected { color: #ca3120; } .connecting { color: #f0ad4e; } #page-badges-award .recipienttable tr td { vertical-align: top; } #page-badges-award .recipienttable tr td.actions .actionbutton { margin: 0.3em 0; padding: 0.5em 0; width: 100%; } #page-badges-award .recipienttable tr td.existing, #page-badges-award .recipienttable tr td.potential { width: 42%; } #issued-badge-table .activatebadge { display: inline-block; } .statusbox.active { background-color: #d7e4d6; } .statusbox.inactive { background-color: #fcefdc; } .statusbox { text-align: center; margin-bottom: 5px; padding: 5px; } .statusbox .activatebadge { display: inline-block; } .statusbox .activatebadge input[type=submit] { margin: 3px; } .activatebadge { margin: 0; text-align: left; vertical-align: middle; } img#persona_signin { cursor: pointer; } .addcourse { float: right; } .invisiblefieldset { display: inline; padding: 0; border-width: 0; } /** Page header */ #page-header h1.h2 { font-weight: bold; } #page-header .logo { margin: 1rem 0; } #page-header .logo img { max-height: 75px; } /** Navbar logo. */ nav.navbar .logo img { max-height: 35px; } .nav.usernav .nav-item { display: flex; } .nav.usernav .usermenu .dropdown-toggle { padding: 0 0.5rem; } /** Header-bar styles **/ .page-context-header { overflow: hidden; padding: 0.25rem 0; display: flex; } .page-context-header .page-header-image > a { display: inline-block; } .page-context-header .page-header-headings, .page-context-header .header-button-group { position: relative; line-height: 24px; vertical-align: middle; } .page-context-header .header-button-group { display: block; float: left; } ul.dragdrop-keyboard-drag li { list-style-type: none; } a.disabled:hover, a.disabled { text-decoration: none; cursor: default; font-style: italic; color: #6a737b; } body.lockscroll { height: 100%; overflow: hidden; } .progressbar_container { max-width: 500px; margin: 0 auto; } /* IE10 only fix for calendar titling */ .ie10 .yui3-calendar-header-label { display: inline-block; } dd:before, dd:after { display: block; content: " "; } dd:after { clear: both; } .nav-tabs > .active > a[href], .nav-tabs > .active > a[href]:hover, .nav-tabs > .active > a[href]:focus { cursor: pointer; } .inplaceeditable.inplaceeditingon { position: relative; } .inplaceeditable.inplaceeditingon .editinstructions { margin-top: -30px; font-weight: normal; margin-right: 0; margin-left: 0; left: 0; right: auto; white-space: nowrap; } @media (min-width: 576px) { .inplaceeditable.inplaceeditingon input { width: 330px; vertical-align: text-bottom; margin-bottom: 0; } .inplaceeditable.inplaceeditingon input[role=combobox] { width: auto; } } .inplaceeditable.inplaceeditingon select { margin-bottom: 0; } .inplaceeditable .quickediticon img { opacity: 0.2; } .inplaceeditable .quickeditlink { color: inherit; text-decoration: inherit; } .inplaceeditable:hover .quickeditlink .quickediticon img, .inplaceeditable .quickeditlink:focus .quickediticon img { opacity: 1; } .inplaceeditable.inplaceeditable-toggle .quickediticon { display: none; } .inplaceeditable.inplaceeditable-autocomplete { display: block; } h3.sectionname .inplaceeditable.inplaceeditingon .editinstructions { margin-top: -20px; } /** Chart area. */ @media (min-width: 992px) { .chart-area .chart-image { position: relative; margin: auto; height: 48vh; width: 46vw; } } .chart-area .chart-table-data { display: none; } .chart-area .chart-table { /** When accessible, we display the table only. */ } .chart-area .chart-table .chart-output-htmltable caption { white-space: nowrap; } .chart-area .chart-table.accesshide .chart-table-expand { display: none; } .chart-area .chart-table.accesshide .chart-table-data { display: block; } /* YUI 2 Tree View */ /*rtl:raw: .ygtvtn, .ygtvtm, .ygtvtmh, .ygtvtmhh, .ygtvtp, .ygtvtph, .ygtvtphh, .ygtvln, .ygtvlm, .ygtvlmh, .ygtvlmhh, .ygtvlp, .ygtvlph, .ygtvlphh, .ygtvdepthcell, .ygtvok, .ygtvok:hover, .ygtvcancel, .ygtvcancel:hover { background-image: url([[pix:theme|yui2-treeview-sprite-rtl]]); } */ .hover-tooltip-container { position: relative; } .hover-tooltip-container .hover-tooltip { opacity: 0; visibility: hidden; position: absolute; /*rtl:ignore*/ left: 50%; top: calc(-50% - 5px); transform: translate(-50%, -50%); background-color: #fff; border: 1px solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; box-sizing: border-box; padding: 5px; white-space: nowrap; transition: opacity 0.15s, visibility 0.15s; z-index: 1000; } .hover-tooltip-container .hover-tooltip:before { content: ""; display: inline-block; border-left: 8px solid transparent; border-right: 8px solid transparent; border-top: 8px solid rgba(0, 0, 0, 0.2); position: absolute; bottom: -8px; left: calc(50% - 8px); } .hover-tooltip-container .hover-tooltip:after { content: ""; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-top: 7px solid #fff; position: absolute; bottom: -6px; left: calc(50% - 7px); z-index: 2; } .hover-tooltip-container:hover .hover-tooltip { opacity: 1; visibility: visible; transition: opacity 0.15s 0.5s, visibility 0.15s 0.5s; } #region-flat-nav { padding-right: 0; padding-left: 0; } #region-flat-nav .nav { margin-right: 15px; background-color: #fff; } @media (max-width: 767.98px) { #region-flat-nav .nav { margin-top: 30px; margin-right: 0; } } .footer-dark a { color: #fff; text-decoration: underline; } .footer-dark a .icon { color: #fff; } .footer-dark a:focus .icon { color: #1d2125; } .btn-footer-popover { display: none; position: fixed; bottom: 2rem; right: 2rem; } .btn-footer-communication { display: none; position: fixed; bottom: 5rem; right: 2rem; } .hasstickyfooter .btn-footer-popover { bottom: calc(1rem + max(96px, 0.9375rem * 3)); } .hasstickyfooter .btn-footer-communication { bottom: calc(4rem + max(96px, 0.9375rem * 3)); } .popover.footer .popover-body { padding: 0; } .popover.footer .popover-body .footer-section a { color: #1d2125; text-decoration: underline; } .popover.footer .popover-body .footer-section a .icon { color: #1d2125; } .popover.footer .popover-body .footer-section a:focus { text-decoration: none; } .footer-support-link { padding-bottom: 5px; } @media (min-width: 576px) { .jsenabled #page-footer .footer-content-popover { display: none; } .jsenabled .btn-footer-popover, .jsenabled .btn-footer-communication { display: block; z-index: 1000; } } .bg-inverse a { color: #fff; text-decoration: underline; } .bg-inverse a .icon { color: #fff; } .sitelink img { width: 112px; } .competency-tree ul { padding-left: 1.5rem; } .sr-only-focusable:active, .sr-only-focusable:focus { z-index: 1031; position: fixed; background: #fff; padding: 7px; left: 0; top: 0; } [data-drag-type=move] { cursor: move; touch-action: none; } .clickable { cursor: pointer; } .overlay-icon-container { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.6); } .overlay-icon-container .loading-icon { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } .overlay-icon-container .loading-icon .icon { height: 30px; width: 30px; font-size: 30px; } .w-auto { width: auto; } .bg-pulse-grey { animation: bg-pulse-grey 2s infinite linear; } @keyframes bg-pulse-grey { 0% { background-color: #f8f9fa; } 50% { background-color: #e9ecef; } 100% { background-color: #f8f9fa; } } .line-height-0 { line-height: 0 !important; /* stylelint-disable-line declaration-no-important */ } .line-height-1 { line-height: 0.25rem !important; /* stylelint-disable-line declaration-no-important */ } .line-height-2 { line-height: 0.5rem !important; /* stylelint-disable-line declaration-no-important */ } .line-height-3 { line-height: 1rem !important; /* stylelint-disable-line declaration-no-important */ } .line-height-4 { line-height: 1.5rem !important; /* stylelint-disable-line declaration-no-important */ } .line-height-5 { line-height: 2rem !important; /* stylelint-disable-line declaration-no-important */ } .line-height-6 { line-height: 3rem !important; /* stylelint-disable-line declaration-no-important */ } .dir-rtl .dir-rtl-hide { display: none; } .dir-ltr .dir-ltr-hide { display: none; } .paged-content-page-container { min-height: 3.125rem; } body.h5p-embed #page-content { display: inherit; } body.h5p-embed #maincontent { display: none; } body.h5p-embed .h5pmessages { min-height: 230px; } #h5pcontenttypes td { vertical-align: middle; } #page.drawers form#h5peditor, #page.drawers form#coolh5peditor, #page.drawers .core_contentbank_viewcontent { max-width: 960px; margin: 0 auto; } .text-decoration-none { text-decoration: none !important; /* stylelint-disable-line declaration-no-important */ } .colour-inherit { color: inherit !important; /* stylelint-disable-line declaration-no-important */ } .position-right { right: 0 !important; /* stylelint-disable-line declaration-no-important */ } .overflow-hidden { overflow: hidden !important; /* stylelint-disable-line declaration-no-important */ } .text-break { overflow-wrap: break-word !important; /* stylelint-disable-line declaration-no-important */ } .word-break { word-break: break-word !important; /* stylelint-disable-line declaration-no-important */ } .z-index-0 { z-index: 0 !important; /* stylelint-disable-line declaration-no-important */ } .z-index-1 { z-index: 1 !important; /* stylelint-disable-line declaration-no-important */ } .float-left { float: left !important; /* stylelint-disable-line declaration-no-important */ } .float-right { float: right !important; /* stylelint-disable-line declaration-no-important */ } .img-responsive { max-width: 100%; height: auto; } input[disabled] { cursor: not-allowed; } .custom-select { width: auto; max-width: 100%; } .fade.in { opacity: 1; } .clamp-2 { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; } .word-break-all { word-break: break-all; } .matchtext { background-color: #a2cff8; color: #1d2125; height: 1.5rem; } .border-radius { border-radius: 0.5rem; } .v-hidden { visibility: hidden; } .dialog-big { max-width: 500px; } .dialog-small { max-width: 300px; } @media (min-width: 576px) { .dialog-big { width: 500px; } .dialog-small { width: 300px; } } /* * Helpers to show elements only when a parent element has focus or hover. */ .v-parent-focus { opacity: 0; visibility: hidden; } .focus-control:focus-within .v-parent-focus, .focus-control:hover .v-parent-focus { opacity: 1; visibility: visible; } .emoji-picker { width: 350px; height: 400px; } .emoji-picker .category-button { padding: 0.375rem 0; height: 100%; width: 38.8888888889px; border-top: none; border-left: none; border-right: none; border-bottom: 2px solid transparent; } .emoji-picker .category-button.selected { border-bottom: 2px solid #0f6cbf; } .emoji-picker .emojis-container, .emoji-picker .search-results-container { min-width: 280px; } .emoji-picker .picker-row { height: 40px; } .emoji-picker .picker-row .category-name { line-height: 40px; } .emoji-picker .picker-row .emoji-button { height: 40px; width: 40px; line-height: 40px; font-size: 24px; overflow: hidden; } .emoji-picker .picker-row .emoji-button:hover, .emoji-picker .picker-row .emoji-button:focus { color: inherit; text-decoration: none; } .emoji-picker .emoji-preview { height: 40px; font-size: 40px; line-height: 40px; } .emoji-picker .emoji-short-name { line-height: 20px; } @media (max-width: 575.98px) { .emoji-picker { width: 320px; } } .emoji-auto-complete { height: 40px; } .emoji-auto-complete .btn.btn-link.btn-icon.emoji-button { height: 40px; width: 40px; line-height: 40px; font-size: 24px; } .emoji-auto-complete .btn.btn-link.btn-icon.emoji-button.active { background-color: #e9ecef; } .toast-wrapper { max-width: 350px; max-height: 0; z-index: 1051; } .toast-wrapper > :first-child { margin-top: 1rem; } .alert-primary a { color: #041d34; } .alert-primary .close { color: #000305; opacity: 0.6; } .alert-secondary a { color: #525557; } .alert-secondary .close { color: #393b3d; opacity: 0.6; } .alert-success a, .environmenttable .ok a { color: #0c1b0b; } .alert-success .close, .environmenttable .ok .close { color: black; opacity: 0.6; } .alert-info a { color: #00171b; } .alert-info .close { color: black; opacity: 0.6; } .alert-warning a, .environmenttable .warn a { color: #573e1c; } .alert-warning .close, .environmenttable .warn .close { color: #302310; opacity: 0.6; } .alert-danger a, .environmenttable .error a { color: #3d0f0a; } .alert-danger .close, .environmenttable .error .close { color: #110403; opacity: 0.6; } .alert-light a { color: #686868; } .alert-light .close { color: #4e4e4f; opacity: 0.6; } .alert-dark a { color: #040505; } .alert-dark .close { color: black; opacity: 0.6; } .alert a { font-weight: 700; } .breadcrumb:empty { padding: 0; } @media (max-width: 767.98px) { #page-navbar { width: 100%; } .breadcrumb:not(:empty) { width: 100%; flex-wrap: nowrap; margin-bottom: 0.5rem; } .breadcrumb:not(:empty) .breadcrumb-item { padding-top: 0.33333rem; padding-bottom: 0.33333rem; display: inline-flex; overflow: hidden; } .breadcrumb:not(:empty) .breadcrumb-item a, .breadcrumb:not(:empty) .breadcrumb-item span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .mform { width: 100%; padding-right: 15px; padding-left: 15px; } .pagination { flex-wrap: wrap; justify-content: center; } .custom-select { max-width: 100%; } .card .card-body { padding: 0.625rem; } #page-header .card { border: 0; } #page-header .card .card-body { padding: 0; } .nav-tabs:not(.more-nav), .nav-pills { margin: 0; border: 0; padding: 0.125rem; background-color: #e9ecef; } .nav-tabs:not(.more-nav) .nav-item, .nav-pills .nav-item { flex: 1 1 auto; text-align: center; } .nav-tabs:not(.more-nav) .nav-link, .nav-pills .nav-link { background: #fff; border: 0; margin: 0.125rem; } .nav-tabs:not(.more-nav) .nav-link.active, .nav-pills .nav-link.active { color: #6a737b; border-color: #6a737b; border-color: #6a737b; } .nav-tabs:not(.more-nav) .nav-link.active:hover, .nav-pills .nav-link.active:hover { color: #fff; background-color: #6a737b; border-color: #6a737b; } .nav-tabs:not(.more-nav) .nav-link.active:focus, .nav-tabs:not(.more-nav) .nav-link.active.focus, .nav-pills .nav-link.active:focus, .nav-pills .nav-link.active.focus { box-shadow: 0 0 0 0.2rem rgba(106, 115, 123, 0.5); } .nav-tabs:not(.more-nav) .nav-link.active.disabled, .nav-tabs:not(.more-nav) .nav-link.active:disabled, .nav-pills .nav-link.active.disabled, .nav-pills .nav-link.active:disabled { color: #6a737b; background-color: transparent; } .nav-tabs:not(.more-nav) .nav-link.active:not(:disabled):not(.disabled):active, .nav-tabs:not(.more-nav) .nav-link.active:not(:disabled):not(.disabled).active, .show > .nav-tabs:not(.more-nav) .nav-link.active.dropdown-toggle, .nav-pills .nav-link.active:not(:disabled):not(.disabled):active, .nav-pills .nav-link.active:not(:disabled):not(.disabled).active, .show > .nav-pills .nav-link.active.dropdown-toggle { color: #fff; background-color: #6a737b; border-color: #6a737b; } .nav-tabs:not(.more-nav) .nav-link.active:not(:disabled):not(.disabled):active:focus, .nav-tabs:not(.more-nav) .nav-link.active:not(:disabled):not(.disabled).active:focus, .show > .nav-tabs:not(.more-nav) .nav-link.active.dropdown-toggle:focus, .nav-pills .nav-link.active:not(:disabled):not(.disabled):active:focus, .nav-pills .nav-link.active:not(:disabled):not(.disabled).active:focus, .show > .nav-pills .nav-link.active.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(106, 115, 123, 0.5); } } @media (max-width: 576px) and (max-height: 320px) { div#page { margin-top: 0; } .navbar.fixed-top { position: relative; z-index: inherit; } } .link-underline { text-decoration: underline; } .link-underline:focus { text-decoration: none; } .alert.cta .cta-icon .icon { padding: 0.3rem; } .alert.cta .cta-icon .icon.fa { border-radius: 50%; border-style: solid; border-width: 0.125rem; } .core_payment_gateways_modal .custom-control-label::before, .core_payment_gateways_modal .custom-control-label::after { top: 45%; } .visual-scroll-x { scrollbar-width: thin; scrollbar-color: #0f6cbf #a2cff8; -ms-overflow-style: -ms-autohiding-scrollbar; } .visual-scroll-x::-webkit-scrollbar { height: 8px; -webkit-appearance: none; appearance: none; } .visual-scroll-x::-webkit-scrollbar-thumb { background-color: #0f6cbf; border-right: 1px solid #fff; } .visual-scroll-x::-webkit-scrollbar-track { background-color: #a2cff8; border-right: 1px solid #fff; } body.dragging .drop-zone { border: 1px dashed #1d2125; } body.dragging .drop-up { border-top: 1px solid #1d2125; border-top-left-radius: 0; border-top-right-radius: 0; } body.dragging .drop-down { border-bottom: 1px solid #1d2125; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } body.dragging .dragging { opacity: 0.6; } .dragicon { visibility: hidden; } .draggable:hover .dragicon { visibility: visible; cursor: move; } .overlay-preview { background-color: rgba(255, 255, 255, 0.8); border: 2px dashed #0f6cbf; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .overlay-preview .overlay-preview-wrapper { position: absolute; top: 0; padding: 2rem; width: 100%; } .overlay-preview .overlay-preview-content { position: relative; top: 0; padding: 1rem; margin: 0 auto; width: 100%; max-width: 600px; background-color: #0f6cbf; color: #fff; text-align: center; font-size: 1.171875rem; border-radius: 0.5rem; } .overlay-preview-borders { outline: 2px dashed #0f6cbf; } .waitstate { display: none; } .stateready .waitstate { display: inherit; } .stateready .whilenostate { display: none; } .collapse-list .collapse-list-item { padding: 0.5rem 1rem; } .collapse-list .collapse-list-item:hover, .collapse-list .collapse-list-item:focus { background-color: #e0f0f2; border-color: #b8dce2; } .collapse-list .collapse-list-item-content .collapse-list-item { padding-left: calc(1rem * 3); } .drawers .block_myoverview { border: 0; } .drawers .block_myoverview > .card-body { padding-top: 0 !important; /* stylelint-disable-line declaration-no-important */ padding-left: 0 !important; /* stylelint-disable-line declaration-no-important */ padding-right: 0 !important; /* stylelint-disable-line declaration-no-important */ } .dropdown-toggle::after { content: "\f078"; margin-right: 0; margin-left: 4px; font-size: 9px; width: 9px; border: 0; } .dropleft .dropdown-toggle::before { border: 0; content: "\f053"; font-size: 9px; margin-left: 0; margin-right: 4px; width: 9px; } .dir-rtl .dropleft .dropdown-toggle::before { content: "\f054"; } .dropright .dropdown-toggle::after { border: 0; content: "\f054"; } .dir-rtl .dropright .dropdown-toggle::after { content: "\f053"; } .dropup .dropdown-toggle::after { border: 0; content: "\f077"; } .select-menu li:first-child ul[role=group] { padding: 0; } .select-menu ul[role=group] { padding: 0.3rem 0 0 0; margin: 0; } .select-menu ul[role=group] li:first-child { cursor: default; color: #6a737b; padding: 0.25rem 1.5rem; display: block; } .select-menu ul[role=group] .dropdown-item { padding-left: 2.5rem; } .select-menu .dropdown-item[aria-selected=true] { font-weight: bold; } [role=listbox] [role=option] { cursor: pointer; } [role=listbox] [role=option][aria-selected=true] { font-weight: bold; } .initialbargroups ul { -webkit-margin-start: 0; /* stylelint-disable-line */ margin-right: -1px; } .initialbargroups .page-item:first-child .page-link { border-top-left-radius: 0; border-bottom-left-radius: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; } .initialbargroups .pagination-lg:first-child .page-item:first-child .page-link { border-top-left-radius: 0.6rem; border-bottom-left-radius: 0.6rem; } .initialbargroups .pagination-sm:first-child .page-item:first-child .page-link { border-top-left-radius: 0.2rem; border-bottom-left-radius: 0.2rem; } .initialbargroups .page-item:last-child .page-link { border-top-left-radius: 0; border-bottom-left-radius: 0; border-top-right-radius: 0; border-bottom-right-radius: 0; } .initialbargroups .pagination-lg:last-child .page-item:last-child .page-link { border-top-right-radius: 0.6rem; border-bottom-right-radius: 0.6rem; } .initialbargroups .pagination-sm:last-child .page-item:last-child .page-link { border-top-right-radius: 0.2rem; border-bottom-right-radius: 0.2rem; } blockquote { margin: 0 0.5rem 1rem; padding-left: 1rem; color: #495057; border-left: 5px solid #ced4da; } /* Prevent long strings exceeding page width */ .page-header-headings:not(.text-truncate), .coursename:not(.text-truncate), .categoryname:not(.text-truncate), .breadcrumb-item:not(.text-truncate) { word-break: normal; overflow-wrap: anywhere; white-space: normal; } /* Showmore component */ .showmore-container.collapsed .collapsed-content { display: block; } .showmore-container.collapsed .expanded-content { display: none; } .showmore-container:not(.collapsed) .collapsed-content { display: none; } .showmore-container:not(.collapsed) .expanded-content { display: block; } .showmore-container button { float: right; } .showmore-container button.btn-link { text-decoration: none; } .showmore-container button .icon { font-size: 0.8203125rem; margin: 0; } /* Combobox search dropdowns */ .usersearchdropdown, .gradesearchdropdown, .groupsearchdropdown { max-width: 350px; } .usersearchdropdown .searchresultitemscontainer, .gradesearchdropdown .searchresultitemscontainer, .groupsearchdropdown .searchresultitemscontainer { max-height: 170px; overflow: auto; /* stylelint-disable declaration-no-important */ } .usersearchdropdown .searchresultitemscontainer img, .gradesearchdropdown .searchresultitemscontainer img, .groupsearchdropdown .searchresultitemscontainer img { height: 48px !important; width: 48px !important; } /* Bulk actions in sticky footer. */ #sticky-footer [data-type=bulkactions] { display: flex; flex: 0 0 100%; align-items: center; } /* Choice list component. */ .choicelist { min-width: calc(300px - 25px); } .choicelist i.icon { vertical-align: middle; } .action-menu .dropdown-toggle { text-decoration: none; display: inline-block; } .action-menu { white-space: nowrap; display: inline; } .action-menu .dropdown-toggle.no-caret::after { display: none; } .action-menu .dropdown-toggle.no-caret::before { display: none; } .action-menu .dropdown.downleft .dropdown-subpanel-content { right: 0; left: auto; } .action-menu .dropdown-subpanel.content-displayed { background-color: #e9ecef; } .action-menu .dropdown-subpanel-content { max-width: 300px; box-shadow: 0 0 1rem rgba(0, 0, 0, 0.15); } .action-menu .dropdown-subpanel-content.show { animation: 0.15s animate-pop; } @media (prefers-reduced-motion: reduce) { .action-menu .dropdown-subpanel-content.show { animation: none; } } body.behat-site .action-menu .dropdown-subpanel-content.show { animation: none; } .action-menu .dropdown-subpanel .dropdown-item::after { border: 0; content: "\f054"; } .action-menu .dropdown-subpanel .dropdown-item::before { display: none; } @keyframes animate-pop { 0% { transform: scale(0.9, 0.9); } 100% { transform: scale(1, 1); } } .dir-rtl .action-menu .dropdown-subpanel .dropdown-item::after { border: 0; content: "\f053"; } .dir-rtl .action-menu .dropdown-subpanel .dropdown-item::before { display: none; } .dropdown-item a { display: block; width: 100%; color: #1d2125; } .dropdown-item.active, .dropdown-item:active, .dropdown-item:hover, .dropdown-item:focus, .dropdown-item:focus-within { outline: 0; background-color: #0f6cbf; color: #fff; } .dropdown-item.active a, .dropdown-item:active a, .dropdown-item:hover a, .dropdown-item:focus a, .dropdown-item:focus-within a { color: #fff; } .dropdown-item[aria-current=true], .dropdown-item[aria-selected=true] { position: relative; display: flex; align-items: center; } .dropdown-item[aria-current=true]:before, .dropdown-item[aria-selected=true]:before { content: "\f00c"; position: absolute; left: 0.4rem; font-size: 0.7rem; } .dropdown-item-outline:focus, .dropdown-item-outline:focus-within { outline: solid #0f6cbf; } .dropdown-item-outline a:focus, .dropdown-item-outline a:focus-visible { outline: 0; } .icon { font-size: 16px; width: 16px; height: 16px; margin: 0; padding: 0; box-sizing: content-box; margin-right: 0.5rem; } .icon.spacer { margin-right: 0; } .icon.iconsize-big { width: 64px; height: 64px; font-size: 64px; } .navbar-dark a .icon { color: rgba(255, 255, 255, 0.5) !important; /* stylelint-disable-line declaration-no-important */ } .action-menu-item a:first-of-type > .icon { margin-left: 0.5rem; } .ygtvcell .icon { margin-left: 0 !important; /* stylelint-disable-line declaration-no-important */ } .block_navigation .tree_item .icon, .block_settings .tree_item .icon { margin-left: 0; } [data-action=toggle-drawer] .icon { margin: 0; } .icon-no-spacing a > .icon { margin: 0; } .icon-no-margin .icon { margin-left: 0; margin-right: 0; margin-top: 0; margin-bottom: 0; } .icon-large > .icon { width: 32px; height: 32px; } .icon-size-0 .icon { height: 0 !important; /* stylelint-disable-line declaration-no-important */ width: 0 !important; /* stylelint-disable-line declaration-no-important */ font-size: 0 !important; /* stylelint-disable-line declaration-no-important */ } .icon-size-1 .icon { height: 4px !important; /* stylelint-disable-line declaration-no-important */ width: 4px !important; /* stylelint-disable-line declaration-no-important */ font-size: 4px !important; /* stylelint-disable-line declaration-no-important */ } .icon-size-2 .icon { height: 8px !important; /* stylelint-disable-line declaration-no-important */ width: 8px !important; /* stylelint-disable-line declaration-no-important */ font-size: 8px !important; /* stylelint-disable-line declaration-no-important */ } .icon-size-3 .icon { height: 16px !important; /* stylelint-disable-line declaration-no-important */ width: 16px !important; /* stylelint-disable-line declaration-no-important */ font-size: 16px !important; /* stylelint-disable-line declaration-no-important */ } .icon-size-4 .icon { height: 24px !important; /* stylelint-disable-line declaration-no-important */ width: 24px !important; /* stylelint-disable-line declaration-no-important */ font-size: 24px !important; /* stylelint-disable-line declaration-no-important */ } .icon-size-5 .icon { height: 32px !important; /* stylelint-disable-line declaration-no-important */ width: 32px !important; /* stylelint-disable-line declaration-no-important */ font-size: 32px !important; /* stylelint-disable-line declaration-no-important */ } .icon-size-6 .icon { height: 40px !important; /* stylelint-disable-line declaration-no-important */ width: 40px !important; /* stylelint-disable-line declaration-no-important */ font-size: 40px !important; /* stylelint-disable-line declaration-no-important */ } .icon-size-7 .icon { height: 48px !important; /* stylelint-disable-line declaration-no-important */ width: 48px !important; /* stylelint-disable-line declaration-no-important */ font-size: 48px !important; /* stylelint-disable-line declaration-no-important */ } .helplink .icon { margin-left: 0.5rem; } .icons-collapse-expand { display: flex; align-items: center; } .icons-collapse-expand .expanded-icon { display: flex; align-items: center; } .icons-collapse-expand .collapsed-icon { display: none; } .icons-collapse-expand.collapsed .expanded-icon { display: none; } .icons-collapse-expand.collapsed .collapsed-icon { display: flex; align-items: center; } .activityiconcontainer { width: 52px; height: 52px; display: inline-flex; justify-content: center; align-items: center; background-color: #f8f9fa; border-radius: 4px; padding: 0.7rem; } .activityiconcontainer .activityicon, .activityiconcontainer .icon { margin: 0; font-size: 24px; height: 24px; width: 24px; } .activityiconcontainer.small { width: 42px; height: 42px; } .activityiconcontainer.smaller { width: 32px; height: 32px; } .activityiconcontainer.smaller .activityicon { width: 24px; height: 24px; } .activityiconcontainer.administration { background-color: #5d63f6; } .activityiconcontainer.administration .activityicon:not(.nofilter), .activityiconcontainer.administration .icon:not(.nofilter) { filter: brightness(0) invert(1); } .activityiconcontainer.assessment { background-color: #eb66a2; } .activityiconcontainer.assessment .activityicon:not(.nofilter), .activityiconcontainer.assessment .icon:not(.nofilter) { filter: brightness(0) invert(1); } .activityiconcontainer.collaboration { background-color: #f7634d; } .activityiconcontainer.collaboration .activityicon:not(.nofilter), .activityiconcontainer.collaboration .icon:not(.nofilter) { filter: brightness(0) invert(1); } .activityiconcontainer.communication { background-color: #11a676; } .activityiconcontainer.communication .activityicon:not(.nofilter), .activityiconcontainer.communication .icon:not(.nofilter) { filter: brightness(0) invert(1); } .activityiconcontainer.content { background-color: #399be2; } .activityiconcontainer.content .activityicon:not(.nofilter), .activityiconcontainer.content .icon:not(.nofilter) { filter: brightness(0) invert(1); } .activityiconcontainer.interface { background-color: #a378ff; } .activityiconcontainer.interface .activityicon:not(.nofilter), .activityiconcontainer.interface .icon:not(.nofilter) { filter: brightness(0) invert(1); } .icon-box { width: 48px; height: 48px; display: inline-flex; justify-content: center; align-items: center; background-color: #f8f9fa; border-radius: 12px; padding: 0.7rem; } .icon-box .icon { margin: 0; height: 24px; width: 24px; } :root { --activityadministration: #5d63f6; --activityassessment: #eb66a2; --activitycollaboration: #f7634d; --activitycommunication: #11a676; --activitycontent: #399be2; --activityinterface: #a378ff; } /* admin.less */ .formtable tbody th { font-weight: normal; text-align: right; } .path-admin #assignrole { width: 60%; margin-left: auto; margin-right: auto; } .path-admin .admintable .leftalign { text-align: left; } .path-admin .admintable.environmenttable .name, .path-admin .admintable.environmenttable .info, .path-admin #assignrole .admintable .role, .path-admin #assignrole .admintable .userrole, .path-admin #assignrole .admintable .roleholder { white-space: nowrap; } .path-admin .incompatibleblockstable td.c0 { font-weight: bold; } #page-admin-course-category .addcategory { padding: 10px; } #page-admin-course-index .editcourse { margin: 20px auto; } #page-admin-course-index .editcourse th, #page-admin-course-index .editcourse td { padding-left: 10px; padding-right: 10px; } .timewarninghidden { display: none; } #page-admin-qtypes #qtypes div, #page-admin-qtypes #qtypes form, #page-admin-qbehaviours #qbehaviours div, #page-admin-qbehaviours #qbehaviours form { display: inline; } #page-admin-qtypes #qtypes img.spacer, #page-admin-qbehaviours #qbehaviours img.spacer { width: 16px; } #page-admin-qbehaviours .cell.c3, #page-admin-qtypes .cell.c3 { font-size: 0.8203125rem; } #page-admin-lang .generalbox, #page-admin-course-index .singlebutton, #page-admin-course-index .addcategory, #page-course-index .buttons, #page-course-index-category .buttons, #page-admin-course-category .addcategory, #page-admin-stickyblocks .generalbox, #page-admin-maintenance .buttons, #page-admin-course-index .buttons, #page-admin-course-category .buttons, #page-admin-index .copyright, #page-admin-index .copyrightnotice, #page-admin-index .adminerror .singlebutton, #page-admin-index .adminwarning .singlebutton, #page-admin-index #layout-table .singlebutton { text-align: center; margin-bottom: 1em; } .path-admin-roles .capabilitysearchui { text-align: left; margin-left: auto; margin-right: auto; margin-top: 1rem; } #page-admin-roles-define .topfields { margin: 1em 0 2em; } #page-admin-roles-override .capcurrent, #page-admin-roles-define .capdefault { background-color: rgba(0, 0, 0, 0.075); } #page-filter-manage .backlink, .path-admin-roles .backlink { margin-top: 1em; } #page-admin-roles-explain #chooseuser h3, #page-admin-roles-usersroles .contextname { margin-top: 0; } #page-admin-roles-explain #chooseusersubmit { margin-top: 0; text-align: center; } #page-admin-roles-usersroles p { margin: 0; } #page-admin-roles-override .cell.c1, #page-admin-roles-assign .cell.c3, #page-admin-roles-assign .cell.c1 { padding-top: 0.75em; } #page-admin-roles-override .overridenotice, #page-admin-roles-define .definenotice { margin: 1em 10% 2em 10%; text-align: left; } #page-admin-index .adminwarning.availableupdatesinfo .moodleupdateinfo span { display: block; } #page-admin-index .updateplugin div { margin-bottom: 0.5em; } #page-admin-user-user_bulk #users .fgroup { white-space: nowrap; } #page-admin-report-stats-index .graph { text-align: center; margin-bottom: 1em; } #page-admin-report-courseoverview-index .graph { text-align: center; margin-bottom: 1em; } #page-admin-lang .translator { border-width: 1px; border-style: solid; } .path-admin .roleassigntable { width: 100%; } .path-admin .roleassigntable td { vertical-align: top; padding: 0.2em 0.3em; } .path-admin .roleassigntable p { text-align: left; margin: 0.2em 0; } .path-admin .roleassigntable #existingcell, .path-admin .roleassigntable #potentialcell { width: 42%; } .path-admin .roleassigntable #existingcell p > label:first-child, .path-admin .roleassigntable #potentialcell p > label:first-child { font-weight: bold; } .path-admin .roleassigntable #buttonscell { width: 16%; } .path-admin .roleassigntable #buttonscell #assignoptions { font-size: 0.8203125rem; } .path-admin .roleassigntable #removeselect_wrapper, .path-admin .roleassigntable #addselect_wrapper { width: 100%; } .path-admin table.rolecap tr.rolecap th { text-align: left; font-weight: normal; } .path-admin .rolecap .hiddenrow { display: none; } .path-admin #defineroletable .rolecap .inherit, .path-admin #defineroletable .rolecap .allow, .path-admin #defineroletable .rolecap .prevent, .path-admin #defineroletable .rolecap .prohibit { text-align: center; padding: 0; min-width: 3.5em; } .path-admin .rolecap .cap-name, .path-admin .rolecap .note { display: block; font-size: 0.8203125rem; white-space: nowrap; font-weight: normal; } .path-admin .rolecap label { display: block; text-align: center; padding: 0.5em; margin: 0; } .path-admin .header-maxwidth, .path-admin .secondary-navigation .navigation .nav-tabs, .format-site .header-maxwidth, .format-site .secondary-navigation .navigation .nav-tabs { max-width: none; } .path-admin.path-admin-roles:not(.format-site) .header-maxwidth, .path-admin.path-admin-roles:not(.format-site) .secondary-navigation .navigation .nav-tabs, .path-admin.path-admin-tool-lp .header-maxwidth, .path-admin.path-admin-tool-lp .secondary-navigation .navigation .nav-tabs { max-width: 830px; } .plugincheckwrapper { width: 100%; } .environmentbox { margin-top: 1em; } #mnetconfig table { margin-left: auto; margin-right: auto; } .environmenttable .cell { padding: 0.15em 0.5em; } #trustedhosts .generaltable { margin-left: auto; margin-right: auto; width: 500px; } #trustedhosts .standard { width: auto; } #adminsettings legend { display: none; } #adminsettings fieldset.error { margin: 0.2em 0 0.5em 0; } #adminsettings fieldset.error legend { display: block; } #admin-spelllanguagelist textarea { /* rtl:ignore */ text-align: left; /* rtl:ignore */ direction: ltr; } /* Styles for flags on admin settings */ .adminsettingsflags { float: right; } .adminsettingsflags label { margin-right: 7px; } .form-description pre, .formsettingheading pre { /*rtl:ignore*/ direction: ltr; } .form-item .form-setting .form-htmlarea { display: inline; } .form-item .form-setting .form-htmlarea .htmlarea { width: 640px; display: block; } .form-item .form-setting .form-multicheckbox ul { list-style: none; padding: 0; margin: 7px 0 0 0; } .form-item .form-setting .defaultsnext { display: inline; } .form-item .form-setting .locked-checkbox { margin-right: 0.2em; margin-left: 0.5em; display: inline; } .form-item .form-setting .form-password .unmask, .form-item .form-setting .form-defaultinfo { display: inline-block; } .form-item .form-setting .form-defaultinfo { max-width: 100%; word-wrap: break-word; } #admin-emoticons td input { width: 8em; } #admin-emoticons td.c0 input { width: 4em; } #adminthemeselector table { border-collapse: collapse; } #adminthemeselector .selectedtheme { border: 1px solid #b8dce2; } .admin_colourpicker, .admin_colourpicker_preview { display: none; } .jsenabled .admin_colourpicker_preview { display: inline; } @media (min-width: 768px) { .jsenabled .admin_colourpicker { display: block; height: 102px; width: 410px; margin-bottom: 10px; box-sizing: content-box; } .admin_colourpicker .colourdialogue { float: left; border: 1px solid #8f959e; } .admin_colourpicker .previewcolour { border: 1px solid #8f959e; margin-left: 301px; } .admin_colourpicker .currentcolour { border: 1px solid #8f959e; margin-left: 301px; border-top-width: 0; } } @media (max-width: 767.98px) { .jsenabled .admin_colourpicker { height: 150px; margin-bottom: 10px; display: block; position: relative; } .admin_colourpicker .previewcolour { display: none; } .admin_colourpicker .currentcolour { position: absolute; border: 1px solid #dee2e6; top: 100px; left: 0; } } .admin_colourpicker .loadingicon { vertical-align: middle; margin-left: auto; } #page-admin-index #notice .checkforupdates { text-align: center; } #page-admin-plugins #plugins-overview-panel .info { display: inline-block; margin-right: 1em; } #page-admin-plugins .checkforupdates { margin: 10px 0; } #page-admin-plugins .checkforupdates .singlebutton { margin: 5px 0; padding: 0; } #page-admin-plugins .checkforupdates .singlebutton div, #page-admin-plugins .checkforupdates .singlebutton input { margin: 0 3px 0 0; } #page-admin-plugins .updateavailableinstallall { margin: 5px 0; padding: 0; } #page-admin-plugins .updateavailableinstallall div, #page-admin-plugins .updateavailableinstallall input { margin: 0 3px 5px 0; } #page-admin-plugins #plugins-control-panel .status-missing td { background-color: #fcefdc; } #page-admin-plugins #plugins-control-panel .pluginname .componentname { font-size: 0.8203125rem; color: #6a737b; margin-left: 22px; } #page-admin-plugins #plugins-control-panel .version .versionnumber { font-size: 0.8203125rem; color: #6a737b; } #page-admin-plugins #plugins-control-panel .uninstall a { color: #ca3120; } #page-admin-plugins #plugins-control-panel .notes .label { margin-right: 3px; } #page-admin-plugins #plugins-control-panel .notes .requiredby { font-size: 0.8203125rem; color: #6a737b; } #plugins-check-page #plugins-check .status-missing td, #plugins-check-page #plugins-check .status-downgrade td { background-color: #f4d6d2; } #plugins-check-page .pluginupdateinfo, #plugins-control-panel .pluginupdateinfo { background-color: #cce6ea; padding: 5px; margin: 10px 0; border-radius: 5px; } #plugins-check-page .pluginupdateinfo.maturity50, #plugins-control-panel .pluginupdateinfo.maturity50 { background-color: #f4d6d2; } #plugins-check-page .pluginupdateinfo.maturity100, #plugins-check-page .pluginupdateinfo.maturity150, #plugins-control-panel .pluginupdateinfo.maturity100, #plugins-control-panel .pluginupdateinfo.maturity150 { background-color: #fcefdc; } #plugins-check-page .pluginupdateinfo .info, #plugins-control-panel .pluginupdateinfo .info { display: inline-block; } #plugins-check-page .pluginupdateinfo .separator:after, #plugins-control-panel .pluginupdateinfo .separator:after { content: " | "; } #plugins-check-page .pluginupdateinfo .singlebutton, #plugins-control-panel .pluginupdateinfo .singlebutton { margin: 5px 0; padding: 0; } #plugins-check-page .pluginupdateinfo .singlebutton div, #plugins-check-page .pluginupdateinfo .singlebutton input, #plugins-control-panel .pluginupdateinfo .singlebutton div, #plugins-control-panel .pluginupdateinfo .singlebutton input { margin: 0 3px 0 0; } .plugins-management-confirm-buttons > div { display: inline-block; margin: 1em 1em 1em 0; } .plugins-management-confirm-buttons .continue { padding: 0; } .plugins-management-confirm-buttons .continue div, .plugins-management-confirm-buttons .continue input { margin: 0; } #page-admin-index .upgradepluginsinfo { text-align: center; } #page-admin-index .adminwarning.availableupdatesinfo .moodleupdateinfo .separator:after { content: " | "; } /** MNet networking */ #page-admin-mnet-peers .box.deletedhosts { margin-bottom: 1em; font-size: 0.8203125rem; } #core-cache-plugin-summaries table, #core-cache-store-summaries table { width: 100%; } #core-cache-lock-summary table, #core-cache-definition-summaries table, #core-cache-mode-mappings table { margin: 0 auto; } #core-cache-store-summaries .default-store td { font-style: italic; } #core-cache-rescan-definitions, #core-cache-mode-mappings .edit-link, #core-cache-lock-additional-actions .new-instance { margin-top: 0.5em; text-align: center; } .maintenancewarning { position: fixed; bottom: 0; right: 0; overflow: hidden; z-index: 1000; } .modal.modal-in-page { z-index: 0; } #page-admin-search .adminpagetitle { margin-bottom: 0; border-bottom: none; } #page-admin-search .adminpagepath { display: flex; flex-wrap: wrap; list-style: none; padding: 0; margin: 0 0 1.5rem 0; } #page-admin-search .adminpagepath li + li:before { padding-right: 0.5rem; padding-left: 0.5rem; content: "/"; } @media (min-width: 576px) { #page-admin-search .container { overflow-wrap: break-word; } } #page-admin-tasklogs .task-class { font-size: 0.8203125rem; color: #6a737b; } .path-admin-tool-uploaduser .uuwarning { background-color: #fcefdc; } .path-admin-tool-uploaduser .uuerror { background-color: #f4d6d2; } .path-admin-tool-uploaduser .uuinfo { background-color: #d7e4d6; } .blockmovetarget .accesshide { position: relative; left: initial; } .block:target { padding-top: 0 !important; /* stylelint-disable declaration-no-important */ margin-top: 0 !important; } .block_search_forums .searchform { /* Override plugin's default. */ text-align: left; } .block.block_navigation .block_tree ul, .block_settings .block_tree ul { margin-left: 0; } .block .block-controls .dropdown-toggle { /* So that the caret takes the colour of the icon. */ color: #1d2125; } [data-region=blocks-column] { width: 360px; float: right; } /* We put an absolutely positioned div in a relatively positioned div so it takes up no space */ @media (min-width: 576px) { #region-main-settings-menu { position: relative; float: left; width: 100%; } #region-main-settings-menu > div { position: absolute; right: 0; z-index: 100; margin: 1rem; } .region_main_settings_menu_proxy { width: 4rem; height: 2rem; background-color: #fff; margin-left: 0.625rem; margin-bottom: 0.625rem; border-bottom-left-radius: 0.5rem; float: right; } } @media (max-width: 767.98px) { #region-main-settings-menu .menubar { justify-content: flex-end; } } #region-main.has-blocks { display: inline-block; width: calc(100% - 375px); } @media (max-width: 1199.98px) { #region-main.has-blocks { width: 100%; /* MDL-63102 - Remove extra space at bottom. If modifying make sure block-region is horizontally stacked when in full screen */ display: block; } } .header-action #region-main-settings-menu { position: unset; float: none; width: auto; } .header-action #region-main-settings-menu > div { position: unset; right: auto; margin: 0; } @media (max-width: 1199.98px) { [data-region=blocks-column] { width: 100%; } } .block .empty-placeholder-image-lg { height: 5rem; } .block .searchbar .icon { margin-right: 0; } .block .block-cards .course-info-container { padding: 0.8rem; } .block .block-cards .progress { height: 0.5rem; } .block .block-cards .course-summaryitem { border: 1px solid #dee2e6; background-color: #fff; } .block .block-cards .icon { margin-right: 0; } .block .block-cards .card .coursemenubtn { margin-top: -0.5rem; } .block .block-cards span.categoryname, .block .block-cards .btn-link { color: #1d2125; } .block .block-cards .progress-text { color: #6a737b; } .block .block-cards .multiline { white-space: normal; } .block .block-cards .btn.btn-link.btn-icon { height: 36px; width: 36px; padding: 0; border-radius: 50%; } .block .block-cards .btn.btn-link.btn-icon:hover, .block .block-cards .btn.btn-link.btn-icon:focus { background-color: #e9ecef; } .dashboard-card-deck.one-row { flex-flow: nowrap; overflow-x: scroll; } .summaryimage { height: 5rem; width: 5rem; background-position: center; background-size: cover; } .dashboard-list-img { height: 5rem; width: 20rem; background-position: center; background-size: cover; } @media (max-width: 1199.98px) { .dashboard-list-img { width: 100%; } } .dashboard-card-deck .dashboard-card { margin-bottom: 0.5rem; flex-basis: auto; width: 100%; flex-grow: 0; flex-shrink: 0; } .dashboard-card-deck .dashboard-card .dashboard-card-img { height: 7rem; background-position: center; background-size: cover; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .dashboard-card-deck .dashboard-card .dashboard-card-footer { padding: 0.8rem; } @media (min-width: 576px) { .dashboard-card-deck.fixed-width-cards .dashboard-card { width: 300px; max-width: 100%; } } @media (min-width: 576px) { .dashboard-card-deck:not(.fixed-width-cards) .dashboard-card { width: calc(50% - 0.5rem); } } @media (min-width: 840px) { .dashboard-card-deck:not(.fixed-width-cards) .dashboard-card { width: calc(33.33% - 0.5rem); } } #block-region-side-pre .dashboard-card-deck:not(.fixed-width-cards) { margin-left: 0; margin-right: 0; } #block-region-side-pre .dashboard-card-deck:not(.fixed-width-cards) .dashboard-card { width: calc(100% - 0.5rem) !important; } .block_recentlyaccessedcourses .paging-bar-container { margin-top: -2.4rem; padding-right: 0.5rem; justify-content: flex-end; } @media (max-width: 575.98px) { .block_recentlyaccessedcourses .paging-bar-container { margin-top: 0; } } #block-region-side-pre .block_recentlyaccessedcourses .paging-bar-container { margin-top: 0; } .block_recentlyaccesseditems .activityiconcontainer { width: 40px; height: 40px; } aside[id^=block-region-side-] .block_recentlyaccesseditems .dashboard-card-deck.one-row { flex-flow: wrap; overflow-x: hidden; } aside[id^=block-region-side-] .block_recentlyaccesseditems .dashboard-card-deck .card:nth-of-type(n+4) { display: none; } #block-region-content .block_recentlyaccesseditems [data-region=more-items-button-container] { display: none; } .block_recentlyaccesseditems a.dashboard-card:hover, .block_recentlyaccesseditems a.dashboard-card:focus { text-decoration: none; } .block_recentlyaccesseditems a.dashboard-card:hover h6, .block_recentlyaccesseditems a.dashboard-card:focus h6 { text-decoration: underline; } .block_recentlyaccesseditems a.dashboard-card small { color: #1d2125; } .block_myoverview .content { min-height: 19.35rem; } .block_myoverview .paged-content-page-container { min-height: 13rem; } .block_timeline .paged-content-page-container { background-color: #fff; } .block_timeline .event-action { padding-left: 5.55em; } .block_settings .block_tree [aria-expanded=true], .block_settings .block_tree [aria-expanded=true].emptybranch, .block_settings .block_tree [aria-expanded=false], .block_navigation .block_tree [aria-expanded=true], .block_navigation .block_tree [aria-expanded=true].emptybranch, .block_navigation .block_tree [aria-expanded=false] { background-image: none; } .block_settings .block_tree [aria-expanded=true] > p:before, .block_navigation .block_tree [aria-expanded=true] > p:before { content: "\f107"; margin-right: 0; font-size: 16px; width: 16px; } .block_settings .block_tree [aria-expanded=false] > p:before, .block_navigation .block_tree [aria-expanded=false] > p:before { content: "\f105"; margin-right: 0; font-size: 16px; width: 16px; } .dir-rtl .block_settings .block_tree [aria-expanded=false] > p:before, .dir-rtl .block_navigation .block_tree [aria-expanded=false] > p:before { content: "\f104"; } .block_navigation .block_tree p.hasicon, .block_settings .block_tree p.hasicon { text-indent: -3px; } .block_navigation .block_tree p.hasicon .icon, .block_settings .block_tree p.hasicon .icon { margin-right: 2px; } .block.invisibleblock .card-title { color: #6a737b; } @media (max-width: 767.98px) { .block.card { border-left: 0; border-right: 0; } } .block_social_activities li a.movehere, .block_site_main_menu li a.movehere { display: block; width: 100%; height: 2rem; border: 2px dashed #343a40; margin: 4px 0; } .pagelayout-embedded .has-fake-blocks { padding: 1rem; display: flex; } .pagelayout-embedded .has-fake-blocks .embedded-main { order: 0; width: calc(100% - 360px); margin-right: 1rem; } .pagelayout-embedded .embedded-blocks { order: 1; width: 360px; } @media (max-width: 767.98px) { .pagelayout-embedded .has-fake-blocks { display: block; } .pagelayout-embedded .has-fake-blocks .embedded-main { width: 100%; } .pagelayout-embedded .embedded-blocks { width: 100%; } } /* calendar.less */ .calendar_event_category { background-color: #e0cbe0; } .calendar_event_category .commands a { color: #0d5ca1; } .calendar_event_course { background-color: #ffd3bd; } .calendar_event_course .commands a { color: #0d5ca1; } .calendar_event_site { background-color: #d6f8cd; } .calendar_event_site .commands a { color: #0d5ca1; } .calendar_event_group { background-color: #fee7ae; } .calendar_event_group .commands a { color: #0d5ca1; } .calendar_event_user { background-color: #dce7ec; } .calendar_event_user .commands a { color: #0d5ca1; } .calendar_event_other { background-color: #ced4da; } .calendar_event_other .commands a { color: #0d5ca1; } .calendartable { width: 100%; table-layout: fixed; } .calendartable th, .calendartable td { width: 14%; vertical-align: top; text-align: center; border: 0; } .calendar-controls .previous, .calendar-controls .next, .calendar-controls .current { display: block; float: left; width: 12%; } .calendar-controls .previous { text-align: left; border: 1px solid transparent; width: 25%; } .calendar-controls .current { text-align: center; width: 50%; } .calendar-controls .next { text-align: right; border: 1px solid transparent; width: 25%; } .calendar-controls .drop-target { box-sizing: border-box; border: 1px dashed #0f6cbf; } .filters table { border-collapse: separate; border-spacing: 2px; width: 100%; } #region-main .maincalendar .calendarwrapper td > div { height: 11.5em; overflow: hidden; } .maincalendar { vertical-align: top; padding: 0; } .maincalendar .bottom { text-align: left; width: 98%; margin: 10px auto; } .maincalendar .bottom span.footer-link:after { content: "•"; color: #0f6cbf; } .maincalendar .bottom span.footer-link:last-child:after { content: none; } .maincalendar .heightcontainer { height: 100%; position: relative; } .maincalendar .calendarmonth { width: 98%; margin: 10px auto; } .maincalendar .calendarmonth ul { margin: 0; padding: 0; } .maincalendar .calendarmonth ul li[data-event-folded=true] { display: none; } .maincalendar .calendarmonth ul li { list-style-type: none; line-height: 1.2em; } .maincalendar .calendarmonth ul li > a { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 100%; display: inline-block; } .maincalendar .calendarmonth ul li > a:hover { text-decoration: none; } .maincalendar .calendarmonth ul li > a:hover .eventname { text-decoration: underline; } .maincalendar .calendarmonth ul li a[data-action=view-day-link] { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .maincalendar .calendarmonth ul li .icon { margin-left: 0.25em; margin-right: 0.25em; vertical-align: initial; } .maincalendar .calendarmonth ul li .calendar-circle { width: 12px; height: 12px; border-radius: 6px; vertical-align: middle; display: inline-block; } .maincalendar .calendarmonth ul li .calendar-circle.calendar_event_category { background-color: #e0cbe0; border: 2px solid #9e619f; } .maincalendar .calendarmonth ul li .calendar-circle.calendar_event_course { background-color: #ffd3bd; border: 2px solid #d34600; } .maincalendar .calendarmonth ul li .calendar-circle.calendar_event_site { background-color: #d6f8cd; border: 2px solid #2b8713; } .maincalendar .calendarmonth ul li .calendar-circle.calendar_event_group { background-color: #fee7ae; border: 2px solid #9a6e02; } .maincalendar .calendarmonth ul li .calendar-circle.calendar_event_user { background-color: #dce7ec; border: 2px solid #4e7c91; } .maincalendar .calendarmonth ul li .calendar-circle.calendar_event_other { background-color: #ced4da; border: 2px solid #687889; } .maincalendar .calendarmonth th { text-align: left; padding-left: 16px; } .maincalendar .calendarmonth td a.day:focus { display: inline-block; border-radius: 50%; box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .maincalendar .calendarmonth td .day-number-circle { display: inline-block; line-height: 0; width: 30px; height: 30px; } .maincalendar .calendarmonth td .day-number-circle .day-number { display: inline-block; padding: 50% 4px; width: 100%; text-align: center; } .maincalendar .calendarmonth td.today .day-number-circle { border-radius: 50%; color: #fff; background-color: #0f6cbf; } .maincalendar .calendarmonth .clickable:hover { background-color: #ededed; } .maincalendar .controls { width: 98%; margin: 10px auto; } .maincalendar .calendar_event_category:hover a, .maincalendar .calendar_event_course:hover a, .maincalendar .calendar_event_site:hover a, .maincalendar .calendar_event_group:hover a, .maincalendar .calendar_event_user:hover a { color: #094478; text-decoration: underline; } .maincalendar .calendar_event_category { border-color: #e0cbe0; } .maincalendar .calendar_event_course { border-color: #ffd3bd; } .maincalendar .calendar_event_site { border-color: #d6f8cd; } .maincalendar .calendar_event_group { border-color: #fee7ae; } .maincalendar .calendar_event_user { border-color: #dce7ec; } .maincalendar .calendar_event_other { border-color: #ced4da; } .maincalendar .calendartable td, .maincalendar .calendartable li { padding: 4px; } .maincalendar .calendartable li { text-align: left; } .maincalendar .header { overflow: hidden; } .maincalendar .header .buttons { float: right; } .maincalendar .event .card-header img { vertical-align: baseline; } .maincalendar .event .location { word-break: break-all; overflow-wrap: break-word; } .maincalendar table#subscription_details_table td { vertical-align: middle; } .maincalendar table#subscription_details_table td > .btn-group button { padding-left: 0; } #page-calendar-export .indent { padding-left: 20px; } .block .bottom { width: 98%; margin: 10px auto; } .block .bottom span.footer-link:after { content: "•"; color: #0f6cbf; } .block .bottom span.footer-link:last-child:after { content: none; } .block .minicalendar { max-width: 280px; margin: 0 auto; width: 100%; } .block .minicalendar th, .block .minicalendar td { padding: 2px; font-size: 0.8em; text-align: center; } .block .minicalendar td.weekend { color: #6a737b; } .block .minicalendar td a { width: 100%; height: 100%; display: block; color: #0d5ca1; } .block .minicalendar td.duration_global { border-top: 1px solid #d6f8cd; border-bottom: 1px solid #d6f8cd; } .block .minicalendar td.duration_global.duration_finish { background-color: #d6f8cd; } .block .minicalendar td.duration_category { border-top: 1px solid #e0cbe0; border-bottom: 1px solid #e0cbe0; } .block .minicalendar td.duration_category.duration_finish { background-color: #e0cbe0; } .block .minicalendar td.duration_course { border-top: 1px solid #ffd3bd; border-bottom: 1px solid #ffd3bd; } .block .minicalendar td.duration_course.duration_finish { background-color: #ffd3bd; } .block .minicalendar td.duration_group { border-top: 1px solid #fee7ae; border-bottom: 1px solid #fee7ae; } .block .minicalendar td.duration_group.duration_finish { background-color: #fee7ae; } .block .minicalendar td.duration_user { border-top: 1px solid #dce7ec; border-bottom: 1px solid #dce7ec; } .block .minicalendar td.duration_user.duration_finish { background-color: #dce7ec; } .block .minicalendar td.duration_other { border-top: 1px solid #ced4da; border-bottom: 1px solid #ced4da; } .block .minicalendar td.duration_other.duration_finish { background-color: #ced4da; } .block .minicalendar caption { font-size: inherit; font-weight: inherit; line-height: inherit; text-align: center; } .block .calendar_filters ul { list-style: none; margin: 0; padding: 0; } .block .calendar_filters li { margin-bottom: 0.2em; } .block .calendar_filters li span.calendar_event_category i { color: #0d5ca1; } .block .calendar_filters li span.calendar_event_course i { color: #0d5ca1; } .block .calendar_filters li span.calendar_event_site i { color: #0d5ca1; } .block .calendar_filters li span.calendar_event_group i { color: #0d5ca1; } .block .calendar_filters li span.calendar_event_user i { color: #0d5ca1; } .block .calendar_filters li span.calendar_event_other i { color: #0d5ca1; } .block .calendar_filters li span img { padding: 0 0.2em; margin: 0; } .block .calendar_filters li .icon { vertical-align: initial; margin: 0 0.1rem 0 0.4rem; } .block .calendar_filters li > a:hover { text-decoration: none; } .block .calendar_filters li > a:hover .eventname { text-decoration: underline; } .block .content h3.eventskey { margin-top: 0.5em; } .path-course-view .block.block_calendar_month .maincalendar div.header { visibility: hidden; height: 0; } .path-course-view .block.block_calendar_month .maincalendar .calendarwrapper .arrow_text { display: none; } .path-course-view .block.block_calendar_month .footer .bottom .footer-link { display: block; } .path-course-view .block.block_calendar_month .footer .bottom .footer-link:after { content: none; } /* Display month name above the calendar */ table.calendartable caption { caption-side: top; } @media (min-width: 768px) { #page-calender-view .container-fluid, #page-calender-view .container-sm, #page-calender-view .container-md, #page-calender-view .container-lg, #page-calender-view .container-xl { min-width: 1024px; } } @media (min-width: 768px) { section:not(#region-main) .block.block_calendar_month .maincalendar div.header { visibility: hidden; height: 0; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendarwrapper .current { width: 40%; font-size: inherit; line-height: inherit; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendarwrapper .previous, section:not(#region-main) .block.block_calendar_month .maincalendar .calendarwrapper .next { width: 30%; font-size: 0.8em; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth th, section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth td { border: none; text-align: center !important; padding: 0; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth td { height: auto; font-size: 0.8em; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth td.hasevent [data-region=day-content] { display: none; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth td.hasevent .day-number { display: inline-block; position: relative; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth td.hasevent .day-number:before { content: "."; display: inline-block; position: absolute; bottom: 0.4em; left: 0; text-align: center; width: 100%; font-size: 3em; color: inherit; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth td:after { content: ""; display: block; margin-top: calc(100% - 26px); } section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth td.clickable:hover { background-color: inherit; } section:not(#region-main) .block.block_calendar_month .maincalendar .calendartable.calendarmonth td.clickable:not(.today):hover .day-number-circle { border-radius: 50%; background-color: #ededed; } section:not(#region-main) .block.block_calendar_month .bottom { border-top: 1px solid rgba(0, 0, 0, 0.125); padding-top: 0.5rem; } } @media (max-width: 768px) { .maincalendar .calendartable.calendarmonth th, .maincalendar .calendartable.calendarmonth td { border: none; text-align: center !important; padding: 0; } .maincalendar .calendartable.calendarmonth td { height: auto; font-size: inherit; padding: 0; } .maincalendar .calendartable.calendarmonth td.hasevent [data-region=day-content] { display: none; } .maincalendar .calendartable.calendarmonth td.hasevent .day-number { display: inline-block; position: relative; } .maincalendar .calendartable.calendarmonth td.hasevent .day-number:before { content: "."; display: inline-block; position: absolute; bottom: 0.4em; left: 0; text-align: center; width: 100%; font-size: 3em; color: inherit; } .maincalendar .calendartable.calendarmonth td:after { content: ""; display: block; margin-top: calc(100% - 26px); } .maincalendar .calendartable.calendarmonth td > div { height: auto !important; } } .calendarwrapper { position: relative; } .day-popover-content:empty + .day-popover-alternate { display: block; } .location-content { overflow-wrap: break-word; } .description-content { overflow-wrap: break-word; } .description-content > p { margin: 0; } .cal_courses_flt { color: #6a737b; max-width: 75%; } .content-bank-container .cb-content-wrapper { padding: 0.5rem; min-height: 140px; max-height: 500px; overflow-x: auto; flex-wrap: wrap; } .content-bank-container .cb-thumbnail { width: 24px; height: 24px; background-repeat: no-repeat; background-position: center; background-size: cover; } .content-bank-container.view-grid { /* Display a centered eye slash on top of unlisted content icons. */ } .content-bank-container.view-grid .cb-listitem { margin-bottom: 0.5rem; } .content-bank-container.view-grid .cb-listitem.cb-unlisted { position: relative; } @media (max-width: 767.98px) { .content-bank-container.view-grid .cb-listitem { flex-basis: 50%; } } @media (min-width: 576px) { .content-bank-container.view-grid .cb-listitem { max-width: 120px; min-width: 120px; } } .content-bank-container.view-grid .cb-name { text-align: center; } .content-bank-container.view-grid .cb-file { padding: 0.5rem; } .content-bank-container.view-grid .cb-thumbnail { width: 64px; height: 64px; margin-left: auto; margin-right: auto; margin-bottom: 0.5rem; } .content-bank-container.view-grid .cb-unlisted .cb-thumbnail { opacity: 0.15; } .content-bank-container.view-grid .cb-unlisted::after { content: "\f070"; position: absolute; top: 20px; left: 0; width: 100%; font-size: 26px; text-align: center; opacity: 0.9; text-shadow: 0 0 10px #fff; } .content-bank-container.view-grid .cb-heading, .content-bank-container.view-grid .cb-uses, .content-bank-container.view-grid .cb-date, .content-bank-container.view-grid .cb-size, .content-bank-container.view-grid .cb-type, .content-bank-container.view-grid .cb-author { display: none; } .content-bank-container.view-list .cb-content-wrapper { padding: 0 0.5rem; flex-direction: column; flex-wrap: nowrap; } .content-bank-container.view-list .cb-thumbnail { margin-right: 0.5rem; } .content-bank-container.view-list .cb-listitem, .content-bank-container.view-list .cb-heading { display: flex; flex-wrap: wrap; width: 100%; border-bottom: 1px solid #dee2e6; } .content-bank-container.view-list .cb-column { display: flex; padding: 0.25rem; } .content-bank-container.view-list .cb-column { border-right: 1px solid #dee2e6; } .content-bank-container.view-list .cb-listitem.cb-unlisted .cb-thumbnail { opacity: 0.3; } .content-bank-container.view-list .cb-listitem.cb-unlisted .cb-column, .content-bank-container.view-list .cb-listitem.cb-unlisted .cb-column a { color: #6a737b; } @media (max-width: 767.98px) { .content-bank-container.view-list .cb-column { flex: 0 0 50%; max-width: 50%; } } @media (min-width: 576px) { .content-bank-container.view-list .cb-heading { position: sticky; top: 0; z-index: 1; } .content-bank-container.view-list .cb-file { flex: 0 0 40%; max-width: 40%; } .content-bank-container.view-list .cb-uses, .content-bank-container.view-list .cb-date, .content-bank-container.view-list .cb-size, .content-bank-container.view-list .cb-type, .content-bank-container.view-list .cb-author { flex: 0 0 12%; max-width: 12%; } .content-bank-container.view-list .cb-column.last { border-right: 0; } } .content-bank-container.view-list .cb-btnsort span { display: none; } .content-bank-container.view-list .cb-btnsort .title { display: inline; } .content-bank-container.view-list .cb-btnsort.dir-none .default, .content-bank-container.view-list .cb-btnsort.dir-asc .asc, .content-bank-container.view-list .cb-btnsort.dir-desc .desc { display: inline; } .cb-toolbar-container .dropdown-scrollable { max-height: 190px; overflow-y: auto; } .cb-navigation-container .singleselect, .cb-navigation-container .singleselect .custom-select { width: 100%; } /* course.less */ /* COURSE CONTENT */ .section_add_menus { text-align: right; clear: both; } .section-modchooser { clear: both; margin-top: 0.25rem; } .block_tree .tree_item.branch { margin-left: 8px; } .section_add_menus .horizontal div, .section_add_menus .horizontal form { display: inline; } .section_add_menus optgroup { font-weight: normal; font-style: italic; } /*rtl:ignore*/ .section_add_menus .urlselect { text-align: left; margin-left: 0.4em; } /*rtl:ignore*/ .section_add_menus .urlselect select { margin-left: 0.2em; } .sitetopic ul.section { margin: 0; } body:not(.editing) .sitetopic ul.section { padding-left: 0; } body:not(.editing) .sitetopic ul.section .label .mod-indent-outer { padding-left: 0; } @media (min-width: 576px) { .course-content ul.section { margin: 1rem; } } .section .side { margin-top: 0.5rem; } .section .side.left { float: left; } .section .side.right { float: right; clear: right; } .section .spinner { height: 16px; width: 16px; } .section .activity { list-style: none; padding: 0.25rem 0; /* The command block for each activity */ } .section .activity .spinner { left: 100%; position: absolute; } .section .activity .actions { position: absolute; right: 0; top: 0; display: flex; } .section .activity .contentwithoutlink, .section .activity .activityinstance { min-width: 40%; } .section .activity .contentwithoutlink > a, .section .activity .activityinstance > a { display: inline-flex; align-items: center; } .section .activity .contentwithoutlink .dimmed .activityicon, .section .activity .activityinstance .dimmed .activityicon { opacity: 0.5; } .section .activity .stealth { color: #6a737b; } .section .activity a.stealth, .section .activity a.stealth:hover { color: #5babf2 !important; /* stylelint-disable-line declaration-no-important */ } .section .activity.indented .activity-item { border: 0; margin-left: 1rem; } .section .activity.indented + .indented .activity-item { border-top: 1px solid #dee2e6; border-radius: unset; } .section .label .contentwithoutlink, .section .label .activityinstance { padding-right: 32px; display: block; height: inherit; } @media (min-width: 576px) { .section .label .mod-indent-outer { padding-left: 24px; display: block; } } .section .filler { width: 16px; height: 16px; padding: 0; margin: 0 0.5rem; display: inline-block; } .section .activity.editor_displayed a.editing_title, .section .activity.editor_displayed .moodle-actionmenu { display: none; } .section .activity.editor_displayed div.activityinstance { padding-right: initial; } .section .activity.editor_displayed div.activityinstance input { margin-bottom: initial; padding-top: initial; padding-bottom: initial; vertical-align: text-bottom; } .section .activity .activityinstance { display: inline-flex; align-items: center; margin-bottom: 1rem; } .editing .section .activity .contentwithoutlink, .editing .section .activity .activityinstance { padding-right: 200px; } .editing .section .activity .editing_move { position: absolute; display: flex; left: 5px; top: 5px; } .editing .section .activity .mod-indent-outer { /** * Add appropriate padding such that nothing overlaps the * absolute positioned move icon. */ padding-left: 2rem; } .editing .activity .editing_move_activity { position: absolute; display: flex; left: 5px; top: 5px; } .editing .course-content .stateready .section .spinner { display: none; } .editing .editinprogress { position: relative; } .editing .editinprogress > * { opacity: 0.4; } .editing .editinprogress .corelightbox, .editing .editinprogress .lightbox { display: none; } .editing .editinprogress:after { position: absolute; font-size: 20px; color: #6a737b; content: "\f110"; display: flex; justify-content: center; align-items: center; width: 30px; height: 30px; left: calc(50% - 15px); top: calc(50% - 15px); animation: editinprogress-rotation 2s infinite linear; } .editing .editinprogress .editinprogress:after { display: none; } @keyframes editinprogress-rotation { 0% { opacity: 0; transform: rotate(0deg); } 50% { opacity: 1; } 100% { opacity: 0; transform: rotate(359deg); } } .editing_show + .editing_assign, .editing_hide + .editing_assign { margin-left: 20px; } .section .activity .commands { white-space: nowrap; display: inline-block; } .section .activity.modtype_label.label { font-weight: normal; } .section .activity.modtype_label.label .contentwithoutlink { min-height: 0; } .section .activity.modtype_label.label.hasinfo p:last-child, .section .activity.modtype_label.label.hasinfo i:last-child { margin-bottom: 0; } .section li.activity:not(.activity-wrapper) { padding: 0.2em; clear: both; } .section li.activity:not(.activity-wrapper).hasinfo { border-bottom: 1px solid #dee2e6; padding-top: 1rem; padding-bottom: 1rem; } .section li.activity:not(.activity-wrapper).hasinfo:last-child { border-bottom: 0; padding-bottom: 0; } .course-content .section.dropready.main.drop-down { border-bottom: 1px solid #1d2125; } .course-content .section.dropready .course-section-header.dropready.drop-zone { margin-top: -2px; } .course-content .section.dropready li.activity.dropready.drop-down { border-bottom: 1px solid #1d2125; margin-bottom: -1px; } .course-content .section.dropready li.activity.dropready.drop-up { border-top: 1px solid #1d2125; margin-top: -1px; } .section .activity .activityinstance .groupinglabel { padding-left: 30px; } .section.main:not(.course-section) .activity .availabilityinfo, .section.main:not(.course-section) .activity .contentafterlink { margin-top: 0.5em; margin-left: 30px; } .section .activity .contentafterlink p { margin: 0.5em 0; } .editing .section.main:not(.course-section) .activity:hover, .editing .section.main:not(.course-section) .activity.action-menu-shown, .editing .section.main:not(.course-section) .sectionname:hover { background-color: rgba(0, 0, 0, 0.03); } .course-content .current { position: relative; } .course-content .current::before { border-left: #0f6cbf 3px solid; bottom: 0; content: ""; left: -8px; position: absolute; top: 0; } .course-content .section-summary { border: 1px solid #dee2e6; margin-top: 5px; list-style: none; } .course-content .section-summary .section-title { margin: 2px 5px 10px 5px; } .course-content .section-summary .summarytext { margin: 2px 5px 2px 5px; } .course-content .section-summary .section-summary-activities .activity-count { color: #6a737b; font-size: 0.8203125rem; margin: 3px; white-space: nowrap; display: inline-block; } .course-content .section-summary .summary { margin-top: 5px; } .course-content .single-section { margin-top: 1em; } .course-content .single-section .section-navigation { display: block; padding: 0.5em; margin-bottom: -0.5em; } .course-content .single-section .section-navigation .title { font-weight: bold; font-size: 108%; clear: both; } .course-content .single-section .section-navigation .mdl-left { font-weight: normal; float: left; margin-right: 1em; } .course-content .single-section .section-navigation .mdl-left .larrow { margin-right: 0.1em; } .course-content .single-section .section-navigation .mdl-right { font-weight: normal; float: right; margin-left: 1em; } .course-content .single-section .section-navigation .mdl-right .rarrow { margin-left: 0.1em; } .course-content .single-section .section-navigation .mdl-bottom { margin-top: 0; } .course-content ul li.section.main:not(.course-section) { border-bottom: 1px solid #dee2e6; margin-top: 0; } .course-content ul li.section.main:not(.course-section):last-child { border-bottom: 0; } .course-content ul li.section.hidden:not(.course-section) .sectionname > span, .course-content ul li.section.hidden:not(.course-section) .content > div.summary, .course-content ul li.section.hidden:not(.course-section) .activity .activityinstance { color: #6a737b; } .course-content ul.topics, .course-content ul.weeks { padding: 0; margin: 0; list-style: none; } .course-content ul.topics li.section, .course-content ul.weeks li.section { padding-top: 1rem; padding-bottom: 1rem; } .course-content ul.topics li.section .content, .course-content ul.weeks li.section .content { margin: 0; padding: 0; } @media (min-width: 576px) { .course-content ul.topics li.section .summary, .course-content ul.topics li.section .content > .availabilityinfo, .course-content ul.weeks li.section .summary, .course-content ul.weeks li.section .content > .availabilityinfo { margin-left: 25px; } } .course-content ul.topics li.section .left, .course-content ul.topics li.section .right, .course-content ul.weeks li.section .left, .course-content ul.weeks li.section .right { padding: 0 6px 0; text-align: right; width: auto; } @media (max-width: 767.98px) { body:not(.editing) .course-content ul.topics li.section .left, body:not(.editing) .course-content ul.topics li.section .right, body:not(.editing) .course-content ul.weeks li.section .left, body:not(.editing) .course-content ul.weeks li.section .right { display: none; } } .course-content { margin-top: 0; } .course-content .hidden { display: none; } @media (max-width: 767.98px) { .course-content li.section:not(.course-section) ul { padding-left: 0; } } .course-content li.section:not(.course-section) ul { list-style: disc; } .course-content li.section:not(.course-section) ul ul { list-style: circle; } .course-content li.section:not(.course-section) ul ul ul { list-style: square; } .course-content li.section:not(.course-section) li.activity ul { list-style: disc; } .course-content li.section:not(.course-section) li.activity ul ul { list-style: circle; } .course-content li.section:not(.course-section) li.activity ul ul ul { list-style: square; } .course-content li.section:not(.course-section) .right > .icon:first-child { /* Remove the spacer icon. */ display: none; } .path-course-view.editing #region-main > .card-block { padding-bottom: 13rem; } .jumpmenu .form-inline { display: block; } .path-course-view .completionprogress { margin-left: 25px; } .path-course-view .completionprogress { display: block; float: right; height: 20px; position: relative; } #page-site-index .subscribelink { text-align: right; } #site-news-forum h2, #frontpage-course-list h2, #frontpage-category-names h2, #frontpage-category-combo h2 { margin-bottom: 9px; } .path-course-view a.reduce-sections { padding-left: 0.2em; } .path-course-view .subscribelink { text-align: right; } .path-course-view .unread { margin-left: 30px; } .path-course-view .block.drag .header { cursor: move; } .path-course-view .completionprogress { text-align: right; } .path-course-view .single-section .completionprogress { margin-right: 5px; } .path-site li.activity > div:not(.activity-item), .path-course-view li.activity > div:not(.activity-item) { position: relative; padding: 0 16px 0 0; /* to accommodate the floated completion icon with highlighting */ } .path-course-view li.activity span.autocompletion img { vertical-align: text-bottom; margin-left: 0; } .path-course-view li.activity form.togglecompletion .btn { padding: 0; } .path-course-view li.activity form.togglecompletion img { max-width: none; /* The width is 0 so ensure we don't end up with a relative max-width */ } .path-course-view.editing li.activity span.autocompletion img { /* Use the same spacing as the filler. */ margin-right: 0.5rem; margin-left: 0.5rem; } .path-course-view li.activity form.togglecompletion .ajaxworking { width: 16px; height: 16px; position: absolute; right: 22px; top: 3px; background: url([[pix:i/ajaxloader]]) no-repeat; } li.section.hidden span.commands a.editing_hide, li.section.hidden span.commands a.editing_show { cursor: default; } .single-section h3.sectionname { text-align: center; clear: both; } input.titleeditor { width: 330px; vertical-align: text-bottom; } span.editinstructions { position: absolute; top: 0; margin-top: -22px; margin-left: 30px; font-size: 0.8203125rem; padding: 0.1em 0.4em; text-decoration: none; z-index: 9999; border: 0 solid transparent; color: #00434e; background-color: #cce6ea; border-color: #b8dce2; } span.editinstructions hr { border-top-color: #a6d3db; } span.editinstructions .alert-link { color: #00171b; } /* Course drag and drop upload styles */ #dndupload-status { position: fixed; left: 0; width: 40%; margin: 0 30%; padding: 6px; text-align: center; z-index: 1; border: 0 solid transparent; color: #00434e; background-color: #cce6ea; border-color: #b8dce2; } #dndupload-status hr { border-top-color: #a6d3db; } #dndupload-status .alert-link { color: #00171b; } .dndupload-preview { padding: 1rem; background-color: #0f6cbf; color: #fff; text-align: center; font-size: 1.171875rem; max-width: 600px; margin: 0 auto; border-radius: 0.5rem; } .dndupload-hidden { display: none; } /* COURSES LISTINGS AND COURSE SUMMARY */ #page-course-pending .singlebutton, #page-course-index .singlebutton, #page-course-index-category .singlebutton, #page-course-editsection .singlebutton { text-align: center; } #page-admin-course-manage #movecourses td img { margin: 0 0.22em; vertical-align: text-bottom; } #coursesearch { margin-top: 1em; text-align: left; } #page-course-pending .pendingcourserequests { margin-bottom: 1em; } #page-course-pending .pendingcourserequests .singlebutton { display: inline; } #page-course-pending .pendingcourserequests .cell { padding: 0 5px; } #page-course-pending .pendingcourserequests .cell.c6 { white-space: nowrap; } .coursebox { display: flex; flex-direction: column; } .coursebox .info { display: flex; align-items: center; } #frontpage-available-course-list, #frontpage-course-list, .course-search-result { margin-top: 0.5rem; } #frontpage-available-course-list .coursebox, #frontpage-course-list .coursebox, .course-search-result .coursebox { padding: 0.5rem; border: 1px solid #dee2e6; margin-bottom: 0.5rem; border-radius: 0.5rem; } .subcategories .coursebox > .info > .coursename a, #frontpage-category-names .coursebox > .info > .coursename a, #frontpage-category-combo .coursebox > .info > .coursename a { display: block; background-image: url([[pix:moodle|i/course]]); background-repeat: no-repeat; padding-left: 21px; background-position: left 0.2em; } .coursebox > .info > .coursename { font-size: 0.9375rem; font-weight: normal; margin: 5px; padding: 0; } .coursebox .content .teachers li { list-style-type: none; padding: 0; margin: 0; } .coursebox .customfieldname, .coursebox .customfieldseparator { font-weight: 700; } .coursebox .content .coursefile { max-width: 100px; } .coursebox .content .courseimage img { max-width: 100px; max-height: 100px; } .coursebox .content .coursecat, .coursebox .content .summary, .coursebox .content .courseimage, .coursebox .content .coursefile, .coursebox .content .teachers, .coursebox.remotecoursebox .remotecourseinfo, .coursebox .content .customfields-container { margin: 15px 5px 5px; padding: 0; } .category-browse .coursebox .content .coursecat, .category-browse .coursebox .content .summary, .category-browse .coursebox .content .courseimage, .category-browse .coursebox .content .coursefile, .category-browse .coursebox .content .teachers, .category-browse .coursebox.remotecoursebox .remotecourseinfo, .category-browse .coursebox .content .customfields-container { margin-top: 0; } .coursebox.collapsed > .content { display: none; } .courses > .paging.paging-morelink { text-align: center; padding: 1rem; } .course_category_tree .category .numberofcourse { font-size: 0.8203125rem; } .course_category_tree .category > .info > .categoryname { margin: 5px; font-size: 0.9375rem; font-weight: normal; padding: 2px 18px; } .course_category_tree .category.with_children > .info > .categoryname { background-image: url([[pix:moodle|t/expanded]]); background-repeat: no-repeat; background-position: center left; } .course_category_tree .category.with_children.collapsed > .info > .categoryname { background-image: url([[pix:moodle|t/collapsed]]); } /* rtl:raw: .course_category_tree .category.with_children.collapsed > .info > .categoryname { background-image:url([[pix:moodle|t/collapsed_rtl]]); } */ .course_category_tree .category.collapsed > .content { display: none; } .course_category_tree .category > .content { padding-left: 16px; } #page-course-index-category .categorypicker { margin: 10px 0 20px; } /** * Course management page * Palette * * Background (reg) #F5F5F5 * Background (light #fafafa * Background (highlight) #ddffaa * Borders #e1e1e8 */ #course-category-listings { margin-bottom: 0; /** Two column layout */ /** Three column layout */ } #course-category-listings.columns-2 > #course-listing > div { position: relative; left: -1px; } #course-category-listings.columns-3 > #course-listing > div { height: 100%; } #course-category-listings > div > div { min-height: 300px; } #course-category-listings > div > div > ul.ml > li:first-child > div { border-top: 0; } #course-category-listings h3 { margin: 0; padding: 0.4rem 0.6rem 0.3rem; } #course-category-listings h4 { margin: 1rem 0 0; padding: 0.6rem 1rem 0.5rem; } #course-category-listings .moodle-actionmenu { white-space: nowrap; } #course-category-listings .listing-actions { text-align: center; } #course-category-listings .listing-actions > .moodle-actionmenu { display: inline-block; } #course-category-listings ul.ml { list-style: none; margin: 1rem 0; } #course-category-listings ul.ml ul.ml { margin: 0; } #course-category-listings .listitem[data-selected="1"] { border-left: calc(1px + 5px) solid #0f6cbf; padding-left: calc(1.25rem - 5px); } #course-category-listings .listitem:hover { z-index: 2; } #course-category-listings .item-actions { margin-right: 1em; display: inline-block; } #course-category-listings .item-actions.show .menu img { width: 12px; max-width: none; } #course-category-listings .item-actions .menu-action-text { vertical-align: inherit; } #course-category-listings .listitem > div > .float-left { float: left; } #course-category-listings .listitem > div > .float-right { float: right; text-align: right; } #course-category-listings .listitem > div .item-actions .action-show { display: none; } #course-category-listings .listitem > div .item-actions .action-hide { display: inline; } #course-category-listings .listitem > div .without-actions { color: #333; } #course-category-listings .listitem > div .idnumber { margin-right: 2em; } #course-category-listings .listitem[data-visible="0"] { color: #6a737b; } #course-category-listings .listitem[data-visible="0"] > div > a { color: #6a737b; } #course-category-listings .listitem[data-visible="0"] > div .item-actions .action-show { display: inline; } #course-category-listings .listitem[data-visible="0"] > div .item-actions .action-hide { display: none; } #course-category-listings .listitem.highlight { background-color: #fff; } #course-category-listings .listitem.highlight > div, #course-category-listings .listitem.highlight > div:hover, #course-category-listings .listitem.highlight[data-selected="1"] > div { background-color: rgba(0, 0, 0, 0.075); } #course-category-listings #course-listing .listitem .categoryname { display: inline-block; margin-left: 1em; color: #a1a1a8; } #course-category-listings #course-listing .listitem .coursename { display: inline-block; flex-basis: 10rem; } #course-category-listings #course-listing > .firstpage .listitem:first-child > div .item-actions .action-moveup, #course-category-listings #course-listing > .lastpage .listitem:last-child > div .item-actions .action-movedown { display: none; } #course-category-listings #course-listing .bulk-action-checkbox { margin: -2px 6px 0 0; } #course-category-listings #category-listing .listitem.collapsed > ul.ml { display: none; } #course-category-listings #category-listing .listitem:first-child > div .item-actions .action-moveup, #course-category-listings #category-listing .listitem:last-child > div .item-actions .action-movedown { display: none; } #course-category-listings #category-listing .course-count { color: #a1a1a8; margin-right: 2rem; min-width: 3.5em; display: inline-block; } #course-category-listings #category-listing .bulk-action-checkbox { margin-right: -3px; } #course-category-listings #category-listing .category-listing > ul > .listitem:first-child { position: relative; } #course-category-listings #category-listing .category-bulk-actions { margin: 0 0.5em 0.5em; position: relative; } #course-category-listings .detail-pair > * { display: inline-block; } #course-category-listings .detail-pair .pair-key { font-weight: bold; vertical-align: top; } #course-category-listings .detail-pair .pair-key span { margin-right: 1rem; display: block; } #course-category-listings .detail-pair .pair-value select { max-width: 100%; } #course-category-listings .bulk-actions .detail-pair > * { display: block; width: 100%; } #course-category-listings .listing-pagination { text-align: center; } #course-category-listings .listing-pagination .yui3-button { color: #fff; background-color: #008196; border-color: #008196; border: 0; margin: 0.4rem 0.2rem 0.45rem; font-size: 10.4px; } #course-category-listings .listing-pagination .yui3-button:hover { color: #fff; background-color: #006070; border-color: #005563; } #course-category-listings .listing-pagination .yui3-button:focus, #course-category-listings .listing-pagination .yui3-button.focus { color: #fff; background-color: #006070; border-color: #005563; box-shadow: 0 0 0 0.2rem rgba(38, 148, 166, 0.5); } #course-category-listings .listing-pagination .yui3-button.disabled, #course-category-listings .listing-pagination .yui3-button:disabled { color: #fff; background-color: #008196; border-color: #008196; } #course-category-listings .listing-pagination .yui3-button:not(:disabled):not(.disabled):active, #course-category-listings .listing-pagination .yui3-button:not(:disabled):not(.disabled).active, .show > #course-category-listings .listing-pagination .yui3-button.dropdown-toggle { color: #fff; background-color: #005563; border-color: #004a56; } #course-category-listings .listing-pagination .yui3-button:not(:disabled):not(.disabled):active:focus, #course-category-listings .listing-pagination .yui3-button:not(:disabled):not(.disabled).active:focus, .show > #course-category-listings .listing-pagination .yui3-button.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(38, 148, 166, 0.5); } #course-category-listings .listing-pagination .yui3-button.active-page { color: #fff; background-color: #0f6cbf; border-color: #0f6cbf; } #course-category-listings .listing-pagination .yui3-button.active-page:hover { color: #fff; background-color: #0c589c; border-color: #0b5190; } #course-category-listings .listing-pagination .yui3-button.active-page:focus, #course-category-listings .listing-pagination .yui3-button.active-page.focus { color: #fff; background-color: #0c589c; border-color: #0b5190; box-shadow: 0 0 0 0.2rem rgba(51, 130, 201, 0.5); } #course-category-listings .listing-pagination .yui3-button.active-page.disabled, #course-category-listings .listing-pagination .yui3-button.active-page:disabled { color: #fff; background-color: #0f6cbf; border-color: #0f6cbf; } #course-category-listings .listing-pagination .yui3-button.active-page:not(:disabled):not(.disabled):active, #course-category-listings .listing-pagination .yui3-button.active-page:not(:disabled):not(.disabled).active, .show > #course-category-listings .listing-pagination .yui3-button.active-page.dropdown-toggle { color: #fff; background-color: #0b5190; border-color: #0a4b84; } #course-category-listings .listing-pagination .yui3-button.active-page:not(:disabled):not(.disabled):active:focus, #course-category-listings .listing-pagination .yui3-button.active-page:not(:disabled):not(.disabled).active:focus, .show > #course-category-listings .listing-pagination .yui3-button.active-page.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(51, 130, 201, 0.5); } #course-category-listings .listing-pagination-totals { text-align: center; } #course-category-listings .listing-pagination-totals.dimmed { color: #6a737b; margin: 0.4rem 1rem 0.45rem; } #course-category-listings .select-a-category .notifymessage, #course-category-listings .select-a-category .alert { margin: 1em; } #course-category-listings #course-listing .listitem .drag-handle { display: none; } .jsenabled #course-category-listings #course-listing .listitem .drag-handle { display: inline-block; margin: 0 6px 0 0; cursor: pointer; } /** Management header styling **/ .coursecat-management-header { vertical-align: middle; } .coursecat-management-header h2 { display: inline-block; text-align: left; } .coursecat-management-header > div { float: right; } .coursecat-management-header > div > div { margin: 10px 0 10px 1em; display: inline-block; } .coursecat-management-header select { max-width: 300px; cursor: pointer; padding: 0.4em 0.5em 0.45em 1em; vertical-align: baseline; white-space: nowrap; } .coursecat-management-header .view-mode-selector .moodle-actionmenu { white-space: nowrap; display: inline-block; } .coursecat-management-header .view-mode-selector .moodle-actionmenu[data-enhanced].show .menu a { padding-left: 1em; } .course-being-dragged-proxy { border: 0; color: #0f6cbf; vertical-align: middle; padding: 0 0 0 4em; } .course-being-dragged { opacity: 0.5; } /** * Display sizes: * Large displays 1200 + * Default displays 980 1199 * Tablets 768 979 * Small tablets and large phones 481 767 * Phones 0 480 */ @media (min-width: 1200px) and (max-width: 1600px) { #course-category-listings.columns-3 { background-color: #fff; border: 0; } #course-category-listings.columns-3 #category-listing, #course-category-listings.columns-3 #course-listing { width: 50%; } #course-category-listings.columns-3 #category-listing > div, #course-category-listings.columns-3 #course-listing > div, #course-category-listings.columns-3 #course-detail > div { background-color: #fff; } #course-category-listings.columns-3 #course-detail { width: 100%; margin-top: 1em; } } @media (max-width: 1199px) { #course-category-listings.columns-2, #course-category-listings.columns-3 { border: 0; } #course-category-listings.columns-2 #category-listing, #course-category-listings.columns-2 #course-listing, #course-category-listings.columns-2 #course-detail, #course-category-listings.columns-3 #category-listing, #course-category-listings.columns-3 #course-listing, #course-category-listings.columns-3 #course-detail { width: 100%; margin: 0 0 1em; } } .page-settings-menu .menubar > a > .icon { width: auto; height: 32px; font-size: 32px; } .activity-navigation .row { align-items: center; } .activity-navigation #prev-activity-link, .activity-navigation #next-activity-link { white-space: pre-wrap; } .automatic-completion-conditions .badge { font-size: 100%; } /* Variables definition*/ /* Functions/Mixins definition */ /* Activity & Block 'add' buttons */ .activity-add, .block-add { color: #0f6cbf; background-color: #f5f9fc; border-color: #3584c9; border-width: 1px; width: 100%; } .activity-add hr, .block-add hr { border-top-color: #3077b5; } .activity-add .alert-link, .block-add .alert-link { color: #0b5190; } .activity-add .pluscontainer, .block-add .pluscontainer { border: 1px solid #3584c9; border-radius: 50%; width: 32px; height: 32px; } .activity-add:hover, .block-add:hover { cursor: pointer; background-color: #cfe2f2; } .activity-add:hover .activity-add-text, .block-add:hover .activity-add-text { text-decoration: underline; } .block-add { border-radius: 0.5rem; } .activity-add { border-radius: 1rem; } /* Add section */ .changenumsections { border-top: 1px solid #3584c9; } .add-sections .icon { margin-right: 0.25rem; font-size: inherit; } /* Section Expand all/Collapse all */ .section-collapsemenu .collapseall { display: block; } .section-collapsemenu .expandall { display: none; } .section-collapsemenu.collapsed .collapseall { display: none; } .section-collapsemenu.collapsed .expandall { display: block; } /* Course section */ .course-section { list-style: none; padding-left: 0; border-bottom: 1px solid #dee2e6; } .course-section:last-child:not(.section-summary) { border-bottom: 0; } .course-section .sectionbadges .badge { margin-left: 0.5rem; } .course-section .course-section-header.draggable { cursor: move; } .course-section .section_action_menu .dropdown-toggle::after { display: none; } .course-section .summarytext img { border-radius: 1rem; } .course-section .availabilityinfo { margin-top: 0.5rem; padding: 0.25rem 1rem; background-color: #e9ecef; font-size: 0.875em; border-radius: 1rem; } .course-section .availabilityinfo .editavailability a { border-radius: 0.5rem; font-weight: bold; } .course-section .availabilityinfo .editavailability a:hover { background-color: #ced4da; } .course-section .availabilityinfo .editavailability a .icon { font-size: inherit; margin-right: 0.25rem; } .course-section.section-summary { padding-left: 1rem; padding-right: 1rem; margin-bottom: 0.5rem; margin-top: 0.5rem; border-radius: 0.5rem; } .course-section .section-summary-activities .activity-count { color: #6a737b; font-size: 0.8203125rem; margin: 3px; white-space: nowrap; display: inline-block; } .course-section.dndupload-dropzone { border: 2px dashed #0f6cbf; padding-left: 2px; padding-right: 2px; position: relative; } .course-section.dndupload-dropzone .dndupload-preview-overlay { background-color: #fff; opacity: 0.8; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .course-section.dndupload-dropzone .dndupload-preview-wrapper { position: absolute; top: 0; padding: 2rem; width: 100%; } /* Re-style ordered list in course content */ .course-content .activity-altcontent ul { list-style: disc; } .course-content .activity-altcontent ul ul { list-style: circle; } .course-content .activity-altcontent ul ul ul { list-style: square; } /* Activity cards */ .activity-item { position: relative; border-radius: 1rem; } .activity-item:not(.activityinline) { border: 1px solid #dee2e6; padding: 1rem; } .activity-item.activityinline { padding: 1rem 0; } .activity-item.hiddenactivity { background-color: #f8f9fa; } .activity-item.hiddenactivity .activityiconcontainer, .activity-item.hiddenactivity .badge { mix-blend-mode: multiply; } .activity-item .activity-grid { display: grid; align-items: center; grid-template-columns: min-content 1fr min-content min-content min-content; grid-template-rows: 1fr repeat(5, min-content); grid-template-areas: "icon name groupmode completion actions" "icon visibility groupmode completion actions" "icon dates groupmode completion actions" "altcontent altcontent altcontent altcontent altcontent" "afterlink afterlink afterlink afterlink afterlink" "availability availability availability availability availability"; } @media (max-width: 575.98px) { .activity-item .activity-grid { grid-template-columns: min-content 1fr min-content min-content min-content; grid-template-rows: 1fr repeat(4, min-content); grid-template-areas: "icon name actions" "icon visibility actions" "dates dates dates" "groupmode groupmode groupmode" "completion completion completion" "altcontent altcontent altcontent" "afterlink afterlink afterlink" "availability availability availability"; } } .activity-item .activity-grid.noname-grid { grid-template-columns: min-content min-content 1fr min-content; grid-template-areas: "visibility groupmode completion actions" "altcontent altcontent altcontent altcontent" "afterlink afterlink afterlink afterlink" "availability availability availability availability"; } @media (max-width: 575.98px) { .activity-item .activity-grid.noname-grid { grid-template-columns: 1fr min-content; grid-template-areas: "visibility actions" "altcontent altcontent" "groupmode groupmode" "afterlink afterlink" "completion completion" "availability availability"; } } .activity-item .activity-actions { grid-area: actions; } .activity-item .activity-actions .actions { position: relative; } .activity-item .activity-actions .action-menu .btn.btn-icon { height: 32px; width: 32px; border-radius: 0.5rem; } .activity-item .activity-icon { grid-area: icon; } .activity-item .activity-dates { grid-area: dates; font-size: 0.875em; color: #495057; display: flex; flex-wrap: wrap; column-gap: 0.75rem; } @media (max-width: 575.98px) { .activity-item .activity-dates { margin-top: 0.5rem; } } .activity-item .activity-name-area { grid-area: name; } .activity-item .activity-name-area .activityname .afterlink { margin-left: 0.5rem; } .activity-item .activity-name-area .activityname .inplaceeditable .quickeditlink { position: relative; z-index: 2; margin-left: 0.5rem; } .activity-item .activity-name-area .activitybadge.badge-none { font-weight: normal; font-size: 0.875em; padding: 0; } .activity-item .activity-completion { grid-area: completion; justify-self: end; } .activity-item .activity-completion button.btn, .activity-item .activity-completion a[role=button].btn { color: #1d2125; background-color: #fff; border-color: #ced4da; min-height: 32px; font-weight: bold; border-radius: 0.5rem; } .activity-item .activity-completion button.btn:hover, .activity-item .activity-completion a[role=button].btn:hover { color: #fff; background-color: #6a737b; border-color: #b1bbc4; } .activity-item .activity-completion button.btn:focus, .activity-item .activity-completion button.btn.focus, .activity-item .activity-completion a[role=button].btn:focus, .activity-item .activity-completion a[role=button].btn.focus { color: #fff; background-color: #6a737b; border-color: #b1bbc4; box-shadow: 0 0 0 0.2rem rgba(179, 185, 191, 0.5); } .activity-item .activity-completion button.btn.disabled, .activity-item .activity-completion button.btn:disabled, .activity-item .activity-completion a[role=button].btn.disabled, .activity-item .activity-completion a[role=button].btn:disabled { color: #1d2125; background-color: #fff; border-color: #ced4da; } .activity-item .activity-completion button.btn:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn.dropdown-toggle, .activity-item .activity-completion a[role=button].btn:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn.dropdown-toggle { color: #1d2125; background-color: #e6e6e6; border-color: #aab4bf; } .activity-item .activity-completion button.btn:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(179, 185, 191, 0.5); } .activity-item .activity-completion button.btn .icon, .activity-item .activity-completion a[role=button].btn .icon { font-size: inherit; } .activity-item .activity-completion button.btn-primary, .activity-item .activity-completion a[role=button].btn-primary { color: #1d2125; background-color: #cfe2f2; border-color: #cfe2f2; color: #083863; } .activity-item .activity-completion button.btn-primary:hover, .activity-item .activity-completion a[role=button].btn-primary:hover { color: #fff; background-color: #0f6cbf; border-color: #a7cae7; } .activity-item .activity-completion button.btn-primary:focus, .activity-item .activity-completion button.btn-primary.focus, .activity-item .activity-completion a[role=button].btn-primary:focus, .activity-item .activity-completion a[role=button].btn-primary.focus { color: #fff; background-color: #0f6cbf; border-color: #a7cae7; box-shadow: 0 0 0 0.2rem rgba(180, 197, 211, 0.5); } .activity-item .activity-completion button.btn-primary.disabled, .activity-item .activity-completion button.btn-primary:disabled, .activity-item .activity-completion a[role=button].btn-primary.disabled, .activity-item .activity-completion a[role=button].btn-primary:disabled { color: #1d2125; background-color: #cfe2f2; border-color: #cfe2f2; } .activity-item .activity-completion button.btn-primary:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn-primary:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn-primary.dropdown-toggle, .activity-item .activity-completion a[role=button].btn-primary:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn-primary:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn-primary.dropdown-toggle { color: #1d2125; background-color: #a7cae7; border-color: #9dc4e4; } .activity-item .activity-completion button.btn-primary:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn-primary:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn-primary.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn-primary:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn-primary:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn-primary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(180, 197, 211, 0.5); } .activity-item .activity-completion button.btn-primary:hover, .activity-item .activity-completion a[role=button].btn-primary:hover { color: #fff; } .activity-item .activity-completion button.btn-secondary, .activity-item .activity-completion a[role=button].btn-secondary { color: #1d2125; background-color: #f5f6f8; border-color: #f5f6f8; color: #6b6e71; } .activity-item .activity-completion button.btn-secondary:hover, .activity-item .activity-completion a[role=button].btn-secondary:hover { color: #1d2125; background-color: #ced4da; border-color: #d7dbe3; } .activity-item .activity-completion button.btn-secondary:focus, .activity-item .activity-completion button.btn-secondary.focus, .activity-item .activity-completion a[role=button].btn-secondary:focus, .activity-item .activity-completion a[role=button].btn-secondary.focus { color: #1d2125; background-color: #ced4da; border-color: #d7dbe3; box-shadow: 0 0 0 0.2rem rgba(213, 214, 216, 0.5); } .activity-item .activity-completion button.btn-secondary.disabled, .activity-item .activity-completion button.btn-secondary:disabled, .activity-item .activity-completion a[role=button].btn-secondary.disabled, .activity-item .activity-completion a[role=button].btn-secondary:disabled { color: #1d2125; background-color: #f5f6f8; border-color: #f5f6f8; } .activity-item .activity-completion button.btn-secondary:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn-secondary:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn-secondary.dropdown-toggle, .activity-item .activity-completion a[role=button].btn-secondary:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn-secondary:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn-secondary.dropdown-toggle { color: #1d2125; background-color: #d7dbe3; border-color: #d0d4de; } .activity-item .activity-completion button.btn-secondary:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn-secondary.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn-secondary:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn-secondary.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(213, 214, 216, 0.5); } .activity-item .activity-completion button.btn-secondary:hover, .activity-item .activity-completion a[role=button].btn-secondary:hover { color: #1d2125; } .activity-item .activity-completion button.btn-success, .activity-item .activity-completion a[role=button].btn-success { color: #1d2125; background-color: #d7e4d6; border-color: #d7e4d6; color: #1c3f1a; } .activity-item .activity-completion button.btn-success:hover, .activity-item .activity-completion a[role=button].btn-success:hover { color: #fff; background-color: #357a32; border-color: #b9d0b7; } .activity-item .activity-completion button.btn-success:focus, .activity-item .activity-completion button.btn-success.focus, .activity-item .activity-completion a[role=button].btn-success:focus, .activity-item .activity-completion a[role=button].btn-success.focus { color: #fff; background-color: #357a32; border-color: #b9d0b7; box-shadow: 0 0 0 0.2rem rgba(187, 199, 187, 0.5); } .activity-item .activity-completion button.btn-success.disabled, .activity-item .activity-completion button.btn-success:disabled, .activity-item .activity-completion a[role=button].btn-success.disabled, .activity-item .activity-completion a[role=button].btn-success:disabled { color: #1d2125; background-color: #d7e4d6; border-color: #d7e4d6; } .activity-item .activity-completion button.btn-success:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn-success:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn-success.dropdown-toggle, .activity-item .activity-completion a[role=button].btn-success:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn-success:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn-success.dropdown-toggle { color: #1d2125; background-color: #b9d0b7; border-color: #b2cbb0; } .activity-item .activity-completion button.btn-success:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn-success:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn-success.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn-success:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn-success:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn-success.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(187, 199, 187, 0.5); } .activity-item .activity-completion button.btn-success:hover, .activity-item .activity-completion a[role=button].btn-success:hover { color: #fff; } .activity-item .activity-completion button.btn-info, .activity-item .activity-completion a[role=button].btn-info { color: #1d2125; background-color: #cce6ea; border-color: #cce6ea; color: #00434e; } .activity-item .activity-completion button.btn-info:hover, .activity-item .activity-completion a[role=button].btn-info:hover { color: #fff; background-color: #008196; border-color: #a8d4db; } .activity-item .activity-completion button.btn-info:focus, .activity-item .activity-completion button.btn-info.focus, .activity-item .activity-completion a[role=button].btn-info:focus, .activity-item .activity-completion a[role=button].btn-info.focus { color: #fff; background-color: #008196; border-color: #a8d4db; box-shadow: 0 0 0 0.2rem rgba(178, 200, 204, 0.5); } .activity-item .activity-completion button.btn-info.disabled, .activity-item .activity-completion button.btn-info:disabled, .activity-item .activity-completion a[role=button].btn-info.disabled, .activity-item .activity-completion a[role=button].btn-info:disabled { color: #1d2125; background-color: #cce6ea; border-color: #cce6ea; } .activity-item .activity-completion button.btn-info:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn-info:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn-info.dropdown-toggle, .activity-item .activity-completion a[role=button].btn-info:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn-info:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn-info.dropdown-toggle { color: #1d2125; background-color: #a8d4db; border-color: #9fd0d7; } .activity-item .activity-completion button.btn-info:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn-info:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn-info.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn-info:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn-info:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn-info.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(178, 200, 204, 0.5); } .activity-item .activity-completion button.btn-info:hover, .activity-item .activity-completion a[role=button].btn-info:hover { color: #fff; } .activity-item .activity-completion button.btn-warning, .activity-item .activity-completion a[role=button].btn-warning { color: #1d2125; background-color: #fcefdc; border-color: #fcefdc; color: #7d5a29; } .activity-item .activity-completion button.btn-warning:hover, .activity-item .activity-completion a[role=button].btn-warning:hover { color: #1d2125; background-color: #f0ad4e; border-color: #f8daad; } .activity-item .activity-completion button.btn-warning:focus, .activity-item .activity-completion button.btn-warning.focus, .activity-item .activity-completion a[role=button].btn-warning:focus, .activity-item .activity-completion a[role=button].btn-warning.focus { color: #1d2125; background-color: #f0ad4e; border-color: #f8daad; box-shadow: 0 0 0 0.2rem rgba(219, 208, 193, 0.5); } .activity-item .activity-completion button.btn-warning.disabled, .activity-item .activity-completion button.btn-warning:disabled, .activity-item .activity-completion a[role=button].btn-warning.disabled, .activity-item .activity-completion a[role=button].btn-warning:disabled { color: #1d2125; background-color: #fcefdc; border-color: #fcefdc; } .activity-item .activity-completion button.btn-warning:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn-warning:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn-warning.dropdown-toggle, .activity-item .activity-completion a[role=button].btn-warning:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn-warning:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn-warning.dropdown-toggle { color: #1d2125; background-color: #f8daad; border-color: #f7d4a1; } .activity-item .activity-completion button.btn-warning:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn-warning:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn-warning.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn-warning:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn-warning:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn-warning.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(219, 208, 193, 0.5); } .activity-item .activity-completion button.btn-warning:hover, .activity-item .activity-completion a[role=button].btn-warning:hover { color: #1d2125; } .activity-item .activity-completion button.btn-danger, .activity-item .activity-completion a[role=button].btn-danger { color: #1d2125; background-color: #f4d6d2; border-color: #f4d6d2; color: #691911; } .activity-item .activity-completion button.btn-danger:hover, .activity-item .activity-completion a[role=button].btn-danger:hover { color: #fff; background-color: #ca3120; border-color: #eab1a9; } .activity-item .activity-completion button.btn-danger:focus, .activity-item .activity-completion button.btn-danger.focus, .activity-item .activity-completion a[role=button].btn-danger:focus, .activity-item .activity-completion a[role=button].btn-danger.focus { color: #fff; background-color: #ca3120; border-color: #eab1a9; box-shadow: 0 0 0 0.2rem rgba(212, 187, 184, 0.5); } .activity-item .activity-completion button.btn-danger.disabled, .activity-item .activity-completion button.btn-danger:disabled, .activity-item .activity-completion a[role=button].btn-danger.disabled, .activity-item .activity-completion a[role=button].btn-danger:disabled { color: #1d2125; background-color: #f4d6d2; border-color: #f4d6d2; } .activity-item .activity-completion button.btn-danger:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn-danger:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn-danger.dropdown-toggle, .activity-item .activity-completion a[role=button].btn-danger:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn-danger:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn-danger.dropdown-toggle { color: #1d2125; background-color: #eab1a9; border-color: #e7a79f; } .activity-item .activity-completion button.btn-danger:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn-danger:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn-danger.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn-danger:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn-danger:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn-danger.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(212, 187, 184, 0.5); } .activity-item .activity-completion button.btn-danger:hover, .activity-item .activity-completion a[role=button].btn-danger:hover { color: #fff; } .activity-item .activity-completion button.btn-light, .activity-item .activity-completion a[role=button].btn-light { color: #1d2125; background-color: #fefefe; border-color: #fefefe; color: #818182; } .activity-item .activity-completion button.btn-light:hover, .activity-item .activity-completion a[role=button].btn-light:hover { color: #1d2125; background-color: #f8f9fa; border-color: #e5e5e5; } .activity-item .activity-completion button.btn-light:focus, .activity-item .activity-completion button.btn-light.focus, .activity-item .activity-completion a[role=button].btn-light:focus, .activity-item .activity-completion a[role=button].btn-light.focus { color: #1d2125; background-color: #f8f9fa; border-color: #e5e5e5; box-shadow: 0 0 0 0.2rem rgba(220, 221, 221, 0.5); } .activity-item .activity-completion button.btn-light.disabled, .activity-item .activity-completion button.btn-light:disabled, .activity-item .activity-completion a[role=button].btn-light.disabled, .activity-item .activity-completion a[role=button].btn-light:disabled { color: #1d2125; background-color: #fefefe; border-color: #fefefe; } .activity-item .activity-completion button.btn-light:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn-light:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn-light.dropdown-toggle, .activity-item .activity-completion a[role=button].btn-light:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn-light:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn-light.dropdown-toggle { color: #1d2125; background-color: #e5e5e5; border-color: #dedede; } .activity-item .activity-completion button.btn-light:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn-light:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn-light.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn-light:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn-light:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn-light.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(220, 221, 221, 0.5); } .activity-item .activity-completion button.btn-light:hover, .activity-item .activity-completion a[role=button].btn-light:hover { color: #1d2125; } .activity-item .activity-completion button.btn-dark, .activity-item .activity-completion a[role=button].btn-dark { color: #1d2125; background-color: #d6d8d9; border-color: #d6d8d9; color: #1b1e21; } .activity-item .activity-completion button.btn-dark:hover, .activity-item .activity-completion a[role=button].btn-dark:hover { color: #fff; background-color: #343a40; border-color: #bcbfc0; } .activity-item .activity-completion button.btn-dark:focus, .activity-item .activity-completion button.btn-dark.focus, .activity-item .activity-completion a[role=button].btn-dark:focus, .activity-item .activity-completion a[role=button].btn-dark.focus { color: #fff; background-color: #343a40; border-color: #bcbfc0; box-shadow: 0 0 0 0.2rem rgba(186, 189, 190, 0.5); } .activity-item .activity-completion button.btn-dark.disabled, .activity-item .activity-completion button.btn-dark:disabled, .activity-item .activity-completion a[role=button].btn-dark.disabled, .activity-item .activity-completion a[role=button].btn-dark:disabled { color: #1d2125; background-color: #d6d8d9; border-color: #d6d8d9; } .activity-item .activity-completion button.btn-dark:not(:disabled):not(.disabled):active, .activity-item .activity-completion button.btn-dark:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion button.btn-dark.dropdown-toggle, .activity-item .activity-completion a[role=button].btn-dark:not(:disabled):not(.disabled):active, .activity-item .activity-completion a[role=button].btn-dark:not(:disabled):not(.disabled).active, .show > .activity-item .activity-completion a[role=button].btn-dark.dropdown-toggle { color: #1d2125; background-color: #bcbfc0; border-color: #b5b9ba; } .activity-item .activity-completion button.btn-dark:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion button.btn-dark:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion button.btn-dark.dropdown-toggle:focus, .activity-item .activity-completion a[role=button].btn-dark:not(:disabled):not(.disabled):active:focus, .activity-item .activity-completion a[role=button].btn-dark:not(:disabled):not(.disabled).active:focus, .show > .activity-item .activity-completion a[role=button].btn-dark.dropdown-toggle:focus { box-shadow: 0 0 0 0.2rem rgba(186, 189, 190, 0.5); } .activity-item .activity-completion button.btn-dark:hover, .activity-item .activity-completion a[role=button].btn-dark:hover { color: #fff; } @media (max-width: 575.98px) { .activity-item .activity-completion { width: 100%; margin-top: 0.5rem; } .activity-item .activity-completion button { width: 100%; } } .activity-item .activity-completion .completion-dialog { color: #495057; font-size: 0.8203125rem; min-width: 12rem; } .activity-item .activity-completion .completion-dialog .icon { font-size: 0.8203125rem; width: 0.8203125rem; height: 0.8203125rem; margin-right: 0.25rem; } .activity-item .activity-completion .completion-dialog .editcompletion a { border-radius: 0.5rem; color: #495057; font-weight: bold; text-decoration: none; } .activity-item .activity-completion .completion-dialog .editcompletion a:hover { background-color: #e9ecef; } .activity-item .activity-groupmode-info { grid-area: groupmode; justify-self: end; } .activity-item .activity-groupmode-info .groupmode-information { height: 32px; width: 32px; border-radius: 0.5rem; } .activity-item .activity-groupmode-info .groupmode-icon-info { display: none; } @media (max-width: 575.98px) { .activity-item .activity-groupmode-info { width: 100%; margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px solid #dee2e6; } .activity-item .activity-groupmode-info .groupmode-information { width: auto; font-size: inherit; padding: 0 0.5rem; } .activity-item .activity-groupmode-info .groupmode-icon-info { display: inline; } .activity-item .activity-groupmode-info .v-parent-focus { opacity: 1; visibility: visible; } } .activity-item .activity-badges { grid-area: visibility; } .activity-item .activity-badges .badge { font-weight: normal; } .activity-item .activity-badges .badge .icon { font-size: 12px; width: 12px; height: 12px; } .activity-item .activity-altcontent { grid-area: altcontent; margin-top: 0.25rem; } .activity-item .activity-altcontent.activity-description { margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px solid #dee2e6; font-size: 0.875em; } .activity-item .activity-altcontent img { border-radius: 1rem; } .activity-item .activity-availability { grid-area: availability; } .activity-item .activity-afterlink { grid-area: afterlink; margin-top: 0.5rem; padding-top: 0.5rem; border-top: 1px solid #dee2e6; } .activity-item .no-overflow { width: 100%; } @media (min-width: 768px) { .activity-item:not(.activityinline) { padding: 1rem; } } /* Activity card in editing mode */ .editing .activity-item { cursor: move; } .editing .activity-item .a { cursor: pointer; } .editing .activity-item:hover, .editing .activity-item.selected { color: #1d2125; background-color: #f5f9fc; border-color: #3584c9; } .editing .activity-item:hover hr, .editing .activity-item.selected hr { border-top-color: #3077b5; } .editing .activity-item:hover .alert-link, .editing .activity-item.selected .alert-link { color: #070808; } .editing .activity-item:hover .activityiconcontainer, .editing .activity-item:hover .badge, .editing .activity-item.selected .activityiconcontainer, .editing .activity-item.selected .badge { mix-blend-mode: multiply; } .section .draggable .activity-item .dragicon { display: none; } /* Activity divider */ .activity:focus-within + .activity div.divider button, .course-section-header:focus-within + .content .section .activity:first-child div.divider button, .content .section .activity:focus-within div.divider button { visibility: visible; } .activity div.divider { height: 2rem; margin-top: -1.25rem; margin-bottom: -0.75rem; z-index: 5; } .activity div.divider button { border-radius: 100%; width: 2rem; height: 2rem; position: relative; left: 50%; opacity: 0; visibility: hidden; transition: visibility 0.1s; margin: 0; padding: 0; } .activity div.divider button i.icon { height: 1.5rem; width: 1.5rem; font-size: 1.5rem; position: absolute; left: calc(0.25rem - 1px); top: calc(0.25rem - 0.5px); } .activity:not(.dragging) div.divider:hover button, .activity:not(.dragging) div.divider:focus button, .activity:not(.dragging) div.divider:focus-within button { opacity: 1; visibility: visible; } /* Bulk editing */ .bulkenabled .bulk-hidden { display: none !important; } .activity-item .bulkselect { position: absolute; left: -2rem; } .course-section-header .bulkselect { left: -2rem; position: relative; width: 0; } @media (max-width: 767.98px) { .bulkenabled .course-content { margin-left: 2rem; } } /* Activity completion */ .defaultactivitycompletion-item a { color: #000; text-decoration: none; } .defaultactivitycompletion-item a img { filter: invert(25%) sepia(86%) saturate(1158%) hue-rotate(189deg) brightness(104%) contrast(92%); } .defaultactivitycompletion-item .activityicon { width: 32px; height: 32px; } /* Anchor link offset fix. This makes hash links scroll 60px down to account for the fixed header. */ :target { scroll-margin-top: 70px; } .pagelayout-embedded :target { padding-top: initial; margin-top: initial; } #nav-drawer.closed { left: -305px; } #nav-drawer[aria-hidden=true] .list-group-item { display: none; } /* Use a variable for the drawer background colors. */ [data-region=drawer] { position: fixed; width: 285px; top: 60px; height: calc(100% - 60px); overflow-y: auto; -webkit-overflow-scrolling: touch; z-index: 999; background-color: #f2f2f2; transition: right 0.5s ease, left 0.5s ease; } @media (prefers-reduced-motion: reduce) { [data-region=drawer] { transition: none; } } @media (min-width: 576px) { [data-region=drawer] { padding: 20px 20px; } .jsenabled .btn-footer-popover, .jsenabled .btn-footer-communication { transition: 0.2s; } } @media (min-width: 576px) and (prefers-reduced-motion: reduce) { .jsenabled .btn-footer-popover, .jsenabled .btn-footer-communication { transition: none; } } #nav-drawer { right: auto; left: 0; /* Override the z-indexes defined in bootstrap/_list-group.scss that lead to side effects on the user tours positioning. */ } #nav-drawer .list-group-item-action.active, #nav-drawer .list-group-item.active { z-index: inherit; } #nav-drawer .list-group-item-action.active + .list-group-item, #nav-drawer .list-group-item.active + .list-group-item { border-top: none; } #nav-drawer .list-group ul { list-style: none; padding: 0; margin: 0; } #nav-drawer .list-group li { margin-bottom: -1px; } #nav-drawer .list-group li:last-child { margin-bottom: 0; } body.drawer-ease { transition: margin-left 0.5s ease, margin-right 0.5s ease; } @media (prefers-reduced-motion: reduce) { body.drawer-ease { transition: none; } } @media (min-width: 768px) { body:not(.uses-drawers).drawer-open-left { margin-left: 285px; } } @media (min-width: 768px) { body.drawer-open-left #page.drawers { margin-left: 285px; padding-left: 1rem; } } @media (min-width: 768px) { body.drawer-open-right { margin-right: 315px; } } [data-region=right-hand-drawer] { display: flex; flex-direction: column; transition: right 0.2s ease-in-out; } @media (prefers-reduced-motion: reduce) { [data-region=right-hand-drawer] { transition: none; } } [data-region=right-hand-drawer].drawer { z-index: 1021; position: fixed; top: 60px; right: 0; height: calc(100% - 60px); width: 320px; box-shadow: -2px 2px 4px rgba(0, 0, 0, 0.25); padding: 0; visibility: visible; opacity: 1; } [data-region=right-hand-drawer].hidden { display: block; right: -320px; visibility: hidden; opacity: 0; transition: right 0.2s ease-in-out, visibility 0s ease-in-out 0.2s, opacity 0s ease-in-out 0.2s; } @media (prefers-reduced-motion: reduce) { [data-region=right-hand-drawer].hidden { transition: none; } } @media (max-width: 767.98px) { [data-region=right-hand-drawer].drawer { top: 0; height: 100%; z-index: 1031; } body.drawer-open-left, body.drawer-open-right { overflow: hidden; } } .dir-rtl [data-region=right-hand-drawer] { box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.25); } .drawer { background-color: #f8f9fa; z-index: 1015; position: fixed; height: 100vh; top: 0; } @media (max-width: 991.98px) { .drawer { z-index: 1035; } } .drawer.not-initialized { display: none; } .drawer.drawer-right { transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease; width: 315px; max-width: 315px; right: calc(-315px + -10px); visibility: hidden; } @media (prefers-reduced-motion: reduce) { .drawer.drawer-right { transition: none; } } .drawer.drawer-right.show { right: 0; visibility: visible; } .drawer.drawer-right .drawertoggle { margin-left: auto; margin-right: 5px; } .drawer.drawer-left { transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease; width: 285px; max-width: 285px; left: calc(-285px + -10px); visibility: hidden; } @media (prefers-reduced-motion: reduce) { .drawer.drawer-left { transition: none; } } .drawer.drawer-left.show { left: 0; visibility: visible; } .drawer.drawer-left .drawertoggle { margin-right: auto; margin-left: 5px; } .drawer.drawer-bottom { bottom: -110%; } .drawer.drawer-bottom.show { bottom: 0; } @media (min-width: 992px) { .drawer#theme_boost-drawers-blocks:focus-within { z-index: 1031; } .drawer.not-initialized { display: block; } } .drawer-md, .drawer-sm { display: none; } .drawerheader { padding: 0; height: 60px; display: flex; align-items: center; } .drawer.scrolled .drawerheader { box-shadow: 0 8px 11px -7px rgba(0, 0, 0, 0.25); } @media (max-width: 991.98px) { .drawer-md { display: block; background-color: #f8f9fa; z-index: 1015; position: fixed; height: 100vh; top: 0; } } @media (max-width: 991.98px) and (max-width: 991.98px) { .drawer-md { z-index: 1035; } } @media (max-width: 991.98px) { .drawer-md.not-initialized { display: none; } } @media (max-width: 991.98px) { .drawer-md.drawer-right { transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease; width: 315px; max-width: 315px; right: calc(-315px + -10px); visibility: hidden; } } @media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { .drawer-md.drawer-right { transition: none; } } @media (max-width: 991.98px) { .drawer-md.drawer-right.show { right: 0; visibility: visible; } } @media (max-width: 991.98px) { .drawer-md.drawer-right .drawertoggle { margin-left: auto; margin-right: 5px; } } @media (max-width: 991.98px) { .drawer-md.drawer-left { transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease; width: 285px; max-width: 285px; left: calc(-285px + -10px); visibility: hidden; } } @media (max-width: 991.98px) and (prefers-reduced-motion: reduce) { .drawer-md.drawer-left { transition: none; } } @media (max-width: 991.98px) { .drawer-md.drawer-left.show { left: 0; visibility: visible; } } @media (max-width: 991.98px) { .drawer-md.drawer-left .drawertoggle { margin-right: auto; margin-left: 5px; } } @media (max-width: 991.98px) { .drawer-md.drawer-bottom { bottom: -110%; } .drawer-md.drawer-bottom.show { bottom: 0; } } @media (max-width: 767.98px) { .drawer-sm { display: block; background-color: #f8f9fa; z-index: 1015; position: fixed; height: 100vh; top: 0; } } @media (max-width: 767.98px) and (max-width: 991.98px) { .drawer-sm { z-index: 1035; } } @media (max-width: 767.98px) { .drawer-sm.not-initialized { display: none; } } @media (max-width: 767.98px) { .drawer-sm.drawer-right { transition: right 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease, transform 0.5s ease; width: 315px; max-width: 315px; right: calc(-315px + -10px); visibility: hidden; } } @media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { .drawer-sm.drawer-right { transition: none; } } @media (max-width: 767.98px) { .drawer-sm.drawer-right.show { right: 0; visibility: visible; } } @media (max-width: 767.98px) { .drawer-sm.drawer-right .drawertoggle { margin-left: auto; margin-right: 5px; } } @media (max-width: 767.98px) { .drawer-sm.drawer-left { transition: left 0.2s ease, top 0.2s ease, bottom 0.2s ease, visibility 0.2s ease; width: 285px; max-width: 285px; left: calc(-285px + -10px); visibility: hidden; } } @media (max-width: 767.98px) and (prefers-reduced-motion: reduce) { .drawer-sm.drawer-left { transition: none; } } @media (max-width: 767.98px) { .drawer-sm.drawer-left.show { left: 0; visibility: visible; } } @media (max-width: 767.98px) { .drawer-sm.drawer-left .drawertoggle { margin-right: auto; margin-left: 5px; } } @media (max-width: 767.98px) { .drawer-sm.drawer-bottom { bottom: -110%; } .drawer-sm.drawer-bottom.show { bottom: 0; } } .drawercontent { position: relative; z-index: -1; height: calc(100% - 60px); display: flex; flex-direction: column; flex-wrap: nowrap; overflow-y: auto; padding: 0.4rem; scrollbar-width: thin; scrollbar-color: #6a737b #f8f9fa; } .drawercontent .dropdown-menu .dropdown-item { width: 220px; white-space: normal; } .drawercontent::-webkit-scrollbar { width: 12px; } .drawercontent::-webkit-scrollbar-track { background: #f8f9fa; } .drawercontent::-webkit-scrollbar-thumb { background-color: #6a737b; border-radius: 20px; border: 3px solid #f8f9fa; } .drawercontent::-webkit-scrollbar-thumb:hover { background-color: #495057; } .fp-content-center { height: 100%; width: 100%; display: table-cell; vertical-align: middle; } .fp-content-hidden { visibility: hidden; } .yui3-panel-focused { outline: none; } .fp-panel-button { background: #fff; padding: 3px 20px 2px 20px; text-align: center; margin: 10px; border-radius: 10px; display: inline-block; } .filepicker .yui3-widget-content-expanded { height: auto; } /* The javascript is adding a style="height: 0px;" to this element - we need to set the min-height so the height is ignored. */ .filepicker .moodle-dialogue-bd { min-height: 520px; } .file-picker .fp-navbar { min-height: 40px; padding: 4px; } .fp-navbar { border-color: #8f959e; border-bottom: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; } .file-picker .fp-content { border-top: 0; background: #fff; clear: none; overflow: auto; height: 452px; } .filepicker.moodle-dialogue-fullscreen .file-picker .fp-content { width: 100%; } .file-picker .fp-content-loading { height: 100%; width: 100%; display: table; text-align: center; } .file-picker .fp-content .fp-object-container { width: 98%; height: 98%; } .file-picker .fp-def-search { margin-top: 0; } .file-picker .fp-list { list-style-type: none; padding: 0; float: left; width: 100%; margin: 0; } .file-picker .fp-list .fp-repo a { display: block; padding: 0.5em 0.7em; } .file-picker .fp-list .fp-repo.active { background: #f2f2f2; } .file-picker .fp-list .fp-repo-icon { padding: 0 7px 0 5px; width: 16px; height: 16px; } .fp-toolbar { float: left; } .fp-toolbar.empty { display: none; } .fp-toolbar .disabled { display: none; } .fp-toolbar div { display: block; float: left; margin-right: 4px; } .fp-toolbar img { vertical-align: -15%; margin-right: 5px; } .fp-viewbar:not(.disabled) a.checked { background-color: #b1bbc4; color: #1d2125; border-color: #aab4bf; } .fp-viewbar.disabled a { pointer-events: none; opacity: 0.65; } .file-picker .fp-clear-left { clear: left; } .fp-pathbar.empty { display: none; } .fp-pathbar .fp-path-folder { background: url("[[pix:theme|fp/path_folder]]") left 3px no-repeat; background-size: 12px 12px; height: 12px; margin-left: 12px; } /*rtl:raw: .fp-pathbar .fp-path-folder { background-image: url('[[pix:theme|fp/path_folder_rtl]]'); } */ .fp-pathbar .fp-path-folder-name { margin-left: 24px; } .fp-iconview .fp-file { float: left; text-align: center; position: relative; margin: 10px 10px 35px; } .fp-iconview .fp-thumbnail { min-width: 110px; min-height: 110px; line-height: 110px; text-align: center; border: 1px solid #fff; display: block; } .fp-iconview .fp-thumbnail img { border: 1px solid #ddd; padding: 3px; vertical-align: middle; } .fp-iconview .fp-thumbnail:hover { background: #fff; border: 1px solid #ddd; } .fp-iconview .fp-filename-field { height: 33px; margin-top: 3px; word-wrap: break-word; overflow: hidden; position: absolute; } .fp-iconview .fp-file:focus .fp-filename-field, .fp-iconview .fp-file:hover .fp-filename-field { overflow: visible; z-index: 1000; } .fp-iconview .fp-file:focus .fp-filename, .fp-iconview .fp-file:hover .fp-filename { overflow: inherit; white-space: normal; text-overflow: inherit; } .fp-iconview .fp-filename-field .fp-filename { background: #fff; padding-top: 5px; padding-bottom: 12px; min-width: 112px; } .file-picker .yui3-datatable table { border: 0 solid #bbb; width: 100%; } .file-picker .ygtvtn, .filemanager .ygtvtn { /*rtl:remove*/ background: url("[[pix:moodle|y/tn]]") 0 0 no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/tn_rtl]]') 0 0 no-repeat; */ width: 19px; height: 32px; } .file-picker .ygtvtm, .filemanager .ygtvtm { background: url("[[pix:moodle|y/tm]]") 0 10px no-repeat; /*rtl:raw: background-position: 2px 10px; */ width: 13px; height: 12px; cursor: pointer; } .file-picker .ygtvtmh, .filemanager .ygtvtmh { background: url("[[pix:moodle|y/tm]]") 0 10px no-repeat; /*rtl:raw: background-position: 2px 10px; */ width: 13px; height: 12px; cursor: pointer; } .file-picker .ygtvtp, .filemanager .ygtvtp { /*rtl:remove*/ background: url("[[pix:moodle|y/tp]]") 0 10px no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/tp_rtl]]') 2px 10px no-repeat; */ width: 13px; height: 12px; cursor: pointer; } .file-picker .ygtvtph, .filemanager .ygtvtph { /*rtl:remove*/ background: url("[[pix:moodle|y/tp]]") 0 10px no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/tp_rtl]]') 2px 10px no-repeat; */ width: 13px; height: 22px; cursor: pointer; } .file-picker .ygtvln, .filemanager .ygtvln { /*rtl:remove*/ background: url("[[pix:moodle|y/ln]]") 0 0 no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/ln_rtl]]') 0 0 no-repeat; */ width: 19px; height: 32px; } .file-picker .ygtvlm, .filemanager .ygtvlm { background: url("[[pix:moodle|y/lm]]") 0 10px no-repeat; /*rtl:raw: background-position: 2px 10px; */ width: 13px; height: 12px; cursor: pointer; } .file-picker .ygtvlmh, .filemanager .ygtvlmh { background: url("[[pix:moodle|y/lm]]") 0 10px no-repeat; /*rtl:raw: background-position: 2px 10px; */ width: 13px; height: 12px; cursor: pointer; } .file-picker .ygtvlp, .filemanager .ygtvlp { /*rtl:remove*/ background: url("[[pix:moodle|y/lp]]") 0 10px no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/lp_rtl]]') 2px 10px no-repeat; */ width: 13px; height: 12px; cursor: pointer; } .file-picker .ygtvlph, .filemanager .ygtvlph { /*rtl:remove*/ background: url("[[pix:moodle|y/lp]]") 0 10px no-repeat; /*rtl:raw: background: url('[[pix:moodle|y/lp_rtl]]') 2px 10px no-repeat; */ width: 13px; height: 12px; cursor: pointer; } .file-picker .ygtvloading, .filemanager .ygtvloading { background: transparent url("[[pix:moodle|y/loading]]") 0 0 no-repeat; width: 16px; height: 22px; } .file-picker .ygtvdepthcell, .filemanager .ygtvdepthcell { background: url("[[pix:moodle|y/vline]]") 0 0 no-repeat; /*rtl:raw: background-position: 0 0; */ width: 17px; height: 32px; } .file-picker .ygtvblankdepthcell, .filemanager .ygtvblankdepthcell { width: 17px; height: 22px; } a.ygtvspacer:hover { color: transparent; text-decoration: none; } .ygtvlabel, .ygtvlabel:link, .ygtvlabel:visited, .ygtvlabel:hover { background-color: transparent; cursor: pointer; margin-left: 2px; text-decoration: none; } .file-picker .ygtvfocus, .filemanager .ygtvfocus { background-color: #eee; } .fp-filename-icon { margin-top: 10px; display: block; position: relative; } .fp-icon { float: left; margin-top: -7px; width: 24px; height: 24px; margin-right: 10px; text-align: center; line-height: 24px; } .fp-icon img { max-height: 24px; max-width: 24px; vertical-align: middle; } .fp-filename { padding-right: 10px; } .file-picker .fp-login-form { height: 100%; width: 100%; display: table; } .file-picker .fp-upload-form { height: 100%; width: 100%; display: table; } .file-picker .fp-upload-form table { margin: 0 auto; } .file-picker.fp-dlg { text-align: center; } .file-picker.fp-dlg .fp-dlg-buttons { margin: 0 20px; } .file-picker.fp-msg { text-align: center; } .file-picker .fp-content-error { height: 100%; width: 100%; display: table; text-align: center; } .file-picker .fp-nextpage { clear: both; } .file-picker .fp-nextpage .fp-nextpage-loading { display: none; } .file-picker .fp-nextpage.loading .fp-nextpage-link { display: none; } .file-picker .fp-nextpage.loading .fp-nextpage-loading { display: block; text-align: center; height: 100px; padding-top: 50px; } .fp-select .fp-select-loading { text-align: center; margin-top: 20px; } .fp-select table { padding: 0 0 10px; } .fp-select table .mdl-right { min-width: 84px; } .fp-select .fp-reflist .mdl-right { vertical-align: top; } .fp-select .fp-select-buttons { float: right; } .fp-select .fp-info { font-size: 0.703125rem; } .fp-select .fp-thumbnail { float: left; min-width: 110px; min-height: 110px; line-height: 110px; text-align: center; margin: 10px 20px 0 0; background: #fff; border: 1px solid #ddd; } .fp-select .fp-thumbnail img { border: 1px solid #ddd; padding: 3px; vertical-align: middle; margin: 10px; } .fp-select .fp-fileinfo { display: inline-block; margin-top: 10px; } .file-picker.fp-select .fp-fileinfo { max-width: 240px; } .fp-select .fp-fileinfo div { padding-bottom: 5px; } .file-picker.fp-select .uneditable { display: none; } .file-picker.fp-select .fp-select-loading { display: none; } .file-picker.fp-select.loading .fp-select-loading { display: block; } .file-picker.fp-select.loading form { display: none; } .fp-select .fp-dimensions.fp-unknown { display: none; } .fp-select .fp-size.fp-unknown { display: none; } .filemanager-loading { display: none; } .jsenabled .filemanager-loading { display: block; margin-top: 100px; } .filemanager.fm-loading .filemanager-toolbar, .filemanager.fm-loading .fp-pathbar, .filemanager.fm-loading .filemanager-container, .filemanager.fm-loaded .filemanager-loading, .filemanager.fm-maxfiles .fp-btn-add, .filemanager.fm-maxfiles .dndupload-message, .filemanager.fm-noitems .fp-btn-download, .filemanager.fm-noitems .fp-btn-delete, .filemanager .fm-empty-container, .filemanager.fm-noitems .filemanager-container .fp-content { display: none; } .filemanager .fp-img-downloading { display: none; padding-top: 7px; } .filemanager .filemanager-updating { display: none; text-align: center; } .filemanager.fm-updating .filemanager-updating { display: block; margin-top: 37px; } .filemanager.fm-updating .fm-content-wrapper, .filemanager.fm-nomkdir .fp-btn-mkdir, .fitem.disabled .filemanager .filemanager-toolbar, .fitem.disabled .filemanager .fp-pathbar, .fitem.disabled .filemanager .fp-restrictions, .fitem.disabled .filemanager .fm-content-wrapper { display: none; } .filemanager .fp-restrictions { text-align: right; } .filemanager-toolbar { padding: 4px; overflow: hidden; } .filemanager .fp-pathbar.empty { display: none; } .filepicker-filelist, .filemanager-container { min-height: 140px; border: 1px solid #8f959e; border-radius: 0.5rem; } .filemanager .fp-content { overflow: auto; max-height: 472px; min-height: 157px; } .filemanager-container, .filepicker-filelist { overflow: hidden; border-top-left-radius: 0; border-top-right-radius: 0; } .file-picker .yui3-datatable-header { /*rtl:raw: text-align: right; */ background: initial; } .fitem.disabled .filepicker-filelist, .fitem.disabled .filemanager-container { background-color: #ebebe4; } .fitem.disabled .fp-btn-choose { color: #6a737b; } .fitem.disabled .filepicker-filelist .filepicker-filename { display: none; } .fp-iconview .fp-reficons1 { position: absolute; height: 100%; width: 100%; top: 0; left: 0; } .fp-iconview .fp-reficons2 { position: absolute; height: 100%; width: 100%; top: 0; left: 0; } .fp-iconview .fp-file.fp-hasreferences .fp-reficons1 { background: url("[[pix:theme|fp/link]]") no-repeat; /*rtl:raw: transform: scaleX(-1); */ /*rtl:ignore*/ background-position: bottom right; background-size: 16px 16px; } .fp-iconview .fp-file.fp-isreference .fp-reficons2 { background: url("[[pix:theme|fp/alias]]") no-repeat; /*rtl:raw: transform: scaleX(-1); */ /*rtl:ignore*/ background-position: bottom left; background-size: 16px 16px; } .filemanager .fp-iconview .fp-file.fp-originalmissing .fp-thumbnail img { display: none; } .filemanager .fp-iconview .fp-file.fp-originalmissing .fp-thumbnail { background: url([[pix:s/dead]]) no-repeat; background-position: center center; } .filemanager .yui3-datatable table { border: 0 solid #bbb; width: 100%; } /* Override YUI default styling */ /* stylelint-disable declaration-no-important */ .filemanager .yui3-datatable-header { /*rtl:raw: text-align: right; */ background: #fff !important; border-bottom: 1px solid #ccc !important; border-left: 0 solid #fff !important; color: #555 !important; } .filemanager .yui3-datatable-odd .yui3-datatable-cell { background-color: #f6f6f6 !important; border-left: 0 solid #f6f6f6; } .filemanager .yui3-datatable-even .yui3-datatable-cell { background-color: #fff !important; border-left: 0 solid #fff; } /* stylelint-enable */ .filemanager .fp-filename-icon.fp-hasreferences .fp-reficons1 { background: url("[[pix:theme|fp/link_sm]]") no-repeat 0 0; height: 100%; width: 100%; /*rtl:raw: transform: scaleX(-1); */ position: absolute; top: 8px; left: 17px; background-size: 16px 16px; } .filemanager .fp-filename-icon.fp-isreference .fp-reficons2 { background: url("[[pix:theme|fp/alias_sm]]") no-repeat 0 0; height: 100%; width: 100%; /*rtl:raw: transform: scaleX(-1); */ position: absolute; top: 9px; left: -6px; background-size: 16px 16px; } .filemanager .fp-contextmenu { display: none; } .filemanager .fp-iconview .fp-folder.fp-hascontextmenu .fp-contextmenu { position: absolute; right: 0; bottom: 0; display: flex; align-items: center; justify-content: center; } .filemanager .fp-treeview .fp-folder.fp-hascontextmenu .fp-contextmenu, .filemanager .fp-tableview .fp-folder.fp-hascontextmenu .fp-contextmenu { display: inline; position: absolute; left: 14px; margin-right: -20px; top: 6px; } .filepicker-filelist .filepicker-container, .filemanager.fm-noitems .fm-empty-container { display: block; position: absolute; top: 10px; bottom: 10px; left: 10px; right: 10px; border: 2px dashed #bbb; padding-top: 85px; text-align: center; } .filepicker-filelist .dndupload-target, .filemanager-container .dndupload-target { background: #fff; position: absolute; top: 10px; bottom: 10px; left: 10px; right: 10px; border: 2px dashed #fb7979; padding-top: 85px; text-align: center; } .filepicker-filelist.dndupload-over .dndupload-target, .filemanager-container.dndupload-over .dndupload-target { background: #fff; position: absolute; top: 10px; bottom: 10px; left: 10px; right: 10px; border: 2px dashed #6c8cd3; padding-top: 85px; text-align: center; } .dndupload-message { display: none; } .dndsupported .dndupload-message { display: inline; } .dnduploadnotsupported-message { display: none; } .dndnotsupported .dnduploadnotsupported-message { display: inline; } .dndupload-target { display: none; } .dndsupported .dndupload-ready .dndupload-target { display: block; } .dndupload-uploadinprogress { display: none; text-align: center; } .dndupload-uploading .dndupload-uploadinprogress { display: block; } .dndupload-arrow { width: 100%; height: 80px; position: absolute; top: 5px; color: #8f959e; } .fitem.disabled .filepicker-container, .fitem.disabled .fm-empty-container { display: none; } .dndupload-progressbars { padding: 10px; display: none; } .dndupload-inprogress .dndupload-progressbars { display: block; } .dndupload-inprogress .fp-content { display: none; } .filemanager.fm-noitems .dndupload-inprogress .fm-empty-container { display: none; } .filepicker-filelist.dndupload-inprogress .filepicker-container { display: none; } .filepicker-filelist.dndupload-inprogress a { display: none; } .filemanager.fp-select .fp-select-loading { display: none; } .filemanager.fp-select.loading .fp-select-loading { display: block; } .filemanager.fp-select.loading form { display: none; } .filemanager.fp-select.fp-folder .fp-license, .filemanager.fp-select.fp-folder .fp-author, .filemanager.fp-select.fp-file .fp-file-unzip, .filemanager.fp-select.fp-folder .fp-file-unzip, .filemanager.fp-select.fp-file .fp-file-zip, .filemanager.fp-select.fp-zip .fp-file-zip { display: none; } .filemanager.fp-select .fp-file-setmain, .filemanager.fp-select .fp-file-setmain-help { display: none; } .filemanager.fp-select.fp-cansetmain .fp-file-setmain, .filemanager.fp-select.fp-cansetmain .fp-file-setmain-help { display: inline-block; } .filemanager .fp-mainfile .fp-filename { font-weight: bold; } .filemanager.fp-select.fp-folder .fp-file-download { display: none; } .fm-operation { font-weight: bold; } .filemanager.fp-select .fp-original.fp-unknown, .filemanager.fp-select .fp-original .fp-originloading { display: none; } .filemanager.fp-select .fp-original.fp-loading .fp-originloading { display: inline; } .filemanager.fp-select .fp-reflist.fp-unknown, .filemanager.fp-select .fp-reflist .fp-reflistloading { display: none; } .filemanager.fp-select .fp-reflist.fp-loading .fp-reflistloading { display: inline; } .filemanager.fp-select .fp-reflist .fp-value { background: #f9f9f9; border: 1px solid #bbb; padding: 8px 7px; margin: 0; max-height: 75px; overflow: auto; } .filemanager.fp-select .fp-reflist .fp-value li { padding-bottom: 7px; } .filemanager.fp-mkdir-dlg { text-align: center; } .filemanager.fp-mkdir-dlg .fp-mkdir-dlg-text { text-align: left; margin: 20px; } .filemanager.fp-dlg { text-align: center; } .file-picker div.bd { text-align: left; } .fp-formset { padding: 10px; } .fp-formset input[type=file] { line-height: inherit; } .fp-forminset { padding: 0 10px; } .fp-fileinfo .fp-value { display: inline-block; padding-left: 5px; } /** The message area **/ .hidden { display: none; } .preferences-container .container-fluid, .preferences-container .container-sm, .preferences-container .container-md, .preferences-container .container-lg, .preferences-container .container-xl { padding: 0; } .preferences-container .container-fluid .col-md-6, .preferences-container .container-sm .col-md-6, .preferences-container .container-md .col-md-6, .preferences-container .container-lg .col-md-6, .preferences-container .container-xl .col-md-6 { min-height: 20px; } .preferences-container .align-bottom { vertical-align: bottom; } .preferences-container .preference-table { border: 1px solid #ddd; } .preferences-container .preference-table thead th { text-align: center; } .preferences-container .preference-table thead th .config-warning { display: none; } .preferences-container .preference-table thead th.unconfigured .config-warning { display: inline-block; } .preferences-container .preference-table tr th { border-left: 1px solid #dee2e6; } .preferences-container .preference-table tr td:not(:first-child) { width: 150px; text-align: center; } .preferences-container .preference-table tr td:nth-child(even) { border: 1px solid #dee2e6; } .preferences-container .preference-table .preference-row .hover-tooltip-container { display: inline-block; } .preferences-container .preference-table .preference-row .preference-name { vertical-align: middle; } .preferences-container .preference-table .preference-row .disabled-message { text-align: center; height: 30px; line-height: 30px; } .preferences-container .preference-table .preference-row.loading .preference-name .loading-icon { display: block; } .disabled-message { display: none; } .disabled .disabled-message { display: block; } .disabled .disabled-message + form { display: none; } .general-settings-container .loading-icon { display: none; } .general-settings-container .loading .loading-icon { display: inline-block; } .general-settings-container label { display: inline-block; } .processor-container { position: relative; } .processor-container .loading-container { display: none; position: absolute; width: 100%; height: 100%; text-align: center; background-color: rgba(255, 255, 255, 0.5); } .processor-container .loading-container .vertical-align { height: 100%; width: 0%; display: inline-block; vertical-align: middle; } .processor-container.loading .loading-container { display: block; } .preferences-page-container .checkbox-container { margin: 30px 5px; line-height: 20px; } .preferences-page-container .checkbox-container input { line-height: 20px; margin: 0; } .preferences-page-container .checkbox-container .loading-icon { display: none; } .preferences-page-container .checkbox-container.loading .loading-icon { display: inline-block; } .notification-area { height: 600px; box-sizing: border-box; border-radius: 4px; margin-bottom: 30px; border: 1px solid #e3e3e3; } @media (max-height: 670px) { .notification-area { height: 500px; } } .notification-area .control-area { box-sizing: border-box; display: inline-block; width: 300px; height: 100%; overflow: auto; -webkit-overflow-scrolling: touch; border-right: 1px solid #e3e3e3; } .notification-area .control-area .content { position: relative; } .notification-area .control-area .content .content-item-container { cursor: pointer; } .notification-area .control-area .content:empty + .empty-text { display: block; } .notification-area .control-area .loading-icon { display: none; } .notification-area .control-area .empty-text { display: none; text-align: center; padding-top: 20px; } .notification-area .control-area.loading .loading-icon { display: block; text-align: center; box-sizing: border-box; padding: 5px; } .notification-area .control-area.loading .content:empty + .empty-text { display: none; } .notification-area .content-area { box-sizing: border-box; display: inline-block; width: calc(100% - 300px); float: right; } .notification-area .content-area .toggle-mode { display: none; } .notification-area .content-area .header { height: 50px; box-sizing: border-box; border-bottom: 1px solid #e3e3e3; padding: 5px; } .notification-area .content-area .header .image-container { display: inline-block; height: 25px; width: 24px; float: left; } .notification-area .content-area .header .subject-container { display: inline-block; max-width: calc(100% - 24px); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; height: 25px; padding-left: 5px; box-sizing: border-box; } .notification-area .content-area .header .timestamp { font-size: 10px; line-height: 10px; margin: 0; color: #666; margin-left: 30px; } .notification-area .content-area .header:empty { display: none; } .notification-area .content-area > .content { height: 500px; box-sizing: border-box; overflow: auto; -webkit-overflow-scrolling: touch; padding: 15px; } @media (max-height: 670px) { .notification-area .content-area > .content { height: 400px; } } .notification-area .content-area > .content:empty { display: none; } .notification-area .content-area > .content:empty + .empty-text { display: block; text-align: center; padding-top: 100px; } .notification-area .content-area .empty-text { display: none; } .notification-area .content-area .footer { height: 50px; box-sizing: border-box; text-align: center; } .notification-area .content-area .footer a { line-height: 50px; } .notification-area .content-area .footer:empty { display: none; } @media (max-width: 979px) { .notification-area { position: relative; overflow: hidden; } .notification-area .control-area { border-right: none; width: 100%; position: absolute; top: 0; left: 0; opacity: 1; visibility: visible; transition: left 0.25s; } .notification-area .content-area { width: 100%; position: absolute; top: 0; right: -100%; opacity: 0; visibility: hidden; transition: right 0.25s, opacity 0.25s, visibility 0.25s; } .notification-area .content-area .toggle-mode { display: inline-block; float: left; width: 70px; height: 50px; line-height: 50px; box-sizing: border-box; border-right: 1px solid #e3e3e3; border-bottom: 1px solid #e3e3e3; } .notification-area .content-area .header { display: inline-block; width: calc(100% - 70px); } .notification-area.show-content-area .control-area { left: -100%; opacity: 0; visibility: hidden; transition: left 0.25s, opacity 0.25s, visibility 0.25s; } .notification-area.show-content-area .content-area { right: 0; opacity: 1; visibility: visible; transition: right 0.25s; } } .drawer .message-app { height: 100%; } .drawer .message-app .icon-back-in-app { display: none; } .drawer .message-app .icon-back-in-drawer { display: inherit; } .message-app { display: flex; flex-direction: column; background-color: #eff1f3; } .message-app .icon-back-in-drawer { display: none; } .message-app.main { min-height: 400px; } .message-app .header-container { flex-shrink: 0; } .message-app .overflow-y { overflow-y: auto; } @media (max-height: 320px) { .message-app .header-container [data-region=view-overview]:not(.hidden) { display: flex; align-items: center; } .message-app .footer-container [data-region=view-overview] { display: none; } .message-app .overflow-y { overflow-y: unset; } } .message-app .body-container { flex: 1; overflow: hidden; } .message-app .body-container > * { position: absolute; right: 0; left: 0; top: 0; bottom: 0; overflow: auto; } .message-app .footer-container { flex-shrink: 0; } .message-app .footer-container textarea { direction: ltr; } .message-app .contact-status { position: absolute; left: 39px; top: 39px; width: 10px; height: 10px; border-radius: 50%; } .message-app .contact-status.online { border: 1px solid #fff; background-color: #357a32; } .message-app .message p { margin: 0; } .message-app .clickable { cursor: pointer; } .message-app .clickable:hover { filter: drop-shadow(2px 2px 2px rgba(0, 0, 0, 0.3)); } .message-app a, .message-app .btn-link { color: inherit; } .message-app .btn-link:hover, .message-app .btn-link:focus { background-color: rgba(0, 0, 0, 0.035); text-decoration: none; } .message-app .icon { margin-right: 0; } .message-app .overview-section-toggle .collapsed-icon-container { display: none; } .message-app .overview-section-toggle .expanded-icon-container { display: inline-block; } .message-app .overview-section-toggle.collapsed .collapsed-icon-container { display: inline-block; } .message-app .overview-section-toggle.collapsed .expanded-icon-container { display: none; } .message-app .btn.btn-link.btn-icon { height: 16px; width: 16px; padding: 0; border-radius: 50%; flex-shrink: 0; } .message-app .btn.btn-link.btn-icon:hover, .message-app .btn.btn-link.btn-icon:focus { background-color: #e9ecef; } .message-app .btn.btn-link.btn-icon.icon-size-0 { height: 20px !important; /* stylelint-disable-line declaration-no-important */ width: 20px !important; /* stylelint-disable-line declaration-no-important */ } .message-app .btn.btn-link.btn-icon.icon-size-1 { height: 24px !important; /* stylelint-disable-line declaration-no-important */ width: 24px !important; /* stylelint-disable-line declaration-no-important */ } .message-app .btn.btn-link.btn-icon.icon-size-2 { height: 28px !important; /* stylelint-disable-line declaration-no-important */ width: 28px !important; /* stylelint-disable-line declaration-no-important */ } .message-app .btn.btn-link.btn-icon.icon-size-3 { height: 36px !important; /* stylelint-disable-line declaration-no-important */ width: 36px !important; /* stylelint-disable-line declaration-no-important */ } .message-app .btn.btn-link.btn-icon.icon-size-4 { height: 44px !important; /* stylelint-disable-line declaration-no-important */ width: 44px !important; /* stylelint-disable-line declaration-no-important */ } .message-app .btn.btn-link.btn-icon.icon-size-5 { height: 52px !important; /* stylelint-disable-line declaration-no-important */ width: 52px !important; /* stylelint-disable-line declaration-no-important */ } .message-app .btn.btn-link.btn-icon.icon-size-6 { height: 60px !important; /* stylelint-disable-line declaration-no-important */ width: 60px !important; /* stylelint-disable-line declaration-no-important */ } .message-app .btn.btn-link.btn-icon.icon-size-7 { height: 68px !important; /* stylelint-disable-line declaration-no-important */ width: 68px !important; /* stylelint-disable-line declaration-no-important */ } .message-app .view-overview-body .section { display: block; } .message-app .view-overview-body .section.expanded { display: flex; } .message-app .view-overview-body .section div[data-region=toggle] { padding: 0.1rem; } .message-app .view-conversation .content-message-container img { max-width: 100%; } .message-app .list-group { border-radius: 0; } .message-app .list-group .list-group-item { border-left: 0; border-right: 0; } .message-app .list-group .list-group-item:hover { color: #fff; background-color: #0f6cbf; } .message-app .list-group .list-group-item:hover .badge-primary { background-color: #fff; color: #0f6cbf; } .message-app .list-group .list-group-item:first-child { border-top: 0; } .message-app .list-group .list-group-item:last-child { border-bottom: 0; } .message-app .list-group .list-group-item.list-group-item-action { margin: 0.1rem; width: auto; text-align: inherit; } .message-app .last-message { min-height: 1.5rem; } .message-app .section .collapsing { overflow: hidden; } .message-app .message.send { background-color: #dee2e6; color: #1d2125; } .message-app .message.send .time { color: #1d2125; } .message-app .message.send .tail { right: 0; margin-right: -0.5rem; border-bottom-color: #dee2e6; } .message-app .message.received { background-color: #fff; color: #1d2125; } .message-app .message.received .time { color: #616466; } .message-app .message.received .tail { left: 0; margin-left: -0.5rem; border-bottom-color: #fff; } .message-app .message .tail { content: ""; bottom: 0; width: 0; height: 0; border: 0.5rem solid transparent; position: relative; } .message-app .day { color: #1d2125; } .message-app .lazy-load-list { overflow-y: auto; } #page-message-index #page-header { display: none; } #page-message-index #region-main { height: 100%; margin-top: 0; } #page-message-index #region-main .conversationcontainer .section { max-height: calc(100vh - 50px); } #page-message-index #region-main div[role=main] { height: 100%; } #page-message-index #region-main div[role=main] #maincontent { margin-top: -1px; } #page-message-index #region-main div[role=main] .message-app.main { height: 100%; } .dir-rtl .message-drawer { box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.08); } .message-app .emoji-picker-container { position: absolute; top: -5px; right: 5px; transform: translateY(-100%); } .message-app .emoji-picker-container .emoji-picker .picker-row .emoji-button { height: 40px; width: 40px; } @media (max-width: 575.98px) { .message-app .emoji-picker-container { right: -0.5rem; } } @media (max-height: 495px) { .message-app .emoji-picker-container { position: fixed; top: 0; transform: none; } } .message-app .emoji-auto-complete-container { overflow: auto; max-height: 90px; transition: max-height 0.15s ease-in-out; visibility: visible; } .message-app .emoji-auto-complete-container.hidden { display: block; max-height: 0; visibility: hidden; overflow: hidden; transition: max-height 0.15s ease-in-out, visibility 0s linear 0.15s, overflow 0s linear 0.15s; } /* Question */ .questionbank h2 { margin-top: 0; } .questioncategories h3 { margin-top: 0; } #chooseqtypebox { margin-top: 1em; } #chooseqtype h3 { margin: 0 0 0.3em; } #chooseqtype .instruction { display: none; } #chooseqtype .fakeqtypes { border-top: 1px solid silver; } #chooseqtype .qtypeoption { margin-bottom: 0.5em; } #chooseqtype label { display: block; } #chooseqtype .qtypename img { padding: 0 0.3em; } #chooseqtype .qtypename { display: inline-table; width: 16em; } #chooseqtype .qtypesummary { display: block; margin: 0 2em; } #chooseqtype .submitbuttons { margin: 0.7em 0; text-align: center; } #qtypechoicecontainer { display: none; } #qtypechoicecontainer_c.yui-panel-container.shadow .underlay { background: none; } #qtypechoicecontainer.yui-panel .hd { color: #333; letter-spacing: 1px; text-shadow: 1px 1px 1px #fff; border-top-left-radius: 10px; border-top-right-radius: 10px; border: 1px solid #ccc; border-bottom: 1px solid #bbb; background-image: linear-gradient(to bottom, #fff 0%, #ccc 100%); background-repeat: repeat-x; } #qtypechoicecontainer { font-size: 12px; color: #333; background: #f2f2f2; border-radius: 10px; border: 1px solid #ccc; border-top: 0 none; } #qtypechoicecontainer #chooseqtype { width: 40em; } #chooseqtypehead h3 { margin: 0; font-weight: normal; } #chooseqtype .qtypes { position: relative; border-bottom: 1px solid #bbb; padding: 0.24em 0; } #chooseqtype .alloptions { overflow-x: hidden; overflow-y: auto; max-height: calc(100vh - 15em); width: 60%; } #chooseqtype .qtypeoption { margin-bottom: 0; padding: 0.3em 0.3em 0.3em 1.6em; } #chooseqtype .qtypeoption img { vertical-align: text-bottom; padding-left: 1em; padding-right: 0.5em; } #chooseqtype .selected { background-color: #fff; } #chooseqtype .instruction, #chooseqtype .qtypesummary { display: none; position: absolute; top: 0; right: 0; bottom: 0; left: 60%; margin: 0; overflow-x: hidden; overflow-y: auto; padding: 1.5em 1.6em; background-color: #fff; } #chooseqtype .instruction, #chooseqtype .selected .qtypesummary { display: block; } table.question-bank-table { margin: 0; background-color: #fff; table-layout: fixed; overflow-x: scroll; width: min-content; } table.question-bank-table td, table.question-bank-table th { max-width: 40vw; width: max-content; } table.question-bank-table th { text-align: left; } table.question-bank-table > tbody > tr.r1 { background-color: rgba(0, 0, 0, 0.03); } table.question-bank-table > tbody > tr.highlight { border: 1px solid #008196; } table.question-bank-table .checkbox input[type=checkbox] { margin-left: 0; float: none; } table.question-bank-table .iconcol { padding: 3px; box-sizing: content-box; } table.question-bank-table .iconcol .icon { margin: 0; width: 12px; height: 12px; } table.question-bank-table label { margin: 0; display: block; } table.question-bank-table .header { text-align: left; } table.question-bank-table .header.sortable-list-current-position { background-color: #a2cff8; } table.question-bank-table .header.sortable-list-is-dragged { background-color: #fff; opacity: 0.85; } table.question-bank-table .header .header-text > div { display: inline-block; } table.question-bank-table .header .dropdown-toggle::after { margin-left: 0; } table.question-bank-table .header.checkbox .form-check { padding-left: 0; } #page-mod-quiz-edit div.questionbankwindow div.header { margin: 0; } #page-mod-quiz-edit div.questionbankwindow.block { padding: 0; } .questionbank .singleselect { margin: 0; } /* Question editing form */ #combinedfeedbackhdr div.fhtmleditor { padding: 0; } #combinedfeedbackhdr div.fcheckbox { margin-bottom: 1em; } #multitriesheader div.fitem_feditor { margin-top: 1em; } #multitriesheader div.fitem_fgroup { margin-bottom: 1em; } #multitriesheader div.fitem_fgroup fieldset.felement label { margin-left: 0.3em; margin-right: 0.3em; } body.path-question-type { /* Hacks to display the labels within a form group. */ } body.path-question-type .form-group .col-form-label.sr-only:not(legend):not([for=id_category]) { position: static; width: auto; height: auto; padding: 0; margin: 0 0.5rem 0 0; overflow: visible; clip: auto; clip-path: none; border: 0; } .que { clear: left; text-align: left; margin: 0 auto 1.8em auto; } .que .info { float: left; width: 7em; padding: 0.5em; margin-bottom: 1.8em; background-color: #f8f9fa; border: 1px solid #cad0d7; border-radius: 2px; } .que h3.no { margin: 0; font-size: 0.8em; line-height: 1; } .que span.qno { font-size: 1.5em; font-weight: bold; word-break: break-word; } .que .info > div { font-size: 0.8em; margin-top: 0.7em; } .que .info .questionflag.editable { cursor: pointer; } .que .info .editquestion img, .que .info .questionflag img, .que .info .questionflag input { vertical-align: bottom; } .que .content { margin: 0 0 0 8.5em; } .que .formulation, .que .outcome, .que .comment { position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 0 solid transparent; border-radius: 0.5rem; } .que .outcome, .que .comment { color: #8e662e; background-color: #fcefdc; border-color: #fbe8cd; /* stylelint-disable-line max-line-length */ } .que .outcome hr, .que .comment hr { border-top-color: #f9ddb5; } .que .outcome .alert-link, .que .comment .alert-link { color: #674a22; } .que .outcome a, .que .comment a { color: #041c31; } .que .formulation { color: #001a1e; background-color: #e7f3f5; border-color: #b8dce2; /* stylelint-disable-line max-line-length */ } .que .formulation hr { border-top-color: #a6d3db; } .que .formulation .alert-link { color: black; } .que.multichoice .answer div.r0 .icon.fa-check, .que.multichoice .answer div.r1 .icon.fa-check, .que.multichoice .answer div.r0 .icon.fa-remove, .que.multichoice .answer div.r1 .icon.fa-remove { text-indent: 0; } .formulation input[type=text], .formulation select { width: auto; vertical-align: baseline; } .que.multianswer .formulation .yui3-widget-positioned { box-sizing: content-box; } .que.multianswer .formulation .yui3-widget-positioned .feedbackspan { width: inherit; max-width: inherit; } .path-mod-quiz input[size] { width: auto; max-width: 100%; } .que .comment { color: #1c3f1a; background-color: #d7e4d6; border-color: #c6dac6; /* stylelint-disable-line max-line-length */ } .que .comment hr { border-top-color: #b7d0b7; } .que .comment .alert-link { color: #0c1b0b; } .que .ablock { margin: 0.7em 0 0.3em 0; } .que .im-controls { margin-top: 0.5em; text-align: left; } .que .specificfeedback, .que .generalfeedback, .que .numpartscorrect .que .rightanswer, .que .im-feedback, .que .feedback, .que p { margin: 0 0 0.5em; } .que .correctness.correct { color: #fff; background-color: #357a32; } a.que .correctness.correct:hover, a.que .correctness.correct:focus { color: #fff; background-color: #255623; } a.que .correctness.correct:focus, a.que .correctness.correct.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(53, 122, 50, 0.5); } .que .correctness.partiallycorrect { color: #1d2125; background-color: #f0ad4e; } a.que .correctness.partiallycorrect:hover, a.que .correctness.partiallycorrect:focus { color: #1d2125; background-color: #ec971f; } a.que .correctness.partiallycorrect:focus, a.que .correctness.partiallycorrect.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(240, 173, 78, 0.5); } .que .correctness.notanswered, .que .correctness.incorrect { color: #fff; background-color: #ca3120; } a.que .correctness.notanswered:hover, a.que .correctness.notanswered:focus, .que .correctness.incorrect:hover, .que .correctness.incorrect:focus { color: #fff; background-color: #9e2619; } a.que .correctness.notanswered:focus, a.que .correctness.notanswered.focus, .que .correctness.incorrect:focus, .que .correctness.incorrect.focus { outline: 0; box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.5); } .que .qtext { margin-bottom: 1.5em; } .que .validationerror { color: #ca3120; } .que .grading, .que .comment, .que .commentlink, .que .history { margin-top: 0.5em; } .que .history h3 { margin: 0 0 0.2em; font-size: 1em; } .que .history table { width: 100%; margin: 0; } .que .history .current { font-weight: bold; } .que .questioncorrectnessicon { vertical-align: text-bottom; } body.jsenabled .questionflag input[type=checkbox] { display: none; } .que .questionflagimage { padding-right: 3px; height: 16px; width: 16px; } .importerror { margin-top: 10px; border-bottom: 1px solid #555; } .mform .que.comment .fitemtitle { width: 20%; } #page-question-preview #techinfo { margin: 1em 0; } #page-question-preview .collapsibleregion .collapsibleregioncaption, #page-question-preview .collapsibleregion .collapsibleregionextracontent { display: inline-block; } #page-mod-quiz-edit ul.slots .activityinstance > a { display: flex; max-width: 100%; align-items: center; text-indent: 0; padding-left: 0; } #page-mod-quiz-edit ul.slots .activityinstance img.activityicon { margin-left: 0; width: 16px; height: 16px; padding-right: 4px; } #page-mod-quiz-edit .activity img.activityicon { vertical-align: text-top; } #page-mod-quiz-edit .box.generalbox.questionbank { padding: 0.5em; } #page-mod-quiz-edit .questionbank .categorypagingbarcontainer, #page-mod-quiz-edit .questionbank .categoryquestionscontainer, #page-mod-quiz-edit .questionbank .choosecategory { padding: 0; } #page-mod-quiz-edit .questionbank .choosecategory select { width: 100%; } #page-mod-quiz-edit div.questionbank .categoryquestionscontainer { background: transparent; } #page-mod-quiz-edit .questionbankwindow div.header { color: #444; text-shadow: none; border-top-left-radius: 4px; border-top-right-radius: 4px; margin: 0 -10px 0 -10px; padding: 2px 10px 2px 10px; background: transparent; /* Old browsers */ } #page-mod-quiz-edit .questionbankwindow div.header a:link, #page-mod-quiz-edit .questionbankwindow div.header a:visited { color: #0f6cbf; } #page-mod-quiz-edit .questionbankwindow div.header a:hover { color: #094478; } #page-mod-quiz-edit .createnewquestion { padding: 0.3em 0; } #page-mod-quiz-edit .createnewquestion div, #page-mod-quiz-edit .createnewquestion input { margin: 0; } #page-mod-quiz-edit .questionbankwindow div.header .title { color: #1d2125; } #page-mod-quiz-edit div.container div.generalbox { background-color: transparent; padding: 1.5em; } #page-mod-quiz-edit .categoryinfo { background-color: transparent; border-bottom: none; } #page-mod-quiz-edit .createnewquestion .singlebutton input { margin-bottom: 0; } #page-mod-quiz-edit div.questionbank .categorysortopotionscontainer, #page-mod-quiz-edit div.questionbank .categoryselectallcontainer { padding: 0 0 1.5em 0; } #page-mod-quiz-edit div.questionbank .categorypagingbarcontainer { background-color: transparent; margin: 0; border-top: 0; border-bottom: 0; } #page-mod-quiz-edit div.questionbank .categorypagingbarcontainer .paging { padding: 0 0.3em; } #page-mod-quiz-edit div.question div.content div.questioncontrols { background-color: #fff; } #page-mod-quiz-edit div.question div.content div.points { margin-top: -0.5em; padding-bottom: 0; border: none; background-color: #fff; position: static; width: 12.1em; float: right; margin-right: 60px; } #page-mod-quiz-edit div.question div.content div.points br { display: none; } #page-mod-quiz-edit div.question div.content div.points label { display: inline-block; } #page-mod-quiz-edit div.quizpage .pagecontent .pagestatus { background-color: #fff; } #page-mod-quiz-edit .quizpagedelete, #page-mod-quiz-edit .quizpagedelete img { background-color: transparent; } #page-mod-quiz-edit div.quizpage .pagecontent { border: 1px solid #ddd; border-radius: 2px; overflow: hidden; } #page-mod-quiz-edit div.questionbank .categoryinfo { padding: 0.3em 0; } .questionbankwindow .module { width: auto; } .questionbankwindow .form-autocomplete-selection { margin-left: 0; } #page-mod-quiz-edit div.editq div.question div.content { background-color: #fff; border: 1px solid #ddd; border-radius: 2px; overflow: hidden; } #page-mod-quiz-edit ul.slots .activityinstance img.activityicon { margin-top: 0; padding-right: 4px; } .path-mod-quiz .statedetails { display: block; font-size: 0.9em; } a#hidebankcmd { color: #0f6cbf; } .que.shortanswer .answer { padding: 0; } .que label { display: inline; } .que .content .answer div[data-region=answer-label] .mediaplugin { width: 400px; } body.path-question-type .mform fieldset.hidden { padding: 0; margin: 0.7em 0 0; } .que.ddwtos, .que.ddwtos .drop { box-sizing: content-box; } .tag-condition-container { position: relative; } [data-filterregion=filter][data-filter-type=category] .form-autocomplete-suggestions li[aria-disabled=true] { font-weight: bold; color: #1d2125; background-color: #fff; } @media (max-width: 767.98px) { .que .info { float: none; width: auto; } .que .content { margin: 0; } } @media (max-width: 991.98px) { .question-bank-table td, .question-bank-table th { max-width: 75vw; } } /* user.less */ .userprofile .fullprofilelink { text-align: center; margin: 10px; } .userprofile .page-context-header { margin-bottom: 10px; column-count: 1; } .userprofile .description { margin-top: 10px; margin-bottom: 30px; } .userprofile .profile_tree { column-count: 2; } #participantsform .no-overflow { overflow: visible; } .userprofile dl.list > dd + dt { clear: left; } .user-box { margin: 8px; width: 115px; height: 160px; text-align: center; float: left; clear: none; } #page-user-profile .node_category ul, .path-user .node_category ul { margin: 0; list-style: none; padding-left: 0; } #page-user-profile .node_category li, .path-user .node_category li { margin-top: 5px; } #page-user-profile .node_category .editprofile, #page-user-profile .node_category .viewmore, .path-user .node_category .editprofile, .path-user .node_category .viewmore { text-align: right; } .ajax-contact-button { box-sizing: border-box; position: relative; } .ajax-contact-button.loading .loading-icon { display: block; } .ajax-contact-button .loading-icon { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(255, 255, 255, 0.7); } .ajax-contact-button .loading-icon .icon { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } @media (max-width: 480px) { .userprofile .profile_tree { /** Display the profile on one column on phones@mixin */ column-count: 1; } } .userlist #showall { margin: 10px 0; } .userlist .buttons { text-align: center; } .userlist .buttons label { padding: 0 3px; } .userlist table#participants { text-align: center; } .userlist table#participants td { text-align: left; padding: 4px; vertical-align: middle; } .userlist table#participants th { text-align: left; padding: 4px; } .userlist table.controls { width: 100%; } .userlist table.controls tr { vertical-align: top; } .userlist table.controls .right { text-align: right; } .userlist table.controls .groupselector { margin-bottom: 0; margin-top: 0; } .userlist table.controls .groupselector label { display: block; } .userinfobox { width: 100%; border: 1px solid; border-collapse: separate; padding: 10px; } .userinfobox .left, .userinfobox .side { width: 100px; vertical-align: top; } .userinfobox .userpicture { width: 100px; height: 100px; } .userinfobox .content { vertical-align: top; } .userinfobox .links { width: 100px; padding: 5px; vertical-align: bottom; } .userinfobox .links a { display: block; } .userinfobox .list td { padding: 3px; } .userinfobox .username { padding-bottom: 20px; font-weight: bold; } .userinfobox td.label { text-align: right; white-space: nowrap; vertical-align: top; font-weight: bold; } .group-edit { position: absolute; right: 0; margin-right: 0.6em; } .group-image { display: block; float: left; margin-right: 1em; } .group-image .grouppicture { border-radius: 50%; } .groupinfobox .left { padding: 10px; width: 100px; vertical-align: top; } .course-participation #showall { text-align: center; margin: 10px 0; } #user-policy .noticebox { text-align: center; margin-left: auto; margin-right: auto; margin-bottom: 10px; width: 80%; height: 250px; } #user-policy #policyframe { width: 100%; height: 100%; } .iplookup #map { margin: auto; } .userselector select { width: 100%; } .userselector div { margin-top: 0.2em; } .userselector div label { margin-right: 0.3em; } /* Next style does not work in all browsers but looks nicer when it does */ .userselector .userselector-infobelow { font-size: 0.8em; } #userselector_options .collapsibleregioncaption { font-weight: bold; } #userselector_options p { margin: 0.2em 0; text-align: left; } /** user full profile */ #page-user-profile .messagebox { text-align: center; margin-left: auto; margin-right: auto; } /** user course profile */ #page-course-view-weeks .messagebox { text-align: center; margin-left: auto; margin-right: auto; } .profileeditor > .singleselect { margin: 0 0.5em 0 0; } .profileeditor > .singlebutton { display: inline-block; margin: 0 0 0 0.5em; } .profileeditor > .singlebutton div, .profileeditor > .singlebutton input { margin: 0; } .userlist h3 .action-icon { display: none; } #page-enrol-users .popover { max-width: none; } .user-enroller-panel { width: 600px; } [data-filterverbfor], [data-filterregion=filter]:last-child [data-filterregion=joinadverb] { display: none; } [data-filterverb="0"] [data-filterverbfor="0"], [data-filterverb="1"] [data-filterverbfor="1"], [data-filterverb="2"] [data-filterverbfor="2"] { display: block; } #page-user-contactsitesupport .supporticon i { font-size: 35px; } .search-results .result { margin-left: 0; margin-right: 0; } .search-results .result .result-content { margin: 7px 0; } .search-results .result .filename { font-style: italic; } .simplesearchform .input-group input.form-control { border-top-left-radius: 0.5rem; border-bottom-left-radius: 0.5rem; } .simplesearchform .btn { padding-left: 0.5rem; padding-right: 0.5rem; } .simplesearchform .btn .icon { margin: 0; } .simplesearchform .btn-submit { border-color: #8f959e; color: #6a737b; } .simplesearchform .btn-close, .simplesearchform .btn-clear { position: absolute; top: 0; right: 0; color: #6a737b; z-index: 4; } .simplesearchform .btn-close { right: 2.2rem; } .simplesearchform .btn-submit { background-color: #f8f9fa; } .simplesearchform .withclear { padding-right: 2rem; } .simplesearchform .searchinput { display: flex; flex: 1 1 auto; } .simplesearchform .collapsing { height: inherit; transition: none; width: inherit; } .simplesearchform .collapse.show, .simplesearchform .collapsing { position: absolute; left: 0; top: 0; width: 100%; display: flex; background-color: #fff; z-index: 1060; height: 60px; } .simplesearchform .collapse.show .form-inline, .simplesearchform .collapsing .form-inline { width: auto; margin-left: auto; margin-right: auto; } .search-areas-actions { margin-bottom: 1rem; } .search-areas-actions > div { margin-right: 1rem; display: inline-block; } #core-search-areas .lastcol li { margin-left: 24px; text-indent: -24px; } #core-search-areas .lastcol li > i { text-indent: 0; } /** * Moodle forms HTML isn't changeable via renderers (yet?) so this * .less file imports styles from the bootstrap $variables file and * adds them to the existing Moodle form CSS ids and classes. * */ .jsenabled .mform .containsadvancedelements .advanced { display: none; } .mform .containsadvancedelements .advanced.show { display: flex; } #adminsettings span.error { display: inline-block; border: 1px solid #f0c5c1; border-radius: 4px; background-color: #f4d6d2; padding: 4px; margin-bottom: 4px; } .mform .form-inline .form-control, .mform .form-inline .custom-select { max-width: 100%; } .mform .form-inline textarea.form-control { width: 100%; } .mform .form-inline .form-group { margin: 0.1rem 0.25rem 0.1rem 0; } .mform .form-inline br + label { justify-content: flex-start; width: 100%; margin-right: 0; } .unresponsive.mform .form-inline, .unresponsive.mform .form-inline label { display: inline-flex; } #jump-to-activity.custom-select { width: 100%; } .mform fieldset { margin-bottom: 0.5rem; border-bottom: 1px solid #dee2e6; } #adminsettings .form-control[size] { width: auto; } #adminsettings .error { color: #ca3120; } .mform ul.file-list { padding: 0; margin: 0; list-style: none; } .mform label .req, .mform label .adv { cursor: help; } /*rtl:ignore*/ input#id_externalurl { direction: ltr; } #portfolio-add-button { display: inline; } .form-defaultinfo, .form-label .form-shortname { color: #6a737b; } .form-label .form-shortname { font-size: 0.703125rem; display: block; } .form-item .form-inline { display: inline; } .form-inline label:not(.sr-only):not(.accesshide) + select { margin-left: 0.5rem; } .formsettingheading .form-horizontal { color: #6a737b; } .no-felement.fstatic { color: #6a737b; padding-top: 5px; } .no-fitem .fstaticlabel { font-weight: bold; } .form-item .form-setting .defaultsnext > input { display: inline-block; } .form-item .form-setting .form-checkbox.defaultsnext { margin-top: 5px; display: inline-block; } #adminsettings h3 { display: block; width: 100%; padding: 0; margin-bottom: 1.5; font-size: 1.171875rem; line-height: 3; border: 0; border-bottom: 1px solid #e5e5e5; } /* rtl:ignore */ .mform .fitem .felement input[name=email], .mform .fitem .felement input[name=email2], .mform .fitem .felement input[name=url], .mform .fitem .felement input[name=idnumber], .mform .fitem .felement input[name=phone1], .mform .fitem .felement input[name=phone2] { text-align: left; direction: ltr; } .que.match .mediaplugin { width: 50vw; } /* rtl:ignore */ #page-admin-grade-edit-scale-edit .error input#id_name { margin-right: 170px; } #page-grade-edit-outcome-course .courseoutcomes { margin-left: auto; margin-right: auto; width: 100%; } #page-grade-edit-outcome-course .courseoutcomes td { text-align: center; } /* Install Process' text fields Forms, should always be justified to the left */ /* rtl:ignore */ #installform #id_wwwroot, #installform #id_dirroot, #installform #id_dataroot, #installform #id_dbhost, #installform #id_dbname, #installform #id_dbuser, #installform #id_dbpass, #installform #id_prefix { direction: ltr; } .mdl-right > label { display: inline-block; } .singleselect { max-width: 100%; } .form-item .form-label label { margin-bottom: 0; } div#dateselector-calendar-panel { z-index: 3100; /* Set higher than the z-index of the filemanager - see MDL-39047. */ } fieldset.coursesearchbox label { display: inline; } /** * Show the labels above text editors and file managers except on wide screens. */ /* Section and module editing forms contain special JS components for the availability system (if enabled). */ #id_availabilityconditionsjson[aria-hidden=true], .availability-field [aria-hidden=true] { display: none; } .availability-field label { display: inline-flex; } .availability-field .availability-group label { vertical-align: top; } .availability-eye { clear: left; float: left; } .availability-inner, .availability-plugincontrols { float: left; border-radius: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.125); padding: 1rem; margin-top: 0.5rem; } .availability-plugincontrols, .availability-childlist .availability-inner { margin-left: 0.625rem; } .availability-field .availability-plugincontrols .availability-group select { max-width: 12rem; } /* Custom styles for autocomplete form element */ /* These styles reserve a standard amount of space in the DOM to avoid flicker when the original select element is replaced */ [data-fieldtype=autocomplete] select, [data-fieldtype=tags] select, .form-autocomplete-original-select { visibility: hidden; overflow: hidden; width: 15rem; height: 44px; margin: 0; padding: 0; border: 0; margin-top: 1.65625rem; vertical-align: bottom; } .form-autocomplete-selection { margin: 0.25rem 0; min-height: 2.375rem; } .form-autocomplete-selection [role=option] { cursor: pointer; white-space: inherit; word-break: break-word; line-height: 1.4; text-align: left; } .form-autocomplete-suggestions { position: absolute; background-color: #fff; border: 1px solid #8f959e; min-width: 206px; max-height: 20em; overflow: auto; margin: 0.125rem 0 0; padding: 0.5rem 0; z-index: 3; } .form-autocomplete-suggestions li { list-style-type: none; padding: 0.25rem 1.5rem; margin: 0; cursor: pointer; color: #1d2125; } .form-autocomplete-suggestions li:hover, .form-autocomplete-suggestions li:focus, .form-autocomplete-suggestions li[aria-selected=true] { background-color: #0f6cbf; color: #fff; } .form-autocomplete-suggestions li[aria-disabled=true] { pointer-events: none; color: #6a737b; background-color: #e9ecef; } .form-autocomplete-suggestions li::before { content: ""; } .form-autocomplete-downarrow { color: #1d2125; top: 0.2rem; right: 0.5rem; cursor: pointer; } .form-autocomplete-downarrow .loading-icon { position: absolute; top: 0; left: 0; background-color: #fff; } /** Undo some bootstrap things */ .form-autocomplete-selection + input.form-control { width: auto; display: inline-block; vertical-align: middle; } .form-autocomplete-selection [data-active-selection=true] { box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } select.form-control[size], select.form-control[multiple] { padding-right: 0; } select.form-control[size] option, select.form-control[multiple] option { width: fit-content; } /* Non-bootstrap selects with a size show their contents outside of the element. * Remove when we update to stable bootstrap 4. (MDL-56511) */ select[size], select[multiple] { overflow: auto; } select[size="1"] { overflow: visible; } textarea[data-auto-rows] { overflow-x: hidden; resize: none; } /** Display elements under labels in vertical forms regardless of the screen size. */ .mform.full-width-labels .fitem.row { margin-left: 0; margin-right: 0; } .mform.full-width-labels .fitem.row > .col-md-3, .mform.full-width-labels .fitem.row > .col-md-9 { flex: 0 0 100%; max-width: 100%; width: inherit; padding-right: 0; padding-left: 0; } .mform.full-width-labels .fitem.row.femptylabel > .col-md-3 { display: none; } .mform.full-width-labels .fitem.row .form-control { width: 100%; } .mform .col-form-label .form-label-addon { margin-left: 0.25rem; } @media (min-width: 576px) { .mform:not(.full-width-labels) .col-form-label .form-label-addon { margin-left: auto; } } /** Allow wrapping an mform in a div with the form-inline class to have an inline, responsive form. */ @media (min-width: 768px) { .form-inline .col-md-9, .form-inline .col-md-3 { margin-bottom: 1rem; width: auto; } .form-inline .col-md-9 label, .form-inline .col-md-3 label { margin-left: 1rem; } } [data-fieldtype=modgrade] .form-group { padding-bottom: 0.375rem; } [data-fieldtype=modgrade] { background-color: #fff; border-radius: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.125); padding: 1.25rem; margin-left: 15px; max-width: 30rem; } [data-filetypesbrowserbody] [aria-expanded=false] > [role=group], [data-filetypesbrowserbody] [aria-expanded=false] [data-filetypesbrowserfeature=hideifcollapsed], [data-filetypesbrowserbody] [aria-expanded=true] [data-filetypesbrowserfeature=hideifexpanded] { display: none; } .form-inline[data-fieldtype=autocomplete], .form-inline[data-fieldtype=tags] { display: block; } [data-fieldtype=editor] > div { flex-grow: 1; } @media (min-width: 768px) { .mform fieldset .fcontainer.collapseable .col-form-label { padding-left: 2.5rem; } } @media (min-width: 576px) { .mform .form-inline .fdefaultcustom label { justify-content: initial; } } .collapsemenu .collapseall { display: block; } .collapsemenu .expandall { display: none; } .collapsemenu.collapsed .collapseall { display: none; } .collapsemenu.collapsed .expandall { display: block; } .input-group.form-inset .form-inset-item { position: absolute; padding-top: calc(0.375rem + 1px); z-index: 3; } .input-group.form-inset.form-inset-left .form-control { padding-left: 1.5rem; } .input-group.form-inset.form-inset-right .form-control { padding-right: 1.5rem; } .input-group.form-inset.form-inset-right .form-inset-item { right: 0; } .form-check.left-indented { padding-left: 0; } .pagelayout-login #region-main { border: 0; background-color: inherit; } .pagelayout-login #page { background: #f8f9fa; background-image: linear-gradient(to right, #f8f9fa 0%, #dee2e6 100%); background-repeat: repeat-x; } .pagelayout-login #page div[role=main] { height: 100%; } .login-wrapper { display: flex; align-items: center; justify-content: center; height: 100%; } .login-container { background-color: #fff; padding: 3rem; box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); margin-bottom: 2rem; } .login-container .login-languagemenu { display: flex; justify-content: flex-start; } .login-container .login-languagemenu .dropdown-menu { max-height: 300px; overflow-y: auto; } .login-container .login-logo { display: flex; justify-content: center; margin-bottom: 1rem; } .login-container .login-divider { margin-top: 1.5rem; margin-bottom: 1.5rem; border-top: 1px solid #dee2e6; } .login-container h1.login-heading { font-size: 1.875rem; } .login-container h2.login-heading { font-size: 1.40625rem; } .login-container .login-identityproviders .login-identityprovider-btn { border: 1px solid #dee2e6; } .login-container .divider { width: 1px; background-color: #dee2e6; height: 1.875rem; } .login-container .action-menu-trigger a { margin: 0.5rem 0; } @media (min-width: 768px) { .login-container { width: 500px !important; /* stylelint-disable-line declaration-no-important */ border-radius: 0.5rem; } } /* modules.less */ select { width: auto; } .path-mod .activity-header:not(:empty) { background-color: #f8f9fa; margin-bottom: 1rem; padding-left: 1rem; padding-right: 1rem; border-radius: 0.5rem; } .path-mod .activity-header:not(:empty) > div:last-child > div:last-child { border-bottom: 0; } .path-mod .activity-information .activity-dates { padding-top: 1rem; padding-bottom: 1rem; border-bottom: 1px solid #dee2e6; } .path-mod .activity-information .completion-info { padding-top: 1rem; padding-bottom: 1rem; border-bottom: 1px solid #dee2e6; } .path-mod .activity-description { padding-top: 1rem; padding-bottom: 1rem; } .path-mod .activity-description > .box.py-3 { padding-top: 0 !important; /* stylelint-disable-line declaration-no-important */ padding-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */ } .path-mod .activity-description > .box.py-3:empty { display: none; } .path-mod .automatic-completion-conditions .badge { font-size: 80%; padding: 0.5rem; margin-top: 0.25rem; mix-blend-mode: multiply; } .path-mod .automatic-completion-conditions .badge.badge-light { background-color: #e9ecef !important; /* stylelint-disable-line declaration-no-important */ } .path-mod .automatic-completion-conditions .badge .icon { width: 0.7rem; height: 0.7rem; font-size: 0.7rem; } .path-mod .automatic-completion-conditions .badge:first-child { margin-top: 0; } .path-mod .activity-description .no-overflow p:last-child { padding-bottom: 0; margin-bottom: 0; } .path-mod-choice .horizontal .choices .option { display: inline-block; } .path-mod-choice .choices .option label { vertical-align: top; } .path-mod-forum .forumsearch input, .path-mod-forum .forumsearch .helptooltip { margin: 0 3px; } .path-mod-forum .forumheaderlist, .path-mod-forum .forumheaderlist td { border: none; } .path-mod-forum .forumheaderlist thead .header, .path-mod-forum .forumheaderlist tbody .discussion td { white-space: normal; vertical-align: top; padding-left: 0.5em; padding-right: 0.5em; } .path-mod-forum .forumheaderlist thead .header { white-space: normal; vertical-align: top; } .path-mod-forum .forumheaderlist thead .header.replies { text-align: center; } .path-mod-forum .forumheaderlist thead .header.lastpost { text-align: right; } .path-mod-forum .forumheaderlist thead .header th.discussionsubscription, .path-mod-forum .forumheaderlist tbody .discussion td.discussionsubscription { width: 16px; padding-left: 0.5em; padding-right: 0.5em; } .path-mod-forum .forumheaderlist .discussion .replies, .path-mod-forum .forumheaderlist .discussion .lastpost { white-space: normal; } .path-mod-forum .forumheaderlist .discussion .discussionsubscription, .path-mod-forum .forumheaderlist .discussion .replies { text-align: center; } .path-mod-forum .forumheaderlist .discussion .topic, .path-mod-forum .forumheaderlist .discussion .discussionsubscription, .path-mod-forum .forumheaderlist .discussion .topic.starter, .path-mod-forum .forumheaderlist .discussion .replies, .path-mod-forum .forumheaderlist .discussion .lastpost { vertical-align: top; } .path-mod-forum .discussion-list .topic { font-weight: inherit; } .discussion-settings-container .custom-select { width: 100%; } .discussion-settings-container input { max-width: 100%; } .forumpost { border: 1px solid #dee2e6; display: block; padding: 6px; } .forumpost .header { margin-bottom: 3px; } .forumpost .picture img { margin: 3px; } .forumpost .picture img.userpicture { margin-left: 3px; margin-right: 10px; } .forumpost .content .posting.fullpost { margin-top: 8px; } .forumpost .row { display: block; } .forumpost .row .topic, .forumpost .row .content-mask, .forumpost .row .options { margin-left: 48px; } .forumpost .row.side { clear: both; } .forumpost .row .left { width: 48px; } .forumpost .options .commands { margin-left: 0; } .forumpost .subject { font-weight: bold; } .forumsearch input[type=text] { margin-bottom: 0; } #page-mod-forum-view table .fit-content { width: 1px; white-space: nowrap; } #page-mod-forum-view table .limit-width { max-width: 200px; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; } #page-mod-forum-view table .limit-width .author-info { max-width: calc(100% - 35px - 0.5rem); } #page-mod-forum-discuss .discussioncontrols { width: auto; margin: 0; } #page-mod-forum-discuss .discussioncontrols .form-inline input { margin-top: -1px; } /** Gently highlight the selected post by changing it's background to blue and then fading it out. */ @keyframes background-highlight { from { background-color: rgba(0, 123, 255, 0.5); } to { background-color: inherit; } } .path-mod-forum .nested-v2-display-mode, .path-mod-forum.nested-v2-display-mode { /** Reset the badge styling back to pill style. */ /** Style the ratings like a badge. */ /** Don't show the discussion locked alert in this mode because it's already indicated with a badge. */ /** Fix muted text contrast ratios for accessibility. */ /** Make the tag list text screen reader visible only */ } .path-mod-forum .nested-v2-display-mode .discussionsubscription, .path-mod-forum.nested-v2-display-mode .discussionsubscription { margin-top: 0; text-align: inherit; margin-bottom: 0; } .path-mod-forum .nested-v2-display-mode .preload-subscribe, .path-mod-forum .nested-v2-display-mode .preload-unsubscribe, .path-mod-forum.nested-v2-display-mode .preload-subscribe, .path-mod-forum.nested-v2-display-mode .preload-unsubscribe { display: none; } .path-mod-forum .nested-v2-display-mode .post-message, .path-mod-forum.nested-v2-display-mode .post-message { line-height: 1.6; } .path-mod-forum .nested-v2-display-mode .indent, .path-mod-forum.nested-v2-display-mode .indent { margin-left: 0; } .path-mod-forum .nested-v2-display-mode .badge, .path-mod-forum.nested-v2-display-mode .badge { font-size: inherit; font-weight: inherit; padding-left: 0.5rem; padding-right: 0.5rem; border-radius: 10rem; } .path-mod-forum .nested-v2-display-mode .badge-light, .path-mod-forum.nested-v2-display-mode .badge-light { background-color: #f6f6f6; color: #5b5b5b; } .path-mod-forum .nested-v2-display-mode .rating-aggregate-container, .path-mod-forum.nested-v2-display-mode .rating-aggregate-container { background-color: #f6f6f6; color: #5b5b5b; padding: 0.25em 0.5em; line-height: 1; margin-right: 0.5rem; vertical-align: middle; border-radius: 10rem; text-align: center; } .path-mod-forum .nested-v2-display-mode .ratinginput, .path-mod-forum.nested-v2-display-mode .ratinginput { padding: 0.25em 1.75rem 0.25em 0.75em; line-height: 1; height: auto; border-radius: 10rem; } @media (max-width: 767.98px) { .path-mod-forum .nested-v2-display-mode .ratinginput, .path-mod-forum.nested-v2-display-mode .ratinginput { margin-top: 0.5rem; } } .path-mod-forum .nested-v2-display-mode .group-image, .path-mod-forum.nested-v2-display-mode .group-image { width: 35px; height: 35px; margin-right: 0; float: none; display: inline-block; } .path-mod-forum .nested-v2-display-mode .alert.discussionlocked, .path-mod-forum.nested-v2-display-mode .alert.discussionlocked { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .path-mod-forum .nested-v2-display-mode .text-muted, .path-mod-forum .nested-v2-display-mode .dimmed_text, .path-mod-forum.nested-v2-display-mode .text-muted, .path-mod-forum.nested-v2-display-mode .dimmed_text { color: #707070 !important; /* stylelint-disable-line declaration-no-important */ } .path-mod-forum .nested-v2-display-mode .author-header, .path-mod-forum.nested-v2-display-mode .author-header { font-style: italic; } .path-mod-forum .nested-v2-display-mode .author-header .author-name, .path-mod-forum.nested-v2-display-mode .author-header .author-name { font-style: normal; } .path-mod-forum .nested-v2-display-mode .tag_list > b, .path-mod-forum.nested-v2-display-mode .tag_list > b { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .path-mod-forum .nested-v2-display-mode :target > .focus-target, .path-mod-forum.nested-v2-display-mode :target > .focus-target { animation-name: background-highlight; animation-duration: 1s; animation-timing-function: ease-in-out; animation-iteration-count: 1; } .path-mod-forum .nested-v2-display-mode .forum-post-container .replies-container .forum-post-container, .path-mod-forum.nested-v2-display-mode .forum-post-container .replies-container .forum-post-container { border-top: 1px solid #dee2e6; padding-top: 1.5rem; } .path-mod-forum .nested-v2-display-mode .forum-post-container .replies-container .forum-post-container .replies-container .forum-post-container, .path-mod-forum.nested-v2-display-mode .forum-post-container .replies-container .forum-post-container .replies-container .forum-post-container { border-top: none; padding-top: 0; } .path-mod-forum .nested-v2-display-mode .forum-post-container .replies-container .inline-reply-container .reply-author, .path-mod-forum.nested-v2-display-mode .forum-post-container .replies-container .inline-reply-container .reply-author { display: none; } .path-mod-forum .nested-v2-display-mode .forum-post-container .post-message p:last-of-type, .path-mod-forum.nested-v2-display-mode .forum-post-container .post-message p:last-of-type { margin-bottom: 0; } .path-mod-forum .nested-v2-display-mode .forum-post-container .author-image-container, .path-mod-forum.nested-v2-display-mode .forum-post-container .author-image-container { width: 70px; margin-right: 24px; flex-shrink: 0; } .path-mod-forum .nested-v2-display-mode .forum-post-container .inline-reply-container textarea, .path-mod-forum.nested-v2-display-mode .forum-post-container .inline-reply-container textarea { border: 0; resize: none; } .path-mod-forum .nested-v2-display-mode .forum-post-container .indent, .path-mod-forum.nested-v2-display-mode .forum-post-container .indent { /** * The first post and first set of replies have a larger author image so offset the 2nd * set of replies by the image width + margin to ensure they align. */ } .path-mod-forum .nested-v2-display-mode .forum-post-container .indent .indent, .path-mod-forum.nested-v2-display-mode .forum-post-container .indent .indent { padding-left: 94px; /** * Reduce the size of the the author image for all second level replies (and below). */ /** * Adjust the indentation offset for all 3rd level replies and below for the smaller author image. */ } .path-mod-forum .nested-v2-display-mode .forum-post-container .indent .indent .author-image-container, .path-mod-forum.nested-v2-display-mode .forum-post-container .indent .indent .author-image-container { width: 30px; margin-right: 8px; padding-top: 3px; } .path-mod-forum .nested-v2-display-mode .forum-post-container .indent .indent .indent, .path-mod-forum.nested-v2-display-mode .forum-post-container .indent .indent .indent { padding-left: 38px; /** * Stop indenting the replies after the 5th reply. */ } .path-mod-forum .nested-v2-display-mode .forum-post-container .indent .indent .indent .indent .indent .indent, .path-mod-forum.nested-v2-display-mode .forum-post-container .indent .indent .indent .indent .indent .indent { padding-left: 0; } /** Extra small devices (portrait phones, less than 576px). */ @media (max-width: 767.98px) { #page-mod-forum-discuss.nested-v2-display-mode .forum-post-container .author-image-container { width: 30px; margin-right: 8px; } #page-mod-forum-discuss.nested-v2-display-mode .forum-post-container .indent .indent { padding-left: 38px; } #page-mod-forum-discuss.nested-v2-display-mode .forum-post-container .indent .indent .indent .indent { padding-left: 0; } #page-mod-forum-discuss.nested-v2-display-mode .group-image { width: 30px; height: 30px; } } .filter-scrollable { overflow-y: auto; max-height: 25em; margin-bottom: 1em; } .filter-dates-popover { width: 100%; max-width: 41.5em; } /* stylelint-disable-line max-line-length */ @keyframes expandSearchButton { from { height: 36px; width: 36px; border-radius: 18px; background-color: #e9ecef; } to { width: 100%; height: calc(1.5em + 1rem + 2px); border-radius: 0; background-color: #fff; border-color: #8f959e; padding-left: calc(0.5rem + 8px); padding-top: 0.5rem; padding-bottom: 0.5rem; font-size: 1.171875rem; @media (max-width: 1200px) { font-size: calc(0.9271875rem + 0.32625vw); } line-height: 1.5; right: 0; } } @keyframes collapseSearchButton { from { width: 100%; height: calc(1.5em + 1rem + 2px); border-radius: 0; background-color: #fff; border-color: #8f959e; padding-left: calc(0.5rem + 8px); padding-top: 0.5rem; padding-bottom: 0.5rem; font-size: 1.171875rem; @media (max-width: 1200px) { font-size: calc(0.9271875rem + 0.32625vw); } line-height: 1.5; right: 0; } to { height: 36px; width: 36px; border-radius: 18px; background-color: #e9ecef; } } .path-mod-forum .unified-grader .navbar { max-height: none; z-index: 1; } .path-mod-forum .unified-grader .body-container { overflow: auto; } .path-mod-forum .unified-grader .body-container.hidden { display: none !important; /* stylelint-disable-line declaration-no-important */ } .path-mod-forum .unified-grader .userpicture { height: 60px; width: 60px; } .path-mod-forum .unified-grader .grader-grading-panel { top: 0; position: absolute; height: 100%; z-index: 0; width: 430px; } .path-mod-forum .unified-grader .grader-grading-panel.hidden { right: -430px; } .path-mod-forum .unified-grader .grader-grading-panel .grading-icon { width: 36px; } .path-mod-forum .unified-grader .grader-grading-panel .user-picker-container .user-full-name { max-width: 240px; } .path-mod-forum .unified-grader .grader-grading-panel .user-picker-container .page-link { width: 36px; height: 36px; display: flex; text-align: center; align-items: center; justify-content: center; } .path-mod-forum .unified-grader .grader-grading-panel .header-container { height: 65px; position: relative; overflow: hidden; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .info-container { position: absolute; top: 50%; left: 0; transform: translateY(-50%); width: 100%; height: 100%; padding: 0.5rem; padding-right: calc(36px + 0.5rem); opacity: 1; visibility: visible; transition: left 0.3s ease-in-out; z-index: 1; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .toggle-search-button.expand { animation-name: expandSearchButton; animation-duration: 0.3s; animation-timing-function: ease-in-out; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .toggle-search-button.collapse { display: block; animation-name: collapseSearchButton; animation-duration: 0.3s; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container { overflow: hidden; position: absolute; top: 50%; right: 0; transform: translateY(-50%); z-index: 2; width: 100%; height: 100% !important; /* stylelint-disable-line declaration-no-important */ padding: 0.5rem; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container .search-input-container { position: relative; overflow: visible; flex-wrap: nowrap; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container .search-input-container input { padding-left: calc(0.5rem + 0.5rem + 34px); padding-right: calc(0.5rem + 36px); opacity: 1; visibility: visible; transition: opacity 0s linear 0.3s, visibility 0s linear; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container .search-input-container .search-icon { position: absolute; top: 50%; left: 0.5rem; transform: translateY(-50%); color: #495057; height: 36px; width: 34px; background-color: #fff; opacity: 1; visibility: visible; transition: opacity 0s linear 0.3s, visibility 0s linear 0.3s; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container .search-input-container .toggle-search-button { position: absolute; top: 50%; right: 0.5rem; transform: translateY(-50%); z-index: 1; color: inherit; text-align: left; padding-left: 9px; transition: right 0s linear 0.3s; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container .search-input-container .toggle-search-button .expanded-icon { opacity: 1; visibility: visible; max-width: 50px; max-height: 50px; transition: opacity 0s linear 0.3s, max-height 0s linear 0.3s, max-width 0s linear 0.3s, visibility 0s linear 0.3s; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container .search-input-container .toggle-search-button .collapsed-icon { opacity: 0; visibility: hidden; max-height: 0; max-width: 0; overflow: hidden; transition: opacity 0s linear 0.3s, max-height 0s linear 0.3s, max-width 0s linear 0.3s, visibility 0s linear 0.3s; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container.collapsed { width: calc(36px + 0.5rem + 0.5rem); transition: width 0.3s ease-in-out; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container.collapsed .search-input-container { flex-wrap: nowrap; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container.collapsed .search-input-container input, .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container.collapsed .search-input-container .search-icon { opacity: 0; visibility: hidden; transition: opacity 0s linear, visibility 0s linear; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container.collapsed .search-input-container input { padding-left: 0; padding-right: 0; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container.collapsed .search-input-container .toggle-search-button .expanded-icon { opacity: 0; visibility: hidden; max-height: 0; max-width: 0; overflow: hidden; transition: opacity 0s linear, max-height 0s linear, max-width 0s linear, visibility 0s linear; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container.collapsed .search-input-container .toggle-search-button .collapsed-icon { opacity: 1; visibility: visible; max-width: 50px; max-height: 50px; transition: opacity 0s linear, max-height 0s linear, max-width 0s linear, visibility 0s linear; } .path-mod-forum .unified-grader .grader-grading-panel .header-container .user-search-container:not(.collapsed) + .info-container { opacity: 0; visibility: hidden; left: -100%; transition: left 0.3s ease-in-out, opacity 0s linear 0.3s, visibility 0s linear 0.3s, padding 0s linear 0.3s; } .path-mod-forum .unified-grader .grader-module-content { overflow-y: auto; margin-right: 430px; transition: margin-right 0.2s ease-in-out; } @media (prefers-reduced-motion: reduce) { .path-mod-forum .unified-grader .grader-module-content { transition: none; } } .path-mod-forum .unified-grader .drawer-button { position: relative; } .path-mod-forum .unified-grader .drawer-button.active::after { content: ""; position: absolute; bottom: calc(-0.5rem - 1px); left: 0; width: 100%; height: 3px; background-color: #0f6cbf; } .path-mod-forum .unified-grader .drawer-button .icon { font-size: 20px; height: 20px; width: 20px; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container:last-of-type > hr { display: none; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container:last-of-type > hr { display: none; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container { position: relative; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button { position: absolute; height: 100%; width: 100%; left: 0; top: 0; padding-left: calc(1rem + 45px); text-align: left; z-index: 1; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button:not(.collapsed) { display: none; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .content { display: block; height: auto !important; /* stylelint-disable-line declaration-no-important */ } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .content .header { transition: margin-bottom 0.3s ease-in-out; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .content .header div + div { opacity: 1; visibility: visible; max-height: none; transition: opacity 0.3s linear, visibility 0s linear; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .content .body-content-container { opacity: 1; visibility: visible; max-height: none; transition: opacity 0.3s linear, visibility 0s linear; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .content .forum-post-core { opacity: 1; visibility: visible; max-height: none; transition: opacity 0.3s linear, visibility 0s linear; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button.collapsed + .content { opacity: 0.3; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button.collapsed + .content .header { margin-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */ } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button.collapsed + .content .header div + div { opacity: 0; visibility: hidden; max-height: 0; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button.collapsed + .content .body-content-container { opacity: 0; visibility: hidden; max-height: 0; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button.collapsed + .content .forum-post-core { opacity: 0; visibility: hidden; max-height: 0; } .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button.collapsed:hover + .content, .path-mod-forum .unified-grader .grader-module-content-display .discussion-container .posts-container .parent-container .show-content-button.collapsed:focus + .content { opacity: 1; } .path-mod-forum .unified-grader .grader-module-content-display .no-post-container .icon { height: 250px; width: 250px; margin-right: 0; } .path-mod-forum .unified-grader .grader-module-content-display .nested-v2-display-mode .discussion-container .posts-container .parent-container .show-content-button { padding-left: 94px; } .path-mod-forum .unified-grader .no-search-results-container .icon { height: 250px; width: 250px; margin-right: 0; } .path-mod-forum .unified-grader .nested-v2-display-mode .view-context-button { margin-left: 94px; border-radius: 0.6rem; } .path-mod-forum .unified-grader .nested-v2-display-mode .parent-container .author-image-container { position: relative; } .path-mod-forum .unified-grader .nested-v2-display-mode .parent-container .author-image-container:after { position: absolute; top: calc(70px + 0.5rem); content: ""; background-color: #e9ecef; width: 2px; height: calc(100% - 70px + 0.5rem); } .path-mod-forum .unified-grader .nested-v2-display-mode .parent-container + .post-container .author-image-container img { width: 30px !important; /* stylelint-disable-line declaration-no-important */ } .path-mod-forum .unified-grader .nested-v2-display-mode .post-subject, .path-mod-forum .modal .nested-v2-display-mode .post-subject { display: none; } @media (max-width: 575.98px) { .path-mod-forum .unified-grader .grader-grading-panel { width: 100%; position: fixed; height: calc(100vh - 50px); overflow: scroll; top: 50px; } .path-mod-forum .unified-grader .body-container { overflow: visible; } } .maincalendar .calendarmonth td, .maincalendar .calendarmonth th { border: 1px dotted #dee2e6; } .path-grade-report-grader h1 { text-align: inherit; } #page-mod-chat-gui_basic input#message { max-width: 100%; } #page-mod-data-view #singleimage { width: auto; } .template_heading { margin-top: 10px; } .breadcrumb-button { margin-top: 4px; } .breadcrumb-button .singlebutton { float: left; margin-left: 4px; } .langmenu form { margin: 0; } canvas { -ms-touch-action: auto; } div#dock { display: none; } /** General styles (scope: all of lesson) **/ .path-mod-lesson .invisiblefieldset.fieldsetfix { display: block; } .path-mod-lesson .answeroption .checkbox label p { display: inline; } .path-mod-lesson .form-inline label.form-check-label { display: inline-block; } .path-mod-lesson .slideshow { overflow: auto; padding: 15px; } #page-mod-lesson-view .branchbuttoncontainer .singlebutton button[type=submit] { white-space: normal; } #page-mod-lesson-view .vertical .singlebutton { display: block; } #page-mod-lesson-view .vertical .singlebutton + .singlebutton { margin-left: 0; margin-top: 1rem; } #page-mod-lesson-view .fitem .felement .custom-select { align-self: flex-start; } .path-mod-lesson .generaltable td { vertical-align: middle; } .path-mod-lesson .generaltable td label { margin-bottom: 0; } .path-mod-lesson .generaltable td .highlight { display: inline-block; margin-left: 0.25rem; } .path-mod-lesson .generaltable td input[type=checkbox] { display: block; } .path-mod-wiki .wiki_headingtitle, .path-mod-wiki .midpad, .path-mod-wiki .wiki_headingtime { text-align: inherit; } .path-mod-wiki .wiki_contentbox { width: 100%; } .path-mod-survey .surveytable > tbody > tr:nth-of-type(even) { background-color: rgba(0, 0, 0, 0.03); } .path-mod-survey .surveytable .rblock label { text-align: center; } .nav .caret { margin-left: 4px; } .nav .divider { overflow: hidden; width: 0; } .userloggedinas .usermenu .usertext, .userswitchedrole .usermenu .usertext, .loginfailures .usermenu .usertext { float: left; text-align: right; margin-right: 0.5rem; height: 35px; } .userloggedinas .usermenu .usertext .meta, .userswitchedrole .usermenu .usertext .meta, .loginfailures .usermenu .usertext .meta { font-size: 0.8203125rem; align-items: center; } .userloggedinas .usermenu .avatar img, .userswitchedrole .usermenu .avatar img, .loginfailures .usermenu .avatar img { margin: 0; } .userloggedinas .usermenu .userbutton .avatars { position: relative; display: inline-block; } .userloggedinas .usermenu .userbutton .avatars .avatar.current { display: inline-block; position: absolute; bottom: 0; right: 0; width: 20px; height: 20px; border-radius: 50%; } .userloggedinas .usermenu .userbutton .avatars .avatar.current img { vertical-align: baseline; } .userloggedinas .usermenu .userbutton .avatars .avatar.current .userinitials.size-35 { width: 20px; height: 20px; border: 1px solid #dee2e6; background-color: #fff; font-size: 0.5625rem; } .userloggedinas .usermenu .userbutton .avatars .avatar img { width: inherit; height: inherit; } .userloggedinas .usermenu .userbutton .avatars .realuser { width: 35px; height: 35px; display: inline-block; } .userinitials { background-color: #e9ecef; vertical-align: middle; display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; color: #343a40; font-weight: normal; margin-right: 0.25rem; } .userinitials.size-16, .userinitials.size-30 { font-size: 0.7rem; width: 30px; height: 30px; } .userinitials.size-35 { width: 35px; height: 35px; } .userinitials.size-50 { width: 50px; height: 50px; } .userinitials.size-64 { width: 64px; height: 64px; } .userinitials.size-100 { width: 100px; height: 100px; font-size: 1.875rem; } img.userpicture { margin-right: 0.25rem; } @media (max-width: 767.98px) { .usertext { display: none; } } #page-mod-quiz-mod #id_reviewoptionshdr .col-md-3, #page-mod-quiz-mod #id_reviewoptionshdr .col-md-9 { width: auto; max-width: none; } #page-mod-quiz-mod #id_reviewoptionshdr .form-group { float: left; width: 20rem; display: inline-block; min-height: 12rem; } #page-mod-quiz-mod #id_reviewoptionshdr .btn-link { line-height: 1.5; vertical-align: bottom; } #page-mod-quiz-mod #id_reviewoptionshdr .form-inline { float: left; clear: left; } #page-mod-quiz-mod #id_reviewoptionshdr .form-check { width: auto; height: 22px; justify-content: flex-start; } #page-mod-quiz-mod #id_reviewoptionshdr .review_option_item { width: 90%; height: 22px; } .path-mod-quiz #mod_quiz_navblock .qnbutton { text-decoration: none; font-size: 14px; line-height: 20px; font-weight: normal; background-color: #fff; background-image: none; height: 40px; width: 30px; border-radius: 3px; border: 0; overflow: hidden; white-space: nowrap; margin: 0 6px 6px 0; } .path-mod-quiz #mod_quiz_navblock span.qnbutton { cursor: default; background-color: #e9ecef; color: #495057; } .path-mod-quiz #mod_quiz_navblock a.qnbutton:hover, .path-mod-quiz #mod_quiz_navblock a.qnbutton:active, .path-mod-quiz #mod_quiz_navblock a.qnbutton:focus { text-decoration: underline; } .path-mod-quiz #mod_quiz_navblock .qnbutton .thispageholder { border: 1px solid; border-radius: 3px; z-index: 1; } .path-mod-quiz #mod_quiz_navblock .qnbutton.thispage .thispageholder { border-width: 3px; } .path-mod-quiz #mod_quiz_navblock .allquestionsononepage .qnbutton.thispage .thispageholder { border-width: 1px; } .path-mod-quiz #mod_quiz_navblock .qnbutton.flagged .thispageholder { background: transparent url([[pix:theme|mod/quiz/flag-on]]) 15px 0 no-repeat; } .path-mod-quiz #mod_quiz_navblock .qnbutton .trafficlight { border: 0; background: #fff none center/10px no-repeat scroll; height: 20px; margin-top: 20px; border-radius: 0 0 3px 3px; } .path-mod-quiz #mod_quiz_navblock .qnbutton.notyetanswered .trafficlight, .path-mod-quiz #mod_quiz_navblock .qnbutton.invalidanswer .trafficlight { background-color: #fff; } .path-mod-quiz #mod_quiz_navblock .qnbutton.invalidanswer .trafficlight { background-image: url([[pix:theme|mod/quiz/warningtriangle]]); } .path-mod-quiz #mod_quiz_navblock .qnbutton.correct .trafficlight { background-image: url([[pix:theme|mod/quiz/checkmark]]); background-color: #357a32; } .path-mod-quiz #mod_quiz_navblock .qnbutton.blocked .trafficlight { background-image: url([[pix:core|t/locked]]); background-color: #e9ecef; } .path-mod-quiz #mod_quiz_navblock .qnbutton.notanswered .trafficlight, .path-mod-quiz #mod_quiz_navblock .qnbutton.incorrect .trafficlight { background-color: #ca3120; } .path-mod-quiz #mod_quiz_navblock .qnbutton.partiallycorrect .trafficlight { background-image: url([[pix:theme|mod/quiz/whitecircle]]); background-color: #f0ad4e; } .path-mod-quiz #mod_quiz_navblock .qnbutton.complete .trafficlight, .path-mod-quiz #mod_quiz_navblock .qnbutton.answersaved .trafficlight, .path-mod-quiz #mod_quiz_navblock .qnbutton.requiresgrading .trafficlight { background-color: #6a737b; } #page-mod-quiz-edit ul.slots li.section li.activity .instancemaxmarkcontainer form input { height: 1.4em; vertical-align: middle; } #page-mod-quiz-edit ul.slots li.section li.activity .instancemaxmarkcontainer { padding: 0.5em 0 0.5em 0.1em; margin: 2px; } /* Countdown timer. */ #page-mod-quiz-attempt #region-main { overflow-x: inherit; } #quiz-timer-wrapper { display: none; position: sticky; justify-content: end; top: 65px; z-index: 1020; } #quiz-timer-wrapper #quiz-timer { border: 1px solid #ca3120; background-color: #fff; } .pagelayout-embedded #quiz-timer-wrapper { top: 5px; } #quiz-timer-wrapper #quiz-timer.timeleft0 { background-color: #ca3120; color: #fff; } #quiz-timer-wrapper #quiz-timer.timeleft1 { background-color: #d73422; color: #fff; } #quiz-timer-wrapper #quiz-timer.timeleft2 { background-color: #dd3d2b; color: #fff; } #quiz-timer-wrapper #quiz-timer.timeleft3 { background-color: #e04938; color: #fff; } #quiz-timer-wrapper #quiz-timer.timeleft4 { background-color: #e25546; color: #fff; } #quiz-timer-wrapper #quiz-timer.timeleft5 { background-color: #e46153; color: #fff; } #quiz-timer-wrapper #quiz-timer.timeleft6 { background-color: #e66d60; color: #fff; } #quiz-timer-wrapper #quiz-timer.timeleft7 { background-color: #e8796d; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft8 { background-color: #ea867a; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft9 { background-color: #ec9288; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft10 { background-color: #ee9e95; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft11 { background-color: #f0aaa2; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft12 { background-color: #f2b6af; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft13 { background-color: #f4c2bc; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft14 { background-color: #f7ceca; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft15 { background-color: #f9dad7; color: #1d2125; } #quiz-timer-wrapper #quiz-timer.timeleft16 { background-color: #fbe6e4; color: #1d2125; } .path-mod-assign [data-region=grade-actions-panel] [data-region=grade-actions] .collapse-buttons { top: auto; } .path-mod-assign #page-content [data-region=grade-panel] .mform:not(.unresponsive) .fcontainer .fitem.popout .felement { height: calc(100% - 4rem); } .path-mod-assign [data-region=grade-panel] { padding-top: 1rem; } .path-mod-assign [data-region=grade-panel] .fitem > .col-md-3, .path-mod-assign [data-region=grade-panel] .fitem > .col-md-9 { width: 100%; padding: 0; max-width: 100%; flex: none; } .path-mod-assign [data-region=grade-panel] fieldset, .path-mod-assign [data-region=grade-panel] .fitem.row { margin: 0; } .path-mod-assign [data-region=grade-panel] .mform .fitem.has-popout .felement { width: 100%; overflow: auto; height: calc(100% - 4rem); } .path-mod-assign [data-region=grade-panel] .mform .fitem .felement { width: auto; } .path-mod-assign [data-region=grade-panel] .popout { background-color: #fff; } .path-mod-assign [data-region=grade-panel] .fitem.has-popout { background-color: #fff; border-radius: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.125); padding: 1.25rem; margin-bottom: 1rem; } .path-mod-assign [data-region=grade-panel] .has-popout .col-md-3 { border-bottom: 1px solid rgba(0, 0, 0, 0.1); margin-bottom: 1rem; } .path-mod-assign [data-region=grade-panel] .popout > .col-md-3 { display: flex; align-items: flex-start; justify-content: space-between; font-size: 1.40625rem; } .path-mod-assign [data-region=grade-panel] .popout [data-region=popout-button] { margin-top: 0; } .path-mod-assign [data-region=assignment-info] { overflow-y: hidden; } .path-mod-assign [data-region=grading-navigation] { padding: 6px; } .path-mod-assign [data-region=grade-actions] { padding: 10px; } .path-mod-assign [data-region=user-info] .img-rounded { margin-top: 0; } .path-mod-assign [data-region=grading-navigation-panel] { height: 85px; } @media (max-width: 767px) { .path-mod-assign [data-region=grading-navigation-panel] { height: auto; } .path-mod-assign [data-region=user-info] { margin-top: 1rem; } } .path-mod-assign [data-region=grading-navigation] [data-region=input-field] input { width: auto; display: inline-block; } /** * Assign feedback. */ .assignfeedback_editpdf_widget * { box-sizing: content-box; } .assignfeedback_editpdf_widget button { box-sizing: border-box; } .assignfeedback_editpdf_widget .commentcolourbutton img { border-width: 0; } .assignfeedback_editpdf_widget .label { position: relative; padding: 0.75rem 1.25rem; margin-bottom: 1rem; border: 0 solid transparent; border-radius: 0.5rem; color: #00434e; background-color: #cce6ea; border-color: #b8dce2; /* stylelint-disable-line max-line-length */ } .assignfeedback_editpdf_widget .label hr { border-top-color: #a6d3db; } .assignfeedback_editpdf_widget .label .alert-link { color: #00171b; } .assignfeedback_editpdf_menu { padding: 0; } .path-mod-assign [data-region=grade-panel] .gradingform_guide .remark .commentchooser { float: none; } .path-mod-assign [data-region=grade-panel] .gradingform_guide .markingguideremark { width: 100%; } .path-mod-assign [data-region=grade-panel] .mform .fitem .felement[data-fieldtype=grading] { padding-left: 1rem; padding-right: 1rem; } .path-mod-assign [data-region=grade-panel] .showmarkerdesc, .path-mod-assign [data-region=grade-panel] .showstudentdesc { background-color: #fff; } /** * Mod LTI. */ .path-admin-mod-lti .btn .loader img, .path-admin-mod-lti #tool-list-loader-container .loader img { height: auto; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax { background-color: #fff; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd-nohd, .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd-noft, .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd, .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-right, .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-bottom { border: 0; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-right, .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit-bottom { border-radius: 0; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit div.yui-layout-bd { background-color: transparent; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax .yui-layout-unit.yui-layout-unit-center div.yui-layout-bd { background-color: #f8f9fa; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area.py-3 { padding: 0 !important; /* stylelint-disable-line declaration-no-important */ } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable, .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-input-area table.generaltable td.cell { border: 0; padding: 3px 15px; white-space: nowrap; margin-bottom: 0; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist { padding: 10px 5px; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list { border-top: 1px solid #dee2e6; border-bottom: 1px solid #fff; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list li { border-top: 1px solid #fff; border-bottom: 1px solid #dee2e6; padding: 5px 10px; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-userlist #users-list img { margin-right: 8px; border: 1px solid #ccc; border-radius: 4px; max-width: none; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages { margin: 20px 25px; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-event.course-theme { text-align: center; margin: 10px 0; font-size: 0.8203125rem; color: #495057; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-message.course-theme { margin-bottom: 0.75rem; border-radius: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.125); padding: 1.25rem; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-message.course-theme .time { float: right; font-size: 11px; color: #495057; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-message.course-theme { background-color: #fff; } .yui-skin-sam .yui-layout.path-mod-chat-gui_ajax #chat-messages .chat-message.course-theme .user { font-weight: bold; } /* reports.less */ #page-report-participation-index .participationselectform div label { display: inline-block; margin: 0 5px; } #page-report-participation-index .participationselectform div label[for=menuinstanceid] { margin-left: 0; } .path-backup .mform { /* These are long labels with checkboxes on the right. */ } .path-backup .mform .grouped_settings { clear: both; overflow: hidden; /* Use card styles but avoid extend because that brings in too much. */ } .path-backup .mform .grouped_settings.section_level { background-color: #fff; border-radius: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.125); padding: 1.25rem; margin-bottom: 1.25rem; } .path-backup .mform .grouped_settings.section_level::after { display: block; clear: both; content: ""; } .path-backup .mform .include_setting { width: 50%; display: inline-block; float: left; padding: 0.3rem; } .path-backup .mform .normal_setting { width: 50%; display: inline-block; float: left; padding: 0.3rem; } .path-backup { /* Bold section labels */ } .path-backup .section_level { font-weight: bold; } .path-backup .section_level .activity_level { font-weight: normal; } .path-backup .proceedbutton { margin-left: auto; } /* Override the columns width to leave more room for the labels. */ .path-backup .mform .root_setting, .path-backup .mform .grouped_settings { /* Striped rows like a table */ } .path-backup .mform .root_setting:nth-of-type(odd), .path-backup .mform .grouped_settings:nth-of-type(odd) { background-color: rgba(0, 0, 0, 0.03); } .path-backup .mform .root_setting:nth-of-type(even), .path-backup .mform .grouped_settings:nth-of-type(even) { background-color: #fff; } .path-backup .mform .root_setting .form-group, .path-backup .mform .grouped_settings .form-group { /* These checkboxes with no label on the left. */ } .path-backup .mform .root_setting .form-group .col-md-3.checkbox, .path-backup .mform .grouped_settings .form-group .col-md-3.checkbox { width: 0%; } .path-backup .mform .root_setting .form-group .col-md-9.checkbox, .path-backup .mform .grouped_settings .form-group .col-md-9.checkbox { width: 100%; left: 0; } /* Detail pair is (usually) some short label with a longer value */ .path-backup .detail-pair .detail-pair-label { width: 25%; float: left; clear: left; } .path-backup .detail-pair .detail-pair-value { width: 75%; float: left; } .path-backup .backup-restore .singlebutton { float: right; } /* Make these bits full width and work with the detail-pair */ .path-backup .backup-section { /* Fix for nested table headers */ /* Add card styles to backup sections */ background-color: #fff; border-radius: 0.5rem; border: 1px solid rgba(0, 0, 0, 0.125); padding: 1.25rem; margin-bottom: 1.25rem; } .path-backup .backup-section .sub-header, .path-backup .backup-section .backup-sub-section, .path-backup .backup-section .singlebutton, .path-backup .backup-section .header { width: 100%; float: left; clear: both; } .path-backup .backup-section th.header { width: auto; float: none; } .path-backup .backup-section ::after { content: ""; display: table; clear: both; } .path-backup .backup-section::after { display: block; clear: both; content: ""; } .path-backup .notification.dependencies_enforced { color: #ca3120; font-weight: bold; } .path-backup .backup_progress { margin-top: 1rem; margin-bottom: 1rem; } .path-backup .backup_progress .backup_stage { color: #6a737b; } .path-backup .backup_progress .backup_stage.backup_stage_current { font-weight: bold; color: inherit; } .path-backup .backup_progress span.backup_stage.backup_stage_complete { color: inherit; } #page-backup-restore .filealiasesfailures { background-color: #f4d6d2; } #page-backup-restore .filealiasesfailures .aliaseslist { background-color: #fff; } .path-backup .wibbler { width: 500px; margin: 0 auto 10px; border-bottom: 1px solid #000; border-right: 1px solid #000; border-left: 1px solid #000; position: relative; min-height: 4px; } .path-backup .wibbler .wibble { position: absolute; left: 0; right: 0; top: 0; height: 4px; } .path-backup .wibbler .state0 { background: #eee; } .path-backup .wibbler .state1 { background: #ddd; } .path-backup .wibbler .state2 { background: #ccc; } .path-backup .wibbler .state3 { background: #bbb; } .path-backup .wibbler .state4 { background: #aaa; } .path-backup .wibbler .state5 { background: #999; } .path-backup .wibbler .state6 { background: #888; } .path-backup .wibbler .state7 { background: #777; } .path-backup .wibbler .state8 { background: #666; } .path-backup .wibbler .state9 { background: #555; } .path-backup .wibbler .state10 { background: #444; } .path-backup .wibbler .state11 { background: #333; } .path-backup .wibbler .state12 { background: #222; } .generaltable { width: 100%; margin-bottom: 1rem; color: #1d2125; } .generaltable th, .generaltable td { padding: 0.75rem; vertical-align: top; border-top: 1px solid #dee2e6; } .generaltable thead th, .generaltable thead td { vertical-align: bottom; border-bottom: 2px solid #dee2e6; } .generaltable tbody + tbody { border-top: 2px solid #dee2e6; } .generaltable tbody tr:nth-of-type(odd) { background-color: rgba(0, 0, 0, 0.03); } .generaltable thead .sticky-column, .generaltable tbody tr:nth-of-type(even) { background-color: #fff; } .generaltable tbody tr:nth-of-type(odd) .sticky-column { background-color: rgba(0, 0, 0, 0.03); } .generaltable.table-sm th, .generaltable.table-sm td { padding: 0.3rem; } .generaltable tbody tr:hover { color: #1d2125; background-color: rgba(0, 0, 0, 0.075); } .generaltable tbody tr:hover.dimmed_text a:not(.menu-action) { color: #1d2125; } .generaltable tbody tr:hover td.sticky-column { background-color: rgba(0, 0, 0, 0.075); } table caption { font-size: 24px; font-weight: bold; line-height: 42px; text-align: left; caption-side: top; } table .sticky-column { position: sticky; left: 0; background-color: inherit; } .table-dynamic .loading-icon { position: absolute; left: calc(50% - 1.5rem); top: 200px; } .table-dynamic .loading-icon .icon { height: 3rem; width: 3rem; font-size: 3rem; } .singlebutton { display: inline-block; } .singlebutton + .singlebutton { margin-left: 0.5rem; } .continuebutton { text-align: center; } p.arrow_button { margin-top: 5em; text-align: center; } #addcontrols { margin-top: 11.25rem; text-align: center; margin-bottom: 3em; } #addcontrols label { display: inline; } #addcontrols input, #removecontrols input { width: 100%; margin: auto; } .btn-lineup { margin: 0 0 10px 5px; } .btn.btn-icon { height: 36px; width: 36px; font-size: 16px; line-height: 16px; padding: 0; border-radius: 50%; flex-shrink: 0; } .btn.btn-icon:hover, .btn.btn-icon:focus { background-color: #e9ecef; } .btn.btn-icon.icon-size-0 { height: 20px !important; /* stylelint-disable-line declaration-no-important */ width: 20px !important; /* stylelint-disable-line declaration-no-important */ font-size: 0 !important; /* stylelint-disable-line declaration-no-important */ line-height: 0 !important; /* stylelint-disable-line declaration-no-important */ } .btn.btn-icon.icon-size-1 { height: 24px !important; /* stylelint-disable-line declaration-no-important */ width: 24px !important; /* stylelint-disable-line declaration-no-important */ font-size: 4px !important; /* stylelint-disable-line declaration-no-important */ line-height: 4px !important; /* stylelint-disable-line declaration-no-important */ } .btn.btn-icon.icon-size-2 { height: 28px !important; /* stylelint-disable-line declaration-no-important */ width: 28px !important; /* stylelint-disable-line declaration-no-important */ font-size: 8px !important; /* stylelint-disable-line declaration-no-important */ line-height: 8px !important; /* stylelint-disable-line declaration-no-important */ } .btn.btn-icon.icon-size-3 { height: 36px !important; /* stylelint-disable-line declaration-no-important */ width: 36px !important; /* stylelint-disable-line declaration-no-important */ font-size: 16px !important; /* stylelint-disable-line declaration-no-important */ line-height: 16px !important; /* stylelint-disable-line declaration-no-important */ } .btn.btn-icon.icon-size-4 { height: 44px !important; /* stylelint-disable-line declaration-no-important */ width: 44px !important; /* stylelint-disable-line declaration-no-important */ font-size: 24px !important; /* stylelint-disable-line declaration-no-important */ line-height: 24px !important; /* stylelint-disable-line declaration-no-important */ } .btn.btn-icon.icon-size-5 { height: 52px !important; /* stylelint-disable-line declaration-no-important */ width: 52px !important; /* stylelint-disable-line declaration-no-important */ font-size: 32px !important; /* stylelint-disable-line declaration-no-important */ line-height: 32px !important; /* stylelint-disable-line declaration-no-important */ } .btn.btn-icon.icon-size-6 { height: 60px !important; /* stylelint-disable-line declaration-no-important */ width: 60px !important; /* stylelint-disable-line declaration-no-important */ font-size: 40px !important; /* stylelint-disable-line declaration-no-important */ line-height: 40px !important; /* stylelint-disable-line declaration-no-important */ } .btn.btn-icon.icon-size-7 { height: 68px !important; /* stylelint-disable-line declaration-no-important */ width: 68px !important; /* stylelint-disable-line declaration-no-important */ font-size: 48px !important; /* stylelint-disable-line declaration-no-important */ line-height: 48px !important; /* stylelint-disable-line declaration-no-important */ } .btn-primary:focus, .btn-primary.focus { outline: 0.2rem solid #000102; box-shadow: inset 0 0 0 2px #fff; } .btn-secondary:focus, .btn-secondary.focus { outline: 0.2rem solid #5f6e7d; box-shadow: inset 0 0 0 2px #fff; } .btn-success:focus, .btn-success.focus { outline: 0.2rem solid black; box-shadow: inset 0 0 0 2px #fff; } .btn-info:focus, .btn-info.focus { outline: 0.2rem solid black; box-shadow: inset 0 0 0 2px #fff; } .btn-warning:focus, .btn-warning.focus { outline: 0.2rem solid #694109; box-shadow: inset 0 0 0 2px #fff; } .btn-danger:focus, .btn-danger.focus { outline: 0.2rem solid #1a0604; box-shadow: inset 0 0 0 2px #fff; } .btn-light:focus, .btn-light.focus { outline: 0.2rem solid #8193a5; box-shadow: inset 0 0 0 2px #fff; } .btn-dark:focus, .btn-dark.focus { outline: 0.2rem solid black; box-shadow: inset 0 0 0 2px #fff; } .btn-outline-primary:focus, .btn-outline-primary.focus { outline: 0.2rem solid #000102; box-shadow: inset 0 0 0 2px #343a40; } .btn-outline-secondary:focus, .btn-outline-secondary.focus { outline: 0.2rem solid #5f6e7d; box-shadow: inset 0 0 0 2px #343a40; } .btn-outline-success:focus, .btn-outline-success.focus { outline: 0.2rem solid black; box-shadow: inset 0 0 0 2px #343a40; } .btn-outline-info:focus, .btn-outline-info.focus { outline: 0.2rem solid black; box-shadow: inset 0 0 0 2px #343a40; } .btn-outline-warning:focus, .btn-outline-warning.focus { outline: 0.2rem solid #694109; box-shadow: inset 0 0 0 2px #343a40; } .btn-outline-danger:focus, .btn-outline-danger.focus { outline: 0.2rem solid #1a0604; box-shadow: inset 0 0 0 2px #343a40; } .btn-outline-light:focus, .btn-outline-light.focus { outline: 0.2rem solid #8193a5; box-shadow: inset 0 0 0 2px #343a40; } .btn-outline-dark:focus, .btn-outline-dark.focus { outline: 0.2rem solid black; box-shadow: inset 0 0 0 2px #343a40; } .gradetreebox { margin: 20px 0 30px 0; } .gradetreebox h4 { font-size: 0.9375rem; } .gradetreebox th.cell, .gradetreebox input[type=text] { width: auto; } .gradetreebox input[type=text], .gradetreebox select { margin-bottom: 0; } .core_grades_notices .singlebutton { display: inline-block; } .path-grade-report #maincontent + .urlselect { position: absolute; left: 40vw; } .path-grade-report-grader #region-main { min-width: 100%; width: auto; display: flex; flex-direction: column; } .path-grade-report-grader #region-main > .card { width: auto; overflow-x: initial; } .path-grade-report-grader #region-main div[role=main] { flex: 1 1 auto; } .path-grade-report-grader [data-region=blocks-column] { width: 100%; clear: both; } .path-grade-report-grader .gradepass, .path-grade-report-user .gradepass { color: #357a32; } .path-grade-report-grader .gradefail, .path-grade-report-user .gradefail { color: #ca3120; } .path-grade #region-main { overflow-x: visible; } .path-grade .user-heading .userinitials { width: 50px; height: 50px; } #page-grade-grading-manage #activemethodselector label { display: inline-block; } #page-grade-grading-manage #activemethodselector .helptooltip { margin-right: 0.5em; } #page-grade-grading-manage .actions { display: block; text-align: center; margin-bottom: 1em; } #page-grade-grading-manage .actions .action { display: inline-block; position: relative; vertical-align: top; width: 150px; text-align: center; overflow: hidden; margin: 0.5em; padding: 1em; border: 1px solid #aaa; } #page-grade-grading-manage .actions .action .action-text { position: relative; top: 0.4em; font-size: 14px; white-space: normal; } #page-grade-grading-form-rubric-edit .gradingform_rubric_editform .status { font-size: 70%; } .gradingform_rubric { margin-bottom: 1em; } .gradingform_rubric.evaluate .criterion .levels .level:hover, .gradingform_rubric.evaluate .criterion .levels .level.checked { background: #dff0d8; } .gradingform_rubric.evaluate .criterion .levels .level.checked { border: none; border-left: 1px solid #dee2e6; } .gradingform_rubric .criterion .description { vertical-align: top; padding: 6px; } .gradingform_rubric .criterion .description textarea { margin-bottom: 0; height: 115px; } .gradingform_rubric .criterion .definition textarea { width: 80%; margin-bottom: 0; } .gradingform_rubric .criterion .score { margin-top: 5px; margin-right: 28px; font-style: italic; font-weight: bold; color: #2d662a; } .gradingform_rubric .criterion .score input { margin-bottom: 0; } .gradingform_rubric .criterion .level { vertical-align: top; padding: 6px; } .gradingform_rubric .criterion .level.currentchecked { background: #fff0f0; } .gradingform_rubric .criterion .level.checked { background: #d0ffd0; border: 1px solid #555; } .gradingform_rubric .criterion .level .delete { position: relative; width: 32px; height: 32px; margin-top: -32px; clear: both; float: right; } .gradingform_rubric .criterion .level .delete input { display: block; position: absolute; right: 0; bottom: 0; height: 24px; width: 24px; margin: 0; } .gradingform_rubric .criterion .level .delete input:hover { background-color: #ddd; } .gradingform_rubric .criterion .scorevalue input { float: none; width: 2em; } .gradingform_rubric .criterion .scorevalue input.hiddenelement, .gradingform_rubric .criterion .scorevalue input.pseudotablink { width: 0; } .gradingform_rubric .criterion .addlevel { vertical-align: top; padding-top: 6px; } .gradingform_rubric .criterion .addlevel input { height: 30px; line-height: 1rem; } .gradingform_rubric .addcriterion { margin-left: 5px; padding: 0; margin-bottom: 1em; } .gradingform_rubric .addcriterion input { margin: 0; color: inherit; text-shadow: inherit; border: 0 none; line-height: inherit; background: transparent url([[pix:t/add]]) no-repeat 7px 8px; padding-left: 26px; } .gradingform_rubric .options { clear: both; } .gradingform_rubric .options .option label { margin: 0; padding: 0; font-size: inherit; font-weight: normal; line-height: 2em; color: inherit; text-shadow: none; background-color: transparent; } .gradingform_rubric .options .option input { margin-left: 5px; margin-right: 12px; } .grade-display .description { font-size: 1rem; } .criterion .description { font-size: 1rem; } .criterion .criterion-toggle .expanded-icon { display: block; } .criterion .criterion-toggle .collapsed-icon { display: none; } .criterion .criterion-toggle.collapsed .expanded-icon { display: none; } .criterion .criterion-toggle.collapsed .collapsed-icon { display: block; } .path-grade-edit-tree .collapse-list .unlist { padding-left: 2rem; } .path-grade-edit-tree .collapse-list .unlist [data-for=sectionnode]:focus > .collapse-list-item:first-child { background-color: #e0f0f2; border-color: #b8dce2; } .path-grade-edit-tree .collapse-list .unlist [data-for=sectionnode][data-selected=true] > .collapse-list-item:first-child { background-color: #e0f0f2; border-color: #b8dce2; color: #0f6cbf; } .path-grade-edit-tree .collapse-list .unlist [data-for=sectionnode] .collapse-list-item-content[aria-hidden=true] { display: none; } .path-grade-edit-tree .collapse-list .unlist [data-for=sectionnode][aria-expanded=true] > .collapse-list-item .collapsed-icon { display: none; } .path-grade-edit-tree .collapse-list .unlist [data-for=sectionnode][aria-expanded=false] > .collapse-list-item .expanded-icon { display: none; } .path-grade-edit-tree .collapse-list .unlist .collapse-list-item { padding: 0.5rem 1rem; cursor: pointer; } .path-grade-edit-tree .collapse-list .unlist .collapse-list-item .collapse-list-item-name { font-weight: bold; } .path-grade-edit-tree .collapse-list .unlist .collapse-list-item .collapse-list-link { color: #1d2125; padding: 0 0.2rem; margin-right: 0.3rem; } .path-grade-edit-tree .collapse-list .unlist .collapse-list-item .collapse-list-link i { font-size: 12px; width: 12px; height: 12px; margin: 0; } .path-grade-edit-tree .gradetree-wrapper { padding: 10px 10px; background-color: #f8f9fa; } .path-grade-edit-tree .gradetree-wrapper .setup-grades h4 { margin: 0; } .path-grade-edit-tree .gradetree-wrapper .setup-grades .column-rowspan { padding: 0; width: 24px; min-width: 24px; max-width: 24px; } .path-grade-edit-tree .gradetree-wrapper .setup-grades .emptyrow { display: none; } .path-grade-edit-tree .gradetree-wrapper .setup-grades .gradeitemdescription { font-weight: normal; padding-left: 24px; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.spacer { height: 0.5rem; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr[data-hidden=true] { display: none; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr th { vertical-align: bottom; border: none; text-align: left; background-color: #f8f9fa; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr th.rowspan { padding: 0; width: 24px; min-width: 24px; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td { min-width: 4.5em; background-color: #f8f9fa; border: none; vertical-align: middle; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name .small { font-size: 70%; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name .itemselect { margin-right: 15px; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-name .itemicon { font-size: 18px; width: 18px; height: 18px; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-weight { min-width: 15em; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-weight .weightoverride { margin-right: 5px; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.column-actions .dropdown-toggle::after { display: none; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere { padding: 0; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere { display: block; width: 100%; margin: 5px 0 5px 0; padding: 3px 0 3px 0; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere hr { border-top: 2px dashed #8f959e; margin: 0; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr td.movehere a.movehere:hover hr { border-top: 2px dashed #0f6cbf; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td { background-color: #fff; border-top: 1px solid #dee2e6; border-bottom: 1px solid #dee2e6; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td:first-child { border-left: 1px solid #dee2e6; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td:last-child { border-right: 1px solid #dee2e6; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name { font-weight: bold; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div { display: flex; min-height: 30px; align-items: center; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div .form-check { padding: 0; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div .form-check .itemselect { margin-right: 5px; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category { height: 24px; width: 24px; font-size: 12px; line-height: 24px; margin-right: 3px; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category[aria-expanded=true] .expanded, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category[aria-expanded=false] .collapsed { display: none; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.category td.column-name div a.toggle-category i { font-size: 12px; width: 12px; height: 12px; color: #1d2125; margin: 0; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item td { background-color: #fff; border-top: 3px solid #f8f9fa; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td { min-width: 4.5em; background-color: #f8f9fa; border: none; vertical-align: middle; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td.column-name, .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td.column-name { padding-left: 0; } .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.categoryitem td:not(.column-actions), .path-grade-edit-tree .gradetree-wrapper .setup-grades.generaltable tr.item.courseitem td:not(.column-actions) { font-weight: bold; } .path-grade-edit-tree .gradetree-wrapper .badge-light { color: #1d2125; background-color: #ced4da; margin-right: 0.5em; margin-bottom: 0.5em; } /** * Grader report. */ .path-grade-report-grader .gradeparent tr .cell, .path-grade-report-grader .gradeparent .floater .cell { background-color: #fff; } .path-grade-report-grader .gradeparent tr .cell.gradecell .dropdown-menu.show, .path-grade-report-grader .gradeparent .floater .cell.gradecell .dropdown-menu.show { z-index: 1; } .path-grade-report-grader .gradeparent table, .path-grade-report-grader .gradeparent .cell { border-color: #dee2e6; } .path-grade-report-grader .gradeparent .heading .cell, .path-grade-report-grader .gradeparent .cell.category, .path-grade-report-grader .gradeparent .avg .cell { background-color: #f8f9fa; } .path-grade-report-grader .gradeparent table .clickable { cursor: pointer; } .path-grade-report-grader .gradeparent tr.heading { position: sticky; top: 60px; z-index: 4; } .path-grade-report-grader .gradeparent tr.userrow th { z-index: 2; } .path-grade-report-grader .gradeparent tr.userrow th.actions-menu-active { z-index: 3; } .path-grade-report-grader .gradeparent tr.lastrow { position: sticky; bottom: -1px; } .path-grade-report-grader .gradeparent tr.lastrow.pinned { z-index: 4; } .path-grade-report-grader .gradeparent tr.lastrow td, .path-grade-report-grader .gradeparent tr.lastrow th { border-top: 1px solid #dee2e6; } .path-grade-report-grader .gradeparent th.header { left: 0; position: sticky; } .path-grade-report-grader .gradeparent th.header#studentheader { z-index: 1; } .path-grade-report-grader .gradeparent td.noborder { border-right: transparent; } .path-grade-report-grader.hasstickyfooter .gradeparent tr.lastrow { bottom: calc(max(96px, 0.9375rem * 3) - 1px); } /** * User report. */ .path-grade-report-user .user-grade { border: none; } .path-grade-report-user .user-grade.generaltable .levelodd { background-color: rgba(0, 0, 0, 0.03); } .path-grade-report-user .user-grade .column-contributiontocoursetotal, .path-grade-report-user .user-grade .column-range, .path-grade-report-user .user-grade .column-percentage, .path-grade-report-user .user-grade .column-weight { /*rtl:ignore*/ direction: ltr; } /** * Single view. */ .path-grade-report-singleview .reporttable input[name^=finalgrade] { width: 80px; display: inline-block; } .path-grade-report-singleview .reporttable .action-menu { display: inline-block; margin-left: 0.5rem; float: right; } .path-grade-report-singleview .reporttable .dropdown-toggle::after { display: none; } .gradereport-grader-table input[name^=grade] { width: 80px; display: inline-block; } .gradereport-grader-table .dropdown-toggle::after { display: none; } .search-widget .dropdown-menu { padding: 0.8rem 1.2rem; } .search-widget .dropdown-menu.wide { width: 350px; } .search-widget .dropdown-menu.narrow { width: 250px; } .search-widget .dropdown-menu .dropdown-item span.email { color: #6a737b; } .search-widget .dropdown-menu .dropdown-item:hover span, .search-widget .dropdown-menu .dropdown-item:active span { color: #fff; } .search-widget .dropdown-menu .searchresultscontainer { height: 178px; font-size: 90%; } .search-widget .dropdown-menu .searchresultscontainer .searchresultitemscontainer { height: 178px; max-height: 178px; overflow: auto; } .search-widget .dropdown-menu .unsearchablecontentcontainer { border-top: 1px solid #dee2e6; padding-top: 10px; font-size: 90%; } #fitem_id_submitbutton { padding-right: 2em; } .gradestatus { padding-top: 10px; } .gradestatus .icon { margin-right: 1rem; } .columns-autoflow-1to1to1 { column-count: 3; } @media (max-width: 767px) { .columns-autoflow-1to1to1 { column-count: 1; } } /* some very targetted corrections to roll back nameclashes between * Moodle and Bootstrap like .row, .label, .content, .controls * * Mostly relies on these styles being more specific than the Bootstrap * ones in order to overule them. */ li.activity.label, .file-picker td.label { background: inherit; color: inherit; border: inherit; text-shadow: none; white-space: normal; display: block; font-size: inherit; line-height: inherit; text-align: inherit; } .file-picker td.label { display: table-cell; text-align: right; padding: 8px; } .choosercontainer #chooseform .option { font-size: 12px; } /* block.invisible vs .invisible * block.hidden vs .invisible * * uses .invisible where the rest of Moodle uses @mixin dimmed * fixible in block renderer? * * There's seems to be even more naming confusion here since, * blocks can be actually 'visible' (or not) to students, * marked 'visible' but really just dimmed to indicate to editors * that students can't see them or 'visible' to the user who * collapses them, 'visible' if you have the right role and in * different circumstances different sections of a block can * be 'visible' or not. * * currently worked around in renderers.php function block{} * by rewriting the class name "invisible" to "dimmed", * though the blocks don't look particularly different apart * from their contents disappearing. Maybe try .muted? or * dimming all the edit icons apart from unhide, might be a * nice effect, though they'd still be active. Maybe reverse * it to white? */ li.section.hidden, .block.hidden, .block.invisible { visibility: visible; display: block; } /* .row vs .row * * very tricky to track down this when it goes wrong, * since the styles are applied to generated content * * basically if you see things shifted left or right compared * with where they should be check for a .row */ .forumpost .row { margin-left: 0 !important; /* stylelint-disable-line declaration-no-important */ } .forumpost .row:before, .forumpost .row:after { content: none; } /* fieldset.hidden vs .hidden * * Moodle uses fieldset.hidden for mforms, to signify a collection of * form elements that don't have a box drawn round them. Bootstrap * uses hidden for stuff that is hidden in various responsive modes. * * Relatedly, there is also fieldset.invisiblefieldset which hides the * border and sets the display to inline. * * Originally this just set block and visible, but it is used * in random question dialogue in Quiz, * that dialogue is hidden and shown, so when hidden the * above workaround leaves you with a button floating around */ fieldset.hidden { display: inherit; visibility: inherit; } /* .container vs .container * * bootstrap uses .container to set the width of the layout at 960px or so, Moodle uses it * in the Quiz to contain the questions to add. If you don't overule the Bootstrap code, * it becomes near unuseable. */ #questionbank + .container { width: auto; } body:not(.jsenabled) .dropdown:hover > .dropdown-menu { display: block; margin-top: -6px; } body:not(.jsenabled) .langmenu:hover > .dropdown-menu, .langmenu.open > .dropdown-menu { display: block; max-height: 150px; overflow-y: auto; } .navbar.fixed-top .dropdown .dropdown-menu { max-height: calc(100vh - 60px); overflow-y: auto; } .page-item.active .page-link, .page-item.active .page-link:hover, .page-item.active .page-link:focus { z-index: inherit; } /* Force positioning of popover arrows. * * The Css prefixer used in Moodle does not support complex calc statements used * in Bootstrap 4 CSS. For example: * calc((0.5rem + 1px) * -1); is stripped out by lib/php-css-parser/Parser.php. * See MDL-61879. For now the arrow positions of popovers are fixed until this is resolved. */ .bs-popover-right .arrow, .bs-popover-auto[x-placement^=right] .arrow { left: -9px; } .bs-popover-left .arrow, .bs-popover-auto[x-placement^=left] .arrow { right: -9px; } .bs-popover-top .arrow, .bs-popover-auto[x-placement^=top] .arrow { bottom: -9px; } .bs-popover-bottom .arrow, .bs-popover-auto[x-placement^=bottom] .arrow { top: -9px; } .custom-select { word-wrap: normal; } /* Add commented out carousel transistions back in. * * The Css prefixer used in Moodle breaks on @supports syntax, See MDL-61515. */ .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right { transform: translateX(0); } .carousel-item-next, .active.carousel-item-right { transform: translateX(100%); } .carousel-item-prev, .active.carousel-item-left { transform: translateX(-100%); } /** * Reset all of the forced style on the page. * - Remove borders on header and content. * - Remove most of the vertical padding. * - Make the content region flex grow so it pushes things like the * next activity selector to the bottom of the page. */ body.reset-style #page-header .card { border: none; } body.reset-style #page-header .card .page-header-headings h1 { margin-bottom: 0; } @media (max-width: 767.98px) { body.reset-style #page-header .card .card-body { padding-left: 0; padding-right: 0; } } body.reset-style #page-header > div { padding-top: 0 !important; /* stylelint-disable-line declaration-no-important */ padding-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */ } body.reset-style #page-content { padding-bottom: 0 !important; /* stylelint-disable-line declaration-no-important */ } body.reset-style #page-content #region-main-box #region-main { border: none; display: inline-flex; flex-direction: column; padding: 0; height: 100%; width: 100%; padding-left: 1.25rem; padding-right: 1.25rem; vertical-align: top; } body.reset-style #page-content #region-main-box #region-main div[role=main] { flex: 1 0 auto; } body.reset-style #page-content #region-main-box #region-main .activity-navigation { overflow: hidden; } body.reset-style #page-content #region-main-box #region-main.has-blocks { width: calc(100% - 375px); } @media (max-width: 1199.98px) { body.reset-style #page-content #region-main-box #region-main.has-blocks { width: 100%; } } @media (max-width: 767.98px) { body.reset-style #page-content #region-main-box #region-main { padding-left: 0; padding-right: 0; } } body.reset-style #page-content #region-main-box [data-region=blocks-column] { margin-left: auto; } @media (max-width: 1199.98px) { body.reset-style #page-content #region-main-box { display: flex; flex-direction: column; } } body.reset-style select, body.reset-style input, body.reset-style textarea, body.reset-style .btn:not(.btn-icon) { border-radius: 0.6rem; } body.behat-site .fixed-top { position: absolute; } body.behat-site.hasstickyfooter .stickyfooter, body.behat-site .stickyfooter { position: inherit; z-index: inherit; } body.behat-site .dropdown-item { margin-top: 4px !important; /* stylelint-disable declaration-no-important */ } body.behat-site.drawer-ease { -webkit-transition: initial; -moz-transition: initial; transition: initial; } body.behat-site [data-region=drawer] { -webkit-transition: initial; -moz-transition: initial; transition: initial; position: absolute; } body.behat-site .custom-control, body.behat-site .custom-switch { padding-left: 0; } body.behat-site .custom-control-input { position: static; z-index: 0; opacity: 1; width: auto; } body.behat-site .custom-control-label::before, body.behat-site .custom-control-label::after { content: none; } body.behat-site [data-region=message-drawer] { padding-right: 10px; } body.behat-site.jsenabled #page-footer .footer-content-popover { display: block; } body.behat-site.path-grade-report-grader .gradeparent tr.heading, body.behat-site.path-grade-report-grader .gradeparent tr.lastrow, body.behat-site.path-grade-report-grader .gradeparent th.header { position: relative; left: auto; } body.behat-site.path-grade-report-grader .gradeparent tr.heading { top: auto; } .phpinfo table, .phpinfo th, .phpinfo h2 { margin: auto; } .phpinfo .e, .phpinfo .v, .phpinfo .h { border: 1px solid #000; font-size: 0.8em; vertical-align: baseline; color: #000; background-color: #ccc; } .phpinfo .e { background-color: #ccf; font-weight: bold; } .phpinfo .h { background-color: #99c; font-weight: bold; } body > .debuggingmessage { margin-top: 60px; } body > .debuggingmessage ~ .debuggingmessage { margin-top: 0.5rem; } /** * This file contains the styles required to make the footer sticky. */ html, body { height: 100%; } .stickyfooter { position: fixed; right: 0; left: 0; height: max(96px, 0.9375rem * 3); bottom: calc(max(96px, 0.9375rem * 3) * -1); transition: bottom 0.5s; z-index: 1030; overflow: hidden; box-shadow: 0 0 1rem rgba(0, 0, 0, 0.15); font-size: calc(0.9375rem * 1.10); } .hasstickyfooter .stickyfooter { bottom: 0; } /* Standard components fixes for sticky footer. */ .stickyfooter ul.pagination { margin-bottom: 0.25rem; } .stickyfooter .btn { font-size: calc(0.9375rem * 1.10); } /* Breakpoints fixes. */ @media (min-width: 576px) { #page-wrapper { height: 100%; display: flex; flex-direction: column; } #page-wrapper #page { display: flex; flex-direction: column; } #page-wrapper #page:not(.drawers) { flex: 1 0 auto; } #page-wrapper #page #page-content { flex: 1 0 auto; } #page-wrapper #page-footer { flex-shrink: 0; } } @media (max-width: 767.98px) { #page-wrapper { height: 100%; display: flex; flex-direction: column; } #page-wrapper #page { display: flex; flex-direction: column; } #page-wrapper #page:not(.drawers) { flex: 1 0 auto; } } .popover-region { position: relative; } .popover-region.collapsed .popover-region-toggle:before, .popover-region.collapsed .popover-region-toggle:after { display: none; } .popover-region.collapsed .popover-region-container { opacity: 0; visibility: hidden; height: 0; overflow: hidden; transition: height 0.25s, opacity 101ms 0.25s, visibility 101ms 0.25s; } .popover-region-toggle { cursor: pointer; } .popover-region-toggle::before { content: ""; display: inline-block; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 10px solid #ddd; position: absolute; bottom: 0; right: 7px; } .popover-region-toggle::after { content: ""; display: inline-block; border-left: 9px solid transparent; border-right: 9px solid transparent; border-bottom: 9px solid #fff; position: absolute; bottom: -1px; right: 8px; z-index: 2; } .count-container { padding: 2px; border-radius: 2px; background-color: #ca3120; color: #fff; font-size: 11px; line-height: 11px; position: absolute; top: 5px; right: 0; } .popover-region-container { opacity: 1; visibility: visible; position: absolute; right: 0; top: 0; height: 500px; width: 380px; border: 1px solid #ddd; transition: height 0.25s; background-color: #fff; z-index: 1; } .popover-region-header-container { height: 25px; line-height: 25px; padding-left: 5px; padding-right: 5px; border-bottom: 1px solid #ddd; box-sizing: border-box; } .popover-region-footer-container { height: 30px; text-align: center; border-top: 1px solid #ddd; background-color: #fff; padding-top: 3px; } .popover-region-header-text { float: left; margin: 0; font-size: 14px; line-height: 25px; } .popover-region-header-actions { float: right; } .popover-region-header-actions > * { margin-left: 10px; min-width: 20px; display: inline-block; } .popover-region-header-actions .loading-icon { display: none; height: 12px; width: 12px; } .popover-region-header-actions .newmessage-link { margin-right: 10px; } .popover-region-header-actions label { display: inline-block; text-align: center; margin-bottom: 0; } .popover-region-content-container { height: calc(100% - 55px); width: 100%; overflow-y: auto; -webkit-overflow-scrolling: touch; } .popover-region-content-container > .loading-icon { display: none; text-align: center; padding: 5px; box-sizing: border-box; } .popover-region-content-container .empty-message { display: none; text-align: center; padding: 10px; } .popover-region-content-container.loading > .loading-icon { display: block; } .popover-region-content-container.loading .empty-message { display: none; } .navbar-nav .popover-region .icon { font-weight: bolder; } .navbar .popover-region.collapsed .popover-region-container { opacity: 0; visibility: hidden; height: 0; overflow: hidden; transition: height 0.25s, opacity 101ms 0.25s, visibility 101ms 0.25s; } .navbar .count-container { padding: 2px; border-radius: 2px; background-color: #ca3120; color: #fff; font-size: 11px; line-height: 11px; position: absolute; top: 15px; right: 0; } .navbar .popover-region-container { top: 60px; } .content-item-container { width: 100%; border-bottom: 1px solid #ddd; box-sizing: border-box; padding: 5px; position: relative; margin: 0; display: block; color: inherit; text-decoration: none; } .content-item-container:hover { color: #fff; background-color: #0f6cbf; } .content-item-container:hover .content-item-footer .timestamp { color: #fff; } .content-item-container:hover .view-more { color: inherit; } .content-item-container.unread { margin: 0; background-color: #f4f4f4; } .content-item-container.unread:hover { color: #fff; background-color: #0f6cbf; } .content-item-container.unread .content-item-body .notification-message { font-weight: 600; } .content-item-container .context-link { color: inherit; text-decoration: none; } .content-item-container .content-item-body { box-sizing: border-box; margin-bottom: 5px; } .content-item-container .content-item-footer { text-align: left; box-sizing: border-box; } .content-item-container .content-item-footer .timestamp { font-size: 10px; line-height: 10px; margin: 0; color: inherit; margin-left: 24px; } .content-item-container .view-more { position: absolute; bottom: 5px; right: 5px; font-size: 12px; line-height: 12px; } .content-item-container .view-more:hover { color: inherit; } .content-item-container.notification .content-item-body .notification-image { display: inline-block; width: 24px; height: 24px; float: left; } .content-item-container.notification .content-item-body .notification-image img { height: 75%; } .content-item-container.notification .content-item-body .notification-message { display: inline-block; font-size: 12px; width: calc(100% - 24px); } .content-item-container.selected { background-color: #4f94cd; color: #fff; border-color: #4f94cd; } .content-item-container.selected .content-item-footer .timestamp { color: #fff; } .popover-region-notifications .popover-region-header-container .mark-all-read-button .normal-icon { display: inline-block; } .popover-region-notifications .popover-region-header-container .mark-all-read-button.loading .normal-icon { display: none; } .popover-region-notifications .popover-region-header-container .mark-all-read-button.loading .loading-icon { display: inline-block; } .popover-region-notifications .all-notifications { opacity: 1; visibility: visible; height: auto; overflow: hidden; } .popover-region-notifications .all-notifications:empty + .empty-message { display: block; } .popover-region-notifications .notification-image { display: inline-block; width: 8%; vertical-align: top; } .popover-region-notifications .notification-image img { height: 75%; } .popover-region-notifications .notification-message { display: inline-block; font-size: 12px; } .popover-region-notifications .popover-region-content-container.loading .all-notifications:empty + .empty-message { display: none; } .popover-region-messages .mark-all-read-button .normal-icon { display: inline-block; } .popover-region-messages .mark-all-read-button.loading .normal-icon { display: none; } .popover-region-messages .mark-all-read-button.loading .loading-icon { display: inline-block; } .popover-region-messages .popover-region-content-container.loading .popover-region-content .messages:empty + .empty-message { display: none; } .popover-region-messages .messages:empty + .empty-message { display: block; } .popover-region-messages .content-item-container.unread .content-item-body { font-weight: 600; width: calc(90% - 30px); } .popover-region-messages .content-item-container.unread .unread-count-container { display: inline-block; width: 10%; text-align: center; float: right; } .popover-region-messages .content-item { height: 100%; width: 100%; box-sizing: border-box; } .popover-region-messages .profile-image-container { width: 30px; display: inline-block; text-align: center; float: left; } .popover-region-messages .profile-image-container img { width: 100%; display: inline-block; vertical-align: middle; border-radius: 50%; } .popover-region-messages .content-item-body { display: inline-block; box-sizing: border-box; width: calc(100% - 30px); font-size: 12px; padding-left: 10px; overflow: hidden; } .popover-region-messages .content-item-body h3 { font-size: 12px; line-height: 12px; margin: 0; width: 100%; } .popover-region-messages .content-item-body p { margin: 0; } .popover-region-messages .unread-count-container { display: none; } @media (max-width: 767px) { .navbar .popover-region .popover-region-container { right: -70px; } } @media (max-width: 480px) { .navbar .popover-region .popover-region-container { position: fixed; top: 46px; right: 0; left: 0; bottom: 0; width: auto; height: auto; } } /** * Tour step must sit above all other UI components. * The backdrop is the lowest point in the tour. * Everything else is in the container, and the target background should be at the same z-index. * ----- moodle * ---- step backdrop * --- step container * --- step target background */ div[data-flexitour=backdrop] { background-color: #000; opacity: 0.5; z-index: 1040; } div[data-flexitour=step-background-fader], div[data-flexitour=step-background] { border-radius: 0.6rem; padding: 10px; z-index: 1041; } span[data-flexitour=container], div[data-flexitour=step-background-fader], [data-flexitour=step-backdrop] > td, [data-flexitour=step-backdrop] { z-index: 1042; } span[data-flexitour=container] .modal-dialog { /** * Remove all margins to: * 1) ensure that the arrow touches the target; and * 2) ensure that the focus border touches the modal. */ margin: 0; } span[data-flexitour=container] div[data-role=arrow] { border-width: 1rem; } span[data-flexitour=container] div[data-role=arrow], span[data-flexitour=container] div[data-role=arrow]:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; border-width: 1rem; } span[data-flexitour=container][x-placement=top], span[data-flexitour=container][x-placement=top-start] { margin-bottom: 1rem; } span[data-flexitour=container][x-placement=top] div[data-role=arrow], span[data-flexitour=container][x-placement=top-start] div[data-role=arrow] { bottom: -1rem; left: 50%; margin-left: -1rem; border-bottom-width: 0; border-top-color: rgba(0, 0, 0, 0.25); } span[data-flexitour=container][x-placement=top] div[data-role=arrow]:after, span[data-flexitour=container][x-placement=top-start] div[data-role=arrow]:after { bottom: 1px; margin-left: -1rem; content: " "; border-bottom-width: 0; border-top-color: #fff; } span[data-flexitour=container][x-placement=bottom], span[data-flexitour=container][x-placement=bottom-start] { margin-top: 1rem; } span[data-flexitour=container][x-placement=bottom] div[data-role=arrow], span[data-flexitour=container][x-placement=bottom-start] div[data-role=arrow] { top: -1rem; left: 50%; margin-left: -1rem; border-top-width: 0; border-bottom-color: rgba(0, 0, 0, 0.25); } span[data-flexitour=container][x-placement=bottom] div[data-role=arrow]:after, span[data-flexitour=container][x-placement=bottom-start] div[data-role=arrow]:after { top: 1px; margin-left: -1rem; content: " "; border-top-width: 0; border-bottom-color: #fff; } span[data-flexitour=container][x-placement=left], span[data-flexitour=container][x-placement=left-start] { margin-right: 1rem; } span[data-flexitour=container][x-placement=left] div[data-role=arrow], span[data-flexitour=container][x-placement=left-start] div[data-role=arrow] { right: -1rem; top: 50%; margin-top: -1rem; border-right-width: 0; border-left-color: rgba(0, 0, 0, 0.25); } span[data-flexitour=container][x-placement=left] div[data-role=arrow]:after, span[data-flexitour=container][x-placement=left-start] div[data-role=arrow]:after { right: 1px; margin-top: -1rem; content: " "; border-right-width: 0; border-left-color: #fff; } span[data-flexitour=container][x-placement=right], span[data-flexitour=container][x-placement=right-start] { margin-left: 1rem; } span[data-flexitour=container][x-placement=right] div[data-role=arrow], span[data-flexitour=container][x-placement=right-start] div[data-role=arrow] { left: -1rem; top: 50%; margin-top: -1rem; border-left-width: 0; border-right-color: rgba(0, 0, 0, 0.25); } span[data-flexitour=container][x-placement=right] div[data-role=arrow]:after, span[data-flexitour=container][x-placement=right-start] div[data-role=arrow]:after { left: 1px; margin-top: -1rem; content: " "; border-left-width: 0; border-right-color: #fff; } [data-region=drawer] [data-flexitour=container] { /*rtl:ignore*/ margin-left: -15px; width: 275px; } @media print { body.drawer-open-left.jsenabled, body.drawer-open-right.jsenabled { margin: 0; } .container { width: auto; } } .modal .modal-body > .loading-icon { display: block; position: relative; width: 100%; height: 100%; } .modal .modal-body > .loading-icon .icon { position: absolute; top: 50%; /*rtl:ignore*/ left: 50%; transform: translate(-50%, -50%); } .modal .close { margin: -0.8rem -0.8rem -0.8rem auto; } .modal .close:not(:disabled):not(.disabled):hover, .modal .close:not(:disabled):not(.disabled):focus { opacity: inherit; } .layout.fullscreen { height: 100vh; position: fixed; top: 0; left: 0; z-index: 1040; transition: 0.5s; width: 100vw; margin: 0; opacity: 1; background-color: #fff; } @media (prefers-reduced-motion: reduce) { .layout.fullscreen { transition: none; } } .layout.fullscreen > div { height: 100%; width: 100%; } .layout.fullscreen .loading-icon { margin-left: auto; margin-right: auto; text-align: center; display: inline-block; width: 100%; top: 40%; position: fixed; } .layout.fullscreen .loading-icon .icon { width: 1em; height: 1em; font-size: 4em; } #page.drawers { margin-top: 60px; scrollbar-width: thin; scrollbar-color: #6a737b #f8f9fa; } #page.drawers::-webkit-scrollbar { width: 12px; } #page.drawers::-webkit-scrollbar-track { background: #f8f9fa; } #page.drawers::-webkit-scrollbar-thumb { background-color: #6a737b; border-radius: 20px; border: 3px solid #f8f9fa; } #page.drawers::-webkit-scrollbar-thumb:hover { background-color: #495057; } #page.drawers .main-inner { max-width: 100%; width: 100%; margin: 0 auto; border-radius: 0.5rem; background-color: #fff; padding: 1.5rem 0.5rem; margin-top: 0.5rem; margin-bottom: 3rem; flex: 1 0 auto; } #page.drawers .activity-header { margin-left: 15px; margin-right: 15px; } @media (min-width: 768px) { .pagelayout-standard #page.drawers .main-inner, body.limitedwidth #page.drawers .main-inner { max-width: 830px; } .pagelayout-standard #page.drawers .footer-popover, body.limitedwidth #page.drawers .footer-popover { max-width: 830px; width: 100%; margin: 0 auto; border-radius: 0.5rem; } body.mediumwidth #page.drawers .main-inner { max-width: 1120px; } body.mediumwidth #page.drawers .footer-popover { max-width: 1120px; width: 100%; margin: 0 auto; border-radius: 0.5rem; } .header-maxwidth { max-width: 830px; margin: 0 auto; padding-left: 15px; padding-right: 15px; } .header-maxwidth .header-inner { padding-left: 0; padding-right: 0; } } .drawer-toggles .drawer-toggler { position: fixed; top: calc(60px + 0.7rem); z-index: 2; } .drawer-toggles .drawer-toggler .btn { border-radius: 200px; padding: 16px; background-color: #dee2e6; box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); transition: padding 200ms; } .drawer-toggles .drawer-toggler .btn .icon { width: auto; height: auto; } .drawer-toggles .drawer-toggler .btn:focus { box-shadow: 0 0 0 0.2rem rgba(15, 108, 191, 0.75); } .drawer-toggles .drawer-left-toggle { left: 0; } .drawer-toggles .drawer-left-toggle .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; padding-right: 14px; padding-left: 10px; } .drawer-toggles .drawer-left-toggle .btn:hover { padding-left: 20px; } .drawer-toggles .drawer-right-toggle { right: 0; } .drawer-toggles .drawer-right-toggle .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; padding-right: 10px; padding-left: 14px; } .drawer-toggles .drawer-right-toggle .btn:hover { padding-right: 20px; } #page.drawers.show-drawer-left .drawer-left-toggle { display: none; } #page.drawers.show-drawer-right .drawer-right-toggle { display: none; } @media (max-width: 767.98px) { .drawer-toggles { z-index: 100; } .drawer-toggles .drawer-right-toggle, .drawer-toggles .drawer-left-toggle { top: calc(99vh - (60px * 2.5)); } #page.drawers.scroll-down .drawer-right-toggle { transform: translateX(150%); pointer-events: auto; visibility: hidden; } #page.drawers.scroll-down .drawer-left-toggle { transform: translateX(-150%); pointer-events: auto; visibility: hidden; } } @media (min-width: 576px) { #page.drawers .main-inner { margin-top: 1.5rem; } } @media (min-width: 768px) { #page.drawers { padding-left: 3rem; padding-right: 3rem; } #page.drawers .main-inner { padding: 1.5rem 0.5rem; } #page.drawers div[role=main] { padding-left: 15px; padding-right: 15px; } } @media (min-width: 992px) { .drawer-left, .drawer-right { top: 60px; height: calc(100vh - 60px); } .hasstickyfooter .drawer-left, .hasstickyfooter .drawer-right { top: 60px; height: calc(100vh - 60px - max(96px, 0.9375rem * 3)); } #page.drawers { position: relative; overflow-y: visible; transition: 0.2s; left: 0; right: 0; } } @media (min-width: 992px) and (prefers-reduced-motion: reduce) { #page.drawers { transition: none; } } @media (min-width: 992px) { #page.drawers.show-drawer-left { margin-left: 285px; margin-right: 0; padding-left: 1rem; } } @media (min-width: 992px) { #page.drawers.show-drawer-right { margin-left: 0; margin-right: 315px; padding-right: 1rem; } .jsenabled #page.drawers.show-drawer-right .btn-footer-popover, .jsenabled #page.drawers.show-drawer-right .btn-footer-communication { right: calc(315px + 2rem); } } @media (min-width: 992px) { #page.drawers.show-drawer-left.show-drawer-right { margin-left: 285px; margin-right: 315px; } } @media (min-width: 992px) { #page.drawers.hasstickyfooter { margin-bottom: max(96px, 0.9375rem * 3); } } .drawercontrolbuttons { margin-top: 92px; } .drawercontrolbuttons .buttons { z-index: 1; } .form-control:-ms-input-placeholder { color: #6a737b; } .custom-select { -webkit-appearance: none; -moz-appearance: none; } .custom-range { -webkit-appearance: none; -moz-appearance: none; } .custom-range::-webkit-slider-thumb, .custom-range::-moz-range-thumb, .custom-range::-ms-thumb { -webkit-appearance: none; -moz-appearance: none; } input[type=date].form-control, input[type=time].form-control, input[type=datetime-local].form-control, input[type=month].form-control { -webkit-appearance: none; -moz-appearance: none; } @media (min-width: 576px) { .card-columns { -webkit-column-gap: 1.25rem; -moz-column-gap: 1.25rem; } } .carousel-item { -webkit-backface-visibility: hidden; } .card { -webkit-background-clip: border-box; } .carousel-indicators li, .dropdown-menu, .form-control, .modal-content, .popover, .toast { -webkit-background-clip: padding-box; } .btn { -webkit-user-select: none; -ms-user-select: none; } .user-select-all { -webkit-user-select: all !important; /* stylelint-disable-line declaration-no-important */ -ms-user-select: none; } .user-select-auto { -webkit-user-select: auto !important; /* stylelint-disable-line declaration-no-important */ -ms-user-select: none; } .user-select-none { -webkit-user-select: none !important; /* stylelint-disable-line declaration-no-important */ -ms-user-select: none; } .editor_atto_content_wrap { background-color: #fff; color: #333; } .editor_atto_content { padding: 4px; resize: vertical; overflow: auto; } .editor_atto_content_wrap, .editor_atto + textarea { width: 100%; padding: 0; } .editor_atto + textarea { border-radius: 0; resize: vertical; margin-top: -1px; } div.editor_atto_toolbar { display: block; background: #f2f2f2; min-height: 35px; border: 1px solid #8f959e; width: 100%; padding: 0 0 9px 0; border-top-left-radius: 0.5rem; border-top-right-radius: 0.5rem; } div.editor_atto_toolbar button { padding: 4px 9px; background: none; border: 0; margin: 0; border-radius: 0; cursor: pointer; } div.editor_atto_toolbar .menuplaceholder { display: inline-block; } div.editor_atto_toolbar button + button, div.editor_atto_toolbar .menuplaceholder + button { border-left: 1px solid #ccc; } div.editor_atto_toolbar button[disabled] { opacity: 0.45; background: none; cursor: default; } .editor_atto_toolbar button:hover { background-image: radial-gradient(ellipse at center, #fff 60%, #dfdfdf 100%); background-color: #ebebeb; } .editor_atto_toolbar button:active, .editor_atto_toolbar button.highlight { background-image: radial-gradient(ellipse at center, #fff 40%, #dfdfdf 100%); background-color: #dfdfdf; } /* Make firefox button sizes match other browsers */ div.editor_atto_toolbar button::-moz-focus-inner { border: 0; padding: 0; } div.editor_atto_toolbar button .icon { padding: 0; margin: 2px 0; } div.editor_atto_toolbar div.atto_group { display: inline-block; border: 1px solid #ccc; border-bottom: 1px solid #b3b3b3; border-radius: 4px; margin: 9px 0 0 9px; background: #fff; } div.editor_atto_toolbar .atto_toolbar_row { margin: 6px 0 -3px 5px; display: table; } div.editor_atto_toolbar .atto_toolbar_row div.atto_group { margin: 3px 5px 3px 4px; } .editor_atto_content img { resize: both; overflow: auto; } .atto_hasmenu { /* IE8 places the images on top of each other if that is not set. */ white-space: nowrap; } .atto_menuentry .icon { width: 16px; height: 16px; } .atto_menuentry { clear: left; } .atto_menuentry h1, .atto_menuentry h2, .atto_menuentry p { margin: 4px; } /*.atto_form label.sameline { display: inline-block; min-width: 10em; }*/ .atto_form textarea.fullwidth, .atto_form input.fullwidth { width: 100%; } .atto_form { padding: 0.5rem; } /*.atto_form label { display: block; margin: 0 0 5px 0; }*/ .atto_control { position: absolute; right: -6px; bottom: -6px; display: none; cursor: pointer; } .atto_control .icon { background-color: #fff; } div.editor_atto_content:focus .atto_control, div.editor_atto_content:hover .atto_control { display: block; } .editor_atto_menu.yui3-menu-hidden { display: none; } /* Get broken images back in firefox */ .editor_atto_content img:-moz-broken { -moz-force-broken-image-icon: 1; min-width: 24px; min-height: 24px; } /* Atto menu styling */ .moodle-dialogue-base .editor_atto_menu .moodle-dialogue-content .moodle-dialogue-bd { padding: 0; z-index: 1000; } .editor_atto_menu .dropdown-menu > li > a { margin: 3px 14px; } .editor_atto_menu .open ul.dropdown-menu { padding-top: 5px; padding-bottom: 5px; } .editor_atto_wrap { position: relative; } /*rtl:ignore*/ .editor_atto_wrap textarea { direction: ltr; } .editor_atto_notification { display: inline-block; padding: 0.5em; padding-left: 1em; padding-right: 1em; border-bottom-left-radius: 1em; border-bottom-right-radius: 1em; } .editor_atto_notification .atto_info { background-color: #f2f2f2; } .editor_atto_notification .atto_warning { background-color: #ffd700; } .editor_atto_toolbar, .editor_atto_content_wrap, .editor_atto + textarea { box-sizing: border-box; } .editor_atto_content.form-control { width: 100%; border-top: 0; border-top-left-radius: 0; border-top-right-radius: 0; } /** Atto fields do not have form-control because that would break the layout of the editor. So they need these extra styles to highlight the editor when there is a validation error. */ .has-danger .editor_atto_content.form-control .invalid-feedback, .has-danger .editor_atto_content.form-control-danger .invalid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: #ca3120; } .has-danger .editor_atto_content.form-control .invalid-tooltip, .has-danger .editor_atto_content.form-control-danger .invalid-tooltip { position: absolute; top: 100%; left: 0; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.8203125rem; line-height: 1.5; color: #fff; background-color: rgba(202, 49, 32, 0.9); border-radius: 0.5rem; } .form-row > .col > .has-danger .editor_atto_content.form-control .invalid-tooltip, .form-row > [class*=col-] > .has-danger .editor_atto_content.form-control .invalid-tooltip, .form-row > .col > .has-danger .editor_atto_content.form-control-danger .invalid-tooltip, .form-row > [class*=col-] > .has-danger .editor_atto_content.form-control-danger .invalid-tooltip { left: 5px; } .was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-feedback, .was-validated .has-danger .editor_atto_content.form-control:invalid ~ .invalid-tooltip, .has-danger .editor_atto_content.form-control.is-invalid ~ .invalid-feedback, .has-danger .editor_atto_content.form-control.is-invalid ~ .invalid-tooltip, .was-validated .has-danger .editor_atto_content.form-control-danger:invalid ~ .invalid-feedback, .was-validated .has-danger .editor_atto_content.form-control-danger:invalid ~ .invalid-tooltip, .has-danger .editor_atto_content.form-control-danger.is-invalid ~ .invalid-feedback, .has-danger .editor_atto_content.form-control-danger.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .has-danger .editor_atto_content.form-control .form-control:invalid, .has-danger .editor_atto_content.form-control .form-control.is-invalid, .was-validated .has-danger .editor_atto_content.form-control-danger .form-control:invalid, .has-danger .editor_atto_content.form-control-danger .form-control.is-invalid { border-color: #ca3120; padding-right: calc(1.5em + 0.75rem) !important; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' 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='%23ca3120' 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 .has-danger .editor_atto_content.form-control .form-control:invalid:focus, .has-danger .editor_atto_content.form-control .form-control.is-invalid:focus, .was-validated .has-danger .editor_atto_content.form-control-danger .form-control:invalid:focus, .has-danger .editor_atto_content.form-control-danger .form-control.is-invalid:focus { border-color: #ca3120; box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); } .was-validated .has-danger .editor_atto_content.form-control select.form-control:invalid, .has-danger .editor_atto_content.form-control select.form-control.is-invalid, .was-validated .has-danger .editor_atto_content.form-control-danger select.form-control:invalid, .has-danger .editor_atto_content.form-control-danger select.form-control.is-invalid { padding-right: 3rem !important; background-position: right 1.5rem center; } .was-validated .has-danger .editor_atto_content.form-control textarea.form-control:invalid, .has-danger .editor_atto_content.form-control textarea.form-control.is-invalid, .was-validated .has-danger .editor_atto_content.form-control-danger textarea.form-control:invalid, .has-danger .editor_atto_content.form-control-danger 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 .has-danger .editor_atto_content.form-control .custom-select:invalid, .has-danger .editor_atto_content.form-control .custom-select.is-invalid, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-select:invalid, .has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid { border-color: #ca3120; padding-right: calc(0.75em + 2.3125rem) !important; 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") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23ca3120' 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='%23ca3120' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem) no-repeat; } .was-validated .has-danger .editor_atto_content.form-control .custom-select:invalid:focus, .has-danger .editor_atto_content.form-control .custom-select.is-invalid:focus, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-select:invalid:focus, .has-danger .editor_atto_content.form-control-danger .custom-select.is-invalid:focus { border-color: #ca3120; box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); } .was-validated .has-danger .editor_atto_content.form-control .form-check-input:invalid ~ .form-check-label, .has-danger .editor_atto_content.form-control .form-check-input.is-invalid ~ .form-check-label, .was-validated .has-danger .editor_atto_content.form-control-danger .form-check-input:invalid ~ .form-check-label, .has-danger .editor_atto_content.form-control-danger .form-check-input.is-invalid ~ .form-check-label { color: #ca3120; } .was-validated .has-danger .editor_atto_content.form-control .form-check-input:invalid ~ .invalid-feedback, .was-validated .has-danger .editor_atto_content.form-control .form-check-input:invalid ~ .invalid-tooltip, .has-danger .editor_atto_content.form-control .form-check-input.is-invalid ~ .invalid-feedback, .has-danger .editor_atto_content.form-control .form-check-input.is-invalid ~ .invalid-tooltip, .was-validated .has-danger .editor_atto_content.form-control-danger .form-check-input:invalid ~ .invalid-feedback, .was-validated .has-danger .editor_atto_content.form-control-danger .form-check-input:invalid ~ .invalid-tooltip, .has-danger .editor_atto_content.form-control-danger .form-check-input.is-invalid ~ .invalid-feedback, .has-danger .editor_atto_content.form-control-danger .form-check-input.is-invalid ~ .invalid-tooltip { display: block; } .was-validated .has-danger .editor_atto_content.form-control .custom-control-input:invalid ~ .custom-control-label, .has-danger .editor_atto_content.form-control .custom-control-input.is-invalid ~ .custom-control-label, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-control-input:invalid ~ .custom-control-label, .has-danger .editor_atto_content.form-control-danger .custom-control-input.is-invalid ~ .custom-control-label { color: #ca3120; } .was-validated .has-danger .editor_atto_content.form-control .custom-control-input:invalid ~ .custom-control-label::before, .has-danger .editor_atto_content.form-control .custom-control-input.is-invalid ~ .custom-control-label::before, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-control-input:invalid ~ .custom-control-label::before, .has-danger .editor_atto_content.form-control-danger .custom-control-input.is-invalid ~ .custom-control-label::before { border-color: #ca3120; } .was-validated .has-danger .editor_atto_content.form-control .custom-control-input:invalid:checked ~ .custom-control-label::before, .has-danger .editor_atto_content.form-control .custom-control-input.is-invalid:checked ~ .custom-control-label::before, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-control-input:invalid:checked ~ .custom-control-label::before, .has-danger .editor_atto_content.form-control-danger .custom-control-input.is-invalid:checked ~ .custom-control-label::before { border-color: #e04d3d; background-color: #e04d3d; } .was-validated .has-danger .editor_atto_content.form-control .custom-control-input:invalid:focus ~ .custom-control-label::before, .has-danger .editor_atto_content.form-control .custom-control-input.is-invalid:focus ~ .custom-control-label::before, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-control-input:invalid:focus ~ .custom-control-label::before, .has-danger .editor_atto_content.form-control-danger .custom-control-input.is-invalid:focus ~ .custom-control-label::before { box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); } .was-validated .has-danger .editor_atto_content.form-control .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .has-danger .editor_atto_content.form-control .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .has-danger .editor_atto_content.form-control-danger .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { border-color: #ca3120; } .was-validated .has-danger .editor_atto_content.form-control .custom-file-input:invalid ~ .custom-file-label, .has-danger .editor_atto_content.form-control .custom-file-input.is-invalid ~ .custom-file-label, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-file-input:invalid ~ .custom-file-label, .has-danger .editor_atto_content.form-control-danger .custom-file-input.is-invalid ~ .custom-file-label { border-color: #ca3120; } .was-validated .has-danger .editor_atto_content.form-control .custom-file-input:invalid:focus ~ .custom-file-label, .has-danger .editor_atto_content.form-control .custom-file-input.is-invalid:focus ~ .custom-file-label, .was-validated .has-danger .editor_atto_content.form-control-danger .custom-file-input:invalid:focus ~ .custom-file-label, .has-danger .editor_atto_content.form-control-danger .custom-file-input.is-invalid:focus ~ .custom-file-label { border-color: #ca3120; box-shadow: 0 0 0 0.2rem rgba(202, 49, 32, 0.25); } .open.atto_menu > .dropdown-menu { display: block; } div.editor_atto_toolbar button .icon { color: #495057; } .toast { border-radius: 0.25rem; } .toast.toast-success { background-color: rgba(215, 228, 214, 0.95); color: #1c3f1a; } .toast.toast-success .toast-header { color: #1c3f1a; } .toast.toast-success .toast-body:before { margin: 2px 5px 0 0; content: "\f058"; } .toast.toast-danger { background-color: rgba(244, 214, 210, 0.95); color: #691911; } .toast.toast-danger .toast-header { color: #691911; } .toast.toast-danger .toast-body:before { margin: 2px 5px 0 0; content: "\f057"; } .toast.toast-info { background-color: rgba(204, 230, 234, 0.95); color: #00434e; } .toast.toast-info .toast-header { color: #00434e; } .toast.toast-info .toast-body:before { margin: 2px 5px 0 0; content: "\f05a"; } .toast.toast-warning { background-color: rgba(252, 239, 220, 0.95); color: #7d5a29; } .toast.toast-warning .toast-header { color: #7d5a29; } .toast.toast-warning .toast-body:before { margin: 2px 5px 0 0; content: "\f06a"; } .toast .close { color: inherit; } .navbar.fixed-top { padding-top: 0; padding-bottom: 0; box-shadow: none; border-bottom: #dee2e6 1px solid; align-items: stretch; height: 61px; } .navbar.fixed-top .navbar-brand .logo { max-height: calc(60px - (0.25rem * 2)); } .navbar.fixed-top .nav-link { height: 100%; display: flex; align-items: center; white-space: nowrap; } .navbar.fixed-top .divider { width: 1px; background-color: #dee2e6; } .navbar.fixed-top #usernavigation .nav-link { padding: 0 0.5rem; } .navbar.fixed-top .login { display: flex; align-items: center; } .navbar.fixed-top .usermenu { display: flex; } .navbar.fixed-top .usermenu .action-menu { display: flex; align-items: center; } .navbar.fixed-top .usermenu .dropdown { display: flex; align-items: center; } .navbar.fixed-top .usermenu .dropdown .dropdown-toggle { padding-top: 0; padding-bottom: 0; border-radius: 0; display: flex; align-items: center; height: 100%; } .navbar.fixed-top .usermenu .dropdown-menu { min-width: 235px; } .navbar.fixed-top .usermenu .dropdown-menu .carousel-navigation-link > * { pointer-events: none; } .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item { padding: 0.25rem 1.75rem 0.25rem 0.75rem; } .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item.carousel-navigation-link::after { content: "\f0da"; font-size: 1rem; right: 0.75rem; position: absolute; } .navbar.fixed-top .usermenu .dropdown-menu .submenu .header { padding: 0.25rem 0.75rem; font-size: 0.975rem; } .navbar.fixed-top .usermenu .dropdown-menu .submenu .header .icon { font-size: 20px; height: 20px; width: 20px; margin: 0; } .navbar.fixed-top .usermenu .dropdown-menu .submenu .items .dropdown-item[aria-current=true]::before { content: "\f00c"; font-size: 0.75rem; padding-left: 0.25rem; } .navbar.fixed-top .usermenu .login { display: flex; align-items: center; } .navbar.fixed-top .usermenu .dropdown, .navbar.fixed-top .langmenu .dropdown { display: flex; align-items: center; height: 100%; } .navbar.fixed-top .usermenu .dropdown .dropdown-toggle, .navbar.fixed-top .langmenu .dropdown .dropdown-toggle { padding-top: 0; padding-bottom: 0; border-radius: 0; display: flex; align-items: center; height: 100%; } .navbar.fixed-top .langmenu .dropdown-menu .dropdown-item[aria-current=true]::before { content: "\f00c"; font-size: 0.75rem; padding-left: 0.25rem; } @media (max-width: 767.98px) { .navbar.fixed-top .langmenu .langbutton { display: none; } } .navbar.fixed-top .moodle-actionmenu .menubar, .navbar.fixed-top .action-menu-trigger .dropdown { height: 100%; display: flex; } .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .dropdown-item.carousel-navigation-link::after { content: "\f0d9"; } .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .carousel .carousel-inner .carousel-item-prev.carousel-item-right, .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .carousel .carousel-inner .carousel-item-next.carousel-item-left { transform: translateX(0); } .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .carousel .carousel-inner .carousel-item-next, .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .carousel .carousel-inner .carousel-item-right.active { transform: translateX(-100%); } .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .carousel .carousel-inner .carousel-item-prev, .dir-rtl .navbar.fixed-top .usermenu .dropdown-menu .carousel .carousel-inner .carousel-item-left.active { transform: translateX(100%); } #page { margin-top: 60px; } .pagelayout-embedded #page { margin-top: 0; } :root { --navbar-height: 60px; } /** * Reportbuilder. */ /* Table */ .reportbuilder-table .action-menu .menubar { justify-content: end; } /* Filters */ .reportbuilder-wrapper .filters-dropdown { width: 27rem; padding: 0; z-index: 1050; overflow: hidden; } @media (max-width: 767.98px) { .reportbuilder-wrapper .filters-dropdown { width: 100%; } } .reportbuilder-wrapper .filters-dropdown .reportbuilder-filters-sidebar { max-height: calc(100vh - 60px - 1rem); overflow-y: auto; scrollbar-width: thin; scrollbar-color: #6a737b #fff; } .reportbuilder-wrapper .filters-dropdown .reportbuilder-filters-sidebar::-webkit-scrollbar { width: 12px; } .reportbuilder-wrapper .filters-dropdown .reportbuilder-filters-sidebar::-webkit-scrollbar-track { background: #fff; } .reportbuilder-wrapper .filters-dropdown .reportbuilder-filters-sidebar::-webkit-scrollbar-thumb { background-color: #6a737b; border-radius: 20px; border: 3px solid #fff; } .reportbuilder-wrapper .filters-dropdown .reportbuilder-filters-sidebar::-webkit-scrollbar-thumb:hover { background-color: #495057; } .reportbuilder-wrapper .reportbuilder-filters-wrapper .mform.full-width-labels .fitem.row > .col-md-3, .reportbuilder-wrapper .reportbuilder-filters-wrapper .mform.full-width-labels .fitem.row > .col-md-9, .reportbuilder-wrapper .reportbuilder-conditions-list .mform.full-width-labels .fitem.row > .col-md-3, .reportbuilder-wrapper .reportbuilder-conditions-list .mform.full-width-labels .fitem.row > .col-md-9 { flex: 0 0 100%; max-width: 100%; } .reportbuilder-wrapper .reportbuilder-filters-wrapper .mform.full-width-labels .fitem.row .fdate_selector, .reportbuilder-wrapper .reportbuilder-conditions-list .mform.full-width-labels .fitem.row .fdate_selector { flex-wrap: wrap; } .reportbuilder-wrapper .reportbuilder-filters-wrapper .mform .form-group, .reportbuilder-wrapper .reportbuilder-conditions-list .mform .form-group { margin-bottom: 0; max-width: 100%; } .reportbuilder-wrapper .reportbuilder-filters-wrapper .mform .form-group > span, .reportbuilder-wrapper .reportbuilder-conditions-list .mform .form-group > span { max-width: 100%; } .reportbuilder-wrapper .reportbuilder-filters-wrapper .filter .filter-header, .reportbuilder-wrapper .reportbuilder-conditions-list .filter .filter-header { font-size: 1.171875rem; } .reportbuilder-wrapper .reportbuilder-filters-wrapper .filter .filter-header .filter-name, .reportbuilder-wrapper .reportbuilder-conditions-list .filter .filter-header .filter-name { font-size: 1rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding-right: 1rem; } .reportbuilder-wrapper .reportbuilder-filters-wrapper .filter .filter-header .filter-name:hover, .reportbuilder-wrapper .reportbuilder-conditions-list .filter .filter-header .filter-name:hover { white-space: normal; text-overflow: clip; word-break: break-all; } /** * Custom Reports. */ .reportbuilder-report-container { min-width: 0; } .reportbuilder-report-container button[data-action=toggle-edit-preview] .loading-icon { margin-left: 0.5rem; } .reportbuilder-editor-table-container { overflow-x: auto; } /* Custom table headers */ .reportbuilder-table th button[data-action=report-remove-column] .icon, .reportbuilder-table th span[data-drag-type=move] .icon { width: 12px; height: 12px; font-size: 12px; vertical-align: text-top; color: #1d2125; } .reportbuilder-table th button[data-action=report-remove-column] .icon { margin-right: 0; } /* Sidebar menu */ @media (min-width: 992px) { .reportbuilder-sidebar-menu { width: 250px; flex-shrink: 0; } } .reportbuilder-sidebar-menu .card-body .list-group-item { padding: 0.75rem; } .reportbuilder-sidebar-menu .card-body .list-group-item .icon { width: 12px; height: 12px; font-size: 12px; } .reportbuilder-sidebar-menu-cards { overflow-y: auto; scrollbar-width: thin; scrollbar-color: #6a737b #f8f9fa; } .reportbuilder-sidebar-menu-cards::-webkit-scrollbar { width: 12px; } .reportbuilder-sidebar-menu-cards::-webkit-scrollbar-track { background: #f8f9fa; } .reportbuilder-sidebar-menu-cards::-webkit-scrollbar-thumb { background-color: #6a737b; border-radius: 20px; border: 3px solid #f8f9fa; } .reportbuilder-sidebar-menu-cards::-webkit-scrollbar-thumb:hover { background-color: #495057; } /* Settings sidebar */ .reportbuilder-sidebar-settings { overflow-y: auto; scrollbar-width: thin; scrollbar-color: #6a737b #f8f9fa; } .reportbuilder-sidebar-settings::-webkit-scrollbar { width: 12px; } .reportbuilder-sidebar-settings::-webkit-scrollbar-track { background: #f8f9fa; } .reportbuilder-sidebar-settings::-webkit-scrollbar-thumb { background-color: #6a737b; border-radius: 20px; border: 3px solid #f8f9fa; } .reportbuilder-sidebar-settings::-webkit-scrollbar-thumb:hover { background-color: #495057; } @media (min-width: 992px) { .reportbuilder-sidebar-settings { width: 350px; flex-shrink: 0; } } .reportbuilder-sidebar-settings .list-group-item { padding: 0.75rem; } .reportbuilder-sidebar-settings .list-group-item .icon { width: 12px; height: 12px; font-size: 12px; color: #1d2125; } .reportbuilder-sidebar-settings .list-group-item button[data-action=report-remove-filter] .icon, .reportbuilder-sidebar-settings .list-group-item button[data-action=report-remove-condition] .icon { margin-right: 0; vertical-align: text-top; } .reportbuilder-sidebar-settings .list-group-item span[data-drag-type=move] .icon { vertical-align: text-top; } .reportbuilder-sidebar-settings div[data-region=settings-sorting] .list-group-item span[data-drag-type=move] .icon { vertical-align: middle; } .reportbuilder-sidebar-settings div[data-region=settings-cardview] form .col-md-3, .reportbuilder-sidebar-settings div[data-region=settings-cardview] form .col-md-9 { flex: 1 1; max-width: initial; } .reportbuilder-sidebar-settings div[data-region=settings-cardview] form div[data-fieldtype=submit] { flex-basis: auto; } .reportbuilder-sidebar-settings .inplaceeditable.inplaceeditingon input { width: 100%; } /* Add button styles when a toggle button is active. */ .reportbuilder-wrapper button.btn-outline-secondary[data-toggle=collapse]:not(.collapsed), .reportbuilder-wrapper .dropdown.show button.btn-outline-secondary[data-toggle=dropdown] { color: #fff; background-color: #6a737b; border-color: #6a737b; } /* Drag&drop styles. */ .reportbuilder-sortable-list li.sortable-list-current-position, .reportbuilder-table th.sortable-list-current-position, .reportbuilder-conditions-list .condition.sortable-list-current-position { background-color: #a2cff8; } .reportbuilder-sortable-list li.sortable-list-is-dragged, .reportbuilder-table th.sortable-list-is-dragged, .reportbuilder-conditions-list .condition.sortable-list-is-dragged { background-color: #fff; opacity: 0.85; } /* Reportbuilder full page styles. */ @media (min-width: 992px) { .path-admin-reportbuilder.pagelayout-popup.behat-site .fixed-top { position: fixed; } .path-admin-reportbuilder.pagelayout-popup #region-main { border: none; padding: 0; } .path-admin-reportbuilder.pagelayout-popup #maincontent { visibility: hidden; } .path-admin-reportbuilder.pagelayout-popup .dynamictabs .nav-tabs { position: fixed; z-index: 1030; width: calc(100% - 35px); padding-top: 1.25rem; background-color: #fff; box-shadow: 0 1.25rem 0 #fff; } .path-admin-reportbuilder.pagelayout-popup .dynamictabs .tab-content { padding-top: 83px; } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-sidebar-menu { position: fixed; } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-sidebar-menu .reportbuilder-sidebar-menu-cards { max-height: calc(100vh - 163px - 52px); } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-sidebar-settings { position: fixed; right: 30px; max-height: calc(100vh - 163px); } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-report[data-editing] .reportbuilder-report-container { max-height: calc(100vh - 163px); overflow-y: auto; scrollbar-width: thin; scrollbar-color: #6a737b #f8f9fa; margin-left: calc(250px + 1rem); margin-right: calc(350px + 1rem); } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-report[data-editing] .reportbuilder-report-container::-webkit-scrollbar { width: 12px; } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-report[data-editing] .reportbuilder-report-container::-webkit-scrollbar-track { background: #f8f9fa; } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-report[data-editing] .reportbuilder-report-container::-webkit-scrollbar-thumb { background-color: #6a737b; border-radius: 20px; border: 3px solid #f8f9fa; } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-report[data-editing] .reportbuilder-report-container::-webkit-scrollbar-thumb:hover { background-color: #495057; } .path-admin-reportbuilder.pagelayout-popup .reportbuilder-audiences-container { margin-left: calc(250px + 1rem); } } #page-admin-reportbuilder-edit #page { overflow-y: auto; } /* Toggle cards. */ .reportbuilder-toggle-card .card-header { border-bottom: none; } .reportbuilder-toggle-card .card-body { border-top: 1px solid rgba(0, 0, 0, 0.125); } .reportbuilder-toggle-card .toggle-card-button i.toggle-card-icon { color: #6a737b; font-size: 1.5em; font-weight: 700; } .reportbuilder-toggle-card .toggle-card-button .collapsed-icon-container { display: none; } .reportbuilder-toggle-card .toggle-card-button .expanded-icon-container { display: inline-block; } .reportbuilder-toggle-card .toggle-card-button.collapsed .collapsed-icon-container { display: inline-block; } .reportbuilder-toggle-card .toggle-card-button.collapsed .expanded-icon-container { display: none; } /* Audiences. */ .reportbuilder-audiences-container { /* 'OR' separator. */ /* Card action icons. */ } .reportbuilder-audiences-container .audience-separator { text-transform: uppercase; } .reportbuilder-audiences-container .audience-separator::before, .reportbuilder-audiences-container .audience-separator::after { content: ""; flex: 1; border-bottom: 1px solid rgba(0, 0, 0, 0.125); } .reportbuilder-audiences-container .audience-separator:not(:empty)::before { margin-right: 1rem; } .reportbuilder-audiences-container .audience-separator:not(:empty)::after { margin-left: 1rem; } .reportbuilder-audiences-container .instance-card .card-header i.icon { margin-right: 0; } /* Report table card view styles */ @media (max-width: 575.98px) { .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table thead { display: none; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr { display: flex; flex-direction: column; margin: 0.5rem 0; padding: 0.25rem 0.5rem 0 0.5rem; background-color: #fff !important; /* stylelint-disable-line declaration-no-important */ word-wrap: break-word; background-clip: border-box; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0.5rem; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr:hover { background-color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr.emptyrow { display: none; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr:not(.show) td[data-cardviewhidden] { display: none; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr td { display: block; min-height: 3.6rem; padding: 0.5rem 0.25rem; border: none; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr td::before { content: attr(data-cardtitle); display: block; text-transform: uppercase; font-size: 70%; color: #343a40; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr td:not([data-cardtitle]) { min-height: 3rem; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr td:not(:first-child):not(.card-toggle) { border-top: 1px solid rgba(0, 0, 0, 0.125); } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr td:first-child { padding-right: 2rem; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr td.card-toggle { display: block !important; /* stylelint-disable-line declaration-no-important */ position: absolute; right: 10px; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr td.card-toggle button { padding: 0 0.5rem; color: #6a737b; } .reportbuilder-report[data-report-type="0"]:not([data-editing]):not([data-force-table]) table.reportbuilder-table tr td.card-toggle button i { font-size: 1.5em; font-weight: bold; } } @media (min-width: 576px) { .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table thead { display: none; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr { display: flex; flex-direction: column; margin: 0.5rem 0; padding: 0.25rem 0.5rem 0 0.5rem; background-color: #fff !important; /* stylelint-disable-line declaration-no-important */ word-wrap: break-word; background-clip: border-box; border: 1px solid rgba(0, 0, 0, 0.125); border-radius: 0.5rem; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr:hover { background-color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr.emptyrow { display: none; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr:not(.show) td[data-cardviewhidden] { display: none; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr td { display: block; min-height: 3.6rem; padding: 0.5rem 0.25rem; border: none; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr td::before { content: attr(data-cardtitle); display: block; text-transform: uppercase; font-size: 70%; color: #343a40; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr td:not([data-cardtitle]) { min-height: 3rem; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr td:not(:first-child):not(.card-toggle) { border-top: 1px solid rgba(0, 0, 0, 0.125); } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr td:first-child { padding-right: 2rem; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr td.card-toggle { display: block !important; /* stylelint-disable-line declaration-no-important */ position: absolute; right: 10px; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr td.card-toggle button { padding: 0 0.5rem; color: #6a737b; } .reportbuilder-report[data-report-type="0"]:not([data-editing])[data-force-card] table.reportbuilder-table tr td.card-toggle button i { font-size: 1.5em; font-weight: bold; } } .courseindex .courseindex-item { padding: 0.5rem 0.5rem; border: 1px solid transparent; border-radius: 0.5rem; } .courseindex .courseindex-item.courseindex-section-title a { font-weight: bold; } .courseindex .courseindex-item .icons-collapse-expand { padding-right: 4px; } .courseindex .courseindex-item .courseindex-link, .courseindex .courseindex-item .courseindex-chevron { color: #495057; } .courseindex .courseindex-item .courseindex-link:hover, .courseindex .courseindex-item .courseindex-link:focus, .courseindex .courseindex-item .courseindex-chevron:hover, .courseindex .courseindex-item .courseindex-chevron:focus { color: black; text-decoration: none; } .courseindex .courseindex-item:hover, .courseindex .courseindex-item:focus { color: black; } .courseindex .courseindex-item:hover .courseindex-link, .courseindex .courseindex-item:hover .courseindex-chevron, .courseindex .courseindex-item:focus .courseindex-link, .courseindex .courseindex-item:focus .courseindex-chevron { color: black; cursor: pointer; } .courseindex .courseindex-item:hover.dimmed, .courseindex .courseindex-item:focus.dimmed { color: black; } .courseindex .courseindex-item:hover.dimmed .courseindex-link, .courseindex .courseindex-item:hover.dimmed .courseindex-chevron, .courseindex .courseindex-item:focus.dimmed .courseindex-link, .courseindex .courseindex-item:focus.dimmed .courseindex-chevron { color: black; } .courseindex .courseindex-item:hover.draggable, .courseindex .courseindex-item:focus.draggable { cursor: pointer; } .courseindex .courseindex-item.dragging { border: 1px solid #b8dce2; background-color: #e0f0f2; } .courseindex .courseindex-item.active { background-color: #f8f9fa; border-color: #dee2e6; } .courseindex .courseindex-item.dimmed { color: #6a737b; } .courseindex .courseindex-item.dimmed .courseindex-link, .courseindex .courseindex-item.dimmed .courseindex-chevron { color: #6a737b; } .courseindex .courseindex-item.dimmed.pageitem { color: #fff; } .courseindex .courseindex-item.dimmed.pageitem a { color: #fff; } .courseindex .courseindex-item .courseindex-locked { display: none; } .courseindex .courseindex-item.restrictions .courseindex-locked { display: block; } .courseindex .courseindex-item.pageitem { background-color: #0f6cbf; color: #fff; scroll-margin: 6rem; } .courseindex .courseindex-item.pageitem a { color: #fff; } .courseindex .courseindex-item.pageitem:hover, .courseindex .courseindex-item.pageitem:focus { background-color: #0c589c; color: #e6e6e6; } .courseindex .courseindex-item.pageitem:hover .courseindex-link, .courseindex .courseindex-item.pageitem:hover .courseindex-chevron, .courseindex .courseindex-item.pageitem:focus .courseindex-link, .courseindex .courseindex-item.pageitem:focus .courseindex-chevron { color: #e6e6e6; } .courseindex .courseindex-item .completioninfo { min-width: 24px; } .courseindex .courseindex-item .completioninfo.completion_complete { color: #357a32; } .courseindex .courseindex-item .completioninfo.completion_fail { color: #ca3120; } .courseindex .courseindex-item.indented { margin-left: 1rem; } .courseindex .courseindex-section { border-left: solid 3px transparent; } .courseindex .courseindex-section.dragging { border: 1px solid #b8dce2; background-color: #e0f0f2; } .courseindex .courseindex-section .current-badge { line-height: 1.5; display: none; } .courseindex .courseindex-section.current { border-left: solid 3px #0f6cbf; } .courseindex .courseindex-section.current .current-badge { display: inline-block; } .courseindex .courseindex-section.dropready .courseindex-item-content { /* Extra dropzone space */ padding-bottom: 1em; } .courseindex .courseindex-section .courseindex-sectioncontent .courseindex-item { padding-left: 0.5rem; } .courseindex .icon { font-size: 12px; } .courseindex .d-flex-noedit { display: none; } .courseindex.editing .d-flex-noedit { display: flex; } .courseindex .media-list .rounded-circle { height: 1rem; width: 1rem; } .courseindex .media-list .w-100 { height: 1rem; margin: 0.5rem 0; } .moremenu { opacity: 0; height: 60px; } .moremenu.observed { opacity: 1; } .moremenu .nav-link { height: 60px; display: flex; align-items: center; border-right: none; border-bottom: solid 3px transparent; border-left: none; border-top: none; } .moremenu .nav-link:hover, .moremenu .nav-link:focus { border-color: transparent; background-color: #f8f9fa; } .moremenu .nav-link.active { background-color: #f8f9fa; border-color: transparent; border-bottom-color: #0f6cbf; } .moremenu .nav-link.active:focus, .moremenu .nav-link.active:hover { background-color: #f8f9fa; border-bottom-color: #0f6cbf; } .moremenu .nav-link.focus, .moremenu .nav-link:focus { position: relative; } .moremenu .nav-link[data-toggle=tab] { display: inline-flex; flex-direction: column; align-items: center; justify-content: center; } .moremenu .nav-link[data-toggle=tab]::after { content: attr(data-text)/""; height: 0; visibility: hidden; overflow: hidden; user-select: none; pointer-events: none; font-weight: bold; } @media speech { .moremenu .nav-link[data-toggle=tab]::after { display: none; } } .moremenu .nav-tabs { margin-left: 0; background-color: #fff; } .moremenu .show > .nav-link, .moremenu .active > .nav-link, .moremenu .nav-link.show, .moremenu .nav-link.active { background: transparent; } .moremenu .dropdownmoremenu > .dropdown-menu > .dropdown-item { padding: 0; } .moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu { position: static; padding: 0; border: 0; } .moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu.show { display: block; } .moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu .dropdown-item { background-color: #f8f9fa; } .moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu .dropdown-item:hover, .moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu .dropdown-item:focus { color: #fff; background-color: #0f6cbf; } .moremenu .dropdownmoremenu > .dropdown-menu .dropdown-menu .dropdown-divider { display: none; } .moremenu .dropdown-item[aria-current=true], .moremenu .dropdown-item.active { background-color: transparent; color: #1d2125; } .moremenu .dropdown-item[aria-current=true]:focus-within, .moremenu .dropdown-item[aria-current=true]:hover, .moremenu .dropdown-item.active:focus-within, .moremenu .dropdown-item.active:hover { background-color: #0f6cbf; color: #fff; } .moremenu .dropdown-item[aria-current=true]:focus-within a, .moremenu .dropdown-item[aria-current=true]:hover a, .moremenu .dropdown-item.active:focus-within a, .moremenu .dropdown-item.active:hover a { color: #fff; } .moremenu .dropdown-item[aria-current=true]:before, .moremenu .dropdown-item.active:before { content: "\f00c"; } .primary-navigation .navigation { height: 60px; } .primary-navigation .navigation .nav-link { height: 60px; color: #1d2125; border-top: 3px solid transparent; } @media (max-width: 767.98px) { .primary-navigation { display: none; } .editmode-switch-form label { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } } .editmode-switch-form .custom-control-input { width: 100%; z-index: 1; } .drawer-primary .drawercontent { padding: 0; } .drawer-primary .drawercontent .list-group { border-radius: 0; margin-top: -1px; } .drawer-primary .drawercontent .list-group .list-group-item { border-left: 0; border-right: 0; } .secondary-navigation { padding-bottom: 15px; } .secondary-navigation .navigation { border-bottom: 1px solid #dee2e6; background-color: #fff; margin: 0 -0.5rem; padding: 0 0.5rem; } .secondary-navigation .navigation .nav-tabs { border: none; max-width: 830px; margin: 0 auto; } .secondary-navigation .navigation .nav-tabs .nav-link { border-radius: initial; } @media (min-width: 768px) { .secondary-navigation .navigation { padding: 0 calc(0.5rem + 15px); } } .tertiary-navigation { padding-top: 10px; } .tertiary-navigation.full-width-bottom-border { width: calc(100% + 1rem + 30px); margin-left: calc(-0.5rem - 15px); margin-right: calc(-0.5rem - 15px); border-bottom: 1px solid #dee2e6; margin-bottom: 25px; } @media (max-width: 767.98px) { .tertiary-navigation.full-width-bottom-border { width: calc(100% + 1rem); margin-left: -0.5rem; margin-right: -0.5rem; } } .tertiary-navigation.full-width-bottom-border .row { margin: 0; padding-left: 0.5rem; padding-right: 0.5rem; } .tertiary-navigation .navitem, .tertiary-navigation .navitem-divider { display: flex; margin-bottom: 25px; } .tertiary-navigation .navitem-divider { width: 1px; background-color: #dee2e6; } .tertiary-navigation > a.btn, .tertiary-navigation > div.urlselect { margin-bottom: 25px; } .tertiary-navigation .row { column-gap: 10px; } .tertiary-navigation .tertiary-navigation-selector .dropdown-toggle { padding: 0; font-size: 1.4rem; font-weight: bold; } .tertiary-navigation .navitem:not(:last-child), .tertiary-navigation .navitem-divider:not(:last-child) { margin-right: 20px; } .tertiary-navigation .btn > div { max-width: 200px; } @media (max-width: 767.98px) { .tertiary-navigation .mform { padding-left: initial; } } @media (max-width: 575.98px) { .tertiary-navigation .page-toggler > p { font-size: 80%; } } @media print { .tertiary-navigation { display: none; } } .popover-process-monitor { position: fixed; right: 2rem; bottom: 5rem; width: 350px; background-color: #fff; border-radius: 0.5rem; border: 1px solid #dee2e6; } .popover-process-monitor .process-list { max-height: 30vh; overflow: auto; scrollbar-width: thin; scrollbar-color: #6a737b #f8f9fa; } .popover-process-monitor .process-list::-webkit-scrollbar { width: 12px; } .popover-process-monitor .process-list::-webkit-scrollbar-track { background: #f8f9fa; } .popover-process-monitor .process-list::-webkit-scrollbar-thumb { background-color: #6a737b; border-radius: 20px; border: 3px solid #f8f9fa; } .popover-process-monitor .process-list::-webkit-scrollbar-thumb:hover { background-color: #495057; } .popover-process-monitor .queue-process { border-bottom: 1px solid #e9ecef; } .popover-process-monitor .queue-process:last-child { border-bottom: 0; } .moodlenet-share-dialog { min-height: 500px; } .moodlenet-share-dialog .modal-header .moodlenet-share-moodlenetinfo { align-items: baseline; } .moodlenet-share-dialog .modal-header .moodlenet-share-moodlenetinfo .moodlenet-logo { display: flex; } .moodlenet-share-dialog .modal-header .moodlenet-share-moodlenetinfo .moodlenet-logo .icon { width: auto; height: 1.3rem; } .moodlenet-share-dialog .modal-header .moodlenet-share-moodlenetinfo .moodlenet-title { display: flex; padding-left: 0.5em; } .moodlenet-share-dialog .modal-header.no-border { border-bottom: none; } .moodlenet-share-dialog .modal-header.no-header-text .moodlenet-share-moodlenetinfo .moodlenet-title { display: none; } .moodlenet-share-dialog .modal-body .moodlenet-share-activity-info { border-radius: 0.5rem; color: #1d2125; background-color: #f5f9fc; border-color: #3584c9; border-width: 1px; border-style: solid; padding: 0.6em 1.5em; margin-bottom: 1rem; } .moodlenet-share-dialog .modal-body .moodlenet-share-activity-info hr { border-top-color: #3077b5; } .moodlenet-share-dialog .modal-body .moodlenet-share-activity-info .alert-link { color: #070808; } .moodlenet-share-dialog .modal-body .moodlenet-share-activity-info .moodlenet-share-activity-info-hr { border-bottom: 1px solid #dee2e6; } .moodlenet-share-dialog .modal-body .moodlenet-share-activity-info .moodlenet-activity-type, .moodlenet-share-dialog .modal-body .moodlenet-share-activity-info .moodlenet-activity-name { display: block; } .moodlenet-share-dialog .modal-body .moodlenet-share-notice { background-color: #f8f9fa; padding: 1rem; } .moodlenet-share-dialog .modal-body .moodlenet-share-modal-content .loading-icon .icon { width: 60px; height: 60px; font-size: 60px; } .moodlenet-share-dialog .modal-body .moodlenet-share-modal-content .moodlenet-circle-status { height: 18rem; margin: auto; } .moodlenet-share-dialog .modal-body .moodlenet-share-modal-content .moodlenet-circle-status.success { background: radial-gradient(circle, rgba(25, 143, 81, 0.1) 9rem, transparent 9rem); } .moodlenet-share-dialog .modal-body .moodlenet-share-modal-content .moodlenet-circle-status.fail { background: radial-gradient(circle, rgba(202, 49, 32, 0.1) 9rem, transparent 9rem); } .moodlenet-share-dialog .modal-body .moodlenet-share-modal-content .moodlenet-circle-status span { display: block; margin: auto; } .moodlenet-share-dialog .modal-body .moodlenet-share-modal-content .moodlenet-circle-status span.status-icon .icon { font-size: 8rem; width: auto; margin: 0; } .moodlenet-share-dialog .modal-footer .moodlenet-share-to { margin-right: auto; } /** * Dropdown menu Moodle specific styles. */ .dropdown-item a { display: block; width: 100%; color: #1d2125; } .dropdown-item.active, .dropdown-item:active, .dropdown-item:hover, .dropdown-item:focus, .dropdown-item:focus-within { outline: 0; background-color: #0f6cbf; color: #fff; } .dropdown-item.active a, .dropdown-item:active a, .dropdown-item:hover a, .dropdown-item:focus a, .dropdown-item:focus-within a { color: #fff; } .dropdown-item[aria-current=true], .dropdown-item[aria-selected=true] { position: relative; display: flex; align-items: center; } .dropdown-item[aria-current=true]:before, .dropdown-item[aria-selected=true]:before { content: "\f00c"; position: absolute; left: 0.4rem; font-size: 0.7rem; } .dropdown-item.text-primary { color: #0f6cbf; } .dropdown-item.text-primary:hover { color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .dropdown-item.text-secondary { color: #ced4da; } .dropdown-item.text-secondary:hover { color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .dropdown-item.text-success { color: #357a32; } .dropdown-item.text-success:hover { color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .dropdown-item.text-info { color: #008196; } .dropdown-item.text-info:hover { color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .dropdown-item.text-warning { color: #f0ad4e; } .dropdown-item.text-warning:hover { color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .dropdown-item.text-danger { color: #ca3120; } .dropdown-item.text-danger:hover { color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .dropdown-item.text-light { color: #f8f9fa; } .dropdown-item.text-light:hover { color: #fff !important; /* stylelint-disable-line declaration-no-important */ } .dropdown-item.text-dark { color: #343a40; } .dropdown-item.text-dark:hover { color: #fff !important; /* stylelint-disable-line declaration-no-important */ } body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .navbar { box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08); } .userpicture { border-radius: 50%; } .btn-outline-secondary { color: #6a737b; border-color: #6a737b; border-color: #6a737b; } .btn-outline-secondary:hover { color: #fff; background-color: #6a737b; border-color: #6a737b; } .btn-outline-secondary:focus, .btn-outline-secondary.focus { box-shadow: 0 0 0 0.2rem rgba(106, 115, 123, 0.5); } .btn-outline-secondary.disabled, .btn-outline-secondary:disabled { color: #6a737b; 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: #fff; background-color: #6a737b; border-color: #6a737b; } .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: 0 0 0 0.2rem rgba(106, 115, 123, 0.5); } .btn-outline-info { color: #1f7e9a; border-color: #1f7e9a; } .btn-outline-info:hover { color: #fff; background-color: #1f7e9a; border-color: #1f7e9a; } .btn-outline-info:focus, .btn-outline-info.focus { box-shadow: 0 0 0 0.2rem rgba(31, 126, 154, 0.5); } .btn-outline-info.disabled, .btn-outline-info:disabled { color: #1f7e9a; 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: #fff; background-color: #1f7e9a; border-color: #1f7e9a; } .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: 0 0 0 0.2rem rgba(31, 126, 154, 0.5); } .btn-outline-warning { color: #a6670e; border-color: #a6670e; } .btn-outline-warning:hover { color: #fff; background-color: #a6670e; border-color: #a6670e; } .btn-outline-warning:focus, .btn-outline-warning.focus { box-shadow: 0 0 0 0.2rem rgba(166, 103, 14, 0.5); } .btn-outline-warning.disabled, .btn-outline-warning:disabled { color: #a6670e; 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: #fff; background-color: #a6670e; border-color: #a6670e; } .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: 0 0 0 0.2rem rgba(166, 103, 14, 0.5); } .bg-gray { background-color: #e9ecef !important; } a.bg-gray:hover, a.bg-gray:focus, button.bg-gray:hover, button.bg-gray:focus { background-color: #cbd3da !important; } boost/templates/courseindexdrawercontrols.mustache 0000604 00000004031 15062070725 0016742 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/courseindexdrawercontrols This template will render "expand-all" and "collapse-all" buttons for the course index drawer. Example context (json): { } }} <div id="courseindexdrawercontrols" class="dropdown"> <button class="btn btn-icon rounded-circle mx-2" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{#str}}courseindexoptions, courseformat{{/str}}" > <i class="icon fa fa-ellipsis-v fa-fw m-0" aria-hidden="true"></i> </button> <div class="dropdown-menu dropdown-menu-right"> <a class="dropdown-item" href="#" data-action="expandallcourseindexsections" > {{#pix}} t/angles-down, core {{/pix}} {{#str}}expandall{{/str}} </a> <a class="dropdown-item" href="#" data-action="collapseallcourseindexsections" > <span class="dir-rtl-hide">{{#pix}} t/angles-right, core {{/pix}}</span> <span class="dir-ltr-hide">{{#pix}} t/angles-left, core {{/pix}}</span> {{#str}}collapseall{{/str}} </a> </div> </div> {{#js}} require(['theme_boost/courseindexdrawercontrols'], function(component) { component.init('courseindexdrawercontrols'); }); {{/js}} boost/templates/core/sticky_footer.mustache 0000604 00000004114 15062070725 0015237 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template core/sticky_footer Displays a page sticky footer element. Classes required for JS: * none Data attributes optional for JS: * data-disable Number|String - If the sticky footer should be disabled by default Context variables required for this template: * disable Boolean - if the sticky footer should be loaded hidden Example context (json): { "stickycontent": "<a href=\"#\">Moodle</a>", "stickyclasses": "justify-content-end", "disable": false, "extras": [ { "attribute" : "data-example", "value" : "stickyfooter" } ] } }} <div id="sticky-footer" class="d-flex flex-row align-items-center stickyfooter px-3 py-2 fixed-bottom bg-white border-top {{! }} {{$ stickyclasses }}{{! }}{{# stickyclasses }}{{ stickyclasses }}{{/ stickyclasses }}{{! }}{{^ stickyclasses }}justify-content-end{{/ stickyclasses }}{{! }}{{/ stickyclasses }}" {{$ disable }} {{#disable}} data-disable="true" {{/disable}} {{/ disable }} {{$ extradata }} {{#extras}} {{attribute}}="{{value}}" {{/extras}} {{/ extradata }} > {{$ stickycontent }} {{{stickycontent}}} {{/ stickycontent }} </div> {{#js}} require(['theme_boost/sticky-footer'], function(footer) { footer.init(); }); {{/js}} boost/templates/navbar-secure.mustache 0000604 00000003327 15062070725 0014165 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/navbar-secure This template renders the top navbar. Example context (json): { "output": { "should_display_navbar_logo": "true", "get_compact_logo_url": "http://example.com/image.png" }, "sitename": "Moodle Site" } }} <nav class="navbar fixed-top navbar-light bg-white navbar-expand" aria-label="{{#str}}sitemenubar, admin{{/str}}"> <div class="navbar-brand d-flex align-items-center m-0 p-0 aabtn"> {{# output.should_display_navbar_logo }} <img src="{{output.get_compact_logo_url}}" class="logo mr-1" alt="{{sitename}}"> {{/ output.should_display_navbar_logo }} {{{ sitename }}} </div> {{# output.secure_layout_language_menu }} <ul class="nav navbar-nav language-menu my-1"> {{{ . }}} </ul> {{/ output.secure_layout_language_menu }} {{# output.secure_layout_login_info }} <div class="ml-auto nav-link"> {{{ . }}} </div> {{/ output.secure_layout_login_info }} </nav> boost/templates/embedded.mustache 0000604 00000005510 15062070725 0013155 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/embedded Boost maintenance layout template. Context variables required for this template: * output - The core renderer for the page * hasfakeblocks - true if there are fake blocks on this page * fakeblocks - HTML for the fake blocks Example context (json): { "output": { "doctype": "<!DOCTYPE html>", "htmlattributes": "The attributes that should be added to the <html> tag", "page_title": "Test page", "favicon": "favicon.ico", "standard_head_html": "The standard tags that should be included in the <head> tag", "body_attributes": "The attributes to use within the body tag", "standard_top_of_body_html": "The standard tags that should be output just inside the start of the <body> tag", "main_content": "<h1>Headings make html validators happier</h1>", "standard_end_of_body_html": "The standard tags that should be output after everything else" }, "hasfakeblocks": true, "fakeblocks": "<h2>Fake blocks html goes here</h2>" } }} {{{ output.doctype }}} <html {{{ output.htmlattributes }}}> <head> <title>{{{ output.page_title }}}</title> <link rel="shortcut icon" href="{{{ output.favicon }}}" /> {{{ output.standard_head_html }}} <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body {{{ output.body_attributes }}}> {{> core/local/toast/wrapper}} {{{ output.standard_top_of_body_html }}} <div id="page" {{#hasfakeblocks}}class="has-fake-blocks"{{/hasfakeblocks}}> {{#hasfakeblocks}} <section class="embedded-blocks" aria-label="{{#str}}blocks{{/str}}"> {{{ fakeblocks }}} </section> {{/hasfakeblocks}} <section class="embedded-main"> {{#headercontent}} {{> core/activity_header }} {{/headercontent}} {{{ output.main_content }}} </section> </div> {{{ output.standard_end_of_body_html }}} </body> </html> {{#js}} M.util.js_pending('theme_boost/loader'); require(['theme_boost/loader'], function() { M.util.js_complete('theme_boost/loader'); }); {{/js}} boost/templates/secure.mustache 0000604 00000005511 15062070725 0012713 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/secure Boost secure layout template. Context variables required for this template: * sitename - The name of the site * output - The core renderer for the page Example context (json): { "sitename": "Moodle", "output": { "doctype": "<!DOCTYPE html>", "page_title": "Test page", "favicon": "favicon.ico", "main_content": "<h1>Headings make html validators happier</h1>" } } }} {{> theme_boost/head }} <body {{{ bodyattributes }}}> {{> core/local/toast/wrapper}} <div id="page-wrapper"> {{{ output.standard_top_of_body_html }}} {{>theme_boost/navbar-secure}} <div id="page" class="container-fluid"> {{! Secured full header }} <div id="page-header" class="row"> <div class="col-12 py-3"> <div class="page-context-header"> <div class="page-header-headings"> {{{ output.page_heading }}} </div> </div> </div> </div> <div id="page-content" class="row"> <div id="region-main-box" class="col-12"> <section id="region-main" {{#hasblocks}}class="has-blocks"{{/hasblocks}} aria-label="{{#str}}content{{/str}}"> {{{ output.course_content_header }}} {{{ output.main_content }}} {{{ output.course_content_footer }}} </section> {{#hasblocks}} <section data-region="blocks-column" aria-label="{{#str}}blocks{{/str}}"> {{{ sidepreblocks }}} </section> {{/hasblocks}} </div> </div> </div> <footer id="page-footer" class="py-3"> <div class="container"> <div id="course-footer">{{{ output.course_footer }}}</div> {{{ output.standard_end_of_body_html }}} </div> </footer> </div> </body> </html> {{#js}} M.util.js_pending('theme_boost/loader'); require(['theme_boost/loader'], function() { M.util.js_complete('theme_boost/loader'); }); {{/js}} boost/templates/columns2.mustache 0000604 00000010170 15062070725 0013164 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/columns2 Admin time setting template. Boost 2 column layout template. Context variables required for this template: * sitename - The name of the site * output - The core renderer for the page * bodyattributes - attributes for the body tag as a string of html attributes * sidepreblocks - HTML for the blocks * hasblocks - true if there are blocks on this page * navdraweropen - true if the nav drawer should be open on page load * regionmainsettingsmenu - HTML for the region main settings menu * hasregionmainsettingsmenu - There is a region main settings menu on this page. Example context (json): { "sitename": "Moodle", "output": { "doctype": "<!DOCTYPE html>", "page_title": "Test page", "favicon": "favicon.ico", "main_content": "<h1>Headings make html validators happier</h1>" }, "bodyattributes":"", "sidepreblocks": "<h2>Blocks html goes here</h2>", "hasblocks":true, "navdraweropen":true, "regionmainsettingsmenu": "", "hasregionmainsettingsmenu": false } }} {{> theme_boost/head }} <body {{{ bodyattributes }}}> {{> core/local/toast/wrapper}} <div id="page-wrapper" class="d-print-block"> {{{ output.standard_top_of_body_html }}} {{> theme_boost/navbar }} <div id="page" class="container-fluid d-print-block"> {{{ output.full_header }}} {{#secondarymoremenu}} <div class="secondary-navigation"> {{> core/moremenu}} </div> {{/secondarymoremenu}} <div id="page-content" class="row pb-3 d-print-block"> <div id="region-main-box" class="col-12"> {{#hasregionmainsettingsmenu}} <div id="region-main-settings-menu" class="d-print-none {{#hasblocks}}has-blocks{{/hasblocks}}"> <div> {{{ regionmainsettingsmenu }}} </div> </div> {{/hasregionmainsettingsmenu}} <section id="region-main" {{#hasblocks}}class="has-blocks mb-3"{{/hasblocks}} aria-label="{{#str}}content{{/str}}"> {{#hasregionmainsettingsmenu}} <div class="region_main_settings_menu_proxy"></div> {{/hasregionmainsettingsmenu}} {{{ output.course_content_header }}} {{#headercontent}} {{> core/activity_header }} {{/headercontent}} {{#overflow}} {{> core/url_select}} {{/overflow}} {{{ output.main_content }}} {{{ output.activity_navigation }}} {{{ output.course_content_footer }}} </section> {{#hasblocks}} <section data-region="blocks-column" class="d-print-none" aria-label="{{#str}}blocks{{/str}}"> {{{ addblockbutton }}} {{{ sidepreblocks }}} </section> {{/hasblocks}} </div> </div> </div> {{{ output.standard_after_main_region_html }}} {{> theme_boost/footer }} </div> </body> </html> {{#js}} M.util.js_pending('theme_boost/loader'); require(['theme_boost/loader', 'theme_boost/drawer'], function(Loader, Drawer) { Drawer.init(); M.util.js_complete('theme_boost/loader'); }); {{/js}} boost/templates/footer.mustache 0000604 00000010121 15062070725 0012714 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/footer Page footer. Example context (json): { "output": { "page_doc_link": "Help and documentation", "supportemail": "<a href=\"#\">Contact site support</a>", "has_popover_links": true, "services_support": "Services and support", "login_info": "You are logged in as cute kitten", "moodle_release": "90210", "has_communication_links": true, "communication_url": "https://element:8081/#/room/#yourroom:synapse", "communication_link": "<a href=\"#\">Communication room</a>" } } }} <footer id="page-footer" class="footer-popover bg-white"> <div data-region="footer-container-popover"> {{#output.has_communication_links}} <button onclick="window.open('{{output.communication_url}}', '_blank', 'noreferrer')" class="btn btn-icon bg-primary text-white icon-no-margin btn-footer-communication" aria-label="{{#str}}communicationroomlink, course{{/str}}"> {{#pix}}t/messages-o, core{{/pix}} </button> {{/output.has_communication_links}} <button class="btn btn-icon bg-secondary icon-no-margin btn-footer-popover" data-action="footer-popover" aria-label="{{#str}}showfooter, theme_boost{{/str}}"> {{#pix}}e/question, core{{/pix}} </button> </div> <div class="footer-content-popover container" data-region="footer-content-popover"> {{#output.has_communication_links}} <div class="footer-section p-3 border-bottom footer-link-communication"> <div class="footer-support-link">{{{ output.communication_link }}}</div> </div> {{/output.has_communication_links}} {{# output.has_popover_links }} <div class="footer-section p-3 border-bottom"> {{# output.page_doc_link }} <div class="footer-support-link">{{{ output.page_doc_link }}}</div> {{/ output.page_doc_link }} {{# output.services_support_link }} <div class="footer-support-link">{{{ output.services_support_link }}}</div> {{/ output.services_support_link }} {{# output.supportemail }} <div class="footer-support-link">{{{ output.supportemail }}}</div> {{/ output.supportemail }} </div> {{/ output.has_popover_links }} <div class="footer-section p-3 border-bottom"> <div class="logininfo"> {{{ output.login_info }}} </div> <div class="tool_usertours-resettourcontainer"> </div> {{{ output.standard_footer_html }}} {{{ output.standard_end_of_body_html }}} </div> <div class="footer-section p-3"> <div>{{#str}}poweredbymoodle, core{{/str}}</div> {{#output.moodle_release}} <div> {{#str}}version, core{{/str}} {{{ output.moodle_release }}} </div> {{/output.moodle_release}} </div> </div> <div class="footer-content-debugging footer-dark bg-dark text-light"> <div class="container-fluid footer-dark-inner"> {{{ output.debug_footer_html }}} </div> </div> </footer> {{#js}} require(['theme_boost/footer-popover'], function(FooterPopover) { FooterPopover.init(); }); {{/js}} boost/templates/custom_menu_footer.mustache 0000604 00000000753 15062070725 0015344 0 ustar 00 {{#children}} {{^divider}} {{#url}} <li><a href="{{{url}}}" title="{{{title}}}">{{{text}}}</a></li> {{/url}} {{^url}} <li>{{{text}}}</li> {{/url}} {{/divider}} {{#haschildren}} <li> <ul class="list-unstyled ml-3"> {{> theme_boost/custom_menu_footer }} </ul> </li> {{/haschildren}} {{/children}} boost/templates/flat_navigation.mustache 0000604 00000010310 15062070725 0014563 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @deprecated since Moodle 4.0 @template theme_boost/flat_navigation Display the flat navigation for the boost theme Classes required for JS: * none Data attributes required for JS: * none Context variables required for this template: * flatnavigation - array of flat_navigation_nodes * showdivider - boolean * action - string * isactive - boolean * get_indent - integer * is_section - boolean * text - HTML Example context (json): { "flatnavigation" : [ { "showdivider": false, "action": "#", "isactive": true, "get_indent": 1, "is_section": false, "text": "First" },{ "showdivider": true, "action": "#", "isactive": false, "get_indent": 0, "is_section": true, "text": "Last & Second" } ] } }} <nav class="list-group" aria-label="{{firstcollectionlabel}}"> <ul> {{# flatnavigation }} {{#showdivider}} </ul> </nav> <nav class="list-group mt-1" aria-label="{{get_collectionlabel}}"> <ul> {{/showdivider}} {{#action}} <li> <a class="list-group-item list-group-item-action {{#isactive}}active{{/isactive}} {{#classes}}{{.}} {{/classes}}" href="{{{action}}}" data-key="{{key}}" data-isexpandable="{{isexpandable}}" data-indent="{{get_indent}}" data-showdivider="{{showdivider}}" data-type="{{type}}" data-nodetype="{{nodetype}}" data-collapse="{{collapse}}" data-forceopen="{{forceopen}}" data-isactive="{{isactive}}" data-hidden="{{hidden}}" data-preceedwithhr="{{preceedwithhr}}" {{#parent.key}}data-parent-key="{{.}}"{{/parent.key}}> <div class="ml-{{get_indent}}"> <div class="media"> {{#icon.pix}} <span class="media-left"> {{#pix}}{{{icon.pix}}}, {{{icon.component}}}, {{{icon.alt}}}{{/pix}} </span> {{/icon.pix}} <span class="media-body {{#isactive}}font-weight-bold{{/isactive}}">{{{text}}}</span> </div> </div> </a> </li> {{/action}} {{^action}} <li> <div class="list-group-item {{#classes}}{{.}} {{/classes}}" data-key="{{key}}" data-isexpandable="{{isexpandable}}" data-indent="{{get_indent}}" data-showdivider="{{showdivider}}" data-type="{{type}}" data-nodetype="{{nodetype}}" data-collapse="{{collapse}}" data-forceopen="{{forceopen}}" data-isactive="{{isactive}}" data-hidden="{{hidden}}" data-preceedwithhr="{{preceedwithhr}}" {{#parent.key}}data-parent-key="{{.}}"{{/parent.key}}> <div class="ml-{{get_indent}}"> <div class="media"> {{#icon.pix}} <span class="media-left"> {{#pix}}{{{icon.pix}}}, {{{icon.component}}}, {{{icon.alt}}}{{/pix}} </span> {{/icon.pix}} <span class="media-body">{{{text}}}</span> </div> </div> </div> </li> {{/action}} {{/ flatnavigation }} </ul> </nav> boost/templates/login.mustache 0000604 00000003557 15062070725 0012545 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/login Login page template Example context (json): { "output": { "doctype": "<!DOCTYPE html>", "page_title": "Login page", "favicon": "favicon.ico", "main_content": "<h1>Headers keep HTML validators happy</h1>" } } }} {{> theme_boost/head }} <body {{{ bodyattributes }}}> {{> core/local/toast/wrapper}} <div id="page-wrapper"> {{{ output.standard_top_of_body_html }}} <div id="page" class="container-fluid pt-5 mt-0"> <div id="page-content" class="row"> <div id="region-main-box" class="col-12"> <section id="region-main" class="col-12 h-100" aria-label="{{#str}}content{{/str}}"> <div class="login-wrapper"> <div class="login-container"> {{{ output.main_content }}} </div> </div> </section> </div> </div> </div> {{> theme_boost/footer }} </div> </body> </html> {{#js}} M.util.js_pending('theme_boost/loader'); require(['theme_boost/loader'], function() { M.util.js_complete('theme_boost/loader'); }); {{/js}} boost/templates/primary-drawer-mobile.mustache 0000604 00000010103 15062070725 0015630 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/primary-drawer-mobile This template renders the mobile version of the top navbar menu in a drawer. Example context (json): { "output": { "should_display_navbar_logo": true, "get_compact_logo_url": "http://placekitten.com/50/50" }, "mobileprimarynav": [ { "text": "Dashboard", "url": "/my", "isactive": "true" }, { "text": "Site home", "url": "/", "isactive": "false" }, { "text": "My courses", "url": "/course", "isactive": "false" } ] } }} {{< theme_boost/drawer }} {{$id}}theme_boost-drawers-primary{{/id}} {{$drawerclasses}}drawer drawer-left drawer-primary{{/drawerclasses}} {{$drawercloseonresize}}1{{/drawercloseonresize}} {{$drawerheading}} {{# output.should_display_navbar_logo }} <img src="{{output.get_compact_logo_url}}" class="logo py-1 h-100" alt="{{sitename}}"> {{/ output.should_display_navbar_logo }} {{^ output.should_display_navbar_logo }} {{{ sitename }}} {{/ output.should_display_navbar_logo }} {{/drawerheading}} {{$drawercontent}} <div class="list-group"> {{#mobileprimarynav}} {{#haschildren}} <a id="drop-down-{{sort}}" href="#" class="list-group-item list-group-item-action icons-collapse-expand {{^isopen}}collapsed {{/isopen}}d-flex" data-toggle="collapse" data-target="#drop-down-menu-{{sort}}" aria-expanded="{{#isopen}}true{{/isopen}}{{^isopen}}false{{/isopen}}" aria-controls="drop-down-menu-{{sort}}"> {{{text}}} <span class="ml-auto expanded-icon icon-no-margin mx-2"> {{#pix}} t/expanded, core {{/pix}} <span class="sr-only"> {{#str}} collapse, core {{/str}} </span> </span> <span class="ml-auto collapsed-icon icon-no-margin mx-2"> {{#pix}} t/collapsed, core {{/pix}} <span class="sr-only"> {{#str}} expand, core {{/str}} </span> </span> </a> <div class="collapse {{#isopen}}show {{/isopen}}list-group-item p-0 border-0" role="menu" id="drop-down-menu-{{sort}}" aria-labelledby="drop-down-{{sort}}"> {{#children}} {{^divider}} <a href="{{{url}}}" class="pl-5 {{^isactive}}bg-light{{/isactive}}{{#isactive}}active{{/isactive}} list-group-item list-group-item-action">{{{text}}}</a> {{/divider}} {{/children}} </div> {{/haschildren}} {{^haschildren}} <a href="{{{url}}}" class="list-group-item list-group-item-action {{#isactive}}active{{/isactive}} {{#classes}}{{.}} {{/classes}}" {{#isactive}}aria-current="true"{{/isactive}}> {{{text}}} </a> {{/haschildren}} {{/mobileprimarynav}} </div> {{/drawercontent}} {{$drawerstate}}show-drawer-primary{{/drawerstate}} {{/ theme_boost/drawer}} boost/templates/nav-drawer.mustache 0000604 00000000600 15062070725 0013465 0 ustar 00 {{! @deprecated since 4.0 @template theme_boost/nav-drawer Example context (json): {} }} <div id="nav-drawer" data-region="drawer" class="d-print-none moodle-has-zindex {{^navdraweropen}}closed{{/navdraweropen}}" aria-hidden="{{#navdraweropen}}false{{/navdraweropen}}{{^navdraweropen}}true{{/navdraweropen}}" tabindex="-1"> {{> theme_boost/flat_navigation }} </div> boost/templates/blocks-drawer.mustache 0000604 00000000406 15062070725 0014162 0 ustar 00 <div id="blocks-drawer" data-region="drawer" class="moodle-has-zindex {{^blocksdraweropen}}closed{{/blocksdraweropen}}" aria-hidden="{{#blocksdraweropen}}false{{/blocksdraweropen}}{{^blocksdraweropen}}true{{/blocksdraweropen}}"> {{{ sidepreblocks }}} </div> boost/templates/drawers.mustache 0000604 00000017623 15062070725 0013103 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/drawers Boost drawer template. Context variables required for this template: * sitename - The name of the site * output - The core renderer for the page * bodyattributes - attributes for the body tag as a string of html attributes * sidepreblocks - HTML for the blocks * hasblocks - true if there are blocks on this page * courseindexopen - true if the nav drawer should be open on page load * regionmainsettingsmenu - HTML for the region main settings menu * hasregionmainsettingsmenu - There is a region main settings menu on this page. Example context (json): { "sitename": "Moodle", "output": { "doctype": "<!DOCTYPE html>", "page_title": "Test page", "favicon": "favicon.ico", "main_content": "<h1>Headings make html validators happier</h1>" }, "bodyattributes":"", "sidepreblocks": "<h2>Blocks html goes here</h2>", "hasblocks":true, "courseindexopen": true, "navdraweropen": false, "blockdraweropen": true, "regionmainsettingsmenu": "", "hasregionmainsettingsmenu": false, "addblockbutton": "" } }} {{> theme_boost/head }} <body {{{ bodyattributes }}}> {{> core/local/toast/wrapper}} <div id="page-wrapper" class="d-print-block"> {{{ output.standard_top_of_body_html }}} {{> theme_boost/navbar }} {{#courseindex}} {{< theme_boost/drawer }} {{$id}}theme_boost-drawers-courseindex{{/id}} {{$drawerheadercontent}} {{> theme_boost/courseindexdrawercontrols}} {{/drawerheadercontent}} {{$drawerclasses}}drawer drawer-left {{#courseindexopen}}show{{/courseindexopen}}{{/drawerclasses}} {{$drawercontent}} {{{courseindex}}} {{/drawercontent}} {{$drawerpreferencename}}drawer-open-index{{/drawerpreferencename}} {{$drawerstate}}show-drawer-left{{/drawerstate}} {{$tooltipplacement}}right{{/tooltipplacement}} {{$closebuttontext}}{{#str}}closecourseindex, core{{/str}}{{/closebuttontext}} {{/ theme_boost/drawer}} {{/courseindex}} {{#hasblocks}} {{< theme_boost/drawer }} {{$id}}theme_boost-drawers-blocks{{/id}} {{$drawerclasses}}drawer drawer-right{{#blockdraweropen}} show{{/blockdraweropen}}{{/drawerclasses}} {{$drawercontent}} <section class="d-print-none" aria-label="{{#str}}blocks{{/str}}"> {{{ addblockbutton }}} {{{ sidepreblocks }}} </section> {{/drawercontent}} {{$drawerpreferencename}}drawer-open-block{{/drawerpreferencename}} {{$forceopen}}{{#forceblockdraweropen}}1{{/forceblockdraweropen}}{{/forceopen}} {{$drawerstate}}show-drawer-right{{/drawerstate}} {{$tooltipplacement}}left{{/tooltipplacement}} {{$drawercloseonresize}}1{{/drawercloseonresize}} {{$closebuttontext}}{{#str}}closeblockdrawer, core{{/str}}{{/closebuttontext}} {{/ theme_boost/drawer}} {{/hasblocks}} <div id="page" data-region="mainpage" data-usertour="scroller" class="drawers {{#courseindexopen}}show-drawer-left{{/courseindexopen}} {{#blockdraweropen}}show-drawer-right{{/blockdraweropen}} drag-container"> <div id="topofscroll" class="main-inner"> <div class="drawer-toggles d-flex"> {{#courseindex}} <div class="drawer-toggler drawer-left-toggle open-nav d-print-none"> <button class="btn icon-no-margin" data-toggler="drawers" data-action="toggle" data-target="theme_boost-drawers-courseindex" data-toggle="tooltip" data-placement="right" title="{{#str}}opendrawerindex, core{{/str}}" > <span class="sr-only">{{#str}}opendrawerindex, core{{/str}}</span> {{#pix}} t/index_drawer, moodle {{/pix}} </button> </div> {{/courseindex}} {{#hasblocks}} <div class="drawer-toggler drawer-right-toggle ml-auto d-print-none"> <button class="btn icon-no-margin" data-toggler="drawers" data-action="toggle" data-target="theme_boost-drawers-blocks" data-toggle="tooltip" data-placement="right" title="{{#str}}opendrawerblocks, core{{/str}}" > <span class="sr-only">{{#str}}opendrawerblocks, core{{/str}}</span> <span class="dir-rtl-hide">{{#pix}}t/blocks_drawer, core{{/pix}}</span> <span class="dir-ltr-hide">{{#pix}}t/blocks_drawer_rtl, core{{/pix}}</span> </button> </div> {{/hasblocks}} </div> {{{ output.full_header }}} {{#secondarymoremenu}} <div class="secondary-navigation d-print-none"> {{> core/moremenu}} </div> {{/secondarymoremenu}} <div id="page-content" class="pb-3 d-print-block"> <div id="region-main-box"> {{#hasregionmainsettingsmenu}} <div id="region-main-settings-menu" class="d-print-none"> <div> {{{ regionmainsettingsmenu }}} </div> </div> {{/hasregionmainsettingsmenu}} <section id="region-main" aria-label="{{#str}}content{{/str}}"> {{#hasregionmainsettingsmenu}} <div class="region_main_settings_menu_proxy"></div> {{/hasregionmainsettingsmenu}} {{{ output.course_content_header }}} {{#headercontent}} {{> core/activity_header }} {{/headercontent}} {{#overflow}} <div class="container-fluid tertiary-navigation"> <div class="navitem"> {{> core/url_select}} </div> </div> {{/overflow}} {{{ output.main_content }}} {{{ output.activity_navigation }}} {{{ output.course_content_footer }}} </section> </div> </div> </div> {{> theme_boost/footer }} </div> {{{ output.standard_after_main_region_html }}} </div> </body> </html> {{#js}} M.util.js_pending('theme_boost/loader'); require(['theme_boost/loader', 'theme_boost/drawer'], function(Loader, Drawer) { Drawer.init(); M.util.js_complete('theme_boost/loader'); }); {{/js}} boost/templates/admin_setting_tabs.mustache 0000604 00000003262 15062070725 0015264 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/admin_setting_tabs Example context (json): { "tabs": [ { "name": "tab1", "active": 0, "displayname": "Inactive tab1", "html": "<p>Tab 1 content</p>" }, { "name": "tab2", "active": 1, "displayname": "Active tab2", "html": "<p>Tab 2 content</p>" } ] } }} <ul class="nav nav-tabs" role="tablist"> {{#tabs}} <li class="nav-item"> <a href="#{{name}}" class="nav-link {{#active}}active{{/active}}" data-toggle="tab" role="tab" {{#active}}aria-selected="true"{{/active}} {{^active}}aria-selected="false" tabindex="-1"{{/active}}>{{displayname}}</a> </li> {{/tabs}} </ul> <div class="tab-content mt-3"> {{#tabs}} <div class="tab-pane {{#active}}active{{/active}}" id="{{name}}" role="tabpanel"> {{{html}}} </div> {{/tabs}} </div> boost/templates/columns1.mustache 0000604 00000004612 15062070725 0013167 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/columns1 Boost 1 column layout template. Context variables required for this template: * sitename - The name of the site * output - The core renderer for the page * bodyattributes - attributes for the body tag as a string of html attributes Example context (json): { "sitename": "Moodle", "output": { "doctype": "<!DOCTYPE html>", "page_title": "Test page", "favicon": "favicon.ico", "main_content": "<h1>Headings make html validators happier</h1>" }, "bodyattributes":"" } }} {{> theme_boost/head }} <body {{{ bodyattributes }}}> {{> core/local/toast/wrapper}} <div id="page-wrapper" class="d-print-block"> {{{ output.standard_top_of_body_html }}} <div id="page" class="container-fluid d-print-block"> <div id="page-content" class="row pb-3 d-print-block"> <div id="region-main-box" class="col-12"> <section id="region-main" aria-label="{{#str}}content{{/str}}"> {{{ output.course_content_header }}} {{#headercontent}} {{> core/activity_header }} {{/headercontent}} {{{ output.main_content }}} {{{ output.activity_navigation }}} {{{ output.course_content_footer }}} </section> </div> </div> </div> {{{ output.standard_after_main_region_html }}} </div> {{{ output.standard_end_of_body_html }}} </body> </html> {{#js}} M.util.js_pending('theme_boost/loader'); require(['theme_boost/loader'], function() { M.util.js_complete('theme_boost/loader'); }); {{/js}} boost/templates/drawer.mustache 0000604 00000004327 15062070725 0012715 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! @template theme_boost/drawer Example context (json): { "drawerclasses": "drawer drawer-right", "drawertrigger": "toggleblocks", "tooltipplacement": "right", "drawerconent": "Content for the blocks region", "closebuttontext": "Close drawer" } }} <div {{! }} class="{{$drawerclasses}}{{/drawerclasses}} d-print-none not-initialized"{{! }} data-region="fixed-drawer"{{! }} id="{{$id}}{{/id}}"{{! }} data-preference="{{$drawerpreferencename}}{{/drawerpreferencename}}"{{! }} data-state="{{$drawerstate}}{{/drawerstate}}"{{! }} data-forceopen="{{$forceopen}}0{{/forceopen}}"{{! }} data-close-on-resize="{{$drawercloseonresize}}0{{/drawercloseonresize}}"{{! }}> <div class="drawerheader"> <button class="btn drawertoggle icon-no-margin hidden" data-toggler="drawers" data-action="closedrawer" data-target="{{$id}}{{/id}}" data-toggle="tooltip" data-placement="{{$tooltipplacement}}right{{/tooltipplacement}}" title="{{$closebuttontext}}{{#str}}closedrawer, core{{/str}}{{/closebuttontext}}" > {{#pix}} e/cancel, core {{/pix}} </button> <div class="drawerheadercontent hidden"> {{$drawerheadercontent}}{{/drawerheadercontent}} </div> </div> <div class="drawercontent drag-container" data-usertour="scroller"> {{$drawercontent}}{{/drawercontent}} </div> </div> {{#js}} require(['theme_boost/drawers']); {{/js}} boost/templates/head.mustache 0000604 00000001766 15062070725 0012336 0 ustar 00 {{! This file is part of Moodle - http://moodle.org/ Moodle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Moodle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Moodle. If not, see <http://www.gnu.org/licenses/>. }} {{! Page header. }} {{{ output.doctype }}} <html {{{ output.htmlattributes }}}> <head> <title>{{{ output.page_title }}}</title> <link rel="shortcut icon" href="{{{ output.favicon }}}" /> {{{ output.standard_head_html }}} <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head>