Swap to shadcn components and polish the design
Components (added via the shadcn MCP/CLI): - Navbar: NavigationMenu on desktop, Sheet on mobile; drops Navbar.module.css and the hand-rolled slide-down menu - Buttons: shadcn Button via a shared ContactButtons component (replaces Button.js and its CSS module) - Card for price cards, testimonials, the business block and plan; Table for prices; Input/Textarea/Label/NativeSelect/RadioGroup and Alert in the quote form; Separator in the footer - Components import cn from @/lib/utils (not the new "cn" package); accordion moved to the unified radix-ui package Design tweaks: - Geist Sans is actually applied (font variables were on <body>, but Tailwind reads them on <html>, so the site fell back to system fonts) - Theme primary set to the existing brand blue; slightly smaller radius - Balanced, tighter heading tracking; muted secondary text - 44px contact buttons; 16px FAQ text; tighter homepage spacing - Full-width selects with 16px text on phones (no iOS zoom) Co-Authored-By: Claude Opus 5.5 <[email protected]>
This commit is contained in:
1 parent
f6846ebaae
commit
f916f058fc
36 files changed
+2888
-823
No files matched your search
@@ -0,0 +1,56 @@
|
||||
import Link from "next/link";
|
||||
import { MessageCircle, MessageSquare, Phone } from "lucide-react";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { cn } from "@/lib/utils";
|
||||
import { business, links } from "@/lib/site";
|
||||
|
||||
// Call / Text (and optionally WhatsApp and Get a quote) buttons.
|
||||
// Use onDark over photos or the blue band, where the default styles lack contrast.
|
||||
export default function ContactButtons({
|
||||
onDark = false,
|
||||
textLabel = "Text me",
|
||||
whatsapp = false,
|
||||
quoteHref,
|
||||
className,
|
||||
}) {
|
||||
// Larger than shadcn's lg size: these are the main tap targets on phones.
|
||||
const base = "h-11 px-6 text-base";
|
||||
const secondary = onDark
|
||||
? "border-white bg-transparent text-white hover:bg-white/10 hover:text-white"
|
||||
: "border-primary text-primary hover:text-primary";
|
||||
|
||||
return (
|
||||
<div className={cn("flex flex-col gap-3 sm:flex-row sm:flex-wrap", className)}>
|
||||
<Button
|
||||
asChild
|
||||
size="lg"
|
||||
variant={onDark ? "secondary" : "default"}
|
||||
className={base}
|
||||
>
|
||||
<a href={links.tel}>
|
||||
<Phone aria-hidden="true" />
|
||||
Call {business.phone}
|
||||
</a>
|
||||
</Button>
|
||||
<Button asChild size="lg" variant="outline" className={cn(base, secondary)}>
|
||||
<a href={links.sms}>
|
||||
<MessageSquare aria-hidden="true" />
|
||||
{textLabel}
|
||||
</a>
|
||||
</Button>
|
||||
{whatsapp && (
|
||||
<Button asChild size="lg" variant="outline" className={cn(base, secondary)}>
|
||||
<a href={links.whatsapp}>
|
||||
<MessageCircle aria-hidden="true" />
|
||||
WhatsApp
|
||||
</a>
|
||||
</Button>
|
||||
)}
|
||||
{quoteHref && (
|
||||
<Button asChild size="lg" variant="outline" className={cn(base, secondary)}>
|
||||
<Link href={quoteHref}>Get a quote</Link>
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in new issue
Block a user