diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..595b05f --- /dev/null +++ b/LICENSE @@ -0,0 +1,195 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + diff --git a/src/app/(pages)/donate/cancel/page.tsx b/src/app/(pages)/donate/cancel/page.tsx index 35726ce..8b071d8 100644 --- a/src/app/(pages)/donate/cancel/page.tsx +++ b/src/app/(pages)/donate/cancel/page.tsx @@ -7,8 +7,8 @@ const DonateCancelPage = () => {
-
-
+
+
⚠️
@@ -22,7 +22,7 @@ const DonateCancelPage = () => {
Try Again diff --git a/src/app/(pages)/loading.tsx b/src/app/(pages)/loading.tsx index 712e691..1f26f80 100644 --- a/src/app/(pages)/loading.tsx +++ b/src/app/(pages)/loading.tsx @@ -6,7 +6,7 @@ const Loading = () => { return (
{/* Animated background gradient */} -
+
{/* Main loading content */}
@@ -44,7 +44,7 @@ const Loading = () => { {/* Progress bar */}
-
+
{/* Floating particles animation */} diff --git a/src/app/(pages)/privacy-policy/page.tsx b/src/app/(pages)/privacy-policy/page.tsx index 64db4f4..e3273d5 100644 --- a/src/app/(pages)/privacy-policy/page.tsx +++ b/src/app/(pages)/privacy-policy/page.tsx @@ -42,11 +42,11 @@ const PrivacyPolicyPage = () => {
{/* Content Section */} -
+
{/* Introduction */} -
+
{
{/* Privacy Sections */} -
+
{PrivacyPolicy.map((policy) => ( {
{/* Key Privacy Principles */} -
+
{ description="Clear communication about what data we collect and why" gradientFrom="from-green-500/20" gradientTo="to-emerald-500/20" - cardClassName="bg-gradient-to-br from-green-900/30 to-emerald-900/30" + cardClassName="bg-linear-to-br from-green-900/30 to-emerald-900/30" borderColor="border-green-500/30" /> { description="Your data belongs to you - we never sell or misuse it" gradientFrom="from-purple-500/20" gradientTo="to-pink-500/20" - cardClassName="bg-gradient-to-br from-purple-900/30 to-pink-900/30" + cardClassName="bg-linear-to-br from-purple-900/30 to-pink-900/30" borderColor="border-purple-500/30" />
{/* Contact Section */} -
+
{
Contact Us Return Home diff --git a/src/app/(pages)/return-policy/page.tsx b/src/app/(pages)/return-policy/page.tsx index ce2309f..a3f4de2 100644 --- a/src/app/(pages)/return-policy/page.tsx +++ b/src/app/(pages)/return-policy/page.tsx @@ -30,7 +30,7 @@ const ReturnPolicyPage = () => {
{/* Content Section */} -
+
{/* Introduction */} @@ -69,7 +69,7 @@ const ReturnPolicyPage = () => { } gradientFrom="from-green-500/20" gradientTo="to-emerald-500/20" - cardClassName="bg-gradient-to-br from-green-900/30 to-emerald-900/30" + cardClassName="bg-linear-to-br from-green-900/30 to-emerald-900/30" borderColor="border-green-500/30" /> { } gradientFrom="from-red-500/20" gradientTo="to-orange-500/20" - cardClassName="bg-gradient-to-br from-red-900/30 to-orange-900/30" + cardClassName="bg-linear-to-br from-red-900/30 to-orange-900/30" borderColor="border-red-500/30" />
@@ -103,14 +103,14 @@ const ReturnPolicyPage = () => {
Start Return Return Home diff --git a/src/app/(pages)/shop/loading.tsx b/src/app/(pages)/shop/loading.tsx index baffa54..a1edace 100644 --- a/src/app/(pages)/shop/loading.tsx +++ b/src/app/(pages)/shop/loading.tsx @@ -6,7 +6,7 @@ const Loading = () => { return (
{/* Animated background gradient */} -
+
{/* Main loading content */}
@@ -44,7 +44,7 @@ const Loading = () => { {/* Progress bar */}
-
+
{/* Floating particles animation */} diff --git a/src/app/(pages)/shop/product/[...slug]/ProductPageClient.tsx b/src/app/(pages)/shop/product/[...slug]/ProductPageClient.tsx index 30bd0e5..127f78e 100644 --- a/src/app/(pages)/shop/product/[...slug]/ProductPageClient.tsx +++ b/src/app/(pages)/shop/product/[...slug]/ProductPageClient.tsx @@ -395,23 +395,23 @@ const ProductPageClient = ({ // Show loading state while fetching product if (isLoadingProduct) { return ( -
+
{/* Animated gradient background */} -
+
{/* Content card */}
{/* Spinner with gradient */}
-
+
{/* Loading text with gradient */}
-

+

Loading Product

Just a moment...

@@ -436,7 +436,7 @@ const ProductPageClient = ({

← Back to Shop @@ -449,14 +449,14 @@ const ProductPageClient = ({ return (
-
-
+
+
-
- +
+ ←
@@ -551,9 +551,9 @@ const ProductPageClient = ({
${currentVariant.retail_price}
-
-
- +
+
+ 🚚 Free Shipping
@@ -628,7 +628,7 @@ const ProductPageClient = ({ > - - + {quantity} diff --git a/src/app/(pages)/terms-of-service/page.tsx b/src/app/(pages)/terms-of-service/page.tsx index 96a02f5..f6c52ad 100644 --- a/src/app/(pages)/terms-of-service/page.tsx +++ b/src/app/(pages)/terms-of-service/page.tsx @@ -41,7 +41,7 @@ const TermsOfServicePage = () => {
{/* Content Section */} -
+
{/* Introduction */} @@ -78,13 +78,13 @@ const TermsOfServicePage = () => {
Contact Us Return Home diff --git a/src/app/checkout/cancel/page.tsx b/src/app/checkout/cancel/page.tsx index d407cb6..5984d92 100644 --- a/src/app/checkout/cancel/page.tsx +++ b/src/app/checkout/cancel/page.tsx @@ -27,7 +27,7 @@ const CancelPage = () => {
Continue Shopping diff --git a/src/app/globals.css b/src/app/globals.css index f478191..25c77d7 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -369,6 +369,92 @@ body { @apply w-full text-center md:w-fit font-lexend text-white text-lg font-bold px-5 py-2 transition-all duration-300 ease-in-out hover:bg-primary-400 active:bg-primary-600; } +/* Hero entry animations (CSS-only) */ +@keyframes heroFadeUp { + from { + opacity: 0; + transform: translateY(24px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.hero-fade-up { + opacity: 0; + animation: heroFadeUp 0.9s ease forwards; +} + +.hero-fade-delay-1 { + animation-delay: 0.1s; +} + +.hero-fade-delay-2 { + animation-delay: 0.2s; +} + +.hero-fade-delay-3 { + animation-delay: 0.3s; +} + +.hero-fade-delay-4 { + animation-delay: 0.4s; +} + +.hero-fade-delay-5 { + animation-delay: 0.5s; +} + +.hero-fade-delay-6 { + animation-delay: 0.6s; +} + +/* Soft icon chip styling to match hero aesthetic */ +.icon-chip { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + border-radius: 1rem; + background: radial-gradient( + circle at 30% 30%, + rgba(0, 212, 255, 0.14), + rgba(2, 6, 23, 0.9) + ); + border: 1px solid rgba(0, 212, 255, 0.35); + box-shadow: + 0 12px 40px rgba(0, 212, 255, 0.12), + 0 0 0 1px rgba(255, 255, 255, 0.05); + color: #e2f3ff; + overflow: hidden; +} + +.icon-chip::after { + content: ""; + position: absolute; + inset: -30%; + background: radial-gradient( + circle at 50% 50%, + rgba(0, 212, 255, 0.12), + transparent 60% + ); + opacity: 0.8; + z-index: -1; +} + +.icon-chip-emerald { + background: radial-gradient( + circle at 30% 30%, + rgba(16, 185, 129, 0.14), + rgba(2, 6, 23, 0.9) + ); + border-color: rgba(16, 185, 129, 0.5); + box-shadow: + 0 14px 42px rgba(16, 185, 129, 0.16), + 0 0 0 1px rgba(255, 255, 255, 0.06); +} + /* Special styling for Shop link - blue underline accent with animation */ .nav-link-shop { position: relative; @@ -560,19 +646,14 @@ body { .animated-gradient-bg { background: linear-gradient( 135deg, - #667eea 0%, - #764ba2 15%, - #f093fb 30%, - #f5576c 45%, - #4facfe 60%, - #00f2fe 75%, - #667eea 90%, - #764ba2 100% + var(--color-bg-primary) 0%, + var(--color-bg-dark) 40%, + #020617 100% ); background-size: 400% 400%; animation: flowingGradient 8s ease-in-out infinite; position: relative; - overflow: hidden; + overflow: visible; } /* Fixed positioning for scroll navbar */ diff --git a/src/components/AboutPageClient.tsx b/src/components/AboutPageClient.tsx index 6328ea0..8cfa991 100644 --- a/src/components/AboutPageClient.tsx +++ b/src/components/AboutPageClient.tsx @@ -28,17 +28,17 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
{/* Mission & Vision Cards */} -
+
-
-
+
+
-
- 🎯 +
+ 🎯
-

+

{aboutData.text.missionTitle}

@@ -49,13 +49,13 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
-
-
+
+
-
- πŸ’‘ +
+ πŸ’‘
-

+

{aboutData.text.descriptionTitle}

@@ -68,15 +68,15 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
{/* Founder Section */} -
+
-
-
+
+
-
+
{
-
- πŸ‘¨β€πŸ’» +
+ πŸ‘¨β€πŸ’»
-

+

{aboutData.text.founderTitle}

@@ -113,10 +113,10 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
-

+

{aboutData.text.impactTitle}

-
+
{aboutData.impactAreas?.map((area, idx) => { @@ -142,10 +142,10 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
-

+

Our Values

-
+
{aboutData.values?.map((v, idx) => { @@ -168,10 +168,10 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
-

+

Our Initiatives

-
+
{aboutData.initiatives?.map((initiative, idx) => { @@ -196,18 +196,18 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
-
-
+
+
-

+

Our Impact

-
+
-
- πŸ“… +
+ πŸ“…

Founded @@ -217,8 +217,8 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {

-
- πŸ’ +
+ πŸ’

Profits Donated @@ -228,8 +228,8 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {

-
- 🌍 +
+ 🌍

Communities Served @@ -239,8 +239,8 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {

-
- 🎯 +
+ 🎯

Mission Focus @@ -259,10 +259,10 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
-

+

Gallery

-
+
@@ -274,13 +274,13 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
-
-
+
+
-
- 🀝 +
+ 🀝
-

+

{aboutData.text.howToSupportTitle}

@@ -290,13 +290,13 @@ const AboutPageClient = ({ aboutData }: { aboutData: typeof ABOUT_DATA }) => {
Shop Now Donate diff --git a/src/components/CartPageClient.tsx b/src/components/CartPageClient.tsx index 43f13d3..cd9d625 100644 --- a/src/components/CartPageClient.tsx +++ b/src/components/CartPageClient.tsx @@ -135,7 +135,7 @@ const CartPageClient = ({
Continue Shopping @@ -487,7 +487,7 @@ const CartPageClient = ({ {/* Checkout Button */} diff --git a/src/components/DonatePageClient.tsx b/src/components/DonatePageClient.tsx index 4a06c75..fc6c963 100644 --- a/src/components/DonatePageClient.tsx +++ b/src/components/DonatePageClient.tsx @@ -174,7 +174,7 @@ const DonatePageClient = ({ />
{/* Main Content */} -
+
{/* Donation Description */}
@@ -191,10 +191,10 @@ const DonatePageClient = ({
-

+

{donateData.text.impactTitle}

-
+
{donateData.impactBreakdown?.map((impact, idx) => ( @@ -214,10 +214,10 @@ const DonatePageClient = ({
-

+

{donateData.text.donationTitle}

-
+
{/* Payment Method Selection */} @@ -238,9 +238,9 @@ const DonatePageClient = ({ {/* Amount Selection */}
-
+
{/* Gradient overlay - matches card height exactly */} -
+

Choose Your Amount

@@ -254,7 +254,7 @@ const DonatePageClient = ({ onClick={() => handleSetAmount(parseInt(amount))} className={`px-4 py-3 rounded-xl font-bold transition-all duration-200 ${ selectedAmount === amount - ? "bg-gradient-to-r from-emerald-500 to-cyan-500 text-white scale-105" + ? "bg-linear-to-r from-emerald-500 to-cyan-500 text-white scale-105" : "bg-slate-700/50 text-slate-200 hover:bg-slate-600/50 hover:scale-105" }`} > @@ -346,7 +346,7 @@ const DonatePageClient = ({
{/* Main Content */} -
+
{/* Partnership Overview */}
-
-
+
+
-
- 🀝 +
+ 🀝
-

+

Partnership Overview

@@ -54,10 +54,10 @@ const PartnersPageClient = ({
-

+

{partnersData.text.typesTitle}

-
+
{partnersData.partnershipTypes?.map((type, idx) => { @@ -87,10 +87,10 @@ const PartnersPageClient = ({
-

+

{partnersData.text.benefitsTitle}

-
+
{partnersData.benefits?.map((benefit, idx) => { @@ -115,13 +115,13 @@ const PartnersPageClient = ({
-
-
+
+
-
- πŸ“‹ +
+ πŸ“‹
-

+

{partnersData.requirements.title}

@@ -131,8 +131,8 @@ const PartnersPageClient = ({
{partnersData.requirements.criteria?.map((criterion, idx) => (
-
- βœ“ +
+ βœ“

{criterion} @@ -149,14 +149,14 @@ const PartnersPageClient = ({

-

+

Partnership Gallery{" "} *Placeholders for future partnerships

-
+
@@ -168,14 +168,14 @@ const PartnersPageClient = ({
-
-
+
+
-
- πŸ“ +
+ πŸ“
-

+

{partnersData.text.formTitle}

@@ -193,13 +193,13 @@ const PartnersPageClient = ({
-
-
+
+
-
- πŸ“ž +
+ πŸ“ž
-

+

Get In Touch

diff --git a/src/components/ProductCard.tsx b/src/components/ProductCard.tsx index e83f89e..c593cce 100644 --- a/src/components/ProductCard.tsx +++ b/src/components/ProductCard.tsx @@ -6,9 +6,9 @@ import Image from "next/image"; const ProductCard = ({ product }: { product: PrintfulProduct }) => { return ( -
- {/* Animated gradient background */} -
+
+ {/* Subtle accent background */} +
{/* Product Image Container */}
@@ -20,27 +20,27 @@ const ProductCard = ({ product }: { product: PrintfulProduct }) => { sizes="(max-width: 768px) 50vw, (max-width: 1200px) 33vw, 25vw" /> {/* Gradient overlay on hover */} -
+
{/* Product Info */} -
-

+
+

{product.sync_product.name}

{/* Price - if available */} {product.sync_variants?.[0]?.retail_price && (
- + ${product.sync_variants[0].retail_price}
)} {/* View Details indicator - Always visible on mobile, hover on desktop */} -
- View Details +
+ View details { return (
{/* Image skeleton */} -
-
+
+
{/* Content skeleton */}
{/* Title skeleton */} -
-
+
+
{/* Price skeleton */} -
-
+
+
{/* Button skeleton */} -
-
+
+
diff --git a/src/components/ProfilePageClient.tsx b/src/components/ProfilePageClient.tsx index 06db731..f2616ad 100644 --- a/src/components/ProfilePageClient.tsx +++ b/src/components/ProfilePageClient.tsx @@ -100,18 +100,18 @@ const ProfilePageClient = ({ titleClassName="font-lexend text-6xl md:text-8xl font-extrabold text-center" containerClassName="flex items-center justify-center py-20 md:py-32 px-8 md:px-12 h-full" /> -
+
{/* Profile Overview */}
-
-
+
+
-
- πŸ‘€ +
+ πŸ‘€
-

+

Your Profile

@@ -128,17 +128,17 @@ const ProfilePageClient = ({
-

+

Your Subscriptions

-
+
{subscriptions.length === 0 ? (
-
-
-
+
+
+
πŸ“‹

@@ -149,7 +149,7 @@ const ProfilePageClient = ({

Start Supporting Our Mission @@ -159,14 +159,16 @@ const ProfilePageClient = ({
{subscriptions.map((subscription) => (
-
-
+
+
{/* Subscription Details */}
-
- πŸ”„ +
+ + πŸ”„ +

@@ -222,7 +224,7 @@ const ProfilePageClient = ({ : subscription.id ) } - className="px-6 py-3 bg-gradient-to-r from-red-500 to-red-600 text-white font-semibold rounded-xl hover:from-red-600 hover:to-red-700 transition-all duration-300 hover:scale-105 shadow-lg hover:shadow-xl" + className="px-6 py-3 bg-linear-to-r from-red-500 to-red-600 text-white font-semibold rounded-xl hover:from-red-600 hover:to-red-700 transition-all duration-300 hover:scale-105 shadow-lg hover:shadow-xl" > Cancel Subscription @@ -241,8 +243,8 @@ const ProfilePageClient = ({ {showCancelForm === subscription.id && (
-
-
+
+
⚠️ Cancel Subscription @@ -283,7 +285,7 @@ const ProfilePageClient = ({ disabled={ cancellingSubscription === subscription.id } - className="px-6 py-3 bg-gradient-to-r from-red-500 to-red-600 text-white font-semibold rounded-xl hover:from-red-600 hover:to-red-700 transition-all duration-300 hover:scale-105 shadow-lg hover:shadow-xl disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100" + className="px-6 py-3 bg-linear-to-r from-red-500 to-red-600 text-white font-semibold rounded-xl hover:from-red-600 hover:to-red-700 transition-all duration-300 hover:scale-105 shadow-lg hover:shadow-xl disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:scale-100" > {cancellingSubscription === subscription.id ? ( @@ -322,13 +324,13 @@ const ProfilePageClient = ({
-
-
+
+
-
- βš™οΈ +
+ βš™οΈ
-

+

Account Settings

@@ -336,10 +338,10 @@ const ProfilePageClient = ({ Manage your account preferences and personal information.

- -
diff --git a/src/components/SharePageClient.tsx b/src/components/SharePageClient.tsx index dbc1e1e..7a5c6ae 100644 --- a/src/components/SharePageClient.tsx +++ b/src/components/SharePageClient.tsx @@ -64,25 +64,25 @@ const SharePageClient = ({ shareData }: { shareData: typeof SHARE_DATA }) => {
{/* Main Content */} -
+
{/* Mission Description */}
-
-
+
+
-
- +
+
-

+

{shareData.text.subTitle}

{shareData.text.description}

-
+

✨ {shareData.text.promotion}

@@ -95,11 +95,11 @@ const SharePageClient = ({ shareData }: { shareData: typeof SHARE_DATA }) => { {/* Why Share Section */}
-
-

+
+

{shareData.text.whyShareTitle}

-
+
{shareData.sharingReasons.map((reason, idx) => ( @@ -119,14 +119,14 @@ const SharePageClient = ({ shareData }: { shareData: typeof SHARE_DATA }) => {
-
-
+
+
-
- +
+
-

+

{shareData.text.hashtagsTitle}

@@ -140,13 +140,13 @@ const SharePageClient = ({ shareData }: { shareData: typeof SHARE_DATA }) => { @@ -243,7 +253,7 @@ const ShopNav = () => { @@ -257,7 +267,7 @@ const ShopNav = () => {
diff --git a/src/components/ShopSearch.tsx b/src/components/ShopSearch.tsx index 391f09a..fc614d0 100644 --- a/src/components/ShopSearch.tsx +++ b/src/components/ShopSearch.tsx @@ -42,7 +42,7 @@ const ShopSearch = ({ style={{ zIndex: 9999 }} > {/* Beautiful Gradient Background */} -
+
{/* Backdrop to prevent clicks through */}
@@ -89,7 +89,7 @@ const ShopSearch = ({ {/* Search Button */} diff --git a/src/components/SubscriptionSuccessClient.tsx b/src/components/SubscriptionSuccessClient.tsx index a627ece..7d6bc7d 100644 --- a/src/components/SubscriptionSuccessClient.tsx +++ b/src/components/SubscriptionSuccessClient.tsx @@ -51,8 +51,8 @@ const SubscriptionSuccessClient = ({
-
-
+
+
❌
@@ -65,7 +65,7 @@ const SubscriptionSuccessClient = ({

Back to Donate @@ -81,13 +81,13 @@ const SubscriptionSuccessClient = ({
{/* Hero Section */}
-
+
-
+
-

+

Welcome to Our Community!

@@ -99,24 +99,24 @@ const SubscriptionSuccessClient = ({

{/* Main Content */} -
+
{/* Subscription Details Card */}
-
-
+
+
-

+

Subscription Active

-
+
{/* Monthly Amount */}
-
+
πŸ’°

@@ -132,7 +132,7 @@ const SubscriptionSuccessClient = ({ {/* Billing Interval */}
-
+
πŸ”„

@@ -211,17 +211,17 @@ const SubscriptionSuccessClient = ({
-

+

Monthly Supporter Benefits

-
+
-
-
+
+
-
+

@@ -236,10 +236,10 @@ const SubscriptionSuccessClient = ({

-
-
+
+
-
+

@@ -254,10 +254,10 @@ const SubscriptionSuccessClient = ({

-
-
+
+
-
+

@@ -278,13 +278,13 @@ const SubscriptionSuccessClient = ({
-
-
+
+
-
+
-

+

Manage Your Subscription

@@ -296,7 +296,7 @@ const SubscriptionSuccessClient = ({
Manage Subscription diff --git a/src/components/SuccessPageClient.tsx b/src/components/SuccessPageClient.tsx index c68287c..9bad185 100644 --- a/src/components/SuccessPageClient.tsx +++ b/src/components/SuccessPageClient.tsx @@ -226,7 +226,7 @@ const SuccessPageClient = ({

Continue Shopping diff --git a/src/components/TitleSection.tsx b/src/components/TitleSection.tsx index 2f7c988..de44668 100644 --- a/src/components/TitleSection.tsx +++ b/src/components/TitleSection.tsx @@ -51,8 +51,8 @@ const TitleSection = ({

{title}

diff --git a/src/components/cards/DonationOptionCard.tsx b/src/components/cards/DonationOptionCard.tsx index 1ce0d1c..03d1066 100644 --- a/src/components/cards/DonationOptionCard.tsx +++ b/src/components/cards/DonationOptionCard.tsx @@ -24,7 +24,7 @@ const DonationOptionCard: React.FC = ({ return (
= ({
@@ -44,8 +44,8 @@ const DonationOptionCard: React.FC = ({
{icon || ( @@ -63,7 +63,7 @@ const DonationOptionCard: React.FC = ({ > {title}

-

+

{description}

{subText && ( diff --git a/src/components/cards/FactCard.tsx b/src/components/cards/FactCard.tsx index ecd1202..57c0e52 100644 --- a/src/components/cards/FactCard.tsx +++ b/src/components/cards/FactCard.tsx @@ -18,21 +18,21 @@ const FactCard: React.FC = ({ return (
{/* Gradient overlay - matches card height exactly */}
-
+
{icon && ( -
- {icon} +
+ {icon}
)}
-
+
{fact}
diff --git a/src/components/cards/FeatureCard.tsx b/src/components/cards/FeatureCard.tsx index 8ce32ef..fd81ff9 100644 --- a/src/components/cards/FeatureCard.tsx +++ b/src/components/cards/FeatureCard.tsx @@ -20,7 +20,7 @@ const FeatureCard: React.FC = ({ gradientFrom = "from-primary-500/10", gradientTo = "to-secondary-500/10", className = "", - cardClassName = "bg-gradient-to-br from-slate-800/90 to-slate-900/90", + cardClassName = "bg-linear-to-br from-slate-800/90 to-slate-900/90", borderColor = "border-slate-700/50", centered = true, iconSize = "md", @@ -38,21 +38,21 @@ const FeatureCard: React.FC = ({ > {/* Gradient overlay using ::before - matches card height exactly */}
- {icon} + {icon}

{title}

-
+
{description}
diff --git a/src/components/cards/FundingAreaCard.tsx b/src/components/cards/FundingAreaCard.tsx index 456ebde..17c6fc2 100644 --- a/src/components/cards/FundingAreaCard.tsx +++ b/src/components/cards/FundingAreaCard.tsx @@ -26,18 +26,20 @@ const FundingAreaCard: React.FC = ({ return (
{/* Gradient overlay - matches card height exactly */}
- {percentage} + + {percentage} +

diff --git a/src/components/cards/IconCard.tsx b/src/components/cards/IconCard.tsx index 5a4ee06..88853dc 100644 --- a/src/components/cards/IconCard.tsx +++ b/src/components/cards/IconCard.tsx @@ -22,18 +22,18 @@ const IconCard: React.FC = ({ return (
{/* Gradient overlay using ::before - matches card height exactly */}
- {icon} + {icon}

diff --git a/src/components/cards/ImpactBreakdownCard.tsx b/src/components/cards/ImpactBreakdownCard.tsx index db701b1..9c55818 100644 --- a/src/components/cards/ImpactBreakdownCard.tsx +++ b/src/components/cards/ImpactBreakdownCard.tsx @@ -20,16 +20,16 @@ const ImpactBreakdownCard: React.FC = ({ return (
{/* Gradient overlay - matches card height exactly */}
-
- {amount} +
+ {amount}

{impact} diff --git a/src/components/cards/ImpactCard.tsx b/src/components/cards/ImpactCard.tsx index dbe3c8f..1196b97 100644 --- a/src/components/cards/ImpactCard.tsx +++ b/src/components/cards/ImpactCard.tsx @@ -34,19 +34,19 @@ const ImpactCard: React.FC = ({ return (
{/* Gradient overlay - matches card height exactly */}
{layout === "horizontal" ? (
- {icon} + {icon}

@@ -84,9 +84,9 @@ const ImpactCard: React.FC = ({ ) : (
- {icon} + {icon}

{title} diff --git a/src/components/cards/InfoCard.tsx b/src/components/cards/InfoCard.tsx index 8c83a37..2c0de65 100644 --- a/src/components/cards/InfoCard.tsx +++ b/src/components/cards/InfoCard.tsx @@ -21,16 +21,16 @@ const InfoCard: React.FC = ({ gradientTo = "to-secondary-500", className = "", borderColor = "border-primary-500/30", - iconBgClassName = "bg-gradient-to-r from-primary-500 to-secondary-500", + iconBgClassName = "icon-chip", }) => { return (
{/* Gradient overlay - matches card height exactly */}
@@ -38,9 +38,9 @@ const InfoCard: React.FC = ({
- {icon} + {icon}
-

+

{title}

{description && ( diff --git a/src/components/cards/PathwayCard.tsx b/src/components/cards/PathwayCard.tsx index 490c84e..efda10b 100644 --- a/src/components/cards/PathwayCard.tsx +++ b/src/components/cards/PathwayCard.tsx @@ -26,18 +26,18 @@ const PathwayCard: React.FC = ({ return (
{/* Gradient overlay - matches card height exactly */}
- {icon && {icon}} + {icon && {icon}}

{title} diff --git a/src/components/cards/ShareableContentCard.tsx b/src/components/cards/ShareableContentCard.tsx index bbaf92b..2a6d6e7 100644 --- a/src/components/cards/ShareableContentCard.tsx +++ b/src/components/cards/ShareableContentCard.tsx @@ -29,17 +29,17 @@ const ShareableContentCard: React.FC = ({ return (
{/* Gradient overlay - matches card height exactly */}
- + {type}
@@ -71,7 +71,7 @@ const ShareableContentCard: React.FC = ({