@@ -24,39 +24,67 @@ const ContactModal = ({ isOpen, onClose }) => {
2424 const { config } = useSiteConfig ( ) ;
2525 const { fezcodexTheme } = useVisualSettings ( ) ;
2626 const isLuxe = fezcodexTheme === 'luxe' ;
27+ const isTerracotta = fezcodexTheme === 'terracotta' ;
28+
29+ const title = ( ( ) => {
30+ if ( isLuxe ) return 'Establish Contact' ;
31+ if ( isTerracotta ) return 'Correspondence' ;
32+ return 'Contact' ;
33+ } ) ( ) ;
2734
2835 return (
29- < GenericModal
30- isOpen = { isOpen }
31- onClose = { onClose }
32- title = { isLuxe ? 'Establish Contact' : 'Contact' }
33- >
36+ < GenericModal isOpen = { isOpen } onClose = { onClose } title = { title } >
3437 < div className = "flex flex-col gap-6" >
35- { isLuxe ? (
38+ { isLuxe && (
3639 < p className = "font-outfit text-sm text-[#1A1A1A]/60 italic leading-relaxed mb-2" >
3740 Choose a preferred channel to initiate communication with the
3841 primary node.
3942 </ p >
40- ) : (
43+ ) }
44+ { isTerracotta && (
45+ < div className = "mb-1 flex items-center gap-3" >
46+ < span className = "h-[2px] w-[36px] bg-[#C96442]" />
47+ < p className = "font-ibm-plex-mono text-[9.5px] uppercase tracking-[0.28em] text-[#2E2620]/70" >
48+ Channels · open for letters
49+ </ p >
50+ </ div >
51+ ) }
52+ { ! isLuxe && ! isTerracotta && (
4153 < p className = "text-gray-400 mb-2 font-mono uppercase tracking-widest text-[10px]" >
4254 { '//' } Establish connection via established protocols:
4355 </ p >
4456 ) }
4557
46- < div className = { `grid grid-cols-1 ${ isLuxe ? 'gap-4' : 'gap-3' } ` } >
58+ < div
59+ className = { `grid grid-cols-1 ${
60+ isLuxe ? 'gap-4' : isTerracotta ? 'gap-0 border-t border-[#1A161320]' : 'gap-3'
61+ } `}
62+ >
4763 { config ?. socials &&
4864 config . socials . map ( ( link ) => {
4965 const Icon = socialIcons [ link . icon ] || GlobeIcon ;
66+ const cleaned = link . url
67+ . replace ( / ^ m a i l t o : / , '' )
68+ . replace ( / ^ h t t p s ? : \/ \/ / , '' ) ;
5069 if ( isLuxe ) {
5170 return (
5271 < LuxeContactLink
5372 key = { link . id }
5473 href = { link . url }
5574 icon = { Icon }
5675 label = { link . label }
57- value = { link . url
58- . replace ( / ^ m a i l t o : / , '' )
59- . replace ( / ^ h t t p s ? : \/ \/ / , '' ) }
76+ value = { cleaned }
77+ />
78+ ) ;
79+ }
80+ if ( isTerracotta ) {
81+ return (
82+ < TerracottaContactLink
83+ key = { link . id }
84+ href = { link . url }
85+ icon = { Icon }
86+ label = { link . label }
87+ value = { cleaned }
6088 />
6189 ) ;
6290 }
@@ -66,9 +94,7 @@ const ContactModal = ({ isOpen, onClose }) => {
6694 href = { link . url }
6795 icon = { Icon }
6896 label = { link . label }
69- value = { link . url
70- . replace ( / ^ m a i l t o : / , '' )
71- . replace ( / ^ h t t p s ? : \/ \/ / , '' ) }
97+ value = { cleaned }
7298 />
7399 ) ;
74100 } ) }
@@ -78,6 +104,34 @@ const ContactModal = ({ isOpen, onClose }) => {
78104 ) ;
79105} ;
80106
107+ const TerracottaContactLink = ( { href, icon : Icon , label, value } ) => (
108+ < a
109+ href = { href }
110+ target = "_blank"
111+ rel = "noopener noreferrer"
112+ className = "group relative grid grid-cols-[52px_140px_1fr_auto] items-center gap-4 px-4 py-4 border-b border-[#1A161320] hover:bg-[#E8DECE]/60 transition-colors"
113+ >
114+ < span
115+ aria-hidden = "true"
116+ className = "absolute left-0 top-0 bottom-0 w-[2px] bg-[#C96442] opacity-0 group-hover:opacity-100 transition-opacity"
117+ />
118+ < div className = "flex items-center justify-center w-10 h-10 border border-[#1A161330] text-[#1A1613] group-hover:border-[#C96442] group-hover:text-[#9E4A2F] transition-colors" >
119+ < Icon size = { 20 } weight = "duotone" />
120+ </ div >
121+ < span className = "font-ibm-plex-mono text-[9.5px] uppercase tracking-[0.28em] text-[#C96442]" >
122+ { label }
123+ </ span >
124+ < span className = "font-fraunces italic text-[16px] text-[#1A1613] truncate" >
125+ { value }
126+ </ span >
127+ < ArrowUpRightIcon
128+ size = { 14 }
129+ weight = "bold"
130+ className = "text-[#1A161340] group-hover:text-[#9E4A2F] transition-colors"
131+ />
132+ </ a >
133+ ) ;
134+
81135const LuxeContactLink = ( { href, icon : Icon , label, value } ) => (
82136 < a
83137 href = { href }
0 commit comments