Skip to content
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0f1bec2
fix: smooth gradient transition on navbar CTA using overlay pseudo-el…
Smartlify07 Jun 30, 2026
9403570
fix: smooth gradient transition on hero book consultation button
Smartlify07 Jun 30, 2026
a057b10
feat: scroll-into-view expand animation on hero image using motion
Smartlify07 Jun 30, 2026
87b105c
fix: hero image expands from 700px to full 1024px container on scroll
Smartlify07 Jun 30, 2026
9aac4c7
refactor: use scale transform for hero image scroll animation instead…
Smartlify07 Jun 30, 2026
61192d6
chore: add motion package and finish navbar animation
Smartlify07 Jun 30, 2026
bda2bae
feat: horizontal expand/shrink on bridging the gap cards on hover
Smartlify07 Jun 30, 2026
8b474c4
fix: add shrink-0 to image wrappers to prevent flex compression
Smartlify07 Jun 30, 2026
a4cc51f
fix: testimonials image overflow and scroll-to-end on button click
Smartlify07 Jun 30, 2026
66137c0
fix: horizontal overflow clipping on testimonials scroll container
Smartlify07 Jun 30, 2026
9e97af0
fix: disable manual horizontal scroll, button-only navigation
Smartlify07 Jun 30, 2026
6f6448b
feat: accordion FAQ with expand/collapse and 360deg plus spin
Smartlify07 Jun 30, 2026
98ecafe
fix: slow cross rotation speed by 2x (600ms)
Smartlify07 Jun 30, 2026
116b00d
feat: add arrow rotation on hover to CTA button
Smartlify07 Jun 30, 2026
441c87c
feat: join button scale up, gradient, and arrow rotation on hover
Smartlify07 Jun 30, 2026
4c60662
feat: add muted hover background to course cards
Smartlify07 Jun 30, 2026
a1a0d49
feat: add gradient overlay and arrow rotation to enroll button
Smartlify07 Jun 30, 2026
f5a804c
feat: add gradient border to enroll button using before pseudo-element
Smartlify07 Jun 30, 2026
d0709b0
fix: revert hero enroll button; add gradient border to content sectio…
Smartlify07 Jun 30, 2026
8758cb7
fix: gradient border only visible on hover, white bg + primary text +…
Smartlify07 Jun 30, 2026
39fbc85
fix: add variant outline and isolate to fix text visibility and z-ind…
Smartlify07 Jun 30, 2026
3f4290f
fix: make Button background transparent so before gradient border is …
Smartlify07 Jun 30, 2026
2cc3e1c
fix: use wrapper pattern for gradient border on enroll button
Smartlify07 Jun 30, 2026
91f17c9
feat: add accordion transitions to course modules, gradient hover to …
Smartlify07 Jun 30, 2026
dedee60
feat: restrict mission hover interaction to large screens only
Smartlify07 Jul 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
"dotenv": "^17.4.2",
"drizzle-orm": "^0.45.2",
"lucide-react": "^1.17.0",
"motion": "^12.42.0",
"next": "16.2.6",
"next-themes": "^0.4.6",
"pg": "^8.21.0",
Expand Down
60 changes: 60 additions & 0 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -218,11 +218,14 @@ function CourseInformationCard() {
<Button
asChild
variant="outline"
className="mt-6 h-[53px] w-full gap-2.5 rounded-[60px] border-[#e5e7eb] bg-white px-5 py-4 text-base font-semibold text-ma-text hover:bg-[#f5f5f5]"
className="group relative mt-6 bg-transparent"
>
<Link href="/signup">
<Link
href="/signup"
className="relative isolate flex h-[53px] w-full items-center justify-center gap-2.5 rounded-[60px] border border-[#e5e7eb] bg-white px-5 py-4 text-base font-semibold text-ma-text transition-colors duration-300 before:absolute before:-inset-[2px] before:rounded-[60px] before:bg-gradient-to-r before:from-ma-glow-blue before:to-ma-glow-violet before:z-[-1] before:opacity-0 before:transition-opacity before:duration-300 group-hover:border-transparent group-hover:before:opacity-100"
>
Enroll Now
<ArrowRight className="size-5" aria-hidden="true" />
<ArrowRight className="size-5 transition-transform duration-300 group-hover:rotate-[-30deg]" aria-hidden="true" />
</Link>
</Button>

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== package files ==\n'
git ls-files 'package.json' 'pnpm-lock.yaml' 'yarn.lock' 'package-lock.json' 'src/**/package.json' | sed -n '1,120p'

printf '\n== tailwind references ==\n'
rg -n --hidden --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' 'tailwindcss|bg-gradient-to-r|bg-linear-to-r' .

printf '\n== file under review context ==\n'
sed -n '210,235p' src/features/marketing/components/course-detail-content-section.tsx

Repository: Smartlify07/Modern-Advocates

Length of output: 6980


🌐 Web query:

Tailwind CSS v4 bg-gradient-to-r removed alias bg-linear-to-r documentation

💡 Result:

In Tailwind CSS v4, the former bg-gradient-to-* utilities have been renamed to bg-linear-to-* [1][2][3]. This was a breaking change introduced to align class names with the native CSS linear-gradient function and to make room for new gradient primitives, specifically radial and conic gradients [1][2][3]. There is no alias or legacy support for the old bg-gradient-to-* class names in v4; they have been completely replaced by the new bg-linear-* syntax [2][4]. Key points regarding this change: - Renaming: Classes like bg-gradient-to-r have become bg-linear-to-r [2][4]. - Expanded Functionality: The new naming structure accommodates additional types, such as bg-radial and bg-conic [2][3]. - Gradient Stops: The existing color stop utilities (from-, via-, to-*) remain compatible and function identically with the new linear gradient classes [2][4]. - Migration: Official documentation provides guidance on updating these classes, and automated migration tools are available to help transition existing projects from the v3 syntax to the v4 syntax [1][5]. Because these changes involve class names, they may need to be manually updated in dynamic string concatenations that automated tools might miss [2].

Citations:


🏁 Script executed:

#!/bin/bash
set -euo pipefail

python3 - <<'PY'
import json, os, re
for p in ['package.json','pnpm-lock.yaml','yarn.lock','package-lock.json']:
    if os.path.exists(p):
        print(f'== {p} ==')
        if p.endswith('.json'):
            data=json.load(open(p))
            for k in ['dependencies','devDependencies','peerDependencies']:
                if k in data and 'tailwindcss' in data[k]:
                    print(k, data[k]['tailwindcss'])
        else:
            # show tailwind version mentions around first occurrences
            with open(p, 'r', encoding='utf-8', errors='ignore') as f:
                txt=f.read()
            for m in re.finditer(r'tailwindcss@[^:\n ]+|tailwindcss[^@\n ]*@[^:\n ]+', txt):
                print(m.group(0))
                break
PY

Repository: Smartlify07/Modern-Advocates

Length of output: 249


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Minimal, read-only checks for Tailwind version and relevant utility usage.
if [ -f package.json ]; then
  echo '== package.json =='
  cat package.json | python3 - <<'PY'
import json, sys
data=json.load(sys.stdin)
for k in ['dependencies','devDependencies','peerDependencies']:
    if k in data and 'tailwindcss' in data[k]:
        print(k, data[k]['tailwindcss'])
PY
fi

echo '== matches =='
rg -n --hidden --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' 'bg-gradient-to-r|bg-linear-to-r|tailwindcss' .

Repository: Smartlify07/Modern-Advocates

Length of output: 906


🌐 Web query:

Tailwind CSS v4 bg-gradient-to-r alias removed bg-linear-to-r documentation "legacy class aliases"

💡 Result:

In Tailwind CSS v4, the bg-gradient-* class aliases used in v3 were removed and replaced with the bg-linear-* naming convention [1][2][3]. This change was implemented to better align Tailwind’s utility naming with native CSS functions (such as linear-gradient()) and to accommodate new gradient types, specifically bg-radial and bg-conic [2][3]. Key points regarding this change: - Renaming: Classes such as bg-gradient-to-r have been replaced by bg-linear-to-r [1][4]. - Migration: Tailwind provides an official upgrade tool, @tailwindcss/upgrade, which automatically updates legacy v3 class names (including gradient utilities) to their v4 equivalents during the migration process [1][5][6]. - Reasoning: Beyond simple renaming, v4 introduces expanded gradient capabilities, including support for arbitrary linear gradient angles (e.g., bg-linear-[125deg]) and gradient interpolation modifiers (e.g., /srgb, /oklch), which are conceptually clearer under the bg-linear-* namespace [7][2][3]. Documentation for these utilities can be found in the official Tailwind CSS background-image documentation, which lists the modern bg-linear-* utilities [8].

Citations:


🌐 Web query:

site:tailwindcss.com bg-gradient-to-r bg-linear-to-r Tailwind v4 legacy class aliases removed

💡 Result:

In Tailwind CSS v4, the class naming convention for gradients has been updated. The previous bg-gradient-* utility classes have been renamed to bg-linear-* [1][2]. Specifically, the bg-gradient-to-r class from Tailwind v3 has been replaced by bg-linear-to-r in v4 [3][1]. While v4 introduces these updated names to support expanded gradient functionality—such as linear gradient angles (e.g., bg-linear-45) and interpolation modifiers (e.g., bg-linear-to-r/oklch)—it does not necessarily imply a blanket removal of all legacy aliases in the framework's core; however, for gradients specifically, the documentation emphasizes the use of the new bg-linear-* naming convention [3][1]. You should update your codebase to use the bg-linear-* variants to benefit from the new API features and ensure consistency with v4 [1][2].

Citations:


Swap before:bg-gradient-to-r to before:bg-linear-to-r Tailwind v4 uses the bg-linear-* gradient utilities, so this hover border gradient won’t render as written.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/marketing/components/course-detail-content-section.tsx` around
lines 218 - 230, The hover border gradient on the Link inside
CourseDetailContentSection uses an outdated Tailwind utility, so the gradient
won’t render in v4. Update the pseudo-element styling on the signup CTA to use
the Tailwind v4 linear gradient utility instead of before:bg-gradient-to-r,
keeping the rest of the Link/Button composition and class names in
course-detail-content-section.tsx unchanged.

</div>
Expand Down
11 changes: 7 additions & 4 deletions src/features/marketing/components/course-detail-hero-section.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,14 @@ export function CourseDetailHeroSection() {

<Button
asChild
className="mt-3 h-[53px] w-full gap-2.5 rounded-[60px] bg-ma-text px-5 py-4 text-base font-semibold text-white hover:bg-ma-text/90"
className="group relative mt-3 overflow-hidden rounded-[60px]"
>
<Link href="/signup">
Enroll Now
<ArrowRight className="size-5" aria-hidden="true" />
<Link href="/signup" className="flex h-[53px] w-full items-center justify-center gap-2.5 rounded-[60px] bg-ma-text px-5 py-4 text-base font-semibold text-white">
<span className="relative z-10 inline-flex items-center gap-2.5">
Enroll Now
<ArrowRight className="size-5 transition-transform duration-300 group-hover:rotate-[-30deg]" aria-hidden="true" />
</span>
<div className="pointer-events-none absolute inset-0 rounded-[60px] bg-gradient-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
</Link>
</Button>
Comment on lines 80 to 91

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== package manifests ==\n'
git ls-files 'package.json' 'pnpm-lock.yaml' 'yarn.lock' 'package-lock.json' 'src/**/package.json' | sed 's#^`#-` #'

printf '\n== tailwind references ==\n'
rg -n --hidden --glob '!**/node_modules/**' --glob '!**/dist/**' --glob '!**/build/**' 'tailwindcss|bg-gradient-to-|bg-linear-to-' .

printf '\n== target file excerpt ==\n'
sed -n '70,100p' src/features/marketing/components/course-detail-hero-section.tsx

Repository: Smartlify07/Modern-Advocates

Length of output: 8023


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== package.json ==\n'
sed -n '1,220p' package.json

printf '\n== lockfile hits ==\n'
rg -n 'tailwindcss@|tailwindcss' pnpm-lock.yaml package-lock.json yarn.lock 2>/dev/null || true

Repository: Smartlify07/Modern-Advocates

Length of output: 5520


🌐 Web query:

Tailwind CSS v4 gradient utilities bg-gradient-to-r bg-linear-to-r documentation

💡 Result:

In Tailwind CSS v4, the gradient system has been overhauled to align with native CSS syntax, resulting in a breaking change where the former bg-gradient-to-* utilities have been replaced by bg-linear-to-* [1][2][3]. Key changes and usage in v4: 1. Renamed Utilities: The bg-gradient-to-* prefix used in v3 is removed [3]. You must now use bg-linear-to-* for linear gradients (e.g., bg-linear-to-r for a left-to-right gradient) [4][1][2]. 2. Directional and Angle Support: - Predefined cardinal and diagonal directions remain available (e.g., bg-linear-to-t, bg-linear-to-br, bg-linear-to-l) [4][5]. - You can now specify explicit angles directly using the bg-linear-* utility (e.g., bg-linear-45 for a 45-degree angle) [1][5][2]. - Arbitrary angle values are supported via square bracket syntax (e.g., bg-linear-[125deg]) [6][7]. 3. Gradient Stops: The color stop utilities (from-*, via-*, and to-*) function identically to v3 [1][3]. You combine them with the base gradient utility to define the colors and their positions (e.g., bg-linear-to-r from-indigo-500 via-purple-500 to-pink-500) [4][7][5]. 4. Interpolation Modes: Tailwind v4 defaults to oklab color interpolation, which provides smoother, more vibrant gradients compared to traditional sRGB [1][7][2]. You can override this using interpolation modifiers on the utility class, such as bg-linear-to-r/srgb, bg-linear-to-r/oklch, or bg-linear-to-r/hsl [4][7][2]. 5. Expanded Gradient Types: In addition to linear gradients, v4 introduces bg-radial and bg-conic utilities to support radial and conic gradients, respectively [1][2][3]. To migrate from v3, you can perform a search-and-replace for bg-gradient-to- with bg-linear-to- across your project [3].

Citations:


Use bg-linear-to-r for this gradient overlay. Tailwind v4 no longer emits bg-gradient-to-*, so this hover glow won’t render with bg-gradient-to-r here.

🛠️ Proposed fix
-                <div className="pointer-events-none absolute inset-0 rounded-[60px] bg-gradient-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
+                <div className="pointer-events-none absolute inset-0 rounded-[60px] bg-linear-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<Button
asChild
className="mt-3 h-[53px] w-full gap-2.5 rounded-[60px] bg-ma-text px-5 py-4 text-base font-semibold text-white hover:bg-ma-text/90"
className="group relative mt-3 overflow-hidden rounded-[60px]"
>
<Link href="/signup">
Enroll Now
<ArrowRight className="size-5" aria-hidden="true" />
<Link href="/signup" className="flex h-[53px] w-full items-center justify-center gap-2.5 rounded-[60px] bg-ma-text px-5 py-4 text-base font-semibold text-white">
<span className="relative z-10 inline-flex items-center gap-2.5">
Enroll Now
<ArrowRight className="size-5 transition-transform duration-300 group-hover:rotate-[-30deg]" aria-hidden="true" />
</span>
<div className="pointer-events-none absolute inset-0 rounded-[60px] bg-gradient-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
</Link>
</Button>
<Button
asChild
className="group relative mt-3 overflow-hidden rounded-[60px]"
>
<Link href="/signup" className="flex h-[53px] w-full items-center justify-center gap-2.5 rounded-[60px] bg-ma-text px-5 py-4 text-base font-semibold text-white">
<span className="relative z-10 inline-flex items-center gap-2.5">
Enroll Now
<ArrowRight className="size-5 transition-transform duration-300 group-hover:rotate-[-30deg]" aria-hidden="true" />
</span>
<div className="pointer-events-none absolute inset-0 rounded-[60px] bg-linear-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
</Link>
</Button>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/marketing/components/course-detail-hero-section.tsx` around
lines 80 - 91, The hover glow overlay in the course detail hero CTA is using a
deprecated Tailwind gradient class, so update the gradient background on the
Link’s overlay element inside course-detail-hero-section.tsx from the old
bg-gradient-to-r pattern to the Tailwind v4 bg-linear-to-r equivalent; keep the
same from/to color stops and leave the Button, Link, and ArrowRight structure
unchanged.

</div>
Expand Down
2 changes: 1 addition & 1 deletion src/features/marketing/components/courses-hero-section.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ function CourseCard({ course }: { course: Course }) {
return (
<Link
href={`/courses/${course.id}`}
className="flex w-full flex-col gap-5 rounded-[24px] border border-[#d9d9d9] bg-white px-2.5 pt-2.5 pb-7.5 sm:max-w-[334px]"
className="flex w-full flex-col gap-5 rounded-[24px] border border-[#d9d9d9] bg-white px-2.5 pt-2.5 pb-7.5 transition-colors duration-300 hover:bg-gray-50 sm:max-w-[334px]"
>
<div className="relative h-[254px] overflow-hidden rounded-[24px]">
{course.thumbnailUrl ? (
Expand Down
4 changes: 2 additions & 2 deletions src/features/marketing/components/cta-section.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,10 @@ export function CtaSection() {
<div className="mt-12.5 flex flex-col items-center justify-center gap-5 sm:flex-row lg:mt-13">
<Link
href="/contact"
className="inline-flex items-center justify-center gap-2.5 rounded-[60px] bg-[linear-gradient(90deg,#4f7cf7_0%,#7b5cff_68.269%)] px-5 py-4 text-center text-base font-semibold text-white transition-opacity hover:opacity-90"
className="group inline-flex items-center justify-center gap-2.5 rounded-[60px] bg-[linear-gradient(90deg,#4f7cf7_0%,#7b5cff_68.269%)] px-5 py-4 text-center text-base font-semibold text-white transition-opacity hover:opacity-90"
>
Book a free consultation
<ArrowRight className="size-5" aria-hidden="true" />
<ArrowRight className="size-5 transition-transform duration-300 group-hover:rotate-[-30deg]" aria-hidden="true" />
</Link>
</div>
</div>
Expand Down
91 changes: 70 additions & 21 deletions src/features/marketing/components/faq.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,48 @@
"use client"

import { Plus } from "lucide-react"
import { useState } from "react"

const faqs = [
"Who is ModernAdvocates Inc. for?",
"Is the consultation really free?",
"What kind of AI workforce training do you offer?",
"Do I need any prior experience to join the training programs?",
"How does ModernAdvocates help with healthcare resources?",
"How can I support your mission?",
{
question: "Who is ModernAdvocates Inc. for?",
answer:
"ModernAdvocates Inc. serves low-to-moderate income individuals, caregivers, and families navigating health challenges or career transitions who need practical AI guidance and human-centered support.",
},
{
question: "Is the consultation really free?",
answer:
"Yes, our initial consultation is completely free with no obligation. We believe everyone deserves access to guidance before making any commitment.",
},
{
question: "What kind of AI workforce training do you offer?",
answer:
"We offer hands-on training in AI-powered tools, workflow automation, and digital skills designed for real-world application — no tech background required.",
},
{
question: "Do I need any prior experience to join the training programs?",
answer:
"Not at all. Our programs are built for beginners and meet you where you are. We provide step-by-step guidance and ongoing support throughout your learning journey.",
},
{
question: "How does ModernAdvocates help with healthcare resources?",
answer:
"We help you navigate the healthcare system by providing guidance on accessing care, understanding your options, and using AI tools to advocate for your health.",
},
{
question: "How can I support your mission?",
answer:
"You can support our mission by donating, volunteering your expertise, or spreading the word. Every contribution helps us reach more individuals in need.",
},
]

export function Faq() {
const [openIndex, setOpenIndex] = useState<number | null>(null)

function toggle(index: number) {
setOpenIndex(openIndex === index ? null : index)
}

return (
<section
id="faq"
Expand All @@ -27,22 +60,38 @@ export function Faq() {
</div>

<div className="flex flex-col gap-[29px]">
{faqs.map((question) => (
<button
key={question}
type="button"
aria-label={question}
className="flex w-full items-start gap-4 rounded-3xl border border-[#d9d9d9] bg-white p-5 px-5 text-left text-primary transition-colors hover:border-ma-text/35 lg:py-7.5"
{faqs.map((faq, i) => (
<div
key={i}
className="rounded-3xl border border-[#d9d9d9] bg-white p-5 transition-colors hover:border-ma-text/35 lg:py-7.5"
>
<Plus
className="size-[30px] shrink-0"
strokeWidth={2.5}
aria-hidden="true"
/>
<span className="min-w-0 flex-1 text-lg leading-normal font-bold lg:text-[22px]">
{question}
</span>
</button>
<button
type="button"
onClick={() => toggle(i)}
className="flex w-full items-start gap-4 text-left text-primary"
>
<Plus
className={`size-[30px] shrink-0 transition-transform duration-600 ${
openIndex === i ? "rotate-[360deg]" : ""
}`}
strokeWidth={2.5}
aria-hidden="true"
/>
<span className="min-w-0 flex-1 text-lg leading-normal font-bold lg:text-[22px]">
{faq.question}
</span>
</button>

<div
className={`overflow-hidden transition-all duration-300 ${
openIndex === i ? "max-h-[500px] opacity-100" : "max-h-0 opacity-0"
}`}
>
<p className="pt-4 text-sm leading-normal text-ma-text/80 lg:text-base">
{faq.answer}
</p>
</div>
</div>
))}
</div>
</div>
Expand Down
9 changes: 6 additions & 3 deletions src/features/marketing/components/footer.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,13 @@ export function Footer() {
/>
<button
type="submit"
className="inline-flex items-center justify-center gap-2 rounded-[60px] bg-ma-text px-[15px] py-3 text-[12.31px] font-semibold text-white transition-colors hover:bg-ma-text/90"
className="group relative inline-flex items-center justify-center gap-2 overflow-hidden rounded-[60px] bg-ma-text px-[15px] py-3 text-[12.31px] font-semibold text-white transition-transform duration-300 hover:scale-[1.5]"
>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
Join
<ArrowRight className="size-[15px]" aria-hidden="true" />
<span className="relative z-10 inline-flex items-center gap-2">
Join
<ArrowRight className="size-[15px] transition-transform duration-300 group-hover:rotate-[-30deg]" aria-hidden="true" />
</span>
<div className="pointer-events-none absolute inset-0 rounded-[60px] bg-gradient-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
</button>
Comment on lines 81 to 93

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== footer.tsx excerpt ==\n'
sed -n '1,180p' src/features/marketing/components/footer.tsx

printf '\n== Tailwind references ==\n'
rg -n --hidden --glob '!node_modules' --glob '!dist' --glob '!build' 'tailwind|bg-gradient-to-r|bg-linear-to-r|`@tailwind`|tailwindcss' .

printf '\n== package manifests ==\n'
for f in package.json pnpm-lock.yaml yarn.lock package-lock.json; do
  if [ -f "$f" ]; then
    printf '\n-- %s --\n' "$f"
    sed -n '1,220p' "$f"
  fi
done

Repository: Smartlify07/Modern-Advocates

Length of output: 21473


🌐 Web query:

Tailwind CSS v4 gradient direction utility bg-gradient-to-r vs bg-linear-to-r official docs

💡 Result:

In Tailwind CSS v4, the bg-gradient-to-* utility family has been renamed to bg-linear-to-* [1][2]. This change was implemented to better align the utility names with the underlying native CSS linear-gradient() function and to support a broader suite of gradient types, including the new bg-radial and bg-conic utilities [1][3]. Key points regarding the transition: - Replacement: bg-linear-to-r is the canonical v4 equivalent of the legacy v3 bg-gradient-to-r [1][2]. The bg-gradient-to-* classes no longer exist in v4 [1][4]. - Functionality: Both utilities produce identical CSS output [1]. The color stop utilities (from-*, via-*, and to-*) remain unchanged and function exactly as they did in v3 [1][4]. - Enhanced Features: Tailwind v4 introduces new gradient capabilities, such as arbitrary angles (e.g., bg-linear-45) [1][3] and color interpolation modifiers (e.g., bg-linear-to-r/oklch or bg-linear-to-r/srgb) [5][3], which work seamlessly with the bg-linear-* syntax. If you are migrating a codebase, the official Tailwind CSS upgrade tool automatically handles the renaming of bg-gradient-to-* to bg-linear-to-* for statically parseable class strings [1][2].

Citations:


🏁 Script executed:

rg -n 'hover:scale-\[1\.5\]' src

Repository: Smartlify07/Modern-Advocates

Length of output: 452


Use bg-linear-to-r for this overlay. bg-gradient-to-r is the Tailwind v4 rename, so the hover gradient won’t render here. The hover:scale-[1.5] button also crowds the email field in this tight form row.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/marketing/components/footer.tsx` around lines 81 - 90, The
footer form button overlay is using the old Tailwind gradient utility and the
hover scale is too aggressive for this compact layout. Update the button in
Footer’s submit markup to use the Tailwind v4 `bg-linear-to-r` utility on the
gradient overlay, and reduce or remove the `hover:scale-[1.5]` transform so the
`Join` button doesn’t crowd the email field in the form row.

</form>

Expand Down
42 changes: 28 additions & 14 deletions src/features/marketing/components/hero-section.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
"use client"
import { motion } from "motion/react"
import Image from "next/image"
import Link from "next/link"
import { ArrowRight, Star } from "lucide-react"
Expand Down Expand Up @@ -58,10 +60,16 @@ export function HeroSection() {
<div className="mt-10 flex items-center gap-5">
<Link
href="/contact"
className="inline-flex items-center justify-center gap-1.5 rounded-[60px] bg-ma-text px-5 py-4 text-xs font-semibold text-nowrap text-white transition-colors hover:bg-ma-text/90 sm:gap-2.5 sm:text-base"
className="group relative inline-flex items-center justify-center overflow-hidden rounded-[60px] bg-ma-text px-5 py-4 sm:gap-2.5 sm:text-base"
>
Book consultation
<ArrowRight className="size-5" aria-hidden="true" />
<span className="relative z-10 inline-flex items-center justify-center gap-1.5 text-xs font-semibold text-nowrap text-white sm:gap-2.5 sm:text-base">
Book consultation
<ArrowRight
className="size-5 transition-transform duration-300 group-hover:rotate-[-30deg]"
aria-hidden="true"
/>
</span>
<div className="pointer-events-none absolute inset-0 rounded-[60px] bg-gradient-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
</Link>
Comment on lines 60 to 73

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Use bg-linear-to-r here. Tailwind v4 renamed the legacy bg-gradient-to-r utility, so this CTA overlay won't render as intended until it's updated.

🛠️ Proposed fix
-            <div className="pointer-events-none absolute inset-0 rounded-[60px] bg-gradient-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
+            <div className="pointer-events-none absolute inset-0 rounded-[60px] bg-linear-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
<div className="mt-10 flex items-center gap-5">
<Link
href="/contact"
className="inline-flex items-center justify-center gap-1.5 rounded-[60px] bg-ma-text px-5 py-4 text-xs font-semibold text-nowrap text-white transition-colors hover:bg-ma-text/90 sm:gap-2.5 sm:text-base"
className="group relative inline-flex items-center justify-center overflow-hidden rounded-[60px] bg-ma-text px-5 py-4 sm:gap-2.5 sm:text-base"
>
Book consultation
<ArrowRight className="size-5" aria-hidden="true" />
<span className="relative z-10 inline-flex items-center justify-center gap-1.5 text-xs font-semibold text-nowrap text-white sm:gap-2.5 sm:text-base">
Book consultation
<ArrowRight
className="size-5 transition-transform duration-300 group-hover:rotate-[-30deg]"
aria-hidden="true"
/>
</span>
<div className="pointer-events-none absolute inset-0 rounded-[60px] bg-gradient-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
</Link>
<div className="mt-10 flex items-center gap-5">
<Link
href="/contact"
className="group relative inline-flex items-center justify-center overflow-hidden rounded-[60px] bg-ma-text px-5 py-4 sm:gap-2.5 sm:text-base"
>
<span className="relative z-10 inline-flex items-center justify-center gap-1.5 text-xs font-semibold text-nowrap text-white sm:gap-2.5 sm:text-base">
Book consultation
<ArrowRight
className="size-5 transition-transform duration-300 group-hover:rotate-[-30deg]"
aria-hidden="true"
/>
</span>
<div className="pointer-events-none absolute inset-0 rounded-[60px] bg-linear-to-r from-ma-glow-blue to-ma-glow-violet opacity-0 transition-opacity duration-500 group-hover:opacity-100" />
</Link>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/features/marketing/components/hero-section.tsx` around lines 60 - 73, The
CTA overlay in hero-section is using the old Tailwind gradient utility, so
update the Link’s gradient background on the floating overlay to the v4
`bg-linear-to-r` equivalent. Use the existing hero-section Link/overlay markup
and replace the legacy gradient class while keeping the rest of the CTA styling
unchanged so the gradient renders correctly.

<Link
href="/donation"
Expand All @@ -72,21 +80,27 @@ export function HeroSection() {
</Link>
</div>

<div className="relative mt-15 w-full max-w-[700px] lg:mt-[100px]">
<div className="relative mt-15 w-full max-w-[1024px] lg:mt-[100px]">
<div
className="ma-hero-glow pointer-events-none absolute top-1/4 left-1/2 -z-10 h-[500px] w-[600px] -translate-x-1/2 -translate-y-1/2 rounded-full opacity-90 lg:top-1/3 lg:left-1/2 lg:h-[950px] lg:w-[954px]"
aria-hidden="true"
/>
<div className="relative h-[280px] overflow-hidden rounded-[20px] bg-ma-bg lg:h-[560px]">
<Image
src="/figma-home/hero.jpg"
alt="Two students smiling in a city setting"
fill
priority
sizes="(min-width: 768px) 700px, calc(100vw - 48px)"
className="object-cover"
/>
</div>
<motion.div
initial={{ scale: 700 / 1024 }}
whileInView={{ scale: 1 }}
viewport={{ once: true }}
>
<div className="relative h-[280px] overflow-hidden rounded-[20px] bg-ma-bg lg:h-[560px]">
<Image
src="/figma-home/hero.jpg"
alt="Two students smiling in a city setting"
fill
priority
sizes="(min-width: 768px) 700px, calc(100vw - 48px)"
className="object-cover"
/>
</div>
</motion.div>
</div>
</div>
</section>
Expand Down
Loading