diff --git a/src/app/(frontend)/globals.css b/src/app/(frontend)/globals.css
index b408b7f..cfbc849 100644
--- a/src/app/(frontend)/globals.css
+++ b/src/app/(frontend)/globals.css
@@ -341,6 +341,9 @@ html:not([data-theme]) {
--color-fd-mint-100: #D9FCE2;
--color-fd-mint-50: #ECFDF0;
+ /* Accent / overlay tones */
+ --color-fd-sepia: #8B7D3C; /* warm sepia overlay */
+
/* Neutral grays */
--color-fd-gray: #F0F0F0; /* section alt backgrounds */
--color-fd-gray-warm: #F8F8F6;
diff --git a/src/blocks/ArchiveBlock/Component.tsx b/src/blocks/ArchiveBlock/Component.tsx
deleted file mode 100644
index dcaa36e..0000000
--- a/src/blocks/ArchiveBlock/Component.tsx
+++ /dev/null
@@ -1,66 +0,0 @@
-// @ts-nocheck
-import type { Post, ArchiveBlock as ArchiveBlockProps } from '@/payload-types'
-
-import configPromise from '@payload-config'
-import { getPayload } from 'payload'
-import React from 'react'
-import RichText from '@/components/RichText'
-
-import { CollectionArchive } from '@/components/CollectionArchive'
-
-export const ArchiveBlock: React.FC<
- ArchiveBlockProps & {
- id?: string
- }
-> = async (props) => {
- const { id, categories, introContent, limit: limitFromProps, populateBy, selectedDocs } = props
-
- const limit = limitFromProps || 3
-
- let posts: Post[] = []
-
- if (populateBy === 'collection') {
- const payload = await getPayload({ config: configPromise })
-
- const flattenedCategories = categories?.map((category) => {
- if (typeof category === 'object') return category.id
- else return category
- })
-
- const fetchedPosts = await payload.find({
- collection: 'posts',
- depth: 1,
- limit,
- ...(flattenedCategories && flattenedCategories.length > 0
- ? {
- where: {
- categories: {
- in: flattenedCategories,
- },
- },
- }
- : {}),
- })
-
- posts = fetchedPosts.docs
- } else {
- if (selectedDocs?.length) {
- const filteredSelectedPosts = selectedDocs.map((post) => {
- if (typeof post.value === 'object') return post.value
- }) as Post[]
-
- posts = filteredSelectedPosts
- }
- }
-
- return (
-
- {introContent && (
-
-
-
- )}
-
-
- )
-}
diff --git a/src/blocks/ArchiveBlock/config.ts b/src/blocks/ArchiveBlock/config.ts
deleted file mode 100644
index f87a376..0000000
--- a/src/blocks/ArchiveBlock/config.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import type { Block } from 'payload'
-
-import {
- FixedToolbarFeature,
- HeadingFeature,
- InlineToolbarFeature,
- lexicalEditor,
-} from '@payloadcms/richtext-lexical'
-
-export const Archive: Block = {
- slug: 'archive',
- interfaceName: 'ArchiveBlock',
- fields: [
- {
- name: 'introContent',
- type: 'richText',
- editor: lexicalEditor({
- features: ({ rootFeatures }) => {
- return [
- ...rootFeatures,
- HeadingFeature({ enabledHeadingSizes: ['h1', 'h2', 'h3', 'h4'] }),
- FixedToolbarFeature(),
- InlineToolbarFeature(),
- ]
- },
- }),
- label: 'Intro Content',
- },
- {
- name: 'populateBy',
- type: 'select',
- defaultValue: 'collection',
- options: [
- {
- label: 'Collection',
- value: 'collection',
- },
- {
- label: 'Individual Selection',
- value: 'selection',
- },
- ],
- },
- {
- name: 'relationTo',
- type: 'select',
- admin: {
- condition: (_, siblingData) => siblingData.populateBy === 'collection',
- },
- defaultValue: 'posts',
- label: 'Collections To Show',
- options: [
- {
- label: 'Posts',
- value: 'posts',
- },
- ],
- },
- {
- name: 'categories',
- type: 'relationship',
- admin: {
- condition: (_, siblingData) => siblingData.populateBy === 'collection',
- },
- hasMany: true,
- label: 'Categories To Show',
- relationTo: 'categories',
- },
- {
- name: 'limit',
- type: 'number',
- admin: {
- condition: (_, siblingData) => siblingData.populateBy === 'collection',
- step: 1,
- },
- defaultValue: 10,
- label: 'Limit',
- },
- {
- name: 'selectedDocs',
- type: 'relationship',
- admin: {
- condition: (_, siblingData) => siblingData.populateBy === 'selection',
- },
- hasMany: true,
- label: 'Selection',
- relationTo: ['posts'],
- },
- ],
- labels: {
- plural: 'Archives',
- singular: 'Archive',
- },
-}
diff --git a/src/blocks/CallToAction/Component.tsx b/src/blocks/CallToAction/Component.tsx
deleted file mode 100644
index 8b1d44d..0000000
--- a/src/blocks/CallToAction/Component.tsx
+++ /dev/null
@@ -1,24 +0,0 @@
-// @ts-nocheck
-import React from 'react'
-
-import type { CallToActionBlock as CTABlockProps } from '@/payload-types'
-
-import RichText from '@/components/RichText'
-import { CMSLink } from '@/components/Link'
-
-export const CallToActionBlock: React.FC = ({ links, richText }) => {
- return (
-
-
-
- {richText && }
-
-
- {(links || []).map(({ link }, i) => {
- return
- })}
-
-
-
- )
-}
diff --git a/src/blocks/CallToAction/config.ts b/src/blocks/CallToAction/config.ts
deleted file mode 100644
index f4ffa77..0000000
--- a/src/blocks/CallToAction/config.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-import type { Block } from 'payload'
-
-import {
- FixedToolbarFeature,
- HeadingFeature,
- InlineToolbarFeature,
- lexicalEditor,
-} from '@payloadcms/richtext-lexical'
-
-import { linkGroup } from '../../fields/linkGroup'
-
-export const CallToAction: Block = {
- slug: 'cta',
- interfaceName: 'CallToActionBlock',
- fields: [
- {
- name: 'richText',
- type: 'richText',
- editor: lexicalEditor({
- features: ({ rootFeatures }) => {
- return [
- ...rootFeatures,
- HeadingFeature({ enabledHeadingSizes: ['h1', 'h2', 'h3', 'h4'] }),
- FixedToolbarFeature(),
- InlineToolbarFeature(),
- ]
- },
- }),
- label: false,
- },
- linkGroup({
- appearances: ['default', 'outline'],
- overrides: {
- maxRows: 2,
- },
- }),
- ],
- labels: {
- plural: 'Calls to Action',
- singular: 'Call to Action',
- },
-}
diff --git a/src/blocks/Content/Component.tsx b/src/blocks/Content/Component.tsx
deleted file mode 100644
index bc7c731..0000000
--- a/src/blocks/Content/Component.tsx
+++ /dev/null
@@ -1,44 +0,0 @@
-// @ts-nocheck
-import { cn } from '@/utilities/ui'
-import React from 'react'
-import RichText from '@/components/RichText'
-
-import type { ContentBlock as ContentBlockProps } from '@/payload-types'
-
-import { CMSLink } from '../../components/Link'
-
-export const ContentBlock: React.FC = (props) => {
- const { columns } = props
-
- const colsSpanClasses = {
- full: '12',
- half: '6',
- oneThird: '4',
- twoThirds: '8',
- }
-
- return (
-
-
- {columns &&
- columns.length > 0 &&
- columns.map((col, index) => {
- const { enableLink, link, richText, size } = col
-
- return (
-
- {richText && }
-
- {enableLink && }
-
- )
- })}
-
-
- )
-}
diff --git a/src/blocks/Content/config.ts b/src/blocks/Content/config.ts
deleted file mode 100644
index 5c2fb07..0000000
--- a/src/blocks/Content/config.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-import type { Block, Field } from 'payload'
-
-import {
- FixedToolbarFeature,
- HeadingFeature,
- InlineToolbarFeature,
- lexicalEditor,
-} from '@payloadcms/richtext-lexical'
-
-import { link } from '@/fields/link'
-
-const columnFields: Field[] = [
- {
- name: 'size',
- type: 'select',
- defaultValue: 'oneThird',
- options: [
- {
- label: 'One Third',
- value: 'oneThird',
- },
- {
- label: 'Half',
- value: 'half',
- },
- {
- label: 'Two Thirds',
- value: 'twoThirds',
- },
- {
- label: 'Full',
- value: 'full',
- },
- ],
- },
- {
- name: 'richText',
- type: 'richText',
- editor: lexicalEditor({
- features: ({ rootFeatures }) => {
- return [
- ...rootFeatures,
- HeadingFeature({ enabledHeadingSizes: ['h2', 'h3', 'h4'] }),
- FixedToolbarFeature(),
- InlineToolbarFeature(),
- ]
- },
- }),
- label: false,
- },
- {
- name: 'enableLink',
- type: 'checkbox',
- },
- link({
- overrides: {
- admin: {
- condition: (_data, siblingData) => {
- return Boolean(siblingData?.enableLink)
- },
- },
- },
- }),
-]
-
-export const Content: Block = {
- slug: 'content',
- interfaceName: 'ContentBlock',
- fields: [
- {
- name: 'columns',
- type: 'array',
- admin: {
- initCollapsed: true,
- },
- fields: columnFields,
- },
- ],
-}
diff --git a/src/blocks/FDAlternateHeroBlock/Component.tsx b/src/blocks/FDAlternateHeroBlock/Component.tsx
index 49eec4b..2ff0403 100644
--- a/src/blocks/FDAlternateHeroBlock/Component.tsx
+++ b/src/blocks/FDAlternateHeroBlock/Component.tsx
@@ -2,6 +2,7 @@ import React from 'react'
import type { FDAlternateHeroBlock as Props, Media } from '@/payload-types'
import { FDImage } from '@/components/FDImage'
import { FDButton } from '@/components/FDButton'
+import { fdContainer, fdSepiaOverlay} from '@/utilities/fdTheme'
const overlayMap: Record = {
none: '',
@@ -9,7 +10,7 @@ const overlayMap: Record = {
navyMedium: 'bg-fd-navy/40',
yellowLight: 'bg-fd-yellow/20',
yellowMedium:'bg-fd-yellow/40',
- sepia: 'bg-[#8B7D3C]/30',
+ sepia: fdSepiaOverlay,
blackLight: 'bg-black/20',
blackMedium: 'bg-black/40',
}
@@ -50,7 +51,7 @@ export const FDAlternateHeroBlockComponent: React.FC = ({
return (
{/* Centered content */}
-
+
{heading}
diff --git a/src/blocks/FDCardGridBlock/Component.tsx b/src/blocks/FDCardGridBlock/Component.tsx
index cc52009..1308411 100644
--- a/src/blocks/FDCardGridBlock/Component.tsx
+++ b/src/blocks/FDCardGridBlock/Component.tsx
@@ -1,5 +1,6 @@
import React from 'react'
import type { FDCardGridBlock as FDCardGridBlockProps } from '@/payload-types'
+import { fdCardRadius as cardRadius, fdContainer} from '@/utilities/fdTheme'
const cardStyleMap: Record<
string,
@@ -64,7 +65,6 @@ const styleClassMap: Record
= {
}
/* Priority #5: Responsive radius constant */
-const cardRadius = 'rounded-[32px] md:rounded-[50px] lg:rounded-[70px]'
export const FDCardGridBlockComponent: React.FC = ({
layout = '1-1-1',
@@ -79,7 +79,7 @@ export const FDCardGridBlockComponent: React.FC = ({
return (
-
+
{cards?.map((card, index) => {
const mode = card.displayMode || 'content'
@@ -117,7 +117,7 @@ export const FDCardGridBlockComponent: React.FC
= ({
>
{card.heading && (
{card.heading}
diff --git a/src/blocks/FDCodeEmbedBlock/Component.tsx b/src/blocks/FDCodeEmbedBlock/Component.tsx
index 96505a4..f6bb18b 100644
--- a/src/blocks/FDCodeEmbedBlock/Component.tsx
+++ b/src/blocks/FDCodeEmbedBlock/Component.tsx
@@ -2,6 +2,7 @@
import React, { useEffect, useRef } from 'react'
import type { FDCodeEmbedBlock as FDCodeEmbedBlockProps } from '@/payload-types'
+import { fdCardRadius as cardRadius } from '@/utilities/fdTheme'
const maxWidthClasses: Record = {
default: 'max-w-[1200px]',
@@ -20,7 +21,6 @@ const bgClasses: Record = {
}
/* Priority #5: Responsive radius for embed card wrappers */
-const cardRadius = 'rounded-[32px] md:rounded-[50px] lg:rounded-[70px]'
export const FDCodeEmbedBlockComponent: React.FC = ({
heading,
diff --git a/src/blocks/FDContactBlock/Component.tsx b/src/blocks/FDContactBlock/Component.tsx
index e1d96fb..062bb63 100644
--- a/src/blocks/FDContactBlock/Component.tsx
+++ b/src/blocks/FDContactBlock/Component.tsx
@@ -1,6 +1,7 @@
import React from 'react'
import type { FDContactBlock as FDContactBlockProps, Media } from '@/payload-types'
import { FDImage } from '@/components/FDImage'
+import { fdContainer } from '@/utilities/fdTheme'
/* Smaller radius for compact contact method images — the one exception per Jeffrey */
const imageRadius = 'rounded-[16px] md:rounded-[24px] lg:rounded-[30px]'
@@ -12,7 +13,7 @@ export const FDContactBlockComponent: React.FC = ({
}) => {
return (
-
+
{heading}
diff --git a/src/blocks/FDContactFormBlock/Component.tsx b/src/blocks/FDContactFormBlock/Component.tsx
index 890a1f7..5aab61b 100644
--- a/src/blocks/FDContactFormBlock/Component.tsx
+++ b/src/blocks/FDContactFormBlock/Component.tsx
@@ -5,6 +5,7 @@ import type { FDContactFormBlock as FDContactFormBlockProps } from '@/payload-ty
import type { Media } from '@/payload-types'
import { FDImage } from '@/components/FDImage'
import { FDButton } from '@/components/FDButton'
+import { fdCardRadius as cardRadius, fdContainer} from '@/utilities/fdTheme'
/* ------------------------------------------------------------------ */
/* Theme maps */
@@ -14,12 +15,11 @@ const sectionBgMap: Record
= {
white: 'bg-white dark:bg-fd-navy',
gray: 'bg-fd-gray-light dark:bg-fd-navy',
navy: 'bg-fd-navy',
- navyGradient: 'bg-gradient-to-br from-fd-navy via-[#153350] to-fd-navy',
+ navyGradient: 'bg-gradient-to-br from-fd-navy via-fd-navy-700 to-fd-navy',
}
const isExplicitDark = (bg: string) => bg === 'navy' || bg === 'navyGradient'
-const cardRadius = 'rounded-[32px] md:rounded-[50px] lg:rounded-[70px]'
/* ------------------------------------------------------------------ */
/* Component */
@@ -280,7 +280,7 @@ export const FDContactFormBlockComponent: React.FC = ({
if (status === 'sent') {
return (
-
+