| @ -0,0 +1,6 @@ | |||
| Thanks for downloading this template! | |||
| Template Name: OnePage | |||
| Template URL: https://bootstrapmade.com/onepage-multipurpose-bootstrap-template/ | |||
| Author: BootstrapMade.com | |||
| License: https://bootstrapmade.com/license/ | |||
| @ -0,0 +1,275 @@ | |||
| /** | |||
| * Template Name: OnePage | |||
| * Updated: Sep 18 2023 with Bootstrap v5.3.2 | |||
| * Template URL: https://bootstrapmade.com/onepage-multipurpose-bootstrap-template/ | |||
| * Author: BootstrapMade.com | |||
| * License: https://bootstrapmade.com/license/ | |||
| */ | |||
| (function() { | |||
| "use strict"; | |||
| /** | |||
| * Easy selector helper function | |||
| */ | |||
| const select = (el, all = false) => { | |||
| el = el.trim() | |||
| if (all) { | |||
| return [...document.querySelectorAll(el)] | |||
| } else { | |||
| return document.querySelector(el) | |||
| } | |||
| } | |||
| /** | |||
| * Easy event listener function | |||
| */ | |||
| const on = (type, el, listener, all = false) => { | |||
| let selectEl = select(el, all) | |||
| if (selectEl) { | |||
| if (all) { | |||
| selectEl.forEach(e => e.addEventListener(type, listener)) | |||
| } else { | |||
| selectEl.addEventListener(type, listener) | |||
| } | |||
| } | |||
| } | |||
| /** | |||
| * Easy on scroll event listener | |||
| */ | |||
| const onscroll = (el, listener) => { | |||
| el.addEventListener('scroll', listener) | |||
| } | |||
| /** | |||
| * Navbar links active state on scroll | |||
| */ | |||
| let navbarlinks = select('#navbar .scrollto', true) | |||
| const navbarlinksActive = () => { | |||
| let position = window.scrollY + 200 | |||
| navbarlinks.forEach(navbarlink => { | |||
| if (!navbarlink.hash) return | |||
| let section = select(navbarlink.hash) | |||
| if (!section) return | |||
| if (position >= section.offsetTop && position <= (section.offsetTop + section.offsetHeight)) { | |||
| navbarlink.classList.add('active') | |||
| } else { | |||
| navbarlink.classList.remove('active') | |||
| } | |||
| }) | |||
| } | |||
| window.addEventListener('load', navbarlinksActive) | |||
| onscroll(document, navbarlinksActive) | |||
| /** | |||
| * Scrolls to an element with header offset | |||
| */ | |||
| const scrollto = (el) => { | |||
| let header = select('#header') | |||
| let offset = header.offsetHeight | |||
| let elementPos = select(el).offsetTop | |||
| window.scrollTo({ | |||
| top: elementPos - offset, | |||
| behavior: 'smooth' | |||
| }) | |||
| } | |||
| /** | |||
| * Toggle .header-scrolled class to #header when page is scrolled | |||
| */ | |||
| let selectHeader = select('#header') | |||
| if (selectHeader) { | |||
| const headerScrolled = () => { | |||
| if (window.scrollY > 100) { | |||
| selectHeader.classList.add('header-scrolled') | |||
| } else { | |||
| selectHeader.classList.remove('header-scrolled') | |||
| } | |||
| } | |||
| window.addEventListener('load', headerScrolled) | |||
| onscroll(document, headerScrolled) | |||
| } | |||
| /** | |||
| * Back to top button | |||
| */ | |||
| let backtotop = select('.back-to-top') | |||
| if (backtotop) { | |||
| const toggleBacktotop = () => { | |||
| if (window.scrollY > 100) { | |||
| backtotop.classList.add('active') | |||
| } else { | |||
| backtotop.classList.remove('active') | |||
| } | |||
| } | |||
| window.addEventListener('load', toggleBacktotop) | |||
| onscroll(document, toggleBacktotop) | |||
| } | |||
| /** | |||
| * Mobile nav toggle | |||
| */ | |||
| on('click', '.mobile-nav-toggle', function(e) { | |||
| select('#navbar').classList.toggle('navbar-mobile') | |||
| this.classList.toggle('bi-list') | |||
| this.classList.toggle('bi-x') | |||
| }) | |||
| /** | |||
| * Mobile nav dropdowns activate | |||
| */ | |||
| on('click', '.navbar .dropdown > a', function(e) { | |||
| if (select('#navbar').classList.contains('navbar-mobile')) { | |||
| e.preventDefault() | |||
| this.nextElementSibling.classList.toggle('dropdown-active') | |||
| } | |||
| }, true) | |||
| /** | |||
| * Scrool with ofset on links with a class name .scrollto | |||
| */ | |||
| on('click', '.scrollto', function(e) { | |||
| if (select(this.hash)) { | |||
| e.preventDefault() | |||
| let navbar = select('#navbar') | |||
| if (navbar.classList.contains('navbar-mobile')) { | |||
| navbar.classList.remove('navbar-mobile') | |||
| let navbarToggle = select('.mobile-nav-toggle') | |||
| navbarToggle.classList.toggle('bi-list') | |||
| navbarToggle.classList.toggle('bi-x') | |||
| } | |||
| scrollto(this.hash) | |||
| } | |||
| }, true) | |||
| /** | |||
| * Scroll with ofset on page load with hash links in the url | |||
| */ | |||
| window.addEventListener('load', () => { | |||
| if (window.location.hash) { | |||
| if (select(window.location.hash)) { | |||
| scrollto(window.location.hash) | |||
| } | |||
| } | |||
| }); | |||
| /** | |||
| * Preloader | |||
| */ | |||
| let preloader = select('#preloader'); | |||
| if (preloader) { | |||
| window.addEventListener('load', () => { | |||
| preloader.remove() | |||
| }); | |||
| } | |||
| /** | |||
| * Initiate glightbox | |||
| */ | |||
| const glightbox = GLightbox({ | |||
| selector: '.glightbox' | |||
| }); | |||
| /** | |||
| * Testimonials slider | |||
| */ | |||
| new Swiper('.testimonials-slider', { | |||
| speed: 600, | |||
| loop: true, | |||
| autoplay: { | |||
| delay: 5000, | |||
| disableOnInteraction: false | |||
| }, | |||
| slidesPerView: 'auto', | |||
| pagination: { | |||
| el: '.swiper-pagination', | |||
| type: 'bullets', | |||
| clickable: true | |||
| }, | |||
| breakpoints: { | |||
| 320: { | |||
| slidesPerView: 1, | |||
| spaceBetween: 20 | |||
| }, | |||
| 1200: { | |||
| slidesPerView: 3, | |||
| spaceBetween: 20 | |||
| } | |||
| } | |||
| }); | |||
| /** | |||
| * Porfolio isotope and filter | |||
| */ | |||
| window.addEventListener('load', () => { | |||
| let portfolioContainer = select('.portfolio-container'); | |||
| if (portfolioContainer) { | |||
| let portfolioIsotope = new Isotope(portfolioContainer, { | |||
| itemSelector: '.portfolio-item' | |||
| }); | |||
| let portfolioFilters = select('#portfolio-flters li', true); | |||
| on('click', '#portfolio-flters li', function(e) { | |||
| e.preventDefault(); | |||
| portfolioFilters.forEach(function(el) { | |||
| el.classList.remove('filter-active'); | |||
| }); | |||
| this.classList.add('filter-active'); | |||
| portfolioIsotope.arrange({ | |||
| filter: this.getAttribute('data-filter') | |||
| }); | |||
| portfolioIsotope.on('arrangeComplete', function() { | |||
| AOS.refresh() | |||
| }); | |||
| }, true); | |||
| } | |||
| }); | |||
| /** | |||
| * Initiate portfolio lightbox | |||
| */ | |||
| const portfolioLightbox = GLightbox({ | |||
| selector: '.portfolio-lightbox' | |||
| }); | |||
| /** | |||
| * Portfolio details slider | |||
| */ | |||
| new Swiper('.portfolio-details-slider', { | |||
| speed: 400, | |||
| loop: true, | |||
| autoplay: { | |||
| delay: 5000, | |||
| disableOnInteraction: false | |||
| }, | |||
| pagination: { | |||
| el: '.swiper-pagination', | |||
| type: 'bullets', | |||
| clickable: true | |||
| } | |||
| }); | |||
| /** | |||
| * Animation on scroll | |||
| */ | |||
| window.addEventListener('load', () => { | |||
| AOS.init({ | |||
| duration: 1000, | |||
| easing: 'ease-in-out', | |||
| once: true, | |||
| mirror: false | |||
| }) | |||
| }); | |||
| /** | |||
| * Initiate Pure Counter | |||
| */ | |||
| new PureCounter(); | |||
| })() | |||
| @ -0,0 +1 @@ | |||
| The .scss (Sass) files are only available in the pro version. | |||
| @ -0,0 +1,614 @@ | |||
| 'use strict'; | |||
| function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } | |||
| var throttle = _interopDefault(require('lodash.throttle')); | |||
| var debounce = _interopDefault(require('lodash.debounce')); | |||
| var callback = function callback() {}; | |||
| function containsAOSNode(nodes) { | |||
| var i = void 0, | |||
| currentNode = void 0, | |||
| result = void 0; | |||
| for (i = 0; i < nodes.length; i += 1) { | |||
| currentNode = nodes[i]; | |||
| if (currentNode.dataset && currentNode.dataset.aos) { | |||
| return true; | |||
| } | |||
| result = currentNode.children && containsAOSNode(currentNode.children); | |||
| if (result) { | |||
| return true; | |||
| } | |||
| } | |||
| return false; | |||
| } | |||
| function check(mutations) { | |||
| if (!mutations) return; | |||
| mutations.forEach(function (mutation) { | |||
| var addedNodes = Array.prototype.slice.call(mutation.addedNodes); | |||
| var removedNodes = Array.prototype.slice.call(mutation.removedNodes); | |||
| var allNodes = addedNodes.concat(removedNodes); | |||
| if (containsAOSNode(allNodes)) { | |||
| return callback(); | |||
| } | |||
| }); | |||
| } | |||
| function getMutationObserver() { | |||
| return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; | |||
| } | |||
| function isSupported() { | |||
| return !!getMutationObserver(); | |||
| } | |||
| function ready(selector, fn) { | |||
| var doc = window.document; | |||
| var MutationObserver = getMutationObserver(); | |||
| var observer = new MutationObserver(check); | |||
| callback = fn; | |||
| observer.observe(doc.documentElement, { | |||
| childList: true, | |||
| subtree: true, | |||
| removedNodes: true | |||
| }); | |||
| } | |||
| var observer = { isSupported: isSupported, ready: ready }; | |||
| var classCallCheck = function (instance, Constructor) { | |||
| if (!(instance instanceof Constructor)) { | |||
| throw new TypeError("Cannot call a class as a function"); | |||
| } | |||
| }; | |||
| var createClass = function () { | |||
| function defineProperties(target, props) { | |||
| for (var i = 0; i < props.length; i++) { | |||
| var descriptor = props[i]; | |||
| descriptor.enumerable = descriptor.enumerable || false; | |||
| descriptor.configurable = true; | |||
| if ("value" in descriptor) descriptor.writable = true; | |||
| Object.defineProperty(target, descriptor.key, descriptor); | |||
| } | |||
| } | |||
| return function (Constructor, protoProps, staticProps) { | |||
| if (protoProps) defineProperties(Constructor.prototype, protoProps); | |||
| if (staticProps) defineProperties(Constructor, staticProps); | |||
| return Constructor; | |||
| }; | |||
| }(); | |||
| var _extends = Object.assign || function (target) { | |||
| for (var i = 1; i < arguments.length; i++) { | |||
| var source = arguments[i]; | |||
| for (var key in source) { | |||
| if (Object.prototype.hasOwnProperty.call(source, key)) { | |||
| target[key] = source[key]; | |||
| } | |||
| } | |||
| } | |||
| return target; | |||
| }; | |||
| /** | |||
| * Device detector | |||
| */ | |||
| var fullNameRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i; | |||
| var prefixRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; | |||
| var fullNameMobileRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i; | |||
| var prefixMobileRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; | |||
| function ua() { | |||
| return navigator.userAgent || navigator.vendor || window.opera || ''; | |||
| } | |||
| var Detector = function () { | |||
| function Detector() { | |||
| classCallCheck(this, Detector); | |||
| } | |||
| createClass(Detector, [{ | |||
| key: 'phone', | |||
| value: function phone() { | |||
| var a = ua(); | |||
| return !!(fullNameRe.test(a) || prefixRe.test(a.substr(0, 4))); | |||
| } | |||
| }, { | |||
| key: 'mobile', | |||
| value: function mobile() { | |||
| var a = ua(); | |||
| return !!(fullNameMobileRe.test(a) || prefixMobileRe.test(a.substr(0, 4))); | |||
| } | |||
| }, { | |||
| key: 'tablet', | |||
| value: function tablet() { | |||
| return this.mobile() && !this.phone(); | |||
| } | |||
| // http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c | |||
| }, { | |||
| key: 'ie11', | |||
| value: function ie11() { | |||
| return '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style; | |||
| } | |||
| }]); | |||
| return Detector; | |||
| }(); | |||
| var detect = new Detector(); | |||
| /** | |||
| * Adds multiple classes on node | |||
| * @param {DOMNode} node | |||
| * @param {array} classes | |||
| */ | |||
| var addClasses = function addClasses(node, classes) { | |||
| return classes && classes.forEach(function (className) { | |||
| return node.classList.add(className); | |||
| }); | |||
| }; | |||
| /** | |||
| * Removes multiple classes from node | |||
| * @param {DOMNode} node | |||
| * @param {array} classes | |||
| */ | |||
| var removeClasses = function removeClasses(node, classes) { | |||
| return classes && classes.forEach(function (className) { | |||
| return node.classList.remove(className); | |||
| }); | |||
| }; | |||
| var fireEvent = function fireEvent(eventName, data) { | |||
| var customEvent = void 0; | |||
| if (detect.ie11()) { | |||
| customEvent = document.createEvent('CustomEvent'); | |||
| customEvent.initCustomEvent(eventName, true, true, { detail: data }); | |||
| } else { | |||
| customEvent = new CustomEvent(eventName, { | |||
| detail: data | |||
| }); | |||
| } | |||
| return document.dispatchEvent(customEvent); | |||
| }; | |||
| /** | |||
| * Set or remove aos-animate class | |||
| * @param {node} el element | |||
| * @param {int} top scrolled distance | |||
| */ | |||
| var applyClasses = function applyClasses(el, top) { | |||
| var options = el.options, | |||
| position = el.position, | |||
| node = el.node, | |||
| data = el.data; | |||
| var hide = function hide() { | |||
| if (!el.animated) return; | |||
| removeClasses(node, options.animatedClassNames); | |||
| fireEvent('aos:out', node); | |||
| if (el.options.id) { | |||
| fireEvent('aos:in:' + el.options.id, node); | |||
| } | |||
| el.animated = false; | |||
| }; | |||
| var show = function show() { | |||
| if (el.animated) return; | |||
| addClasses(node, options.animatedClassNames); | |||
| fireEvent('aos:in', node); | |||
| if (el.options.id) { | |||
| fireEvent('aos:in:' + el.options.id, node); | |||
| } | |||
| el.animated = true; | |||
| }; | |||
| if (options.mirror && top >= position.out && !options.once) { | |||
| hide(); | |||
| } else if (top >= position.in) { | |||
| show(); | |||
| } else if (el.animated && !options.once) { | |||
| hide(); | |||
| } | |||
| }; | |||
| /** | |||
| * Scroll logic - add or remove 'aos-animate' class on scroll | |||
| * | |||
| * @param {array} $elements array of elements nodes | |||
| * @return {void} | |||
| */ | |||
| var handleScroll = function handleScroll($elements) { | |||
| return $elements.forEach(function (el, i) { | |||
| return applyClasses(el, window.pageYOffset); | |||
| }); | |||
| }; | |||
| /** | |||
| * Get offset of DOM element | |||
| * like there were no transforms applied on it | |||
| * | |||
| * @param {Node} el [DOM element] | |||
| * @return {Object} [top and left offset] | |||
| */ | |||
| var offset = function offset(el) { | |||
| var _x = 0; | |||
| var _y = 0; | |||
| while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { | |||
| _x += el.offsetLeft - (el.tagName != 'BODY' ? el.scrollLeft : 0); | |||
| _y += el.offsetTop - (el.tagName != 'BODY' ? el.scrollTop : 0); | |||
| el = el.offsetParent; | |||
| } | |||
| return { | |||
| top: _y, | |||
| left: _x | |||
| }; | |||
| }; | |||
| /** | |||
| * Get inline option with a fallback. | |||
| * | |||
| * @param {Node} el [Dom element] | |||
| * @param {String} key [Option key] | |||
| * @param {String} fallback [Default (fallback) value] | |||
| * @return {Mixed} [Option set with inline attributes or fallback value if not set] | |||
| */ | |||
| var getInlineOption = (function (el, key, fallback) { | |||
| var attr = el.getAttribute('data-aos-' + key); | |||
| if (typeof attr !== 'undefined') { | |||
| if (attr === 'true') { | |||
| return true; | |||
| } else if (attr === 'false') { | |||
| return false; | |||
| } | |||
| } | |||
| return attr || fallback; | |||
| }); | |||
| /** | |||
| * Calculate offset | |||
| * basing on element's settings like: | |||
| * - anchor | |||
| * - offset | |||
| * | |||
| * @param {Node} el [Dom element] | |||
| * @return {Integer} [Final offset that will be used to trigger animation in good position] | |||
| */ | |||
| var getPositionIn = function getPositionIn(el, defaultOffset, defaultAnchorPlacement) { | |||
| var windowHeight = window.innerHeight; | |||
| var anchor = getInlineOption(el, 'anchor'); | |||
| var inlineAnchorPlacement = getInlineOption(el, 'anchor-placement'); | |||
| var additionalOffset = Number(getInlineOption(el, 'offset', inlineAnchorPlacement ? 0 : defaultOffset)); | |||
| var anchorPlacement = inlineAnchorPlacement || defaultAnchorPlacement; | |||
| var finalEl = el; | |||
| if (anchor && document.querySelectorAll(anchor)) { | |||
| finalEl = document.querySelectorAll(anchor)[0]; | |||
| } | |||
| var triggerPoint = offset(finalEl).top - windowHeight; | |||
| switch (anchorPlacement) { | |||
| case 'top-bottom': | |||
| // Default offset | |||
| break; | |||
| case 'center-bottom': | |||
| triggerPoint += finalEl.offsetHeight / 2; | |||
| break; | |||
| case 'bottom-bottom': | |||
| triggerPoint += finalEl.offsetHeight; | |||
| break; | |||
| case 'top-center': | |||
| triggerPoint += windowHeight / 2; | |||
| break; | |||
| case 'center-center': | |||
| triggerPoint += windowHeight / 2 + finalEl.offsetHeight / 2; | |||
| break; | |||
| case 'bottom-center': | |||
| triggerPoint += windowHeight / 2 + finalEl.offsetHeight; | |||
| break; | |||
| case 'top-top': | |||
| triggerPoint += windowHeight; | |||
| break; | |||
| case 'bottom-top': | |||
| triggerPoint += windowHeight + finalEl.offsetHeight; | |||
| break; | |||
| case 'center-top': | |||
| triggerPoint += windowHeight + finalEl.offsetHeight / 2; | |||
| break; | |||
| } | |||
| return triggerPoint + additionalOffset; | |||
| }; | |||
| var getPositionOut = function getPositionOut(el, defaultOffset) { | |||
| var windowHeight = window.innerHeight; | |||
| var anchor = getInlineOption(el, 'anchor'); | |||
| var additionalOffset = getInlineOption(el, 'offset', defaultOffset); | |||
| var finalEl = el; | |||
| if (anchor && document.querySelectorAll(anchor)) { | |||
| finalEl = document.querySelectorAll(anchor)[0]; | |||
| } | |||
| var elementOffsetTop = offset(finalEl).top; | |||
| return elementOffsetTop + finalEl.offsetHeight - additionalOffset; | |||
| }; | |||
| /* Clearing variables */ | |||
| var prepare = function prepare($elements, options) { | |||
| $elements.forEach(function (el, i) { | |||
| var mirror = getInlineOption(el.node, 'mirror', options.mirror); | |||
| var once = getInlineOption(el.node, 'once', options.once); | |||
| var id = getInlineOption(el.node, 'id'); | |||
| var customClassNames = options.useClassNames && el.node.getAttribute('data-aos'); | |||
| var animatedClassNames = [options.animatedClassName].concat(customClassNames ? customClassNames.split(' ') : []).filter(function (className) { | |||
| return typeof className === 'string'; | |||
| }); | |||
| if (options.initClassName) { | |||
| el.node.classList.add(options.initClassName); | |||
| } | |||
| el.position = { | |||
| in: getPositionIn(el.node, options.offset, options.anchorPlacement), | |||
| out: mirror && getPositionOut(el.node, options.offset) | |||
| }; | |||
| el.options = { | |||
| once: once, | |||
| mirror: mirror, | |||
| animatedClassNames: animatedClassNames, | |||
| id: id | |||
| }; | |||
| }); | |||
| return $elements; | |||
| }; | |||
| /** | |||
| * Generate initial array with elements as objects | |||
| * This array will be extended later with elements attributes values | |||
| * like 'position' | |||
| */ | |||
| var elements = (function () { | |||
| var elements = document.querySelectorAll('[data-aos]'); | |||
| return Array.prototype.map.call(elements, function (node) { | |||
| return { node: node }; | |||
| }); | |||
| }); | |||
| /** | |||
| * ******************************************************* | |||
| * AOS (Animate on scroll) - wowjs alternative | |||
| * made to animate elements on scroll in both directions | |||
| * ******************************************************* | |||
| */ | |||
| /** | |||
| * Private variables | |||
| */ | |||
| var $aosElements = []; | |||
| var initialized = false; | |||
| /** | |||
| * Default options | |||
| */ | |||
| var options = { | |||
| offset: 120, | |||
| delay: 0, | |||
| easing: 'ease', | |||
| duration: 400, | |||
| disable: false, | |||
| once: false, | |||
| mirror: false, | |||
| anchorPlacement: 'top-bottom', | |||
| startEvent: 'DOMContentLoaded', | |||
| animatedClassName: 'aos-animate', | |||
| initClassName: 'aos-init', | |||
| useClassNames: false, | |||
| disableMutationObserver: false, | |||
| throttleDelay: 99, | |||
| debounceDelay: 50 | |||
| }; | |||
| // Detect not supported browsers (<=IE9) | |||
| // http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 | |||
| var isBrowserNotSupported = function isBrowserNotSupported() { | |||
| return document.all && !window.atob; | |||
| }; | |||
| var initializeScroll = function initializeScroll() { | |||
| // Extend elements objects in $aosElements with their positions | |||
| $aosElements = prepare($aosElements, options); | |||
| // Perform scroll event, to refresh view and show/hide elements | |||
| handleScroll($aosElements); | |||
| /** | |||
| * Handle scroll event to animate elements on scroll | |||
| */ | |||
| window.addEventListener('scroll', throttle(function () { | |||
| handleScroll($aosElements, options.once); | |||
| }, options.throttleDelay)); | |||
| return $aosElements; | |||
| }; | |||
| /** | |||
| * Refresh AOS | |||
| */ | |||
| var refresh = function refresh() { | |||
| var initialize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; | |||
| // Allow refresh only when it was first initialized on startEvent | |||
| if (initialize) initialized = true; | |||
| if (initialized) initializeScroll(); | |||
| }; | |||
| /** | |||
| * Hard refresh | |||
| * create array with new elements and trigger refresh | |||
| */ | |||
| var refreshHard = function refreshHard() { | |||
| $aosElements = elements(); | |||
| if (isDisabled(options.disable) || isBrowserNotSupported()) { | |||
| return disable(); | |||
| } | |||
| refresh(); | |||
| }; | |||
| /** | |||
| * Disable AOS | |||
| * Remove all attributes to reset applied styles | |||
| */ | |||
| var disable = function disable() { | |||
| $aosElements.forEach(function (el, i) { | |||
| el.node.removeAttribute('data-aos'); | |||
| el.node.removeAttribute('data-aos-easing'); | |||
| el.node.removeAttribute('data-aos-duration'); | |||
| el.node.removeAttribute('data-aos-delay'); | |||
| if (options.initClassName) { | |||
| el.node.classList.remove(options.initClassName); | |||
| } | |||
| if (options.animatedClassName) { | |||
| el.node.classList.remove(options.animatedClassName); | |||
| } | |||
| }); | |||
| }; | |||
| /** | |||
| * Check if AOS should be disabled based on provided setting | |||
| */ | |||
| var isDisabled = function isDisabled(optionDisable) { | |||
| return optionDisable === true || optionDisable === 'mobile' && detect.mobile() || optionDisable === 'phone' && detect.phone() || optionDisable === 'tablet' && detect.tablet() || typeof optionDisable === 'function' && optionDisable() === true; | |||
| }; | |||
| /** | |||
| * Initializing AOS | |||
| * - Create options merging defaults with user defined options | |||
| * - Set attributes on <body> as global setting - css relies on it | |||
| * - Attach preparing elements to options.startEvent, | |||
| * window resize and orientation change | |||
| * - Attach function that handle scroll and everything connected to it | |||
| * to window scroll event and fire once document is ready to set initial state | |||
| */ | |||
| var init = function init(settings) { | |||
| options = _extends(options, settings); | |||
| // Create initial array with elements -> to be fullfilled later with prepare() | |||
| $aosElements = elements(); | |||
| /** | |||
| * Disable mutation observing if not supported | |||
| */ | |||
| if (!options.disableMutationObserver && !observer.isSupported()) { | |||
| console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '); | |||
| options.disableMutationObserver = true; | |||
| } | |||
| /** | |||
| * Observe [aos] elements | |||
| * If something is loaded by AJAX | |||
| * it'll refresh plugin automatically | |||
| */ | |||
| if (!options.disableMutationObserver) { | |||
| observer.ready('[data-aos]', refreshHard); | |||
| } | |||
| /** | |||
| * Don't init plugin if option `disable` is set | |||
| * or when browser is not supported | |||
| */ | |||
| if (isDisabled(options.disable) || isBrowserNotSupported()) { | |||
| return disable(); | |||
| } | |||
| /** | |||
| * Set global settings on body, based on options | |||
| * so CSS can use it | |||
| */ | |||
| document.querySelector('body').setAttribute('data-aos-easing', options.easing); | |||
| document.querySelector('body').setAttribute('data-aos-duration', options.duration); | |||
| document.querySelector('body').setAttribute('data-aos-delay', options.delay); | |||
| /** | |||
| * Handle initializing | |||
| */ | |||
| if (['DOMContentLoaded', 'load'].indexOf(options.startEvent) === -1) { | |||
| // Listen to options.startEvent and initialize AOS | |||
| document.addEventListener(options.startEvent, function () { | |||
| refresh(true); | |||
| }); | |||
| } else { | |||
| window.addEventListener('load', function () { | |||
| refresh(true); | |||
| }); | |||
| } | |||
| if (options.startEvent === 'DOMContentLoaded' && ['complete', 'interactive'].indexOf(document.readyState) > -1) { | |||
| // Initialize AOS if default startEvent was already fired | |||
| refresh(true); | |||
| } | |||
| /** | |||
| * Refresh plugin on window resize or orientation change | |||
| */ | |||
| window.addEventListener('resize', debounce(refresh, options.debounceDelay, true)); | |||
| window.addEventListener('orientationchange', debounce(refresh, options.debounceDelay, true)); | |||
| return $aosElements; | |||
| }; | |||
| /** | |||
| * Export Public API | |||
| */ | |||
| var aos = { | |||
| init: init, | |||
| refresh: refresh, | |||
| refreshHard: refreshHard | |||
| }; | |||
| module.exports = aos; | |||
| @ -0,0 +1,610 @@ | |||
| import throttle from 'lodash.throttle'; | |||
| import debounce from 'lodash.debounce'; | |||
| var callback = function callback() {}; | |||
| function containsAOSNode(nodes) { | |||
| var i = void 0, | |||
| currentNode = void 0, | |||
| result = void 0; | |||
| for (i = 0; i < nodes.length; i += 1) { | |||
| currentNode = nodes[i]; | |||
| if (currentNode.dataset && currentNode.dataset.aos) { | |||
| return true; | |||
| } | |||
| result = currentNode.children && containsAOSNode(currentNode.children); | |||
| if (result) { | |||
| return true; | |||
| } | |||
| } | |||
| return false; | |||
| } | |||
| function check(mutations) { | |||
| if (!mutations) return; | |||
| mutations.forEach(function (mutation) { | |||
| var addedNodes = Array.prototype.slice.call(mutation.addedNodes); | |||
| var removedNodes = Array.prototype.slice.call(mutation.removedNodes); | |||
| var allNodes = addedNodes.concat(removedNodes); | |||
| if (containsAOSNode(allNodes)) { | |||
| return callback(); | |||
| } | |||
| }); | |||
| } | |||
| function getMutationObserver() { | |||
| return window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver; | |||
| } | |||
| function isSupported() { | |||
| return !!getMutationObserver(); | |||
| } | |||
| function ready(selector, fn) { | |||
| var doc = window.document; | |||
| var MutationObserver = getMutationObserver(); | |||
| var observer = new MutationObserver(check); | |||
| callback = fn; | |||
| observer.observe(doc.documentElement, { | |||
| childList: true, | |||
| subtree: true, | |||
| removedNodes: true | |||
| }); | |||
| } | |||
| var observer = { isSupported: isSupported, ready: ready }; | |||
| var classCallCheck = function (instance, Constructor) { | |||
| if (!(instance instanceof Constructor)) { | |||
| throw new TypeError("Cannot call a class as a function"); | |||
| } | |||
| }; | |||
| var createClass = function () { | |||
| function defineProperties(target, props) { | |||
| for (var i = 0; i < props.length; i++) { | |||
| var descriptor = props[i]; | |||
| descriptor.enumerable = descriptor.enumerable || false; | |||
| descriptor.configurable = true; | |||
| if ("value" in descriptor) descriptor.writable = true; | |||
| Object.defineProperty(target, descriptor.key, descriptor); | |||
| } | |||
| } | |||
| return function (Constructor, protoProps, staticProps) { | |||
| if (protoProps) defineProperties(Constructor.prototype, protoProps); | |||
| if (staticProps) defineProperties(Constructor, staticProps); | |||
| return Constructor; | |||
| }; | |||
| }(); | |||
| var _extends = Object.assign || function (target) { | |||
| for (var i = 1; i < arguments.length; i++) { | |||
| var source = arguments[i]; | |||
| for (var key in source) { | |||
| if (Object.prototype.hasOwnProperty.call(source, key)) { | |||
| target[key] = source[key]; | |||
| } | |||
| } | |||
| } | |||
| return target; | |||
| }; | |||
| /** | |||
| * Device detector | |||
| */ | |||
| var fullNameRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i; | |||
| var prefixRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; | |||
| var fullNameMobileRe = /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i; | |||
| var prefixMobileRe = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i; | |||
| function ua() { | |||
| return navigator.userAgent || navigator.vendor || window.opera || ''; | |||
| } | |||
| var Detector = function () { | |||
| function Detector() { | |||
| classCallCheck(this, Detector); | |||
| } | |||
| createClass(Detector, [{ | |||
| key: 'phone', | |||
| value: function phone() { | |||
| var a = ua(); | |||
| return !!(fullNameRe.test(a) || prefixRe.test(a.substr(0, 4))); | |||
| } | |||
| }, { | |||
| key: 'mobile', | |||
| value: function mobile() { | |||
| var a = ua(); | |||
| return !!(fullNameMobileRe.test(a) || prefixMobileRe.test(a.substr(0, 4))); | |||
| } | |||
| }, { | |||
| key: 'tablet', | |||
| value: function tablet() { | |||
| return this.mobile() && !this.phone(); | |||
| } | |||
| // http://browserhacks.com/#hack-acea075d0ac6954f275a70023906050c | |||
| }, { | |||
| key: 'ie11', | |||
| value: function ie11() { | |||
| return '-ms-scroll-limit' in document.documentElement.style && '-ms-ime-align' in document.documentElement.style; | |||
| } | |||
| }]); | |||
| return Detector; | |||
| }(); | |||
| var detect = new Detector(); | |||
| /** | |||
| * Adds multiple classes on node | |||
| * @param {DOMNode} node | |||
| * @param {array} classes | |||
| */ | |||
| var addClasses = function addClasses(node, classes) { | |||
| return classes && classes.forEach(function (className) { | |||
| return node.classList.add(className); | |||
| }); | |||
| }; | |||
| /** | |||
| * Removes multiple classes from node | |||
| * @param {DOMNode} node | |||
| * @param {array} classes | |||
| */ | |||
| var removeClasses = function removeClasses(node, classes) { | |||
| return classes && classes.forEach(function (className) { | |||
| return node.classList.remove(className); | |||
| }); | |||
| }; | |||
| var fireEvent = function fireEvent(eventName, data) { | |||
| var customEvent = void 0; | |||
| if (detect.ie11()) { | |||
| customEvent = document.createEvent('CustomEvent'); | |||
| customEvent.initCustomEvent(eventName, true, true, { detail: data }); | |||
| } else { | |||
| customEvent = new CustomEvent(eventName, { | |||
| detail: data | |||
| }); | |||
| } | |||
| return document.dispatchEvent(customEvent); | |||
| }; | |||
| /** | |||
| * Set or remove aos-animate class | |||
| * @param {node} el element | |||
| * @param {int} top scrolled distance | |||
| */ | |||
| var applyClasses = function applyClasses(el, top) { | |||
| var options = el.options, | |||
| position = el.position, | |||
| node = el.node, | |||
| data = el.data; | |||
| var hide = function hide() { | |||
| if (!el.animated) return; | |||
| removeClasses(node, options.animatedClassNames); | |||
| fireEvent('aos:out', node); | |||
| if (el.options.id) { | |||
| fireEvent('aos:in:' + el.options.id, node); | |||
| } | |||
| el.animated = false; | |||
| }; | |||
| var show = function show() { | |||
| if (el.animated) return; | |||
| addClasses(node, options.animatedClassNames); | |||
| fireEvent('aos:in', node); | |||
| if (el.options.id) { | |||
| fireEvent('aos:in:' + el.options.id, node); | |||
| } | |||
| el.animated = true; | |||
| }; | |||
| if (options.mirror && top >= position.out && !options.once) { | |||
| hide(); | |||
| } else if (top >= position.in) { | |||
| show(); | |||
| } else if (el.animated && !options.once) { | |||
| hide(); | |||
| } | |||
| }; | |||
| /** | |||
| * Scroll logic - add or remove 'aos-animate' class on scroll | |||
| * | |||
| * @param {array} $elements array of elements nodes | |||
| * @return {void} | |||
| */ | |||
| var handleScroll = function handleScroll($elements) { | |||
| return $elements.forEach(function (el, i) { | |||
| return applyClasses(el, window.pageYOffset); | |||
| }); | |||
| }; | |||
| /** | |||
| * Get offset of DOM element | |||
| * like there were no transforms applied on it | |||
| * | |||
| * @param {Node} el [DOM element] | |||
| * @return {Object} [top and left offset] | |||
| */ | |||
| var offset = function offset(el) { | |||
| var _x = 0; | |||
| var _y = 0; | |||
| while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) { | |||
| _x += el.offsetLeft - (el.tagName != 'BODY' ? el.scrollLeft : 0); | |||
| _y += el.offsetTop - (el.tagName != 'BODY' ? el.scrollTop : 0); | |||
| el = el.offsetParent; | |||
| } | |||
| return { | |||
| top: _y, | |||
| left: _x | |||
| }; | |||
| }; | |||
| /** | |||
| * Get inline option with a fallback. | |||
| * | |||
| * @param {Node} el [Dom element] | |||
| * @param {String} key [Option key] | |||
| * @param {String} fallback [Default (fallback) value] | |||
| * @return {Mixed} [Option set with inline attributes or fallback value if not set] | |||
| */ | |||
| var getInlineOption = (function (el, key, fallback) { | |||
| var attr = el.getAttribute('data-aos-' + key); | |||
| if (typeof attr !== 'undefined') { | |||
| if (attr === 'true') { | |||
| return true; | |||
| } else if (attr === 'false') { | |||
| return false; | |||
| } | |||
| } | |||
| return attr || fallback; | |||
| }); | |||
| /** | |||
| * Calculate offset | |||
| * basing on element's settings like: | |||
| * - anchor | |||
| * - offset | |||
| * | |||
| * @param {Node} el [Dom element] | |||
| * @return {Integer} [Final offset that will be used to trigger animation in good position] | |||
| */ | |||
| var getPositionIn = function getPositionIn(el, defaultOffset, defaultAnchorPlacement) { | |||
| var windowHeight = window.innerHeight; | |||
| var anchor = getInlineOption(el, 'anchor'); | |||
| var inlineAnchorPlacement = getInlineOption(el, 'anchor-placement'); | |||
| var additionalOffset = Number(getInlineOption(el, 'offset', inlineAnchorPlacement ? 0 : defaultOffset)); | |||
| var anchorPlacement = inlineAnchorPlacement || defaultAnchorPlacement; | |||
| var finalEl = el; | |||
| if (anchor && document.querySelectorAll(anchor)) { | |||
| finalEl = document.querySelectorAll(anchor)[0]; | |||
| } | |||
| var triggerPoint = offset(finalEl).top - windowHeight; | |||
| switch (anchorPlacement) { | |||
| case 'top-bottom': | |||
| // Default offset | |||
| break; | |||
| case 'center-bottom': | |||
| triggerPoint += finalEl.offsetHeight / 2; | |||
| break; | |||
| case 'bottom-bottom': | |||
| triggerPoint += finalEl.offsetHeight; | |||
| break; | |||
| case 'top-center': | |||
| triggerPoint += windowHeight / 2; | |||
| break; | |||
| case 'center-center': | |||
| triggerPoint += windowHeight / 2 + finalEl.offsetHeight / 2; | |||
| break; | |||
| case 'bottom-center': | |||
| triggerPoint += windowHeight / 2 + finalEl.offsetHeight; | |||
| break; | |||
| case 'top-top': | |||
| triggerPoint += windowHeight; | |||
| break; | |||
| case 'bottom-top': | |||
| triggerPoint += windowHeight + finalEl.offsetHeight; | |||
| break; | |||
| case 'center-top': | |||
| triggerPoint += windowHeight + finalEl.offsetHeight / 2; | |||
| break; | |||
| } | |||
| return triggerPoint + additionalOffset; | |||
| }; | |||
| var getPositionOut = function getPositionOut(el, defaultOffset) { | |||
| var windowHeight = window.innerHeight; | |||
| var anchor = getInlineOption(el, 'anchor'); | |||
| var additionalOffset = getInlineOption(el, 'offset', defaultOffset); | |||
| var finalEl = el; | |||
| if (anchor && document.querySelectorAll(anchor)) { | |||
| finalEl = document.querySelectorAll(anchor)[0]; | |||
| } | |||
| var elementOffsetTop = offset(finalEl).top; | |||
| return elementOffsetTop + finalEl.offsetHeight - additionalOffset; | |||
| }; | |||
| /* Clearing variables */ | |||
| var prepare = function prepare($elements, options) { | |||
| $elements.forEach(function (el, i) { | |||
| var mirror = getInlineOption(el.node, 'mirror', options.mirror); | |||
| var once = getInlineOption(el.node, 'once', options.once); | |||
| var id = getInlineOption(el.node, 'id'); | |||
| var customClassNames = options.useClassNames && el.node.getAttribute('data-aos'); | |||
| var animatedClassNames = [options.animatedClassName].concat(customClassNames ? customClassNames.split(' ') : []).filter(function (className) { | |||
| return typeof className === 'string'; | |||
| }); | |||
| if (options.initClassName) { | |||
| el.node.classList.add(options.initClassName); | |||
| } | |||
| el.position = { | |||
| in: getPositionIn(el.node, options.offset, options.anchorPlacement), | |||
| out: mirror && getPositionOut(el.node, options.offset) | |||
| }; | |||
| el.options = { | |||
| once: once, | |||
| mirror: mirror, | |||
| animatedClassNames: animatedClassNames, | |||
| id: id | |||
| }; | |||
| }); | |||
| return $elements; | |||
| }; | |||
| /** | |||
| * Generate initial array with elements as objects | |||
| * This array will be extended later with elements attributes values | |||
| * like 'position' | |||
| */ | |||
| var elements = (function () { | |||
| var elements = document.querySelectorAll('[data-aos]'); | |||
| return Array.prototype.map.call(elements, function (node) { | |||
| return { node: node }; | |||
| }); | |||
| }); | |||
| /** | |||
| * ******************************************************* | |||
| * AOS (Animate on scroll) - wowjs alternative | |||
| * made to animate elements on scroll in both directions | |||
| * ******************************************************* | |||
| */ | |||
| /** | |||
| * Private variables | |||
| */ | |||
| var $aosElements = []; | |||
| var initialized = false; | |||
| /** | |||
| * Default options | |||
| */ | |||
| var options = { | |||
| offset: 120, | |||
| delay: 0, | |||
| easing: 'ease', | |||
| duration: 400, | |||
| disable: false, | |||
| once: false, | |||
| mirror: false, | |||
| anchorPlacement: 'top-bottom', | |||
| startEvent: 'DOMContentLoaded', | |||
| animatedClassName: 'aos-animate', | |||
| initClassName: 'aos-init', | |||
| useClassNames: false, | |||
| disableMutationObserver: false, | |||
| throttleDelay: 99, | |||
| debounceDelay: 50 | |||
| }; | |||
| // Detect not supported browsers (<=IE9) | |||
| // http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 | |||
| var isBrowserNotSupported = function isBrowserNotSupported() { | |||
| return document.all && !window.atob; | |||
| }; | |||
| var initializeScroll = function initializeScroll() { | |||
| // Extend elements objects in $aosElements with their positions | |||
| $aosElements = prepare($aosElements, options); | |||
| // Perform scroll event, to refresh view and show/hide elements | |||
| handleScroll($aosElements); | |||
| /** | |||
| * Handle scroll event to animate elements on scroll | |||
| */ | |||
| window.addEventListener('scroll', throttle(function () { | |||
| handleScroll($aosElements, options.once); | |||
| }, options.throttleDelay)); | |||
| return $aosElements; | |||
| }; | |||
| /** | |||
| * Refresh AOS | |||
| */ | |||
| var refresh = function refresh() { | |||
| var initialize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; | |||
| // Allow refresh only when it was first initialized on startEvent | |||
| if (initialize) initialized = true; | |||
| if (initialized) initializeScroll(); | |||
| }; | |||
| /** | |||
| * Hard refresh | |||
| * create array with new elements and trigger refresh | |||
| */ | |||
| var refreshHard = function refreshHard() { | |||
| $aosElements = elements(); | |||
| if (isDisabled(options.disable) || isBrowserNotSupported()) { | |||
| return disable(); | |||
| } | |||
| refresh(); | |||
| }; | |||
| /** | |||
| * Disable AOS | |||
| * Remove all attributes to reset applied styles | |||
| */ | |||
| var disable = function disable() { | |||
| $aosElements.forEach(function (el, i) { | |||
| el.node.removeAttribute('data-aos'); | |||
| el.node.removeAttribute('data-aos-easing'); | |||
| el.node.removeAttribute('data-aos-duration'); | |||
| el.node.removeAttribute('data-aos-delay'); | |||
| if (options.initClassName) { | |||
| el.node.classList.remove(options.initClassName); | |||
| } | |||
| if (options.animatedClassName) { | |||
| el.node.classList.remove(options.animatedClassName); | |||
| } | |||
| }); | |||
| }; | |||
| /** | |||
| * Check if AOS should be disabled based on provided setting | |||
| */ | |||
| var isDisabled = function isDisabled(optionDisable) { | |||
| return optionDisable === true || optionDisable === 'mobile' && detect.mobile() || optionDisable === 'phone' && detect.phone() || optionDisable === 'tablet' && detect.tablet() || typeof optionDisable === 'function' && optionDisable() === true; | |||
| }; | |||
| /** | |||
| * Initializing AOS | |||
| * - Create options merging defaults with user defined options | |||
| * - Set attributes on <body> as global setting - css relies on it | |||
| * - Attach preparing elements to options.startEvent, | |||
| * window resize and orientation change | |||
| * - Attach function that handle scroll and everything connected to it | |||
| * to window scroll event and fire once document is ready to set initial state | |||
| */ | |||
| var init = function init(settings) { | |||
| options = _extends(options, settings); | |||
| // Create initial array with elements -> to be fullfilled later with prepare() | |||
| $aosElements = elements(); | |||
| /** | |||
| * Disable mutation observing if not supported | |||
| */ | |||
| if (!options.disableMutationObserver && !observer.isSupported()) { | |||
| console.info('\n aos: MutationObserver is not supported on this browser,\n code mutations observing has been disabled.\n You may have to call "refreshHard()" by yourself.\n '); | |||
| options.disableMutationObserver = true; | |||
| } | |||
| /** | |||
| * Observe [aos] elements | |||
| * If something is loaded by AJAX | |||
| * it'll refresh plugin automatically | |||
| */ | |||
| if (!options.disableMutationObserver) { | |||
| observer.ready('[data-aos]', refreshHard); | |||
| } | |||
| /** | |||
| * Don't init plugin if option `disable` is set | |||
| * or when browser is not supported | |||
| */ | |||
| if (isDisabled(options.disable) || isBrowserNotSupported()) { | |||
| return disable(); | |||
| } | |||
| /** | |||
| * Set global settings on body, based on options | |||
| * so CSS can use it | |||
| */ | |||
| document.querySelector('body').setAttribute('data-aos-easing', options.easing); | |||
| document.querySelector('body').setAttribute('data-aos-duration', options.duration); | |||
| document.querySelector('body').setAttribute('data-aos-delay', options.delay); | |||
| /** | |||
| * Handle initializing | |||
| */ | |||
| if (['DOMContentLoaded', 'load'].indexOf(options.startEvent) === -1) { | |||
| // Listen to options.startEvent and initialize AOS | |||
| document.addEventListener(options.startEvent, function () { | |||
| refresh(true); | |||
| }); | |||
| } else { | |||
| window.addEventListener('load', function () { | |||
| refresh(true); | |||
| }); | |||
| } | |||
| if (options.startEvent === 'DOMContentLoaded' && ['complete', 'interactive'].indexOf(document.readyState) > -1) { | |||
| // Initialize AOS if default startEvent was already fired | |||
| refresh(true); | |||
| } | |||
| /** | |||
| * Refresh plugin on window resize or orientation change | |||
| */ | |||
| window.addEventListener('resize', debounce(refresh, options.debounceDelay, true)); | |||
| window.addEventListener('orientationchange', debounce(refresh, options.debounceDelay, true)); | |||
| return $aosElements; | |||
| }; | |||
| /** | |||
| * Export Public API | |||
| */ | |||
| var aos = { | |||
| init: init, | |||
| refresh: refresh, | |||
| refreshHard: refreshHard | |||
| }; | |||
| export default aos; | |||
| @ -0,0 +1,597 @@ | |||
| /*! | |||
| * Bootstrap Reboot v5.3.2 (https://getbootstrap.com/) | |||
| * Copyright 2011-2023 The Bootstrap Authors | |||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) | |||
| */ | |||
| :root, | |||
| [data-bs-theme=light] { | |||
| --bs-blue: #0d6efd; | |||
| --bs-indigo: #6610f2; | |||
| --bs-purple: #6f42c1; | |||
| --bs-pink: #d63384; | |||
| --bs-red: #dc3545; | |||
| --bs-orange: #fd7e14; | |||
| --bs-yellow: #ffc107; | |||
| --bs-green: #198754; | |||
| --bs-teal: #20c997; | |||
| --bs-cyan: #0dcaf0; | |||
| --bs-black: #000; | |||
| --bs-white: #fff; | |||
| --bs-gray: #6c757d; | |||
| --bs-gray-dark: #343a40; | |||
| --bs-gray-100: #f8f9fa; | |||
| --bs-gray-200: #e9ecef; | |||
| --bs-gray-300: #dee2e6; | |||
| --bs-gray-400: #ced4da; | |||
| --bs-gray-500: #adb5bd; | |||
| --bs-gray-600: #6c757d; | |||
| --bs-gray-700: #495057; | |||
| --bs-gray-800: #343a40; | |||
| --bs-gray-900: #212529; | |||
| --bs-primary: #0d6efd; | |||
| --bs-secondary: #6c757d; | |||
| --bs-success: #198754; | |||
| --bs-info: #0dcaf0; | |||
| --bs-warning: #ffc107; | |||
| --bs-danger: #dc3545; | |||
| --bs-light: #f8f9fa; | |||
| --bs-dark: #212529; | |||
| --bs-primary-rgb: 13, 110, 253; | |||
| --bs-secondary-rgb: 108, 117, 125; | |||
| --bs-success-rgb: 25, 135, 84; | |||
| --bs-info-rgb: 13, 202, 240; | |||
| --bs-warning-rgb: 255, 193, 7; | |||
| --bs-danger-rgb: 220, 53, 69; | |||
| --bs-light-rgb: 248, 249, 250; | |||
| --bs-dark-rgb: 33, 37, 41; | |||
| --bs-primary-text-emphasis: #052c65; | |||
| --bs-secondary-text-emphasis: #2b2f32; | |||
| --bs-success-text-emphasis: #0a3622; | |||
| --bs-info-text-emphasis: #055160; | |||
| --bs-warning-text-emphasis: #664d03; | |||
| --bs-danger-text-emphasis: #58151c; | |||
| --bs-light-text-emphasis: #495057; | |||
| --bs-dark-text-emphasis: #495057; | |||
| --bs-primary-bg-subtle: #cfe2ff; | |||
| --bs-secondary-bg-subtle: #e2e3e5; | |||
| --bs-success-bg-subtle: #d1e7dd; | |||
| --bs-info-bg-subtle: #cff4fc; | |||
| --bs-warning-bg-subtle: #fff3cd; | |||
| --bs-danger-bg-subtle: #f8d7da; | |||
| --bs-light-bg-subtle: #fcfcfd; | |||
| --bs-dark-bg-subtle: #ced4da; | |||
| --bs-primary-border-subtle: #9ec5fe; | |||
| --bs-secondary-border-subtle: #c4c8cb; | |||
| --bs-success-border-subtle: #a3cfbb; | |||
| --bs-info-border-subtle: #9eeaf9; | |||
| --bs-warning-border-subtle: #ffe69c; | |||
| --bs-danger-border-subtle: #f1aeb5; | |||
| --bs-light-border-subtle: #e9ecef; | |||
| --bs-dark-border-subtle: #adb5bd; | |||
| --bs-white-rgb: 255, 255, 255; | |||
| --bs-black-rgb: 0, 0, 0; | |||
| --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; | |||
| --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; | |||
| --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); | |||
| --bs-body-font-family: var(--bs-font-sans-serif); | |||
| --bs-body-font-size: 1rem; | |||
| --bs-body-font-weight: 400; | |||
| --bs-body-line-height: 1.5; | |||
| --bs-body-color: #212529; | |||
| --bs-body-color-rgb: 33, 37, 41; | |||
| --bs-body-bg: #fff; | |||
| --bs-body-bg-rgb: 255, 255, 255; | |||
| --bs-emphasis-color: #000; | |||
| --bs-emphasis-color-rgb: 0, 0, 0; | |||
| --bs-secondary-color: rgba(33, 37, 41, 0.75); | |||
| --bs-secondary-color-rgb: 33, 37, 41; | |||
| --bs-secondary-bg: #e9ecef; | |||
| --bs-secondary-bg-rgb: 233, 236, 239; | |||
| --bs-tertiary-color: rgba(33, 37, 41, 0.5); | |||
| --bs-tertiary-color-rgb: 33, 37, 41; | |||
| --bs-tertiary-bg: #f8f9fa; | |||
| --bs-tertiary-bg-rgb: 248, 249, 250; | |||
| --bs-heading-color: inherit; | |||
| --bs-link-color: #0d6efd; | |||
| --bs-link-color-rgb: 13, 110, 253; | |||
| --bs-link-decoration: underline; | |||
| --bs-link-hover-color: #0a58ca; | |||
| --bs-link-hover-color-rgb: 10, 88, 202; | |||
| --bs-code-color: #d63384; | |||
| --bs-highlight-color: #212529; | |||
| --bs-highlight-bg: #fff3cd; | |||
| --bs-border-width: 1px; | |||
| --bs-border-style: solid; | |||
| --bs-border-color: #dee2e6; | |||
| --bs-border-color-translucent: rgba(0, 0, 0, 0.175); | |||
| --bs-border-radius: 0.375rem; | |||
| --bs-border-radius-sm: 0.25rem; | |||
| --bs-border-radius-lg: 0.5rem; | |||
| --bs-border-radius-xl: 1rem; | |||
| --bs-border-radius-xxl: 2rem; | |||
| --bs-border-radius-2xl: var(--bs-border-radius-xxl); | |||
| --bs-border-radius-pill: 50rem; | |||
| --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); | |||
| --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); | |||
| --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); | |||
| --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); | |||
| --bs-focus-ring-width: 0.25rem; | |||
| --bs-focus-ring-opacity: 0.25; | |||
| --bs-focus-ring-color: rgba(13, 110, 253, 0.25); | |||
| --bs-form-valid-color: #198754; | |||
| --bs-form-valid-border-color: #198754; | |||
| --bs-form-invalid-color: #dc3545; | |||
| --bs-form-invalid-border-color: #dc3545; | |||
| } | |||
| [data-bs-theme=dark] { | |||
| color-scheme: dark; | |||
| --bs-body-color: #dee2e6; | |||
| --bs-body-color-rgb: 222, 226, 230; | |||
| --bs-body-bg: #212529; | |||
| --bs-body-bg-rgb: 33, 37, 41; | |||
| --bs-emphasis-color: #fff; | |||
| --bs-emphasis-color-rgb: 255, 255, 255; | |||
| --bs-secondary-color: rgba(222, 226, 230, 0.75); | |||
| --bs-secondary-color-rgb: 222, 226, 230; | |||
| --bs-secondary-bg: #343a40; | |||
| --bs-secondary-bg-rgb: 52, 58, 64; | |||
| --bs-tertiary-color: rgba(222, 226, 230, 0.5); | |||
| --bs-tertiary-color-rgb: 222, 226, 230; | |||
| --bs-tertiary-bg: #2b3035; | |||
| --bs-tertiary-bg-rgb: 43, 48, 53; | |||
| --bs-primary-text-emphasis: #6ea8fe; | |||
| --bs-secondary-text-emphasis: #a7acb1; | |||
| --bs-success-text-emphasis: #75b798; | |||
| --bs-info-text-emphasis: #6edff6; | |||
| --bs-warning-text-emphasis: #ffda6a; | |||
| --bs-danger-text-emphasis: #ea868f; | |||
| --bs-light-text-emphasis: #f8f9fa; | |||
| --bs-dark-text-emphasis: #dee2e6; | |||
| --bs-primary-bg-subtle: #031633; | |||
| --bs-secondary-bg-subtle: #161719; | |||
| --bs-success-bg-subtle: #051b11; | |||
| --bs-info-bg-subtle: #032830; | |||
| --bs-warning-bg-subtle: #332701; | |||
| --bs-danger-bg-subtle: #2c0b0e; | |||
| --bs-light-bg-subtle: #343a40; | |||
| --bs-dark-bg-subtle: #1a1d20; | |||
| --bs-primary-border-subtle: #084298; | |||
| --bs-secondary-border-subtle: #41464b; | |||
| --bs-success-border-subtle: #0f5132; | |||
| --bs-info-border-subtle: #087990; | |||
| --bs-warning-border-subtle: #997404; | |||
| --bs-danger-border-subtle: #842029; | |||
| --bs-light-border-subtle: #495057; | |||
| --bs-dark-border-subtle: #343a40; | |||
| --bs-heading-color: inherit; | |||
| --bs-link-color: #6ea8fe; | |||
| --bs-link-hover-color: #8bb9fe; | |||
| --bs-link-color-rgb: 110, 168, 254; | |||
| --bs-link-hover-color-rgb: 139, 185, 254; | |||
| --bs-code-color: #e685b5; | |||
| --bs-highlight-color: #dee2e6; | |||
| --bs-highlight-bg: #664d03; | |||
| --bs-border-color: #495057; | |||
| --bs-border-color-translucent: rgba(255, 255, 255, 0.15); | |||
| --bs-form-valid-color: #75b798; | |||
| --bs-form-valid-border-color: #75b798; | |||
| --bs-form-invalid-color: #ea868f; | |||
| --bs-form-invalid-border-color: #ea868f; | |||
| } | |||
| *, | |||
| *::before, | |||
| *::after { | |||
| box-sizing: border-box; | |||
| } | |||
| @media (prefers-reduced-motion: no-preference) { | |||
| :root { | |||
| scroll-behavior: smooth; | |||
| } | |||
| } | |||
| body { | |||
| margin: 0; | |||
| font-family: var(--bs-body-font-family); | |||
| font-size: var(--bs-body-font-size); | |||
| font-weight: var(--bs-body-font-weight); | |||
| line-height: var(--bs-body-line-height); | |||
| color: var(--bs-body-color); | |||
| text-align: var(--bs-body-text-align); | |||
| background-color: var(--bs-body-bg); | |||
| -webkit-text-size-adjust: 100%; | |||
| -webkit-tap-highlight-color: rgba(0, 0, 0, 0); | |||
| } | |||
| hr { | |||
| margin: 1rem 0; | |||
| color: inherit; | |||
| border: 0; | |||
| border-top: var(--bs-border-width) solid; | |||
| opacity: 0.25; | |||
| } | |||
| h6, h5, h4, h3, h2, h1 { | |||
| margin-top: 0; | |||
| margin-bottom: 0.5rem; | |||
| font-weight: 500; | |||
| line-height: 1.2; | |||
| color: var(--bs-heading-color); | |||
| } | |||
| h1 { | |||
| font-size: calc(1.375rem + 1.5vw); | |||
| } | |||
| @media (min-width: 1200px) { | |||
| h1 { | |||
| font-size: 2.5rem; | |||
| } | |||
| } | |||
| h2 { | |||
| font-size: calc(1.325rem + 0.9vw); | |||
| } | |||
| @media (min-width: 1200px) { | |||
| h2 { | |||
| font-size: 2rem; | |||
| } | |||
| } | |||
| h3 { | |||
| font-size: calc(1.3rem + 0.6vw); | |||
| } | |||
| @media (min-width: 1200px) { | |||
| h3 { | |||
| font-size: 1.75rem; | |||
| } | |||
| } | |||
| h4 { | |||
| font-size: calc(1.275rem + 0.3vw); | |||
| } | |||
| @media (min-width: 1200px) { | |||
| h4 { | |||
| font-size: 1.5rem; | |||
| } | |||
| } | |||
| h5 { | |||
| font-size: 1.25rem; | |||
| } | |||
| h6 { | |||
| font-size: 1rem; | |||
| } | |||
| p { | |||
| margin-top: 0; | |||
| margin-bottom: 1rem; | |||
| } | |||
| abbr[title] { | |||
| -webkit-text-decoration: underline dotted; | |||
| text-decoration: underline dotted; | |||
| cursor: help; | |||
| -webkit-text-decoration-skip-ink: none; | |||
| text-decoration-skip-ink: none; | |||
| } | |||
| address { | |||
| margin-bottom: 1rem; | |||
| font-style: normal; | |||
| line-height: inherit; | |||
| } | |||
| ol, | |||
| ul { | |||
| padding-left: 2rem; | |||
| } | |||
| 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: 0.875em; | |||
| } | |||
| mark { | |||
| padding: 0.1875em; | |||
| color: var(--bs-highlight-color); | |||
| background-color: var(--bs-highlight-bg); | |||
| } | |||
| sub, | |||
| sup { | |||
| position: relative; | |||
| font-size: 0.75em; | |||
| line-height: 0; | |||
| vertical-align: baseline; | |||
| } | |||
| sub { | |||
| bottom: -0.25em; | |||
| } | |||
| sup { | |||
| top: -0.5em; | |||
| } | |||
| a { | |||
| color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); | |||
| text-decoration: underline; | |||
| } | |||
| a:hover { | |||
| --bs-link-color-rgb: var(--bs-link-hover-color-rgb); | |||
| } | |||
| a:not([href]):not([class]), a:not([href]):not([class]):hover { | |||
| color: inherit; | |||
| text-decoration: none; | |||
| } | |||
| pre, | |||
| code, | |||
| kbd, | |||
| samp { | |||
| font-family: var(--bs-font-monospace); | |||
| font-size: 1em; | |||
| } | |||
| pre { | |||
| display: block; | |||
| margin-top: 0; | |||
| margin-bottom: 1rem; | |||
| overflow: auto; | |||
| font-size: 0.875em; | |||
| } | |||
| pre code { | |||
| font-size: inherit; | |||
| color: inherit; | |||
| word-break: normal; | |||
| } | |||
| code { | |||
| font-size: 0.875em; | |||
| color: var(--bs-code-color); | |||
| word-wrap: break-word; | |||
| } | |||
| a > code { | |||
| color: inherit; | |||
| } | |||
| kbd { | |||
| padding: 0.1875rem 0.375rem; | |||
| font-size: 0.875em; | |||
| color: var(--bs-body-bg); | |||
| background-color: var(--bs-body-color); | |||
| border-radius: 0.25rem; | |||
| } | |||
| kbd kbd { | |||
| padding: 0; | |||
| font-size: 1em; | |||
| } | |||
| figure { | |||
| margin: 0 0 1rem; | |||
| } | |||
| img, | |||
| svg { | |||
| vertical-align: middle; | |||
| } | |||
| table { | |||
| caption-side: bottom; | |||
| border-collapse: collapse; | |||
| } | |||
| caption { | |||
| padding-top: 0.5rem; | |||
| padding-bottom: 0.5rem; | |||
| color: var(--bs-secondary-color); | |||
| text-align: left; | |||
| } | |||
| th { | |||
| text-align: inherit; | |||
| text-align: -webkit-match-parent; | |||
| } | |||
| thead, | |||
| tbody, | |||
| tfoot, | |||
| tr, | |||
| td, | |||
| th { | |||
| border-color: inherit; | |||
| border-style: solid; | |||
| border-width: 0; | |||
| } | |||
| label { | |||
| display: inline-block; | |||
| } | |||
| 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, | |||
| select { | |||
| text-transform: none; | |||
| } | |||
| [role=button] { | |||
| cursor: pointer; | |||
| } | |||
| select { | |||
| word-wrap: normal; | |||
| } | |||
| select:disabled { | |||
| opacity: 1; | |||
| } | |||
| [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { | |||
| display: none !important; | |||
| } | |||
| 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; | |||
| } | |||
| ::-moz-focus-inner { | |||
| padding: 0; | |||
| border-style: none; | |||
| } | |||
| textarea { | |||
| resize: vertical; | |||
| } | |||
| fieldset { | |||
| min-width: 0; | |||
| padding: 0; | |||
| margin: 0; | |||
| border: 0; | |||
| } | |||
| legend { | |||
| float: left; | |||
| width: 100%; | |||
| padding: 0; | |||
| margin-bottom: 0.5rem; | |||
| font-size: calc(1.275rem + 0.3vw); | |||
| line-height: inherit; | |||
| } | |||
| @media (min-width: 1200px) { | |||
| legend { | |||
| font-size: 1.5rem; | |||
| } | |||
| } | |||
| legend + * { | |||
| clear: left; | |||
| } | |||
| ::-webkit-datetime-edit-fields-wrapper, | |||
| ::-webkit-datetime-edit-text, | |||
| ::-webkit-datetime-edit-minute, | |||
| ::-webkit-datetime-edit-hour-field, | |||
| ::-webkit-datetime-edit-day-field, | |||
| ::-webkit-datetime-edit-month-field, | |||
| ::-webkit-datetime-edit-year-field { | |||
| padding: 0; | |||
| } | |||
| ::-webkit-inner-spin-button { | |||
| height: auto; | |||
| } | |||
| [type=search] { | |||
| -webkit-appearance: textfield; | |||
| outline-offset: -2px; | |||
| } | |||
| /* rtl:raw: | |||
| [type="tel"], | |||
| [type="url"], | |||
| [type="email"], | |||
| [type="number"] { | |||
| direction: ltr; | |||
| } | |||
| */ | |||
| ::-webkit-search-decoration { | |||
| -webkit-appearance: none; | |||
| } | |||
| ::-webkit-color-swatch-wrapper { | |||
| padding: 0; | |||
| } | |||
| ::-webkit-file-upload-button { | |||
| font: inherit; | |||
| -webkit-appearance: button; | |||
| } | |||
| ::file-selector-button { | |||
| font: inherit; | |||
| -webkit-appearance: button; | |||
| } | |||
| output { | |||
| display: inline-block; | |||
| } | |||
| iframe { | |||
| border: 0; | |||
| } | |||
| summary { | |||
| display: list-item; | |||
| cursor: pointer; | |||
| } | |||
| progress { | |||
| vertical-align: baseline; | |||
| } | |||
| [hidden] { | |||
| display: none !important; | |||
| } | |||
| /*# sourceMappingURL=bootstrap-reboot.css.map */ | |||
| @ -0,0 +1,594 @@ | |||
| /*! | |||
| * Bootstrap Reboot v5.3.2 (https://getbootstrap.com/) | |||
| * Copyright 2011-2023 The Bootstrap Authors | |||
| * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) | |||
| */ | |||
| :root, | |||
| [data-bs-theme=light] { | |||
| --bs-blue: #0d6efd; | |||
| --bs-indigo: #6610f2; | |||
| --bs-purple: #6f42c1; | |||
| --bs-pink: #d63384; | |||
| --bs-red: #dc3545; | |||
| --bs-orange: #fd7e14; | |||
| --bs-yellow: #ffc107; | |||
| --bs-green: #198754; | |||
| --bs-teal: #20c997; | |||
| --bs-cyan: #0dcaf0; | |||
| --bs-black: #000; | |||
| --bs-white: #fff; | |||
| --bs-gray: #6c757d; | |||
| --bs-gray-dark: #343a40; | |||
| --bs-gray-100: #f8f9fa; | |||
| --bs-gray-200: #e9ecef; | |||
| --bs-gray-300: #dee2e6; | |||
| --bs-gray-400: #ced4da; | |||
| --bs-gray-500: #adb5bd; | |||
| --bs-gray-600: #6c757d; | |||
| --bs-gray-700: #495057; | |||
| --bs-gray-800: #343a40; | |||
| --bs-gray-900: #212529; | |||
| --bs-primary: #0d6efd; | |||
| --bs-secondary: #6c757d; | |||
| --bs-success: #198754; | |||
| --bs-info: #0dcaf0; | |||
| --bs-warning: #ffc107; | |||
| --bs-danger: #dc3545; | |||
| --bs-light: #f8f9fa; | |||
| --bs-dark: #212529; | |||
| --bs-primary-rgb: 13, 110, 253; | |||
| --bs-secondary-rgb: 108, 117, 125; | |||
| --bs-success-rgb: 25, 135, 84; | |||
| --bs-info-rgb: 13, 202, 240; | |||
| --bs-warning-rgb: 255, 193, 7; | |||
| --bs-danger-rgb: 220, 53, 69; | |||
| --bs-light-rgb: 248, 249, 250; | |||
| --bs-dark-rgb: 33, 37, 41; | |||
| --bs-primary-text-emphasis: #052c65; | |||
| --bs-secondary-text-emphasis: #2b2f32; | |||
| --bs-success-text-emphasis: #0a3622; | |||
| --bs-info-text-emphasis: #055160; | |||
| --bs-warning-text-emphasis: #664d03; | |||
| --bs-danger-text-emphasis: #58151c; | |||
| --bs-light-text-emphasis: #495057; | |||
| --bs-dark-text-emphasis: #495057; | |||
| --bs-primary-bg-subtle: #cfe2ff; | |||
| --bs-secondary-bg-subtle: #e2e3e5; | |||
| --bs-success-bg-subtle: #d1e7dd; | |||
| --bs-info-bg-subtle: #cff4fc; | |||
| --bs-warning-bg-subtle: #fff3cd; | |||
| --bs-danger-bg-subtle: #f8d7da; | |||
| --bs-light-bg-subtle: #fcfcfd; | |||
| --bs-dark-bg-subtle: #ced4da; | |||
| --bs-primary-border-subtle: #9ec5fe; | |||
| --bs-secondary-border-subtle: #c4c8cb; | |||
| --bs-success-border-subtle: #a3cfbb; | |||
| --bs-info-border-subtle: #9eeaf9; | |||
| --bs-warning-border-subtle: #ffe69c; | |||
| --bs-danger-border-subtle: #f1aeb5; | |||
| --bs-light-border-subtle: #e9ecef; | |||
| --bs-dark-border-subtle: #adb5bd; | |||
| --bs-white-rgb: 255, 255, 255; | |||
| --bs-black-rgb: 0, 0, 0; | |||
| --bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; | |||
| --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; | |||
| --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); | |||
| --bs-body-font-family: var(--bs-font-sans-serif); | |||
| --bs-body-font-size: 1rem; | |||
| --bs-body-font-weight: 400; | |||
| --bs-body-line-height: 1.5; | |||
| --bs-body-color: #212529; | |||
| --bs-body-color-rgb: 33, 37, 41; | |||
| --bs-body-bg: #fff; | |||
| --bs-body-bg-rgb: 255, 255, 255; | |||
| --bs-emphasis-color: #000; | |||
| --bs-emphasis-color-rgb: 0, 0, 0; | |||
| --bs-secondary-color: rgba(33, 37, 41, 0.75); | |||
| --bs-secondary-color-rgb: 33, 37, 41; | |||
| --bs-secondary-bg: #e9ecef; | |||
| --bs-secondary-bg-rgb: 233, 236, 239; | |||
| --bs-tertiary-color: rgba(33, 37, 41, 0.5); | |||
| --bs-tertiary-color-rgb: 33, 37, 41; | |||
| --bs-tertiary-bg: #f8f9fa; | |||
| --bs-tertiary-bg-rgb: 248, 249, 250; | |||
| --bs-heading-color: inherit; | |||
| --bs-link-color: #0d6efd; | |||
| --bs-link-color-rgb: 13, 110, 253; | |||
| --bs-link-decoration: underline; | |||
| --bs-link-hover-color: #0a58ca; | |||
| --bs-link-hover-color-rgb: 10, 88, 202; | |||
| --bs-code-color: #d63384; | |||
| --bs-highlight-color: #212529; | |||
| --bs-highlight-bg: #fff3cd; | |||
| --bs-border-width: 1px; | |||
| --bs-border-style: solid; | |||
| --bs-border-color: #dee2e6; | |||
| --bs-border-color-translucent: rgba(0, 0, 0, 0.175); | |||
| --bs-border-radius: 0.375rem; | |||
| --bs-border-radius-sm: 0.25rem; | |||
| --bs-border-radius-lg: 0.5rem; | |||
| --bs-border-radius-xl: 1rem; | |||
| --bs-border-radius-xxl: 2rem; | |||
| --bs-border-radius-2xl: var(--bs-border-radius-xxl); | |||
| --bs-border-radius-pill: 50rem; | |||
| --bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); | |||
| --bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); | |||
| --bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175); | |||
| --bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075); | |||
| --bs-focus-ring-width: 0.25rem; | |||
| --bs-focus-ring-opacity: 0.25; | |||
| --bs-focus-ring-color: rgba(13, 110, 253, 0.25); | |||
| --bs-form-valid-color: #198754; | |||
| --bs-form-valid-border-color: #198754; | |||
| --bs-form-invalid-color: #dc3545; | |||
| --bs-form-invalid-border-color: #dc3545; | |||
| } | |||
| [data-bs-theme=dark] { | |||
| color-scheme: dark; | |||
| --bs-body-color: #dee2e6; | |||
| --bs-body-color-rgb: 222, 226, 230; | |||
| --bs-body-bg: #212529; | |||
| --bs-body-bg-rgb: 33, 37, 41; | |||
| --bs-emphasis-color: #fff; | |||
| --bs-emphasis-color-rgb: 255, 255, 255; | |||
| --bs-secondary-color: rgba(222, 226, 230, 0.75); | |||
| --bs-secondary-color-rgb: 222, 226, 230; | |||
| --bs-secondary-bg: #343a40; | |||
| --bs-secondary-bg-rgb: 52, 58, 64; | |||
| --bs-tertiary-color: rgba(222, 226, 230, 0.5); | |||
| --bs-tertiary-color-rgb: 222, 226, 230; | |||
| --bs-tertiary-bg: #2b3035; | |||
| --bs-tertiary-bg-rgb: 43, 48, 53; | |||
| --bs-primary-text-emphasis: #6ea8fe; | |||
| --bs-secondary-text-emphasis: #a7acb1; | |||
| --bs-success-text-emphasis: #75b798; | |||
| --bs-info-text-emphasis: #6edff6; | |||
| --bs-warning-text-emphasis: #ffda6a; | |||
| --bs-danger-text-emphasis: #ea868f; | |||
| --bs-light-text-emphasis: #f8f9fa; | |||
| --bs-dark-text-emphasis: #dee2e6; | |||
| --bs-primary-bg-subtle: #031633; | |||
| --bs-secondary-bg-subtle: #161719; | |||
| --bs-success-bg-subtle: #051b11; | |||
| --bs-info-bg-subtle: #032830; | |||
| --bs-warning-bg-subtle: #332701; | |||
| --bs-danger-bg-subtle: #2c0b0e; | |||
| --bs-light-bg-subtle: #343a40; | |||
| --bs-dark-bg-subtle: #1a1d20; | |||
| --bs-primary-border-subtle: #084298; | |||
| --bs-secondary-border-subtle: #41464b; | |||
| --bs-success-border-subtle: #0f5132; | |||
| --bs-info-border-subtle: #087990; | |||
| --bs-warning-border-subtle: #997404; | |||
| --bs-danger-border-subtle: #842029; | |||
| --bs-light-border-subtle: #495057; | |||
| --bs-dark-border-subtle: #343a40; | |||
| --bs-heading-color: inherit; | |||
| --bs-link-color: #6ea8fe; | |||
| --bs-link-hover-color: #8bb9fe; | |||
| --bs-link-color-rgb: 110, 168, 254; | |||
| --bs-link-hover-color-rgb: 139, 185, 254; | |||
| --bs-code-color: #e685b5; | |||
| --bs-highlight-color: #dee2e6; | |||
| --bs-highlight-bg: #664d03; | |||
| --bs-border-color: #495057; | |||
| --bs-border-color-translucent: rgba(255, 255, 255, 0.15); | |||
| --bs-form-valid-color: #75b798; | |||
| --bs-form-valid-border-color: #75b798; | |||
| --bs-form-invalid-color: #ea868f; | |||
| --bs-form-invalid-border-color: #ea868f; | |||
| } | |||
| *, | |||
| *::before, | |||
| *::after { | |||
| box-sizing: border-box; | |||
| } | |||
| @media (prefers-reduced-motion: no-preference) { | |||
| :root { | |||
| scroll-behavior: smooth; | |||
| } | |||
| } | |||
| body { | |||
| margin: 0; | |||
| font-family: var(--bs-body-font-family); | |||
| font-size: var(--bs-body-font-size); | |||
| font-weight: var(--bs-body-font-weight); | |||
| line-height: var(--bs-body-line-height); | |||
| color: var(--bs-body-color); | |||
| text-align: var(--bs-body-text-align); | |||
| background-color: var(--bs-body-bg); | |||
| -webkit-text-size-adjust: 100%; | |||
| -webkit-tap-highlight-color: rgba(0, 0, 0, 0); | |||
| } | |||
| hr { | |||
| margin: 1rem 0; | |||
| color: inherit; | |||
| border: 0; | |||
| border-top: var(--bs-border-width) solid; | |||
| opacity: 0.25; | |||
| } | |||
| h6, h5, h4, h3, h2, h1 { | |||
| margin-top: 0; | |||
| margin-bottom: 0.5rem; | |||
| font-weight: 500; | |||
| line-height: 1.2; | |||
| color: var(--bs-heading-color); | |||
| } | |||
| h1 { | |||
| font-size: calc(1.375rem + 1.5vw); | |||
| } | |||
| @media (min-width: 1200px) { | |||
| h1 { | |||
| font-size: 2.5rem; | |||
| } | |||
| } | |||
| h2 { | |||
| font-size: calc(1.325rem + 0.9vw); | |||
| } | |||
| @media (min-width: 1200px) { | |||
| h2 { | |||
| font-size: 2rem; | |||
| } | |||
| } | |||
| h3 { | |||
| font-size: calc(1.3rem + 0.6vw); | |||
| } | |||
| @media (min-width: 1200px) { | |||
| h3 { | |||
| font-size: 1.75rem; | |||
| } | |||
| } | |||
| h4 { | |||
| font-size: calc(1.275rem + 0.3vw); | |||
| } | |||
| @media (min-width: 1200px) { | |||
| h4 { | |||
| font-size: 1.5rem; | |||
| } | |||
| } | |||
| h5 { | |||
| font-size: 1.25rem; | |||
| } | |||
| h6 { | |||
| font-size: 1rem; | |||
| } | |||
| p { | |||
| margin-top: 0; | |||
| margin-bottom: 1rem; | |||
| } | |||
| abbr[title] { | |||
| -webkit-text-decoration: underline dotted; | |||
| text-decoration: underline dotted; | |||
| cursor: help; | |||
| -webkit-text-decoration-skip-ink: none; | |||
| text-decoration-skip-ink: none; | |||
| } | |||
| address { | |||
| margin-bottom: 1rem; | |||
| font-style: normal; | |||
| line-height: inherit; | |||
| } | |||
| ol, | |||
| ul { | |||
| padding-right: 2rem; | |||
| } | |||
| 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-right: 0; | |||
| } | |||
| blockquote { | |||
| margin: 0 0 1rem; | |||
| } | |||
| b, | |||
| strong { | |||
| font-weight: bolder; | |||
| } | |||
| small { | |||
| font-size: 0.875em; | |||
| } | |||
| mark { | |||
| padding: 0.1875em; | |||
| color: var(--bs-highlight-color); | |||
| background-color: var(--bs-highlight-bg); | |||
| } | |||
| sub, | |||
| sup { | |||
| position: relative; | |||
| font-size: 0.75em; | |||
| line-height: 0; | |||
| vertical-align: baseline; | |||
| } | |||
| sub { | |||
| bottom: -0.25em; | |||
| } | |||
| sup { | |||
| top: -0.5em; | |||
| } | |||
| a { | |||
| color: rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1)); | |||
| text-decoration: underline; | |||
| } | |||
| a:hover { | |||
| --bs-link-color-rgb: var(--bs-link-hover-color-rgb); | |||
| } | |||
| a:not([href]):not([class]), a:not([href]):not([class]):hover { | |||
| color: inherit; | |||
| text-decoration: none; | |||
| } | |||
| pre, | |||
| code, | |||
| kbd, | |||
| samp { | |||
| font-family: var(--bs-font-monospace); | |||
| font-size: 1em; | |||
| } | |||
| pre { | |||
| display: block; | |||
| margin-top: 0; | |||
| margin-bottom: 1rem; | |||
| overflow: auto; | |||
| font-size: 0.875em; | |||
| } | |||
| pre code { | |||
| font-size: inherit; | |||
| color: inherit; | |||
| word-break: normal; | |||
| } | |||
| code { | |||
| font-size: 0.875em; | |||
| color: var(--bs-code-color); | |||
| word-wrap: break-word; | |||
| } | |||
| a > code { | |||
| color: inherit; | |||
| } | |||
| kbd { | |||
| padding: 0.1875rem 0.375rem; | |||
| font-size: 0.875em; | |||
| color: var(--bs-body-bg); | |||
| background-color: var(--bs-body-color); | |||
| border-radius: 0.25rem; | |||
| } | |||
| kbd kbd { | |||
| padding: 0; | |||
| font-size: 1em; | |||
| } | |||
| figure { | |||
| margin: 0 0 1rem; | |||
| } | |||
| img, | |||
| svg { | |||
| vertical-align: middle; | |||
| } | |||
| table { | |||
| caption-side: bottom; | |||
| border-collapse: collapse; | |||
| } | |||
| caption { | |||
| padding-top: 0.5rem; | |||
| padding-bottom: 0.5rem; | |||
| color: var(--bs-secondary-color); | |||
| text-align: right; | |||
| } | |||
| th { | |||
| text-align: inherit; | |||
| text-align: -webkit-match-parent; | |||
| } | |||
| thead, | |||
| tbody, | |||
| tfoot, | |||
| tr, | |||
| td, | |||
| th { | |||
| border-color: inherit; | |||
| border-style: solid; | |||
| border-width: 0; | |||
| } | |||
| label { | |||
| display: inline-block; | |||
| } | |||
| 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, | |||
| select { | |||
| text-transform: none; | |||
| } | |||
| [role=button] { | |||
| cursor: pointer; | |||
| } | |||
| select { | |||
| word-wrap: normal; | |||
| } | |||
| select:disabled { | |||
| opacity: 1; | |||
| } | |||
| [list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator { | |||
| display: none !important; | |||
| } | |||
| 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; | |||
| } | |||
| ::-moz-focus-inner { | |||
| padding: 0; | |||
| border-style: none; | |||
| } | |||
| textarea { | |||
| resize: vertical; | |||
| } | |||
| fieldset { | |||
| min-width: 0; | |||
| padding: 0; | |||
| margin: 0; | |||
| border: 0; | |||
| } | |||
| legend { | |||
| float: right; | |||
| width: 100%; | |||
| padding: 0; | |||
| margin-bottom: 0.5rem; | |||
| font-size: calc(1.275rem + 0.3vw); | |||
| line-height: inherit; | |||
| } | |||
| @media (min-width: 1200px) { | |||
| legend { | |||
| font-size: 1.5rem; | |||
| } | |||
| } | |||
| legend + * { | |||
| clear: right; | |||
| } | |||
| ::-webkit-datetime-edit-fields-wrapper, | |||
| ::-webkit-datetime-edit-text, | |||
| ::-webkit-datetime-edit-minute, | |||
| ::-webkit-datetime-edit-hour-field, | |||
| ::-webkit-datetime-edit-day-field, | |||
| ::-webkit-datetime-edit-month-field, | |||
| ::-webkit-datetime-edit-year-field { | |||
| padding: 0; | |||
| } | |||
| ::-webkit-inner-spin-button { | |||
| height: auto; | |||
| } | |||
| [type=search] { | |||
| -webkit-appearance: textfield; | |||
| outline-offset: -2px; | |||
| } | |||
| [type="tel"], | |||
| [type="url"], | |||
| [type="email"], | |||
| [type="number"] { | |||
| direction: ltr; | |||
| } | |||
| ::-webkit-search-decoration { | |||
| -webkit-appearance: none; | |||
| } | |||
| ::-webkit-color-swatch-wrapper { | |||
| padding: 0; | |||
| } | |||
| ::-webkit-file-upload-button { | |||
| font: inherit; | |||
| -webkit-appearance: button; | |||
| } | |||
| ::file-selector-button { | |||
| font: inherit; | |||
| -webkit-appearance: button; | |||
| } | |||
| output { | |||
| display: inline-block; | |||
| } | |||
| iframe { | |||
| border: 0; | |||
| } | |||
| summary { | |||
| display: list-item; | |||
| cursor: pointer; | |||
| } | |||
| progress { | |||
| vertical-align: baseline; | |||
| } | |||
| [hidden] { | |||
| display: none !important; | |||
| } | |||
| /*# sourceMappingURL=bootstrap-reboot.rtl.css.map */ | |||
| @ -0,0 +1,386 @@ | |||
| @-webkit-keyframes spin | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: rotate(0); | |||
| transform: rotate(0); | |||
| } | |||
| 100% | |||
| { | |||
| -webkit-transform: rotate(359deg); | |||
| transform: rotate(359deg); | |||
| } | |||
| } | |||
| @keyframes spin | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: rotate(0); | |||
| transform: rotate(0); | |||
| } | |||
| 100% | |||
| { | |||
| -webkit-transform: rotate(359deg); | |||
| transform: rotate(359deg); | |||
| } | |||
| } | |||
| @-webkit-keyframes burst | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: scale(1); | |||
| transform: scale(1); | |||
| opacity: 1; | |||
| } | |||
| 90% | |||
| { | |||
| -webkit-transform: scale(1.5); | |||
| transform: scale(1.5); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @keyframes burst | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: scale(1); | |||
| transform: scale(1); | |||
| opacity: 1; | |||
| } | |||
| 90% | |||
| { | |||
| -webkit-transform: scale(1.5); | |||
| transform: scale(1.5); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @-webkit-keyframes flashing | |||
| { | |||
| 0% | |||
| { | |||
| opacity: 1; | |||
| } | |||
| 45% | |||
| { | |||
| opacity: 0; | |||
| } | |||
| 90% | |||
| { | |||
| opacity: 1; | |||
| } | |||
| } | |||
| @keyframes flashing | |||
| { | |||
| 0% | |||
| { | |||
| opacity: 1; | |||
| } | |||
| 45% | |||
| { | |||
| opacity: 0; | |||
| } | |||
| 90% | |||
| { | |||
| opacity: 1; | |||
| } | |||
| } | |||
| @-webkit-keyframes fade-left | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: translateX(0); | |||
| transform: translateX(0); | |||
| opacity: 1; | |||
| } | |||
| 75% | |||
| { | |||
| -webkit-transform: translateX(-20px); | |||
| transform: translateX(-20px); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @keyframes fade-left | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: translateX(0); | |||
| transform: translateX(0); | |||
| opacity: 1; | |||
| } | |||
| 75% | |||
| { | |||
| -webkit-transform: translateX(-20px); | |||
| transform: translateX(-20px); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @-webkit-keyframes fade-right | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: translateX(0); | |||
| transform: translateX(0); | |||
| opacity: 1; | |||
| } | |||
| 75% | |||
| { | |||
| -webkit-transform: translateX(20px); | |||
| transform: translateX(20px); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @keyframes fade-right | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: translateX(0); | |||
| transform: translateX(0); | |||
| opacity: 1; | |||
| } | |||
| 75% | |||
| { | |||
| -webkit-transform: translateX(20px); | |||
| transform: translateX(20px); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @-webkit-keyframes fade-up | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: translateY(0); | |||
| transform: translateY(0); | |||
| opacity: 1; | |||
| } | |||
| 75% | |||
| { | |||
| -webkit-transform: translateY(-20px); | |||
| transform: translateY(-20px); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @keyframes fade-up | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: translateY(0); | |||
| transform: translateY(0); | |||
| opacity: 1; | |||
| } | |||
| 75% | |||
| { | |||
| -webkit-transform: translateY(-20px); | |||
| transform: translateY(-20px); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @-webkit-keyframes fade-down | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: translateY(0); | |||
| transform: translateY(0); | |||
| opacity: 1; | |||
| } | |||
| 75% | |||
| { | |||
| -webkit-transform: translateY(20px); | |||
| transform: translateY(20px); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @keyframes fade-down | |||
| { | |||
| 0% | |||
| { | |||
| -webkit-transform: translateY(0); | |||
| transform: translateY(0); | |||
| opacity: 1; | |||
| } | |||
| 75% | |||
| { | |||
| -webkit-transform: translateY(20px); | |||
| transform: translateY(20px); | |||
| opacity: 0; | |||
| } | |||
| } | |||
| @-webkit-keyframes tada | |||
| { | |||
| from | |||
| { | |||
| -webkit-transform: scale3d(1, 1, 1); | |||
| transform: scale3d(1, 1, 1); | |||
| } | |||
| 10%, | |||
| 20% | |||
| { | |||
| -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); | |||
| transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); | |||
| } | |||
| 30%, | |||
| 50%, | |||
| 70%, | |||
| 90% | |||
| { | |||
| -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); | |||
| transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); | |||
| } | |||
| 40%, | |||
| 60%, | |||
| 80% | |||
| { | |||
| -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); | |||
| transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); | |||
| } | |||
| to | |||
| { | |||
| -webkit-transform: scale3d(1, 1, 1); | |||
| transform: scale3d(1, 1, 1); | |||
| } | |||
| } | |||
| @keyframes tada | |||
| { | |||
| from | |||
| { | |||
| -webkit-transform: scale3d(1, 1, 1); | |||
| transform: scale3d(1, 1, 1); | |||
| } | |||
| 10%, | |||
| 20% | |||
| { | |||
| -webkit-transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); | |||
| transform: scale3d(.95, .95, .95) rotate3d(0, 0, 1, -10deg); | |||
| } | |||
| 30%, | |||
| 50%, | |||
| 70%, | |||
| 90% | |||
| { | |||
| -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); | |||
| transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); | |||
| } | |||
| 40%, | |||
| 60%, | |||
| 80% | |||
| { | |||
| -webkit-transform: rotate3d(0, 0, 1, -10deg); | |||
| transform: rotate3d(0, 0, 1, -10deg); | |||
| } | |||
| to | |||
| { | |||
| -webkit-transform: scale3d(1, 1, 1); | |||
| transform: scale3d(1, 1, 1); | |||
| } | |||
| } | |||
| .bx-spin | |||
| { | |||
| -webkit-animation: spin 2s linear infinite; | |||
| animation: spin 2s linear infinite; | |||
| } | |||
| .bx-spin-hover:hover | |||
| { | |||
| -webkit-animation: spin 2s linear infinite; | |||
| animation: spin 2s linear infinite; | |||
| } | |||
| .bx-tada | |||
| { | |||
| -webkit-animation: tada 1.5s ease infinite; | |||
| animation: tada 1.5s ease infinite; | |||
| } | |||
| .bx-tada-hover:hover | |||
| { | |||
| -webkit-animation: tada 1.5s ease infinite; | |||
| animation: tada 1.5s ease infinite; | |||
| } | |||
| .bx-flashing | |||
| { | |||
| -webkit-animation: flashing 1.5s infinite linear; | |||
| animation: flashing 1.5s infinite linear; | |||
| } | |||
| .bx-flashing-hover:hover | |||
| { | |||
| -webkit-animation: flashing 1.5s infinite linear; | |||
| animation: flashing 1.5s infinite linear; | |||
| } | |||
| .bx-burst | |||
| { | |||
| -webkit-animation: burst 1.5s infinite linear; | |||
| animation: burst 1.5s infinite linear; | |||
| } | |||
| .bx-burst-hover:hover | |||
| { | |||
| -webkit-animation: burst 1.5s infinite linear; | |||
| animation: burst 1.5s infinite linear; | |||
| } | |||
| .bx-fade-up | |||
| { | |||
| -webkit-animation: fade-up 1.5s infinite linear; | |||
| animation: fade-up 1.5s infinite linear; | |||
| } | |||
| .bx-fade-up-hover:hover | |||
| { | |||
| -webkit-animation: fade-up 1.5s infinite linear; | |||
| animation: fade-up 1.5s infinite linear; | |||
| } | |||
| .bx-fade-down | |||
| { | |||
| -webkit-animation: fade-down 1.5s infinite linear; | |||
| animation: fade-down 1.5s infinite linear; | |||
| } | |||
| .bx-fade-down-hover:hover | |||
| { | |||
| -webkit-animation: fade-down 1.5s infinite linear; | |||
| animation: fade-down 1.5s infinite linear; | |||
| } | |||
| .bx-fade-left | |||
| { | |||
| -webkit-animation: fade-left 1.5s infinite linear; | |||
| animation: fade-left 1.5s infinite linear; | |||
| } | |||
| .bx-fade-left-hover:hover | |||
| { | |||
| -webkit-animation: fade-left 1.5s infinite linear; | |||
| animation: fade-left 1.5s infinite linear; | |||
| } | |||
| .bx-fade-right | |||
| { | |||
| -webkit-animation: fade-right 1.5s infinite linear; | |||
| animation: fade-right 1.5s infinite linear; | |||
| } | |||
| .bx-fade-right-hover:hover | |||
| { | |||
| -webkit-animation: fade-right 1.5s infinite linear; | |||
| animation: fade-right 1.5s infinite linear; | |||
| } | |||
| @ -0,0 +1,30 @@ | |||
| .bx-rotate-90 | |||
| { | |||
| transform: rotate(90deg); | |||
| -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)'; | |||
| } | |||
| .bx-rotate-180 | |||
| { | |||
| transform: rotate(180deg); | |||
| -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)'; | |||
| } | |||
| .bx-rotate-270 | |||
| { | |||
| transform: rotate(270deg); | |||
| -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)'; | |||
| } | |||
| .bx-flip-horizontal | |||
| { | |||
| transform: scaleX(-1); | |||
| -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)'; | |||
| } | |||
| .bx-flip-vertical | |||
| { | |||
| transform: scaleY(-1); | |||
| -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)'; | |||
| } | |||