updating website copy and adding new ProblemSolution.tsx
This commit is contained in:
Executable
+46
@@ -0,0 +1,46 @@
|
|||||||
|
<svg id="livetype" xmlns="http://www.w3.org/2000/svg" width="119.66407" height="40" viewBox="0 0 119.66407 40">
|
||||||
|
<title>Download_on_the_App_Store_Badge_US-UK_RGB_blk_4SVG_092917</title>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<g>
|
||||||
|
<path d="M110.13477,0H9.53468c-.3667,0-.729,0-1.09473.002-.30615.002-.60986.00781-.91895.0127A13.21476,13.21476,0,0,0,5.5171.19141a6.66509,6.66509,0,0,0-1.90088.627A6.43779,6.43779,0,0,0,1.99757,1.99707,6.25844,6.25844,0,0,0,.81935,3.61816a6.60119,6.60119,0,0,0-.625,1.90332,12.993,12.993,0,0,0-.1792,2.002C.00587,7.83008.00489,8.1377,0,8.44434V31.5586c.00489.3105.00587.6113.01515.9219a12.99232,12.99232,0,0,0,.1792,2.0019,6.58756,6.58756,0,0,0,.625,1.9043A6.20778,6.20778,0,0,0,1.99757,38.001a6.27445,6.27445,0,0,0,1.61865,1.1787,6.70082,6.70082,0,0,0,1.90088.6308,13.45514,13.45514,0,0,0,2.0039.1768c.30909.0068.6128.0107.91895.0107C8.80567,40,9.168,40,9.53468,40H110.13477c.3594,0,.7246,0,1.084-.002.3047,0,.6172-.0039.9219-.0107a13.279,13.279,0,0,0,2-.1768,6.80432,6.80432,0,0,0,1.9082-.6308,6.27742,6.27742,0,0,0,1.6172-1.1787,6.39482,6.39482,0,0,0,1.1816-1.6143,6.60413,6.60413,0,0,0,.6191-1.9043,13.50643,13.50643,0,0,0,.1856-2.0019c.0039-.3106.0039-.6114.0039-.9219.0078-.3633.0078-.7246.0078-1.0938V9.53613c0-.36621,0-.72949-.0078-1.09179,0-.30664,0-.61426-.0039-.9209a13.5071,13.5071,0,0,0-.1856-2.002,6.6177,6.6177,0,0,0-.6191-1.90332,6.46619,6.46619,0,0,0-2.7988-2.7998,6.76754,6.76754,0,0,0-1.9082-.627,13.04394,13.04394,0,0,0-2-.17676c-.3047-.00488-.6172-.01074-.9219-.01269-.3594-.002-.7246-.002-1.084-.002Z" style="fill: #a6a6a6"/>
|
||||||
|
<path d="M8.44483,39.125c-.30468,0-.602-.0039-.90429-.0107a12.68714,12.68714,0,0,1-1.86914-.1631,5.88381,5.88381,0,0,1-1.65674-.5479,5.40573,5.40573,0,0,1-1.397-1.0166,5.32082,5.32082,0,0,1-1.02051-1.3965,5.72186,5.72186,0,0,1-.543-1.6572,12.41351,12.41351,0,0,1-.1665-1.875c-.00634-.2109-.01464-.9131-.01464-.9131V8.44434S.88185,7.75293.8877,7.5498a12.37039,12.37039,0,0,1,.16553-1.87207,5.7555,5.7555,0,0,1,.54346-1.6621A5.37349,5.37349,0,0,1,2.61183,2.61768,5.56543,5.56543,0,0,1,4.01417,1.59521a5.82309,5.82309,0,0,1,1.65332-.54394A12.58589,12.58589,0,0,1,7.543.88721L8.44532.875H111.21387l.9131.0127a12.38493,12.38493,0,0,1,1.8584.16259,5.93833,5.93833,0,0,1,1.6709.54785,5.59374,5.59374,0,0,1,2.415,2.41993,5.76267,5.76267,0,0,1,.5352,1.64892,12.995,12.995,0,0,1,.1738,1.88721c.0029.2832.0029.5874.0029.89014.0079.375.0079.73193.0079,1.09179V30.4648c0,.3633,0,.7178-.0079,1.0752,0,.3252,0,.6231-.0039.9297a12.73126,12.73126,0,0,1-.1709,1.8535,5.739,5.739,0,0,1-.54,1.67,5.48029,5.48029,0,0,1-1.0156,1.3857,5.4129,5.4129,0,0,1-1.3994,1.0225,5.86168,5.86168,0,0,1-1.668.5498,12.54218,12.54218,0,0,1-1.8692.1631c-.2929.0068-.5996.0107-.8974.0107l-1.084.002Z"/>
|
||||||
|
</g>
|
||||||
|
<g id="_Group_" data-name="<Group>">
|
||||||
|
<g id="_Group_2" data-name="<Group>">
|
||||||
|
<g id="_Group_3" data-name="<Group>">
|
||||||
|
<path id="_Path_" data-name="<Path>" d="M24.76888,20.30068a4.94881,4.94881,0,0,1,2.35656-4.15206,5.06566,5.06566,0,0,0-3.99116-2.15768c-1.67924-.17626-3.30719,1.00483-4.1629,1.00483-.87227,0-2.18977-.98733-3.6085-.95814a5.31529,5.31529,0,0,0-4.47292,2.72787c-1.934,3.34842-.49141,8.26947,1.3612,10.97608.9269,1.32535,2.01018,2.8058,3.42763,2.7533,1.38706-.05753,1.9051-.88448,3.5794-.88448,1.65876,0,2.14479.88448,3.591.8511,1.48838-.02416,2.42613-1.33124,3.32051-2.66914a10.962,10.962,0,0,0,1.51842-3.09251A4.78205,4.78205,0,0,1,24.76888,20.30068Z" style="fill: #fff"/>
|
||||||
|
<path id="_Path_2" data-name="<Path>" d="M22.03725,12.21089a4.87248,4.87248,0,0,0,1.11452-3.49062,4.95746,4.95746,0,0,0-3.20758,1.65961,4.63634,4.63634,0,0,0-1.14371,3.36139A4.09905,4.09905,0,0,0,22.03725,12.21089Z" style="fill: #fff"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g>
|
||||||
|
<path d="M42.30227,27.13965h-4.7334l-1.13672,3.35645H34.42727l4.4834-12.418h2.083l4.4834,12.418H43.438ZM38.0591,25.59082h3.752l-1.84961-5.44727h-.05176Z" style="fill: #fff"/>
|
||||||
|
<path d="M55.15969,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H48.4302v1.50586h.03418a3.21162,3.21162,0,0,1,2.88281-1.60059C53.645,21.34766,55.15969,23.16406,55.15969,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C52.30227,29.01563,53.24953,27.81934,53.24953,25.96973Z" style="fill: #fff"/>
|
||||||
|
<path d="M65.12453,25.96973c0,2.81348-1.50586,4.62109-3.77832,4.62109a3.0693,3.0693,0,0,1-2.84863-1.584h-.043v4.48438h-1.8584V21.44238H58.395v1.50586h.03418A3.21162,3.21162,0,0,1,61.312,21.34766C63.60988,21.34766,65.12453,23.16406,65.12453,25.96973Zm-1.91016,0c0-1.833-.94727-3.03809-2.39258-3.03809-1.41992,0-2.375,1.23047-2.375,3.03809,0,1.82422.95508,3.0459,2.375,3.0459C62.26711,29.01563,63.21438,27.81934,63.21438,25.96973Z" style="fill: #fff"/>
|
||||||
|
<path d="M71.71047,27.03613c.1377,1.23145,1.334,2.04,2.96875,2.04,1.56641,0,2.69336-.80859,2.69336-1.91895,0-.96387-.67969-1.541-2.28906-1.93652l-1.60937-.3877c-2.28027-.55078-3.33887-1.61719-3.33887-3.34766,0-2.14258,1.86719-3.61426,4.51855-3.61426,2.624,0,4.42285,1.47168,4.4834,3.61426h-1.876c-.1123-1.23926-1.13672-1.9873-2.63379-1.9873s-2.52148.75684-2.52148,1.8584c0,.87793.6543,1.39453,2.25488,1.79l1.36816.33594c2.54785.60254,3.60645,1.626,3.60645,3.44238,0,2.32324-1.85059,3.77832-4.79395,3.77832-2.75391,0-4.61328-1.4209-4.7334-3.667Z" style="fill: #fff"/>
|
||||||
|
<path d="M83.34621,19.2998v2.14258h1.72168v1.47168H83.34621v4.99121c0,.77539.34473,1.13672,1.10156,1.13672a5.80752,5.80752,0,0,0,.61133-.043v1.46289a5.10351,5.10351,0,0,1-1.03223.08594c-1.833,0-2.54785-.68848-2.54785-2.44434V22.91406H80.16262V21.44238H81.479V19.2998Z" style="fill: #fff"/>
|
||||||
|
<path d="M86.065,25.96973c0-2.84863,1.67773-4.63867,4.29395-4.63867,2.625,0,4.29492,1.79,4.29492,4.63867,0,2.85645-1.66113,4.63867-4.29492,4.63867C87.72609,30.6084,86.065,28.82617,86.065,25.96973Zm6.69531,0c0-1.9541-.89551-3.10742-2.40137-3.10742s-2.40039,1.16211-2.40039,3.10742c0,1.96191.89453,3.10645,2.40039,3.10645S92.76027,27.93164,92.76027,25.96973Z" style="fill: #fff"/>
|
||||||
|
<path d="M96.18606,21.44238h1.77246v1.541h.043a2.1594,2.1594,0,0,1,2.17773-1.63574,2.86616,2.86616,0,0,1,.63672.06934v1.73828a2.59794,2.59794,0,0,0-.835-.1123,1.87264,1.87264,0,0,0-1.93652,2.083v5.37012h-1.8584Z" style="fill: #fff"/>
|
||||||
|
<path d="M109.3843,27.83691c-.25,1.64355-1.85059,2.77148-3.89844,2.77148-2.63379,0-4.26855-1.76465-4.26855-4.5957,0-2.83984,1.64355-4.68164,4.19043-4.68164,2.50488,0,4.08008,1.7207,4.08008,4.46582v.63672h-6.39453v.1123a2.358,2.358,0,0,0,2.43555,2.56445,2.04834,2.04834,0,0,0,2.09082-1.27344Zm-6.28223-2.70215h4.52637a2.1773,2.1773,0,0,0-2.2207-2.29785A2.292,2.292,0,0,0,103.10207,25.13477Z" style="fill: #fff"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<g id="_Group_4" data-name="<Group>">
|
||||||
|
<g>
|
||||||
|
<path d="M37.82619,8.731a2.63964,2.63964,0,0,1,2.80762,2.96484c0,1.90625-1.03027,3.002-2.80762,3.002H35.67092V8.731Zm-1.22852,5.123h1.125a1.87588,1.87588,0,0,0,1.96777-2.146,1.881,1.881,0,0,0-1.96777-2.13379h-1.125Z" style="fill: #fff"/>
|
||||||
|
<path d="M41.68068,12.44434a2.13323,2.13323,0,1,1,4.24707,0,2.13358,2.13358,0,1,1-4.24707,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C44.57522,13.99463,45.01369,13.42432,45.01369,12.44434Z" style="fill: #fff"/>
|
||||||
|
<path d="M51.57326,14.69775h-.92187l-.93066-3.31641h-.07031l-.92676,3.31641h-.91309l-1.24121-4.50293h.90137l.80664,3.436h.06641l.92578-3.436h.85254l.92578,3.436h.07031l.80273-3.436h.88867Z" style="fill: #fff"/>
|
||||||
|
<path d="M53.85354,10.19482H54.709v.71533h.06641a1.348,1.348,0,0,1,1.34375-.80225,1.46456,1.46456,0,0,1,1.55859,1.6748v2.915h-.88867V12.00586c0-.72363-.31445-1.0835-.97168-1.0835a1.03294,1.03294,0,0,0-1.0752,1.14111v2.63428h-.88867Z" style="fill: #fff"/>
|
||||||
|
<path d="M59.09377,8.437h.88867v6.26074h-.88867Z" style="fill: #fff"/>
|
||||||
|
<path d="M61.21779,12.44434a2.13346,2.13346,0,1,1,4.24756,0,2.1338,2.1338,0,1,1-4.24756,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C64.11232,13.99463,64.5508,13.42432,64.5508,12.44434Z" style="fill: #fff"/>
|
||||||
|
<path d="M66.4009,13.42432c0-.81055.60352-1.27783,1.6748-1.34424l1.21973-.07031v-.38867c0-.47559-.31445-.74414-.92187-.74414-.49609,0-.83984.18213-.93848.50049h-.86035c.09082-.77344.81836-1.26953,1.83984-1.26953,1.12891,0,1.76563.562,1.76563,1.51318v3.07666h-.85547v-.63281h-.07031a1.515,1.515,0,0,1-1.35254.707A1.36026,1.36026,0,0,1,66.4009,13.42432Zm2.89453-.38477v-.37646l-1.09961.07031c-.62012.0415-.90137.25244-.90137.64941,0,.40527.35156.64111.835.64111A1.0615,1.0615,0,0,0,69.29543,13.03955Z" style="fill: #fff"/>
|
||||||
|
<path d="M71.34816,12.44434c0-1.42285.73145-2.32422,1.86914-2.32422a1.484,1.484,0,0,1,1.38086.79h.06641V8.437h.88867v6.26074h-.85156v-.71143h-.07031a1.56284,1.56284,0,0,1-1.41406.78564C72.0718,14.772,71.34816,13.87061,71.34816,12.44434Zm.918,0c0,.95508.4502,1.52979,1.20313,1.52979.749,0,1.21191-.583,1.21191-1.52588,0-.93848-.46777-1.52979-1.21191-1.52979C72.72121,10.91846,72.26613,11.49707,72.26613,12.44434Z" style="fill: #fff"/>
|
||||||
|
<path d="M79.23,12.44434a2.13323,2.13323,0,1,1,4.24707,0,2.13358,2.13358,0,1,1-4.24707,0Zm3.333,0c0-.97607-.43848-1.54687-1.208-1.54687-.77246,0-1.207.5708-1.207,1.54688,0,.98389.43457,1.55029,1.207,1.55029C82.12453,13.99463,82.563,13.42432,82.563,12.44434Z" style="fill: #fff"/>
|
||||||
|
<path d="M84.66945,10.19482h.85547v.71533h.06641a1.348,1.348,0,0,1,1.34375-.80225,1.46456,1.46456,0,0,1,1.55859,1.6748v2.915H87.605V12.00586c0-.72363-.31445-1.0835-.97168-1.0835a1.03294,1.03294,0,0,0-1.0752,1.14111v2.63428h-.88867Z" style="fill: #fff"/>
|
||||||
|
<path d="M93.51516,9.07373v1.1416h.97559v.74854h-.97559V13.2793c0,.47168.19434.67822.63672.67822a2.96657,2.96657,0,0,0,.33887-.02051v.74023a2.9155,2.9155,0,0,1-.4834.04541c-.98828,0-1.38184-.34766-1.38184-1.21582v-2.543h-.71484v-.74854h.71484V9.07373Z" style="fill: #fff"/>
|
||||||
|
<path d="M95.70461,8.437h.88086v2.48145h.07031a1.3856,1.3856,0,0,1,1.373-.80664,1.48339,1.48339,0,0,1,1.55078,1.67871v2.90723H98.69v-2.688c0-.71924-.335-1.0835-.96289-1.0835a1.05194,1.05194,0,0,0-1.13379,1.1416v2.62988h-.88867Z" style="fill: #fff"/>
|
||||||
|
<path d="M104.76125,13.48193a1.828,1.828,0,0,1-1.95117,1.30273A2.04531,2.04531,0,0,1,100.73,12.46045a2.07685,2.07685,0,0,1,2.07617-2.35254c1.25293,0,2.00879.856,2.00879,2.27V12.688h-3.17969v.0498a1.1902,1.1902,0,0,0,1.19922,1.29,1.07934,1.07934,0,0,0,1.07129-.5459Zm-3.126-1.45117h2.27441a1.08647,1.08647,0,0,0-1.1084-1.1665A1.15162,1.15162,0,0,0,101.63527,12.03076Z" style="fill: #fff"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 118 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
@@ -4,7 +4,7 @@ const CTA = () => {
|
|||||||
return (
|
return (
|
||||||
<section className="py-20">
|
<section className="py-20">
|
||||||
<div className="max-w-7xl mx-auto px-6">
|
<div className="max-w-7xl mx-auto px-6">
|
||||||
<div className="glass rounded-[48px] p-8 md:p-20 text-center relative overflow-hidden">
|
<div className="glass rounded-[48px] p-8 md:p-20 text-center relative overflow-hidden border border-border-subtle">
|
||||||
<div className="absolute top-0 left-0 w-full h-full bg-brand/5 -z-10" />
|
<div className="absolute top-0 left-0 w-full h-full bg-brand/5 -z-10" />
|
||||||
<div className="absolute -top-24 -right-24 w-64 h-64 bg-brand/10 blur-[80px] rounded-full" />
|
<div className="absolute -top-24 -right-24 w-64 h-64 bg-brand/10 blur-[80px] rounded-full" />
|
||||||
|
|
||||||
@@ -12,18 +12,60 @@ const CTA = () => {
|
|||||||
initial={{ opacity: 0, scale: 0.95 }}
|
initial={{ opacity: 0, scale: 0.95 }}
|
||||||
whileInView={{ opacity: 1, scale: 1 }}
|
whileInView={{ opacity: 1, scale: 1 }}
|
||||||
viewport={{ once: true }}
|
viewport={{ once: true }}
|
||||||
|
transition={{ type: "spring", stiffness: 100, damping: 20 }}
|
||||||
>
|
>
|
||||||
<h2 className="text-4xl md:text-6xl font-display font-extrabold mb-6 text-text-primary">
|
<h2 className="text-4xl md:text-6xl font-display font-extrabold mb-6 text-text-primary tracking-tight">
|
||||||
Ready to Start Your <br />
|
Ready to Start Your <br />
|
||||||
<span className="text-brand">Walking Journey?</span>
|
<span className="text-brand">Walking Journey?</span>
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-text-primary/70 text-lg md:text-xl max-w-2xl mx-auto mb-10">
|
<p className="text-text-secondary text-lg md:text-xl max-w-2xl mx-auto mb-10">
|
||||||
Join thousands of dog owners who are making every walk count. It's free to get started!
|
Join thousands of dog owners who are making every walk count. Download the app today!
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<a href="/waitlist" className="bg-brand hover:bg-brand-light text-bg-primary px-12 py-6 rounded-2xl font-extrabold text-xl transition-all transform hover:scale-105 active:scale-95 mb-6 inline-flex items-center justify-center">
|
{/* Download Buttons Container */}
|
||||||
Join Waitlist
|
<div className="flex flex-col sm:flex-row items-center justify-center gap-4 max-w-md mx-auto">
|
||||||
</a>
|
|
||||||
|
{/* App Store Active Link */}
|
||||||
|
<motion.a
|
||||||
|
href="https://apps.apple.com/us/app/tail-trails-club/id6758676111"
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
whileHover={{ scale: 1.03, y: -2 }}
|
||||||
|
whileTap={{ scale: 0.98 }}
|
||||||
|
className="w-full sm:w-auto min-w-[200px] bg-brand text-zinc-950 px-6 py-4 rounded-2xl font-bold flex items-center justify-center gap-3 transition-colors shadow-lg shadow-brand/10"
|
||||||
|
>
|
||||||
|
{/* Apple SVG Icon */}
|
||||||
|
<svg className="w-6 h-6 fill-current" viewBox="0 0 24 24">
|
||||||
|
<path d="M18.71 19.5c-.83 1.24-1.71 2.45-3.05 2.47-1.34.03-1.77-.79-3.29-.79-1.53 0-2 .77-3.27.82-1.31.05-2.3-1.32-3.14-2.53C4.25 17 2.94 12.45 4.7 9.39c.87-1.52 2.43-2.48 4.12-2.51 1.28-.02 2.5.87 3.29.87.78 0 2.26-1.07 3.81-.91.65.03 2.47.26 3.64 1.98-.09.06-2.17 1.28-2.15 3.81.03 3.02 2.65 4.03 2.68 4.04-.03.07-.42 1.44-1.38 2.83M15.97 4.17c.66-.81 1.11-1.93.99-3.06-1 .04-2.21.67-2.93 1.49-.62.69-1.16 1.84-1.01 2.96 1.12.09 2.27-.58 2.95-1.39z"/>
|
||||||
|
</svg>
|
||||||
|
<div className="text-left leading-tight">
|
||||||
|
<p className="text-[11px] uppercase opacity-80 font-medium">Download on the</p>
|
||||||
|
<p className="text-base font-extrabold -mt-0.5">App Store</p>
|
||||||
|
</div>
|
||||||
|
</motion.a>
|
||||||
|
|
||||||
|
{/* Play Store Disabled / Coming Soon Button */}
|
||||||
|
<div
|
||||||
|
className="w-full sm:w-auto min-w-[200px] bg-zinc-900 border border-zinc-800 text-zinc-400 px-6 py-4 rounded-2xl font-bold flex items-center justify-center gap-3 relative group"
|
||||||
|
title="Android version coming soon!"
|
||||||
|
>
|
||||||
|
{/* Play Store SVG Icon */}
|
||||||
|
<svg className="w-6 h-6 fill-current opacity-50" viewBox="0 0 24 24">
|
||||||
|
<path d="M5,3.14V20.86c0,0.5,0.4,0.92,0.91,0.85l9.92-9.92L5.91,2.29C5.4,2.22,5,2.64,5,3.14Z"/>
|
||||||
|
<path d="M17.23,10.37,6.83,4.41a0.39,0.39,0,0,0-.41,0L15.8,13.8Z"/>
|
||||||
|
<path d="M15.8,13.8l-9.38,9.38a0.39,0.39,0,0,0,.41,0l10.4-5.96A2.16,2.16,0,0,0,17.23,13.63,2.18,2.18,0,0,0,17.23,10.37Z"/>
|
||||||
|
</svg>
|
||||||
|
<div className="text-left leading-tight">
|
||||||
|
<p className="text-[11px] uppercase opacity-60 font-medium">Get it on</p>
|
||||||
|
<p className="text-base font-extrabold -mt-0.5 whitespace-nowrap">Google Play</p>
|
||||||
|
</div>
|
||||||
|
{/* Absolute overlay badge indicating "Coming Soon" */}
|
||||||
|
<span className="absolute -top-2.5 right-3 bg-zinc-800 text-zinc-400 text-[10px] uppercase font-black px-2 py-0.5 rounded-full tracking-wider border border-zinc-700">
|
||||||
|
Soon
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</motion.div>
|
</motion.div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { motion } from 'motion/react';
|
import { motion } from 'motion/react';
|
||||||
import { MapPin, Share2, Bookmark, Tag, Users, TrendingUp } from 'lucide-react';
|
import { MapPin, Share2, Bookmark, Tag, Users, TrendingUp, Compass, Route } from 'lucide-react';
|
||||||
|
|
||||||
const Features = () => {
|
const Features = () => {
|
||||||
const features = [
|
const features = [
|
||||||
@@ -28,8 +28,8 @@ const Features = () => {
|
|||||||
iconColor: "text-brand"
|
iconColor: "text-brand"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: "Smart Labels",
|
title: "Smart Marching",
|
||||||
desc: "Tag walks with helpful info like 'good for older dogs', 'off-leash friendly', or 'water access'.",
|
desc: "You tell us about your dog. Our community tags every trail. Then we combine this information - so you can choose where to go with confidence.",
|
||||||
icon: Tag,
|
icon: Tag,
|
||||||
size: "md:col-span-8",
|
size: "md:col-span-8",
|
||||||
color: "bg-brand/20",
|
color: "bg-brand/20",
|
||||||
@@ -39,7 +39,7 @@ const Features = () => {
|
|||||||
title: "Community Driven",
|
title: "Community Driven",
|
||||||
desc: "Connect with local dog walkers, share tips, and discover hidden gems in your area.",
|
desc: "Connect with local dog walkers, share tips, and discover hidden gems in your area.",
|
||||||
icon: Users,
|
icon: Users,
|
||||||
size: "md:col-span-6",
|
size: "md:col-span-8",
|
||||||
color: "bg-brand/20",
|
color: "bg-brand/20",
|
||||||
iconColor: "text-brand"
|
iconColor: "text-brand"
|
||||||
},
|
},
|
||||||
@@ -47,7 +47,23 @@ const Features = () => {
|
|||||||
title: "Track Progress",
|
title: "Track Progress",
|
||||||
desc: "Monitor your walking stats over time and celebrate milestones with your four-legged companion.",
|
desc: "Monitor your walking stats over time and celebrate milestones with your four-legged companion.",
|
||||||
icon: TrendingUp,
|
icon: TrendingUp,
|
||||||
size: "md:col-span-6",
|
size: "md:col-span-4",
|
||||||
|
color: "bg-brand/20",
|
||||||
|
iconColor: "text-brand"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Discover new places",
|
||||||
|
desc: "Find trails you didn't know existed - that bring out the best in your dog.",
|
||||||
|
icon: Compass,
|
||||||
|
size: "md:col-span-5",
|
||||||
|
color: "bg-brand/20",
|
||||||
|
iconColor: "text-brand"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: "Break the routine",
|
||||||
|
desc: "No more defaulting to the same path. Open the app. Go somewhere new.",
|
||||||
|
icon: Route,
|
||||||
|
size: "md:col-span-7",
|
||||||
color: "bg-brand/20",
|
color: "bg-brand/20",
|
||||||
iconColor: "text-brand"
|
iconColor: "text-brand"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ const Hero = () => {
|
|||||||
className="text-left"
|
className="text-left"
|
||||||
>
|
>
|
||||||
<div className="inline-flex items-center gap-2 bg-bg-secondary px-4 py-2 rounded-full mb-8 border border-border-subtle">
|
<div className="inline-flex items-center gap-2 bg-bg-secondary px-4 py-2 rounded-full mb-8 border border-border-subtle">
|
||||||
<span className="text-xs font-bold uppercase tracking-widest text-accent-secondary">Simple and effective dog walking</span>
|
<span className="text-xs font-bold uppercase tracking-widest text-accent-secondary">Life Unleashed</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1 className="text-6xl md:text-7xl font-display font-extrabold tracking-tight mb-8 leading-[1.05] text-text-primary">
|
<h1 className="text-6xl md:text-7xl font-display font-extrabold tracking-tight mb-8 leading-[1.05] text-text-primary">
|
||||||
@@ -25,12 +25,12 @@ const Hero = () => {
|
|||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<p className="text-text-primary/70 text-lg md:text-xl max-w-xl mb-12 font-medium leading-relaxed">
|
<p className="text-text-primary/70 text-lg md:text-xl max-w-xl mb-12 font-medium leading-relaxed">
|
||||||
Record your dog walks, discover new routes, and connect with fellow dog owners. Track every tail wag, share your favorite trails, and build a community of happy pups.
|
Discover new trails that match your dog's needs, and turn everyday walks into real adventures.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div className="flex flex-col sm:flex-row items-center gap-6 mb-12">
|
<div className="flex flex-col sm:flex-row items-center gap-6 mb-12">
|
||||||
<a href="/waitlist" className="w-full sm:w-auto bg-brand hover:bg-brand-light text-bg-primary px-10 py-5 rounded-2xl font-extrabold text-lg transition-all transform hover:scale-105 active:scale-95 flex items-center justify-center gap-2">
|
<a href="/waitlist" className="w-full sm:w-auto bg-brand hover:bg-brand-light text-bg-primary px-10 py-5 rounded-2xl font-extrabold text-lg transition-all transform hover:scale-105 active:scale-95 flex items-center justify-center gap-2">
|
||||||
Join Waitlist
|
Join the Waitlist
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,170 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { motion } from 'motion/react';
|
||||||
|
|
||||||
|
const ProblemSolution = () => {
|
||||||
|
// Animation variants for the parent container (triggers cascading/staggered effects)
|
||||||
|
const containerVariants = {
|
||||||
|
hidden: { opacity: 0 },
|
||||||
|
visible: {
|
||||||
|
opacity: 1,
|
||||||
|
transition: {
|
||||||
|
staggerChildren: 0.2, // Time gap between card animations
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
// Animation variants for individual cards
|
||||||
|
const cardVariants = {
|
||||||
|
hidden: { opacity: 0, y: 40 },
|
||||||
|
visible: {
|
||||||
|
opacity: 1,
|
||||||
|
y: 0,
|
||||||
|
transition: { type: "spring", stiffness: 100, damping: 15 },
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<section id="problem-solution" className="py-20 bg-bg-secondary overflow-hidden">
|
||||||
|
<div className="max-w-7xl mx-auto px-6">
|
||||||
|
|
||||||
|
{/* Animated Header Section */}
|
||||||
|
<motion.div
|
||||||
|
initial={{ opacity: 0, y: -20 }}
|
||||||
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
|
viewport={{ once: true, margin: "-100px" }}
|
||||||
|
transition={{ duration: 0.6 }}
|
||||||
|
className="text-center mb-16"
|
||||||
|
>
|
||||||
|
<h2 className="text-4xl md:text-5xl font-display font-bold mb-4 text-text-primary">
|
||||||
|
Finding the Right Walk for Your Dog
|
||||||
|
</h2>
|
||||||
|
<p className="text-text-secondary font-medium max-w-3xl mx-auto">
|
||||||
|
Understanding the challenge and how TailTrails solves it
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
{/* Grid Container coordinating the card entries */}
|
||||||
|
<motion.div
|
||||||
|
variants={containerVariants}
|
||||||
|
initial="hidden"
|
||||||
|
whileInView="visible"
|
||||||
|
viewport={{ once: true, margin: "-100px" }}
|
||||||
|
className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-stretch" // "items-stretch" forces equal height
|
||||||
|
>
|
||||||
|
|
||||||
|
{/* Problem Card */}
|
||||||
|
<motion.div
|
||||||
|
variants={cardVariants}
|
||||||
|
whileHover={{ y: -6 }} // Subtle interactive lift on hover
|
||||||
|
className="bg-bg-primary rounded-3xl border border-border-subtle p-8 shadow-lg flex flex-col justify-between"
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<div className="mb-6 overflow-hidden rounded-xl">
|
||||||
|
<motion.img
|
||||||
|
whileHover={{ scale: 1.03 }} // Subtle zoom effect inside the card container
|
||||||
|
transition={{ duration: 0.4 }}
|
||||||
|
src="/landing/sad-dog.avif"
|
||||||
|
alt="Problem with dog-friendly places"
|
||||||
|
className="w-full h-80 object-cover"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-center mb-6">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-red-500/10 flex items-center justify-center mr-4 shrink-0">
|
||||||
|
<span className="text-red-500 font-bold text-lg">!</span>
|
||||||
|
</div>
|
||||||
|
<h3 className="text-2xl font-bold text-text-primary">The Problem</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-text-primary font-medium mb-4 text-lg">
|
||||||
|
Most "dog-friendly" places aren't actually right for your dog.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul className="mb-6 space-y-3">
|
||||||
|
<li className="flex items-start">
|
||||||
|
<span className="text-red-500 mr-3 mt-0.5 font-bold">•</span>
|
||||||
|
<span className="text-text-secondary leading-relaxed">Too busy. Too unpredictable. Too many dogs. Not enough space.</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<span className="text-red-500 mr-3 mt-0.5 font-bold">•</span>
|
||||||
|
<span className="text-text-secondary leading-relaxed">Or the opposite; too quiet, too short, too much of the same thing.</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p className="text-text-primary font-medium mb-3">
|
||||||
|
So you either:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul className="mb-6 space-y-3">
|
||||||
|
<li className="flex items-start">
|
||||||
|
<span className="text-red-500 mr-3 mt-0.5 font-bold">•</span>
|
||||||
|
<span className="text-text-secondary leading-relaxed">Play it safe and stick to the same walk</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<span className="text-red-500 mr-3 mt-0.5 font-bold">•</span>
|
||||||
|
<span className="text-text-secondary leading-relaxed">Or take a risk and hope it works out</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-red-500 font-semibold pt-4 border-t border-border-subtle/50">
|
||||||
|
Neither feels great.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
{/* Solution Card */}
|
||||||
|
<motion.div
|
||||||
|
variants={cardVariants}
|
||||||
|
whileHover={{ y: -6 }}
|
||||||
|
className="bg-bg-primary rounded-3xl border border-border-subtle p-8 shadow-lg flex flex-col justify-between"
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<div className="mb-6 overflow-hidden rounded-xl">
|
||||||
|
<motion.img
|
||||||
|
whileHover={{ scale: 1.03 }}
|
||||||
|
transition={{ duration: 0.4 }}
|
||||||
|
src="/landing/happy-dog.avif"
|
||||||
|
alt="TailTrails solution"
|
||||||
|
className="w-full h-80 object-cover" // Synced height with Problem image for visual symmetry
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="flex items-center mb-6">
|
||||||
|
<div className="w-12 h-12 rounded-xl bg-green-500/10 flex items-center justify-center mr-4 shrink-0">
|
||||||
|
<span className="text-green-500 font-bold text-lg">✓</span>
|
||||||
|
</div>
|
||||||
|
<h3 className="text-2xl font-bold text-text-primary">The Solution</h3>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-text-primary font-medium mb-4 text-lg">
|
||||||
|
TailTrails filters the world around your dog.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul className="mb-6 space-y-3">
|
||||||
|
<li className="flex items-start">
|
||||||
|
<span className="text-green-500 mr-3 mt-0.5 font-bold">•</span>
|
||||||
|
<span className="text-text-secondary leading-relaxed">Every trail is tagged - environment, terrain, traffic, exposure.</span>
|
||||||
|
</li>
|
||||||
|
<li className="flex items-start">
|
||||||
|
<span className="text-green-500 mr-3 mt-0.5 font-bold">•</span>
|
||||||
|
<span className="text-text-secondary leading-relaxed">Every dog is different - energy, behaviour, needs.</span>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p className="text-text-primary font-medium mb-4">
|
||||||
|
We bring the two together.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className="text-brand font-semibold pt-4 border-t border-border-subtle/50">
|
||||||
|
So you can choose walks that bring out the best in your dog.
|
||||||
|
</p>
|
||||||
|
</motion.div>
|
||||||
|
|
||||||
|
</motion.div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ProblemSolution;
|
||||||
+3
-1
@@ -2,6 +2,7 @@ import Header from "@/components/landing/Header";
|
|||||||
import Hero from "@/components/landing/Hero";
|
import Hero from "@/components/landing/Hero";
|
||||||
import Features from "@/components/landing/Features";
|
import Features from "@/components/landing/Features";
|
||||||
import HowItWorks from "@/components/landing/HowItWorks";
|
import HowItWorks from "@/components/landing/HowItWorks";
|
||||||
|
import ProblemSolution from "@/components/landing/ProblemSolution";
|
||||||
import CTA from "@/components/landing/CTA";
|
import CTA from "@/components/landing/CTA";
|
||||||
import Footer from "@/components/landing/Footer";
|
import Footer from "@/components/landing/Footer";
|
||||||
|
|
||||||
@@ -11,7 +12,8 @@ const Index = () => {
|
|||||||
<Header />
|
<Header />
|
||||||
<Hero />
|
<Hero />
|
||||||
<Features />
|
<Features />
|
||||||
<HowItWorks />
|
<ProblemSolution />
|
||||||
|
{/* <HowItWorks /> */}
|
||||||
<CTA />
|
<CTA />
|
||||||
<Footer />
|
<Footer />
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
Reference in New Issue
Block a user