├── .editorconfig
├── .eslintrc.js
├── .github
├── FUNDING.yml
└── assets
│ ├── cover.gif
│ └── cover.jpg
├── .gitignore
├── .prettierignore
├── .prettierrc.js
├── .vscode
├── extensions.json
└── settings.json
├── LICENSE
├── README.md
├── assets
├── favicons
│ └── icon.png
├── images
│ ├── facebook-img.jpg
│ └── twitter-img.jpg
└── styles
│ ├── base.css
│ ├── main.css
│ └── tailwind.css
├── components
├── CursorFollower.vue
└── SmoothScroll.vue
├── config
├── default.js
├── development.js
├── index.js
└── production.js
├── dist
├── .nojekyll
├── 404.html
├── _nuxt
│ ├── 0b8b86d.modern.js
│ ├── 1630bc5.js
│ ├── 19b4308.js
│ ├── 2cc4024.js
│ ├── 48435ac.modern.js
│ ├── 93ad886.modern.js
│ ├── LICENSES
│ ├── b003ad5.js
│ ├── b22a4c5.modern.js
│ ├── b2cf17e.modern.js
│ ├── b7881bf.js
│ ├── b79eeca.modern.js
│ ├── css
│ │ ├── 22d8d18.css
│ │ └── 51b4c1b.css
│ ├── fa10ddf.js
│ ├── icons
│ │ ├── icon_192x192.d205f9.png
│ │ ├── icon_512x512.d205f9.png
│ │ ├── icon_64x64.d205f9.png
│ │ ├── splash_ipad_1536x2048.d205f9.png
│ │ ├── splash_ipadpro10_1668x2224.d205f9.png
│ │ ├── splash_ipadpro12_2048x2732.d205f9.png
│ │ ├── splash_ipadpro9_1536x2048.d205f9.png
│ │ ├── splash_iphone6_50x1334.d205f9.png
│ │ ├── splash_iphoneplus_1080x1920.d205f9.png
│ │ ├── splash_iphonese_640x1136.d205f9.png
│ │ ├── splash_iphonex_1125x2436.d205f9.png
│ │ ├── splash_iphonexr_828x1792.d205f9.png
│ │ └── splash_iphonexsmax_1242x2688.d205f9.png
│ ├── img
│ │ ├── facebook-img.893c889.jpg
│ │ └── twitter-img.1c3e460.jpg
│ ├── manifest.5622242a.json
│ └── static
│ │ └── 1656164883
│ │ ├── manifest.js
│ │ ├── payload.js
│ │ └── state.js
├── favicon.ico
├── fonts
│ ├── I-300.woff2
│ ├── I-400.woff2
│ ├── I-500.woff2
│ ├── I-600.woff2
│ └── font-face.css
├── images
│ ├── grain.gif
│ └── star.png
├── index.html
├── netlify.toml
├── robots.txt
├── sitemap.xml
├── sitemap.xml.gz
└── sw.js
├── layouts
├── default.vue
├── error.vue
└── errorLayout.vue
├── nuxt.config.js
├── package.json
├── pages
├── home
│ ├── SectionHero
│ │ ├── SvgTitle.vue
│ │ └── index.vue
│ ├── SectionItemLeft
│ │ └── index.vue
│ ├── SectionItemRight
│ │ └── index.vue
│ ├── SectionSpace
│ │ └── index.vue
│ └── index.vue
└── routes.js
├── plugins
└── locomotiveScroll.client.js
├── public
├── favicon.ico
├── fonts
│ ├── I-300.woff2
│ ├── I-400.woff2
│ ├── I-500.woff2
│ ├── I-600.woff2
│ └── font-face.css
└── images
│ ├── grain.gif
│ └── star.png
├── tailwind.config.js
├── templates
└── app.html
├── utils
└── getHeadData.js
└── yarn.lock
/.editorconfig:
--------------------------------------------------------------------------------
1 | # https://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | end_of_line = lf
7 | indent_size = 2
8 | indent_style = space
9 | insert_final_newline = true
10 | max_line_length = 80
11 | trim_trailing_whitespace = true
12 |
13 | [*.md]
14 | max_line_length = 0
15 | trim_trailing_whitespace = false
16 |
17 | [COMMIT_EDITMSG]
18 | max_line_length = 0
19 |
--------------------------------------------------------------------------------
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 |
4 | env: {
5 | browser: true,
6 | node: true
7 | },
8 |
9 | extends: ['@nuxtjs', 'eslint-config-prettier'],
10 |
11 | ignorePatterns: ['node_modules', '.nuxt', 'dist', 'sw.js']
12 | }
13 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 | github: ivodolenc
3 | custom: ['https://revolut.me/ivodolenc', 'https://paypal.me/ivodolenc']
4 |
--------------------------------------------------------------------------------
/.github/assets/cover.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/.github/assets/cover.gif
--------------------------------------------------------------------------------
/.github/assets/cover.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/.github/assets/cover.jpg
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # MacOS
2 | .DS_Store
3 |
4 | # Logs
5 | *.log
6 | npm-debug.log*
7 | yarn-debug.log*
8 | yarn-error.log*
9 |
10 | # Dependency directories
11 | node_modules/
12 | package-lock.json
13 |
14 | # Optional npm cache directory
15 | .npm
16 |
17 | # Optional eslint cache
18 | .eslintcache
19 |
20 | # Dotenv
21 | .env
22 |
23 | # Nuxt build output
24 | .nuxt
25 |
26 | # Nuxt generate
27 | # dist
28 |
29 | # Service worker
30 | static/sw.*
31 | public/sw.*
32 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .nuxt
3 | dist
4 |
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | arrowParens: 'avoid',
3 | semi: false,
4 | singleQuote: true,
5 | trailingComma: 'none'
6 | }
7 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | "recommendations": [
3 | "EditorConfig.EditorConfig",
4 | "dbaeumer.vscode-eslint",
5 | "esbenp.prettier-vscode"
6 | ]
7 | }
8 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": true,
3 | "javascript.validate.enable": false,
4 | "javascript.format.enable": false,
5 | "css.validate": false,
6 | "eslint.alwaysShowStatus": true,
7 | "eslint.options": {
8 | "extensions": [".html", ".js", ".ts", ".vue"]
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Ivo Dolenc
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Nuxt + Locomotive Scroll
5 | Starter template for parallax effects & smooth scrolling experience. Empower your Nuxt project in no time.
6 | See it in action → LIVE DEMO
7 |
8 |
9 |
10 | ## What's included
11 |
12 | Boilerplate provides many pre-configured modules such as
13 |
14 | - [Locomotive Scroll](https://github.com/locomotivemtl/locomotive-scroll) → A smooth-scroll library with powerfull built-in solutions
15 | - [GSAP](https://github.com/ivodolenc/nuxt-gsap-module) → Professional-grade animation for the modern web
16 | - [Tailwind CSS](https://github.com/tailwindlabs/tailwindcss) → A utility-first CSS framework for rapid UI development
17 | - [LazySizes](https://github.com/ivodolenc/nuxt-lazysizes) → High performance and SEO friendly lazy loader for images
18 | - [PWA module](https://github.com/nuxt-community/pwa-module) → Zero config PWA solution for Nuxt.js
19 | - [Font Loader](https://github.com/ivodolenc/nuxt-font-loader) → Simple, modern and lightweight font loader for Nuxt projects
20 | - and more...
21 |
22 | ## Quick Start
23 |
24 | 1. Clone this repo to your working directory:
25 |
26 | ```sh
27 | $ git clone https://github.com/ivodolenc/nuxt-locomotive.git
28 | ```
29 |
30 | 2. Move to the project directory:
31 |
32 | ```sh
33 | $ cd
34 | ```
35 |
36 | 3. Install all dependencies:
37 |
38 | ```sh
39 | $ yarn # or npm install
40 | ```
41 |
42 | ## Build Setup
43 |
44 | Start the local `dev` server:
45 |
46 | ```sh
47 | $ yarn dev # or npm run dev
48 | ```
49 |
50 | ## Static Deployment
51 |
52 | Nuxt.js will create a `dist/` directory with everything inside ready to be deployed on a static hosting service.
53 |
54 | Generate your static application:
55 |
56 | ```sh
57 | $ yarn generate # or npm run generate
58 | ```
59 |
60 | Once your application is built you can use the `start` command to see a production version of your application.
61 |
62 | Serve the generated static application from a `dist/` directory:
63 |
64 | ```sh
65 | $ yarn start # or npm run start
66 | ```
67 |
68 | This is useful for final testing before deploying.
69 |
70 | ## Related
71 |
72 | [Nuxt Static Boilerplate](https://github.com/ivodolenc/nuxt-static-boilerplate) → A well-organized Nuxt template for creating fast static applications.
73 |
74 | ## License
75 |
76 | **Locomotive Scroll**
77 |
78 | [MIT License](https://github.com/locomotivemtl/locomotive-scroll/blob/master/LICENSE)
79 |
80 | Copyright (c) Locomotive
81 |
82 | **Nuxt + Locomotive**
83 |
84 | [MIT License](LICENSE)
85 |
86 | Copyright (c) Ivo Dolenc
87 |
--------------------------------------------------------------------------------
/assets/favicons/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/assets/favicons/icon.png
--------------------------------------------------------------------------------
/assets/images/facebook-img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/assets/images/facebook-img.jpg
--------------------------------------------------------------------------------
/assets/images/twitter-img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/assets/images/twitter-img.jpg
--------------------------------------------------------------------------------
/assets/styles/base.css:
--------------------------------------------------------------------------------
1 | html.has-scroll-smooth,
2 | .has-scroll-smooth body {
3 | @apply overflow-hidden;
4 | }
5 |
6 | html.has-scroll-dragging {
7 | @apply select-none;
8 | }
9 |
10 | .has-scroll-smooth [data-scroll-container] {
11 | @apply min-h-screen;
12 | }
13 |
14 | [data-scroll-direction='horizontal'] [data-scroll-container] {
15 | @apply h-screen inline-block whitespace-nowrap;
16 | }
17 |
18 | [data-scroll-direction='horizontal'] [data-scroll-section] {
19 | @apply inline-block align-top whitespace-nowrap h-full;
20 | }
21 |
22 | html {
23 | @apply bg-dark text-white;
24 | }
25 |
26 | .lazyload,
27 | .lazyloading {
28 | @apply opacity-0;
29 | }
30 |
31 | .lazyloaded {
32 | @apply opacity-100 transition-opacity duration-500;
33 | }
34 |
--------------------------------------------------------------------------------
/assets/styles/main.css:
--------------------------------------------------------------------------------
1 | @import 'tailwind.css';
2 | @import 'base.css';
3 |
--------------------------------------------------------------------------------
/assets/styles/tailwind.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/components/CursorFollower.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
53 |
54 |
70 |
--------------------------------------------------------------------------------
/components/SmoothScroll.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/config/default.js:
--------------------------------------------------------------------------------
1 | export default {
2 | isDev: process.env.NODE_ENV === 'development',
3 |
4 | nuxt: {
5 | routerBase: '/',
6 | globalName: 'nuxt',
7 | publicPath: '/_nuxt/'
8 | },
9 |
10 | app: {
11 | name: 'Nuxt + Locomotive',
12 | shortName: 'Nuxt Locomotive',
13 | description:
14 | 'Starter template for parallax effects & smooth scrolling experience',
15 | author: 'namesurname',
16 |
17 | title: 'Nuxt + Locomotive',
18 | titleSeparator: ' — ',
19 | titleTemplate:
20 | 'Starter template for parallax effects & smooth scrolling experience',
21 |
22 | charset: 'utf-8',
23 | lang: 'en-US',
24 | locale: 'en_US',
25 | type: 'website',
26 | themeColor: '#030303',
27 | backgroundColor: '#030303'
28 | },
29 |
30 | breakpoints: {
31 | sm: '640px',
32 | md: '768px',
33 | lg: '1024px',
34 | xl: '1280px',
35 | '2xl': '1536px'
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/config/development.js:
--------------------------------------------------------------------------------
1 | export default {
2 | server: {
3 | hostname: 'localhost',
4 | port: '3003'
5 | },
6 |
7 | app: {
8 | baseUrl: 'http://localhost:3003',
9 | url: 'http://localhost:3003'
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/config/index.js:
--------------------------------------------------------------------------------
1 | import defu from 'defu'
2 | import defaults from './default'
3 | import development from './development'
4 | import production from './production'
5 |
6 | const environment = defaults.isDev ? development : production
7 | const config = defu({}, environment, defaults)
8 |
9 | export default config
10 |
--------------------------------------------------------------------------------
/config/production.js:
--------------------------------------------------------------------------------
1 | export default {
2 | server: {
3 | hostname: 'localhost',
4 | port: '8008'
5 | },
6 |
7 | app: {
8 | baseUrl: 'https://nuxt-locomotive.netlify.app',
9 | url: 'https://nuxt-locomotive.netlify.app'
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/dist/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/.nojekyll
--------------------------------------------------------------------------------
/dist/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/dist/_nuxt/1630bc5.js:
--------------------------------------------------------------------------------
1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[0],{123:function(t,e,o){"use strict";var r=o(52),n=(o(16),o(117)),c={isDev:!1,nuxt:{routerBase:"/",globalName:"nuxt",publicPath:"/_nuxt/"},app:{name:"Nuxt + Locomotive",shortName:"Nuxt Locomotive",description:"Starter template for parallax effects & smooth scrolling experience",author:"namesurname",title:"Nuxt + Locomotive",titleSeparator:" — ",titleTemplate:"Starter template for parallax effects & smooth scrolling experience",charset:"utf-8",lang:"en-US",locale:"en_US",type:"website",themeColor:"#030303",backgroundColor:"#030303"},breakpoints:{sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"}},l=c.isDev?{server:{hostname:"localhost",port:"3003"},app:{baseUrl:"http://localhost:3003",url:"http://localhost:3003"}}:{server:{hostname:"localhost",port:"8008"},app:{baseUrl:"https://nuxt-locomotive.netlify.app",url:"https://nuxt-locomotive.netlify.app"}},h=Object(n.a)({},l,c),m=function(){var path=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return[{rel:"canonical",href:h.app.url+path}]},d=function(){var path=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return[{hid:"og:title",property:"og:title",content:h.app.title},{hid:"og:description",property:"og:description",content:h.app.description},{hid:"og:type",property:"og:type",content:h.app.type},{hid:"og:site_name",property:"og:site_name",content:h.app.title},{hid:"og:locale",property:"og:locale",content:h.app.locale},{hid:"og:url",property:"og:url",content:h.app.url+path},{hid:"og:image",property:"og:image",content:h.app.url+o(167)}]},f=function(){var path=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return[{hid:"application/ld+json",type:"application/ld+json",json:{"@context":"https://schema.org","@type":h.app.type,name:h.app.name,url:h.app.url+path,sameAs:["https://www.facebook.com/","https://www.instagram.com/","https://www.twitter.com/"]}}]},v={head:function(){var path=this.$route.path;return{meta:[].concat(Object(r.a)(d(path)),Object(r.a)([{hid:"twitter:card",name:"twitter:card",content:"summary_large_image"},{hid:"twitter:title",name:"twitter:title",content:h.app.title},{hid:"twitter:description",name:"twitter:description",content:h.app.description},{hid:"twitter:image:src",name:"twitter:image:src",content:h.app.url+o(168)}])),link:Object(r.a)(m(path)),script:Object(r.a)(f(path))}}},x=o(32),component=Object(x.a)(v,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"__default"}},[e("Nuxt")],1)}),[],!1,null,null,null);e.a=component.exports},124:function(t,e,o){"use strict";var r={},n=o(32),component=Object(n.a)(r,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"__error"}},[e("Nuxt")],1)}),[],!1,null,null,null);e.a=component.exports},125:function(t,e,o){t.exports=o(126)},166:function(t,e,o){t.exports={}},167:function(t,e,o){t.exports=o.p+"img/facebook-img.893c889.jpg"},168:function(t,e,o){t.exports=o.p+"img/twitter-img.1c3e460.jpg"},24:function(t,e,o){"use strict";var r={layout:"errorLayout",props:{error:{type:Object,required:!0}},head:function(){return{title:"Error"+this.$config.app.titleSeparator+"404 Not Found"}}},n=o(32),component=Object(n.a)(r,(function(){var t=this,e=t.$createElement,o=t._self._c||e;return o("div",[404===t.error.statusCode?o("h1",[t._v("Page not found")]):o("h1",[t._v("An error occurred")]),t._v(" "),o("NuxtLink",{attrs:{to:"/"}},[t._v("BACK TO HOME")])],1)}),[],!1,null,null,null);e.a=component.exports},90:function(t,e,o){"use strict";var r=o(120);e.a=function(t,e){t.app;e("LocomotiveScroll",r.a)}}},[[125,2,1,3]]]);
--------------------------------------------------------------------------------
/dist/_nuxt/48435ac.modern.js:
--------------------------------------------------------------------------------
1 | !function(e){function t(data){for(var t,n,o=data[0],f=data[1],d=data[2],i=0,h=[];i
24 | * Released under the MIT License.
25 | */
26 |
27 | /*!
28 | * vue-no-ssr v1.1.1
29 | * (c) 2018-present egoist <0x142857@gmail.com>
30 | * Released under the MIT License.
31 | */
32 |
33 |
34 | /*!
35 | * vue-router v3.5.4
36 | * (c) 2022 Evan You
37 | * @license MIT
38 | */
39 |
40 | /*!
41 | * Vue.js v2.6.14
42 | * (c) 2014-2021 Evan You
43 | * Released under the MIT License.
44 | */
45 |
--------------------------------------------------------------------------------
/dist/_nuxt/b003ad5.js:
--------------------------------------------------------------------------------
1 | !function(e){function t(data){for(var t,n,o=data[0],f=data[1],d=data[2],i=0,h=[];i{l.x=e.x,l.y=e.y,t.set(".cursor-follower",{opacity:1,duration:2,ease:"expo.out"})})),t.ticker.add(((time,t)=>{var e=.06*t,dt=1-Math.pow(.87,e);c.x+=(l.x-c.x)*dt,c.y+=(l.y-c.y)*dt,n(c.x),o(c.y)}))}}},y=(c(124),{components:{SectionHero:r,SectionSpace:m,SectionItemLeft:v,SectionItemRight:_,SmoothScroll:S,CursorFollower:Object(n.a)(w,(function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"cursor-follower"})}),[],!1,null,"b7c0cda2",null).exports},data:()=>({scroll:null}),head(){return{title:this.$config.app.title+this.$config.app.titleSeparator+this.$config.app.titleTemplate,meta:[{hid:"description",name:"description",content:this.$config.app.description}]}},mounted(){this.locomotiveScrollInit(),this.setHeroAnimation(),this.setItemAnimation()},beforeDestroy(){this.scroll.destroy()},methods:{locomotiveScrollInit(){this.scroll=new this.$LocomotiveScroll({el:document.querySelector("[data-scroll-container]"),smooth:!0,getDirection:!0}),this.scroll.stop()},setHeroAnimation(){var t=document.querySelector("[data-img-star]");this.$gsap.timeline({defaults:{duration:3,ease:"expo.out"}}).to("[data-svg-title]",{y:0,opacity:1}).to("[data-img-star]",{opacity:1,scale:1,rotation:360,onComplete:()=>{this.scroll.update(),this.scroll.start(),this.scroll.on("scroll",(e=>{t.style.transform="rotate(".concat(.05*e.scroll.y,"deg)")}))}},"-=2.5")},setItemAnimation(){this.scroll.on("call",((t,e,c)=>{"itemAnimation"===t&&"enter"===e&&this.$gsap.to(c.el,{scaleX:1,ease:"expo.out",duration:3})}))}}}),C=Object(n.a)(y,(function(){var t=this,e=t.$createElement,c=t._self._c||e;return c("main",[c("SectionHero"),t._v(" "),c("SmoothScroll",[c("SectionSpace"),t._v(" "),c("SectionItemLeft"),t._v(" "),c("SectionItemRight"),t._v(" "),c("SectionItemLeft"),t._v(" "),c("SectionItemRight"),t._v(" "),c("SectionItemLeft"),t._v(" "),c("SectionItemRight"),t._v(" "),c("SectionItemLeft"),t._v(" "),c("SectionSpace")],1),t._v(" "),c("CursorFollower")],1)}),[],!1,null,null,null);e.default=C.exports}}]);
--------------------------------------------------------------------------------
/dist/_nuxt/b2cf17e.modern.js:
--------------------------------------------------------------------------------
1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[5],{116:function(e,t,n){"use strict";n.r(t),n.d(t,"Workbox",(function(){return h})),n.d(t,"messageSW",(function(){return r}));try{self["workbox:window:5.1.4"]&&_()}catch(r){}function r(e,t){return new Promise((function(n){var r=new MessageChannel;r.port1.onmessage=function(e){n(e.data)},e.postMessage(t,[r.port2])}))}function o(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}try{self["workbox:core:5.1.4"]&&_()}catch(r){}var i=function(){var e=this;this.promise=new Promise((function(t,n){e.resolve=t,e.reject=n}))};function f(e,t){var n=location.href;return new URL(e,n).href===new URL(t,n).href}var u=function(e,t){this.type=e,Object.assign(this,t)};function a(e,t,n){return n?t?t(e):e:(e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e)}function l(){}var h=function(e){var t,n;function c(t,n){var r,o;return void 0===n&&(n={}),(r=e.call(this)||this).t={},r.i=0,r.o=new i,r.u=new i,r.s=new i,r.v=0,r.h=new Set,r.l=function(){var e=r.m,t=e.installing;r.i>0||!f(t.scriptURL,r.g)||performance.now()>r.v+6e4?(r.p=t,e.removeEventListener("updatefound",r.l)):(r.P=t,r.h.add(t),r.o.resolve(t)),++r.i,t.addEventListener("statechange",r.S)},r.S=function(e){var t=r.m,n=e.target,i=n.state,o=n===r.p,a=o?"external":"",c={sw:n,originalEvent:e};!o&&r.j&&(c.isUpdate=!0),r.dispatchEvent(new u(a+i,c)),"installed"===i?r.A=self.setTimeout((function(){"installed"===i&&t.waiting===n&&r.dispatchEvent(new u(a+"waiting",c))}),200):"activating"===i&&(clearTimeout(r.A),o||r.u.resolve(n))},r.O=function(e){var t=r.P;t===navigator.serviceWorker.controller&&(r.dispatchEvent(new u("controlling",{sw:t,originalEvent:e,isUpdate:r.j})),r.s.resolve(t))},r.U=(o=function(e){var t=e.data,n=e.source;return a(r.getSW(),(function(){r.h.has(n)&&r.dispatchEvent(new u("message",{data:t,sw:n,originalEvent:e}))}))},function(){for(var e=[],t=0;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[i++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(n=e[Symbol.iterator]()).next.bind(n)}try{self["workbox:core:5.1.4"]&&_()}catch(r){}var i=function(){var e=this;this.promise=new Promise((function(t,n){e.resolve=t,e.reject=n}))};function f(e,t){var n=location.href;return new URL(e,n).href===new URL(t,n).href}var u=function(e,t){this.type=e,Object.assign(this,t)};function a(e,t,n){return n?t?t(e):e:(e&&e.then||(e=Promise.resolve(e)),t?e.then(t):e)}function l(){}var h=function(e){var t,n;function c(t,n){var r,o;return void 0===n&&(n={}),(r=e.call(this)||this).t={},r.i=0,r.o=new i,r.u=new i,r.s=new i,r.v=0,r.h=new Set,r.l=function(){var e=r.m,t=e.installing;r.i>0||!f(t.scriptURL,r.g)||performance.now()>r.v+6e4?(r.p=t,e.removeEventListener("updatefound",r.l)):(r.P=t,r.h.add(t),r.o.resolve(t)),++r.i,t.addEventListener("statechange",r.S)},r.S=function(e){var t=r.m,n=e.target,i=n.state,o=n===r.p,a=o?"external":"",c={sw:n,originalEvent:e};!o&&r.j&&(c.isUpdate=!0),r.dispatchEvent(new u(a+i,c)),"installed"===i?r.A=self.setTimeout((function(){"installed"===i&&t.waiting===n&&r.dispatchEvent(new u(a+"waiting",c))}),200):"activating"===i&&(clearTimeout(r.A),o||r.u.resolve(n))},r.O=function(e){var t=r.P;t===navigator.serviceWorker.controller&&(r.dispatchEvent(new u("controlling",{sw:t,originalEvent:e,isUpdate:r.j})),r.s.resolve(t))},r.U=(o=function(e){var t=e.data,n=e.source;return a(r.getSW(),(function(){r.h.has(n)&&r.dispatchEvent(new u("message",{data:t,sw:n,originalEvent:e}))}))},function(){for(var e=[],t=0;t{var{app:r}=t;e("LocomotiveScroll",o.a)}},79:function(t,e,r){"use strict";var o=r(73),n={isDev:!1,nuxt:{routerBase:"/",globalName:"nuxt",publicPath:"/_nuxt/"},app:{name:"Nuxt + Locomotive",shortName:"Nuxt Locomotive",description:"Starter template for parallax effects & smooth scrolling experience",author:"namesurname",title:"Nuxt + Locomotive",titleSeparator:" — ",titleTemplate:"Starter template for parallax effects & smooth scrolling experience",charset:"utf-8",lang:"en-US",locale:"en_US",type:"website",themeColor:"#030303",backgroundColor:"#030303"},breakpoints:{sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"}},l=n.isDev?{server:{hostname:"localhost",port:"3003"},app:{baseUrl:"http://localhost:3003",url:"http://localhost:3003"}}:{server:{hostname:"localhost",port:"8008"},app:{baseUrl:"https://nuxt-locomotive.netlify.app",url:"https://nuxt-locomotive.netlify.app"}},c=Object(o.a)({},l,n),h=function(){var path=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return[{rel:"canonical",href:c.app.url+path}]},m=function(){var path=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return[{hid:"og:title",property:"og:title",content:c.app.title},{hid:"og:description",property:"og:description",content:c.app.description},{hid:"og:type",property:"og:type",content:c.app.type},{hid:"og:site_name",property:"og:site_name",content:c.app.title},{hid:"og:locale",property:"og:locale",content:c.app.locale},{hid:"og:url",property:"og:url",content:c.app.url+path},{hid:"og:image",property:"og:image",content:c.app.url+r(113)}]},d=function(){var path=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return[{hid:"application/ld+json",type:"application/ld+json",json:{"@context":"https://schema.org","@type":c.app.type,name:c.app.name,url:c.app.url+path,sameAs:["https://www.facebook.com/","https://www.instagram.com/","https://www.twitter.com/"]}}]},f={head(){var{path:path}=this.$route;return{meta:[...m(path),{hid:"twitter:card",name:"twitter:card",content:"summary_large_image"},{hid:"twitter:title",name:"twitter:title",content:c.app.title},{hid:"twitter:description",name:"twitter:description",content:c.app.description},{hid:"twitter:image:src",name:"twitter:image:src",content:c.app.url+r(114)}],link:[...h(path)],script:[...d(path)]}}},v=r(19),component=Object(v.a)(f,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"__default"}},[e("Nuxt")],1)}),[],!1,null,null,null);e.a=component.exports},80:function(t,e,r){"use strict";var o={},n=r(19),component=Object(n.a)(o,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{attrs:{id:"__error"}},[e("Nuxt")],1)}),[],!1,null,null,null);e.a=component.exports},81:function(t,e,r){t.exports=r(82)}},[[81,2,1,3]]]);
--------------------------------------------------------------------------------
/dist/_nuxt/css/22d8d18.css:
--------------------------------------------------------------------------------
1 | /*! tailwindcss v3.1.4 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:I,Helvetica,Arial,sans-serif}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent}::-webkit-backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent}::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scroll-snap-strictness:proximity;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,0.5);--tw-ring-offset-shadow:0 0 transparent;--tw-ring-shadow:0 0 transparent;--tw-shadow:0 0 transparent;--tw-shadow-colored:0 0 transparent}.pointer-events-none{pointer-events:none}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.top-0{top:0}.left-0{left:0}.z-50{z-index:50}.z-30{z-index:30}.z-10{z-index:10}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.h-full{height:100%}.h-screen{height:100vh}.w-full{width:100%}.max-w-\[60vw\]{max-width:60vw}.max-w-screen-xl{max-width:1280px}.translate-y-\[150\%\]{--tw-translate-y:150%}.scale-0,.translate-y-\[150\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.scale-0{--tw-scale-x:0;--tw-scale-y:0}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.items-center{align-items:center}.justify-center{justify-content:center}.overflow-hidden{overflow:hidden}.object-cover{-o-object-fit:cover;object-fit:cover}.p-10{padding:2.5rem}.pt-\[100\%\]{padding-top:100%}.opacity-0{opacity:0}.transition{transition-property:color,background-color,border-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-text-decoration-color,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.has-scroll-smooth body,html.has-scroll-smooth{overflow:hidden}html.has-scroll-dragging{-webkit-user-select:none;-moz-user-select:none;user-select:none}.has-scroll-smooth [data-scroll-container]{min-height:100vh}[data-scroll-direction=horizontal] [data-scroll-container]{display:inline-block;height:100vh;white-space:nowrap}[data-scroll-direction=horizontal] [data-scroll-section]{display:inline-block;height:100%;white-space:nowrap;vertical-align:top}html{--tw-bg-opacity:1;background-color:rgb(3 3 3/var(--tw-bg-opacity));--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity))}.lazyload,.lazyloading{opacity:0}.lazyloaded{opacity:1;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.5s}@media (min-width:1024px){.lg\:max-w-\[40vw\]{max-width:40vw}}@media (min-width:1280px){.xl\:max-w-\[80vw\]{max-width:80vw}}
--------------------------------------------------------------------------------
/dist/_nuxt/css/51b4c1b.css:
--------------------------------------------------------------------------------
1 | [data-section-hero][data-v-1c90a4cf]:after{content:"";position:fixed;top:0;left:0;height:100%;width:100%;opacity:.13;background-image:url(/images/grain.gif)}[data-scroll-section][data-v-d9ee93bc]{display:flex;padding:30vh 5vw}[data-block-item][data-v-d9ee93bc]{width:100%;max-width:30vw;background-color:#232323;height:65vh;transform:scaleX(0);transform-origin:top left}[data-scroll-section][data-v-b60031ee]{display:flex;padding:30vh 5vw}[data-block-item][data-v-b60031ee]{width:100%;max-width:30vw;background-color:#232323;height:65vh;transform:scaleX(0);transform-origin:top left}.cursor-follower[data-v-b7c0cda2]{z-index:1000;position:fixed;width:3.3rem;height:3.3rem;top:0;left:0;background-color:grey;border-radius:50%;opacity:0;mix-blend-mode:difference;pointer-events:none;transform:translate3d(-50%,-50%,0)}
--------------------------------------------------------------------------------
/dist/_nuxt/fa10ddf.js:
--------------------------------------------------------------------------------
1 | (window.webpackJsonp=window.webpackJsonp||[]).push([[4],{172:function(t,e,c){t.exports={}},173:function(t,e,c){t.exports={}},174:function(t,e,c){t.exports={}},175:function(t,e,c){t.exports={}},176:function(t,e,c){"use strict";c(172)},177:function(t,e,c){"use strict";c(173)},178:function(t,e,c){"use strict";c(174)},179:function(t,e,c){"use strict";c(175)},180:function(t,e,c){"use strict";c.r(e);var n={},o=c(32),l={components:{SvgTitle:Object(o.a)(n,(function(){var t=this,e=t.$createElement,c=t._self._c||e;return c("svg",{attrs:{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1000 64"}},[c("style",{attrs:{type:"text/css"}},[t._v("\n .st0 {\n fill: url(#SVGID_1_);\n }\n ")]),t._v(" "),c("linearGradient",{attrs:{id:"SVGID_1_",gradientUnits:"userSpaceOnUse",x1:"0",y1:"31.9626",x2:"999.9999",y2:"31.9626"}},[c("stop",{staticStyle:{"stop-color":"#232323"},attrs:{offset:"0"}}),t._v(" "),c("stop",{staticStyle:{"stop-color":"#fff"},attrs:{offset:"0.5"}}),t._v(" "),c("stop",{staticStyle:{"stop-color":"#232323"},attrs:{offset:"1"}})],1),t._v(" "),c("path",{staticClass:"st0",attrs:{d:"M65.4,1.7h1.2v60.6H53.9L12.2,12.9v49.4h-1.1V11.7L0,1.7h19.3l46.3,52.8L65.4,1.7z M130.7,33.8\n\tc0,9.4-2.3,16.6-7.1,21.4s-10.5,7.2-17.2,7.2c-5.8,0-10.3-2.7-13.5-8S88,42.2,87.8,33.8V1.7H75v32.1c0,8.3,3,15.3,8.7,20.9\n\tc5.8,5.7,13.4,8.5,22.7,8.6c7.9,0.1,14-2.8,18.6-8.4c4.5-5.6,6.8-12.6,6.8-21.1V1.7h-1.1V33.8z M202.8,1.7h-1.5l-26.7,26.8L151,1.7\n\th-15.3l30.9,34.9l-25.8,25.8h1.2l25.2-25.1l22.2,25.1h15.2l-29.3-33.2L202.8,1.7z M208.9,1.7l-2.6,22.4\n\tc11.5-14.3,18.3-21.5,20.1-21.5h4.5v59.8h11.2V2.6h4.7c1.8,0,8.6,7.2,20.1,21.4l-2.6-22.3H208.9z M315.7,13.5h-1.6v21.6H293v1.6\n\th21.1v21h1.6v-21h21.5v-1.6h-21.5V13.5z M393.1,56.6c-3.9,3.4-6.5,5-7.7,5h-5.8V1.7H368v60.7h37.1l13.7-29c-2.4,2-6.3,5.5-11.8,10.6\n\tC401.6,49.1,397,53.2,393.1,56.6z M480.6,14.2c5.4,7.3,7.5,15.2,6.4,23.8c-1.1,8.6-5.1,15.3-12,20.3c-6.9,4.9-14.7,6.7-23.4,5\n\tc-8.7-1.7-15.7-6.2-21-13.3c-5.4-7.2-7.5-15.2-6.4-23.8c1-8.7,5-15.5,11.9-20.5c6.8-4.9,14.7-6.6,23.5-4.9\n\tC468.3,2.4,475.4,7,480.6,14.2z M480.3,41c-1.2-6.9-4.9-13.9-10.9-20.9c-6.2-7.2-11.2-11.6-16.7-14.6s-10.8-2.9-15.8,0.7\n\tc-6.6,4.8-7.7,13.4-4.2,22.7c1.6,4.7,4.3,9.4,7.9,14.3c10.5,14.2,24,21.4,34.2,14.1C479.7,53.4,481.6,48,480.3,41z M546,47.6\n\tc-2.8,2.5-5.8,5-9.2,7.5c-3.3,2.5-6.6,4.2-10,5.1c-3.4,1-6.5,1-9.3,0.1c-5.6-1.8-9.4-11.3-9.4-28c0-21,7.4-31.5,20.9-31\n\tc2.3,0.1,4.5,0.4,6.5,1.2c4,1.5,6.2,3.4,9,7c1.3,1.9,2.4,3.4,3.3,4.9c1.5,2.7,4.8,8.5,6.4,11l-0.5-19.5c-12.1-5-22.7-6.7-31.8-5.1\n\tc-5.8,1-10.9,3.2-15.2,6.6c-8.7,7-12.8,16-12.8,24.9c0,5.5,1.7,10.7,5.2,15.5c3.4,4.8,8,8.6,13.7,11.4s11.8,4.2,18.3,4.2\n\tc5.6,0,11.5-1.5,15.1-3c1.7-0.8,3.4-1.6,5-2.6c3.2-2,3.8-2.6,4.2-3V38l-2.6,2.9C551,42.9,548.8,45.1,546,47.6z M619.5,14.2\n\tc5.4,7.3,7.5,15.2,6.4,23.8c-1.1,8.6-5.1,15.3-12,20.3c-6.9,4.9-14.7,6.7-23.4,5c-8.7-1.7-15.7-6.2-21-13.3\n\tc-5.4-7.2-7.5-15.2-6.4-23.8s5.1-15.5,11.9-20.5c6.8-4.9,14.7-6.6,23.5-4.9C607.2,2.4,614.3,7,619.5,14.2z M619.2,41\n\tc-1.2-6.9-4.9-13.9-10.9-20.9c-6.2-7.2-11.2-11.6-16.7-14.6s-10.8-2.9-15.8,0.7c-6.6,4.8-7.7,13.4-4.2,22.7\n\tc1.6,4.7,4.3,9.4,7.9,14.3c10.6,14.2,24,21.4,34.2,14.1C618.6,53.4,620.5,48,619.2,41z M674.8,45.3L644,1.7h-17.7l7.2,8.4v52.2h22.7\n\tc-6.8-2.4-12.1-5.6-15.9-9.8c-3.8-4.1-5.7-7.9-5.7-11.5V11.2L671,62.3h16.4l-12-16.1l29.4-42.4l0.1,58.5h12.6V1.7h-12.6L674.8,45.3z\n\t M782.5,14.2c5.4,7.3,7.5,15.2,6.4,23.8c-1.1,8.6-5.1,15.3-12,20.3c-6.9,4.9-14.7,6.7-23.4,5c-8.7-1.7-15.7-6.2-21-13.3\n\tc-5.4-7.2-7.5-15.2-6.4-23.8c1.1-8.7,5.1-15.5,11.9-20.5c6.8-4.9,14.7-6.6,23.5-4.9C770.2,2.4,777.3,7,782.5,14.2z M782.3,41\n\tc-1.2-6.9-4.9-13.9-10.9-20.9c-6.2-7.2-11.2-11.6-16.7-14.6s-10.8-2.9-15.8,0.7c-6.6,4.8-7.7,13.4-4.2,22.7\n\tc1.6,4.7,4.3,9.4,7.9,14.3c10.5,14.2,23.9,21.4,34.2,14.1C781.7,53.4,783.6,48,782.3,41z M850.8,0.7c-1.7,0.7-2.7,1-4,1h-45.7\n\tc-1.7,0-4.4-1.3-5.7-1.7l-2.6,27.4c2-3.2,4.2-6.6,6.7-10c2.5-3.4,5.3-6.7,8.5-9.8c3.1-3.1,5.6-4.7,7.5-4.7h2.8v59.5h11.2V2.9h2.8\n\tc2.4,0,5.8,2.5,10.2,7.5S851,21.1,855,27.3L852.4,0C852.1,0.1,851.6,0.4,850.8,0.7z M863.1,62.3h11.3V1.7h-11.3V62.3z M932.7,16.2\n\tl-16.4,32.2L892.5,1.7h-13.8l31.9,60.8l30.3-60.8h-32.3L932.7,16.2z M993.3,49.5c-3.2,1.9-6.2,3.7-9.1,5.3\n\tc-2.8,1.6-6.2,3.1-10.1,4.4c-3.9,1.4-7.4,2.1-10.6,2.1H959V42.2l32.2-18.5h-19c-1.3,1.5-3.3,4.3-5.8,8.5s-5,7.3-7.4,9.1V2.8h10\n\tc2.5,0,5.2,0.9,8.2,2.5c2.9,1.7,6.3,3.9,10,6.6c3.7,2.7,7,4.6,9.9,5.9V1.7h-50.4v60.7h48.7l4.6-16.6\n\tC998.7,46.4,996.5,47.6,993.3,49.5z"}})],1)}),[],!1,null,null,null).exports}},r=(c(176),Object(o.a)(l,(function(){var t=this,e=t.$createElement,c=t._self._c||e;return c("div",{staticClass:"fixed z-50 top-0 left-0 w-full h-full flex items-center justify-center pointer-events-none p-10",attrs:{"data-section-hero":""}},[t._m(0),t._v(" "),c("div",{staticClass:"z-10 absolute w-full max-w-screen-xl xl:max-w-[80vw] overflow-hidden p-10"},[c("SvgTitle",{staticClass:"opacity-0 transform translate-y-[150%]",attrs:{"data-svg-title":""}})],1)])}),[function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"z-30 w-full max-w-[60vw] lg:max-w-[40vw]"},[e("figure",{staticClass:"relative block pt-[100%]"},[e("img",{staticClass:"lazyload absolute top-0 left-0 w-full h-full object-cover opacity-0 transform scale-0",attrs:{"data-img-star":"","data-src":"/images/star.png",alt:"",draggable:"false"}})])])}],!1,null,"1c90a4cf",null).exports),h={},f=Object(o.a)(h,(function(){var t=this.$createElement;return(this._self._c||t)("section",{staticClass:"h-screen",attrs:{"data-scroll-section":""}})}),[],!1,null,null,null).exports,m={},v=(c(177),Object(o.a)(m,(function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)}),[function(){var t=this.$createElement,e=this._self._c||t;return e("section",{attrs:{"data-scroll-section":""}},[e("div",{attrs:{"data-scroll":"","data-scroll-call":"itemAnimation","data-block-item":""}})])}],!1,null,"d9ee93bc",null).exports),d={},_=(c(178),Object(o.a)(d,(function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)}),[function(){var t=this.$createElement,e=this._self._c||t;return e("section",{attrs:{"data-scroll-section":""}},[e("div",{staticClass:"ml-auto",attrs:{"data-scroll":"","data-scroll-call":"itemAnimation","data-block-item":""}})])}],!1,null,"b60031ee",null).exports),x={},S=Object(o.a)(x,(function(){var t=this,e=t.$createElement;return(t._self._c||e)("div",{attrs:{"data-scroll-container":""}},[t._t("default")],2)}),[],!1,null,null,null).exports,w={mounted:function(){this.setCursorAnimation()},methods:{setCursorAnimation:function(){var t=this.$gsap,e=document.querySelector(".cursor-follower"),c={x:window.innerWidth/2,y:window.innerHeight/2},n={x:c.x,y:c.y},o=t.quickSetter(e,"x","px"),l=t.quickSetter(e,"y","px");window.addEventListener("mousemove",(function(e){n.x=e.x,n.y=e.y,t.set(".cursor-follower",{opacity:1,duration:2,ease:"expo.out"})})),t.ticker.add((function(time,t){var e=.06*t,dt=1-Math.pow(.87,e);c.x+=(n.x-c.x)*dt,c.y+=(n.y-c.y)*dt,o(c.x),l(c.y)}))}}},y=(c(179),{components:{SectionHero:r,SectionSpace:f,SectionItemLeft:v,SectionItemRight:_,SmoothScroll:S,CursorFollower:Object(o.a)(w,(function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"cursor-follower"})}),[],!1,null,"b7c0cda2",null).exports},data:function(){return{scroll:null}},head:function(){return{title:this.$config.app.title+this.$config.app.titleSeparator+this.$config.app.titleTemplate,meta:[{hid:"description",name:"description",content:this.$config.app.description}]}},mounted:function(){this.locomotiveScrollInit(),this.setHeroAnimation(),this.setItemAnimation()},beforeDestroy:function(){this.scroll.destroy()},methods:{locomotiveScrollInit:function(){this.scroll=new this.$LocomotiveScroll({el:document.querySelector("[data-scroll-container]"),smooth:!0,getDirection:!0}),this.scroll.stop()},setHeroAnimation:function(){var t=this,e=document.querySelector("[data-img-star]");this.$gsap.timeline({defaults:{duration:3,ease:"expo.out"}}).to("[data-svg-title]",{y:0,opacity:1}).to("[data-img-star]",{opacity:1,scale:1,rotation:360,onComplete:function(){t.scroll.update(),t.scroll.start(),t.scroll.on("scroll",(function(t){e.style.transform="rotate(".concat(.05*t.scroll.y,"deg)")}))}},"-=2.5")},setItemAnimation:function(){var t=this;this.scroll.on("call",(function(e,c,n){"itemAnimation"===e&&"enter"===c&&t.$gsap.to(n.el,{scaleX:1,ease:"expo.out",duration:3})}))}}}),C=Object(o.a)(y,(function(){var t=this,e=t.$createElement,c=t._self._c||e;return c("main",[c("SectionHero"),t._v(" "),c("SmoothScroll",[c("SectionSpace"),t._v(" "),c("SectionItemLeft"),t._v(" "),c("SectionItemRight"),t._v(" "),c("SectionItemLeft"),t._v(" "),c("SectionItemRight"),t._v(" "),c("SectionItemLeft"),t._v(" "),c("SectionItemRight"),t._v(" "),c("SectionItemLeft"),t._v(" "),c("SectionSpace")],1),t._v(" "),c("CursorFollower")],1)}),[],!1,null,null,null);e.default=C.exports}}]);
--------------------------------------------------------------------------------
/dist/_nuxt/icons/icon_192x192.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/icon_192x192.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/icon_512x512.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/icon_512x512.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/icon_64x64.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/icon_64x64.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_ipad_1536x2048.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_ipad_1536x2048.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_ipadpro10_1668x2224.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_ipadpro10_1668x2224.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_ipadpro12_2048x2732.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_ipadpro12_2048x2732.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_ipadpro9_1536x2048.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_ipadpro9_1536x2048.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_iphone6_50x1334.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_iphone6_50x1334.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_iphoneplus_1080x1920.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_iphoneplus_1080x1920.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_iphonese_640x1136.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_iphonese_640x1136.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_iphonex_1125x2436.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_iphonex_1125x2436.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_iphonexr_828x1792.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_iphonexr_828x1792.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/icons/splash_iphonexsmax_1242x2688.d205f9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/icons/splash_iphonexsmax_1242x2688.d205f9.png
--------------------------------------------------------------------------------
/dist/_nuxt/img/facebook-img.893c889.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/img/facebook-img.893c889.jpg
--------------------------------------------------------------------------------
/dist/_nuxt/img/twitter-img.1c3e460.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/_nuxt/img/twitter-img.1c3e460.jpg
--------------------------------------------------------------------------------
/dist/_nuxt/manifest.5622242a.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Nuxt + Locomotive",
3 | "short_name": "Nuxt Locomotive",
4 | "description": "Starter template for parallax effects & smooth scrolling experience",
5 | "icons": [
6 | {
7 | "src": "/_nuxt/icons/icon_64x64.d205f9.png",
8 | "sizes": "64x64",
9 | "type": "image/png",
10 | "purpose": "any maskable"
11 | },
12 | {
13 | "src": "/_nuxt/icons/icon_192x192.d205f9.png",
14 | "sizes": "192x192",
15 | "type": "image/png",
16 | "purpose": "any maskable"
17 | },
18 | {
19 | "src": "/_nuxt/icons/icon_512x512.d205f9.png",
20 | "sizes": "512x512",
21 | "type": "image/png",
22 | "purpose": "any maskable"
23 | }
24 | ],
25 | "start_url": "/?standalone=true",
26 | "display": "standalone",
27 | "background_color": "#030303",
28 | "theme_color": "#030303",
29 | "lang": "en-US"
30 | }
--------------------------------------------------------------------------------
/dist/_nuxt/static/1656164883/manifest.js:
--------------------------------------------------------------------------------
1 | __NUXT_JSONP__("manifest.js", {routes:["\u002F"]})
--------------------------------------------------------------------------------
/dist/_nuxt/static/1656164883/payload.js:
--------------------------------------------------------------------------------
1 | __NUXT_JSONP__("/", {data:[{}],fetch:{},mutations:void 0});
--------------------------------------------------------------------------------
/dist/_nuxt/static/1656164883/state.js:
--------------------------------------------------------------------------------
1 | window.__NUXT__=(function(a,b,c,d){return {staticAssetsBase:"\u002F_nuxt\u002Fstatic\u002F1656164883",layout:"default",error:a,serverRendered:true,routePath:b,config:{app:{url:"https:\u002F\u002Fnuxt-locomotive.netlify.app",name:c,title:c,titleSeparator:" — ",titleTemplate:d,description:d,type:"website"},breakpoints:{sm:"640px",md:"768px",lg:"1024px",xl:"1280px","2xl":"1536px"},_app:{basePath:b,assetsPath:"\u002F_nuxt\u002F",cdnURL:a}}}}(null,"\u002F","Nuxt + Locomotive","Starter template for parallax effects & smooth scrolling experience"));
--------------------------------------------------------------------------------
/dist/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/favicon.ico
--------------------------------------------------------------------------------
/dist/fonts/I-300.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/fonts/I-300.woff2
--------------------------------------------------------------------------------
/dist/fonts/I-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/fonts/I-400.woff2
--------------------------------------------------------------------------------
/dist/fonts/I-500.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/fonts/I-500.woff2
--------------------------------------------------------------------------------
/dist/fonts/I-600.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/fonts/I-600.woff2
--------------------------------------------------------------------------------
/dist/fonts/font-face.css:
--------------------------------------------------------------------------------
1 | /**
2 | * The Inter typeface family
3 | * Version: 3.15
4 | *
5 | * Inter is a typeface carefully crafted & designed for computer screens.
6 | * @link https://rsms.me/inter/
7 | *
8 | */
9 |
10 | @font-face {
11 | font-family: 'I';
12 | font-style: normal;
13 | font-weight: 300;
14 | font-display: swap;
15 | src: url('/fonts/I-300.woff2') format('woff2');
16 | }
17 |
18 | @font-face {
19 | font-family: 'I';
20 | font-style: normal;
21 | font-weight: 400;
22 | font-display: swap;
23 | src: url('/fonts/I-400.woff2') format('woff2');
24 | }
25 |
26 | @font-face {
27 | font-family: 'I';
28 | font-style: normal;
29 | font-weight: 500;
30 | font-display: swap;
31 | src: url('/fonts/I-500.woff2') format('woff2');
32 | }
33 |
34 | @font-face {
35 | font-family: 'I';
36 | font-style: normal;
37 | font-weight: 600;
38 | font-display: swap;
39 | src: url('/fonts/I-600.woff2') format('woff2');
40 | }
41 |
--------------------------------------------------------------------------------
/dist/images/grain.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/images/grain.gif
--------------------------------------------------------------------------------
/dist/images/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/images/star.png
--------------------------------------------------------------------------------
/dist/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Nuxt + Locomotive — Starter template for parallax effects & smooth scrolling experience
5 |
6 |
7 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/dist/netlify.toml:
--------------------------------------------------------------------------------
1 | [[headers]]
2 | for = "/*"
3 |
4 | [headers.values]
5 | Referrer-Policy = "origin"
6 | X-Content-Type-Options = "nosniff"
7 | X-Frame-Options = "DENY"
8 | X-XSS-Protection = "1; mode=block"
9 |
10 | [[headers]]
11 | for = "/_nuxt/*"
12 |
13 | [headers.values]
14 | Cache-Control = "public, max-age=31536000, immutable"
15 |
16 | [[headers]]
17 | for = "/sw.js"
18 |
19 | [headers.values]
20 | Cache-Control = "no-cache"
21 |
22 | [[headers]]
23 | for = "/favicon.ico"
24 |
25 | [headers.values]
26 | Cache-Control = "public, max-age=86400"
27 |
28 | [[redirects]]
29 | from = "https://nuxt-locomotive.netlify.app/*"
30 | to = "https://nuxt-locomotive.netlify.app/:splat"
31 | status = 301
32 |
--------------------------------------------------------------------------------
/dist/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 | Sitemap: https://nuxt-locomotive.netlify.app/sitemap.xml
--------------------------------------------------------------------------------
/dist/sitemap.xml:
--------------------------------------------------------------------------------
1 | https://nuxt-locomotive.netlify.app/2022-06-25T13:48:03.165Zdaily1.0
--------------------------------------------------------------------------------
/dist/sitemap.xml.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/dist/sitemap.xml.gz
--------------------------------------------------------------------------------
/dist/sw.js:
--------------------------------------------------------------------------------
1 | const options = {"workboxURL":"https://cdn.jsdelivr.net/npm/workbox-cdn@5.1.4/workbox/workbox-sw.js","importScripts":[],"config":{"debug":false},"cacheOptions":{"cacheId":"nuxt-locomotive-prod","directoryIndex":"/","revision":"JPBGh9ZyOh7I"},"clientsClaim":true,"skipWaiting":true,"cleanupOutdatedCaches":true,"offlineAnalytics":false,"preCaching":[{"revision":"JPBGh9ZyOh7I","url":"/?standalone=true"}],"runtimeCaching":[{"urlPattern":"/_nuxt/","handler":"CacheFirst","method":"GET","strategyPlugins":[]},{"urlPattern":"/","handler":"NetworkFirst","method":"GET","strategyPlugins":[]}],"offlinePage":null,"pagesURLPattern":"/","offlineStrategy":"NetworkFirst"}
2 |
3 | importScripts(...[options.workboxURL, ...options.importScripts])
4 |
5 | initWorkbox(workbox, options)
6 | workboxExtensions(workbox, options)
7 | precacheAssets(workbox, options)
8 | cachingExtensions(workbox, options)
9 | runtimeCaching(workbox, options)
10 | offlinePage(workbox, options)
11 | routingExtensions(workbox, options)
12 |
13 | function getProp(obj, prop) {
14 | return prop.split('.').reduce((p, c) => p[c], obj)
15 | }
16 |
17 | function initWorkbox(workbox, options) {
18 | if (options.config) {
19 | // Set workbox config
20 | workbox.setConfig(options.config)
21 | }
22 |
23 | if (options.cacheNames) {
24 | // Set workbox cache names
25 | workbox.core.setCacheNameDetails(options.cacheNames)
26 | }
27 |
28 | if (options.clientsClaim) {
29 | // Start controlling any existing clients as soon as it activates
30 | workbox.core.clientsClaim()
31 | }
32 |
33 | if (options.skipWaiting) {
34 | workbox.core.skipWaiting()
35 | }
36 |
37 | if (options.cleanupOutdatedCaches) {
38 | workbox.precaching.cleanupOutdatedCaches()
39 | }
40 |
41 | if (options.offlineAnalytics) {
42 | // Enable offline Google Analytics tracking
43 | workbox.googleAnalytics.initialize()
44 | }
45 | }
46 |
47 | function precacheAssets(workbox, options) {
48 | if (options.preCaching.length) {
49 | workbox.precaching.precacheAndRoute(options.preCaching, options.cacheOptions)
50 | }
51 | }
52 |
53 |
54 | function runtimeCaching(workbox, options) {
55 | const requestInterceptor = {
56 | requestWillFetch({ request }) {
57 | if (request.cache === 'only-if-cached' && request.mode === 'no-cors') {
58 | return new Request(request.url, { ...request, cache: 'default', mode: 'no-cors' })
59 | }
60 | return request
61 | },
62 | fetchDidFail(ctx) {
63 | ctx.error.message =
64 | '[workbox] Network request for ' + ctx.request.url + ' threw an error: ' + ctx.error.message
65 | console.error(ctx.error, 'Details:', ctx)
66 | },
67 | handlerDidError(ctx) {
68 | ctx.error.message =
69 | `[workbox] Network handler threw an error: ` + ctx.error.message
70 | console.error(ctx.error, 'Details:', ctx)
71 | return null
72 | }
73 | }
74 |
75 | for (const entry of options.runtimeCaching) {
76 | const urlPattern = new RegExp(entry.urlPattern)
77 | const method = entry.method || 'GET'
78 |
79 | const plugins = (entry.strategyPlugins || [])
80 | .map(p => new (getProp(workbox, p.use))(...p.config))
81 |
82 | plugins.unshift(requestInterceptor)
83 |
84 | const strategyOptions = { ...entry.strategyOptions, plugins }
85 |
86 | const strategy = new workbox.strategies[entry.handler](strategyOptions)
87 |
88 | workbox.routing.registerRoute(urlPattern, strategy, method)
89 | }
90 | }
91 |
92 | function offlinePage(workbox, options) {
93 | if (options.offlinePage) {
94 | // Register router handler for offlinePage
95 | workbox.routing.registerRoute(new RegExp(options.pagesURLPattern), ({ request, event }) => {
96 | const strategy = new workbox.strategies[options.offlineStrategy]
97 | return strategy
98 | .handle({ request, event })
99 | .catch(() => caches.match(options.offlinePage))
100 | })
101 | }
102 | }
103 |
104 | function workboxExtensions(workbox, options) {
105 |
106 | }
107 |
108 | function cachingExtensions(workbox, options) {
109 |
110 | }
111 |
112 | function routingExtensions(workbox, options) {
113 |
114 | }
115 |
--------------------------------------------------------------------------------
/layouts/default.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
24 |
--------------------------------------------------------------------------------
/layouts/error.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
Page not found
4 | An error occurred
5 | BACK TO HOME
6 |
7 |
8 |
9 |
27 |
--------------------------------------------------------------------------------
/layouts/errorLayout.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
10 |
--------------------------------------------------------------------------------
/nuxt.config.js:
--------------------------------------------------------------------------------
1 | import config from './config'
2 | import routes from './pages/routes'
3 |
4 | export default {
5 | target: 'static',
6 |
7 | modern: !config.isDev && 'client',
8 |
9 | components: false,
10 |
11 | loading: false,
12 |
13 | telemetry: false,
14 |
15 | globalName: config.nuxt.globalName,
16 |
17 | dir: {
18 | static: 'public'
19 | },
20 |
21 | server: {
22 | port: config.server.port,
23 | host: config.server.hostname
24 | },
25 |
26 | watch: ['~/config/*', '~/tailwind.config.js'],
27 |
28 | modules: ['@nuxtjs/pwa', '@nuxtjs/svg', '@nuxtjs/robots', '@nuxtjs/sitemap'],
29 |
30 | buildModules: [
31 | '@nuxt/postcss8',
32 | '@nuxtjs/netlify-files',
33 | 'nuxt-font-loader',
34 | 'nuxt-gsap-module',
35 | 'nuxt-lazysizes'
36 | ],
37 |
38 | css: ['~/assets/styles/main.css'],
39 |
40 | plugins: ['~/plugins/locomotiveScroll.client.js'],
41 |
42 | /**
43 | * @link https://github.com/nuxt/nuxt.js/issues/6028
44 | */
45 | layoutTransition: {
46 | name: 'layout',
47 | mode: 'out-in'
48 | },
49 |
50 | pageTransition: {
51 | name: 'page',
52 | mode: 'out-in'
53 | },
54 |
55 | head: {
56 | htmlAttrs: {
57 | lang: config.app.lang
58 | },
59 |
60 | /**
61 | * Corrects the page title when routes have a delayed transition
62 | * @link https://github.com/nuxt/vue-meta/issues/621
63 | */
64 | title: null,
65 | titleTemplate: null,
66 |
67 | meta: [
68 | {
69 | hid: 'charset',
70 | charset: config.app.charset
71 | },
72 | {
73 | hid: 'http-equiv',
74 | 'http-equiv': 'X-UA-Compatible',
75 | content: 'IE=edge'
76 | },
77 | {
78 | hid: 'viewport',
79 | name: 'viewport',
80 | content: 'width=device-width,initial-scale=1'
81 | },
82 | {
83 | hid: 'description',
84 | name: 'description',
85 | content: config.app.description
86 | },
87 | {
88 | hid: 'robots',
89 | name: 'robots',
90 | content:
91 | 'index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1'
92 | }
93 | ]
94 | },
95 |
96 | router: {
97 | linkActiveClass: 'link-active',
98 | linkExactActiveClass: 'link-exact-active',
99 |
100 | extendRoutes() {
101 | return routes
102 | }
103 | },
104 |
105 | build: {
106 | publicPath: config.nuxt.publicPath,
107 |
108 | extractCSS: true,
109 |
110 | templates: [
111 | {
112 | src: 'templates/app.html',
113 | dst: 'views/app.template.html'
114 | }
115 | ],
116 |
117 | postcss: {
118 | plugins: {
119 | 'postcss-import': true,
120 | tailwindcss: {},
121 | autoprefixer: {}
122 | }
123 | }
124 | },
125 |
126 | generate: {
127 | dir: 'dist',
128 | fallback: true // Error 404 page
129 | },
130 |
131 | publicRuntimeConfig: {
132 | app: {
133 | url: config.app.url,
134 | name: config.app.name,
135 | title: config.app.title,
136 | titleSeparator: config.app.titleSeparator,
137 | titleTemplate: config.app.titleTemplate,
138 | description: config.app.description,
139 | type: config.app.type
140 | },
141 | breakpoints: config.breakpoints
142 | },
143 |
144 | privateRuntimeConfig: {},
145 |
146 | pwa: {
147 | icon: {
148 | source: 'assets/favicons/icon.png',
149 | sizes: [64, 192, 512]
150 | },
151 |
152 | meta: {
153 | author: config.app.author
154 | },
155 |
156 | manifest: {
157 | name: config.app.name,
158 | short_name: config.app.shortName,
159 | description: config.app.description,
160 | lang: config.app.lang,
161 | theme_color: config.app.themeColor,
162 | background_color: config.app.backgroundColor
163 | }
164 | },
165 |
166 | robots: {
167 | UserAgent: () => ['*'],
168 | Sitemap: () => [`${config.app.url}/sitemap.xml`]
169 | },
170 |
171 | sitemap: {
172 | hostname: config.app.url,
173 | gzip: true,
174 | defaults: {
175 | changefreq: 'daily',
176 | priority: 1,
177 | lastmod: new Date(),
178 | lastmodrealtime: true
179 | }
180 | },
181 |
182 | netlifyFiles: {
183 | copyExistingFiles: false,
184 |
185 | netlifyToml: {
186 | headers: [
187 | {
188 | for: '/*',
189 | values: {
190 | 'Referrer-Policy': 'origin',
191 | 'X-Content-Type-Options': 'nosniff',
192 | 'X-Frame-Options': 'DENY',
193 | 'X-XSS-Protection': '1; mode=block'
194 | }
195 | },
196 | {
197 | for: `${config.nuxt.publicPath}*`,
198 | values: {
199 | 'Cache-Control': 'public, max-age=31536000, immutable'
200 | }
201 | },
202 | {
203 | for: '/sw.js',
204 | values: {
205 | 'Cache-Control': 'no-cache'
206 | }
207 | },
208 | {
209 | for: '/favicon.ico',
210 | values: {
211 | 'Cache-Control': 'public, max-age=86400'
212 | }
213 | }
214 | ],
215 |
216 | redirects: [
217 | {
218 | from: `${config.app.baseUrl}/*`,
219 | to: `${config.app.url}/:splat`,
220 | status: 301
221 | }
222 | ]
223 | }
224 | },
225 |
226 | fontLoader: {
227 | url: '/fonts/font-face.css'
228 | }
229 | }
230 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nuxt-locomotive",
3 | "version": "1.0.0",
4 | "description": "Starter template for parallax effects & smooth scrolling experience.",
5 | "author": "Ivo Dolenc",
6 | "license": "MIT",
7 | "homepage": "https://github.com/ivodolenc/nuxt-locomotive",
8 | "keywords": [
9 | "nuxt",
10 | "boilerplate",
11 | "nuxt-boilerplate",
12 | "nuxt-locomotive-scroll",
13 | "locomotive-scroll",
14 | "nuxt-locomotive",
15 | "nuxt-template",
16 | "smooth-scroll",
17 | "locomotive",
18 | "template"
19 | ],
20 | "scripts": {
21 | "dev": "nuxt",
22 | "generate": "nuxt generate",
23 | "start": "nuxt start",
24 | "lint:eslint": "eslint --ext .js,.vue .",
25 | "lint:fix:eslint": "yarn lint:eslint --fix"
26 | },
27 | "dependencies": {
28 | "@nuxtjs/pwa": "^3.3.5",
29 | "@nuxtjs/robots": "^2.5.0",
30 | "@nuxtjs/sitemap": "^2.4.0",
31 | "nuxt": "^2.15.8"
32 | },
33 | "devDependencies": {
34 | "@nuxt/postcss8": "^1.1.3",
35 | "@nuxtjs/eslint-config": "^10.0.0",
36 | "@nuxtjs/netlify-files": "^1.2.0",
37 | "@nuxtjs/svg": "^0.4.0",
38 | "autoprefixer": "^10.4.7",
39 | "eslint": "^8.18.0",
40 | "eslint-config-prettier": "^8.5.0",
41 | "locomotive-scroll": "^4.1.4",
42 | "nuxt-font-loader": "^1.1.5",
43 | "nuxt-gsap-module": "^1.7.1",
44 | "nuxt-lazysizes": "^1.4.2",
45 | "postcss": "^8.4.14",
46 | "prettier": "^2.7.1",
47 | "tailwindcss": "^3.1.4"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/pages/home/SectionHero/SvgTitle.vue:
--------------------------------------------------------------------------------
1 |
2 |
53 |
54 |
55 |
58 |
--------------------------------------------------------------------------------
/pages/home/SectionHero/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
25 |
34 |
35 |
47 |
--------------------------------------------------------------------------------
/pages/home/SectionItemLeft/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
10 |
11 |
26 |
--------------------------------------------------------------------------------
/pages/home/SectionItemRight/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
15 |
16 |
31 |
--------------------------------------------------------------------------------
/pages/home/SectionSpace/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
--------------------------------------------------------------------------------
/pages/home/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
129 |
--------------------------------------------------------------------------------
/pages/routes.js:
--------------------------------------------------------------------------------
1 | const routes = [
2 | {
3 | name: 'home',
4 | path: '/',
5 | component: 'pages/home/index.vue'
6 | }
7 | ]
8 |
9 | export default routes
10 |
--------------------------------------------------------------------------------
/plugins/locomotiveScroll.client.js:
--------------------------------------------------------------------------------
1 | import LocomotiveScroll from 'locomotive-scroll'
2 |
3 | export default ({ app }, inject) => {
4 | inject('LocomotiveScroll', LocomotiveScroll)
5 | }
6 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/I-300.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/public/fonts/I-300.woff2
--------------------------------------------------------------------------------
/public/fonts/I-400.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/public/fonts/I-400.woff2
--------------------------------------------------------------------------------
/public/fonts/I-500.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/public/fonts/I-500.woff2
--------------------------------------------------------------------------------
/public/fonts/I-600.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/public/fonts/I-600.woff2
--------------------------------------------------------------------------------
/public/fonts/font-face.css:
--------------------------------------------------------------------------------
1 | /**
2 | * The Inter typeface family
3 | * Version: 3.15
4 | *
5 | * Inter is a typeface carefully crafted & designed for computer screens.
6 | * @link https://rsms.me/inter/
7 | *
8 | */
9 |
10 | @font-face {
11 | font-family: 'I';
12 | font-style: normal;
13 | font-weight: 300;
14 | font-display: swap;
15 | src: url('/fonts/I-300.woff2') format('woff2');
16 | }
17 |
18 | @font-face {
19 | font-family: 'I';
20 | font-style: normal;
21 | font-weight: 400;
22 | font-display: swap;
23 | src: url('/fonts/I-400.woff2') format('woff2');
24 | }
25 |
26 | @font-face {
27 | font-family: 'I';
28 | font-style: normal;
29 | font-weight: 500;
30 | font-display: swap;
31 | src: url('/fonts/I-500.woff2') format('woff2');
32 | }
33 |
34 | @font-face {
35 | font-family: 'I';
36 | font-style: normal;
37 | font-weight: 600;
38 | font-display: swap;
39 | src: url('/fonts/I-600.woff2') format('woff2');
40 | }
41 |
--------------------------------------------------------------------------------
/public/images/grain.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/public/images/grain.gif
--------------------------------------------------------------------------------
/public/images/star.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ivodolenc/nuxt-locomotive/4124730afb81ccb0a3d8acb58ed335e9f7d46683/public/images/star.png
--------------------------------------------------------------------------------
/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | content: [
3 | './components/**/*.{js,vue}',
4 | './layouts/**/*.vue',
5 | './pages/**/*.vue',
6 | './plugins/**/*.js',
7 | './nuxt.config.js'
8 | ],
9 |
10 | theme: {
11 | fontFamily: {
12 | sans: ['I', 'Helvetica', 'Arial', 'sans-serif']
13 | },
14 |
15 | extend: {
16 | colors: {
17 | dark: '#030303'
18 | }
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/templates/app.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ HEAD }}
5 |
6 |
7 | {{ APP }}
8 |
9 |
10 |
--------------------------------------------------------------------------------
/utils/getHeadData.js:
--------------------------------------------------------------------------------
1 | import config from '../config'
2 |
3 | export const canonical = (path = []) => {
4 | return [
5 | {
6 | rel: 'canonical',
7 | href: config.app.url + path
8 | }
9 | ]
10 | }
11 |
12 | export const facebook = (path = []) => {
13 | return [
14 | {
15 | hid: 'og:title',
16 | property: 'og:title',
17 | content: config.app.title
18 | },
19 | {
20 | hid: 'og:description',
21 | property: 'og:description',
22 | content: config.app.description
23 | },
24 | {
25 | hid: 'og:type',
26 | property: 'og:type',
27 | content: config.app.type
28 | },
29 | {
30 | hid: 'og:site_name',
31 | property: 'og:site_name',
32 | content: config.app.title
33 | },
34 | {
35 | hid: 'og:locale',
36 | property: 'og:locale',
37 | content: config.app.locale
38 | },
39 | {
40 | hid: 'og:url',
41 | property: 'og:url',
42 | content: config.app.url + path
43 | },
44 | {
45 | hid: 'og:image',
46 | property: 'og:image',
47 | content: config.app.url + require('~/assets/images/facebook-img.jpg')
48 | }
49 | ]
50 | }
51 |
52 | export const twitter = () => {
53 | return [
54 | {
55 | hid: 'twitter:card',
56 | name: 'twitter:card',
57 | content: 'summary_large_image'
58 | },
59 | {
60 | hid: 'twitter:title',
61 | name: 'twitter:title',
62 | content: config.app.title
63 | },
64 | {
65 | hid: 'twitter:description',
66 | name: 'twitter:description',
67 | content: config.app.description
68 | },
69 | {
70 | hid: 'twitter:image:src',
71 | name: 'twitter:image:src',
72 | content: config.app.url + require('~/assets/images/twitter-img.jpg')
73 | }
74 | ]
75 | }
76 |
77 | export const appLdJson = (path = []) => {
78 | return [
79 | {
80 | hid: 'application/ld+json',
81 | type: 'application/ld+json',
82 | json: {
83 | '@context': 'https://schema.org',
84 | '@type': config.app.type,
85 | name: config.app.name,
86 | url: config.app.url + path,
87 | sameAs: [
88 | 'https://www.facebook.com/',
89 | 'https://www.instagram.com/',
90 | 'https://www.twitter.com/'
91 | ]
92 | }
93 | }
94 | ]
95 | }
96 |
--------------------------------------------------------------------------------