(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[177],{347:()=>{},692:(e,a,t)=>{"use strict";t.d(a,{Gq:()=>i,Jz:()=>r,kI:()=>o});let s={newsletter:{maxRequests:5,windowMs:36e5},feedback:{maxRequests:3,windowMs:36e5},contact:{maxRequests:2,windowMs:36e5},popularFeatures:{maxRequests:10,windowMs:36e5}};function r(e){let a=s[e],t=Date.now();try{let s=localStorage.getItem("rateLimit_".concat(e)),r=s?JSON.parse(s):{count:0,windowStart:t};return t-r.windowStart>a.windowMs&&(r.count=0,r.windowStart=t),r.count>=a.maxRequests}catch(e){return console.warn("Rate limiting check failed:",e),!1}}function i(e){let a=s[e],t="rateLimit_".concat(e),r=Date.now();try{let e=localStorage.getItem(t),s=e?JSON.parse(e):{count:0,windowStart:r};r-s.windowStart>a.windowMs?(s.count=1,s.windowStart=r):s.count+=1,localStorage.setItem(t,JSON.stringify(s))}catch(e){console.warn("Failed to record submission:",e)}}function o(e){let a=s[e],t=Date.now();try{let s=localStorage.getItem("rateLimit_".concat(e)),r=s?JSON.parse(s):{count:0,windowStart:t};if(t-r.windowStart>a.windowMs)return a.maxRequests;return Math.max(0,a.maxRequests-r.count)}catch(e){return console.warn("Failed to get remaining submissions:",e),a.maxRequests}}},4147:e=>{e.exports={style:{fontFamily:"'Geist', 'Geist Fallback'",fontStyle:"normal"},className:"__className_5cfdac",variable:"__variable_5cfdac"}},4175:(e,a,t)=>{"use strict";t.d(a,{StoreProvider:()=>c});var s=t(5155);t(2115);var r=t(4540),i=t(1990),o=t(7892),n=t(4812),u=t(4679);let l=(0,i.U1)({reducer:{newsletter:o.Ay,feedback:n.Ay,contact:u.Ay},middleware:e=>e({serializableCheck:{ignoredActions:["newsletter/subscribe/fulfilled","newsletter/subscribe/pending","feedback/submit/fulfilled","feedback/submit/pending","feedback/submitPopularFeature/fulfilled","feedback/submitPopularFeature/pending","contact/submit/fulfilled","contact/submit/pending"],ignoredPaths:["newsletter.subscribedAt","feedback.formData.submittedAt","contact.formData.submittedAt"]}})});function c(e){let{children:a}=e;return(0,s.jsx)(r.Kq,{store:l,children:a})}},4679:(e,a,t)=>{"use strict";t.d(a,{Ay:()=>g,D5:()=>d,KE:()=>c,RS:()=>n,cK:()=>l,mX:()=>m});var s=t(1990),r=t(5317),i=t(7039),o=t(692);let n=(0,s.zD)("contact/submit",async(e,a)=>{let{rejectWithValue:t}=a;try{if((0,o.Jz)("contact")){let e=(0,o.kI)("contact");return t("Too many contact requests. You can send ".concat(e," more messages in the next hour. Please try again later."))}if(!e.name.trim()||!e.email.trim()||!e.message.trim())return t("Name, email, and message are required");if(!e.agreeToPrivacy)return t("You must agree to the privacy policy to send a message");let a={...e,submittedAt:r.Dc.now(),isProcessed:!1,source:"landing-page-contact-form"},s=await (0,r.gS)((0,r.rJ)(i.db,"contact-submissions"),a);return(0,o.Gq)("contact"),{id:s.id,message:"Thank you for your message! We'll get back to you within 24 hours."}}catch(e){return t(e instanceof Error?e.message:"Failed to send message")}}),u=(0,s.Z0)({name:"contact",initialState:{formData:{name:"",email:"",inquiryType:"general-inquiry",subject:"",message:"",agreeToPrivacy:!1},isSubmitting:!1,isSubmitted:!1,error:null,successMessage:null},reducers:{updateContactForm:(e,a)=>{e.formData={...e.formData,...a.payload},(e.error||e.successMessage)&&(e.error=null,e.successMessage=null)},setInquiryType:(e,a)=>{e.formData.inquiryType=a.payload},togglePrivacyAgreement:e=>{e.formData.agreeToPrivacy=!e.formData.agreeToPrivacy},clearContactMessages:e=>{e.error=null,e.successMessage=null},resetContactForm:e=>{e.formData={name:"",email:"",inquiryType:"general-inquiry",subject:"",message:"",agreeToPrivacy:!1},e.isSubmitting=!1,e.isSubmitted=!1,e.error=null,e.successMessage=null}},extraReducers:e=>{e.addCase(n.pending,e=>{e.isSubmitting=!0,e.error=null,e.successMessage=null}).addCase(n.fulfilled,(e,a)=>{e.isSubmitting=!1,e.isSubmitted=!0,e.successMessage=a.payload.message,e.formData={name:"",email:"",inquiryType:"general-inquiry",subject:"",message:"",agreeToPrivacy:!1}}).addCase(n.rejected,(e,a)=>{e.isSubmitting=!1,e.error=a.payload})}}),{updateContactForm:l,setInquiryType:c,togglePrivacyAgreement:d,clearContactMessages:m,resetContactForm:f}=u.actions,g=u.reducer},4812:(e,a,t)=>{"use strict";t.d(a,{Ay:()=>w,VH:()=>p,Wz:()=>n,aX:()=>d,g$:()=>m,kP:()=>g,oI:()=>b,wm:()=>f});var s=t(5317),r=t(692),i=t(1990),o=t(7039);let n=(0,i.zD)("feedback/submit",async(e,a)=>{let{rejectWithValue:t}=a;try{if((0,r.Jz)("feedback")){let e=(0,r.kI)("feedback");return t("Too many feedback submissions. You can send ".concat(e," more feedback in the next hour. Please try again later."))}let a={...e,submittedAt:s.Dc.now(),isProcessed:!1,source:"landing-page-feedback"},i=await (0,s.gS)((0,s.rJ)(o.db,"feedback"),a);return(0,r.Gq)("feedback"),{id:i.id,message:"Thank you for your feedback! We appreciate your input."}}catch(e){return t(e instanceof Error?e.message:"Failed to submit feedback")}}),u=(0,i.zD)("feedback/submitPopularFeature",async(e,a)=>{let{feature:t,email:i}=e,{rejectWithValue:n}=a;try{if((0,r.Jz)("popularFeatures")){let e=(0,r.kI)("popularFeatures");return n("Too many feature requests. You can submit ".concat(e," more requests in the next hour."))}let e={feature:t,submittedAt:s.Dc.now(),userEmail:i,source:"feedback-form-popular-features"},a=await (0,s.gS)((0,s.rJ)(o.db,"popular-feature-requests"),e);return(0,r.Gq)("popularFeatures"),{id:a.id,feature:t,message:"Feature request noted! We'll consider it for future updates."}}catch(e){return n(e instanceof Error?e.message:"Failed to submit feature request")}}),l=(0,i.zD)("feedback/fetchPopularFeaturesCount",async(e,a)=>{let{rejectWithValue:t}=a;try{let e=await (0,s.GG)((0,s.rJ)(o.db,"popular-feature-requests")),a={"saved-locations":0,"7-day-weather-forecast":0,"push-notifications":0,"offline-mode":0,"share-location-with-friends":0,"moon-phase-info":0,"photography-calendar":0,"advanced-weather-details":0};return e.docs.forEach(e=>{let t=e.data();t.feature&&a.hasOwnProperty(t.feature)&&a[t.feature]++}),a}catch(e){return t(e instanceof Error?e.message:"Failed to fetch popular features")}}),c=(0,i.Z0)({name:"feedback",initialState:{formData:{type:"general-feedback",popularFeatures:[]},isSubmitting:!1,isSubmitted:!1,isSubmittingPopularFeature:!1,error:null,successMessage:null,popularFeaturesCount:{"saved-locations":0,"7-day-weather-forecast":0,"push-notifications":0,"offline-mode":0,"share-location-with-friends":0,"moon-phase-info":0,"photography-calendar":0,"advanced-weather-details":0}},reducers:{updateFormData:(e,a)=>{e.formData={...e.formData,...a.payload},(e.error||e.successMessage)&&(e.error=null,e.successMessage=null)},setFeedbackType:(e,a)=>{e.formData.type=a.payload},setRating:(e,a)=>{e.formData.rating=a.payload},togglePopularFeature:(e,a)=>{let t=a.payload,s=e.formData.popularFeatures.indexOf(t);s>-1?e.formData.popularFeatures.splice(s,1):e.formData.popularFeatures.push(t)},setPhotographyStyle:(e,a)=>{e.formData.photographyStyle=a.payload},clearMessages:e=>{e.error=null,e.successMessage=null},resetForm:e=>{e.formData={type:"general-feedback",popularFeatures:[]},e.isSubmitting=!1,e.isSubmitted=!1,e.isSubmittingPopularFeature=!1,e.error=null,e.successMessage=null}},extraReducers:e=>{e.addCase(n.pending,e=>{e.isSubmitting=!0,e.error=null,e.successMessage=null}).addCase(n.fulfilled,(e,a)=>{e.isSubmitting=!1,e.isSubmitted=!0,e.successMessage=a.payload.message,e.formData={type:"general-feedback",popularFeatures:[]}}).addCase(n.rejected,(e,a)=>{e.isSubmitting=!1,e.error=a.payload}).addCase(u.pending,e=>{e.isSubmittingPopularFeature=!0}).addCase(u.fulfilled,(e,a)=>{e.isSubmittingPopularFeature=!1,e.popularFeaturesCount[a.payload.feature]++}).addCase(u.rejected,(e,a)=>{e.isSubmittingPopularFeature=!1,e.error=a.payload}).addCase(l.fulfilled,(e,a)=>{e.popularFeaturesCount=a.payload})}}),{updateFormData:d,setFeedbackType:m,setRating:f,togglePopularFeature:g,setPhotographyStyle:p,clearMessages:b,resetForm:y}=c.actions,w=c.reducer},7039:(e,a,t)=>{"use strict";let s;t.d(a,{db:()=>u,z:()=>s});var r=t(1906),i=t(3915),o=t(5317);let n=(0,i.Wp)({apiKey:"AIzaSyDuXmoACmYcS38pRnSKT7pZiB2YFAtB35w",authDomain:"frametimesync.firebaseapp.com",projectId:"frametimesync",storageBucket:"frametimesync.firebasestorage.app",messagingSenderId:"593555084950",appId:"1:593555084950:web:183fdaa8121df4f54ed4b7",measurementId:"G-80HV83B5GQ"}),u=(0,o.aU)(n);s=(0,r.P5)(n)},7892:(e,a,t)=>{"use strict";t.d(a,{Ay:()=>m,ZG:()=>n,oI:()=>c,xI:()=>l});var s=t(1990),r=t(5317),i=t(7039),o=t(692);let n=(0,s.zD)("newsletter/subscribe",async(e,a)=>{let{rejectWithValue:t}=a;try{if((0,o.Jz)("newsletter")){let e=(0,o.kI)("newsletter");return t("Too many newsletter subscriptions. You can subscribe ".concat(e," more times in the next hour."))}let a=await (0,r.gS)((0,r.rJ)(i.db,"newsletter-subscribers"),{email:e,subscribedAt:r.Dc.now(),isActive:!0,source:"landing-page"});return(0,o.Gq)("newsletter"),{email:e,id:a.id,message:"Successfully subscribed to newsletter!"}}catch(e){return t(e instanceof Error?e.message:"Failed to subscribe to newsletter")}}),u=(0,s.Z0)({name:"newsletter",initialState:{email:"",isLoading:!1,isSubscribed:!1,error:null,successMessage:null},reducers:{setEmail:(e,a)=>{e.email=a.payload,(e.error||e.successMessage)&&(e.error=null,e.successMessage=null)},clearMessages:e=>{e.error=null,e.successMessage=null},resetNewsletter:e=>{e.email="",e.isLoading=!1,e.isSubscribed=!1,e.error=null,e.successMessage=null}},extraReducers:e=>{e.addCase(n.pending,e=>{e.isLoading=!0,e.error=null,e.successMessage=null}).addCase(n.fulfilled,(e,a)=>{e.isLoading=!1,e.isSubscribed=!0,e.email="",e.successMessage=a.payload.message}).addCase(n.rejected,(e,a)=>{e.isLoading=!1,e.error=a.payload})}}),{setEmail:l,clearMessages:c,resetNewsletter:d}=u.actions,m=u.reducer},8489:e=>{e.exports={style:{fontFamily:"'Geist Mono', 'Geist Mono Fallback'",fontStyle:"normal"},className:"__className_9a8899",variable:"__variable_9a8899"}},8924:(e,a,t)=>{Promise.resolve().then(t.t.bind(t,4147,23)),Promise.resolve().then(t.t.bind(t,8489,23)),Promise.resolve().then(t.t.bind(t,347,23)),Promise.resolve().then(t.bind(t,4175))}},e=>{e.O(0,[896,135,724,441,964,358],()=>e(e.s=8924)),_N_E=e.O()}]);