├── .editorconfig ├── .eslintrc.js ├── .gitignore ├── app.js ├── app ├── animations │ └── Paragraph.js ├── classes │ ├── Animation.js │ ├── Component.js │ ├── Detection.js │ └── GUI.js ├── components │ ├── Canvas │ │ └── index.js │ ├── Page.js │ └── Preloader.js ├── index.js ├── pages │ ├── About │ │ └── index.js │ └── Home │ │ └── index.js ├── service-worker.js ├── shaders │ └── .gitkeep └── utils │ ├── breakpoints.js │ ├── colors.js │ ├── dom.js │ ├── math.js │ ├── polyfill.js │ ├── scroll.js │ ├── sw.js │ └── text.js ├── config.js ├── fonts ├── neue-haas-grotesk-regular.woff └── neue-haas-grotesk-regular.woff2 ├── offline.html ├── onboarding.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── public ├── 4e1af55103b5ecf9d9cca16f35ddc43e.woff2 ├── 4f280627920ea0dba5e1e24d7f6b53af.woff ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── main.css ├── main.js ├── main.js.LICENSE.txt ├── mstile-150x150.png ├── offline.html ├── safari-pinned-tab.svg ├── service-worker.js ├── share.jpg └── site.webmanifest ├── shared ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── browserconfig.xml ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── mstile-150x150.png ├── safari-pinned-tab.svg ├── share.jpg └── site.webmanifest ├── styles ├── base │ ├── fonts.scss │ └── reset.scss ├── components │ ├── canvas.scss │ ├── functionals.scss │ ├── navigation.scss │ └── preloader.scss ├── index.scss ├── pages │ ├── about │ │ └── about.scss │ └── home │ │ └── home.scss ├── shared │ ├── links.scss │ └── sections.scss └── utils │ ├── functions.scss │ ├── mixins.scss │ ├── responsive.scss │ ├── variables.scss │ └── vendors.scss ├── views ├── base.pug ├── pages │ ├── about.pug │ └── home.pug └── partials │ ├── navigation.pug │ ├── noscript.pug │ └── preloader.pug ├── webpack.config.build.js ├── webpack.config.development.js └── webpack.config.js /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | indent_size = 2 7 | indent_style = space 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['standard'], 4 | globals: { 5 | 'IS_DEVELOPMENT': 'readonly', 6 | }, 7 | parserOptions: { 8 | ecmaVersion: 2020, 9 | }, 10 | } 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # System and generated files. 2 | .DS_Store 3 | .sass-cache 4 | 5 | # Directories. 6 | log/ 7 | node_modules/ 8 | bower_components/ 9 | 10 | # Files. 11 | result.xml 12 | npm-debug.log 13 | 14 | # Env. 15 | .env 16 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config() 2 | 3 | const Prismic = require('prismic-javascript') 4 | const PrismicDOM = require('prismic-dom') 5 | const UAParser = require('ua-parser-js') 6 | 7 | const find = require('lodash/find') 8 | 9 | const Onboarding = require('./onboarding') 10 | 11 | const app = require('./config') 12 | const pageSize = 50 13 | 14 | const get = (results, request) => { 15 | const ua = UAParser(request.headers['user-agent']) 16 | 17 | const meta = find(results, { type: 'metadata' }) 18 | 19 | const isAJAX = request.headers['x-requested-with'] === 'XMLHttpRequest' 20 | const isDesktop = ua.device.type === undefined 21 | const isPhone = ua.device.type === 'mobile' 22 | const isTablet = ua.device.type === 'tablet' 23 | 24 | return { 25 | isAJAX, 26 | isDesktop, 27 | isPhone, 28 | isTablet, 29 | meta 30 | } 31 | } 32 | 33 | app.listen(app.get('port'), () => { 34 | Onboarding.trigger() 35 | }) 36 | 37 | app.use((request, response, next) => { 38 | const accessToken = process.env.PRISMIC_ACCESS_TOKEN 39 | const endpoint = process.env.PRISMIC_ENDPOINT 40 | 41 | response.locals.PrismicDOM = PrismicDOM 42 | 43 | Prismic.api(endpoint, { 44 | accessToken, 45 | request 46 | }).then(api => { 47 | request.prismic = { api } 48 | 49 | next() 50 | }).catch(error => { 51 | next(error.message) 52 | }) 53 | }) 54 | 55 | app.get('/', (request, response) => { 56 | request.prismic.api.query('', { pageSize }).then(({ results }) => { 57 | const data = get(results, request) 58 | 59 | response.render('pages/home', { ...data }) 60 | }) 61 | }) 62 | 63 | app.get('/about', (request, response) => { 64 | request.prismic.api.query('', { pageSize }).then(({ results }) => { 65 | const data = get(results, request) 66 | 67 | response.render('pages/about', { ...data }) 68 | }) 69 | }) 70 | 71 | app.use((request, response) => { 72 | response.status(404) 73 | 74 | if (request.accepts('html')) { 75 | return response.redirect('/') 76 | } 77 | 78 | if (request.accepts('json')) { 79 | return response.send({ error: 'Not Found' }) 80 | } 81 | 82 | response.type('txt').send('Not Found') 83 | }) 84 | -------------------------------------------------------------------------------- /app/animations/Paragraph.js: -------------------------------------------------------------------------------- 1 | import each from 'lodash/each' 2 | 3 | import Animation from 'classes/Animation' 4 | 5 | import { calculate, split } from 'utils/text' 6 | 7 | export default class extends Animation { 8 | constructor ({ element }) { 9 | const lines = [] 10 | const paragraphs = element.querySelectorAll('h1, h2, p') 11 | 12 | if (paragraphs.length !== 0) { 13 | each(paragraphs, element => { 14 | split({ element }) 15 | split({ element }) 16 | 17 | lines.push(...element.querySelectorAll('span span')) 18 | }) 19 | } else { 20 | split({ element }) 21 | split({ element }) 22 | 23 | lines.push(...element.querySelectorAll('span span')) 24 | } 25 | 26 | super({ 27 | element, 28 | elements: { 29 | lines 30 | } 31 | }) 32 | 33 | this.onResize() 34 | 35 | if ('IntersectionObserver' in window) { 36 | this.animateOut() 37 | } 38 | } 39 | 40 | animateIn () { 41 | super.animateIn() 42 | 43 | each(this.lines, (line, lineIndex) => { 44 | each(line, word => { 45 | word.style.transition = `transform 1.5s ${0.5 + lineIndex * 0.1}s ease` 46 | word.style[this.transformPrefix] = 'translateY(0)' 47 | }) 48 | }) 49 | } 50 | 51 | animateOut () { 52 | super.animateOut() 53 | 54 | each(this.lines, line => { 55 | each(line, word => { 56 | word.style[this.transformPrefix] = 'translateY(100%)' 57 | }) 58 | }) 59 | } 60 | 61 | onResize () { 62 | this.lines = calculate(this.elements.lines) 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /app/classes/Animation.js: -------------------------------------------------------------------------------- 1 | import Prefix from 'prefix' 2 | 3 | export default class { 4 | constructor ({ element, elements }) { 5 | const { animationDelay, animationTarget } = element.dataset 6 | 7 | this.delay = animationDelay 8 | 9 | this.element = element 10 | this.elements = elements 11 | 12 | this.target = animationTarget ? element.closest(animationTarget) : element 13 | this.transformPrefix = Prefix('transform') 14 | 15 | this.isVisible = false 16 | 17 | if ('IntersectionObserver' in window) { 18 | this.createObserver() 19 | 20 | this.animateOut() 21 | } else { 22 | this.animateIn() 23 | } 24 | } 25 | 26 | createObserver () { 27 | this.observer = new window.IntersectionObserver((entries) => { 28 | entries.forEach(entry => { 29 | if (!this.isVisible && entry.isIntersecting) { 30 | this.animateIn() 31 | } 32 | }) 33 | }).observe(this.target) 34 | } 35 | 36 | animateIn () { 37 | this.isVisible = true 38 | } 39 | 40 | animateOut () { 41 | this.isVisible = false 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/classes/Component.js: -------------------------------------------------------------------------------- 1 | import AutoBind from 'auto-bind' 2 | import EventEmitter from 'events' 3 | 4 | import each from 'lodash/each' 5 | 6 | export default class extends EventEmitter { 7 | constructor ({ classes, element, elements }) { 8 | super() 9 | 10 | AutoBind(this) 11 | 12 | this.classes = classes 13 | 14 | this.element = element instanceof window.HTMLElement ? element : document.querySelector(element) 15 | this.elements = {} 16 | 17 | each(elements, (selector, key) => { 18 | if (selector instanceof window.HTMLElement || selector instanceof window.NodeList) { 19 | this.elements[key] = selector 20 | } else if (Array.isArray(selector)) { 21 | this.elements[key] = selector 22 | } else { 23 | this.elements[key] = this.element.querySelectorAll(selector) 24 | 25 | if (this.elements[key].length === 0) { 26 | this.elements[key] = null 27 | } else if (this.elements[key].length === 1) { 28 | this.elements[key] = this.element.querySelector(selector) 29 | } 30 | } 31 | }) 32 | 33 | this.addEventListeners() 34 | } 35 | 36 | addEventListeners () { 37 | 38 | } 39 | 40 | removeEventListeners () { 41 | 42 | } 43 | 44 | destroy () { 45 | this.removeEventListeners() 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/classes/Detection.js: -------------------------------------------------------------------------------- 1 | class Detection { 2 | isMobile () { 3 | if (!this.isMobileChecked) { 4 | this.isMobileChecked = true 5 | 6 | this.isMobileCheck = document.documentElement.classList.contains('mobile') 7 | } 8 | 9 | return this.isMobileCheck 10 | } 11 | 12 | isWebPSupported () { 13 | if (!this.isWebPChecked) { 14 | this.isWebPChecked = true 15 | 16 | const element = document.createElement('canvas') 17 | 18 | if (element.getContext && element.getContext('2d')) { 19 | this.isWebPCheck = element.toDataURL('image/webp').indexOf('data:image/webp') === 0 20 | } 21 | } 22 | 23 | return this.isWebPCheck 24 | } 25 | } 26 | 27 | const DetectionManager = new Detection() 28 | 29 | export default DetectionManager 30 | -------------------------------------------------------------------------------- /app/classes/GUI.js: -------------------------------------------------------------------------------- 1 | import Dat from 'dat.gui' 2 | 3 | export const GUI = window.location.search.indexOf('gui') > -1 ? new Dat.GUI() : null 4 | 5 | if (GUI) { 6 | GUI.close() 7 | } 8 | -------------------------------------------------------------------------------- /app/components/Canvas/index.js: -------------------------------------------------------------------------------- 1 | import { Box, Camera, Plane, Renderer, Transform } from 'ogl' 2 | 3 | export default class { 4 | constructor ({ url }) { 5 | this.url = url 6 | 7 | this.renderer = new Renderer({ 8 | alpha: true, 9 | dpr: Math.min(window.devicePixelRatio, 2) 10 | }) 11 | 12 | this.gl = this.renderer.gl 13 | this.gl.clearColor(0, 0, 0, 0) 14 | 15 | document.body.appendChild(this.gl.canvas) 16 | 17 | this.createCamera() 18 | this.createScene() 19 | this.createGeometries() 20 | 21 | this.onResize() 22 | } 23 | 24 | createCamera () { 25 | this.camera = new Camera(this.gl) 26 | this.camera.fov = 45 27 | this.camera.position.z = 5 28 | } 29 | 30 | createScene () { 31 | this.scene = new Transform() 32 | } 33 | 34 | createGeometries () { 35 | this.boxGeometry = new Box(this.gl, { 36 | heightSegments: 20, 37 | widthSegments: 1 38 | }) 39 | 40 | this.planeGeometry = new Plane(this.gl, { 41 | heightSegments: 20, 42 | widthSegments: 1 43 | }) 44 | } 45 | 46 | /** 47 | * Change. 48 | */ 49 | onChange (url) { 50 | 51 | } 52 | 53 | /** 54 | * Resize. 55 | */ 56 | onResize () { 57 | this.screen = { 58 | height: window.innerHeight, 59 | width: window.innerWidth 60 | } 61 | 62 | this.renderer.setSize(this.screen.width, this.screen.height) 63 | 64 | this.camera.perspective({ 65 | aspect: this.gl.canvas.width / this.gl.canvas.height 66 | }) 67 | 68 | const fov = this.camera.fov * (Math.PI / 180) 69 | const height = 2 * Math.tan(fov / 2) * this.camera.position.z 70 | const width = height * this.camera.aspect 71 | 72 | this.viewport = { 73 | height, 74 | width 75 | } 76 | 77 | const values = { 78 | screen: this.screen, 79 | viewport: this.viewport 80 | } 81 | } 82 | 83 | onTouchDown (event) { 84 | 85 | } 86 | 87 | onTouchMove (event) { 88 | 89 | } 90 | 91 | onTouchUp (event) { 92 | 93 | } 94 | 95 | /** 96 | * Update. 97 | */ 98 | update (application) { 99 | if (!application) return 100 | 101 | this.renderer.render({ 102 | scene: this.scene, 103 | camera: this.camera 104 | }) 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /app/components/Page.js: -------------------------------------------------------------------------------- 1 | import AutoBind from 'auto-bind' 2 | import EventEmitter from 'events' 3 | import NormalizeWheel from 'normalize-wheel' 4 | import Prefix from 'prefix' 5 | 6 | import Paragraph from 'animations/Paragraph' 7 | 8 | import Detection from 'classes/Detection' 9 | 10 | import each from 'lodash/each' 11 | 12 | import { mapEach } from 'utils/dom' 13 | import { clamp, lerp } from 'utils/math' 14 | 15 | export default class extends EventEmitter { 16 | constructor ({ classes, element, elements, isScrollable = true }) { 17 | super() 18 | 19 | AutoBind(this) 20 | 21 | this.classes = { 22 | ...classes 23 | } 24 | 25 | this.selectors = { 26 | element, 27 | elements: { 28 | animationsParagraphs: '[data-animation="paragraph"]', 29 | 30 | ...elements 31 | } 32 | } 33 | 34 | this.scroll = { 35 | ease: 0.07, 36 | position: 0, 37 | current: 0, 38 | target: 0, 39 | limit: 0 40 | } 41 | 42 | this.isScrollable = isScrollable 43 | 44 | this.transformPrefix = Prefix('transform') 45 | } 46 | 47 | create () { 48 | this.animations = [] 49 | 50 | this.element = document.querySelector(this.selectors.element) 51 | this.elements = {} 52 | 53 | each(this.selectors.elements, (selector, key) => { 54 | if (selector instanceof window.HTMLElement || selector instanceof window.NodeList) { 55 | this.elements[key] = selector 56 | } else if (Array.isArray(selector)) { 57 | this.elements[key] = selector 58 | } else { 59 | this.elements[key] = this.element.querySelectorAll(selector) 60 | 61 | if (this.elements[key].length === 0) { 62 | this.elements[key] = null 63 | } else if (this.elements[key].length === 1) { 64 | this.elements[key] = this.element.querySelector(selector) 65 | } 66 | } 67 | }) 68 | 69 | if (this.isScrollable) { 70 | this.scroll = { 71 | ease: 0.07, 72 | position: 0, 73 | current: 0, 74 | target: 0, 75 | limit: this.elements.wrapper.clientHeight - window.innerHeight 76 | } 77 | } 78 | 79 | this.createAnimations() 80 | } 81 | 82 | /** 83 | * Animations. 84 | */ 85 | createAnimations () { 86 | this.paragraphs = mapEach(this.elements.animationsParagraphs, element => { 87 | return new Paragraph({ element }) 88 | }) 89 | 90 | this.animations.push(...this.paragraphs) 91 | } 92 | 93 | /** 94 | * Animations. 95 | */ 96 | reset () { 97 | this.scroll = { 98 | ease: 0.07, 99 | position: 0, 100 | current: 0, 101 | target: 0, 102 | limit: 0 103 | } 104 | } 105 | 106 | set (value) { 107 | this.scroll.current = this.scroll.target = this.scroll.last = value 108 | 109 | this.transform(this.elements.wrapper, this.scroll.current) 110 | } 111 | 112 | show (url) { 113 | this.isVisible = true 114 | 115 | return Promise.resolve() 116 | } 117 | 118 | hide (url) { 119 | this.isVisible = false 120 | 121 | return Promise.resolve() 122 | } 123 | 124 | transform (element, y) { 125 | element.style[this.transformPrefix] = `translate3d(0, ${-Math.round(y)}px, 0)` 126 | } 127 | 128 | /** 129 | * Events. 130 | */ 131 | onResize () { 132 | if (!this.elements.wrapper) return 133 | 134 | window.requestAnimationFrame(_ => { 135 | this.scroll.limit = this.elements.wrapper.clientHeight - window.innerHeight 136 | 137 | each(this.animations, animation => { 138 | animation.onResize && animation.onResize() 139 | }) 140 | }) 141 | } 142 | 143 | onTouchDown (event) { 144 | if (!Detection.isMobile()) return 145 | 146 | this.isDown = true 147 | 148 | this.scroll.position = this.scroll.current 149 | this.start = event.touches ? event.touches[0].clientY : event.clientY 150 | } 151 | 152 | onTouchMove (event) { 153 | if (!Detection.isMobile() || !this.isDown) return 154 | 155 | const y = event.touches ? event.touches[0].clientY : event.clientY 156 | const distance = (this.start - y) * 3 157 | 158 | this.scroll.target = this.scroll.position + distance 159 | } 160 | 161 | onTouchUp (event) { 162 | if (!Detection.isMobile()) return 163 | 164 | this.isDown = false 165 | } 166 | 167 | onWheel (event) { 168 | const normalized = NormalizeWheel(event) 169 | const speed = normalized.pixelY 170 | 171 | this.scroll.target += speed 172 | 173 | return speed 174 | } 175 | 176 | /** 177 | * Frames. 178 | */ 179 | update () { 180 | this.scroll.target = clamp(0, this.scroll.limit, this.scroll.target) 181 | 182 | this.scroll.current = lerp(this.scroll.current, this.scroll.target, this.scroll.ease) 183 | this.scroll.current = Math.floor(this.scroll.current) 184 | 185 | if (this.scroll.current < 0.1) { 186 | this.scroll.current = 0 187 | } 188 | 189 | if (this.elements.wrapper) { 190 | this.transform(this.elements.wrapper, this.scroll.current) 191 | } 192 | 193 | this.scroll.last = this.scroll.current 194 | } 195 | } 196 | -------------------------------------------------------------------------------- /app/components/Preloader.js: -------------------------------------------------------------------------------- 1 | import GSAP from 'gsap' 2 | import Prefix from 'prefix' 3 | 4 | import Component from 'classes/Component' 5 | 6 | export default class extends Component { 7 | constructor () { 8 | super({ 9 | classes: { 10 | 11 | }, 12 | element: '.preloader', 13 | elements: { 14 | 15 | } 16 | }) 17 | 18 | this.counter = 0 19 | this.index = 0 20 | 21 | this.transformPrefix = Prefix('transform') 22 | 23 | this.onComplete() 24 | } 25 | 26 | onComplete () { 27 | this.timeline = GSAP.timeline() 28 | 29 | this.timeline.to(this.element, { 30 | autoAlpha: 0, 31 | duration: 1 32 | }) 33 | 34 | this.timeline.call(_ => { 35 | this.emit('complete') 36 | }) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/index.js: -------------------------------------------------------------------------------- 1 | import 'utils/polyfill' 2 | import 'utils/scroll' 3 | import 'utils/sw' 4 | 5 | import AutoBind from 'auto-bind' 6 | import FontFaceObserver from 'fontfaceobserver/fontfaceobserver.standalone' 7 | import Stats from 'stats.js' 8 | 9 | import each from 'lodash/each' 10 | 11 | import Detection from 'classes/Detection' 12 | 13 | import About from 'pages/About' 14 | import Home from 'pages/Home' 15 | 16 | import Canvas from 'components/Canvas' 17 | import Preloader from 'components/Preloader' 18 | 19 | class App { 20 | constructor () { 21 | if (IS_DEVELOPMENT && window.location.search.indexOf('fps') > -1) { 22 | this.createStats() 23 | } 24 | 25 | AutoBind(this) 26 | 27 | this.content = document.querySelector('.content') 28 | this.template = this.content.dataset.template 29 | 30 | this.createPreloader() 31 | this.createCanvas() 32 | 33 | this.pages = new Map() 34 | this.pages.set('about', new About()) 35 | this.pages.set('home', new Home()) 36 | 37 | this.page = this.pages.get(this.template) 38 | this.page.create() 39 | this.page.show() 40 | 41 | this.addEventListeners() 42 | this.addLinksEventsListeners() 43 | } 44 | 45 | createPreloader () { 46 | this.preloader = new Preloader() 47 | this.preloader.on('complete', this.onPreloaded) 48 | } 49 | 50 | onPreloaded () { 51 | this.onResize() 52 | 53 | this.createAnalytics() 54 | 55 | this.update() 56 | } 57 | 58 | createAnalytics () { 59 | const googleAnalytics = document.createElement('script') 60 | 61 | googleAnalytics.onload = _ => { 62 | function gtag () { 63 | dataLayer.push(arguments) 64 | } 65 | 66 | window.dataLayer = window.dataLayer || []; 67 | 68 | gtag('js', new Date) 69 | gtag('config', 'GOOGLE_ANALYTICS') 70 | } 71 | 72 | googleAnalytics.src = 'https://www.googletagmanager.com/gtag/js?id=GOOGLE_ANALYTICS' 73 | 74 | document.body.appendChild(googleAnalytics) 75 | } 76 | 77 | createCanvas () { 78 | this.canvas = new Canvas({ 79 | url: this.url 80 | }) 81 | } 82 | 83 | createStats () { 84 | this.stats = new Stats() 85 | 86 | document.body.appendChild(this.stats.dom) 87 | } 88 | 89 | /** 90 | * Methods. 91 | */ 92 | async onChange ({ push = true, url = null }) { 93 | if (this.isLoading || this.url === url) { 94 | return 95 | } 96 | 97 | document.body.style.pointerEvents = 'none' 98 | 99 | this.url = url 100 | 101 | this.isLoading = true 102 | 103 | const request = await window.fetch(url, { 104 | headers: { 105 | 'X-Requested-With': 'XMLHttpRequest' 106 | } 107 | }) 108 | 109 | const response = await request.text() 110 | 111 | this.onRequest({ 112 | push, 113 | response, 114 | url 115 | }) 116 | } 117 | 118 | async onRequest ({ push, response, url }) { 119 | const html = document.createElement('div') 120 | 121 | html.innerHTML = response 122 | 123 | const content = html.querySelector('.content') 124 | 125 | if (this.page) { 126 | await Promise.all([ 127 | this.page.hide(content.dataset.template) 128 | ]) 129 | } 130 | 131 | document.title = html.querySelector('title').textContent 132 | 133 | if (push) { 134 | window.history.pushState({}, document.title, url) 135 | } 136 | 137 | this.content.innerHTML = content.innerHTML 138 | this.content.dataset.template = content.dataset.template 139 | 140 | this.template = content.dataset.template 141 | 142 | this.page = this.pages.get(this.template) 143 | this.page.create() 144 | 145 | this.addLinksEventsListeners() 146 | 147 | await this.page.show() 148 | 149 | document.body.style.pointerEvents = '' 150 | 151 | this.isLoading = false 152 | } 153 | 154 | /** 155 | * Loop. 156 | */ 157 | update () { 158 | if (this.stats) { 159 | this.stats.begin() 160 | } 161 | 162 | if (this.page) { 163 | this.page.update() 164 | } 165 | 166 | if (this.canvas) { 167 | this.canvas.update(this) 168 | } 169 | 170 | if (this.stats) { 171 | this.stats.end() 172 | } 173 | 174 | window.requestAnimationFrame(this.update) 175 | } 176 | 177 | /** 178 | * Events. 179 | */ 180 | onContextMenu (event) { 181 | event.preventDefault() 182 | event.stopPropagation() 183 | 184 | return false 185 | } 186 | 187 | onPopState () { 188 | this.onChange({ 189 | url: window.location.pathname, 190 | push: false 191 | }) 192 | } 193 | 194 | onResize () { 195 | window.requestAnimationFrame(_ => { 196 | if (this.page) { 197 | this.page.onResize() 198 | } 199 | 200 | if (this.canvas) { 201 | this.canvas.onResize() 202 | } 203 | }) 204 | } 205 | 206 | onKeyDown (event) { 207 | if (event.key === 'Tab') { 208 | event.preventDefault() 209 | } 210 | 211 | if (event.key === 'ArrowDown') { 212 | this.page.scroll.target += 100 213 | } else if (event.key === 'ArrowUp') { 214 | this.page.scroll.target -= 100 215 | } 216 | } 217 | 218 | onFocusIn (event) { 219 | event.preventDefault() 220 | } 221 | 222 | onTouchDown (event) { 223 | event.stopPropagation() 224 | 225 | if (!Detection.isMobile() && event.target.tagName === 'A') return 226 | 227 | if (this.canvas && this.canvas.onTouchDown) { 228 | this.canvas.onTouchDown(event) 229 | } 230 | 231 | if (this.page && this.page.onTouchDown) { 232 | this.page.onTouchDown(event) 233 | } 234 | } 235 | 236 | onTouchMove (event) { 237 | event.stopPropagation() 238 | 239 | if (this.canvas && this.canvas.onTouchMove) { 240 | this.canvas.onTouchMove(event) 241 | } 242 | 243 | if (this.page && this.page.onTouchDown) { 244 | this.page.onTouchMove(event) 245 | } 246 | } 247 | 248 | onTouchUp (event) { 249 | event.stopPropagation() 250 | 251 | if (this.canvas && this.canvas.onTouchUp) { 252 | this.canvas.onTouchUp(event) 253 | } 254 | 255 | if (this.page && this.page.onTouchDown) { 256 | this.page.onTouchUp(event) 257 | } 258 | } 259 | 260 | onWheel (event) { 261 | if (this.page && this.page.onWheel) { 262 | this.page.onWheel(event) 263 | } 264 | } 265 | 266 | /** 267 | * Listeners. 268 | */ 269 | addEventListeners () { 270 | window.addEventListener('popstate', this.onPopState, { passive: true }) 271 | window.addEventListener('resize', this.onResize, { passive: true }) 272 | 273 | window.addEventListener('mousedown', this.onTouchDown, { passive: true }) 274 | window.addEventListener('mousemove', this.onTouchMove, { passive: true }) 275 | window.addEventListener('mouseup', this.onTouchUp, { passive: true }) 276 | 277 | window.addEventListener('touchstart', this.onTouchDown, { passive: true }) 278 | window.addEventListener('touchmove', this.onTouchMove, { passive: true }) 279 | window.addEventListener('touchend', this.onTouchUp, { passive: true }) 280 | 281 | window.addEventListener('mousewheel', this.onWheel, { passive: true }) 282 | window.addEventListener('wheel', this.onWheel, { passive: true }) 283 | 284 | window.addEventListener('keydown', this.onKeyDown) 285 | window.addEventListener('focusin', this.onFocusIn) 286 | 287 | if (Detection.isMobile()) { 288 | window.oncontextmenu = this.onContextMenu 289 | } 290 | } 291 | 292 | addLinksEventsListeners () { 293 | const links = document.querySelectorAll('a') 294 | 295 | each(links, link => { 296 | const isLocal = link.href.indexOf(window.location.origin) > -1 297 | const isAnchor = link.href.indexOf('#') > -1 298 | 299 | if (isLocal) { 300 | link.onclick = event => { 301 | event.preventDefault() 302 | 303 | if (!isAnchor) { 304 | this.onChange({ 305 | url: link.href 306 | }) 307 | } 308 | } 309 | } else if (link.href.indexOf('mailto') === -1 && link.href.indexOf('tel') === -1) { 310 | link.rel = 'noopener' 311 | link.target = '_blank' 312 | } 313 | }) 314 | } 315 | } 316 | 317 | const fontNeueHaas = new FontFaceObserver('Neue Haas Grotesk Regular') 318 | 319 | Promise.all([ 320 | fontNeueHaas.load() 321 | ]).then(_ => { 322 | window.APP = new App() 323 | }).catch(_ => { 324 | window.APP = new App() 325 | }) 326 | 327 | console.log('%c Developed by Bizarro - https://bizar.ro/', 'background: #000; color: #fff;') 328 | -------------------------------------------------------------------------------- /app/pages/About/index.js: -------------------------------------------------------------------------------- 1 | import Page from 'components/Page' 2 | 3 | export default class extends Page { 4 | constructor () { 5 | super({ 6 | classes: { 7 | active: 'about--active', 8 | }, 9 | element: '.about', 10 | elements: { 11 | wrapper: '.about__content', 12 | } 13 | }) 14 | } 15 | 16 | /** 17 | * Animations. 18 | */ 19 | async show (url) { 20 | this.element.classList.add(this.classes.active) 21 | 22 | return super.show(url) 23 | } 24 | 25 | async hide (url) { 26 | this.element.classList.remove(this.classes.active) 27 | 28 | return super.hide(url) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/pages/Home/index.js: -------------------------------------------------------------------------------- 1 | import Page from 'components/Page' 2 | 3 | export default class extends Page { 4 | constructor () { 5 | super({ 6 | classes: { 7 | active: 'home--active', 8 | }, 9 | element: '.home', 10 | elements: { 11 | wrapper: '.home__content', 12 | } 13 | }) 14 | } 15 | 16 | /** 17 | * Animations. 18 | */ 19 | async show (url) { 20 | this.element.classList.add(this.classes.active) 21 | 22 | return super.show(url) 23 | } 24 | 25 | async hide (url) { 26 | this.element.classList.remove(this.classes.active) 27 | 28 | return super.hide(url) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/service-worker.js: -------------------------------------------------------------------------------- 1 | const staticCacheName = 'v1::node-template' 2 | 3 | this.addEventListener('install', event => { 4 | this.skipWaiting() 5 | 6 | event.waitUntil( 7 | caches.open(staticCacheName).then(cache => { 8 | return cache.addAll([ 9 | '/offline.html' 10 | ]) 11 | }) 12 | ) 13 | }) 14 | 15 | this.addEventListener('fetch', event => { 16 | event.respondWith( 17 | caches.match(event.request).then(response => { 18 | return response || fetch(event.request) 19 | }).catch(() => { 20 | return caches.match('/offline.html') 21 | }) 22 | ) 23 | }) 24 | -------------------------------------------------------------------------------- /app/shaders/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/app/shaders/.gitkeep -------------------------------------------------------------------------------- /app/utils/breakpoints.js: -------------------------------------------------------------------------------- 1 | export const BREAKPOINT_PHONE = 768 2 | export const BREAKPOINT_TABLET = 1024 3 | export const BREAKPOINT_DESKTOP = 1440 4 | -------------------------------------------------------------------------------- /app/utils/colors.js: -------------------------------------------------------------------------------- 1 | export const COLOR_BLACK = '#000' 2 | export const COLOR_WHITE = '#fff' 3 | -------------------------------------------------------------------------------- /app/utils/dom.js: -------------------------------------------------------------------------------- 1 | import map from 'lodash/map' 2 | 3 | export const getOffset = (element, top = 0) => { 4 | const box = element.getBoundingClientRect() 5 | 6 | return { 7 | bottom: box.bottom, 8 | height: box.height, 9 | left: box.left, 10 | top: box.top + top, 11 | width: box.width 12 | } 13 | } 14 | 15 | export function mapEach (element, callback) { 16 | if (element instanceof window.HTMLElement) { 17 | return [callback(element)] 18 | } 19 | 20 | return map(element, callback) 21 | } 22 | 23 | -------------------------------------------------------------------------------- /app/utils/math.js: -------------------------------------------------------------------------------- 1 | import GSAP from 'gsap' 2 | 3 | export function lerp (p1, p2, t) { 4 | return GSAP.utils.interpolate(p1, p2, t) 5 | } 6 | 7 | export function clamp (min, max, number) { 8 | return GSAP.utils.clamp(min, max, number) 9 | } 10 | 11 | export function random (min, max) { 12 | return GSAP.utils.random(min, max) 13 | } 14 | 15 | export function map (valueToMap, inMin, inMax, outMin, outMax) { 16 | return GSAP.utils.mapRange(inMin, inMax, outMin, outMax, valueToMap) 17 | } 18 | -------------------------------------------------------------------------------- /app/utils/polyfill.js: -------------------------------------------------------------------------------- 1 | import 'nodelist-foreach-polyfill' 2 | -------------------------------------------------------------------------------- /app/utils/scroll.js: -------------------------------------------------------------------------------- 1 | if (window.history.scrollRestoration) { 2 | window.history.scrollRestoration = 'manual' 3 | } 4 | -------------------------------------------------------------------------------- /app/utils/sw.js: -------------------------------------------------------------------------------- 1 | if (!IS_DEVELOPMENT) { 2 | if ('serviceWorker' in navigator) { 3 | navigator.serviceWorker.register('/service-worker.js') 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/utils/text.js: -------------------------------------------------------------------------------- 1 | import each from 'lodash/each' 2 | 3 | export function split ({ element, expression = ' ', append = true }) { 4 | const words = splitText(element.innerHTML.toString().trim(), expression) 5 | 6 | let innerHTML = '' 7 | 8 | each(words, line => { 9 | if (line.indexOf('
') > -1) { 10 | const lines = line.split('
') 11 | 12 | each(lines, (line, index) => { 13 | innerHTML += (index > 0) ? '
' + parseLine(line) : parseLine(line) 14 | }) 15 | } else { 16 | innerHTML += parseLine(line) 17 | } 18 | }) 19 | 20 | element.innerHTML = innerHTML 21 | 22 | const spans = element.querySelectorAll('span') 23 | 24 | if (append) { 25 | each(spans, span => { 26 | const isSingleLetter = span.textContent.length === 1 27 | const isNotEmpty = span.innerHTML.trim() !== '' 28 | const isNotAndCharacter = span.textContent !== '&' 29 | const isNotDashCharacter = span.textContent !== '-' 30 | 31 | if (isSingleLetter && isNotEmpty && isNotAndCharacter && isNotDashCharacter) { 32 | span.innerHTML = `${span.textContent} ` 33 | } 34 | }) 35 | } 36 | 37 | return spans 38 | } 39 | 40 | export function calculate (spans) { 41 | const lines = [] 42 | let words = [] 43 | 44 | let position = spans[0].offsetTop 45 | 46 | each(spans, (span, index) => { 47 | if (span.offsetTop === position) { 48 | words.push(span) 49 | } 50 | 51 | if (span.offsetTop !== position) { 52 | lines.push(words) 53 | 54 | words = [] 55 | words.push(span) 56 | 57 | position = span.offsetTop 58 | } 59 | 60 | if (index + 1 === spans.length) { 61 | lines.push(words) 62 | } 63 | }) 64 | 65 | return lines 66 | } 67 | 68 | function splitText (text, expression) { 69 | const splits = text.split('
') 70 | 71 | let words = [] 72 | 73 | each(splits, (item, index) => { 74 | if (index > 0) { 75 | words.push('
') 76 | } 77 | 78 | words = words.concat(item.split(expression)) 79 | 80 | let isLink = false 81 | let link = '' 82 | 83 | const innerHTML = [] 84 | 85 | each(words, word => { 86 | if (!isLink && (word.includes('') || word.includes('/strong>'))) { 97 | innerHTML.push(link) 98 | 99 | link = '' 100 | } 101 | 102 | if (!isLink && link === '') { 103 | innerHTML.push(word) 104 | } 105 | 106 | if (isLink && (word.includes('/a>') || word.includes('/strong>'))) { 107 | isLink = false 108 | } 109 | }) 110 | 111 | words = innerHTML 112 | }) 113 | 114 | return words 115 | } 116 | 117 | function parseLine (line) { 118 | line = line.trim() 119 | 120 | if (line === '' || line === ' ') { 121 | return line 122 | } else { 123 | return (line === '
') ? '
' : `${line}` + ((line.length > 1) ? ' ' : '') 124 | } 125 | } 126 | -------------------------------------------------------------------------------- /config.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const logger = require('morgan') 3 | const bodyParser = require('body-parser') 4 | const methodOverride = require('method-override') 5 | const errorHandler = require('errorhandler') 6 | const path = require('path') 7 | const staticify = require('staticify')(path.join(__dirname, 'public')) 8 | 9 | module.exports = (() => { 10 | const app = express() 11 | 12 | app.set('port', 3000) 13 | 14 | app.set('views', path.join(__dirname, 'views')) 15 | app.set('view engine', 'pug') 16 | 17 | app.use(logger('dev')) 18 | 19 | app.use(bodyParser.json()) 20 | app.use(bodyParser.urlencoded({ extended: false })) 21 | 22 | app.use(methodOverride()) 23 | 24 | app.use(express.static(path.join(__dirname, 'public'))) 25 | 26 | app.use(errorHandler()) 27 | 28 | app.use(staticify.middleware) 29 | app.locals.getVersionedPath = staticify.getVersionedPath 30 | 31 | return app 32 | })() 33 | -------------------------------------------------------------------------------- /fonts/neue-haas-grotesk-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/fonts/neue-haas-grotesk-regular.woff -------------------------------------------------------------------------------- /fonts/neue-haas-grotesk-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/fonts/neue-haas-grotesk-regular.woff2 -------------------------------------------------------------------------------- /offline.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Node Template 6 | 32 | 33 | 34 |
35 |

36 | This experience is only available with internet connection. 37 |

38 |
39 | 40 | 41 | -------------------------------------------------------------------------------- /onboarding.js: -------------------------------------------------------------------------------- 1 | const request = require('request') 2 | 3 | function trigger () { 4 | request.post(`${process.env.PRISMIC_ENDPOINT}/app/settings/onboarding/run`, { 5 | form: { 6 | language: 'node', 7 | framework: 'express' 8 | } 9 | }) 10 | } 11 | 12 | module.exports = { 13 | trigger 14 | } 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node-template", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "start": "concurrently --kill-others \"npm run backend:development\" \"npm run frontend:development\"", 6 | "backend:build": "node app.js", 7 | "backend:development": "nodemon app.js", 8 | "frontend:build": "webpack --progress --config webpack.config.build.js", 9 | "frontend:development": "cross-env NODE_ENV=dev webpack serve --progress --config webpack.config.development.js", 10 | "lint": "eslint *.js", 11 | "test": "node -c *.js" 12 | }, 13 | "dependencies": { 14 | "body-parser": "^1.19.0", 15 | "errorhandler": "^1.5.1", 16 | "express": "^4.17.1", 17 | "lodash": "^4.17.20", 18 | "method-override": "^3.0.0", 19 | "morgan": "^1.10.0", 20 | "nodemon": "^2.0.7", 21 | "prismic-dom": "^2.2.4", 22 | "prismic-javascript": "^3.0.2", 23 | "pug": "^3.0.0", 24 | "request": "^2.88.2", 25 | "staticify": "^5.0.0", 26 | "ua-parser-js": "^0.7.23" 27 | }, 28 | "devDependencies": { 29 | "@babel/core": "^7.12.10", 30 | "auto-bind": "^4.0.0", 31 | "autoprefix": "^1.0.1", 32 | "autoprefixer": "^10.2.4", 33 | "babel-eslint": "^10.1.0", 34 | "babel-loader": "^8.2.2", 35 | "browser-sync": "^2.26.14", 36 | "browser-sync-webpack-plugin": "^2.3.0", 37 | "clean-webpack-plugin": "^3.0.0", 38 | "cname-webpack-plugin": "^3.0.0", 39 | "concurrently": "^5.3.0", 40 | "copy-webpack-plugin": "^7.0.0", 41 | "cross-env": "^7.0.3", 42 | "css-loader": "^5.0.1", 43 | "cssnano": "^4.1.10", 44 | "dat.gui": "^0.7.7", 45 | "dotenv": "^8.2.0", 46 | "eslint": "^7.18.0", 47 | "eslint-config-standard": "^16.0.2", 48 | "eslint-loader": "^4.0.2", 49 | "eslint-plugin-flowtype": "^5.2.0", 50 | "eslint-plugin-import": "^2.22.1", 51 | "eslint-plugin-node": "^11.1.0", 52 | "eslint-plugin-promise": "^4.2.1", 53 | "eslint-plugin-standard": "^5.0.0", 54 | "file-loader": "^6.2.0", 55 | "fontfaceobserver": "^2.1.0", 56 | "glslify-loader": "^2.0.0", 57 | "gsap": "^3.6.0", 58 | "html-webpack-plugin": "^4.5.1", 59 | "include-media": "^1.4.9", 60 | "mini-css-extract-plugin": "^1.3.5", 61 | "node-sass": "^5.0.0", 62 | "nodelist-foreach-polyfill": "^1.2.0", 63 | "normalize-wheel": "^1.0.1", 64 | "ogl": "0.0.61", 65 | "postcss": "^8.2.4", 66 | "postcss-loader": "^4.1.0", 67 | "prefix": "^1.0.0", 68 | "pug-loader": "^2.4.0", 69 | "raw-loader": "^4.0.2", 70 | "sass-loader": "^10.1.1", 71 | "stats.js": "^0.17.0", 72 | "webpack": "^5.19.0", 73 | "webpack-cli": "^4.4.0", 74 | "webpack-dev-server": "^3.11.2", 75 | "webpack-merge": "^5.7.3", 76 | "whatwg-fetch": "^3.5.0" 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require('autoprefixer'), 4 | require('cssnano')({ 5 | preset: 'default' 6 | }) 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /public/4e1af55103b5ecf9d9cca16f35ddc43e.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/4e1af55103b5ecf9d9cca16f35ddc43e.woff2 -------------------------------------------------------------------------------- /public/4f280627920ea0dba5e1e24d7f6b53af.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/4f280627920ea0dba5e1e24d7f6b53af.woff -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #151c13 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/favicon.ico -------------------------------------------------------------------------------- /public/main.css: -------------------------------------------------------------------------------- 1 | .navigation,.preloader{height:100%;left:0;-o-object-fit:cover;object-fit:cover;position:absolute;top:0;width:100%}.dg.ac{z-index:99999!important}@font-face{font-family:Neue Haas Grotesk Regular;src:url(4e1af55103b5ecf9d9cca16f35ddc43e.woff2) format("woff2"),url(4f280627920ea0dba5e1e24d7f6b53af.woff) format("woff");font-weight:400;font-style:normal;font-display:swap}*,:after,:before{box-sizing:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none;-webkit-touch-callout:none}*{margin:0;padding:0}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font-size:100%;font:inherit;vertical-align:baseline}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}html{background:#000;box-sizing:border-box;color:#fff;font-size:.52083vw;height:100%;left:0;overflow:hidden;-ms-scroll-chaining:none;overscroll-behavior:none;position:fixed;-moz-osx-font-smoothing:grayscale;top:0;-webkit-font-smoothing:antialiased;width:100%}@media (max-width:768px){html{font-size:2.66667vw}}body{font:1.4rem/1.5 Neue Haas Grotesk Regular,sans-serif;height:100%;left:0;opacity:1;overflow:hidden;position:fixed;top:0;width:100%}:focus{outline:none}::-moz-focus-inner{border:0}a{text-decoration:none}a,button{color:inherit;outline:none;pointer-events:auto}button{background:none;border:none;border-radius:none;font:inherit}img{max-width:100%;vertical-align:middle}input,textarea{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:none;border-radius:0;outline:none;pointer-events:auto}ol,ul{list-style:none}.content{height:100%;left:0;overflow:auto;position:absolute;top:0;width:100%}[data-animation=paragraph] span{display:inline-block;overflow:hidden;vertical-align:top}.about,.home{height:100%;left:0;opacity:0;overflow:hidden;pointer-events:none;position:absolute;top:0;transition:opacity 1s ease,visibility 1s ease;visibility:hidden;width:100%;z-index:2}.about--active,.home--active{opacity:1;pointer-events:auto;visibility:visible}.about__content,.home__content{left:0;overflow:hidden;position:absolute;top:0;width:100%;will-change:transform}canvas{display:block;height:100vh;pointer-events:none;z-index:1}canvas,noscript{left:0;position:fixed;top:0;width:100%}noscript{align-items:center;background:#000;color:#fff;cursor:default;display:flex;font-size:1.6rem;line-height:1.1;height:100%;justify-content:center;padding:4rem;text-align:center;z-index:5}.navigation{pointer-events:none;z-index:3}.navigation__link{pointer-events:auto}.preloader{background:#fff;overflow:hidden;position:fixed;transform-origin:0 0;z-index:4}.preloader--loaded{transform:scaleY(0)}.about,.home{font-size:100rem;word-break:break-all} 2 | -------------------------------------------------------------------------------- /public/main.js: -------------------------------------------------------------------------------- 1 | /*! For license information please see main.js.LICENSE.txt */ 2 | (()=>{var t={4065:()=>{window.history.scrollRestoration&&(window.history.scrollRestoration="manual")},6955:()=>{"serviceWorker"in navigator&&navigator.serviceWorker.register("/service-worker.js")},1663:t=>{"use strict";t.exports=(t,{include:e,exclude:r}={})=>{const n=t=>{const n=e=>"string"==typeof e?t===e:e.test(t);return e?e.some(n):!r||!r.some(n)};for(const[e,r]of(t=>{const e=new Set;do{for(const r of Reflect.ownKeys(t))e.add([t,r])}while((t=Reflect.getPrototypeOf(t))&&t!==Object.prototype);return e})(t.constructor.prototype)){if("constructor"===r||!n(r))continue;const i=Reflect.getOwnPropertyDescriptor(e,r);i&&"function"==typeof i.value&&(t[r]=t[r].bind(t))}return t}},1590:t=>{"use strict";var e,r="object"==typeof Reflect?Reflect:null,n=r&&"function"==typeof r.apply?r.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};e=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var i=Number.isNaN||function(t){return t!=t};function s(){s.init.call(this)}t.exports=s,t.exports.once=function(t,e){return new Promise((function(r,n){function i(){void 0!==s&&t.removeListener("error",s),r([].slice.call(arguments))}var s;"error"!==e&&(s=function(r){t.removeListener(e,i),n(r)},t.once("error",s)),t.once(e,i)}))},s.EventEmitter=s,s.prototype._events=void 0,s.prototype._eventsCount=0,s.prototype._maxListeners=void 0;var a=10;function o(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function h(t){return void 0===t._maxListeners?s.defaultMaxListeners:t._maxListeners}function u(t,e,r,n){var i,s,a,u;if(o(r),void 0===(s=t._events)?(s=t._events=Object.create(null),t._eventsCount=0):(void 0!==s.newListener&&(t.emit("newListener",e,r.listener?r.listener:r),s=t._events),a=s[e]),void 0===a)a=s[e]=r,++t._eventsCount;else if("function"==typeof a?a=s[e]=n?[r,a]:[a,r]:n?a.unshift(r):a.push(r),(i=h(t))>0&&a.length>i&&!a.warned){a.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=a.length,u=l,console&&console.warn&&console.warn(u)}return t}function l(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function c(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i=l.bind(n);return i.listener=r,n.wrapFn=i,i}function p(t,e,r){var n=t._events;if(void 0===n)return[];var i=n[e];return void 0===i?[]:"function"==typeof i?r?[i.listener||i]:[i]:r?function(t){for(var e=new Array(t.length),r=0;r0&&(a=e[0]),a instanceof Error)throw a;var o=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw o.context=a,o}var h=s[t];if(void 0===h)return!1;if("function"==typeof h)n(h,this,e);else{var u=h.length,l=d(h,u);for(r=0;r=0;s--)if(r[s]===e||r[s].listener===e){a=r[s].listener,i=s;break}if(i<0)return this;0===i?r.shift():function(t,e){for(;e+1=0;n--)this.removeListener(t,e[n]);return this},s.prototype.listeners=function(t){return p(this,t,!0)},s.prototype.rawListeners=function(t){return p(this,t,!1)},s.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):f.call(t,e)},s.prototype.listenerCount=f,s.prototype.eventNames=function(){return this._eventsCount>0?e(this._events):[]}},7778:t=>{!function(){function e(t,e){document.addEventListener?t.addEventListener("scroll",e,!1):t.attachEvent("scroll",e)}function r(t){this.a=document.createElement("div"),this.a.setAttribute("aria-hidden","true"),this.a.appendChild(document.createTextNode(t)),this.b=document.createElement("span"),this.c=document.createElement("span"),this.h=document.createElement("span"),this.f=document.createElement("span"),this.g=-1,this.b.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.c.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.f.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;",this.h.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;",this.b.appendChild(this.h),this.c.appendChild(this.f),this.a.appendChild(this.b),this.a.appendChild(this.c)}function n(t,e){t.a.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+e+";"}function i(t){var e=t.a.offsetWidth,r=e+100;return t.f.style.width=r+"px",t.c.scrollLeft=r,t.b.scrollLeft=t.b.scrollWidth+100,t.g!==e&&(t.g=e,!0)}function s(t,r){function n(){var t=s;i(t)&&t.a.parentNode&&r(t.g)}var s=t;e(t.b,n),e(t.c,n),i(t)}function a(t,e){var r=e||{};this.family=t,this.style=r.style||"normal",this.weight=r.weight||"normal",this.stretch=r.stretch||"normal"}var o=null,h=null,u=null,l=null;function c(){return null===l&&(l=!!document.fonts),l}function p(){if(null===u){var t=document.createElement("div");try{t.style.font="condensed 100px sans-serif"}catch(t){}u=""!==t.style.font}return u}function f(t,e){return[t.style,t.weight,p()?t.stretch:"","100px",e].join(" ")}a.prototype.load=function(t,e){var i=this,a=t||"BESbswy",u=0,l=e||3e3,p=(new Date).getTime();return new Promise((function(t,e){if(c()&&!function(){if(null===h)if(c()&&/Apple/.test(window.navigator.vendor)){var t=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);h=!!t&&603>parseInt(t[1],10)}else h=!1;return h}()){var d=new Promise((function(t,e){!function r(){(new Date).getTime()-p>=l?e(Error(l+"ms timeout exceeded")):document.fonts.load(f(i,'"'+i.family+'"'),a).then((function(e){1<=e.length?t():setTimeout(r,25)}),e)}()})),m=new Promise((function(t,e){u=setTimeout((function(){e(Error(l+"ms timeout exceeded"))}),l)}));Promise.race([m,d]).then((function(){clearTimeout(u),t(i)}),e)}else!function(t){document.body?t():document.addEventListener?document.addEventListener("DOMContentLoaded",(function e(){document.removeEventListener("DOMContentLoaded",e),t()})):document.attachEvent("onreadystatechange",(function e(){"interactive"!=document.readyState&&"complete"!=document.readyState||(document.detachEvent("onreadystatechange",e),t())}))}((function(){function h(){var e;(e=-1!=g&&-1!=_||-1!=g&&-1!=v||-1!=_&&-1!=v)&&((e=g!=_&&g!=v&&_!=v)||(null===o&&(e=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),o=!!e&&(536>parseInt(e[1],10)||536===parseInt(e[1],10)&&11>=parseInt(e[2],10))),e=o&&(g==y&&_==y&&v==y||g==x&&_==x&&v==x||g==w&&_==w&&v==w)),e=!e),e&&(b.parentNode&&b.parentNode.removeChild(b),clearTimeout(u),t(i))}var c=new r(a),d=new r(a),m=new r(a),g=-1,_=-1,v=-1,y=-1,x=-1,w=-1,b=document.createElement("div");b.dir="ltr",n(c,f(i,"sans-serif")),n(d,f(i,"serif")),n(m,f(i,"monospace")),b.appendChild(c.a),b.appendChild(d.a),b.appendChild(m.a),document.body.appendChild(b),y=c.a.offsetWidth,x=d.a.offsetWidth,w=m.a.offsetWidth,function t(){if((new Date).getTime()-p>=l)b.parentNode&&b.parentNode.removeChild(b),e(Error(l+"ms timeout exceeded"));else{var r=document.hidden;!0!==r&&void 0!==r||(g=c.a.offsetWidth,_=d.a.offsetWidth,v=m.a.offsetWidth,h()),u=setTimeout(t,50)}}(),s(c,(function(t){g=t,h()})),n(c,f(i,'"'+i.family+'",sans-serif')),s(d,(function(t){_=t,h()})),n(d,f(i,'"'+i.family+'",serif')),s(m,(function(t){v=t,h()})),n(m,f(i,'"'+i.family+'",monospace'))}))}))},t.exports=a}()},9940:(t,e,r)=>{var n=r(3203)(r(4362),"DataView");t.exports=n},1979:(t,e,r)=>{var n=r(9129),i=r(7644),s=r(3486),a=r(4786),o=r(6444);function h(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{var n=r(3708),i=r(6993),s=r(286),a=r(1678),o=r(9743);function h(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{var n=r(3203)(r(4362),"Map");t.exports=n},8423:(t,e,r)=>{var n=r(6977),i=r(7474),s=r(727),a=r(3653),o=r(6140);function h(t){var e=-1,r=null==t?0:t.length;for(this.clear();++e{var n=r(3203)(r(4362),"Promise");t.exports=n},689:(t,e,r)=>{var n=r(3203)(r(4362),"Set");t.exports=n},9832:(t,e,r)=>{var n=r(8423),i=r(9911),s=r(7447);function a(t){var e=-1,r=null==t?0:t.length;for(this.__data__=new n;++e{var n=r(2768),i=r(7553),s=r(6038),a=r(2397),o=r(2421),h=r(2936);function u(t){var e=this.__data__=new n(t);this.size=e.size}u.prototype.clear=i,u.prototype.delete=s,u.prototype.get=a,u.prototype.has=o,u.prototype.set=h,t.exports=u},2773:(t,e,r)=>{var n=r(4362).Symbol;t.exports=n},2496:(t,e,r)=>{var n=r(4362).Uint8Array;t.exports=n},5284:(t,e,r)=>{var n=r(3203)(r(4362),"WeakMap");t.exports=n},4111:t=>{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=0,s=[];++r{var n=r(5094),i=r(9246),s=r(3670),a=r(2343),o=r(4782),h=r(1589),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var r=s(t),l=!r&&i(t),c=!r&&!l&&a(t),p=!r&&!l&&!c&&h(t),f=r||l||c||p,d=f?n(t.length,String):[],m=d.length;for(var g in t)!e&&!u.call(t,g)||f&&("length"==g||c&&("offset"==g||"parent"==g)||p&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||o(g,m))||d.push(g);return d}},9258:t=>{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length,i=Array(n);++r{t.exports=function(t,e){for(var r=-1,n=e.length,i=t.length;++r{t.exports=function(t,e){for(var r=-1,n=null==t?0:t.length;++r{var n=r(7950);t.exports=function(t,e){for(var r=t.length;r--;)if(n(t[r][0],e))return r;return-1}},5806:(t,e,r)=>{var n=r(5645),i=r(3978)(n);t.exports=i},7079:(t,e,r)=>{var n=r(7924)();t.exports=n},5645:(t,e,r)=>{var n=r(7079),i=r(3225);t.exports=function(t,e){return t&&n(t,e,i)}},5974:(t,e,r)=>{var n=r(6883),i=r(7102);t.exports=function(t,e){for(var r=0,s=(e=n(e,t)).length;null!=t&&r{var n=r(8421),i=r(3670);t.exports=function(t,e,r){var s=e(t);return i(t)?s:n(s,r(t))}},1185:(t,e,r)=>{var n=r(2773),i=r(3888),s=r(2299),a=n?n.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":a&&a in Object(t)?i(t):s(t)}},5529:t=>{t.exports=function(t,e){return null!=t&&e in Object(t)}},1075:(t,e,r)=>{var n=r(1185),i=r(4939);t.exports=function(t){return i(t)&&"[object Arguments]"==n(t)}},9856:(t,e,r)=>{var n=r(1829),i=r(4939);t.exports=function t(e,r,s,a,o){return e===r||(null==e||null==r||!i(e)&&!i(r)?e!=e&&r!=r:n(e,r,s,a,t,o))}},1829:(t,e,r)=>{var n=r(959),i=r(3426),s=r(1402),a=r(4572),o=r(2417),h=r(3670),u=r(2343),l=r(1589),c="[object Arguments]",p="[object Array]",f="[object Object]",d=Object.prototype.hasOwnProperty;t.exports=function(t,e,r,m,g,_){var v=h(t),y=h(e),x=v?p:o(t),w=y?p:o(e),b=(x=x==c?f:x)==f,M=(w=w==c?f:w)==f,T=x==w;if(T&&u(t)){if(!u(e))return!1;v=!0,b=!1}if(T&&!b)return _||(_=new n),v||l(t)?i(t,e,r,m,g,_):s(t,e,x,r,m,g,_);if(!(1&r)){var A=b&&d.call(t,"__wrapped__"),O=M&&d.call(e,"__wrapped__");if(A||O){var E=A?t.value():t,C=O?e.value():e;return _||(_=new n),g(E,C,r,m,_)}}return!!T&&(_||(_=new n),a(t,e,r,m,g,_))}},4656:(t,e,r)=>{var n=r(959),i=r(9856);t.exports=function(t,e,r,s){var a=r.length,o=a,h=!s;if(null==t)return!o;for(t=Object(t);a--;){var u=r[a];if(h&&u[2]?u[1]!==t[u[0]]:!(u[0]in t))return!1}for(;++a{var n=r(3626),i=r(9249),s=r(71),a=r(1214),o=/^\[object .+?Constructor\]$/,h=Function.prototype,u=Object.prototype,l=h.toString,c=u.hasOwnProperty,p=RegExp("^"+l.call(c).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!s(t)||i(t))&&(n(t)?p:o).test(a(t))}},3638:(t,e,r)=>{var n=r(1185),i=r(7100),s=r(4939),a={};a["[object Float32Array]"]=a["[object Float64Array]"]=a["[object Int8Array]"]=a["[object Int16Array]"]=a["[object Int32Array]"]=a["[object Uint8Array]"]=a["[object Uint8ClampedArray]"]=a["[object Uint16Array]"]=a["[object Uint32Array]"]=!0,a["[object Arguments]"]=a["[object Array]"]=a["[object ArrayBuffer]"]=a["[object Boolean]"]=a["[object DataView]"]=a["[object Date]"]=a["[object Error]"]=a["[object Function]"]=a["[object Map]"]=a["[object Number]"]=a["[object Object]"]=a["[object RegExp]"]=a["[object Set]"]=a["[object String]"]=a["[object WeakMap]"]=!1,t.exports=function(t){return s(t)&&i(t.length)&&!!a[n(t)]}},9047:(t,e,r)=>{var n=r(8334),i=r(5941),s=r(1559),a=r(3670),o=r(8886);t.exports=function(t){return"function"==typeof t?t:null==t?s:"object"==typeof t?a(t)?i(t[0],t[1]):n(t):o(t)}},7521:(t,e,r)=>{var n=r(2803),i=r(3865),s=Object.prototype.hasOwnProperty;t.exports=function(t){if(!n(t))return i(t);var e=[];for(var r in Object(t))s.call(t,r)&&"constructor"!=r&&e.push(r);return e}},5901:(t,e,r)=>{var n=r(5806),i=r(6175);t.exports=function(t,e){var r=-1,s=i(t)?Array(t.length):[];return n(t,(function(t,n,i){s[++r]=e(t,n,i)})),s}},8334:(t,e,r)=>{var n=r(4656),i=r(2811),s=r(4248);t.exports=function(t){var e=i(t);return 1==e.length&&e[0][2]?s(e[0][0],e[0][1]):function(r){return r===t||n(r,t,e)}}},5941:(t,e,r)=>{var n=r(9856),i=r(643),s=r(9059),a=r(837),o=r(3631),h=r(4248),u=r(7102);t.exports=function(t,e){return a(t)&&o(e)?h(u(t),e):function(r){var a=i(r,t);return void 0===a&&a===e?s(r,t):n(e,a,3)}}},3184:t=>{t.exports=function(t){return function(e){return null==e?void 0:e[t]}}},886:(t,e,r)=>{var n=r(5974);t.exports=function(t){return function(e){return n(e,t)}}},5094:t=>{t.exports=function(t,e){for(var r=-1,n=Array(t);++r{var n=r(2773),i=r(9258),s=r(3670),a=r(4655),o=n?n.prototype:void 0,h=o?o.toString:void 0;t.exports=function t(e){if("string"==typeof e)return e;if(s(e))return i(e,t)+"";if(a(e))return h?h.call(e):"";var r=e+"";return"0"==r&&1/e==-1/0?"-0":r}},9081:t=>{t.exports=function(t){return function(e){return t(e)}}},3159:t=>{t.exports=function(t,e){return t.has(e)}},3183:(t,e,r)=>{var n=r(1559);t.exports=function(t){return"function"==typeof t?t:n}},6883:(t,e,r)=>{var n=r(3670),i=r(837),s=r(376),a=r(2049);t.exports=function(t,e){return n(t)?t:i(t,e)?[t]:s(a(t))}},1741:(t,e,r)=>{var n=r(4362)["__core-js_shared__"];t.exports=n},3978:(t,e,r)=>{var n=r(6175);t.exports=function(t,e){return function(r,i){if(null==r)return r;if(!n(r))return t(r,i);for(var s=r.length,a=e?s:-1,o=Object(r);(e?a--:++a{t.exports=function(t){return function(e,r,n){for(var i=-1,s=Object(e),a=n(e),o=a.length;o--;){var h=a[t?o:++i];if(!1===r(s[h],h,s))break}return e}}},3426:(t,e,r)=>{var n=r(9832),i=r(4481),s=r(3159);t.exports=function(t,e,r,a,o,h){var u=1&r,l=t.length,c=e.length;if(l!=c&&!(u&&c>l))return!1;var p=h.get(t),f=h.get(e);if(p&&f)return p==e&&f==t;var d=-1,m=!0,g=2&r?new n:void 0;for(h.set(t,e),h.set(e,t);++d{var n=r(2773),i=r(2496),s=r(7950),a=r(3426),o=r(8961),h=r(6983),u=n?n.prototype:void 0,l=u?u.valueOf:void 0;t.exports=function(t,e,r,n,u,c,p){switch(r){case"[object DataView]":if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case"[object ArrayBuffer]":return!(t.byteLength!=e.byteLength||!c(new i(t),new i(e)));case"[object Boolean]":case"[object Date]":case"[object Number]":return s(+t,+e);case"[object Error]":return t.name==e.name&&t.message==e.message;case"[object RegExp]":case"[object String]":return t==e+"";case"[object Map]":var f=o;case"[object Set]":var d=1&n;if(f||(f=h),t.size!=e.size&&!d)return!1;var m=p.get(t);if(m)return m==e;n|=2,p.set(t,e);var g=a(f(t),f(e),n,u,c,p);return p.delete(t),g;case"[object Symbol]":if(l)return l.call(t)==l.call(e)}return!1}},4572:(t,e,r)=>{var n=r(5788),i=Object.prototype.hasOwnProperty;t.exports=function(t,e,r,s,a,o){var h=1&r,u=n(t),l=u.length;if(l!=n(e).length&&!h)return!1;for(var c=l;c--;){var p=u[c];if(!(h?p in e:i.call(e,p)))return!1}var f=o.get(t),d=o.get(e);if(f&&d)return f==e&&d==t;var m=!0;o.set(t,e),o.set(e,t);for(var g=h;++c{var n="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g;t.exports=n},5788:(t,e,r)=>{var n=r(891),i=r(6918),s=r(3225);t.exports=function(t){return n(t,s,i)}},404:(t,e,r)=>{var n=r(9008);t.exports=function(t,e){var r=t.__data__;return n(e)?r["string"==typeof e?"string":"hash"]:r.map}},2811:(t,e,r)=>{var n=r(3631),i=r(3225);t.exports=function(t){for(var e=i(t),r=e.length;r--;){var s=e[r],a=t[s];e[r]=[s,a,n(a)]}return e}},3203:(t,e,r)=>{var n=r(4106),i=r(7338);t.exports=function(t,e){var r=i(t,e);return n(r)?r:void 0}},3888:(t,e,r)=>{var n=r(2773),i=Object.prototype,s=i.hasOwnProperty,a=i.toString,o=n?n.toStringTag:void 0;t.exports=function(t){var e=s.call(t,o),r=t[o];try{t[o]=void 0;var n=!0}catch(t){}var i=a.call(t);return n&&(e?t[o]=r:delete t[o]),i}},6918:(t,e,r)=>{var n=r(6523),i=r(4043),s=Object.prototype.propertyIsEnumerable,a=Object.getOwnPropertySymbols,o=a?function(t){return null==t?[]:(t=Object(t),n(a(t),(function(e){return s.call(t,e)})))}:i;t.exports=o},2417:(t,e,r)=>{var n=r(9940),i=r(4804),s=r(7114),a=r(689),o=r(5284),h=r(1185),u=r(1214),l="[object Map]",c="[object Promise]",p="[object Set]",f="[object WeakMap]",d="[object DataView]",m=u(n),g=u(i),_=u(s),v=u(a),y=u(o),x=h;(n&&x(new n(new ArrayBuffer(1)))!=d||i&&x(new i)!=l||s&&x(s.resolve())!=c||a&&x(new a)!=p||o&&x(new o)!=f)&&(x=function(t){var e=h(t),r="[object Object]"==e?t.constructor:void 0,n=r?u(r):"";if(n)switch(n){case m:return d;case g:return l;case _:return c;case v:return p;case y:return f}return e}),t.exports=x},7338:t=>{t.exports=function(t,e){return null==t?void 0:t[e]}},4727:(t,e,r)=>{var n=r(6883),i=r(9246),s=r(3670),a=r(4782),o=r(7100),h=r(7102);t.exports=function(t,e,r){for(var u=-1,l=(e=n(e,t)).length,c=!1;++u{var n=r(6326);t.exports=function(){this.__data__=n?n(null):{},this.size=0}},7644:t=>{t.exports=function(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}},3486:(t,e,r)=>{var n=r(6326),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;if(n){var r=e[t];return"__lodash_hash_undefined__"===r?void 0:r}return i.call(e,t)?e[t]:void 0}},4786:(t,e,r)=>{var n=r(6326),i=Object.prototype.hasOwnProperty;t.exports=function(t){var e=this.__data__;return n?void 0!==e[t]:i.call(e,t)}},6444:(t,e,r)=>{var n=r(6326);t.exports=function(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=n&&void 0===e?"__lodash_hash_undefined__":e,this}},4782:t=>{var e=/^(?:0|[1-9]\d*)$/;t.exports=function(t,r){var n=typeof t;return!!(r=null==r?9007199254740991:r)&&("number"==n||"symbol"!=n&&e.test(t))&&t>-1&&t%1==0&&t{var n=r(3670),i=r(4655),s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,e){if(n(t))return!1;var r=typeof t;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=t&&!i(t))||a.test(t)||!s.test(t)||null!=e&&t in Object(e)}},9008:t=>{t.exports=function(t){var e=typeof t;return"string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t}},9249:(t,e,r)=>{var n,i=r(1741),s=(n=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"";t.exports=function(t){return!!s&&s in t}},2803:t=>{var e=Object.prototype;t.exports=function(t){var r=t&&t.constructor;return t===("function"==typeof r&&r.prototype||e)}},3631:(t,e,r)=>{var n=r(71);t.exports=function(t){return t==t&&!n(t)}},3708:t=>{t.exports=function(){this.__data__=[],this.size=0}},6993:(t,e,r)=>{var n=r(6213),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,r=n(e,t);return!(r<0||(r==e.length-1?e.pop():i.call(e,r,1),--this.size,0))}},286:(t,e,r)=>{var n=r(6213);t.exports=function(t){var e=this.__data__,r=n(e,t);return r<0?void 0:e[r][1]}},1678:(t,e,r)=>{var n=r(6213);t.exports=function(t){return n(this.__data__,t)>-1}},9743:(t,e,r)=>{var n=r(6213);t.exports=function(t,e){var r=this.__data__,i=n(r,t);return i<0?(++this.size,r.push([t,e])):r[i][1]=e,this}},6977:(t,e,r)=>{var n=r(1979),i=r(2768),s=r(4804);t.exports=function(){this.size=0,this.__data__={hash:new n,map:new(s||i),string:new n}}},7474:(t,e,r)=>{var n=r(404);t.exports=function(t){var e=n(this,t).delete(t);return this.size-=e?1:0,e}},727:(t,e,r)=>{var n=r(404);t.exports=function(t){return n(this,t).get(t)}},3653:(t,e,r)=>{var n=r(404);t.exports=function(t){return n(this,t).has(t)}},6140:(t,e,r)=>{var n=r(404);t.exports=function(t,e){var r=n(this,t),i=r.size;return r.set(t,e),this.size+=r.size==i?0:1,this}},8961:t=>{t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t,n){r[++e]=[n,t]})),r}},4248:t=>{t.exports=function(t,e){return function(r){return null!=r&&r[t]===e&&(void 0!==e||t in Object(r))}}},5933:(t,e,r)=>{var n=r(104);t.exports=function(t){var e=n(t,(function(t){return 500===r.size&&r.clear(),t})),r=e.cache;return e}},6326:(t,e,r)=>{var n=r(3203)(Object,"create");t.exports=n},3865:(t,e,r)=>{var n=r(5290)(Object.keys,Object);t.exports=n},1985:(t,e,r)=>{t=r.nmd(t);var n=r(8556),i=e&&!e.nodeType&&e,s=i&&t&&!t.nodeType&&t,a=s&&s.exports===i&&n.process,o=function(){try{return s&&s.require&&s.require("util").types||a&&a.binding&&a.binding("util")}catch(t){}}();t.exports=o},2299:t=>{var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},5290:t=>{t.exports=function(t,e){return function(r){return t(e(r))}}},4362:(t,e,r)=>{var n=r(8556),i="object"==typeof self&&self&&self.Object===Object&&self,s=n||i||Function("return this")();t.exports=s},9911:t=>{t.exports=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this}},7447:t=>{t.exports=function(t){return this.__data__.has(t)}},6983:t=>{t.exports=function(t){var e=-1,r=Array(t.size);return t.forEach((function(t){r[++e]=t})),r}},7553:(t,e,r)=>{var n=r(2768);t.exports=function(){this.__data__=new n,this.size=0}},6038:t=>{t.exports=function(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}},2397:t=>{t.exports=function(t){return this.__data__.get(t)}},2421:t=>{t.exports=function(t){return this.__data__.has(t)}},2936:(t,e,r)=>{var n=r(2768),i=r(4804),s=r(8423);t.exports=function(t,e){var r=this.__data__;if(r instanceof n){var a=r.__data__;if(!i||a.length<199)return a.push([t,e]),this.size=++r.size,this;r=this.__data__=new s(a)}return r.set(t,e),this.size=r.size,this}},376:(t,e,r)=>{var n=r(5933),i=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,s=/\\(\\)?/g,a=n((function(t){var e=[];return 46===t.charCodeAt(0)&&e.push(""),t.replace(i,(function(t,r,n,i){e.push(n?i.replace(s,"$1"):r||t)})),e}));t.exports=a},7102:(t,e,r)=>{var n=r(4655);t.exports=function(t){if("string"==typeof t||n(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},1214:t=>{var e=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return e.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},6270:(t,e,r)=>{t.exports=r(9982)},7950:t=>{t.exports=function(t,e){return t===e||t!=t&&e!=e}},9982:(t,e,r)=>{var n=r(4111),i=r(5806),s=r(3183),a=r(3670);t.exports=function(t,e){return(a(t)?n:i)(t,s(e))}},643:(t,e,r)=>{var n=r(5974);t.exports=function(t,e,r){var i=null==t?void 0:n(t,e);return void 0===i?r:i}},9059:(t,e,r)=>{var n=r(5529),i=r(4727);t.exports=function(t,e){return null!=t&&i(t,e,n)}},1559:t=>{t.exports=function(t){return t}},9246:(t,e,r)=>{var n=r(1075),i=r(4939),s=Object.prototype,a=s.hasOwnProperty,o=s.propertyIsEnumerable,h=n(function(){return arguments}())?n:function(t){return i(t)&&a.call(t,"callee")&&!o.call(t,"callee")};t.exports=h},3670:t=>{var e=Array.isArray;t.exports=e},6175:(t,e,r)=>{var n=r(3626),i=r(7100);t.exports=function(t){return null!=t&&i(t.length)&&!n(t)}},2343:(t,e,r)=>{t=r.nmd(t);var n=r(4362),i=r(3444),s=e&&!e.nodeType&&e,a=s&&t&&!t.nodeType&&t,o=a&&a.exports===s?n.Buffer:void 0,h=(o?o.isBuffer:void 0)||i;t.exports=h},3626:(t,e,r)=>{var n=r(1185),i=r(71);t.exports=function(t){if(!i(t))return!1;var e=n(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},7100:t=>{t.exports=function(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}},71:t=>{t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},4939:t=>{t.exports=function(t){return null!=t&&"object"==typeof t}},4655:(t,e,r)=>{var n=r(1185),i=r(4939);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==n(t)}},1589:(t,e,r)=>{var n=r(3638),i=r(9081),s=r(1985),a=s&&s.isTypedArray,o=a?i(a):n;t.exports=o},3225:(t,e,r)=>{var n=r(8083),i=r(7521),s=r(6175);t.exports=function(t){return s(t)?n(t):i(t)}},7976:(t,e,r)=>{var n=r(9258),i=r(9047),s=r(5901),a=r(3670);t.exports=function(t,e){return(a(t)?n:s)(t,i(e,3))}},104:(t,e,r)=>{var n=r(8423);function i(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)throw new TypeError("Expected a function");var r=function(){var n=arguments,i=e?e.apply(this,n):n[0],s=r.cache;if(s.has(i))return s.get(i);var a=t.apply(this,n);return r.cache=s.set(i,a)||s,a};return r.cache=new(i.Cache||n),r}i.Cache=n,t.exports=i},8886:(t,e,r)=>{var n=r(3184),i=r(886),s=r(837),a=r(7102);t.exports=function(t){return s(t)?n(a(t)):i(t)}},4043:t=>{t.exports=function(){return[]}},3444:t=>{t.exports=function(){return!1}},2049:(t,e,r)=>{var n=r(8257);t.exports=function(t){return null==t?"":n(t)}},6349:()=>{window.NodeList&&!NodeList.prototype.forEach&&(NodeList.prototype.forEach=function(t,e){e=e||window;for(var r=0;r{t.exports=r(1045)},7230:t=>{"use strict";var e=!("undefined"==typeof window||!window.document||!window.document.createElement),r={canUseDOM:e,canUseWorkers:"undefined"!=typeof Worker,canUseEventListeners:e&&!(!window.addEventListener&&!window.attachEvent),canUseViewport:e&&!!window.screen,isInWorker:!e};t.exports=r},2907:t=>{var e,r,n,i,s,a,o,h,u,l,c,p,f,d,m,g=!1;function _(){if(!g){g=!0;var t=navigator.userAgent,_=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(t),v=/(Mac OS X)|(Windows)|(Linux)/.exec(t);if(p=/\b(iPhone|iP[ao]d)/.exec(t),f=/\b(iP[ao]d)/.exec(t),l=/Android/i.exec(t),d=/FBAN\/\w+;/i.exec(t),m=/Mobile/i.exec(t),c=!!/Win64/.exec(t),_){(e=_[1]?parseFloat(_[1]):_[5]?parseFloat(_[5]):NaN)&&document&&document.documentMode&&(e=document.documentMode);var y=/(?:Trident\/(\d+.\d+))/.exec(t);a=y?parseFloat(y[1])+4:e,r=_[2]?parseFloat(_[2]):NaN,n=_[3]?parseFloat(_[3]):NaN,(i=_[4]?parseFloat(_[4]):NaN)?(_=/(?:Chrome\/(\d+\.\d+))/.exec(t),s=_&&_[1]?parseFloat(_[1]):NaN):s=NaN}else e=r=n=s=i=NaN;if(v){if(v[1]){var x=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(t);o=!x||parseFloat(x[1].replace("_","."))}else o=!1;h=!!v[2],u=!!v[3]}else o=h=u=!1}}var v={ie:function(){return _()||e},ieCompatibilityMode:function(){return _()||a>e},ie64:function(){return v.ie()&&c},firefox:function(){return _()||r},opera:function(){return _()||n},webkit:function(){return _()||i},safari:function(){return v.webkit()},chrome:function(){return _()||s},windows:function(){return _()||h},osx:function(){return _()||o},linux:function(){return _()||u},iphone:function(){return _()||p},mobile:function(){return _()||p||f||l||m},nativeApp:function(){return _()||d},android:function(){return _()||l},ipad:function(){return _()||f}};t.exports=v},4480:(t,e,r)=>{"use strict";var n,i=r(7230);i.canUseDOM&&(n=document.implementation&&document.implementation.hasFeature&&!0!==document.implementation.hasFeature("","")),t.exports=function(t,e){if(!i.canUseDOM||e&&!("addEventListener"in document))return!1;var r="on"+t,s=r in document;if(!s){var a=document.createElement("div");a.setAttribute(r,"return;"),s="function"==typeof a[r]}return!s&&n&&"wheel"===t&&(s=document.implementation.hasFeature("Events.wheel","3.0")),s}},1045:(t,e,r)=>{"use strict";var n=r(2907),i=r(4480);function s(t){var e=0,r=0,n=0,i=0;return"detail"in t&&(r=t.detail),"wheelDelta"in t&&(r=-t.wheelDelta/120),"wheelDeltaY"in t&&(r=-t.wheelDeltaY/120),"wheelDeltaX"in t&&(e=-t.wheelDeltaX/120),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(e=r,r=0),n=10*e,i=10*r,"deltaY"in t&&(i=t.deltaY),"deltaX"in t&&(n=t.deltaX),(n||i)&&t.deltaMode&&(1==t.deltaMode?(n*=40,i*=40):(n*=800,i*=800)),n&&!e&&(e=n<1?-1:1),i&&!r&&(r=i<1?-1:1),{spinX:e,spinY:r,pixelX:n,pixelY:i}}s.getEventType=function(){return n.firefox()?"DOMMouseScroll":i("wheel")?"wheel":"mousewheel"},t.exports=s},2273:t=>{var e="undefined"!=typeof document?document.createElement("p").style:{},r=["O","ms","Moz","Webkit"],n=/([A-Z])/g,i={};function s(t){if(t=t.replace(/-([a-z])/g,(function(t,e){return e.toUpperCase()})),void 0!==e[t])return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),i=r.length;i--;){var s=r[i]+n;if(void 0!==e[s])return s}return t}t.exports=function(t){return t in i?i[t]:i[t]=s(t)},t.exports.dash=function(t){return t=s(t),n.test(t)&&(t="-"+t.replace(n,"-$1"),n.lastIndex=0),t.toLowerCase()}},3044:function(t){var e;t.exports=((e=function(){function t(t){return i.appendChild(t.dom),t}function r(t){for(var e=0;ea+1e3&&(h.update(1e3*o/(t-a),100),a=t,o=0,l)){var e=performance.memory;l.update(e.usedJSHeapSize/1048576,e.jsHeapSizeLimit/1048576)}return t},update:function(){s=this.end()},domElement:i,setMode:r}}).Panel=function(t,e,r){var n=1/0,i=0,s=Math.round,a=s(window.devicePixelRatio||1),o=80*a,h=48*a,u=3*a,l=2*a,c=3*a,p=15*a,f=74*a,d=30*a,m=document.createElement("canvas");m.width=o,m.height=h,m.style.cssText="width:80px;height:48px";var g=m.getContext("2d");return g.font="bold "+9*a+"px Helvetica,Arial,sans-serif",g.textBaseline="top",g.fillStyle=r,g.fillRect(0,0,o,h),g.fillStyle=e,g.fillText(t,u,l),g.fillRect(c,p,f,d),g.fillStyle=r,g.globalAlpha=.9,g.fillRect(c,p,f,d),{dom:m,update:function(h,_){n=Math.min(n,h),i=Math.max(i,h),g.fillStyle=r,g.globalAlpha=1,g.fillRect(0,0,o,p),g.fillStyle=e,g.fillText(s(h)+" "+t+" ("+s(n)+"-"+s(i)+")",u,l),g.drawImage(m,c+a,p,f-a,d,c,p,f-a,d),g.fillRect(c+f-a,p,a,d),g.fillStyle=r,g.globalAlpha=.9,g.fillRect(c+f-a,p,a,s((1-h/_)*d))}}},e)}},e={};function r(n){if(e[n])return e[n].exports;var i=e[n]={id:n,loaded:!1,exports:{}};return t[n].call(i.exports,i,i.exports,r),i.loaded=!0,i.exports}r.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return r.d(e,{a:e}),e},r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),(()=>{"use strict";r(6349),r(4065),r(6955);var t=r(1663),e=r.n(t),n=r(7778),i=r.n(n),s=r(3044),a=r.n(s),o=r(6270),h=r.n(o);const u=new class{isMobile(){return this.isMobileChecked||(this.isMobileChecked=!0,this.isMobileCheck=document.documentElement.classList.contains("mobile")),this.isMobileCheck}isWebPSupported(){if(!this.isWebPChecked){this.isWebPChecked=!0;const t=document.createElement("canvas");t.getContext&&t.getContext("2d")&&(this.isWebPCheck=0===t.toDataURL("image/webp").indexOf("data:image/webp"))}return this.isWebPCheck}};var l=r(1590),c=r.n(l),p=r(7320),f=r.n(p),d=r(2273),m=r.n(d);function g({element:t,expression:e=" ",append:r=!0}){const n=function(t,e){const r=t.split("
");let n=[];return h()(r,((t,r)=>{r>0&&n.push("
"),n=n.concat(t.split(e));let i=!1,s="";const a=[];h()(n,(t=>{i||!t.includes("")||t.includes("/strong>"))&&(a.push(s),s=""),i||""!==s||a.push(t),i&&(t.includes("/a>")||t.includes("/strong>"))&&(i=!1)})),n=a})),n}(t.innerHTML.toString().trim(),e);let i="";h()(n,(t=>{if(t.indexOf("
")>-1){const e=t.split("
");h()(e,((t,e)=>{i+=e>0?"
"+_(t):_(t)}))}else i+=_(t)})),t.innerHTML=i;const s=t.querySelectorAll("span");return r&&h()(s,(t=>{const e=1===t.textContent.length,r=""!==t.innerHTML.trim(),n="&"!==t.textContent,i="-"!==t.textContent;e&&r&&n&&i&&(t.innerHTML=`${t.textContent} `)})),s}function _(t){return""===(t=t.trim())||" "===t?t:"
"===t?"
":`${t}`+(t.length>1?" ":"")}var v=r(7976),y=r.n(v);function x(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function w(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e}var b,M,T,A,O,E,C,S,P,L,D,z,k,R,j,F,I,B,N,U,q,Y,X,W,V,G,H,Z,$={autoSleep:120,force3D:"auto",nullTargetWarn:1,units:{lineHeight:""}},Q={duration:.5,overwrite:!1,delay:0},K=1e8,J=1e-8,tt=2*Math.PI,et=tt/4,rt=0,nt=Math.sqrt,it=Math.cos,st=Math.sin,at=function(t){return"string"==typeof t},ot=function(t){return"function"==typeof t},ht=function(t){return"number"==typeof t},ut=function(t){return void 0===t},lt=function(t){return"object"==typeof t},ct=function(t){return!1!==t},pt=function(){return"undefined"!=typeof window},ft=function(t){return ot(t)||at(t)},dt="function"==typeof ArrayBuffer&&ArrayBuffer.isView||function(){},mt=Array.isArray,gt=/(?:-?\.?\d|\.)+/gi,_t=/[-+=.]*\d+[.e\-+]*\d*[e\-+]*\d*/g,vt=/[-+=.]*\d+[.e-]*\d*[a-z%]*/g,yt=/[-+=.]*\d+\.?\d*(?:e-|e\+)?\d*/gi,xt=/[+-]=-?[.\d]+/,wt=/[#\-+.]*\b[a-z\d-=+%.]+/gi,bt=/[\d.+\-=]+(?:e[-+]\d*)*/i,Mt={},Tt={},At=function(t){return(Tt=Qt(t,Mt))&&Rr},Ot=function(t,e){return console.warn("Invalid property",t,"set to",e,"Missing plugin? gsap.registerPlugin()")},Et=function(t,e){return!e&&console.warn(t)},Ct=function(t,e){return t&&(Mt[t]=e)&&Tt&&(Tt[t]=e)||Mt},St=function(){return 0},Pt={},Lt=[],Dt={},zt={},kt={},Rt=30,jt=[],Ft="",It=function(t){var e,r,n=t[0];if(lt(n)||ot(n)||(t=[t]),!(e=(n._gsap||{}).harness)){for(r=jt.length;r--&&!jt[r].targetTest(n););e=jt[r]}for(r=t.length;r--;)t[r]&&(t[r]._gsap||(t[r]._gsap=new ar(t[r],e)))||t.splice(r,1);return t},Bt=function(t){return t._gsap||It(Ae(t))[0]._gsap},Nt=function(t,e,r){return(r=t[e])&&ot(r)?t[e]():ut(r)&&t.getAttribute&&t.getAttribute(e)||r},Ut=function(t,e){return(t=t.split(",")).forEach(e)||t},qt=function(t){return Math.round(1e5*t)/1e5||0},Yt=function(t,e){for(var r=e.length,n=0;t.indexOf(e[n])<0&&++nt._dur||e._start<0))for(var r=t;r;)r._dirty=1,r=r.parent;return t},ie=function(t){for(var e=t.parent;e&&e.parent;)e._dirty=1,e.totalDuration(),e=e.parent;return t},se=function t(e){return!e||e._ts&&t(e.parent)},ae=function(t){return t._repeat?oe(t._tTime,t=t.duration()+t._rDelay)*t:0},oe=function(t,e){var r=Math.floor(t/=e);return t&&r===t?r-1:r},he=function(t,e){return(t-e._start)*e._ts+(e._ts>=0?0:e._dirty?e.totalDuration():e._tDur)},ue=function(t){return t._end=qt(t._start+(t._tDur/Math.abs(t._ts||t._rts||J)||0))},le=function(t,e){var r=t._dp;return r&&r.smoothChildTiming&&t._ts&&(t._start=qt(r._time-(t._ts>0?e/t._ts:((t._dirty?t.totalDuration():t._tDur)-e)/-t._ts)),ue(t),r._dirty||ne(r,t)),t},ce=function(t,e){var r;if((e._time||e._initted&&!e._dur)&&(r=he(t.rawTime(),e),(!e._dur||we(0,e.totalDuration(),r)-e._tTime>J)&&e.render(r,!0)),ne(t,e)._dp&&t._initted&&t._time>=t._dur&&t._ts){if(t._dur=0&&r.totalTime(r._tTime),r=r._dp;t._zTime=-1e-8}},pe=function(t,e,r,n){return e.parent&&re(e),e._start=qt(r+e._delay),e._end=qt(e._start+(e.totalDuration()/Math.abs(e.timeScale())||0)),function(t,e,r,n,i){void 0===r&&(r="_first"),void 0===n&&(n="_last");var s,a=t[n];if(i)for(s=e[i];a&&a[i]>s;)a=a._prev;a?(e._next=a._next,a._next=e):(e._next=t[r],t[r]=e),e._next?e._next._prev=e:t[n]=e,e._prev=a,e.parent=e._dp=t}(t,e,"_first","_last",t._sort?"_start":0),t._recent=e,n||ce(t,e),t},fe=function(t,e){return(Mt.ScrollTrigger||Ot("scrollTrigger",e))&&Mt.ScrollTrigger.create(e,t)},de=function(t,e,r,n){return fr(t,e),t._initted?!r&&t._pt&&(t._dur&&!1!==t.vars.lazy||!t._dur&&t.vars.lazy)&&C!==Ge.frame?(Lt.push(t),t._lazy=[e,n],1):void 0:1},me=function t(e){var r=e.parent;return r&&r._ts&&r._initted&&!r._lock&&(r.rawTime()<0||t(r))},ge=function(t,e,r,n){var i=t._repeat,s=qt(e)||0,a=t._tTime/t._tDur;return a&&!n&&(t._time*=s/t._dur),t._dur=s,t._tDur=i?i<0?1e10:qt(s*(i+1)+t._rDelay*i):s,a&&!n?le(t,t._tTime=t._tDur*a):t.parent&&ue(t),r||ne(t.parent,t),t},_e=function(t){return t instanceof hr?ne(t):ge(t,t._dur)},ve={_start:0,endTime:St},ye=function t(e,r){var n,i,s=e.labels,a=e._recent||ve,o=e.duration()>=K?a.endTime(!1):e._dur;return at(r)&&(isNaN(r)||r in s)?"<"===(n=r.charAt(0))||">"===n?("<"===n?a._start:a.endTime(a._repeat>=0))+(parseFloat(r.substr(1))||0):(n=r.indexOf("="))<0?(r in s||(s[r]=o),s[r]):(i=+(r.charAt(n-1)+r.substr(n+1)),n>1?t(e,r.substr(0,n-1))+i:o+i):null==r?o:+r},xe=function(t,e){return t||0===t?e(t):e},we=function(t,e,r){return re?e:r},be=function(t){if("string"!=typeof t)return"";var e=bt.exec(t);return e?t.substr(e.index+e[0].length):""},Me=[].slice,Te=function(t,e){return t&<(t)&&"length"in t&&(!e&&!t.length||t.length-1 in t&<(t[0]))&&!t.nodeType&&t!==T},Ae=function(t,e){return!at(t)||e||!A&&He()?mt(t)?function(t,e,r){return void 0===r&&(r=[]),t.forEach((function(t){var n;return at(t)&&!e||Te(t,1)?(n=r).push.apply(n,Ae(t)):r.push(t)}))||r}(t,e):Te(t)?Me.call(t,0):t?[t]:[]:Me.call(O.querySelectorAll(t),0)},Oe=function(t){return t.sort((function(){return.5-Math.random()}))},Ee=function(t){if(ot(t))return t;var e=lt(t)?t:{each:t},r=er(e.ease),n=e.from||0,i=parseFloat(e.base)||0,s={},a=n>0&&n<1,o=isNaN(n)||a,h=e.axis,u=n,l=n;return at(n)?u=l={center:.5,edges:.5,end:1}[n]||0:!a&&o&&(u=n[0],l=n[1]),function(t,a,c){var p,f,d,m,g,_,v,y,x,w=(c||e).length,b=s[w];if(!b){if(!(x="auto"===e.grid?0:(e.grid||[1,K])[1])){for(v=-K;v<(v=c[x++].getBoundingClientRect().left)&&xv&&(v=g),gw?w-1:h?"y"===h?w/x:x:Math.max(x,w/x))||0)*("edges"===n?-1:1),b.b=w<0?i-w:i,b.u=be(e.amount||e.each)||0,r=r&&w<0?Je(r):r}return w=(b[t]-b.min)/b.max||0,qt(b.b+(r?r(w):w)*b.v)+b.u}},Ce=function(t){var e=t<1?Math.pow(10,(t+"").length-2):1;return function(r){var n=Math.round(parseFloat(r)/t)*t*e;return(n-n%1)/e+(ht(r)?0:be(r))}},Se=function(t,e){var r,n,i=mt(t);return!i&<(t)&&(r=i=t.radius||K,t.values?(t=Ae(t.values),(n=!ht(t[0]))&&(r*=r)):t=Ce(t.increment)),xe(e,i?ot(t)?function(e){return n=t(e),Math.abs(n-e)<=r?n:e}:function(e){for(var i,s,a=parseFloat(n?e.x:e),o=parseFloat(n?e.y:0),h=K,u=0,l=t.length;l--;)(i=n?(i=t[l].x-a)*i+(s=t[l].y-o)*s:Math.abs(t[l]-a))(i=Math.abs(i))&&(s=n,o=i);return s},Re=function(t,e,r){var n,i,s=t.vars,a=s[e];if(a)return n=s[e+"Params"],i=s.callbackScope||t,r&&Lt.length&&Wt(),n?a.apply(i,n):a.call(i)},je=function(t){return re(t),t.progress()<1&&Re(t,"onInterrupt"),t},Fe=function(t){var e=(t=!t.name&&t.default||t).name,r=ot(t),n=e&&!r&&t.init?function(){this._props=[]}:t,i={init:St,render:Or,add:cr,kill:Cr,modifier:Er,rawVars:0},s={targetTest:0,get:0,getSetter:br,aliases:{},register:0};if(He(),t!==n){if(zt[e])return;Zt(n,Zt(Jt(t,i),s)),Qt(n.prototype,Qt(i,Jt(t,s))),zt[n.prop=e]=n,t.targetTest&&(jt.push(n),Pt[e]=1),e=("css"===e?"CSS":e.charAt(0).toUpperCase()+e.substr(1))+"Plugin"}Ct(e,n),t.register&&t.register(Rr,n,Lr)},Ie=255,Be={aqua:[0,Ie,Ie],lime:[0,Ie,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,Ie],navy:[0,0,128],white:[Ie,Ie,Ie],olive:[128,128,0],yellow:[Ie,Ie,0],orange:[Ie,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[Ie,0,0],pink:[Ie,192,203],cyan:[0,Ie,Ie],transparent:[Ie,Ie,Ie,0]},Ne=function(t,e,r){return(6*(t=t<0?t+1:t>1?t-1:t)<1?e+(r-e)*t*6:t<.5?r:3*t<2?e+(r-e)*(2/3-t)*6:e)*Ie+.5|0},Ue=function(t,e,r){var n,i,s,a,o,h,u,l,c,p,f=t?ht(t)?[t>>16,t>>8&Ie,t&Ie]:0:Be.black;if(!f){if(","===t.substr(-1)&&(t=t.substr(0,t.length-1)),Be[t])f=Be[t];else if("#"===t.charAt(0)){if(t.length<6&&(n=t.charAt(1),i=t.charAt(2),s=t.charAt(3),t="#"+n+n+i+i+s+s+(5===t.length?t.charAt(4)+t.charAt(4):"")),9===t.length)return[(f=parseInt(t.substr(1,6),16))>>16,f>>8&Ie,f&Ie,parseInt(t.substr(7),16)/255];f=[(t=parseInt(t.substr(1),16))>>16,t>>8&Ie,t&Ie]}else if("hsl"===t.substr(0,3))if(f=p=t.match(gt),e){if(~t.indexOf("="))return f=t.match(_t),r&&f.length<4&&(f[3]=1),f}else a=+f[0]%360/360,o=+f[1]/100,n=2*(h=+f[2]/100)-(i=h<=.5?h*(o+1):h+o-h*o),f.length>3&&(f[3]*=1),f[0]=Ne(a+1/3,n,i),f[1]=Ne(a,n,i),f[2]=Ne(a-1/3,n,i);else f=t.match(gt)||Be.transparent;f=f.map(Number)}return e&&!p&&(n=f[0]/Ie,i=f[1]/Ie,s=f[2]/Ie,h=((u=Math.max(n,i,s))+(l=Math.min(n,i,s)))/2,u===l?a=o=0:(c=u-l,o=h>.5?c/(2-u-l):c/(u+l),a=u===n?(i-s)/c+(iI&&(N+=a-B),((r=(i=(U+=a)-N)-Y)>0||o)&&(s=++k.frame,R=i-1e3*k.time,k.time=i/=1e3,Y+=r+(r>=q?4:q-r),n=1),o||(L=D(t)),n)for(j=0;j=e&&j--},_listeners:X=[]}),He=function(){return!P&&Ge.wake()},Ze={},$e=/^[\d.\-M][\d.\-,\s]/,Qe=/["']/g,Ke=function(t){for(var e,r,n,i={},s=t.substr(1,t.length-3).split(":"),a=s[0],o=1,h=s.length;o1&&a.config?a.config.apply(null,~t.indexOf("{")?[Ke(s[1])]:(e=t,r=e.indexOf("(")+1,n=e.indexOf(")"),i=e.indexOf("(",r),e.substring(r,~i&&i=1?r:1,s=(n||(e?.3:.45))/(r<1?r:1),a=s/tt*(Math.asin(1/i)||0),o=function(t){return 1===t?1:i*Math.pow(2,-10*t)*st((t-a)*s)+1},h="out"===e?o:"in"===e?function(t){return 1-o(1-t)}:nr(o);return s=tt/s,h.config=function(r,n){return t(e,r,n)},h},sr=function t(e,r){void 0===r&&(r=1.70158);var n=function(t){return t?--t*t*((r+1)*t+r)+1:0},i="out"===e?n:"in"===e?function(t){return 1-n(1-t)}:nr(n);return i.config=function(r){return t(e,r)},i};Ut("Linear,Quad,Cubic,Quart,Quint,Strong",(function(t,e){var r=e<5?e+1:e;rr(t+",Power"+(r-1),e?function(t){return Math.pow(t,r)}:function(t){return t},(function(t){return 1-Math.pow(1-t,r)}),(function(t){return t<.5?Math.pow(2*t,r)/2:1-Math.pow(2*(1-t),r)/2}))})),Ze.Linear.easeNone=Ze.none=Ze.Linear.easeIn,rr("Elastic",ir("in"),ir("out"),ir()),V=7.5625,H=1/(G=2.75),rr("Bounce",(function(t){return 1-Z(1-t)}),Z=function(t){return t0?t+(t+this._rDelay)*this._repeat:t):this.totalDuration()&&this._dur},e.totalDuration=function(t){return arguments.length?(this._dirty=0,ge(this,this._repeat<0?t:(t-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},e.totalTime=function(t,e){if(He(),!arguments.length)return this._tTime;var r=this._dp;if(r&&r.smoothChildTiming&&this._ts){for(le(this,t),!r._dp||r.parent||ce(r,this);r.parent;)r.parent._time!==r._start+(r._ts>=0?r._tTime/r._ts:(r.totalDuration()-r._tTime)/-r._ts)&&r.totalTime(r._tTime,!0),r=r.parent;!this.parent&&this._dp.autoRemoveChildren&&(this._ts>0&&t0||!this._tDur&&!t)&&pe(this._dp,this,this._start-this._delay)}return(this._tTime!==t||!this._dur&&!e||this._initted&&Math.abs(this._zTime)===J||!t&&!this._initted&&(this.add||this._ptLookup))&&(this._ts||(this._pTime=t),Vt(this,t,e)),this},e.time=function(t,e){return arguments.length?this.totalTime(Math.min(this.totalDuration(),t+ae(this))%this._dur||(t?this._dur:0),e):this._time},e.totalProgress=function(t,e){return arguments.length?this.totalTime(this.totalDuration()*t,e):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.ratio},e.progress=function(t,e){return arguments.length?this.totalTime(this.duration()*(!this._yoyo||1&this.iteration()?t:1-t)+ae(this),e):this.duration()?Math.min(1,this._time/this._dur):this.ratio},e.iteration=function(t,e){var r=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(t-1)*r,e):this._repeat?oe(this._tTime,r)+1:1},e.timeScale=function(t){if(!arguments.length)return-1e-8===this._rts?0:this._rts;if(this._rts===t)return this;var e=this.parent&&this._ts?he(this.parent._time,this):this._tTime;return this._rts=+t||0,this._ts=this._ps||-1e-8===t?0:this._rts,ie(this.totalTime(we(-this._delay,this._tDur,e),!0))},e.paused=function(t){return arguments.length?(this._ps!==t&&(this._ps=t,t?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(He(),this._ts=this._rts,this.totalTime(this.parent&&!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,1===this.progress()&&(this._tTime-=J)&&Math.abs(this._zTime)!==J))),this):this._ps},e.startTime=function(t){if(arguments.length){this._start=t;var e=this.parent||this._dp;return e&&(e._sort||!this.parent)&&pe(e,this,t-this._delay),this}return this._start},e.endTime=function(t){return this._start+(ct(t)?this.totalDuration():this.duration())/Math.abs(this._ts)},e.rawTime=function(t){var e=this.parent||this._dp;return e?t&&(!this._ts||this._repeat&&this._time&&this.totalProgress()<1)?this._tTime%(this._dur+this._rDelay):this._ts?he(e.rawTime(t),this):this._tTime:this._tTime},e.globalTime=function(t){for(var e=this,r=arguments.length?t:e.rawTime();e;)r=e._start+r/(e._ts||1),e=e._dp;return r},e.repeat=function(t){return arguments.length?(this._repeat=t===1/0?-2:t,_e(this)):-2===this._repeat?1/0:this._repeat},e.repeatDelay=function(t){return arguments.length?(this._rDelay=t,_e(this)):this._rDelay},e.yoyo=function(t){return arguments.length?(this._yoyo=t,this):this._yoyo},e.seek=function(t,e){return this.totalTime(ye(this,t),ct(e))},e.restart=function(t,e){return this.play().totalTime(t?-this._delay:0,ct(e))},e.play=function(t,e){return null!=t&&this.seek(t,e),this.reversed(!1).paused(!1)},e.reverse=function(t,e){return null!=t&&this.seek(t||this.totalDuration(),e),this.reversed(!0).paused(!1)},e.pause=function(t,e){return null!=t&&this.seek(t,e),this.paused(!0)},e.resume=function(){return this.paused(!1)},e.reversed=function(t){return arguments.length?(!!t!==this.reversed()&&this.timeScale(-this._rts||(t?-1e-8:0)),this):this._rts<0},e.invalidate=function(){return this._initted=this._act=0,this._zTime=-1e-8,this},e.isActive=function(){var t,e=this.parent||this._dp,r=this._start;return!(e&&!(this._ts&&this._initted&&e.isActive()&&(t=e.rawTime(!0))>=r&&t1?(e?(n[t]=e,r&&(n[t+"Params"]=r),"onUpdate"===t&&(this._onUpdate=e)):delete n[t],this):n[t]},e.then=function(t){var e=this;return new Promise((function(r){var n=ot(t)?t:Ht,i=function(){var t=e.then;e.then=null,ot(n)&&(n=n(e))&&(n.then||n===e)&&(e.then=t),r(n),e.then=t};e._initted&&1===e.totalProgress()&&e._ts>=0||!e._tTime&&e._ts<0?i():e._prom=i}))},e.kill=function(){je(this)},t}();Zt(or.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-1e-8,_prom:0,_ps:!1,_rts:1});var hr=function(t){function e(e,r){var n;return void 0===e&&(e={}),(n=t.call(this,e,r)||this).labels={},n.smoothChildTiming=!!e.smoothChildTiming,n.autoRemoveChildren=!!e.autoRemoveChildren,n._sort=ct(e.sortChildren),n.parent&&ce(n.parent,x(n)),e.scrollTrigger&&fe(x(n),e.scrollTrigger),n}w(e,t);var r=e.prototype;return r.to=function(t,e,r){return new _r(t,Xt(arguments,0,this),ye(this,ht(e)?arguments[3]:r)),this},r.from=function(t,e,r){return new _r(t,Xt(arguments,1,this),ye(this,ht(e)?arguments[3]:r)),this},r.fromTo=function(t,e,r,n){return new _r(t,Xt(arguments,2,this),ye(this,ht(e)?arguments[4]:n)),this},r.set=function(t,e,r){return e.duration=0,e.parent=this,te(e).repeatDelay||(e.repeat=0),e.immediateRender=!!e.immediateRender,new _r(t,e,ye(this,r),1),this},r.call=function(t,e,r){return pe(this,_r.delayedCall(0,t,e),ye(this,r))},r.staggerTo=function(t,e,r,n,i,s,a){return r.duration=e,r.stagger=r.stagger||n,r.onComplete=s,r.onCompleteParams=a,r.parent=this,new _r(t,r,ye(this,i)),this},r.staggerFrom=function(t,e,r,n,i,s,a){return r.runBackwards=1,te(r).immediateRender=ct(r.immediateRender),this.staggerTo(t,e,r,n,i,s,a)},r.staggerFromTo=function(t,e,r,n,i,s,a,o){return n.startAt=r,te(n).immediateRender=ct(n.immediateRender),this.staggerTo(t,e,n,i,s,a,o)},r.render=function(t,e,r){var n,i,s,a,o,h,u,l,c,p,f,d,m=this._time,g=this._dirty?this.totalDuration():this._tDur,_=this._dur,v=this!==M&&t>g-J&&t>=0?g:t_&&(n=_)),p=oe(this._tTime,o),!m&&this._tTime&&p!==a&&(p=a),f&&1&a&&(n=_-n,d=1),a!==p&&!this._lock){var x=f&&1&p,w=x===(f&&1&a);if(ae)for(n=t._first;n&&n._start<=r;){if(!n._dur&&"isPause"===n.data&&n._start>e)return n;n=n._next}else for(n=t._last;n&&n._start>=r;){if(!n._dur&&"isPause"===n.data&&n._start=0)&&!e&&Re(this,"onStart"),n>=m&&t>=0)for(i=this._first;i;){if(s=i._next,(i._act||n>=i._start)&&i._ts&&u!==i){if(i.parent!==this)return this.render(t,e,r);if(i.render(i._ts>0?(n-i._start)*i._ts:(i._dirty?i.totalDuration():i._tDur)+(n-i._start)*i._ts,e,r),n!==this._time||!this._ts&&!h){u=0,s&&(v+=this._zTime=-1e-8);break}}i=s}else{i=this._last;for(var b=t<0?t:n;i;){if(s=i._prev,(i._act||b<=i._end)&&i._ts&&u!==i){if(i.parent!==this)return this.render(t,e,r);if(i.render(i._ts>0?(b-i._start)*i._ts:(i._dirty?i.totalDuration():i._tDur)+(b-i._start)*i._ts,e,r),n!==this._time||!this._ts&&!h){u=0,s&&(v+=this._zTime=b?-1e-8:J);break}}i=s}}if(u&&!e&&(this.pause(),u.render(n>=m?0:-1e-8)._zTime=n>=m?1:-1,this._ts))return this._start=c,ue(this),this.render(t,e,r);this._onUpdate&&!e&&Re(this,"onUpdate",!0),(v===g&&g>=this.totalDuration()||!v&&m)&&(c!==this._start&&Math.abs(l)===Math.abs(this._ts)||this._lock||((t||!_)&&(v===g&&this._ts>0||!v&&this._ts<0)&&re(this,1),e||t<0&&!m||!v&&!m||(Re(this,v===g?"onComplete":"onReverseComplete",!0),this._prom&&!(v0)&&this._prom())))}return this},r.add=function(t,e){var r=this;if(ht(e)||(e=ye(this,e)),!(t instanceof or)){if(mt(t))return t.forEach((function(t){return r.add(t,e)})),this;if(at(t))return this.addLabel(t,e);if(!ot(t))return this;t=_r.delayedCall(0,t)}return this!==t?pe(this,t,e):this},r.getChildren=function(t,e,r,n){void 0===t&&(t=!0),void 0===e&&(e=!0),void 0===r&&(r=!0),void 0===n&&(n=-K);for(var i=[],s=this._first;s;)s._start>=n&&(s instanceof _r?e&&i.push(s):(r&&i.push(s),t&&i.push.apply(i,s.getChildren(!0,e,r)))),s=s._next;return i},r.getById=function(t){for(var e=this.getChildren(1,1,1),r=e.length;r--;)if(e[r].vars.id===t)return e[r]},r.remove=function(t){return at(t)?this.removeLabel(t):ot(t)?this.killTweensOf(t):(ee(this,t),t===this._recent&&(this._recent=this._last),ne(this))},r.totalTime=function(e,r){return arguments.length?(this._forcing=1,!this._dp&&this._ts&&(this._start=qt(Ge.time-(this._ts>0?e/this._ts:(this.totalDuration()-e)/-this._ts))),t.prototype.totalTime.call(this,e,r),this._forcing=0,this):this._tTime},r.addLabel=function(t,e){return this.labels[t]=ye(this,e),this},r.removeLabel=function(t){return delete this.labels[t],this},r.addPause=function(t,e,r){var n=_r.delayedCall(0,e||St,r);return n.data="isPause",this._hasPause=1,pe(this,n,ye(this,t))},r.removePause=function(t){var e=this._first;for(t=ye(this,t);e;)e._start===t&&"isPause"===e.data&&re(e),e=e._next},r.killTweensOf=function(t,e,r){for(var n=this.getTweensOf(t,r),i=n.length;i--;)ur!==n[i]&&n[i].kill(t,e);return this},r.getTweensOf=function(t,e){for(var r,n=[],i=Ae(t),s=this._first,a=ht(e);s;)s instanceof _r?Yt(s._targets,i)&&(a?(!ur||s._initted&&s._ts)&&s.globalTime(0)<=e&&s.globalTime(s.totalDuration())>e:!e||s.isActive())&&n.push(s):(r=s.getTweensOf(i,e)).length&&n.push.apply(n,r),s=s._next;return n},r.tweenTo=function(t,e){e=e||{};var r=this,n=ye(r,t),i=e,s=i.startAt,a=i.onStart,o=i.onStartParams,h=i.immediateRender,u=_r.to(r,Zt({ease:"none",lazy:!1,immediateRender:!1,time:n,overwrite:"auto",duration:e.duration||Math.abs((n-(s&&"time"in s?s.time:r._time))/r.timeScale())||J,onStart:function(){r.pause();var t=e.duration||Math.abs((n-r._time)/r.timeScale());u._dur!==t&&ge(u,t,0,1).render(u._time,!0,!0),a&&a.apply(u,o||[])}},e));return h?u.render(0):u},r.tweenFromTo=function(t,e,r){return this.tweenTo(e,Zt({startAt:{time:ye(this,t)}},r))},r.recent=function(){return this._recent},r.nextLabel=function(t){return void 0===t&&(t=this._time),ke(this,ye(this,t))},r.previousLabel=function(t){return void 0===t&&(t=this._time),ke(this,ye(this,t),1)},r.currentLabel=function(t){return arguments.length?this.seek(t,!0):this.previousLabel(this._time+J)},r.shiftChildren=function(t,e,r){void 0===r&&(r=0);for(var n,i=this._first,s=this.labels;i;)i._start>=r&&(i._start+=t,i._end+=t),i=i._next;if(e)for(n in s)s[n]>=r&&(s[n]+=t);return ne(this)},r.invalidate=function(){var e=this._first;for(this._lock=0;e;)e.invalidate(),e=e._next;return t.prototype.invalidate.call(this)},r.clear=function(t){void 0===t&&(t=!0);for(var e,r=this._first;r;)e=r._next,this.remove(r),r=e;return this._dp&&(this._time=this._tTime=this._pTime=0),t&&(this.labels={}),ne(this)},r.totalDuration=function(t){var e,r,n,i=0,s=this,a=s._last,o=K;if(arguments.length)return s.timeScale((s._repeat<0?s.duration():s.totalDuration())/(s.reversed()?-t:t));if(s._dirty){for(n=s.parent;a;)e=a._prev,a._dirty&&a.totalDuration(),(r=a._start)>o&&s._sort&&a._ts&&!s._lock?(s._lock=1,pe(s,a,r-a._delay,1)._lock=0):o=r,r<0&&a._ts&&(i-=r,(!n&&!s._dp||n&&n.smoothChildTiming)&&(s._start+=r/s._ts,s._time-=r,s._tTime-=r),s.shiftChildren(-r,!1,-Infinity),o=0),a._end>i&&a._ts&&(i=a._end),a=e;ge(s,s===M&&s._time>i?s._time:i,1,1),s._dirty=0}return s._tDur},e.updateRoot=function(t){if(M._ts&&(Vt(M,he(t,M)),C=Ge.frame),Ge.frame>=Rt){Rt+=$.autoSleep||120;var e=M._first;if((!e||!e._ts)&&$.autoSleep&&Ge._listeners.length<2){for(;e&&!e._ts;)e=e._next;e||Ge.sleep()}}},e}(or);Zt(hr.prototype,{_lock:0,_hasPause:0,_forcing:0});var ur,lr=function(t,e,r,n,i,s,a){var o,h,u,l,c,p,f,d,m=new Lr(this._pt,t,e,0,1,Ar,null,i),g=0,_=0;for(m.b=r,m.e=n,r+="",(f=~(n+="").indexOf("random("))&&(n=De(n)),s&&(s(d=[r,n],t,e),r=d[0],n=d[1]),h=r.match(yt)||[];o=yt.exec(n);)l=o[0],c=n.substring(g,o.index),u?u=(u+1)%5:"rgba("===c.substr(-5)&&(u=1),l!==h[_++]&&(p=parseFloat(h[_-1])||0,m._pt={_next:m._pt,p:c||1===_?c:",",s:p,c:"="===l.charAt(1)?parseFloat(l.substr(2))*("-"===l.charAt(0)?-1:1):parseFloat(l)-p,m:u&&u<4?Math.round:0},g=yt.lastIndex);return m.c=g0)S||(e._startAt=0);else if(P&&!(r<0&&L))return void(r&&(e._zTime=r))}else if(O&&P)if(L)!S&&(e._startAt=0);else if(r&&(y=!1),s=Zt({overwrite:!1,data:"isFromStart",lazy:y&&ct(x),immediateRender:y,stagger:0,parent:z},n),d&&(s[l.prop]=d),re(e._startAt=_r.set(D,s)),y){if(!r)return}else t(e._startAt,J);for(e._pt=0,x=P&&ct(x)||x&&!P,i=0;i")}));else{if(u=C.length,p=v?Ee(v):St,lt(v))for(l in v)~mr.indexOf(l)&&(f||(f={}),f[l]=v[l]);for(o=0;of-J&&t>=0?f:td&&(n=d)),(h=this._yoyo&&1&s)&&(c=this._yEase,n=d-n),o=oe(this._tTime,a),n===p&&!r&&this._initted)return this;s!==o&&(l&&this._yEase&&tr(l,h),!this.vars.repeatRefresh||h||this._lock||(this._lock=r=1,this.render(qt(a*s),!0).invalidate()._lock=0))}if(!this._initted){if(de(this,t<0?t:n,r,e))return this._tTime=0,this;if(d!==this._dur)return this.render(t,e,r)}for(this._tTime=m,this._time=n,!this._act&&this._ts&&(this._act=1,this._lazy=0),this.ratio=u=(c||this._ease)(n/d),this._from&&(this.ratio=u=1-u),n&&!p&&!e&&Re(this,"onStart"),i=this._pt;i;)i.r(u,i.d),i=i._next;l&&l.render(t<0?t:!n&&h?-1e-8:l._dur*u,e,r)||this._startAt&&(this._zTime=t),this._onUpdate&&!e&&(t<0&&this._startAt&&this._startAt.render(t,!0,r),Re(this,"onUpdate")),this._repeat&&s!==o&&this.vars.onRepeat&&!e&&this.parent&&Re(this,"onRepeat"),m!==this._tDur&&m||this._tTime!==m||(t<0&&this._startAt&&!this._onUpdate&&this._startAt.render(t,!0,!0),(t||!d)&&(m===this._tDur&&this._ts>0||!m&&this._ts<0)&&re(this,1),e||t<0&&!p||!m&&!p||(Re(this,m===f?"onComplete":"onReverseComplete",!0),this._prom&&!(m0)&&this._prom()))}}else!function(t,e,r,n){var i,s,a,o=t.ratio,h=e<0||!e&&(!t._start&&me(t)||(t._ts<0||t._dp._ts<0)&&"isFromStart"!==t.data&&"isStart"!==t.data)?0:1,u=t._rDelay,l=0;if(u&&t._repeat&&(l=we(0,t._tDur,e),s=oe(l,u),a=oe(t._tTime,u),t._yoyo&&1&s&&(h=1-h),s!==a&&(o=1-h,t.vars.repeatRefresh&&t._initted&&t.invalidate())),h!==o||n||t._zTime===J||!e&&t._zTime){if(!t._initted&&de(t,e,n,r))return;for(a=t._zTime,t._zTime=e||(r?J:0),r||(r=e&&!a),t.ratio=h,t._from&&(h=1-h),t._time=0,t._tTime=l,r||Re(t,"onStart"),i=t._pt;i;)i.r(h,i.d),i=i._next;t._startAt&&e<0&&t._startAt.render(e,!0,!0),t._onUpdate&&!r&&Re(t,"onUpdate"),l&&t._repeat&&!r&&t.parent&&Re(t,"onRepeat"),(e>=t._tDur||e<0)&&t.ratio===h&&(h&&re(t,1),r||(Re(t,h?"onComplete":"onReverseComplete",!0),t._prom&&t._prom()))}else t._zTime||(t._zTime=e)}(this,t,e,r);return this},r.targets=function(){return this._targets},r.invalidate=function(){return this._pt=this._op=this._startAt=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline&&this.timeline.invalidate(),t.prototype.invalidate.call(this)},r.kill=function(t,e){if(void 0===e&&(e="all"),!(t||e&&"all"!==e))return this._lazy=this._pt=0,this.parent?je(this):this;if(this.timeline){var r=this.timeline.totalDuration();return this.timeline.killTweensOf(t,e,ur&&!0!==ur.vars.overwrite)._first||je(this),this.parent&&r!==this.timeline.totalDuration()&&ge(this,this._dur*this.timeline._tDur/r,0,1),this}var n,i,s,a,o,h,u,l=this._targets,c=t?Ae(t):l,p=this._ptLookup,f=this._pt;if((!e||"all"===e)&&function(t,e){for(var r=t.length,n=r===e.length;n&&r--&&t[r]===e[r];);return r<0}(l,c))return"all"===e&&(this._pt=0),je(this);for(n=this._op=this._op||[],"all"!==e&&(at(e)&&(o={},Ut(e,(function(t){return o[t]=1})),e=o),e=function(t,e){var r,n,i,s,a=t[0]?Bt(t[0]).harness:0,o=a&&a.aliases;if(!o)return e;for(n in r=Qt({},e),o)if(n in r)for(i=(s=o[n].split(",")).length;i--;)r[s[i]]=r[n];return r}(l,e)),u=l.length;u--;)if(~c.indexOf(l[u]))for(o in i=p[u],"all"===e?(n[u]=e,a=i,s={}):(s=n[u]=n[u]||{},a=e),a)(h=i&&i[o])&&("kill"in h.d&&!0!==h.d.kill(o)||ee(this,h,"_pt"),delete i[o]),"all"!==s&&(s[o]=1);return this._initted&&!this._pt&&f&&je(this),this},e.to=function(t,r){return new e(t,r,arguments[2])},e.from=function(t,r){return new e(t,Xt(arguments,1))},e.delayedCall=function(t,r,n,i){return new e(r,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:t,onComplete:r,onReverseComplete:r,onCompleteParams:n,onReverseCompleteParams:n,callbackScope:i})},e.fromTo=function(t,r,n){return new e(t,Xt(arguments,2))},e.set=function(t,r){return r.duration=0,r.repeatDelay||(r.repeat=0),new e(t,r)},e.killTweensOf=function(t,e,r){return M.killTweensOf(t,e,r)},e}(or);Zt(_r.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0}),Ut("staggerTo,staggerFrom,staggerFromTo",(function(t){_r[t]=function(){var e=new hr,r=Me.call(arguments,0);return r.splice("staggerFromTo"===t?5:4,0,0),e[t].apply(e,r)}}));var vr=function(t,e,r){return t[e]=r},yr=function(t,e,r){return t[e](r)},xr=function(t,e,r,n){return t[e](n.fp,r)},wr=function(t,e,r){return t.setAttribute(e,r)},br=function(t,e){return ot(t[e])?yr:ut(t[e])&&t.setAttribute?wr:vr},Mr=function(t,e){return e.set(e.t,e.p,Math.round(1e4*(e.s+e.c*t))/1e4,e)},Tr=function(t,e){return e.set(e.t,e.p,!!(e.s+e.c*t),e)},Ar=function(t,e){var r=e._pt,n="";if(!t&&e.b)n=e.b;else if(1===t&&e.e)n=e.e;else{for(;r;)n=r.p+(r.m?r.m(r.s+r.c*t):Math.round(1e4*(r.s+r.c*t))/1e4)+n,r=r._next;n+=e.c}e.set(e.t,e.p,n,e)},Or=function(t,e){for(var r=e._pt;r;)r.r(t,r.d),r=r._next},Er=function(t,e,r,n){for(var i,s=this._pt;s;)i=s._next,s.p===n&&s.modifier(t,e,r),s=i},Cr=function(t){for(var e,r,n=this._pt;n;)r=n._next,n.p===t&&!n.op||n.op===t?ee(this,n,"_pt"):n.dep||(e=1),n=r;return!e},Sr=function(t,e,r,n){n.mSet(t,e,n.m.call(n.tween,r,n.mt),n)},Pr=function(t){for(var e,r,n,i,s=t._pt;s;){for(e=s._next,r=n;r&&r.pr>s.pr;)r=r._next;(s._prev=r?r._prev:i)?s._prev._next=s:n=s,(s._next=r)?r._prev=s:i=s,s=e}t._pt=n},Lr=function(){function t(t,e,r,n,i,s,a,o,h){this.t=e,this.s=n,this.c=i,this.p=r,this.r=s||Mr,this.d=a||this,this.set=o||vr,this.pr=h||0,this._next=t,t&&(t._prev=this)}return t.prototype.modifier=function(t,e,r){this.mSet=this.mSet||this.set,this.set=Sr,this.m=t,this.mt=r,this.tween=e},t}();Ut(Ft+"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger",(function(t){return Pt[t]=1})),Mt.TweenMax=Mt.TweenLite=_r,Mt.TimelineLite=Mt.TimelineMax=hr,M=new hr({sortChildren:!1,defaults:Q,autoRemoveChildren:!0,id:"root",smoothChildTiming:!0}),$.stringFilter=Ve;var Dr={registerPlugin:function(){for(var t=arguments.length,e=new Array(t),r=0;r1){var n=t.map((function(t){return Rr.quickSetter(t,e,r)})),i=n.length;return function(t){for(var e=i;e--;)n[e](t)}}t=t[0]||{};var s=zt[e],a=Bt(t),o=a.harness&&(a.harness.aliases||{})[e]||e,h=s?function(e){var n=new s;S._pt=0,n.init(t,r?e+r:e,S,0,[t]),n.render(1,n),S._pt&&Or(1,S)}:a.set(t,o);return s?h:function(e){return h(t,o,r?e+r:e,a,1)}},isTweening:function(t){return M.getTweensOf(t,!0).length>0},defaults:function(t){return t&&t.ease&&(t.ease=er(t.ease,Q.ease)),Kt(Q,t||{})},config:function(t){return Kt($,t||{})},registerEffect:function(t){var e=t.name,r=t.effect,n=t.plugins,i=t.defaults,s=t.extendTimeline;(n||"").split(",").forEach((function(t){return t&&!zt[t]&&!Mt[t]&&Et(e+" effect requires "+t+" plugin.")})),kt[e]=function(t,e,n){return r(Ae(t),Zt(e||{},i),n)},s&&(hr.prototype[e]=function(t,r,n){return this.add(kt[e](t,lt(r)?r:(n=r)&&{},this),n)})},registerEase:function(t,e){Ze[t]=er(e)},parseEase:function(t,e){return arguments.length?er(t,e):Ze},getById:function(t){return M.getById(t)},exportRoot:function(t,e){void 0===t&&(t={});var r,n,i=new hr(t);for(i.smoothChildTiming=ct(t.smoothChildTiming),M.remove(i),i._dp=0,i._time=i._tTime=M._time,r=M._first;r;)n=r._next,!e&&!r._dur&&r instanceof _r&&r.vars.onComplete===r._targets[0]||pe(i,r,r._start-r._delay),r=n;return pe(M,i,0),i},utils:{wrap:function t(e,r,n){var i=r-e;return mt(e)?Le(e,t(0,e.length),r):xe(n,(function(t){return(i+(t-e)%i)%i+e}))},wrapYoyo:function t(e,r,n){var i=r-e,s=2*i;return mt(e)?Le(e,t(0,e.length-1),r):xe(n,(function(t){return e+((t=(s+(t-e)%s)%s||0)>i?s-t:t)}))},distribute:Ee,random:Pe,snap:Se,normalize:function(t,e,r){return ze(t,e,0,1,r)},getUnit:be,clamp:function(t,e,r){return xe(r,(function(r){return we(t,e,r)}))},splitColor:Ue,toArray:Ae,mapRange:ze,pipe:function(){for(var t=arguments.length,e=new Array(t),r=0;r=0?mn[i]:"")+t},_n=function(){"undefined"!=typeof window&&window.document&&(jr=window,Fr=jr.document,Ir=Fr.documentElement,Nr=fn("div")||{style:{}},Ur=fn("div"),cn=gn(cn),pn=cn+"Origin",Nr.style.cssText="border-width:0;line-height:0;position:absolute;padding:0",Yr=!!gn("perspective"),Br=1)},vn=function t(e){var r,n=fn("svg",this.ownerSVGElement&&this.ownerSVGElement.getAttribute("xmlns")||"http://www.w3.org/2000/svg"),i=this.parentNode,s=this.nextSibling,a=this.style.cssText;if(Ir.appendChild(n),n.appendChild(this),this.style.display="block",e)try{r=this.getBBox(),this._gsapBBox=this.getBBox,this.getBBox=t}catch(t){}else this._gsapBBox&&(r=this._gsapBBox());return i&&(s?i.insertBefore(this,s):i.appendChild(this)),Ir.removeChild(n),this.style.cssText=a,r},yn=function(t,e){for(var r=e.length;r--;)if(t.hasAttribute(e[r]))return t.getAttribute(e[r])},xn=function(t){var e;try{e=t.getBBox()}catch(r){e=vn.call(t,!0)}return e&&(e.width||e.height)||t.getBBox===vn||(e=vn.call(t,!0)),!e||e.width||e.x||e.y?e:{x:+yn(t,["x","cx","x1"])||0,y:+yn(t,["y","cy","y1"])||0,width:0,height:0}},wn=function(t){return!(!t.getCTM||t.parentNode&&!t.ownerSVGElement||!xn(t))},bn=function(t,e){if(e){var r=t.style;e in Xr&&e!==pn&&(e=cn),r.removeProperty?("ms"!==e.substr(0,2)&&"webkit"!==e.substr(0,6)||(e="-"+e),r.removeProperty(e.replace(Hr,"-$1").toLowerCase())):r.removeAttribute(e)}},Mn=function(t,e,r,n,i,s){var a=new Lr(t._pt,e,r,0,1,s?nn:rn);return t._pt=a,a.b=n,a.e=i,t._props.push(r),a},Tn={deg:1,rad:1,turn:1},An=function t(e,r,n,i){var s,a,o,h,u=parseFloat(n)||0,l=(n+"").trim().substr((u+"").length)||"px",c=Nr.style,p=Zr.test(r),f="svg"===e.tagName.toLowerCase(),d=(f?"client":"offset")+(p?"Width":"Height"),m=100,g="px"===i,_="%"===i;return i===l||!u||Tn[i]||Tn[l]?u:("px"!==l&&!g&&(u=t(e,r,n,"px")),h=e.getCTM&&wn(e),!_&&"%"!==l||!Xr[r]&&!~r.indexOf("adius")?(c[p?"width":"height"]=m+(g?l:i),a=~r.indexOf("adius")||"em"===i&&e.appendChild&&!f?e:e.parentNode,h&&(a=(e.ownerSVGElement||{}).parentNode),a&&a!==Fr&&a.appendChild||(a=Fr.body),(o=a._gsap)&&_&&o.width&&p&&o.time===Ge.time?qt(u/o.width*m):((_||"%"===l)&&(c.position=dn(e,"position")),a===e&&(c.position="static"),a.appendChild(Nr),s=Nr[d],a.removeChild(Nr),c.position="absolute",p&&_&&((o=Bt(a)).time=Ge.time,o.width=a[d]),qt(g?s*u/m:s&&u?m/s*u:0))):(s=h?e.getBBox()[p?"width":"height"]:e[d],qt(_?u/s*m:u/100*s)))},On=function(t,e,r,n){var i;return Br||_n(),e in Qr&&"transform"!==e&&~(e=Qr[e]).indexOf(",")&&(e=e.split(",")[0]),Xr[e]&&"transform"!==e?(i=In(t,n),i="transformOrigin"!==e?i[e]:Bn(dn(t,pn))+" "+i.zOrigin+"px"):(!(i=t.style[e])||"auto"===i||n||~(i+"").indexOf("calc("))&&(i=Ln[e]&&Ln[e](t,e,r)||dn(t,e)||Nt(t,e)||("opacity"===e?1:0)),r&&!~(i+"").trim().indexOf(" ")?An(t,e,i,r)+r:i},En=function(t,e,r,n){if(!r||"none"===r){var i=gn(e,t,1),s=i&&dn(t,i,1);s&&s!==r?(e=i,r=s):"borderColor"===e&&(r=dn(t,"borderTopColor"))}var a,o,h,u,l,c,p,f,d,m,g,_,v=new Lr(this._pt,t.style,e,0,1,Ar),y=0,x=0;if(v.b=r,v.e=n,r+="","auto"==(n+="")&&(t.style[e]=n,n=dn(t,e)||n,t.style[e]=r),Ve(a=[r,n]),n=a[1],h=(r=a[0]).match(vt)||[],(n.match(vt)||[]).length){for(;o=vt.exec(n);)p=o[0],d=n.substring(y,o.index),l?l=(l+1)%5:"rgba("!==d.substr(-5)&&"hsla("!==d.substr(-5)||(l=1),p!==(c=h[x++]||"")&&(u=parseFloat(c)||0,g=c.substr((u+"").length),(_="="===p.charAt(1)?+(p.charAt(0)+"1"):0)&&(p=p.substr(2)),f=parseFloat(p),m=p.substr((f+"").length),y=vt.lastIndex-m.length,m||(m=m||$.units[e]||g,y===n.length&&(n+=m,v.e+=m)),g!==m&&(u=An(t,e,c,m)||0),v._pt={_next:v._pt,p:d||1===x?d:",",s:u,c:_?_*f:f-u,m:l&&l<4||"zIndex"===e?Math.round:0});v.c=y-1;)r=o[i],Xr[r]&&(n=1,r="transformOrigin"===r?pn:cn),bn(s,r);n&&(bn(s,cn),h&&(h.svg&&s.removeAttribute("transform"),In(s,1),h.uncache=1))}},Ln={clearProps:function(t,e,r,n,i){if("isFromStart"!==i.data){var s=t._pt=new Lr(t._pt,e,r,0,0,Pn);return s.u=n,s.pr=-10,s.tween=i,t._props.push(r),1}}},Dn=[1,0,0,1,0,0],zn={},kn=function(t){return"matrix(1, 0, 0, 1, 0, 0)"===t||"none"===t||!t},Rn=function(t){var e=dn(t,cn);return kn(e)?Dn:e.substr(7).match(_t).map(qt)},jn=function(t,e){var r,n,i,s,a=t._gsap||Bt(t),o=t.style,h=Rn(t);return a.svg&&t.getAttribute("transform")?"1,0,0,1,0,0"===(h=[(i=t.transform.baseVal.consolidate().matrix).a,i.b,i.c,i.d,i.e,i.f]).join(",")?Dn:h:(h!==Dn||t.offsetParent||t===Ir||a.svg||(i=o.display,o.display="block",(r=t.parentNode)&&t.offsetParent||(s=1,n=t.nextSibling,Ir.appendChild(t)),h=Rn(t),i?o.display=i:bn(t,"display"),s&&(n?r.insertBefore(t,n):r?r.appendChild(t):Ir.removeChild(t))),e&&h.length>6?[h[0],h[1],h[4],h[5],h[12],h[13]]:h)},Fn=function(t,e,r,n,i,s){var a,o,h,u=t._gsap,l=i||jn(t,!0),c=u.xOrigin||0,p=u.yOrigin||0,f=u.xOffset||0,d=u.yOffset||0,m=l[0],g=l[1],_=l[2],v=l[3],y=l[4],x=l[5],w=e.split(" "),b=parseFloat(w[0])||0,M=parseFloat(w[1])||0;r?l!==Dn&&(o=m*v-g*_)&&(h=b*(-g/o)+M*(m/o)-(m*x-g*y)/o,b=b*(v/o)+M*(-_/o)+(_*x-v*y)/o,M=h):(b=(a=xn(t)).x+(~w[0].indexOf("%")?b/100*a.width:b),M=a.y+(~(w[1]||w[0]).indexOf("%")?M/100*a.height:M)),n||!1!==n&&u.smooth?(y=b-c,x=M-p,u.xOffset=f+(y*m+x*_)-y,u.yOffset=d+(y*g+x*v)-x):u.xOffset=u.yOffset=0,u.xOrigin=b,u.yOrigin=M,u.smooth=!!n,u.origin=e,u.originIsAbsolute=!!r,t.style[pn]="0px 0px",s&&(Mn(s,u,"xOrigin",c,b),Mn(s,u,"yOrigin",p,M),Mn(s,u,"xOffset",f,u.xOffset),Mn(s,u,"yOffset",d,u.yOffset)),t.setAttribute("data-svg-origin",b+" "+M)},In=function(t,e){var r=t._gsap||new ar(t);if("x"in r&&!e&&!r.uncache)return r;var n,i,s,a,o,h,u,l,c,p,f,d,m,g,_,v,y,x,w,b,M,T,A,O,E,C,S,P,L,D,z,k,R=t.style,j=r.scaleX<0,F="px",I="deg",B=dn(t,pn)||"0";return n=i=s=h=u=l=c=p=f=0,a=o=1,r.svg=!(!t.getCTM||!wn(t)),g=jn(t,r.svg),r.svg&&(O=!r.uncache&&t.getAttribute("data-svg-origin"),Fn(t,O||B,!!O||r.originIsAbsolute,!1!==r.smooth,g)),d=r.xOrigin||0,m=r.yOrigin||0,g!==Dn&&(x=g[0],w=g[1],b=g[2],M=g[3],n=T=g[4],i=A=g[5],6===g.length?(a=Math.sqrt(x*x+w*w),o=Math.sqrt(M*M+b*b),h=x||w?Gr(w,x)*Wr:0,(c=b||M?Gr(b,M)*Wr+h:0)&&(o*=Math.cos(c*Vr)),r.svg&&(n-=d-(d*x+m*b),i-=m-(d*w+m*M))):(k=g[6],D=g[7],S=g[8],P=g[9],L=g[10],z=g[11],n=g[12],i=g[13],s=g[14],u=(_=Gr(k,L))*Wr,_&&(O=T*(v=Math.cos(-_))+S*(y=Math.sin(-_)),E=A*v+P*y,C=k*v+L*y,S=T*-y+S*v,P=A*-y+P*v,L=k*-y+L*v,z=D*-y+z*v,T=O,A=E,k=C),l=(_=Gr(-b,L))*Wr,_&&(v=Math.cos(-_),z=M*(y=Math.sin(-_))+z*v,x=O=x*v-S*y,w=E=w*v-P*y,b=C=b*v-L*y),h=(_=Gr(w,x))*Wr,_&&(O=x*(v=Math.cos(_))+w*(y=Math.sin(_)),E=T*v+A*y,w=w*v-x*y,A=A*v-T*y,x=O,T=E),u&&Math.abs(u)+Math.abs(h)>359.9&&(u=h=0,l=180-l),a=qt(Math.sqrt(x*x+w*w+b*b)),o=qt(Math.sqrt(A*A+k*k)),_=Gr(T,A),c=Math.abs(_)>2e-4?_*Wr:0,f=z?1/(z<0?-z:z):0),r.svg&&(O=t.getAttribute("transform"),r.forceCSS=t.setAttribute("transform","")||!kn(dn(t,cn)),O&&t.setAttribute("transform",O))),Math.abs(c)>90&&Math.abs(c)<270&&(j?(a*=-1,c+=h<=0?180:-180,h+=h<=0?180:-180):(o*=-1,c+=c<=0?180:-180)),r.x=n-((r.xPercent=n&&(r.xPercent||(Math.round(t.offsetWidth/2)===Math.round(-n)?-50:0)))?t.offsetWidth*r.xPercent/100:0)+F,r.y=i-((r.yPercent=i&&(r.yPercent||(Math.round(t.offsetHeight/2)===Math.round(-i)?-50:0)))?t.offsetHeight*r.yPercent/100:0)+F,r.z=s+F,r.scaleX=qt(a),r.scaleY=qt(o),r.rotation=qt(h)+I,r.rotationX=qt(u)+I,r.rotationY=qt(l)+I,r.skewX=c+I,r.skewY=p+I,r.transformPerspective=f+F,(r.zOrigin=parseFloat(B.split(" ")[2])||0)&&(R[pn]=Bn(B)),r.xOffset=r.yOffset=0,r.force3D=$.force3D,r.renderTransform=r.svg?Vn:Yr?Wn:Un,r.uncache=0,r},Bn=function(t){return(t=t.split(" "))[0]+" "+t[1]},Nn=function(t,e,r){var n=be(e);return qt(parseFloat(e)+parseFloat(An(t,"x",r+"px",n)))+n},Un=function(t,e){e.z="0px",e.rotationY=e.rotationX="0deg",e.force3D=0,Wn(t,e)},qn="0deg",Yn="0px",Xn=") ",Wn=function(t,e){var r=e||this,n=r.xPercent,i=r.yPercent,s=r.x,a=r.y,o=r.z,h=r.rotation,u=r.rotationY,l=r.rotationX,c=r.skewX,p=r.skewY,f=r.scaleX,d=r.scaleY,m=r.transformPerspective,g=r.force3D,_=r.target,v=r.zOrigin,y="",x="auto"===g&&t&&1!==t||!0===g;if(v&&(l!==qn||u!==qn)){var w,b=parseFloat(u)*Vr,M=Math.sin(b),T=Math.cos(b);b=parseFloat(l)*Vr,w=Math.cos(b),s=Nn(_,s,M*w*-v),a=Nn(_,a,-Math.sin(b)*-v),o=Nn(_,o,T*w*-v+v)}m!==Yn&&(y+="perspective("+m+Xn),(n||i)&&(y+="translate("+n+"%, "+i+"%) "),(x||s!==Yn||a!==Yn||o!==Yn)&&(y+=o!==Yn||x?"translate3d("+s+", "+a+", "+o+") ":"translate("+s+", "+a+Xn),h!==qn&&(y+="rotate("+h+Xn),u!==qn&&(y+="rotateY("+u+Xn),l!==qn&&(y+="rotateX("+l+Xn),c===qn&&p===qn||(y+="skew("+c+", "+p+Xn),1===f&&1===d||(y+="scale("+f+", "+d+Xn),_.style[cn]=y||"translate(0, 0)"},Vn=function(t,e){var r,n,i,s,a,o=e||this,h=o.xPercent,u=o.yPercent,l=o.x,c=o.y,p=o.rotation,f=o.skewX,d=o.skewY,m=o.scaleX,g=o.scaleY,_=o.target,v=o.xOrigin,y=o.yOrigin,x=o.xOffset,w=o.yOffset,b=o.forceCSS,M=parseFloat(l),T=parseFloat(c);p=parseFloat(p),f=parseFloat(f),(d=parseFloat(d))&&(f+=d=parseFloat(d),p+=d),p||f?(p*=Vr,f*=Vr,r=Math.cos(p)*m,n=Math.sin(p)*m,i=Math.sin(p-f)*-g,s=Math.cos(p-f)*g,f&&(d*=Vr,a=Math.tan(f-d),i*=a=Math.sqrt(1+a*a),s*=a,d&&(a=Math.tan(d),r*=a=Math.sqrt(1+a*a),n*=a)),r=qt(r),n=qt(n),i=qt(i),s=qt(s)):(r=m,s=g,n=i=0),(M&&!~(l+"").indexOf("px")||T&&!~(c+"").indexOf("px"))&&(M=An(_,"x",l,"px"),T=An(_,"y",c,"px")),(v||y||x||w)&&(M=qt(M+v-(v*r+y*i)+x),T=qt(T+y-(v*n+y*s)+w)),(h||u)&&(a=_.getBBox(),M=qt(M+h/100*a.width),T=qt(T+u/100*a.height)),a="matrix("+r+","+n+","+i+","+s+","+M+","+T+")",_.setAttribute("transform",a),b&&(_.style[cn]=a)},Gn=function(t,e,r,n,i,s){var a,o,h=360,u=at(i),l=parseFloat(i)*(u&&~i.indexOf("rad")?Wr:1),c=s?l*s:l-n,p=n+c+"deg";return u&&("short"===(a=i.split("_")[1])&&(c%=h)!=c%180&&(c+=c<0?h:-360),"cw"===a&&c<0?c=(c+36e9)%h-~~(c/h)*h:"ccw"===a&&c>0&&(c=(c-36e9)%h-~~(c/h)*h)),t._pt=o=new Lr(t._pt,e,r,n,c,Jr),o.e=p,o.u="deg",t._props.push(r),o},Hn=function(t,e,r){var n,i,s,a,o,h,u,l=Ur.style,c=r._gsap;for(i in l.cssText=getComputedStyle(r).cssText+";position:absolute;display:block;",l[cn]=e,Fr.body.appendChild(Ur),n=In(Ur,1),Xr)(s=c[i])!==(a=n[i])&&"perspective,force3D,transformOrigin,svgOrigin".indexOf(i)<0&&(o=be(s)!==(u=be(a))?An(r,i,s,u):parseFloat(s),h=parseFloat(a),t._pt=new Lr(t._pt,c,i,o,h-o,Kr),t._pt.u=u||0,t._props.push(i));Fr.body.removeChild(Ur)};Ut("padding,margin,Width,Radius",(function(t,e){var r="Top",n="Right",i="Bottom",s="Left",a=(e<3?[r,n,i,s]:[r+s,r+n,i+n,i+s]).map((function(r){return e<2?t+r:"border"+r+t}));Ln[e>1?"border"+t:t]=function(t,e,r,n,i){var s,o;if(arguments.length<4)return s=a.map((function(e){return On(t,e,r)})),5===(o=s.join(" ")).split(s[0]).length?s[0]:o;s=(n+"").split(" "),o={},a.forEach((function(t,e){return o[t]=s[e]=s[e]||s[(e-1)/2|0]})),t.init(e,o,i)}}));var Zn,$n,Qn={name:"css",register:_n,targetTest:function(t){return t.style&&t.nodeType},init:function(t,e,r,n,i){var s,a,o,h,u,l,c,p,f,d,m,g,_,v,y,x=this._props,w=t.style,b=r.vars.startAt;for(c in Br||_n(),e)if("autoRound"!==c&&(a=e[c],!zt[c]||!pr(c,e,r,n,t,i)))if(u=typeof a,l=Ln[c],"function"===u&&(u=typeof(a=a.call(r,n,t,i))),"string"===u&&~a.indexOf("random(")&&(a=De(a)),l)l(this,t,c,a,r)&&(y=1);else if("--"===c.substr(0,2))s=(getComputedStyle(t).getPropertyValue(c)+"").trim(),a+="",p=be(s),(f=be(a))?p!==f&&(s=An(t,c,s,f)+f):p&&(a+=p),this.add(w,"setProperty",s,a,n,i,0,0,c);else if("undefined"!==u){if(b&&c in b?(s="function"==typeof b[c]?b[c].call(r,n,t,i):b[c],c in $.units&&!be(s)&&(s+=$.units[c]),"="===(s+"").charAt(1)&&(s=On(t,c))):s=On(t,c),h=parseFloat(s),(d="string"===u&&"="===a.charAt(1)?+(a.charAt(0)+"1"):0)&&(a=a.substr(2)),o=parseFloat(a),c in Qr&&("autoAlpha"===c&&(1===h&&"hidden"===On(t,"visibility")&&o&&(h=0),Mn(this,w,"visibility",h?"inherit":"hidden",o?"inherit":"hidden",!o)),"scale"!==c&&"transform"!==c&&~(c=Qr[c]).indexOf(",")&&(c=c.split(",")[0])),m=c in Xr)if(g||((_=t._gsap).renderTransform&&!e.parseTransform||In(t,e.parseTransform),v=!1!==e.smoothOrigin&&_.smooth,(g=this._pt=new Lr(this._pt,w,cn,0,1,_.renderTransform,_,0,-1)).dep=1),"scale"===c)this._pt=new Lr(this._pt,_,"scaleY",_.scaleY,d?d*o:o-_.scaleY),x.push("scaleY",c),c+="X";else{if("transformOrigin"===c){a=Sn(a),_.svg?Fn(t,a,0,v,0,this):((f=parseFloat(a.split(" ")[2])||0)!==_.zOrigin&&Mn(this,_,"zOrigin",_.zOrigin,f),Mn(this,w,c,Bn(s),Bn(a)));continue}if("svgOrigin"===c){Fn(t,a,1,v,0,this);continue}if(c in zn){Gn(this,_,c,h,a,d);continue}if("smoothOrigin"===c){Mn(this,_,"smooth",_.smooth,a);continue}if("force3D"===c){_[c]=a;continue}if("transform"===c){Hn(this,a,t);continue}}else c in w||(c=gn(c)||c);if(m||(o||0===o)&&(h||0===h)&&!$r.test(a)&&c in w)o||(o=0),(p=(s+"").substr((h+"").length))!==(f=be(a)||(c in $.units?$.units[c]:p))&&(h=An(t,c,s,f)),this._pt=new Lr(this._pt,m?_:w,c,h,d?d*o:o-h,m||"px"!==f&&"zIndex"!==c||!1===e.autoRound?Kr:en),this._pt.u=f||0,p!==f&&(this._pt.b=s,this._pt.r=tn);else if(c in w)En.call(this,t,c,s,a);else{if(!(c in t)){Ot(c,a);continue}this.add(t,c,t[c],a,n,i)}x.push(c)}y&&Pr(this)},get:On,aliases:Qr,getSetter:function(t,e,r){var n=Qr[e];return n&&n.indexOf(",")<0&&(e=n),e in Xr&&e!==pn&&(t._gsap.x||On(t,"x"))?r&&qr===r?"scale"===e?hn:on:(qr=r||{})&&("scale"===e?un:ln):t.style&&!ut(t.style[e])?sn:~e.indexOf("-")?an:br(t,e)},core:{_removeProperty:bn,_getMatrix:jn}};Rr.utils.checkPrefix=gn,$n=Ut("x,y,z,scale,scaleX,scaleY,xPercent,yPercent"+","+(Zn="rotation,rotationX,rotationY,skewX,skewY")+",transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective",(function(t){Xr[t]=1})),Ut(Zn,(function(t){$.units[t]="deg",zn[t]=1})),Qr[$n[13]]="x,y,z,scale,scaleX,scaleY,xPercent,yPercent,"+Zn,Ut("0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY",(function(t){var e=t.split(":");Qr[e[1]]=$n[e[0]]})),Ut("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective",(function(t){$.units[t]="px"})),Rr.registerPlugin(Qn);var Kn=Rr.registerPlugin(Qn)||Rr;Kn.core.Tween;const Jn=class extends(c()){constructor({classes:t,element:r,elements:n,isScrollable:i=!0}){super(),e()(this),this.classes={...t},this.selectors={element:r,elements:{animationsParagraphs:'[data-animation="paragraph"]',...n}},this.scroll={ease:.07,position:0,current:0,target:0,limit:0},this.isScrollable=i,this.transformPrefix=m()("transform")}create(){this.animations=[],this.element=document.querySelector(this.selectors.element),this.elements={},h()(this.selectors.elements,((t,e)=>{t instanceof window.HTMLElement||t instanceof window.NodeList||Array.isArray(t)?this.elements[e]=t:(this.elements[e]=this.element.querySelectorAll(t),0===this.elements[e].length?this.elements[e]=null:1===this.elements[e].length&&(this.elements[e]=this.element.querySelector(t)))})),this.isScrollable&&(this.scroll={ease:.07,position:0,current:0,target:0,limit:this.elements.wrapper.clientHeight-window.innerHeight}),this.createAnimations()}createAnimations(){var t,e;this.paragraphs=(e=t=>new class extends class{constructor({element:t,elements:e}){const{animationDelay:r,animationTarget:n}=t.dataset;this.delay=r,this.element=t,this.elements=e,this.target=n?t.closest(n):t,this.transformPrefix=m()("transform"),this.isVisible=!1,"IntersectionObserver"in window?(this.createObserver(),this.animateOut()):this.animateIn()}createObserver(){this.observer=new window.IntersectionObserver((t=>{t.forEach((t=>{!this.isVisible&&t.isIntersecting&&this.animateIn()}))})).observe(this.target)}animateIn(){this.isVisible=!0}animateOut(){this.isVisible=!1}}{constructor({element:t}){const e=[],r=t.querySelectorAll("h1, h2, p");0!==r.length?h()(r,(t=>{g({element:t}),g({element:t}),e.push(...t.querySelectorAll("span span"))})):(g({element:t}),g({element:t}),e.push(...t.querySelectorAll("span span"))),super({element:t,elements:{lines:e}}),this.onResize(),"IntersectionObserver"in window&&this.animateOut()}animateIn(){super.animateIn(),h()(this.lines,((t,e)=>{h()(t,(t=>{t.style.transition=`transform 1.5s ${.5+.1*e}s ease`,t.style[this.transformPrefix]="translateY(0)"}))}))}animateOut(){super.animateOut(),h()(this.lines,(t=>{h()(t,(t=>{t.style[this.transformPrefix]="translateY(100%)"}))}))}onResize(){this.lines=function(t){const e=[];let r=[],n=t[0].offsetTop;return h()(t,((i,s)=>{i.offsetTop===n&&r.push(i),i.offsetTop!==n&&(e.push(r),r=[],r.push(i),n=i.offsetTop),s+1===t.length&&e.push(r)})),e}(this.elements.lines)}}({element:t}),(t=this.elements.animationsParagraphs)instanceof window.HTMLElement?[e(t)]:y()(t,e)),this.animations.push(...this.paragraphs)}reset(){this.scroll={ease:.07,position:0,current:0,target:0,limit:0}}set(t){this.scroll.current=this.scroll.target=this.scroll.last=t,this.transform(this.elements.wrapper,this.scroll.current)}show(t){return this.isVisible=!0,Promise.resolve()}hide(t){return this.isVisible=!1,Promise.resolve()}transform(t,e){t.style[this.transformPrefix]=`translate3d(0, ${-Math.round(e)}px, 0)`}onResize(){this.elements.wrapper&&window.requestAnimationFrame((t=>{this.scroll.limit=this.elements.wrapper.clientHeight-window.innerHeight,h()(this.animations,(t=>{t.onResize&&t.onResize()}))}))}onTouchDown(t){u.isMobile()&&(this.isDown=!0,this.scroll.position=this.scroll.current,this.start=t.touches?t.touches[0].clientY:t.clientY)}onTouchMove(t){if(!u.isMobile()||!this.isDown)return;const e=t.touches?t.touches[0].clientY:t.clientY,r=3*(this.start-e);this.scroll.target=this.scroll.position+r}onTouchUp(t){u.isMobile()&&(this.isDown=!1)}onWheel(t){const e=f()(t).pixelY;return this.scroll.target+=e,e}update(){var t,e,r,n,i;this.scroll.target=(0,t=this.scroll.limit,e=this.scroll.target,Kn.utils.clamp(0,t,e)),this.scroll.current=(r=this.scroll.current,n=this.scroll.target,i=this.scroll.ease,Kn.utils.interpolate(r,n,i)),this.scroll.current=Math.floor(this.scroll.current),this.scroll.current<.1&&(this.scroll.current=0),this.elements.wrapper&&this.transform(this.elements.wrapper,this.scroll.current),this.scroll.last=this.scroll.current}},ti=class extends Jn{constructor(){super({classes:{active:"about--active"},element:".about",elements:{wrapper:".about__content"}})}async show(t){return this.element.classList.add(this.classes.active),super.show(t)}async hide(t){return this.element.classList.remove(this.classes.active),super.hide(t)}},ei=class extends Jn{constructor(){super({classes:{active:"home--active"},element:".home",elements:{wrapper:".home__content"}})}async show(t){return this.element.classList.add(this.classes.active),super.show(t)}async hide(t){return this.element.classList.remove(this.classes.active),super.hide(t)}};function ri(t){let e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}function ni(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function ii(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}function si(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}function ai(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}function oi(t){let e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}function hi(t,e){let r=e[0],n=e[1],i=e[2],s=r*r+n*n+i*i;return s>0&&(s=1/Math.sqrt(s)),t[0]=e[0]*s,t[1]=e[1]*s,t[2]=e[2]*s,t}function ui(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function li(t,e,r){let n=e[0],i=e[1],s=e[2],a=r[0],o=r[1],h=r[2];return t[0]=i*h-s*o,t[1]=s*a-n*h,t[2]=n*o-i*a,t}const ci=function(){const t=[0,0,0],e=[0,0,0];return function(r,n){ni(t,r),ni(e,n),hi(t,t),hi(e,e);let i=ui(t,e);return i>1?0:i<-1?Math.PI:Math.acos(i)}}();class pi extends Array{constructor(t=0,e=t,r=t){return super(t,e,r),this}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}set x(t){this[0]=t}set y(t){this[1]=t}set z(t){this[2]=t}set(t,e=t,r=t){return t.length?this.copy(t):(function(t,e,r,n){t[0]=e,t[1]=r,t[2]=n}(this,t,e,r),this)}copy(t){return ni(this,t),this}add(t,e){return e?ii(this,t,e):ii(this,this,t),this}sub(t,e){return e?si(this,t,e):si(this,this,t),this}multiply(t){var e,r,n;return t.length?(r=this,n=t,(e=this)[0]=r[0]*n[0],e[1]=r[1]*n[1],e[2]=r[2]*n[2]):ai(this,this,t),this}divide(t){var e,r,n;return t.length?(r=this,n=t,(e=this)[0]=r[0]/n[0],e[1]=r[1]/n[1],e[2]=r[2]/n[2]):ai(this,this,1/t),this}inverse(t=this){var e,r;return r=t,(e=this)[0]=1/r[0],e[1]=1/r[1],e[2]=1/r[2],this}len(){return ri(this)}distance(t){return t?function(t,e){let r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}(this,t):ri(this)}squaredLen(){return oi(this)}squaredDistance(t){return t?function(t,e){let r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i}(this,t):oi(this)}negate(t=this){var e,r;return r=t,(e=this)[0]=-r[0],e[1]=-r[1],e[2]=-r[2],this}cross(t,e){return e?li(this,t,e):li(this,this,t),this}scale(t){return ai(this,this,t),this}normalize(){return hi(this,this),this}dot(t){return ui(this,t)}equals(t){return e=t,this[0]===e[0]&&this[1]===e[1]&&this[2]===e[2];var e}applyMatrix4(t){return function(t,e,r){let n=e[0],i=e[1],s=e[2],a=r[3]*n+r[7]*i+r[11]*s+r[15];a=a||1,t[0]=(r[0]*n+r[4]*i+r[8]*s+r[12])/a,t[1]=(r[1]*n+r[5]*i+r[9]*s+r[13])/a,t[2]=(r[2]*n+r[6]*i+r[10]*s+r[14])/a}(this,this,t),this}scaleRotateMatrix4(t){return function(t,e,r){let n=e[0],i=e[1],s=e[2],a=r[3]*n+r[7]*i+r[11]*s+r[15];a=a||1,t[0]=(r[0]*n+r[4]*i+r[8]*s)/a,t[1]=(r[1]*n+r[5]*i+r[9]*s)/a,t[2]=(r[2]*n+r[6]*i+r[10]*s)/a}(this,this,t),this}applyQuaternion(t){return function(t,e,r){let n=e[0],i=e[1],s=e[2],a=r[0],o=r[1],h=r[2],u=o*s-h*i,l=h*n-a*s,c=a*i-o*n,p=o*c-h*l,f=h*u-a*c,d=a*l-o*u,m=2*r[3];u*=m,l*=m,c*=m,p*=2,f*=2,d*=2,t[0]=n+u+p,t[1]=i+l+f,t[2]=s+c+d}(this,this,t),this}angle(t){return ci(this,t)}lerp(t,e){return function(t,e,r,n){let i=e[0],s=e[1],a=e[2];t[0]=i+n*(r[0]-i),t[1]=s+n*(r[1]-s),t[2]=a+n*(r[2]-a)}(this,this,t,e),this}clone(){return new pi(this[0],this[1],this[2])}fromArray(t,e=0){return this[0]=t[e],this[1]=t[e+1],this[2]=t[e+2],this}toArray(t=[],e=0){return t[e]=this[0],t[e+1]=this[1],t[e+2]=this[2],t}transformDirection(t){const e=this[0],r=this[1],n=this[2];return this[0]=t[0]*e+t[4]*r+t[8]*n,this[1]=t[1]*e+t[5]*r+t[9]*n,this[2]=t[2]*e+t[6]*r+t[10]*n,this.normalize()}}const fi=new pi;let di=1;class mi{constructor({canvas:t=document.createElement("canvas"),width:e=300,height:r=150,dpr:n=1,alpha:i=!1,depth:s=!0,stencil:a=!1,antialias:o=!1,premultipliedAlpha:h=!1,preserveDrawingBuffer:u=!1,powerPreference:l="default",autoClear:c=!0,webgl:p=2}={}){const f={alpha:i,depth:s,stencil:a,antialias:o,premultipliedAlpha:h,preserveDrawingBuffer:u,powerPreference:l};this.dpr=n,this.alpha=i,this.color=!0,this.depth=s,this.stencil=a,this.premultipliedAlpha=h,this.autoClear=c,this.id=di++,2===p&&(this.gl=t.getContext("webgl2",f)),this.isWebgl2=!!this.gl,this.gl||(this.gl=t.getContext("webgl",f)||t.getContext("experimental-webgl",f)),this.gl.renderer=this,this.setSize(e,r),this.state={},this.state.blendFunc={src:this.gl.ONE,dst:this.gl.ZERO},this.state.blendEquation={modeRGB:this.gl.FUNC_ADD},this.state.cullFace=null,this.state.frontFace=this.gl.CCW,this.state.depthMask=!0,this.state.depthFunc=this.gl.LESS,this.state.premultiplyAlpha=!1,this.state.flipY=!1,this.state.unpackAlignment=4,this.state.framebuffer=null,this.state.viewport={width:null,height:null},this.state.textureUnits=[],this.state.activeTextureUnit=0,this.state.boundBuffer=null,this.state.uniformLocations=new Map,this.extensions={},this.isWebgl2?(this.getExtension("EXT_color_buffer_float"),this.getExtension("OES_texture_float_linear")):(this.getExtension("OES_texture_float"),this.getExtension("OES_texture_float_linear"),this.getExtension("OES_texture_half_float"),this.getExtension("OES_texture_half_float_linear"),this.getExtension("OES_element_index_uint"),this.getExtension("OES_standard_derivatives"),this.getExtension("EXT_sRGB"),this.getExtension("WEBGL_depth_texture"),this.getExtension("WEBGL_draw_buffers")),this.vertexAttribDivisor=this.getExtension("ANGLE_instanced_arrays","vertexAttribDivisor","vertexAttribDivisorANGLE"),this.drawArraysInstanced=this.getExtension("ANGLE_instanced_arrays","drawArraysInstanced","drawArraysInstancedANGLE"),this.drawElementsInstanced=this.getExtension("ANGLE_instanced_arrays","drawElementsInstanced","drawElementsInstancedANGLE"),this.createVertexArray=this.getExtension("OES_vertex_array_object","createVertexArray","createVertexArrayOES"),this.bindVertexArray=this.getExtension("OES_vertex_array_object","bindVertexArray","bindVertexArrayOES"),this.deleteVertexArray=this.getExtension("OES_vertex_array_object","deleteVertexArray","deleteVertexArrayOES"),this.drawBuffers=this.getExtension("WEBGL_draw_buffers","drawBuffers","drawBuffersWEBGL"),this.parameters={},this.parameters.maxTextureUnits=this.gl.getParameter(this.gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS),this.parameters.maxAnisotropy=this.getExtension("EXT_texture_filter_anisotropic")?this.gl.getParameter(this.getExtension("EXT_texture_filter_anisotropic").MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}setSize(t,e){this.width=t,this.height=e,this.gl.canvas.width=t*this.dpr,this.gl.canvas.height=e*this.dpr,Object.assign(this.gl.canvas.style,{width:t+"px",height:e+"px"})}setViewport(t,e){this.state.viewport.width===t&&this.state.viewport.height===e||(this.state.viewport.width=t,this.state.viewport.height=e,this.gl.viewport(0,0,t,e))}enable(t){!0!==this.state[t]&&(this.gl.enable(t),this.state[t]=!0)}disable(t){!1!==this.state[t]&&(this.gl.disable(t),this.state[t]=!1)}setBlendFunc(t,e,r,n){this.state.blendFunc.src===t&&this.state.blendFunc.dst===e&&this.state.blendFunc.srcAlpha===r&&this.state.blendFunc.dstAlpha===n||(this.state.blendFunc.src=t,this.state.blendFunc.dst=e,this.state.blendFunc.srcAlpha=r,this.state.blendFunc.dstAlpha=n,void 0!==r?this.gl.blendFuncSeparate(t,e,r,n):this.gl.blendFunc(t,e))}setBlendEquation(t,e){t=t||this.gl.FUNC_ADD,this.state.blendEquation.modeRGB===t&&this.state.blendEquation.modeAlpha===e||(this.state.blendEquation.modeRGB=t,this.state.blendEquation.modeAlpha=e,void 0!==e?this.gl.blendEquationSeparate(t,e):this.gl.blendEquation(t))}setCullFace(t){this.state.cullFace!==t&&(this.state.cullFace=t,this.gl.cullFace(t))}setFrontFace(t){this.state.frontFace!==t&&(this.state.frontFace=t,this.gl.frontFace(t))}setDepthMask(t){this.state.depthMask!==t&&(this.state.depthMask=t,this.gl.depthMask(t))}setDepthFunc(t){this.state.depthFunc!==t&&(this.state.depthFunc=t,this.gl.depthFunc(t))}activeTexture(t){this.state.activeTextureUnit!==t&&(this.state.activeTextureUnit=t,this.gl.activeTexture(this.gl.TEXTURE0+t))}bindFramebuffer({target:t=this.gl.FRAMEBUFFER,buffer:e=null}={}){this.state.framebuffer!==e&&(this.state.framebuffer=e,this.gl.bindFramebuffer(t,e))}getExtension(t,e,r){return e&&this.gl[e]?this.gl[e].bind(this.gl):(this.extensions[t]||(this.extensions[t]=this.gl.getExtension(t)),e?this.extensions[t]?this.extensions[t][r].bind(this.extensions[t]):null:this.extensions[t])}sortOpaque(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program.id!==e.program.id?t.program.id-e.program.id:t.zDepth!==e.zDepth?t.zDepth-e.zDepth:e.id-t.id}sortTransparent(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.zDepth!==e.zDepth?e.zDepth-t.zDepth:e.id-t.id}sortUI(t,e){return t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program.id!==e.program.id?t.program.id-e.program.id:e.id-t.id}getRenderList({scene:t,camera:e,frustumCull:r,sort:n}){let i=[];if(e&&r&&e.updateFrustum(),t.traverse((t=>{if(!t.visible)return!0;t.draw&&(r&&t.frustumCulled&&e&&!e.frustumIntersectsMesh(t)||i.push(t))})),n){const t=[],r=[],n=[];i.forEach((i=>{i.program.transparent?i.program.depthTest?r.push(i):n.push(i):t.push(i),i.zDepth=0,0===i.renderOrder&&i.program.depthTest&&e&&(i.worldMatrix.getTranslation(fi),fi.applyMatrix4(e.projectionViewMatrix),i.zDepth=fi.z)})),t.sort(this.sortOpaque),r.sort(this.sortTransparent),n.sort(this.sortUI),i=t.concat(r,n)}return i}render({scene:t,camera:e,target:r=null,update:n=!0,sort:i=!0,frustumCull:s=!0,clear:a}){null===r?(this.bindFramebuffer(),this.setViewport(this.width*this.dpr,this.height*this.dpr)):(this.bindFramebuffer(r),this.setViewport(r.width,r.height)),(a||this.autoClear&&!1!==a)&&(!this.depth||r&&!r.depth||(this.enable(this.gl.DEPTH_TEST),this.setDepthMask(!0)),this.gl.clear((this.color?this.gl.COLOR_BUFFER_BIT:0)|(this.depth?this.gl.DEPTH_BUFFER_BIT:0)|(this.stencil?this.gl.STENCIL_BUFFER_BIT:0))),n&&t.updateMatrixWorld(),e&&e.updateMatrixWorld(),this.getRenderList({scene:t,camera:e,frustumCull:s,sort:i}).forEach((t=>{t.draw({camera:e})}))}}function gi(t,e,r){let n=e[0],i=e[1],s=e[2],a=e[3],o=r[0],h=r[1],u=r[2],l=r[3];return t[0]=n*l+a*o+i*u-s*h,t[1]=i*l+a*h+s*o-n*u,t[2]=s*l+a*u+n*h-i*o,t[3]=a*l-n*o-i*h-s*u,t}class _i extends Array{constructor(t=0,e=0,r=0,n=1){return super(t,e,r,n),this.onChange=()=>{},this}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}get w(){return this[3]}set x(t){this[0]=t,this.onChange()}set y(t){this[1]=t,this.onChange()}set z(t){this[2]=t,this.onChange()}set w(t){this[3]=t,this.onChange()}identity(){var t;return(t=this)[0]=0,t[1]=0,t[2]=0,t[3]=1,this.onChange(),this}set(t,e,r,n){return t.length?this.copy(t):(function(t,e,r,n,i){t[0]=e,t[1]=r,t[2]=n,t[3]=i}(this,t,e,r,n),this.onChange(),this)}rotateX(t){return function(t,e,r){r*=.5;let n=e[0],i=e[1],s=e[2],a=e[3],o=Math.sin(r),h=Math.cos(r);t[0]=n*h+a*o,t[1]=i*h+s*o,t[2]=s*h-i*o,t[3]=a*h-n*o}(this,this,t),this.onChange(),this}rotateY(t){return function(t,e,r){r*=.5;let n=e[0],i=e[1],s=e[2],a=e[3],o=Math.sin(r),h=Math.cos(r);t[0]=n*h-s*o,t[1]=i*h+a*o,t[2]=s*h+n*o,t[3]=a*h-i*o}(this,this,t),this.onChange(),this}rotateZ(t){return function(t,e,r){r*=.5;let n=e[0],i=e[1],s=e[2],a=e[3],o=Math.sin(r),h=Math.cos(r);t[0]=n*h+i*o,t[1]=i*h-n*o,t[2]=s*h+a*o,t[3]=a*h-s*o}(this,this,t),this.onChange(),this}inverse(t=this){return function(t,e){let r=e[0],n=e[1],i=e[2],s=e[3],a=r*r+n*n+i*i+s*s,o=a?1/a:0;t[0]=-r*o,t[1]=-n*o,t[2]=-i*o,t[3]=s*o}(this,t),this.onChange(),this}conjugate(t=this){var e,r;return r=t,(e=this)[0]=-r[0],e[1]=-r[1],e[2]=-r[2],e[3]=r[3],this.onChange(),this}copy(t){return r=t,(e=this)[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],this.onChange(),this;var e,r}normalize(t=this){return function(t,e){let r=e[0],n=e[1],i=e[2],s=e[3],a=r*r+n*n+i*i+s*s;a>0&&(a=1/Math.sqrt(a)),t[0]=r*a,t[1]=n*a,t[2]=i*a,t[3]=s*a}(this,t),this.onChange(),this}multiply(t,e){return e?gi(this,t,e):gi(this,this,t),this.onChange(),this}dot(t){return r=t,(e=this)[0]*r[0]+e[1]*r[1]+e[2]*r[2]+e[3]*r[3];var e,r}fromMatrix3(t){return function(t,e){let r,n=e[0]+e[4]+e[8];if(n>0)r=Math.sqrt(n+1),t[3]=.5*r,r=.5/r,t[0]=(e[5]-e[7])*r,t[1]=(e[6]-e[2])*r,t[2]=(e[1]-e[3])*r;else{let n=0;e[4]>e[0]&&(n=1),e[8]>e[3*n+n]&&(n=2);let i=(n+1)%3,s=(n+2)%3;r=Math.sqrt(e[3*n+n]-e[3*i+i]-e[3*s+s]+1),t[n]=.5*r,r=.5/r,t[3]=(e[3*i+s]-e[3*s+i])*r,t[i]=(e[3*i+n]+e[3*n+i])*r,t[s]=(e[3*s+n]+e[3*n+s])*r}}(this,t),this.onChange(),this}fromEuler(t){return function(t,e,r="YXZ"){let n=Math.sin(.5*e[0]),i=Math.cos(.5*e[0]),s=Math.sin(.5*e[1]),a=Math.cos(.5*e[1]),o=Math.sin(.5*e[2]),h=Math.cos(.5*e[2]);"XYZ"===r?(t[0]=n*a*h+i*s*o,t[1]=i*s*h-n*a*o,t[2]=i*a*o+n*s*h,t[3]=i*a*h-n*s*o):"YXZ"===r?(t[0]=n*a*h+i*s*o,t[1]=i*s*h-n*a*o,t[2]=i*a*o-n*s*h,t[3]=i*a*h+n*s*o):"ZXY"===r?(t[0]=n*a*h-i*s*o,t[1]=i*s*h+n*a*o,t[2]=i*a*o+n*s*h,t[3]=i*a*h-n*s*o):"ZYX"===r?(t[0]=n*a*h-i*s*o,t[1]=i*s*h+n*a*o,t[2]=i*a*o-n*s*h,t[3]=i*a*h+n*s*o):"YZX"===r?(t[0]=n*a*h+i*s*o,t[1]=i*s*h+n*a*o,t[2]=i*a*o-n*s*h,t[3]=i*a*h-n*s*o):"XZY"===r&&(t[0]=n*a*h-i*s*o,t[1]=i*s*h-n*a*o,t[2]=i*a*o+n*s*h,t[3]=i*a*h+n*s*o)}(this,t,t.order),this}fromAxisAngle(t,e){return function(t,e,r){r*=.5;let n=Math.sin(r);t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r)}(this,t,e),this}slerp(t,e){return function(t,e,r,n){let i,s,a,o,h,u=e[0],l=e[1],c=e[2],p=e[3],f=r[0],d=r[1],m=r[2],g=r[3];s=u*f+l*d+c*m+p*g,s<0&&(s=-s,f=-f,d=-d,m=-m,g=-g),1-s>1e-6?(i=Math.acos(s),a=Math.sin(i),o=Math.sin((1-n)*i)/a,h=Math.sin(n*i)/a):(o=1-n,h=n),t[0]=o*u+h*f,t[1]=o*l+h*d,t[2]=o*c+h*m,t[3]=o*p+h*g}(this,this,t,e),this}fromArray(t,e=0){return this[0]=t[e],this[1]=t[e+1],this[2]=t[e+2],this[3]=t[e+3],this}toArray(t=[],e=0){return t[e]=this[0],t[e+1]=this[1],t[e+2]=this[2],t[e+3]=this[3],t}}function vi(t,e,r){let n=e[0],i=e[1],s=e[2],a=e[3],o=e[4],h=e[5],u=e[6],l=e[7],c=e[8],p=e[9],f=e[10],d=e[11],m=e[12],g=e[13],_=e[14],v=e[15],y=r[0],x=r[1],w=r[2],b=r[3];return t[0]=y*n+x*o+w*c+b*m,t[1]=y*i+x*h+w*p+b*g,t[2]=y*s+x*u+w*f+b*_,t[3]=y*a+x*l+w*d+b*v,y=r[4],x=r[5],w=r[6],b=r[7],t[4]=y*n+x*o+w*c+b*m,t[5]=y*i+x*h+w*p+b*g,t[6]=y*s+x*u+w*f+b*_,t[7]=y*a+x*l+w*d+b*v,y=r[8],x=r[9],w=r[10],b=r[11],t[8]=y*n+x*o+w*c+b*m,t[9]=y*i+x*h+w*p+b*g,t[10]=y*s+x*u+w*f+b*_,t[11]=y*a+x*l+w*d+b*v,y=r[12],x=r[13],w=r[14],b=r[15],t[12]=y*n+x*o+w*c+b*m,t[13]=y*i+x*h+w*p+b*g,t[14]=y*s+x*u+w*f+b*_,t[15]=y*a+x*l+w*d+b*v,t}function yi(t,e){let r=e[0],n=e[1],i=e[2],s=e[4],a=e[5],o=e[6],h=e[8],u=e[9],l=e[10];return t[0]=Math.hypot(r,n,i),t[1]=Math.hypot(s,a,o),t[2]=Math.hypot(h,u,l),t}const xi=function(){const t=[0,0,0];return function(e,r){let n=t;yi(n,r);let i=1/n[0],s=1/n[1],a=1/n[2],o=r[0]*i,h=r[1]*s,u=r[2]*a,l=r[4]*i,c=r[5]*s,p=r[6]*a,f=r[8]*i,d=r[9]*s,m=r[10]*a,g=o+c+m,_=0;return g>0?(_=2*Math.sqrt(g+1),e[3]=.25*_,e[0]=(p-d)/_,e[1]=(f-u)/_,e[2]=(h-l)/_):o>c&&o>m?(_=2*Math.sqrt(1+o-c-m),e[3]=(p-d)/_,e[0]=.25*_,e[1]=(h+l)/_,e[2]=(f+u)/_):c>m?(_=2*Math.sqrt(1+c-o-m),e[3]=(f-u)/_,e[0]=(h+l)/_,e[1]=.25*_,e[2]=(p+d)/_):(_=2*Math.sqrt(1+m-o-c),e[3]=(h-l)/_,e[0]=(f+u)/_,e[1]=(p+d)/_,e[2]=.25*_),e}}();class wi extends Array{constructor(t=1,e=0,r=0,n=0,i=0,s=1,a=0,o=0,h=0,u=0,l=1,c=0,p=0,f=0,d=0,m=1){return super(t,e,r,n,i,s,a,o,h,u,l,c,p,f,d,m),this}get x(){return this[12]}get y(){return this[13]}get z(){return this[14]}get w(){return this[15]}set x(t){this[12]=t}set y(t){this[13]=t}set z(t){this[14]=t}set w(t){this[15]=t}set(t,e,r,n,i,s,a,o,h,u,l,c,p,f,d,m){return t.length?this.copy(t):(function(t,e,r,n,i,s,a,o,h,u,l,c,p,f,d,m,g){t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=s,t[5]=a,t[6]=o,t[7]=h,t[8]=u,t[9]=l,t[10]=c,t[11]=p,t[12]=f,t[13]=d,t[14]=m,t[15]=g}(this,t,e,r,n,i,s,a,o,h,u,l,c,p,f,d,m),this)}translate(t,e=this){return function(t,e,r){let n,i,s,a,o,h,u,l,c,p,f,d,m=r[0],g=r[1],_=r[2];e===t?(t[12]=e[0]*m+e[4]*g+e[8]*_+e[12],t[13]=e[1]*m+e[5]*g+e[9]*_+e[13],t[14]=e[2]*m+e[6]*g+e[10]*_+e[14],t[15]=e[3]*m+e[7]*g+e[11]*_+e[15]):(n=e[0],i=e[1],s=e[2],a=e[3],o=e[4],h=e[5],u=e[6],l=e[7],c=e[8],p=e[9],f=e[10],d=e[11],t[0]=n,t[1]=i,t[2]=s,t[3]=a,t[4]=o,t[5]=h,t[6]=u,t[7]=l,t[8]=c,t[9]=p,t[10]=f,t[11]=d,t[12]=n*m+o*g+c*_+e[12],t[13]=i*m+h*g+p*_+e[13],t[14]=s*m+u*g+f*_+e[14],t[15]=a*m+l*g+d*_+e[15])}(this,e,t),this}rotate(t,e,r=this){return function(t,e,r,n){let i,s,a,o,h,u,l,c,p,f,d,m,g,_,v,y,x,w,b,M,T,A,O,E,C=n[0],S=n[1],P=n[2],L=Math.hypot(C,S,P);Math.abs(L)<1e-6||(L=1/L,C*=L,S*=L,P*=L,i=Math.sin(r),s=Math.cos(r),a=1-s,o=e[0],h=e[1],u=e[2],l=e[3],c=e[4],p=e[5],f=e[6],d=e[7],m=e[8],g=e[9],_=e[10],v=e[11],y=C*C*a+s,x=S*C*a+P*i,w=P*C*a-S*i,b=C*S*a-P*i,M=S*S*a+s,T=P*S*a+C*i,A=C*P*a+S*i,O=S*P*a-C*i,E=P*P*a+s,t[0]=o*y+c*x+m*w,t[1]=h*y+p*x+g*w,t[2]=u*y+f*x+_*w,t[3]=l*y+d*x+v*w,t[4]=o*b+c*M+m*T,t[5]=h*b+p*M+g*T,t[6]=u*b+f*M+_*T,t[7]=l*b+d*M+v*T,t[8]=o*A+c*O+m*E,t[9]=h*A+p*O+g*E,t[10]=u*A+f*O+_*E,t[11]=l*A+d*O+v*E,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]))}(this,r,t,e),this}scale(t,e=this){return function(t,e,r){let n=r[0],i=r[1],s=r[2];t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*s,t[9]=e[9]*s,t[10]=e[10]*s,t[11]=e[11]*s,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]}(this,e,"number"==typeof t?[t,t,t]:t),this}multiply(t,e){return e?vi(this,t,e):vi(this,this,t),this}identity(){var t;return(t=this)[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}copy(t){var e,r;return r=t,(e=this)[0]=r[0],e[1]=r[1],e[2]=r[2],e[3]=r[3],e[4]=r[4],e[5]=r[5],e[6]=r[6],e[7]=r[7],e[8]=r[8],e[9]=r[9],e[10]=r[10],e[11]=r[11],e[12]=r[12],e[13]=r[13],e[14]=r[14],e[15]=r[15],this}fromPerspective({fov:t,aspect:e,near:r,far:n}={}){return function(t,e,r,n,i){let s=1/Math.tan(e/2),a=1/(n-i);t[0]=s/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=s,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*a,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*a,t[15]=0}(this,t,e,r,n),this}fromOrthogonal({left:t,right:e,bottom:r,top:n,near:i,far:s}){return function(t,e,r,n,i,s,a){let o=1/(e-r),h=1/(n-i),u=1/(s-a);t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*o,t[13]=(i+n)*h,t[14]=(a+s)*u,t[15]=1}(this,t,e,r,n,i,s),this}fromQuaternion(t){return function(t,e){let r=e[0],n=e[1],i=e[2],s=e[3],a=r+r,o=n+n,h=i+i,u=r*a,l=n*a,c=n*o,p=i*a,f=i*o,d=i*h,m=s*a,g=s*o,_=s*h;t[0]=1-c-d,t[1]=l+_,t[2]=p-g,t[3]=0,t[4]=l-_,t[5]=1-u-d,t[6]=f+m,t[7]=0,t[8]=p+g,t[9]=f-m,t[10]=1-u-c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1}(this,t),this}setPosition(t){return this.x=t[0],this.y=t[1],this.z=t[2],this}inverse(t=this){return function(t,e){let r=e[0],n=e[1],i=e[2],s=e[3],a=e[4],o=e[5],h=e[6],u=e[7],l=e[8],c=e[9],p=e[10],f=e[11],d=e[12],m=e[13],g=e[14],_=e[15],v=r*o-n*a,y=r*h-i*a,x=r*u-s*a,w=n*h-i*o,b=n*u-s*o,M=i*u-s*h,T=l*m-c*d,A=l*g-p*d,O=l*_-f*d,E=c*g-p*m,C=c*_-f*m,S=p*_-f*g,P=v*S-y*C+x*E+w*O-b*A+M*T;P&&(P=1/P,t[0]=(o*S-h*C+u*E)*P,t[1]=(i*C-n*S-s*E)*P,t[2]=(m*M-g*b+_*w)*P,t[3]=(p*b-c*M-f*w)*P,t[4]=(h*O-a*S-u*A)*P,t[5]=(r*S-i*O+s*A)*P,t[6]=(g*x-d*M-_*y)*P,t[7]=(l*M-p*x+f*y)*P,t[8]=(a*C-o*O+u*T)*P,t[9]=(n*O-r*C-s*T)*P,t[10]=(d*b-m*x+_*v)*P,t[11]=(c*x-l*b-f*v)*P,t[12]=(o*A-a*E-h*T)*P,t[13]=(r*E-n*A+i*T)*P,t[14]=(m*y-d*w-g*v)*P,t[15]=(l*w-c*y+p*v)*P)}(this,t),this}compose(t,e,r){return function(t,e,r,n){let i=e[0],s=e[1],a=e[2],o=e[3],h=i+i,u=s+s,l=a+a,c=i*h,p=i*u,f=i*l,d=s*u,m=s*l,g=a*l,_=o*h,v=o*u,y=o*l,x=n[0],w=n[1],b=n[2];t[0]=(1-(d+g))*x,t[1]=(p+y)*x,t[2]=(f-v)*x,t[3]=0,t[4]=(p-y)*w,t[5]=(1-(c+g))*w,t[6]=(m+_)*w,t[7]=0,t[8]=(f+v)*b,t[9]=(m-_)*b,t[10]=(1-(c+d))*b,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1}(this,t,e,r),this}getRotation(t){return xi(t,this),this}getTranslation(t){var e,r;return r=this,(e=t)[0]=r[12],e[1]=r[13],e[2]=r[14],this}getScaling(t){return yi(t,this),this}getMaxScaleOnAxis(){return function(t){let e=t[0],r=t[1],n=t[2],i=t[4],s=t[5],a=t[6],o=t[8],h=t[9],u=t[10];const l=e*e+r*r+n*n,c=i*i+s*s+a*a,p=o*o+h*h+u*u;return Math.sqrt(Math.max(l,c,p))}(this)}lookAt(t,e,r){return function(t,e,r,n){let i=e[0],s=e[1],a=e[2],o=n[0],h=n[1],u=n[2],l=i-r[0],c=s-r[1],p=a-r[2],f=l*l+c*c+p*p;0===f?p=1:(f=1/Math.sqrt(f),l*=f,c*=f,p*=f);let d=h*p-u*c,m=u*l-o*p,g=o*c-h*l;f=d*d+m*m+g*g,0===f&&(u?o+=1e-6:h?u+=1e-6:h+=1e-6,d=h*p-u*c,m=u*l-o*p,g=o*c-h*l,f=d*d+m*m+g*g),f=1/Math.sqrt(f),d*=f,m*=f,g*=f,t[0]=d,t[1]=m,t[2]=g,t[3]=0,t[4]=c*g-p*m,t[5]=p*d-l*g,t[6]=l*m-c*d,t[7]=0,t[8]=l,t[9]=c,t[10]=p,t[11]=0,t[12]=i,t[13]=s,t[14]=a,t[15]=1}(this,t,e,r),this}determinant(){return function(t){let e=t[0],r=t[1],n=t[2],i=t[3],s=t[4],a=t[5],o=t[6],h=t[7],u=t[8],l=t[9],c=t[10],p=t[11],f=t[12],d=t[13],m=t[14],g=t[15];return(e*a-r*s)*(c*g-p*m)-(e*o-n*s)*(l*g-p*d)+(e*h-i*s)*(l*m-c*d)+(r*o-n*a)*(u*g-p*f)-(r*h-i*a)*(u*m-c*f)+(n*h-i*o)*(u*d-l*f)}(this)}fromArray(t,e=0){return this[0]=t[e],this[1]=t[e+1],this[2]=t[e+2],this[3]=t[e+3],this[4]=t[e+4],this[5]=t[e+5],this[6]=t[e+6],this[7]=t[e+7],this[8]=t[e+8],this[9]=t[e+9],this[10]=t[e+10],this[11]=t[e+11],this[12]=t[e+12],this[13]=t[e+13],this[14]=t[e+14],this[15]=t[e+15],this}toArray(t=[],e=0){return t[e]=this[0],t[e+1]=this[1],t[e+2]=this[2],t[e+3]=this[3],t[e+4]=this[4],t[e+5]=this[5],t[e+6]=this[6],t[e+7]=this[7],t[e+8]=this[8],t[e+9]=this[9],t[e+10]=this[10],t[e+11]=this[11],t[e+12]=this[12],t[e+13]=this[13],t[e+14]=this[14],t[e+15]=this[15],t}}const bi=new wi;class Mi extends Array{constructor(t=0,e=t,r=t,n="YXZ"){return super(t,e,r),this.order=n,this.onChange=()=>{},this}get x(){return this[0]}get y(){return this[1]}get z(){return this[2]}set x(t){this[0]=t,this.onChange()}set y(t){this[1]=t,this.onChange()}set z(t){this[2]=t,this.onChange()}set(t,e=t,r=t){return t.length?this.copy(t):(this[0]=t,this[1]=e,this[2]=r,this.onChange(),this)}copy(t){return this[0]=t[0],this[1]=t[1],this[2]=t[2],this.onChange(),this}reorder(t){return this.order=t,this.onChange(),this}fromRotationMatrix(t,e=this.order){return function(t,e,r="YXZ"){"XYZ"===r?(t[1]=Math.asin(Math.min(Math.max(e[8],-1),1)),Math.abs(e[8])<.99999?(t[0]=Math.atan2(-e[9],e[10]),t[2]=Math.atan2(-e[4],e[0])):(t[0]=Math.atan2(e[6],e[5]),t[2]=0)):"YXZ"===r?(t[0]=Math.asin(-Math.min(Math.max(e[9],-1),1)),Math.abs(e[9])<.99999?(t[1]=Math.atan2(e[8],e[10]),t[2]=Math.atan2(e[1],e[5])):(t[1]=Math.atan2(-e[2],e[0]),t[2]=0)):"ZXY"===r?(t[0]=Math.asin(Math.min(Math.max(e[6],-1),1)),Math.abs(e[6])<.99999?(t[1]=Math.atan2(-e[2],e[10]),t[2]=Math.atan2(-e[4],e[5])):(t[1]=0,t[2]=Math.atan2(e[1],e[0]))):"ZYX"===r?(t[1]=Math.asin(-Math.min(Math.max(e[2],-1),1)),Math.abs(e[2])<.99999?(t[0]=Math.atan2(e[6],e[10]),t[2]=Math.atan2(e[1],e[0])):(t[0]=0,t[2]=Math.atan2(-e[4],e[5]))):"YZX"===r?(t[2]=Math.asin(Math.min(Math.max(e[1],-1),1)),Math.abs(e[1])<.99999?(t[0]=Math.atan2(-e[9],e[5]),t[1]=Math.atan2(-e[2],e[0])):(t[0]=0,t[1]=Math.atan2(e[8],e[10]))):"XZY"===r&&(t[2]=Math.asin(-Math.min(Math.max(e[4],-1),1)),Math.abs(e[4])<.99999?(t[0]=Math.atan2(e[6],e[5]),t[1]=Math.atan2(e[8],e[0])):(t[0]=Math.atan2(-e[9],e[10]),t[1]=0))}(this,t,e),this}fromQuaternion(t,e=this.order){return bi.fromQuaternion(t),this.fromRotationMatrix(bi,e)}}class Ti{constructor(){this.parent=null,this.children=[],this.visible=!0,this.matrix=new wi,this.worldMatrix=new wi,this.matrixAutoUpdate=!0,this.position=new pi,this.quaternion=new _i,this.scale=new pi(1),this.rotation=new Mi,this.up=new pi(0,1,0),this.rotation.onChange=()=>this.quaternion.fromEuler(this.rotation),this.quaternion.onChange=()=>this.rotation.fromQuaternion(this.quaternion)}setParent(t,e=!0){this.parent&&t!==this.parent&&this.parent.removeChild(this,!1),this.parent=t,e&&t&&t.addChild(this,!1)}addChild(t,e=!0){~this.children.indexOf(t)||this.children.push(t),e&&t.setParent(this,!1)}removeChild(t,e=!0){~this.children.indexOf(t)&&this.children.splice(this.children.indexOf(t),1),e&&t.setParent(null,!1)}updateMatrixWorld(t){this.matrixAutoUpdate&&this.updateMatrix(),(this.worldMatrixNeedsUpdate||t)&&(null===this.parent?this.worldMatrix.copy(this.matrix):this.worldMatrix.multiply(this.parent.worldMatrix,this.matrix),this.worldMatrixNeedsUpdate=!1,t=!0);for(let e=0,r=this.children.length;e{if(!this.attributes[e])return void console.warn(`active attribute ${e} not being supplied`);const n=this.attributes[e];this.gl.bindBuffer(n.target,n.buffer),this.glState.boundBuffer=n.buffer;let i=1;35674===r&&(i=2),35675===r&&(i=3),35676===r&&(i=4);const s=n.size/i,a=1===i?0:i*i*i,o=1===i?0:i*i;for(let e=0;e{const r=this.attributes[e];r.needsUpdate&&this.updateAttribute(r)})),this.isInstanced?this.attributes.index?this.gl.renderer.drawElementsInstanced(e,this.drawRange.count,this.attributes.index.type,this.attributes.index.offset+2*this.drawRange.start,this.instancedCount):this.gl.renderer.drawArraysInstanced(e,this.drawRange.start,this.drawRange.count,this.instancedCount):this.attributes.index?this.gl.drawElements(e,this.drawRange.count,this.attributes.index.type,this.attributes.index.offset+2*this.drawRange.start):this.gl.drawArrays(e,this.drawRange.start,this.drawRange.count)}getPositionArray(){const t=this.attributes.position;return t.data?t.data:Di?void 0:(console.warn("No position buffer data found to compute bounds"),Di=!0)}computeBoundingBox(t){t||(t=this.getPositionArray()),this.bounds||(this.bounds={min:new pi,max:new pi,center:new pi,scale:new pi,radius:1/0});const e=this.bounds.min,r=this.bounds.max,n=this.bounds.center,i=this.bounds.scale;e.set(1/0),r.set(-1/0);for(let n=0,i=t.length;n65536?new Uint32Array(u):new Uint16Array(u);ki.buildPlane(l,c,p,f,e,r,0,a,o),Object.assign(s,{position:{size:3,data:l},normal:{size:3,data:c},uv:{size:2,data:p},index:{data:f}}),super(t,s)}static buildPlane(t,e,r,n,i,s,a,o,h,u=0,l=1,c=2,p=1,f=-1,d=0,m=0){const g=d,_=i/o,v=s/h;for(let y=0;y<=h;y++){let x=y*v-s/2;for(let s=0;s<=o;s++,d++){let v=s*_-i/2;if(t[3*d+u]=v*p,t[3*d+l]=x*f,t[3*d+c]=a/2,e[3*d+u]=0,e[3*d+l]=0,e[3*d+c]=a>=0?1:-1,r[2*d]=s/o,r[2*d+1]=1-y/h,y===h||s===o)continue;let w=g+s+y*(o+1),b=g+s+(y+1)*(o+1),M=g+s+(y+1)*(o+1)+1,T=g+s+y*(o+1)+1;n[6*m]=w,n[6*m+1]=b,n[6*m+2]=T,n[6*m+3]=b,n[6*m+4]=M,n[6*m+5]=T,m++}}}}class Ri extends zi{constructor(t,{width:e=1,height:r=1,depth:n=1,widthSegments:i=1,heightSegments:s=1,depthSegments:a=1,attributes:o={}}={}){const h=i,u=s,l=a,c=(h+1)*(u+1)*2+(h+1)*(l+1)*2+(u+1)*(l+1)*2,p=6*(h*u*2+h*l*2+u*l*2),f=new Float32Array(3*c),d=new Float32Array(3*c),m=new Float32Array(2*c),g=c>65536?new Uint32Array(p):new Uint16Array(p);let _=0,v=0;ki.buildPlane(f,d,m,g,n,r,e,l,u,2,1,0,-1,-1,_,v),ki.buildPlane(f,d,m,g,n,r,-e,l,u,2,1,0,1,-1,_+=(l+1)*(u+1),v+=l*u),ki.buildPlane(f,d,m,g,e,n,r,l,u,0,2,1,1,1,_+=(l+1)*(u+1),v+=l*u),ki.buildPlane(f,d,m,g,e,n,-r,l,u,0,2,1,1,-1,_+=(h+1)*(l+1),v+=h*l),ki.buildPlane(f,d,m,g,e,r,-n,h,u,0,1,2,-1,-1,_+=(h+1)*(l+1),v+=h*l),ki.buildPlane(f,d,m,g,e,r,n,h,u,0,1,2,1,-1,_+=(h+1)*(u+1),v+=h*u),Object.assign(o,{position:{size:3,data:f},normal:{size:3,data:d},uv:{size:2,data:m},index:{data:g}}),super(t,o)}}const ji=class extends(c()){constructor({classes:t,element:r,elements:n}){super(),e()(this),this.classes=t,this.element=r instanceof window.HTMLElement?r:document.querySelector(r),this.elements={},h()(n,((t,e)=>{t instanceof window.HTMLElement||t instanceof window.NodeList||Array.isArray(t)?this.elements[e]=t:(this.elements[e]=this.element.querySelectorAll(t),0===this.elements[e].length?this.elements[e]=null:1===this.elements[e].length&&(this.elements[e]=this.element.querySelector(t)))})),this.addEventListeners()}addEventListeners(){}removeEventListeners(){}destroy(){this.removeEventListeners()}},Fi=class extends ji{constructor(){super({classes:{},element:".preloader",elements:{}}),this.counter=0,this.index=0,this.transformPrefix=m()("transform"),this.onComplete()}onComplete(){this.timeline=Kn.timeline(),this.timeline.to(this.element,{autoAlpha:0,duration:1}),this.timeline.call((t=>{this.emit("complete")}))}};class Ii{constructor(){e()(this),this.content=document.querySelector(".content"),this.template=this.content.dataset.template,this.createPreloader(),this.createCanvas(),this.pages=new Map,this.pages.set("about",new ti),this.pages.set("home",new ei),this.page=this.pages.get(this.template),this.page.create(),this.page.show(),this.addEventListeners(),this.addLinksEventsListeners()}createPreloader(){this.preloader=new Fi,this.preloader.on("complete",this.onPreloaded)}onPreloaded(){this.onResize(),this.createAnalytics(),this.update()}createAnalytics(){const t=document.createElement("script");t.onload=t=>{function e(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],e("js",new Date),e("config","GOOGLE_ANALYTICS")},t.src="https://www.googletagmanager.com/gtag/js?id=GOOGLE_ANALYTICS",document.body.appendChild(t)}createCanvas(){this.canvas=new class{constructor({url:t}){this.url=t,this.renderer=new mi({alpha:!0,dpr:Math.min(window.devicePixelRatio,2)}),this.gl=this.renderer.gl,this.gl.clearColor(0,0,0,0),document.body.appendChild(this.gl.canvas),this.createCamera(),this.createScene(),this.createGeometries(),this.onResize()}createCamera(){this.camera=new Ci(this.gl),this.camera.fov=45,this.camera.position.z=5}createScene(){this.scene=new Ti}createGeometries(){this.boxGeometry=new Ri(this.gl,{heightSegments:20,widthSegments:1}),this.planeGeometry=new ki(this.gl,{heightSegments:20,widthSegments:1})}onChange(t){}onResize(){this.screen={height:window.innerHeight,width:window.innerWidth},this.renderer.setSize(this.screen.width,this.screen.height),this.camera.perspective({aspect:this.gl.canvas.width/this.gl.canvas.height});const t=this.camera.fov*(Math.PI/180),e=2*Math.tan(t/2)*this.camera.position.z,r=e*this.camera.aspect;this.viewport={height:e,width:r},this.screen,this.viewport}onTouchDown(t){}onTouchMove(t){}onTouchUp(t){}update(t){t&&this.renderer.render({scene:this.scene,camera:this.camera})}}({url:this.url})}createStats(){this.stats=new(a()),document.body.appendChild(this.stats.dom)}async onChange({push:t=!0,url:e=null}){if(this.isLoading||this.url===e)return;document.body.style.pointerEvents="none",this.url=e,this.isLoading=!0;const r=await window.fetch(e,{headers:{"X-Requested-With":"XMLHttpRequest"}}),n=await r.text();this.onRequest({push:t,response:n,url:e})}async onRequest({push:t,response:e,url:r}){const n=document.createElement("div");n.innerHTML=e;const i=n.querySelector(".content");this.page&&await Promise.all([this.page.hide(i.dataset.template)]),document.title=n.querySelector("title").textContent,t&&window.history.pushState({},document.title,r),this.content.innerHTML=i.innerHTML,this.content.dataset.template=i.dataset.template,this.template=i.dataset.template,this.page=this.pages.get(this.template),this.page.create(),this.addLinksEventsListeners(),await this.page.show(),document.body.style.pointerEvents="",this.isLoading=!1}update(){this.stats&&this.stats.begin(),this.page&&this.page.update(),this.canvas&&this.canvas.update(this),this.stats&&this.stats.end(),window.requestAnimationFrame(this.update)}onContextMenu(t){return t.preventDefault(),t.stopPropagation(),!1}onPopState(){this.onChange({url:window.location.pathname,push:!1})}onResize(){window.requestAnimationFrame((t=>{this.page&&this.page.onResize(),this.canvas&&this.canvas.onResize()}))}onKeyDown(t){"Tab"===t.key&&t.preventDefault(),"ArrowDown"===t.key?this.page.scroll.target+=100:"ArrowUp"===t.key&&(this.page.scroll.target-=100)}onFocusIn(t){t.preventDefault()}onTouchDown(t){t.stopPropagation(),(u.isMobile()||"A"!==t.target.tagName)&&(this.canvas&&this.canvas.onTouchDown&&this.canvas.onTouchDown(t),this.page&&this.page.onTouchDown&&this.page.onTouchDown(t))}onTouchMove(t){t.stopPropagation(),this.canvas&&this.canvas.onTouchMove&&this.canvas.onTouchMove(t),this.page&&this.page.onTouchDown&&this.page.onTouchMove(t)}onTouchUp(t){t.stopPropagation(),this.canvas&&this.canvas.onTouchUp&&this.canvas.onTouchUp(t),this.page&&this.page.onTouchDown&&this.page.onTouchUp(t)}onWheel(t){this.page&&this.page.onWheel&&this.page.onWheel(t)}addEventListeners(){window.addEventListener("popstate",this.onPopState,{passive:!0}),window.addEventListener("resize",this.onResize,{passive:!0}),window.addEventListener("mousedown",this.onTouchDown,{passive:!0}),window.addEventListener("mousemove",this.onTouchMove,{passive:!0}),window.addEventListener("mouseup",this.onTouchUp,{passive:!0}),window.addEventListener("touchstart",this.onTouchDown,{passive:!0}),window.addEventListener("touchmove",this.onTouchMove,{passive:!0}),window.addEventListener("touchend",this.onTouchUp,{passive:!0}),window.addEventListener("mousewheel",this.onWheel,{passive:!0}),window.addEventListener("wheel",this.onWheel,{passive:!0}),window.addEventListener("keydown",this.onKeyDown),window.addEventListener("focusin",this.onFocusIn),u.isMobile()&&(window.oncontextmenu=this.onContextMenu)}addLinksEventsListeners(){const t=document.querySelectorAll("a");h()(t,(t=>{const e=t.href.indexOf(window.location.origin)>-1,r=t.href.indexOf("#")>-1;e?t.onclick=e=>{e.preventDefault(),r||this.onChange({url:t.href})}:-1===t.href.indexOf("mailto")&&-1===t.href.indexOf("tel")&&(t.rel="noopener",t.target="_blank")}))}}const Bi=new(i())("Neue Haas Grotesk Regular");Promise.all([Bi.load()]).then((t=>{window.APP=new Ii})).catch((t=>{window.APP=new Ii})),console.log("%c Developed by Bizarro - https://bizar.ro/","background: #000; color: #fff;")})()})(); -------------------------------------------------------------------------------- /public/main.js.LICENSE.txt: -------------------------------------------------------------------------------- 1 | /*! 2 | * GSAP 3.6.0 3 | * https://greensock.com 4 | * 5 | * @license Copyright 2008-2021, GreenSock. All rights reserved. 6 | * Subject to the terms at https://greensock.com/standard-license or for 7 | * Club GreenSock members, the agreement issued with that membership. 8 | * @author: Jack Doyle, jack@greensock.com 9 | */ 10 | 11 | /** 12 | * Checks if an event is supported in the current execution environment. 13 | * 14 | * NOTE: This will not work correctly for non-generic events such as `change`, 15 | * `reset`, `load`, `error`, and `select`. 16 | * 17 | * Borrows from Modernizr. 18 | * 19 | * @param {string} eventNameSuffix Event name, e.g. "click". 20 | * @param {?boolean} capture Check if the capture phase is supported. 21 | * @return {boolean} True if the event is supported. 22 | * @internal 23 | * @license Modernizr 3.0.0pre (Custom Build) | MIT 24 | */ 25 | -------------------------------------------------------------------------------- /public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/mstile-150x150.png -------------------------------------------------------------------------------- /public/offline.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Node Template 6 | 32 | 33 | 34 |
35 |

36 | This experience is only available with internet connection. 37 |

38 |
39 | 40 | 41 | -------------------------------------------------------------------------------- /public/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.11, written by Peter Selinger 2001-2013 9 | 10 | 12 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /public/service-worker.js: -------------------------------------------------------------------------------- 1 | const staticCacheName="v1::node-template";this.addEventListener("install",(t=>{this.skipWaiting(),t.waitUntil(caches.open(staticCacheName).then((t=>t.addAll(["/offline.html"]))))})),this.addEventListener("fetch",(t=>{t.respondWith(caches.match(t.request).then((e=>e||fetch(t.request))).catch((()=>caches.match("/offline.html"))))})); -------------------------------------------------------------------------------- /public/share.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/public/share.jpg -------------------------------------------------------------------------------- /public/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Bizarr\u00f8", 3 | "short_name": "Bizarr\u00f8", 4 | "start_url": "/", 5 | "icons": [ 6 | { 7 | "src": "/android-chrome-192x192.png", 8 | "sizes": "192x192", 9 | "type": "image/png", 10 | "purpose": "any maskable" 11 | }, 12 | { 13 | "src": "/android-chrome-512x512.png", 14 | "sizes": "512x512", 15 | "type": "image/png", 16 | "purpose": "any maskable" 17 | } 18 | ], 19 | "theme_color": "#151c13", 20 | "background_color": "#151c13", 21 | "display": "standalone" 22 | } 23 | -------------------------------------------------------------------------------- /shared/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/shared/android-chrome-192x192.png -------------------------------------------------------------------------------- /shared/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/shared/android-chrome-512x512.png -------------------------------------------------------------------------------- /shared/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/shared/apple-touch-icon.png -------------------------------------------------------------------------------- /shared/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #151c13 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /shared/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/shared/favicon-16x16.png -------------------------------------------------------------------------------- /shared/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/shared/favicon-32x32.png -------------------------------------------------------------------------------- /shared/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/shared/favicon.ico -------------------------------------------------------------------------------- /shared/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/shared/mstile-150x150.png -------------------------------------------------------------------------------- /shared/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | Created by potrace 1.11, written by Peter Selinger 2001-2013 9 | 10 | 12 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /shared/share.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bizarro/bizarroilerplate/7a8fa9e3705669586b371109cd7d3ffe3f1c5300/shared/share.jpg -------------------------------------------------------------------------------- /shared/site.webmanifest: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Bizarr\u00f8", 3 | "short_name": "Bizarr\u00f8", 4 | "start_url": "/", 5 | "icons": [ 6 | { 7 | "src": "/android-chrome-192x192.png", 8 | "sizes": "192x192", 9 | "type": "image/png", 10 | "purpose": "any maskable" 11 | }, 12 | { 13 | "src": "/android-chrome-512x512.png", 14 | "sizes": "512x512", 15 | "type": "image/png", 16 | "purpose": "any maskable" 17 | } 18 | ], 19 | "theme_color": "#151c13", 20 | "background_color": "#151c13", 21 | "display": "standalone" 22 | } 23 | -------------------------------------------------------------------------------- /styles/base/fonts.scss: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Neue Haas Grotesk Regular'; 3 | src: url('../fonts/neue-haas-grotesk-regular.woff2') format('woff2'), 4 | url('../fonts/neue-haas-grotesk-regular.woff') format('woff'); 5 | font-weight: normal; 6 | font-style: normal; 7 | font-display: swap; 8 | } 9 | -------------------------------------------------------------------------------- /styles/base/reset.scss: -------------------------------------------------------------------------------- 1 | *, 2 | *:before, 3 | *:after { 4 | box-sizing: inherit; 5 | user-select: none; 6 | outline: none; 7 | -webkit-touch-callout: none; 8 | } 9 | 10 | * { 11 | margin: 0; 12 | padding: 0; 13 | } 14 | 15 | html, body, div, span, applet, object, iframe, 16 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 17 | a, abbr, acronym, address, big, cite, code, 18 | del, dfn, em, img, ins, kbd, q, s, samp, 19 | small, strike, strong, sub, sup, tt, var, 20 | b, u, i, center, 21 | dl, dt, dd, ol, ul, li, 22 | fieldset, form, label, legend, 23 | table, caption, tbody, tfoot, thead, tr, th, td, 24 | article, aside, canvas, details, embed, 25 | figure, figcaption, footer, header, hgroup, 26 | menu, nav, output, ruby, section, summary, 27 | time, mark, audio, video { 28 | margin: 0; 29 | padding: 0; 30 | border: 0; 31 | font-size: 100%; 32 | font: inherit; 33 | vertical-align: baseline; 34 | } 35 | 36 | article, aside, details, figcaption, figure, 37 | footer, header, hgroup, menu, nav, section { 38 | display: block; 39 | } 40 | 41 | html { 42 | background: $color-black; 43 | box-sizing: border-box; 44 | color: $color-white; 45 | font-size: calc(100vw / 1920 * 10); 46 | height: 100%; 47 | left: 0; 48 | overflow: hidden; 49 | overscroll-behavior: none; 50 | position: fixed; 51 | -moz-osx-font-smoothing: grayscale; 52 | top: 0; 53 | -webkit-font-smoothing: antialiased; 54 | width: 100%; 55 | 56 | @include media('<=phone') { 57 | font-size: calc(100vw / 375 * 10); 58 | } 59 | } 60 | 61 | body { 62 | font: 1.4rem/1.5 $font-neue-haas-grotesk-regular; 63 | height: 100%; 64 | left: 0; 65 | opacity: 1; 66 | overflow: hidden; 67 | position: fixed; 68 | top: 0; 69 | width: 100%; 70 | } 71 | 72 | :focus { 73 | outline: none; 74 | } 75 | 76 | ::-moz-focus-inner { 77 | border: 0; 78 | } 79 | 80 | a { 81 | color: inherit; 82 | outline: none; 83 | pointer-events: auto; 84 | text-decoration: none; 85 | } 86 | 87 | button { 88 | background: none; 89 | border: none; 90 | border-radius: none; 91 | color: inherit; 92 | font: inherit; 93 | outline: none; 94 | pointer-events: auto; 95 | } 96 | 97 | img { 98 | max-width: 100%; 99 | vertical-align: middle; 100 | } 101 | 102 | input, 103 | textarea { 104 | appearance: none; 105 | background: none; 106 | border: none; 107 | border-radius: 0; 108 | outline: none; 109 | pointer-events: auto; 110 | } 111 | 112 | ol, ul { 113 | list-style: none; 114 | } 115 | 116 | .content { 117 | height: 100%; 118 | left: 0; 119 | overflow: auto; 120 | position: absolute; 121 | top: 0; 122 | width: 100%; 123 | } 124 | 125 | [data-animation="paragraph"] { 126 | span { 127 | display: inline-block; 128 | overflow: hidden; 129 | vertical-align: top; 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /styles/components/canvas.scss: -------------------------------------------------------------------------------- 1 | canvas { 2 | display: block; 3 | height: 100vh; 4 | left: 0; 5 | pointer-events: none; 6 | position: fixed; 7 | top: 0; 8 | width: 100%; 9 | z-index: z('canvas'); 10 | } 11 | -------------------------------------------------------------------------------- /styles/components/functionals.scss: -------------------------------------------------------------------------------- 1 | noscript { 2 | align-items: center; 3 | background: $color-black; 4 | color: $color-white; 5 | cursor: default; 6 | display: flex; 7 | font-size: 1.6rem; 8 | line-height: 1.1; 9 | height: 100%; 10 | justify-content: center; 11 | left: 0; 12 | padding: 4rem; 13 | position: fixed; 14 | text-align: center; 15 | top: 0; 16 | width: 100%; 17 | z-index: z('noscript'); 18 | } 19 | -------------------------------------------------------------------------------- /styles/components/navigation.scss: -------------------------------------------------------------------------------- 1 | .navigation { 2 | @extend %cover; 3 | 4 | pointer-events: none; 5 | z-index: z('navigation'); 6 | } 7 | 8 | .navigation__link { 9 | pointer-events: auto; 10 | } 11 | -------------------------------------------------------------------------------- /styles/components/preloader.scss: -------------------------------------------------------------------------------- 1 | .preloader { 2 | @extend %cover; 3 | 4 | background: $color-white; 5 | overflow: hidden; 6 | position: fixed; 7 | transform-origin: 0 0; 8 | z-index: z('preloader'); 9 | 10 | &--loaded { 11 | transform: scaleY(0); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /styles/index.scss: -------------------------------------------------------------------------------- 1 | @import './utils/variables'; 2 | @import './utils/functions'; 3 | @import './utils/responsive'; 4 | @import './utils/mixins'; 5 | @import './utils/vendors'; 6 | 7 | @import './base/fonts'; 8 | @import './base/reset'; 9 | 10 | @import './shared/links'; 11 | @import './shared/sections'; 12 | 13 | @import './components/canvas'; 14 | @import './components/functionals'; 15 | @import './components/navigation'; 16 | @import './components/preloader'; 17 | 18 | @import './pages/home/home'; 19 | 20 | @import './pages/about/about'; 21 | -------------------------------------------------------------------------------- /styles/pages/about/about.scss: -------------------------------------------------------------------------------- 1 | .about { 2 | 3 | } 4 | 5 | .about__content { 6 | 7 | } 8 | .about { 9 | @extend %page; 10 | 11 | font-size: 100rem; 12 | word-break: break-all; 13 | 14 | &--active { 15 | @extend %page--active; 16 | } 17 | } 18 | 19 | .about__content { 20 | @extend %content; 21 | } 22 | -------------------------------------------------------------------------------- /styles/pages/home/home.scss: -------------------------------------------------------------------------------- 1 | .home { 2 | @extend %page; 3 | 4 | font-size: 100rem; 5 | word-break: break-all; 6 | 7 | &--active { 8 | @extend %page--active; 9 | } 10 | } 11 | 12 | .home__content { 13 | @extend %content; 14 | } 15 | -------------------------------------------------------------------------------- /styles/shared/links.scss: -------------------------------------------------------------------------------- 1 | %link__wrapper { 2 | display: inline-block; 3 | overflow: hidden; 4 | position: relative; 5 | vertical-align: top; 6 | } 7 | 8 | %link__line { 9 | background: currentColor; 10 | bottom: 0; 11 | content: ''; 12 | height: 1px; 13 | left: 0; 14 | position: absolute; 15 | transition: transform 0.7s $ease-out-expo; 16 | width: 100%; 17 | } 18 | 19 | %link__line--visible { 20 | transform: scaleX(1); 21 | transform-origin: left center; 22 | } 23 | 24 | %link__line--hidden { 25 | transform: scaleX(0); 26 | transform-origin: right center; 27 | } 28 | 29 | %link { 30 | @extend %link__wrapper; 31 | 32 | display: inline-block; 33 | line-height: 1.05; 34 | 35 | &:after { 36 | @extend %link__line; 37 | @extend %link__line--visible; 38 | } 39 | 40 | &:hover, 41 | &:focus { 42 | &:after { 43 | @extend %link__line--hidden; 44 | } 45 | } 46 | } 47 | 48 | %link--hidden { 49 | @extend %link__wrapper; 50 | 51 | display: inline-block; 52 | line-height: 1.05; 53 | 54 | &:after { 55 | @extend %link__line; 56 | @extend %link__line--hidden; 57 | } 58 | 59 | &:hover, 60 | &:focus { 61 | &:after { 62 | @extend %link__line--visible; 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /styles/shared/sections.scss: -------------------------------------------------------------------------------- 1 | %page { 2 | height: 100%; 3 | left: 0; 4 | opacity: 0; 5 | overflow: hidden; 6 | pointer-events: none; 7 | position: absolute; 8 | top: 0; 9 | transition: opacity 1s ease, visibility 1s ease; 10 | visibility: hidden; 11 | width: 100%; 12 | z-index: z('content'); 13 | } 14 | 15 | %page--active { 16 | opacity: 1; 17 | pointer-events: auto; 18 | visibility: visible; 19 | } 20 | 21 | %content { 22 | left: 0; 23 | overflow: hidden; 24 | position: absolute; 25 | top: 0; 26 | width: 100%; 27 | will-change: transform; 28 | } 29 | -------------------------------------------------------------------------------- /styles/utils/functions.scss: -------------------------------------------------------------------------------- 1 | @function z($name) { 2 | @if index($z-indexes, $name) { 3 | @return (length($z-indexes) - index($z-indexes, $name)) + 1; 4 | } @else { 5 | @warn 'There is no item "#{$name}" in this list; Choose one of: #{$z-indexes}'; 6 | 7 | @return null; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /styles/utils/mixins.scss: -------------------------------------------------------------------------------- 1 | %cover { 2 | height: 100%; 3 | left: 0; 4 | object-fit: cover; 5 | position: absolute; 6 | top: 0; 7 | width: 100%; 8 | } 9 | 10 | @mixin placeholder { 11 | &.placeholder { @content; } 12 | &::-webkit-input-placeholder { @content; } 13 | &::-moz-placeholder { @content; } 14 | &:-moz-placeholder { @content; } 15 | &:-ms-input-placeholder { @content; } 16 | } 17 | 18 | @mixin ratio ($height, $width) { 19 | font-size: 0; 20 | overflow: hidden; 21 | position: relative; 22 | 23 | &:after { 24 | content: ''; 25 | display: inline-block; 26 | padding-top: $width / $height * 100%; 27 | width: 100%; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /styles/utils/responsive.scss: -------------------------------------------------------------------------------- 1 | $breakpoints: ( 2 | 'phone': 768px, 3 | 'tablet': 1024px, 4 | 'desktop': 1440px 5 | ) !default; 6 | 7 | @import '../../node_modules/include-media/dist/_include-media.scss'; 8 | -------------------------------------------------------------------------------- /styles/utils/variables.scss: -------------------------------------------------------------------------------- 1 | $color-black: #000; 2 | $color-white: #fff; 3 | 4 | $font-neue-haas-grotesk-regular: 'Neue Haas Grotesk Regular', sans-serif; 5 | 6 | $ease-out-expo: cubic-bezier(0.19, 1, 0.22, 1); 7 | 8 | $z-indexes: ( 9 | 'noscript', 10 | 'preloader', 11 | 'navigation', 12 | 'content', 13 | 'canvas', 14 | ); 15 | -------------------------------------------------------------------------------- /styles/utils/vendors.scss: -------------------------------------------------------------------------------- 1 | .dg.ac { 2 | z-index: 99999 !important; 3 | } 4 | -------------------------------------------------------------------------------- /views/base.pug: -------------------------------------------------------------------------------- 1 | block variables 2 | 3 | doctype html 4 | 5 | if !isAJAX 6 | html( 7 | class=isPhone || isTablet ? 'mobile' : 'desktop' 8 | lang="en" 9 | ) 10 | head 11 | meta(charset="UTF-8") 12 | meta(name="viewport" content="width=device-width, initial-scale=1.0") 13 | 14 | base(href="/") 15 | 16 | title=meta.data.title 17 | 18 | meta(name="description" content=meta.data.description) 19 | 20 | link(rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png") 21 | link(rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png") 22 | link(rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png") 23 | link(rel="manifest" href="/site.webmanifest") 24 | link(rel="mask-icon" href="/safari-pinned-tab.svg" color="#fbf7ec") 25 | meta(name="msapplication-TileColor" content="#fbf7ec") 26 | meta(name="theme-color" content="#fbf7ec") 27 | 28 | meta(property="og:type" content="website") 29 | meta(property="og:title" content=meta.data.title) 30 | meta(property="og:description" content=meta.data.description) 31 | meta(property="og:image" content=meta.data.image ? meta.data.image.url : '') 32 | 33 | meta(name="twitter:card" content="summary_large_image") 34 | meta(name="twitter:title" content=meta.data.title) 35 | meta(name="twitter:description" content=meta.data.description) 36 | meta(name="twitter:image" content=meta.data.image ? meta.data.image.url : '') 37 | 38 | link(rel="preconnect" href="https://www.google-analytics.com") 39 | 40 | style 41 | include ../public/main.css 42 | 43 | body 44 | include ./partials/preloader 45 | include ./partials/navigation 46 | 47 | .content#content(data-template=template) 48 | block body 49 | 50 | include ./partials/noscript 51 | 52 | script(async src=getVersionedPath('/main.js')) 53 | else 54 | html(lang="en") 55 | head 56 | title=meta.data.title 57 | 58 | body 59 | .content#content(data-template=template) 60 | block body 61 | -------------------------------------------------------------------------------- /views/pages/about.pug: -------------------------------------------------------------------------------- 1 | extends ../base.pug 2 | 3 | block variables 4 | - var template = 'about' 5 | 6 | block body 7 | .about 8 | .about__content 9 | | Lorem ipsum dolor sit amet. 10 | -------------------------------------------------------------------------------- /views/pages/home.pug: -------------------------------------------------------------------------------- 1 | extends ../base.pug 2 | 3 | block variables 4 | - var template = 'home' 5 | 6 | block body 7 | .home 8 | .home__content 9 | | Lorem ipsum dolor sit amet. 10 | -------------------------------------------------------------------------------- /views/partials/navigation.pug: -------------------------------------------------------------------------------- 1 | nav.navigation 2 | a.navigation__link(href="/") Home 3 | a.navigation__link(href="/about") About 4 | -------------------------------------------------------------------------------- /views/partials/noscript.pug: -------------------------------------------------------------------------------- 1 | noscript Please enable JavaScript to access this website. 2 | -------------------------------------------------------------------------------- /views/partials/preloader.pug: -------------------------------------------------------------------------------- 1 | .preloader 2 | -------------------------------------------------------------------------------- /webpack.config.build.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | 3 | const { CleanWebpackPlugin } = require('clean-webpack-plugin') 4 | 5 | const { merge } = require('webpack-merge') 6 | const config = require('./webpack.config') 7 | 8 | module.exports = merge(config, { 9 | mode: 'production', 10 | 11 | output: { 12 | path: path.join(__dirname, 'public') 13 | }, 14 | 15 | plugins: [ 16 | new CleanWebpackPlugin() 17 | ] 18 | }) 19 | -------------------------------------------------------------------------------- /webpack.config.development.js: -------------------------------------------------------------------------------- 1 | const { merge } = require('webpack-merge') 2 | const path = require('path') 3 | 4 | const config = require('./webpack.config') 5 | 6 | module.exports = merge(config, { 7 | mode: 'development', 8 | 9 | devtool: 'inline-source-map', 10 | 11 | devServer: { 12 | writeToDisk: true 13 | }, 14 | 15 | output: { 16 | path: path.resolve(__dirname, 'public') 17 | } 18 | }) 19 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const webpack = require('webpack') 3 | 4 | const CopyWebpackPlugin = require('copy-webpack-plugin') 5 | const MiniCssExtractPlugin = require('mini-css-extract-plugin') 6 | 7 | const IS_DEVELOPMENT = process.env.NODE_ENV === 'dev' 8 | 9 | const dirApp = path.join(__dirname, 'app') 10 | const dirAssets = path.join(__dirname, 'assets') 11 | const dirStyles = path.join(__dirname, 'styles') 12 | const dirNode = 'node_modules' 13 | 14 | module.exports = { 15 | entry: [ 16 | path.join(dirApp, 'index.js'), 17 | path.join(dirStyles, 'index.scss') 18 | ], 19 | 20 | resolve: { 21 | modules: [ 22 | dirApp, 23 | dirAssets, 24 | dirNode 25 | ] 26 | }, 27 | 28 | plugins: [ 29 | new webpack.DefinePlugin({ 30 | IS_DEVELOPMENT 31 | }), 32 | 33 | new webpack.ProvidePlugin({ 34 | 35 | }), 36 | 37 | new CopyWebpackPlugin({ 38 | patterns: [ 39 | { 40 | from: './app/service-worker.js', 41 | to: '' 42 | }, 43 | { 44 | from: './offline.html', 45 | to: '' 46 | }, 47 | { 48 | from: './shared', 49 | to: '' 50 | } 51 | ], 52 | }), 53 | 54 | new MiniCssExtractPlugin({ 55 | filename: '[name].css', 56 | chunkFilename: '[id].css' 57 | }) 58 | ], 59 | 60 | module: { 61 | rules: [ 62 | { 63 | test: /\.pug$/, 64 | use: ['pug-loader'] 65 | }, 66 | 67 | { 68 | test: /\.js$/, 69 | use: { 70 | loader: 'babel-loader' 71 | } 72 | }, 73 | 74 | { 75 | test: /\.(sa|sc|c)ss$/, 76 | use: [ 77 | { 78 | loader: MiniCssExtractPlugin.loader, 79 | options: { 80 | publicPath: '' 81 | } 82 | }, 83 | { 84 | loader: 'css-loader', 85 | options: { 86 | sourceMap: false 87 | } 88 | }, 89 | { 90 | loader: 'postcss-loader', 91 | options: { 92 | sourceMap: false 93 | } 94 | }, 95 | { 96 | loader: 'sass-loader', 97 | options: { 98 | sourceMap: false 99 | } 100 | } 101 | ] 102 | }, 103 | 104 | { 105 | test: /\.(jpe?g|png|gif|svg|woff2?|fnt|webp)$/, 106 | loader: 'file-loader', 107 | options: { 108 | name (file) { 109 | return '[hash].[ext]' 110 | } 111 | } 112 | }, 113 | 114 | { 115 | test: /\.(glsl|frag|vert)$/, 116 | loader: 'raw-loader', 117 | exclude: /node_modules/ 118 | }, 119 | 120 | { 121 | test: /\.(glsl|frag|vert)$/, 122 | loader: 'glslify-loader', 123 | exclude: /node_modules/ 124 | } 125 | ] 126 | } 127 | } 128 | --------------------------------------------------------------------------------