@@ -4,21 +4,24 @@ import React from 'react'
44import Image from 'next/image'
55import { useState } from 'react'
66import { ChevronDown } from 'lucide-react'
7+ import Link from 'next/link'
78import { cn } from "@/lib/utils"
89import { Card } from "@/components/ui/card"
910
1011// Styled link with consistent styling
1112export const StyledLink = React . forwardRef <
1213 HTMLAnchorElement ,
13- React . AnchorHTMLAttributes < HTMLAnchorElement > & { variant ?: 'underline' | 'plain' }
14+ React . AnchorHTMLAttributes < HTMLAnchorElement > & { variant ?: 'underline' | 'plain' | 'muted' }
1415> ( ( { className = "" , variant = 'plain' , ...props } , ref ) => (
1516 < a
1617 ref = { ref }
1718 className = { cn (
1819 "transition-colors" ,
19- variant === 'underline'
20- ? "underline text-zinc-800 hover:text-zinc-600 dark:text-zinc-800 dark:hover:text-zinc-600"
21- : "text-zinc-800 hover:text-zinc-600 dark:text-zinc-800 dark:hover:text-zinc-600" ,
20+ variant === 'underline'
21+ ? "underline text-zinc-800 hover:text-zinc-600 dark:text-zinc-800 dark:hover:text-zinc-600"
22+ : variant === 'muted'
23+ ? "text-zinc-400 hover:text-zinc-600 dark:text-zinc-400 dark:hover:text-zinc-600"
24+ : "text-zinc-800 hover:text-zinc-600 dark:text-zinc-800 dark:hover:text-zinc-600" ,
2225 className
2326 ) }
2427 { ...props }
@@ -94,6 +97,16 @@ export function GithubIcon() {
9497 ) ;
9598}
9699
100+ // Scholar icon (graduation cap)
101+ export function ScholarIcon ( ) {
102+ return (
103+ < svg xmlns = "http://www.w3.org/2000/svg" className = "h-3.5 w-3.5 text-zinc-500" viewBox = "0 0 24 24" fill = "none" stroke = "currentColor" strokeWidth = "2" strokeLinecap = "round" strokeLinejoin = "round" >
104+ < path d = "M22 10L12 4 2 10l10 6 10-6" />
105+ < path d = "M6 12v5c0 1.7 3.6 3 6 3s6-1.3 6-3v-5" />
106+ </ svg >
107+ ) ;
108+ }
109+
97110// Footer component
98111export function Footer ( { className = "" } : { className ?: string } ) {
99112 return (
@@ -189,4 +202,33 @@ export function ExpandableSection({ title, children, defaultExpanded = false, su
189202 </ div >
190203 </ div >
191204 )
192- }
205+ }
206+
207+ // Link Section (non-expandable, arrow points right)
208+ interface LinkSectionProps {
209+ title : string
210+ href : string
211+ description ?: React . ReactNode
212+ }
213+
214+ export function LinkSection ( { title, href, description } : LinkSectionProps ) {
215+ return (
216+ < div className = "mb-8" >
217+ < div className = "rounded-3xl bg-white border border-zinc-100 dark:bg-white dark:border-zinc-100" >
218+ < Link href = { href } className = "flex w-full items-start justify-between p-6 transition-all duration-200 hover:bg-zinc-50 dark:hover:bg-zinc-50 rounded-3xl group" >
219+ < div className = "text-left" >
220+ < h2 className = "text-2xl font-bold mb-1 text-zinc-900 dark:text-zinc-900" > { title } </ h2 >
221+ { description && (
222+ < div className = "text-sm text-zinc-600 dark:text-zinc-600" >
223+ { description }
224+ </ div >
225+ ) }
226+ </ div >
227+ < div className = "bg-zinc-100 dark:bg-zinc-100 rounded-full p-2.5 group-hover:bg-zinc-200 dark:group-hover:bg-zinc-200 transition-colors" >
228+ < ChevronDown className = "h-5 w-5 -rotate-90 transition-all duration-200 text-zinc-500 dark:text-zinc-500 group-hover:text-zinc-800 dark:group-hover:text-zinc-800" />
229+ </ div >
230+ </ Link >
231+ </ div >
232+ </ div >
233+ )
234+ }
0 commit comments