diff --git a/src/components/CImgTitle/CImgTitle.scss b/src/components/CImgTitle/CImgTitle.scss
new file mode 100644
index 0000000..9aed146
--- /dev/null
+++ b/src/components/CImgTitle/CImgTitle.scss
@@ -0,0 +1,114 @@
+
+.imgtitle {
+ display: flex;
+ justify-content: space-between;
+ /* flex-flow: row nowrap; */
+
+ padding: 1rem 0 1rem 0;
+ margin: .125rem;
+
+ * {
+ width: 100%;
+ flex: 1;
+ margin-left: auto;
+ margin-right: auto;
+ }
+
+ &__img {
+ min-width: 250px;
+ }
+ &__imgh100 {
+ max-height: 100px;
+ }
+ &__imgh150 {
+ max-height: 150px;
+ }
+ &__imgw150 {
+ max-width: 150px;
+ }
+ &__imgw100 {
+ max-width: 100px;
+ }
+}
+
+@media (max-width: 2500px) {
+ .myclimg {
+ height: 550px !important;
+ }
+}
+
+@media (max-width: 1600px) {
+ .myclimg {
+ height: 550px !important;
+ }
+}
+
+@media (max-width: 1000px) {
+ .myclimg {
+ height: 450px !important;
+ }
+}
+
+@media (max-width: 800px) {
+ .myclimg {
+ height: 400px !important;
+ }
+}
+
+
+@media (max-width: 718px) {
+ // PER VERSIONE MOBILE
+ .landing > section.padding_testo {
+ padding-top: 0.5rem;
+ padding-bottom: 0.1rem;
+ }
+
+ .imgtitle {
+ padding: 0.25rem 0 0.25rem 0;
+ }
+
+}
+
+.landing > section.padding_testo {
+ padding-top: 1rem;
+ padding-bottom: 0.25rem;
+}
+
+.section_text {
+ padding: 10px;
+}
+
+.title{
+ font-size: 3.5rem;
+ padding: 10px;
+ text-shadow: .2rem .2rem .2rem #3d3d3d;
+}
+
+@media (max-width: 400px) {
+ .title{
+ padding: 5px;
+ font-size: 3rem;
+ }
+}
+
+.mylegendinside{
+ font-size: 1rem;
+ margin-bottom: 50px;
+ opacity: .8;
+
+ @media (max-width: 400px) {
+ margin-bottom: -10px;
+ }
+}
+
+.mylegend{
+ text-align: center;
+ color: black;
+ font-size: 1rem;
+ font-style: italic;
+ opacity: .8;
+ text-shadow: .05rem .05rem .05rem #aeaeae;
+ z-index: 1000;
+ @media (max-width: 400px) {
+ }
+}
diff --git a/src/components/CImgTitle/CImgTitle.ts b/src/components/CImgTitle/CImgTitle.ts
new file mode 100644
index 0000000..0d9f049
--- /dev/null
+++ b/src/components/CImgTitle/CImgTitle.ts
@@ -0,0 +1,44 @@
+import Vue from 'vue'
+import { Component, Prop } from 'vue-property-decorator'
+import { GlobalStore, UserStore } from '@store'
+
+import VueScrollReveal from 'vue-scroll-reveal'
+import { tools } from '@src/store/Modules/tools'
+import { toolsext } from '@src/store/Modules/toolsext'
+import { Screen } from 'quasar'
+
+// Vue.use(VueScrollReveal, {
+// class: 'v-scroll-reveal', // A CSS class applied to elements with the v-scroll-reveal directive; useful for animation overrides.
+// duration: 1200,
+// scale: 0.95,
+// distance: '10px',
+// rotate: {
+// x: 0,
+// y: 0,
+// z: 0
+// }
+// // mobile: true
+// })
+
+@Component({
+ name: 'CImgTitle'
+})
+export default class CImgTitle extends Vue {
+ @Prop({ required: false, default: '' }) public src: string
+ @Prop({ required: false, default: '' }) public title: string
+ @Prop({ required: false, default: 0 }) public myheight: number
+ @Prop({ required: false, default: 0 }) public myheightmobile: number
+ @Prop({ required: false, default: '' }) public legendinside: string
+ @Prop({ required: false, default: '' }) public legend: string
+
+ get tools() {
+ return tools
+ }
+
+ get getsrc() {
+ // return this.src
+ const filefull = tools.getimgFullpathbysize(this.src)
+
+ return tools.getimgbysize(filefull.path, filefull.file)
+ }
+}
diff --git a/src/components/CImgTitle/CImgTitle.vue b/src/components/CImgTitle/CImgTitle.vue
new file mode 100644
index 0000000..3f64fe9
--- /dev/null
+++ b/src/components/CImgTitle/CImgTitle.vue
@@ -0,0 +1,15 @@
+
+
+
+
+
+
diff --git a/src/components/CImgTitle/index.ts b/src/components/CImgTitle/index.ts
new file mode 100644
index 0000000..884ac1f
--- /dev/null
+++ b/src/components/CImgTitle/index.ts
@@ -0,0 +1 @@
+export {default as CImgTitle} from './CImgTitle.vue'
diff --git a/src/components/CPreloadImages/CPreloadImages.scss b/src/components/CPreloadImages/CPreloadImages.scss
new file mode 100644
index 0000000..8b6ae01
--- /dev/null
+++ b/src/components/CPreloadImages/CPreloadImages.scss
@@ -0,0 +1,66 @@
+$heightBtn: 100%;
+$grayshadow: #555;
+
+.text-subtitle-carica {
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.75rem;
+ letter-spacing: .00937em;
+ text-shadow: .1rem .1rem .1rem $grayshadow;
+}
+
+.text-subtitle-certificato {
+ font-size: 0.75rem;
+ line-height: 1rem;
+}
+
+@media (max-width: 718px) {
+ // PER VERSIONE MOBILE
+ .text-subtitle-carica {
+ font-size: 1rem;
+ }
+}
+
+.op {
+ text-align: center !important;
+ font-size: 1rem;
+ font-weight: 400;
+ line-height: 1.75rem;
+ letter-spacing: .00937em;
+ text-shadow: .1rem .1rem .1rem $grayshadow;
+
+ &__cell {
+ font-size: 1rem;
+ color: red;
+ }
+
+ &__email {
+ font-size: 1rem;
+ color: #3b5998;
+ }
+
+ &__email a {
+ text-decoration: none;
+ }
+
+ &__facebook a {
+ font-size: 1rem;
+ text-decoration: none;
+ }
+
+ &__storia {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+ text-align: justify;
+ }
+}
+
+.myimg {
+ border-radius: 300px !important;
+}
+
+.q-img {
+ &__image {
+ border-radius: 300px !important;
+ }
+}
diff --git a/src/components/CPreloadImages/CPreloadImages.ts b/src/components/CPreloadImages/CPreloadImages.ts
new file mode 100644
index 0000000..9303774
--- /dev/null
+++ b/src/components/CPreloadImages/CPreloadImages.ts
@@ -0,0 +1,29 @@
+import Vue from 'vue'
+import { Component, Prop, Watch } from 'vue-property-decorator'
+
+import { tools } from '../../store/Modules/tools'
+import { toolsext } from '@src/store/Modules/toolsext'
+import { IPreloadImages } from '../../model'
+
+@Component({
+ name: 'CPreloadImages'
+})
+
+export default class CPreloadImages extends Vue {
+ @Prop({ required: true }) public arrimg: IPreloadImages[]
+
+ get tools() {
+ return tools
+ }
+
+ public getimg(recimg: IPreloadImages) {
+ if (recimg.mobile) {
+ const filefull = tools.getimgFullpathbysize(recimg.imgname)
+
+ return tools.getimgbysize(filefull.path, filefull.file)
+ } else {
+ return recimg.imgname
+ }
+ }
+
+}
diff --git a/src/components/CPreloadImages/CPreloadImages.vue b/src/components/CPreloadImages/CPreloadImages.vue
new file mode 100644
index 0000000..704f450
--- /dev/null
+++ b/src/components/CPreloadImages/CPreloadImages.vue
@@ -0,0 +1,14 @@
+
+
+
+
![]()
+
+
+
+
+
+
+
diff --git a/src/components/CPreloadImages/index.ts b/src/components/CPreloadImages/index.ts
new file mode 100644
index 0000000..3e5e65a
--- /dev/null
+++ b/src/components/CPreloadImages/index.ts
@@ -0,0 +1 @@
+export {default as CPreloadImages} from './CPreloadImages.vue'
diff --git a/src/js/storage.js___jb_tmp___ b/src/js/storage.js___jb_tmp___
new file mode 100644
index 0000000..e69de29
diff --git a/src/model/BookingStore.ts b/src/model/BookingStore.ts
new file mode 100644
index 0000000..b960836
--- /dev/null
+++ b/src/model/BookingStore.ts
@@ -0,0 +1,7 @@
+import { IAction } from '@src/model/Projects'
+import { Component } from 'vue-router/types/router'
+import { IEvents } from '@src/model/Calendar'
+
+export interface IBookingState {
+ bookinglist: IEvents[]
+}
diff --git a/src/quasar.d.ts b/src/quasar.d.ts
new file mode 100644
index 0000000..86030c8
--- /dev/null
+++ b/src/quasar.d.ts
@@ -0,0 +1 @@
+declare module 'quasar'
diff --git a/src/root/policy/policy.scss b/src/root/policy/policy.scss
new file mode 100644
index 0000000..e69de29
diff --git a/src/root/policy/policy.ts b/src/root/policy/policy.ts
new file mode 100644
index 0000000..6f33d1b
--- /dev/null
+++ b/src/root/policy/policy.ts
@@ -0,0 +1,21 @@
+import Vue from 'vue'
+import { Component } from 'vue-property-decorator'
+
+import { static_data } from '@src/db/static_data'
+
+import { PagePolicy } from '../../components/PagePolicy'
+
+@Component({
+ name: 'Policy',
+ components: { PagePolicy }
+})
+
+export default class Policy extends Vue {
+
+ public mioalert = false
+
+ get static_data() {
+ return static_data
+ }
+
+}
diff --git a/src/root/policy/policy.vue b/src/root/policy/policy.vue
new file mode 100644
index 0000000..afb657a
--- /dev/null
+++ b/src/root/policy/policy.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/shims-quasar.d.ts b/src/shims-quasar.d.ts
new file mode 100644
index 0000000..e5b079e
--- /dev/null
+++ b/src/shims-quasar.d.ts
@@ -0,0 +1,13 @@
+import Vue from 'vue'
+
+declare module 'vue/types/vue' {
+ interface Vue {
+ $q: any
+ }
+}
+
+declare module 'vue/types/options' {
+ interface ComponentOptions {
+ preFectch?: (options: any) => void | Promise
+ }
+}
diff --git a/src/shims-vue.d.ts b/src/shims-vue.d.ts
new file mode 100644
index 0000000..d9f24fa
--- /dev/null
+++ b/src/shims-vue.d.ts
@@ -0,0 +1,4 @@
+declare module '*.vue' {
+ import Vue from 'vue'
+ export default Vue
+}
diff --git a/src/statics/images/imglogonotif.png b/src/statics/images/imglogonotif.png
new file mode 100644
index 0000000..b5e10db
Binary files /dev/null and b/src/statics/images/imglogonotif.png differ
diff --git a/src/statics/js/workbox-sw-3-0-0.js b/src/statics/js/workbox-sw-3-0-0.js
new file mode 100644
index 0000000..86617af
--- /dev/null
+++ b/src/statics/js/workbox-sw-3-0-0.js
@@ -0,0 +1,3 @@
+var workbox=function(){"use strict";try{self.workbox.v["workbox:sw:3.0.0"]=1}catch(t){}const t="https://storage.googleapis.com/workbox-cdn/releases/3.0.0",e={backgroundSync:"background-sync",core:"core",expiration:"cache-expiration",googleAnalytics:"google-analytics",strategies:"strategies",precaching:"precaching",routing:"routing",cacheableResponse:"cacheable-response",broadcastUpdate:"broadcast-cache-update",rangeRequests:"range-requests"};return new class{constructor(){return this.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.e=this.t.debug?"dev":"prod",this.s=!1,new Proxy(this,{get(t,s){if(t[s])return t[s];const o=e[s];return o&&t.loadModule(`workbox-${o}`),t[s]}})}setConfig(t={}){if(this.s)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.e=this.t.debug?"dev":"prod"}skipWaiting(){self.addEventListener("install",()=>self.skipWaiting())}clientsClaim(){self.addEventListener("activate",()=>self.clients.claim())}loadModule(t){const e=this.o(t);try{importScripts(e),this.s=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}o(e){if(this.t.modulePathCb)return this.t.modulePathCb(e,this.t.debug);let s=[t];const o=`${e}.${this.e}.js`,r=this.t.modulePathPrefix;return r&&""===(s=r.split("/"))[s.length-1]&&s.splice(s.length-1,1),s.push(o),s.join("/")}}}();
+
+//# sourceMappingURL=workbox-sw.js.map
diff --git a/src/statics/js/workbox-sw.js b/src/statics/js/workbox-sw.js
new file mode 100644
index 0000000..0908b00
--- /dev/null
+++ b/src/statics/js/workbox-sw.js
@@ -0,0 +1,3 @@
+var workbox=function(){"use strict";try{self.workbox.v["workbox:sw:3.4.1"]=1}catch(t){}const t="https://storage.googleapis.com/workbox-cdn/releases/3.4.1",e={backgroundSync:"background-sync",broadcastUpdate:"broadcast-cache-update",cacheableResponse:"cacheable-response",core:"core",expiration:"cache-expiration",googleAnalytics:"google-analytics",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams"};return new class{constructor(){return this.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.e=this.t.debug?"dev":"prod",this.s=!1,new Proxy(this,{get(t,s){if(t[s])return t[s];const o=e[s];return o&&t.loadModule(`workbox-${o}`),t[s]}})}setConfig(t={}){if(this.s)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.e=this.t.debug?"dev":"prod"}skipWaiting(){self.addEventListener("install",()=>self.skipWaiting())}clientsClaim(){self.addEventListener("activate",()=>self.clients.claim())}loadModule(t){const e=this.o(t);try{importScripts(e),this.s=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}o(e){if(this.t.modulePathCb)return this.t.modulePathCb(e,this.t.debug);let s=[t];const o=`${e}.${this.e}.js`,r=this.t.modulePathPrefix;return r&&""===(s=r.split("/"))[s.length-1]&&s.splice(s.length-1,1),s.push(o),s.join("/")}}}();
+
+//# sourceMappingURL=workbox-sw.js.map
diff --git a/src/statics/js/workbox-sw3-4-1.js b/src/statics/js/workbox-sw3-4-1.js
new file mode 100644
index 0000000..0908b00
--- /dev/null
+++ b/src/statics/js/workbox-sw3-4-1.js
@@ -0,0 +1,3 @@
+var workbox=function(){"use strict";try{self.workbox.v["workbox:sw:3.4.1"]=1}catch(t){}const t="https://storage.googleapis.com/workbox-cdn/releases/3.4.1",e={backgroundSync:"background-sync",broadcastUpdate:"broadcast-cache-update",cacheableResponse:"cacheable-response",core:"core",expiration:"cache-expiration",googleAnalytics:"google-analytics",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams"};return new class{constructor(){return this.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.e=this.t.debug?"dev":"prod",this.s=!1,new Proxy(this,{get(t,s){if(t[s])return t[s];const o=e[s];return o&&t.loadModule(`workbox-${o}`),t[s]}})}setConfig(t={}){if(this.s)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.e=this.t.debug?"dev":"prod"}skipWaiting(){self.addEventListener("install",()=>self.skipWaiting())}clientsClaim(){self.addEventListener("activate",()=>self.clients.claim())}loadModule(t){const e=this.o(t);try{importScripts(e),this.s=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}o(e){if(this.t.modulePathCb)return this.t.modulePathCb(e,this.t.debug);let s=[t];const o=`${e}.${this.e}.js`,r=this.t.modulePathPrefix;return r&&""===(s=r.split("/"))[s.length-1]&&s.splice(s.length-1,1),s.push(o),s.join("/")}}}();
+
+//# sourceMappingURL=workbox-sw.js.map
diff --git a/src/store/Modules/BookingStore.ts b/src/store/Modules/BookingStore.ts
new file mode 100644
index 0000000..a85c148
--- /dev/null
+++ b/src/store/Modules/BookingStore.ts
@@ -0,0 +1,65 @@
+import { ICfgServer, IConfig, IBookingState, IListRoutes, IMenuList, StateConnection } from 'model'
+import { storeBuilder } from './Store/Store'
+
+import Vue from 'vue'
+
+import translate from './../../globalroutines/util'
+
+import urlBase64ToUint8Array from '../../js/utility'
+
+import Api from '@api'
+import * as Types from '@src/store/Api/ApiTypes'
+import { costanti } from '@src/store/Modules/costanti'
+import { tools } from '@src/store/Modules/tools'
+import { toolsext } from '@src/store/Modules/toolsext'
+import { GlobalStore, Projects, Todos, UserStore } from '@store'
+
+import { static_data } from '@src/db/static_data'
+import { db_data } from '@src/db/db_data'
+import { IEvents } from '../../model'
+import { serv_constants } from '@src/store/Modules/serv_constants'
+
+const state: IBookingState = {
+ bookinglist: []
+}
+
+const b = storeBuilder.module('BookingModule', state)
+
+// Getters
+namespace Getters {
+ export const getters = {
+
+ }
+}
+
+namespace Mutations {
+ export const mutations = {
+
+ }
+
+}
+
+namespace Actions {
+ async function loadAfterLogin(context) {
+ return true
+ }
+
+ export const actions = {
+ loadAfterLogin: b.dispatch(loadAfterLogin)
+ }
+
+}
+
+const stateGetter = b.state()
+
+// Module
+const BookingModule = {
+ get state() {
+ return stateGetter()
+ },
+ actions: Actions.actions,
+ getters: Getters.getters,
+ mutations: Mutations.mutations
+}
+
+export default BookingModule