diff --git a/assets/css/tailwind.css b/assets/css/tailwind.css index c9cf24c..b5c61c9 100644 --- a/assets/css/tailwind.css +++ b/assets/css/tailwind.css @@ -1,52 +1,3 @@ @tailwind base; @tailwind components; @tailwind utilities; - -.stepC { - margin-left: 0; - margin-right: 0; -} -.toggle-switch:checked { - @apply right-0; - right: 0; -} -#device { - border-radius: 1rem; - width: 100%; -} -.max-hd { - scrollbar-width: none; - -ms-overflow-style: none; - max-height: 100vh; -} -.max-hd::-webkit-scrollbar { - display: none; -} -.theme-one { - scrollbar-width: none; - -ms-overflow-style: none; -} -.theme-one::-webkit-scrollbar { - display: none; -} -.footer { - display: flex; -} -.stepC.actions { - display: grid; - grid-gap: 1.5rem; - justify-content: space-between; - grid-template-columns: repeat(auto-fill, minmax(3rem, auto)); -} - -@media (min-width: 640px) { - .stepC { - margin-left: 0.5rem; - margin-right: 0.5rem; - } -} -@media (min-width: 768px) { - .max-hd { - max-height: 38rem; - } -} diff --git a/assets/styles/T1.min.css b/assets/styles/T1.min.css index 2eab748..27a5b2a 100644 --- a/assets/styles/T1.min.css +++ b/assets/styles/T1.min.css @@ -1 +1 @@ -body{margin:0 auto;width:100%;padding:0;max-width:30rem;color:#fff;position:relative}#modal{position:absolute;z-index:1;width:100%;bottom:0;-webkit-transition:top 0.2s ease-out, opacity 0.1s ease-out;transition:top 0.2s ease-out, opacity 0.1s ease-out;-webkit-transform:translateZ(0);transform:translateZ(0)}#closeModal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin:1rem 1rem 0 0}#close{padding:0.75rem;cursor:pointer;line-height:0}.icon{width:1.5rem;height:1.5rem}#modalView,#copyView,#qrView,#keyInfo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#copyView p,#keyInfo p{margin:1rem 2em 2rem;text-align:center}#copyURL,#dlKey{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5rem;padding:0.75rem 1.5rem;cursor:pointer}#copyURL span,#dlKey span{margin-left:0.5rem}#qrView h2,#qrView p{margin:0 2rem 0.5rem}#qr{margin:1rem 2rem 2rem;padding:2rem;background:#fff;border-radius:0.5rem}header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:6rem 3rem;-webkit-box-sizing:border-box;box-sizing:border-box}#logo{min-height:6rem;max-height:6rem;text-align:center;color:gray;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#topActions{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:absolute;left:1rem;right:0;top:1rem}#topActions>div{display:-webkit-box;display:-ms-flexbox;display:flex}#topActions a{padding:0.75rem;cursor:pointer;border-radius:100%;line-height:0;margin-right:1rem}main{padding:1rem}#profile{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#profile img{width:7rem;height:7rem;border-radius:100%;text-align:center;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-top:-4.5rem}#info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:1rem;line-height:1.25;word-break:break-word}.name{font-weight:bold;font-size:1.25rem;margin:0}.jobtitle{font-size:1rem;margin:0.25rem 0 0 0}.desc,.textC{font-size:0.875rem;white-space:pre-line;line-height:1.5;margin:1rem}.textC{font-size:1rem;margin:2rem 1rem}.actions{margin-top:2rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.actionsC{width:33.33%}.actionBtn{padding:0.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.actionBtn a{border-radius:100%;padding:0.75rem;line-height:0}.actionBtn p{margin:0.5rem 0 0;font-size:0.875rem}.secondary{margin-top:1.25rem}.secBtn{padding:1rem}a{text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#cta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%}#dlVcard{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5rem;margin-top:1.5rem;padding:0.75rem 1.5rem;cursor:pointer;line-height:0}#dlVcard .icon{margin-right:0.5rem}#dlVcard p{margin:0}.attachments{margin-top:1.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.section{font-weight:bold;text-align:center;font-size:1.5rem;margin:3rem 1rem 1rem}.content{overflow:hidden;border-radius:0.5rem;margin-top:1rem}.content img{display:block;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.embedded{position:relative;padding-top:56.25%}.embedded iframe{position:absolute;top:0;left:0;width:100%;height:100%}.music,.video{width:100%}.mediaC{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-align:center;-ms-flex-align:center;align-items:center}video{width:100%}.controls{padding:2rem 1rem;font-size:0.875rem;text-align:center;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.prodInfo .desc{margin:-1rem 0 0}.price{margin:2rem 0 0;font-size:1.25rem;font-weight:bold}.label{display:inline-block;font-size:1rem;margin-top:1rem;border-radius:5rem;letter-spacing:1px;padding:0.75rem 1.5rem}.label p{margin:0}.title{font-size:1.125rem;font-weight:bold;margin:0 0 0.5rem}.mediaInfo{margin:0}.pCtrl,.docDl{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}.docDl{display:-webkit-box;display:-ms-flexbox;display:flex}.seekBar{width:100%;height:0.5rem;margin-top:2rem;border-radius:5rem;background:#adb5bd;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.playPause,.dlBtn{margin:2rem 0.5rem 0;padding:0.75rem;border-radius:5rem;line-height:0;cursor:pointer}.pause{display:none}footer{padding:2.5rem 1.5rem 2rem;font-size:0.75rem}footer a{text-decoration:underline;color:inherit} +body{margin:0 auto;width:100%;padding:0;max-width:30rem;color:#fff;position:relative}#modal{position:absolute;z-index:1;width:100%;bottom:0;-webkit-transition:top 0.2s ease-out, opacity 0.1s ease-out;transition:top 0.2s ease-out, opacity 0.1s ease-out;-webkit-transform:translateZ(0);transform:translateZ(0)}#closeModal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin:1rem 1rem 0 0}#close{padding:0.75rem;cursor:pointer;line-height:0}.icon{width:1.5rem;height:1.5rem}#modalView,#copyView,#qrView,#keyInfo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#copyView p,#keyInfo p{margin:1rem 2em 2rem;text-align:center}#copyURL,#dlKey{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5rem;padding:0.75rem 1.5rem;cursor:pointer}#copyURL span,#dlKey span{margin-left:0.5rem}#qrView h2,#qrView p{margin:0 2rem 0.5rem}#qr{margin:1rem 2rem 2rem;padding:2rem;background:#fff;border-radius:0.5rem}header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:6rem 3rem;-webkit-box-sizing:border-box;box-sizing:border-box}#logo{max-height:6rem;text-align:center;color:gray;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#topActions{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:absolute;left:1rem;right:0;top:1rem}#topActions>div{display:-webkit-box;display:-ms-flexbox;display:flex}#topActions a{padding:0.75rem;cursor:pointer;border-radius:100%;line-height:0;margin-right:1rem}main{padding:1rem}#profile{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#profile img{width:7rem;height:7rem;border-radius:100%;text-align:center;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-top:-4.5rem}#info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:1rem;line-height:1.25;word-break:break-word}.name{font-weight:bold;font-size:1.25rem;margin:0}.jobtitle{font-size:1rem;margin:0.25rem 0 0 0}.desc,.textC{font-size:0.875rem;white-space:pre-line;line-height:1.5;margin:1rem}.textC{font-size:1rem;margin:2rem 1rem}.actions{margin-top:2rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.actionsC{width:33.33%}.actionBtn{padding:0.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.actionBtn a{border-radius:100%;padding:0.75rem;line-height:0}.actionBtn p{margin:0.5rem 0 0;font-size:0.875rem}.secondary{margin-top:1.25rem}.secBtn{padding:1rem}a{text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#cta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%}#dlVcard{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5rem;margin-top:1.5rem;padding:0.75rem 1.5rem;cursor:pointer;line-height:0}#dlVcard .icon{margin-right:0.5rem}#dlVcard p{margin:0}.attachments{margin-top:1.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.section{font-weight:bold;text-align:center;font-size:1.5rem;margin:3rem 1rem 1rem}.content{overflow:hidden;border-radius:0.5rem;margin-top:1rem}.content img{display:block;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.embedded{position:relative;padding-top:56.25%}.embedded iframe{position:absolute;top:0;left:0;width:100%;height:100%}.music,.video{width:100%}.mediaC{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-align:center;-ms-flex-align:center;align-items:center}video{width:100%}.controls{padding:2rem 1rem;font-size:0.875rem;text-align:center;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.prodInfo .desc{margin:-1rem 0 0}.price{margin:2rem 0 0;font-size:1.25rem;font-weight:bold}.label{display:inline-block;font-size:1rem;margin-top:1rem;border-radius:5rem;letter-spacing:1px;padding:0.75rem 1.5rem}.label p{margin:0}.title{font-size:1.125rem;font-weight:bold;margin:0 0 0.5rem}.mediaInfo{margin:0}.pCtrl,.docDl{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}.docDl{display:-webkit-box;display:-ms-flexbox;display:flex}.seekBar{width:100%;height:0.5rem;margin-top:2rem;border-radius:5rem;background:#adb5bd;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.playPause,.dlBtn{margin:2rem 0.5rem 0;padding:0.75rem;border-radius:5rem;line-height:0;cursor:pointer}.pause{display:none}footer{padding:2.5rem 1.5rem 2rem;font-size:0.75rem}footer a{text-decoration:underline;color:inherit} diff --git a/assets/styles/T1.scss b/assets/styles/T1.scss index c8cad76..46b96bb 100644 --- a/assets/styles/T1.scss +++ b/assets/styles/T1.scss @@ -76,7 +76,6 @@ header { box-sizing: border-box; } #logo { - min-height: 6rem; max-height: 6rem; text-align: center; color: gray; diff --git a/components/Attachment.vue b/components/Attachment.vue index 07a962f..8d9f559 100644 --- a/components/Attachment.vue +++ b/components/Attachment.vue @@ -1,5 +1,15 @@ + diff --git a/package-lock.json b/package-lock.json index 02cc325..45427d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4302,6 +4302,11 @@ "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, + "cropperjs": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.5.10.tgz", + "integrity": "sha512-Zlggv+unsBXVc7EQip6rnOqFnFpHOIc4f8HqzAj3RQNEUNjrCCJyE7OlT/V8S0lO2m4ytRoceTlgzEh1DNMU0Q==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", diff --git a/package.json b/package.json index d8cc433..b025a51 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "@caohenghu/vue-colorpicker": "^1.2.4", "@nuxtjs/pwa": "^3.3.5", "@nuxtjs/robots": "^2.4.2", + "cropperjs": "^1.5.10", "file-saver": "^2.0.5", "id3-parser": "^2.0.0", "jszip": "^3.6.0", diff --git a/pages/index.vue b/pages/index.vue index 61f1f63..86dc7f2 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -6,8 +6,7 @@ > @@ -21,7 +20,7 @@ v-html="require(`~/assets/icons/logo.svg?include`)" > @@ -376,7 +381,7 @@ id="font-link" v-model="genInfo.fontLink" class="block mt-2 px-4 py-3 w-full bg-black placeholder-gray-600 rounded border border-transparent transition-colors duration-200 focus:outline-none focus:border-gray-600 resize-none hover:border-gray-600" - rows="3" + rows="4" spellcheck="false" :placeholder="`Eg.: `" > @@ -392,12 +397,10 @@ :placeholder="`Eg.: font-family: 'Poppins', sans-serif;`" /> -

- Supports web fonts from services such as Google Fonts, Adobe - Typekit, etc. Make sure to get the embed link for both regular and - bold font variants from the same font family. +

+ Supports services such as Google Fonts, Adobe Typekit, etc. Make + sure to get the embed link for both regular and bold font variants + from the same font family.

@@ -407,15 +410,12 @@ id="pgp-public-key" v-model="genInfo.tracker" class="block mt-2 px-4 py-3 w-full bg-black placeholder-gray-600 rounded border border-transparent transition-colors duration-200 focus:outline-none focus:border-gray-600 resize-none hover:border-gray-600" - rows="5" + rows="4" spellcheck="false" placeholder="Paste tracking code here" > -

- You can add tracking code from service such as Matomo, Clicky, - Google Analytics etc. +

+ Supports services such as Clicky, Matomo, Google Analytics etc.

@@ -499,15 +499,16 @@ import Preview from '@/components/Preview' import Download from '@/components/Download' import Help from '@/components/Help' import Footer from '@/components/Footer' +import Cropper from '@/components/Cropper' import Vcard from '@/components/Vcard' import JSZip from 'jszip' import { saveAs } from 'file-saver' -// let minify = require('html-minifier').minify import QRCode from '!!raw-loader!~/static/qrcode.min.js' import Theme1 from '!!raw-loader!~/assets/styles/T1.min.css' export default { components: { + Cropper, Modal, Attachment, Action, @@ -541,13 +542,15 @@ export default { logo: { url: null, blob: null, - format: null, + ext: null, + mime: null, resized: null, }, photo: { url: null, blob: null, - format: null, + ext: null, + mime: null, resized: null, }, }, @@ -1004,7 +1007,7 @@ export default { `${this.genInfo.name}'s public key.asc` ) }, - async resizeImage(type, index1, index2) { + async resizeImage(type, mime, index1, index2) { let vm = this let reader = new FileReader() let file @@ -1017,7 +1020,7 @@ export default { file = await this.featured[index1].content[index2].image.file } } else { - file = this.images[type].blob + file = await this.images[type].blob } let canvas = document.createElement('canvas') let ctx = canvas.getContext('2d') @@ -1051,8 +1054,10 @@ export default { } ctx.drawImage(img, 0, 0, canvas.width, canvas.height) canvas.toBlob( - function (blob) { - let image = new File([blob], type) + (blob) => { + let image = new File([blob], type, { + type: mime, + }) if (index2 >= 0) { if (type == 'image') { vm.featured[index1].content[index2].file = image @@ -1065,13 +1070,24 @@ export default { vm.images[type].resized = image } }, - 'image/jpeg', + mime, 0.8 ) } } reader.readAsDataURL(file) }, + getTrackingCode() { + let regex = //g + let tracker = this.genInfo.tracker + if (regex.test(tracker)) { + let scripts = tracker.match(regex) + let temp = document.createElement('div') + temp.innerHTML = tracker + return scripts.length && temp + } + return false + }, downloadPackage() { if (this.downloadChecked) { this.PreviewMode = false @@ -1080,22 +1096,36 @@ export default { this.$refs.html.$refs.html.outerHTML, 'text/html' ) + + // Inject stylesheets let styleLink = document.createElement('link') styleLink.rel = 'stylesheet' styleLink.href = './style.min.css' el.querySelector('head').appendChild(styleLink) + + // Inject qrcode script let qrcode = document.createElement('script') qrcode.src = './qrcode.min.js' el.querySelector('body').appendChild(qrcode) + + // Inject general script let modals = document.createElement('script') modals.innerText = 'let m=document.getElementById("modal"),c=document.getElementById("close"),ki=document.getElementById("keyInfo"),cv=document.getElementById("copyView"),curl=document.getElementById("copyURL"),qrv=document.getElementById("qrView"),qr=document.getElementById("qr"),s=document.getElementById("share"),sqr=document.getElementById("showQR"),sk=document.getElementById("showKey");function tC(e){"2rem"==e.style.top?(e.style.visibility="visible",e.style.top="0px",e.style.opacity=1):(e.style.top="2rem",e.style.opacity=0,setTimeout(()=>{e.style.visibility="hidden"},200))}function dN(e){e.style.display="none"}window.addEventListener("load",()=>{document.querySelector("#topActions").style.display="flex",qr.innerHTML=new QRCode({content:window.location.href,container:"svg-viewbox",join:!0,ecl:"L",padding:0}).svg()}),navigator.canShare?s.addEventListener("click",()=>{navigator.share({title:document.title,text:"You can view my Digital Business Card here:",url:window.location.href})}):s.addEventListener("click",()=>{tC(m),cv.style.display="flex",dN(qrv),ki&&dN(ki)}),sqr.addEventListener("click",()=>{tC(m),qrv.style.display="block",dN(cv),ki&&dN(ki)}),sk&&sk.addEventListener("click",()=>{tC(m),ki&&(ki.style.display="flex"),dN(cv),dN(qrv)}),c.addEventListener("click",()=>tC(m)),curl.addEventListener("click",async()=>{let e=curl.querySelectorAll(".action")[1];await navigator.clipboard.writeText(window.location.href).then(t=>{e.innerText="Copied",setTimeout(()=>{e.innerText="Copy URL"},1e3)})});' el.querySelector('body').appendChild(modals) + + // Inject media script let mediaHandler = document.createElement('script') mediaHandler.innerText = 'let pC=document.querySelectorAll(".pCtrl"),pP=document.querySelectorAll(".playPause"),srcs=document.querySelectorAll(".source");srcs.forEach(e=>{e.style.pointerEvents="none",e.removeAttribute("controls")}),pC.forEach((e,l)=>{e.style.display="flex";let r=e.querySelector(".currentTime"),s=e.querySelector(".seekBar"),t=e.querySelector(".playPause"),a=t.querySelector(".play"),c=t.querySelector(".pause");srcs[l].addEventListener("timeupdate",()=>{let e=srcs[l].currentTime,t=100/srcs[l].duration*e;s.value=t,100==t&&(s.value=0,a.style.display="block",c.style.display="none");let o=Math.floor(e/60),y=Math.floor(e%60);o.toString().length<2&&(o="0"+o),y.toString().length<2&&(y="0"+y),r.value=o+":"+y}),s.addEventListener("change",()=>{srcs[l].currentTime=srcs[l].duration*(parseInt(s.value)/100)}),t.addEventListener("click",()=>{srcs[l].paused?(srcs.forEach((e,r)=>{l!=r&&(e.paused||e.pause())}),pP.forEach((e,l)=>{let r=e.querySelector(".play"),s=e.querySelector(".pause");r.style.display="block",s.style.display="none"}),srcs[l].play(),a.style.display="none",c.style.display="block"):(srcs[l].pause(),c.style.display="none",a.style.display="block")})});' if (this.featured.length) el.querySelector('body').appendChild(mediaHandler) + + // Inject tracking scripts + let tracker = this.getTrackingCode() + while (tracker.firstChild) el.head.appendChild(tracker.firstChild) + + // Create blobs let html = new Blob( [`${el.documentElement.outerHTML}`], { @@ -1119,70 +1149,74 @@ export default { let qrScript = new Blob([QRCode], { type: 'application/javascript', }) - let name = this.genInfo.name + + // Prepare files let username = this.username let zip = new JSZip() zip.folder(username).file('index.html', html) zip.folder(username).file('style.min.css', css) zip.folder(username).file('qrcode.min.js', qrScript) zip.file('Hosting-Guide.html', guide) - if (this.images.logo.url) { - zip.folder(username).file( - `logo.${this.images.logo.format}`, - this.images.logo.format == 'svg' - ? this.images.logo.blob - : this.images.logo.resized - ) - } - if (this.images.photo.url) { - zip - .folder(username) - .file( - `photo.${this.images.photo.format}`, - this.images.photo.resized - ) + // Image attachments + for (const key in this.images) { + if (this.images[key].url) { + zip + .folder(username) + .file( + `${key}.${this.images[key].ext}`, + this.images[key].resized + ) + } } + + // Featured content let hasFeaturedContent = this.featured.filter((e) => e.content.length) .length - if (this.featured.length && hasFeaturedContent) { - this.featured.forEach((item, index) => { - item.content.forEach((item, i) => { + if (hasFeaturedContent) { + this.featured.forEach((item) => { + item.content.forEach((item) => { if (item.contentType == 'media') { zip .folder(username) .folder('media') - .file( - `${this.getTitle(item.title)}.${item.format}`, - item.file - ) + .file(`${this.getTitle(item.title)}.${item.ext}`, item.file) if (item.type.match(/music|document/gi)) { - zip - .folder(username) - .folder('media') - .file( - `${this.getTitle(item.title)}.${item.coverFormat}`, - item.cover - ) + if (!item.info) { + zip + .folder(username) + .folder('media') + .file( + `${this.getTitle(item.title)}.${item.coverExt}`, + item.cover + ) + } } } else if (item.contentType == 'product' && item.image) { zip .folder(username) .folder('media') .file( - `${this.getTitle(item.image.title)}.${item.image.format}`, + `${this.getTitle(item.image.title)}.${item.image.ext}`, item.image.file ) } }) }) } + + // Public key + let name = this.genInfo.name if (this.pubKeyIsValid) { zip .folder(username) - .file(`${this.genInfo.name}'s public key.asc`, this.genInfo.key) + .file(`${name}'s public key.asc`, this.genInfo.key) } + + // VCARD zip.folder(username).file(`${username}.vcf`, vCard) + + // Final ZIP file zip .generateAsync({ type: 'blob', @@ -1190,9 +1224,6 @@ export default { .then(function (zip) { saveAs(zip, `${name}'s Digital Business Card.zip`) }) - this.showAlert( - 'Your Download Has Been Started!\n\nExtract the downloaded ZIP file and follow the Hosting Guide to get your digital business card online.\n\nIf you find this service valuable to you or your business, please consider donating.\nDonate' - ) this.PreviewMode = true }, 250) } @@ -1200,6 +1231,9 @@ export default { }, mounted() { window.addEventListener('scroll', this.checkView) + // window.onbeforeunload = function () { + // return 'Your work will be lost.' + // } }, } \ No newline at end of file diff --git a/static/demo/Digital Business Card Generator's public key.asc b/static/demo/EnBizCard's public key.asc similarity index 100% rename from static/demo/Digital Business Card Generator's public key.asc rename to static/demo/EnBizCard's public key.asc diff --git a/static/demo/digitalbusinesscardgenerator.vcf b/static/demo/digitalbusinesscardgenerator.vcf deleted file mode 100644 index dc8cb2a..0000000 --- a/static/demo/digitalbusinesscardgenerator.vcf +++ /dev/null @@ -1,13 +0,0 @@ -BEGIN:VCARD -VERSION:3.0 -N:Digital Business Card Generator;;;; -FN:Digital Business Card Generator -ORG:Web App -TITLE:Web App -TEL;TYPE=work,pref:+91 9876543210 -TEL;TYPE=work: -EMAIL;TYPE=work:dbizcard@example.com -URL:https://dbizcard.vercel.app/ -KEY:OPENPGP4FPR:E62C45D676568839D9400FAE67360EC2DEB07BB7 -UID:dbizcard-135137 -END:VCARD \ No newline at end of file diff --git a/static/demo/enbizcard.vcf b/static/demo/enbizcard.vcf new file mode 100644 index 0000000..e0345e0 --- /dev/null +++ b/static/demo/enbizcard.vcf @@ -0,0 +1,13 @@ +BEGIN:VCARD +VERSION:3.0 +N:EnBizCard;;;; +FN:EnBizCard +ORG:EnBizCard - An Open-Source Digital Business Card Generator +TITLE:An Open-Source Digital Business Card Generator +TEL;TYPE=work,pref:9876543210 +TEL;TYPE=work: +EMAIL;TYPE=work:apps@vishnuraghav.com +URL:https://enbizcard.vercel.app/ +KEY:OPENPGP4FPR:E62C45D676568839D9400FAE67360EC2DEB07BB7 +UID:enbizcard-857131 +END:VCARD \ No newline at end of file diff --git a/static/demo/featured/sea_side.mp4 b/static/demo/featured/sea_side.mp4 deleted file mode 100644 index b986314..0000000 Binary files a/static/demo/featured/sea_side.mp4 and /dev/null differ diff --git a/static/demo/featured/shipping_lanes.jpeg b/static/demo/featured/shipping_lanes.jpeg deleted file mode 100644 index fdfa18a..0000000 Binary files a/static/demo/featured/shipping_lanes.jpeg and /dev/null differ diff --git a/static/demo/featured/shipping_lanes.mp3 b/static/demo/featured/shipping_lanes.mp3 deleted file mode 100644 index 8f5e334..0000000 Binary files a/static/demo/featured/shipping_lanes.mp3 and /dev/null differ diff --git a/static/demo/index.html b/static/demo/index.html index 97c7ff4..11a7131 100644 --- a/static/demo/index.html +++ b/static/demo/index.html @@ -1,87 +1,68 @@ - Digital Business Card Generator's Digital Business Card
Photo

- Digital Business Card Generator -

- Web App -

- Stop printing. Start hosting! - ⚡ - Quickly generate an interactive and responsive HTML-based digital business card, that can be hosted with your website. -

- Call -

- Whatsapp -

- Telegram -

- Email -

- Website -

- Store -

Image Gallery

Product image

- Photo by Andreas Gücklhorn on Unsplash -

Music Releases

cover

- Shipping Lanes -

Chad Crouch - Arps

Video Gallery

+ EnBizCard's Digital Business Card +

Photo

+ EnBizCard +

+ An Open-Source Digital Business Card Generator +

+ EnBizCard helps you create beautiful, responsive HTML-based digital business cards that can be hosted on your website. +

+ Call +

+ Telegram +

+ Email +

+ Website +

+ Store +

Image Gallery

Product image

+ Photo by Andreas Gücklhorn on Unsplash +

Product image

+ Photo by Erol Ahmed on Unsplash +

Music Releases

cover

+ Over the Water, Humans Gather +

Doctor Turtle - One Person Listening Now

Video Gallery

Butterflies -

Documents

Business card - Wikipedia

+

Documents

Business card - Wikipedia

Business card - Wikipedia -

PDF - 386.96 KB

Videos on the Web

Geolocation

Author

Product image

- Vishnu Raghav B -

- 🌐 Freelancer 🎨 Designer 💻 Developer 🛡️ Technology & Privacy Enthusiast -

- -

Donate

\ No newline at end of file +

PDF - 386.96 KB

Poem - Once in a Lifetime

Once in a lifetime you find someone special, + +Your lives intermingle and somehow you know. + +This is the beginning of all you have longed for, + +A love you can build on, a love that will grow. + +Once in a lifetime to those who are lucky, + +A miracle happens and dreams all come true. + +I know it can happen, it happened to me, +For I've found my "once in a lifetime" with you.

Geolocation

Product Showcase

Product image

+ EnBizCard +

+ by Vishnu Raghav +

+ Free Forever +

Create your own

+ Please Donate +

+ If you find this service valuable to you or your business, please consider donating. +

Donate

\ No newline at end of file diff --git a/static/demo/logo.gif b/static/demo/logo.gif new file mode 100644 index 0000000..978a9dc Binary files /dev/null and b/static/demo/logo.gif differ diff --git a/static/demo/featured/business_card_-_wikipedia.jpeg b/static/demo/media/business_card_-_wikipedia.jpeg similarity index 100% rename from static/demo/featured/business_card_-_wikipedia.jpeg rename to static/demo/media/business_card_-_wikipedia.jpeg diff --git a/static/demo/featured/business_card_-_wikipedia.pdf b/static/demo/media/business_card_-_wikipedia.pdf similarity index 100% rename from static/demo/featured/business_card_-_wikipedia.pdf rename to static/demo/media/business_card_-_wikipedia.pdf diff --git a/static/demo/featured/butterflies.mp4 b/static/demo/media/butterflies.mp4 similarity index 100% rename from static/demo/featured/butterflies.mp4 rename to static/demo/media/butterflies.mp4 diff --git a/static/demo/media/over_the_water,_humans_gather.jpeg b/static/demo/media/over_the_water,_humans_gather.jpeg new file mode 100644 index 0000000..3c05776 Binary files /dev/null and b/static/demo/media/over_the_water,_humans_gather.jpeg differ diff --git a/static/demo/media/over_the_water,_humans_gather.mp3 b/static/demo/media/over_the_water,_humans_gather.mp3 new file mode 100644 index 0000000..0b0e4c2 Binary files /dev/null and b/static/demo/media/over_the_water,_humans_gather.mp3 differ diff --git a/static/demo/media/photo.png b/static/demo/media/photo.png new file mode 100644 index 0000000..632786d Binary files /dev/null and b/static/demo/media/photo.png differ diff --git "a/static/demo/featured/photo_by_andreas_g\303\274cklhorn_on_unsplash.jpeg" "b/static/demo/media/photo_by_andreas_g\303\274cklhorn_on_unsplash.jpeg" similarity index 100% rename from "static/demo/featured/photo_by_andreas_g\303\274cklhorn_on_unsplash.jpeg" rename to "static/demo/media/photo_by_andreas_g\303\274cklhorn_on_unsplash.jpeg" diff --git a/static/demo/media/photo_by_erol_ahmed_on_unsplash.jpeg b/static/demo/media/photo_by_erol_ahmed_on_unsplash.jpeg new file mode 100644 index 0000000..b8def01 Binary files /dev/null and b/static/demo/media/photo_by_erol_ahmed_on_unsplash.jpeg differ diff --git a/static/demo/photo.png b/static/demo/photo.png index 00fdfb3..65769e7 100644 Binary files a/static/demo/photo.png and b/static/demo/photo.png differ diff --git a/static/demo/products/l456@2x.jpeg b/static/demo/products/l456@2x.jpeg deleted file mode 100644 index 2218c7c..0000000 Binary files a/static/demo/products/l456@2x.jpeg and /dev/null differ diff --git a/static/demo/style.min.css b/static/demo/style.min.css index 0e366e8..27a5b2a 100644 --- a/static/demo/style.min.css +++ b/static/demo/style.min.css @@ -1 +1 @@ -body{margin:0 auto;width:100%;padding:0;max-width:30rem;color:#fff;font-family:sans-serif;position:relative}#modal{position:absolute;z-index:1;width:100%;bottom:0;-webkit-transition:top 0.2s ease-out, opacity 0.1s ease-out;transition:top 0.2s ease-out, opacity 0.1s ease-out;-webkit-transform:translateZ(0);transform:translateZ(0)}#closeModal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin:1rem 1rem 0 0}#close{padding:0.75rem;cursor:pointer;line-height:0}.icon{width:1.5rem;height:1.5rem}#modalView,#copyView,#qrView,#keyInfo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#copyView p,#keyInfo p{margin:1rem 2em 0;line-height:1.5;text-align:center}#copyURL,#dlKey{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5rem;margin-top:2rem;padding:0.75rem 1.5rem;cursor:pointer}#copyURL span,#dlKey span{margin-left:0.5rem}#qrView{text-align:center;width:100%}#qrView h2,#qrView p{padding:0 2rem}#qrView h2{margin:0}#qrView p{margin-top:0.5rem}#qr{margin:1rem 2rem 2rem;padding:2rem;background:#fff;border-radius:0.5rem}header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:6rem 3rem;-webkit-box-sizing:border-box;box-sizing:border-box}#logo{max-height:6rem;text-align:center;color:gray;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#topActions{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:absolute;left:1rem;right:0;top:1rem}#topActions>div{display:-webkit-box;display:-ms-flexbox;display:flex}#topActions a{padding:0.75rem;cursor:pointer;border-radius:100%;line-height:0;margin-right:1rem}main{padding:1rem}#profile{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:-4.5rem}#profile img,#profile .img{width:7rem;height:7rem;border-radius:100%;text-align:center;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:1rem;line-height:1.25;word-break:break-word}.name{font-weight:700;font-size:1.25rem;margin:0}.jobtitle{font-size:1rem;margin:0.25rem 0 0 0}.desc{font-size:0.875rem;white-space:pre-line;line-height:1.5;margin:1rem}.actions{margin-top:2rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.actionsC{width:33.33%}.actionBtn{padding:0.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.actionBtn a{border-radius:100%;padding:0.75rem;line-height:0}.actionBtn p{margin:0.5rem 0 0;font-size:0.875rem}.secActions{margin-top:1.25rem}.secBtn{padding:1rem}a{text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#cta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%}#dlVcard{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5rem;margin-top:1.5rem;padding:0.75rem 1.5rem;cursor:pointer;line-height:0}#dlVcard .icon{margin-right:0.5rem}#dlVcard p{margin:0}.attachments{margin-top:1.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.section{font-weight:700;text-align:center;font-size:1.5rem;margin:3rem 1rem 1rem}.content{overflow:hidden;border-radius:0.5rem;margin-top:1rem}.content img{display:block;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.embedded{position:relative;padding-top:56.25%}.embedded iframe{position:absolute;top:0;left:0;width:100%;height:100%}.music,.video{width:100%}.mediaC{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-align:center;-ms-flex-align:center;align-items:center}video{width:100%}.controls{padding:2rem 1rem;font-size:0.875rem;text-align:center;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.prodInfo .desc{margin:-1rem 0 0}.price{margin:2rem 0 0;font-size:1.25rem;font-weight:700}.label{display:inline-block;font-size:1rem;margin-top:1rem;border-radius:5rem;letter-spacing:1px;padding:0.75rem 1.5rem}.label p{margin:0}.title{font-size:1.125rem;font-weight:700;margin:0 0 0.5rem}.mediaInfo{margin:0}.pCtrl,.docDl{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}.docDl{display:-webkit-box;display:-ms-flexbox;display:flex}.seekBar{width:100%;height:0.5rem;margin-top:2rem;border-radius:5rem;background:#adb5bd;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.playPause,.dlBtn{margin:2rem 0.5rem 0;padding:0.75rem;border-radius:5rem;line-height:0;cursor:pointer}.pause{display:none}footer{padding:2.5rem 1.5rem 2rem;font-size:0.75rem;text-align:center}footer a{text-decoration:underline;color:inherit} +body{margin:0 auto;width:100%;padding:0;max-width:30rem;color:#fff;position:relative}#modal{position:absolute;z-index:1;width:100%;bottom:0;-webkit-transition:top 0.2s ease-out, opacity 0.1s ease-out;transition:top 0.2s ease-out, opacity 0.1s ease-out;-webkit-transform:translateZ(0);transform:translateZ(0)}#closeModal{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin:1rem 1rem 0 0}#close{padding:0.75rem;cursor:pointer;line-height:0}.icon{width:1.5rem;height:1.5rem}#modalView,#copyView,#qrView,#keyInfo{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#copyView p,#keyInfo p{margin:1rem 2em 2rem;text-align:center}#copyURL,#dlKey{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5rem;padding:0.75rem 1.5rem;cursor:pointer}#copyURL span,#dlKey span{margin-left:0.5rem}#qrView h2,#qrView p{margin:0 2rem 0.5rem}#qr{margin:1rem 2rem 2rem;padding:2rem;background:#fff;border-radius:0.5rem}header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;position:relative;padding:6rem 3rem;-webkit-box-sizing:border-box;box-sizing:border-box}#logo{max-height:6rem;text-align:center;color:gray;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#topActions{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;position:absolute;left:1rem;right:0;top:1rem}#topActions>div{display:-webkit-box;display:-ms-flexbox;display:flex}#topActions a{padding:0.75rem;cursor:pointer;border-radius:100%;line-height:0;margin-right:1rem}main{padding:1rem}#profile{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center}#profile img{width:7rem;height:7rem;border-radius:100%;text-align:center;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-top:-4.5rem}#info{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-top:1rem;line-height:1.25;word-break:break-word}.name{font-weight:bold;font-size:1.25rem;margin:0}.jobtitle{font-size:1rem;margin:0.25rem 0 0 0}.desc,.textC{font-size:0.875rem;white-space:pre-line;line-height:1.5;margin:1rem}.textC{font-size:1rem;margin:2rem 1rem}.actions{margin-top:2rem;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.actionsC{width:33.33%}.actionBtn{padding:0.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.actionBtn a{border-radius:100%;padding:0.75rem;line-height:0}.actionBtn p{margin:0.5rem 0 0;font-size:0.875rem}.secondary{margin-top:1.25rem}.secBtn{padding:1rem}a{text-decoration:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#cta{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:100%}#dlVcard{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;border-radius:5rem;margin-top:1.5rem;padding:0.75rem 1.5rem;cursor:pointer;line-height:0}#dlVcard .icon{margin-right:0.5rem}#dlVcard p{margin:0}.attachments{margin-top:1.5rem;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.section{font-weight:bold;text-align:center;font-size:1.5rem;margin:3rem 1rem 1rem}.content{overflow:hidden;border-radius:0.5rem;margin-top:1rem}.content img{display:block;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.embedded{position:relative;padding-top:56.25%}.embedded iframe{position:absolute;top:0;left:0;width:100%;height:100%}.music,.video{width:100%}.mediaC{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:space-evenly;-ms-flex-pack:space-evenly;justify-content:space-evenly;-webkit-box-align:center;-ms-flex-align:center;align-items:center}video{width:100%}.controls{padding:2rem 1rem;font-size:0.875rem;text-align:center;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.prodInfo .desc{margin:-1rem 0 0}.price{margin:2rem 0 0;font-size:1.25rem;font-weight:bold}.label{display:inline-block;font-size:1rem;margin-top:1rem;border-radius:5rem;letter-spacing:1px;padding:0.75rem 1.5rem}.label p{margin:0}.title{font-size:1.125rem;font-weight:bold;margin:0 0 0.5rem}.mediaInfo{margin:0}.pCtrl,.docDl{display:none;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:100%}.docDl{display:-webkit-box;display:-ms-flexbox;display:flex}.seekBar{width:100%;height:0.5rem;margin-top:2rem;border-radius:5rem;background:#adb5bd;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer}.playPause,.dlBtn{margin:2rem 0.5rem 0;padding:0.75rem;border-radius:5rem;line-height:0;cursor:pointer}.pause{display:none}footer{padding:2.5rem 1.5rem 2rem;font-size:0.75rem}footer a{text-decoration:underline;color:inherit}