diff --git a/app/blog/page.tsx b/app/blog/page.tsx index f680fadd..783ab7ff 100644 --- a/app/blog/page.tsx +++ b/app/blog/page.tsx @@ -65,10 +65,7 @@ export default async function Blog() {

- + {post.title}

@@ -90,7 +87,7 @@ export default async function Blog() { Read more

Email

- + info@botsmann.com

@@ -87,7 +87,7 @@ export default function ContactPage() { solutions in action.

diff --git a/app/globals.css b/app/globals.css index fa791113..07b31944 100644 --- a/app/globals.css +++ b/app/globals.css @@ -2,14 +2,57 @@ @tailwind components; @tailwind utilities; +/* + * ============================================================================ + * BOTSMANN DESIGN TOKENS — SINGLE SOURCE OF TRUTH + * ============================================================================ + * Identity: serious, credible AI professionals — counsel you'd trust, not a + * toy chatbot. Editorial ink + one authoritative warm accent (notarial ochre). + * No generic "AI gradient" blue/purple. Typography (serif display) carries it. + * + * Every color/radius/shadow used in the product is defined HERE. tailwind.config + * maps utilities to these vars; components consume semantic classes only. + * Retheme = edit this block. Nothing else. + */ :root { - --foreground-rgb: 0, 0, 0; - --background-rgb: 255, 255, 255; + /* Tier 1 — Primitive palette (raw values; never used directly by components) */ + --primitive-ink-950: #1a1714; /* near-black warm ink — text & wordmark */ + --primitive-ink-700: #4a423b; + --primitive-ink-500: #6f655c; /* muted body copy */ + --primitive-ochre-600: #b45309; /* authoritative warm accent */ + --primitive-ochre-700: #92400e; /* accent hover / pressed */ + --primitive-ochre-50: #fdf6ec; /* accent tint surface */ + --primitive-paper: #faf8f4; /* warm off-white page */ + --primitive-surface: #ffffff; + --primitive-border: #e8e2d8; /* warm hairline */ + + /* Tier 2 — Semantic tokens (what things MEAN — always use these) */ + --color-brand: var(--primitive-ink-950); /* the Botsmann mark / authority */ + --color-action: var(--primitive-ochre-600); /* primary CTAs, links, accents */ + --color-action-hover: var(--primitive-ochre-700); + --color-action-tint: var(--primitive-ochre-50); + --color-bg: var(--primitive-paper); + --color-surface: var(--primitive-surface); + --color-border: var(--primitive-border); + --color-text: var(--primitive-ink-950); + --color-text-muted: var(--primitive-ink-500); + + /* Radii — restrained, editorial (not bubbly) */ + --radius-card: 12px; + --radius-btn: 8px; + + /* Shadows — subtle, paper-like (no glassmorphism glow) */ + --shadow-card: 0 1px 2px rgb(26 23 20 / 0.04), 0 1px 3px rgb(26 23 20 / 0.06); + --shadow-card-hover: 0 4px 12px rgb(26 23 20 / 0.08), 0 2px 4px rgb(26 23 20 / 0.06); + + /* Back-compat for any legacy rgb() consumers */ + --foreground-rgb: 26, 23, 20; + --background-rgb: 250, 248, 244; } body { - color: rgb(var(--foreground-rgb)); - background: rgb(var(--background-rgb)); + color: var(--color-text); + background: var(--color-bg); } /* Smooth scrolling for anchor links */ @@ -24,29 +67,30 @@ html { } @layer base { + /* Serif display carries the editorial identity for headings & wordmark */ h1 { - @apply text-4xl font-semibold tracking-tight; + @apply font-serif text-4xl font-semibold tracking-tight text-ink; } h2 { - @apply text-3xl font-medium tracking-tight; + @apply font-serif text-3xl font-semibold tracking-tight text-ink; } h3 { - @apply text-2xl font-medium; + @apply text-2xl font-semibold text-ink; } p { - @apply text-gray-600; + @apply text-ink-muted; } } @layer components { .btn-primary { - @apply rounded-md bg-green-600 px-4 py-2 text-sm md:text-base font-medium text-white hover:bg-opacity-90 transition-all shadow-sm hover:shadow md:px-5 md:py-2.5 focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-opacity-50; + @apply rounded-btn bg-action px-4 py-2 text-sm md:text-base font-medium text-white hover:bg-action-hover transition-colors shadow-card hover:shadow-card-hover md:px-5 md:py-2.5 focus:outline-none focus:ring-2 focus:ring-action focus:ring-opacity-40; } .btn-secondary { - @apply rounded-md border border-gray-200 px-4 py-2 text-sm md:text-base font-medium text-gray-600 hover:bg-gray-50 transition-all shadow-sm hover:shadow-md md:px-5 md:py-2.5 focus:outline-none focus:ring-2 focus:ring-gray-200 focus:ring-opacity-50; + @apply rounded-btn border border-edge px-4 py-2 text-sm md:text-base font-medium text-ink hover:bg-action-tint transition-colors shadow-card hover:shadow-card-hover md:px-5 md:py-2.5 focus:outline-none focus:ring-2 focus:ring-action focus:ring-opacity-20; } .input-primary { - @apply w-full rounded-xl border-2 border-gray-200 bg-transparent px-4 py-3 text-gray-900 outline-none transition-colors focus:border-green-600 focus:ring-2 focus:ring-green-100; + @apply w-full rounded-btn border border-edge bg-surface px-4 py-3 text-ink outline-none transition-colors focus:border-action focus:ring-2 focus:ring-action focus:ring-opacity-20; } } diff --git a/app/layout.tsx b/app/layout.tsx index 83e73b44..5af72959 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -5,16 +5,34 @@ import { site } from '@/lib/site'; import './globals.css'; import { Toaster } from 'sonner'; import { Analytics } from '@vercel/analytics/react'; +import { Inter, Fraunces } from 'next/font/google'; + +// Brand typeface: a serif display (Fraunces) carries the editorial / "real +// counsel" identity for headings & wordmark; Inter handles UI/body copy. +// Bound to CSS vars consumed by tailwind.config (font-serif / font-sans). +const sans = Inter({ + subsets: ['latin'], + variable: '--font-sans', + display: 'swap', +}); + +const serif = Fraunces({ + subsets: ['latin'], + weight: ['400', '500', '600', '700'], + style: ['normal', 'italic'], + variable: '--font-serif', + display: 'swap', +}); export const metadata = { - title: `${site.name} - ${site.tagline}`, + title: `${site.name} — ${site.tagline}`, description: site.description, }; export default function RootLayout({ children }: { children: React.ReactNode }) { return ( - - + +
{children}
diff --git a/app/page.tsx b/app/page.tsx index 9feaecf9..cd15df2c 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -7,99 +7,82 @@ import { EnterpriseSection } from '@/components/shared/EnterpriseSection'; export default function HomePage() { return ( -
- {/* Background Effects */} -
-
-
-
- +
{/* Hero Section */} -
-
- - Free to try - No credit card required +
+
+ + Free to try — no credit card required
-

- - Your Private - +

+ Your Private
- - AI Professionals - + AI Professionals

-

- Expert advice from AI doctors, lawyers, and advisors. - - Available 24/7. Completely private. A fraction of the cost. +

+ Considered counsel from AI specialists in law, health, research and more. + + Available around the clock. Wholly private. At a fraction of the cost.

- - Try Now - Free - - - - + Try Now — Free + + + - - Meet Your Professionals - - - - + Meet Your Professionals + + +
{/* Key Benefits */} -
-
-
🔒
-
Complete Privacy
-
Your data never leaves your control
+
+
+
Complete privacy
+
Your data never leaves your control.
-
-
-
24/7 Access
-
Expert guidance whenever you need it
+
+
Always available
+
Expert guidance whenever you need it.
-
-
📄
-
Personalized
-
Upload documents for tailored advice
+
+
Personalised
+
Upload documents for tailored advice.
@@ -107,12 +90,10 @@ export default function HomePage() { {/* Professionals Grid - THE MAIN PRODUCT */}
-

- - Meet Your AI Professionals - +

+ Meet Your AI Professionals

-

+

Choose the expert advisor that matches your needs. Each professional brings specialized knowledge and a unique approach.

@@ -127,7 +108,7 @@ export default function HomePage() {
View All Professionals diff --git a/app/projects/credit/page.tsx b/app/projects/credit/page.tsx index 19b26bd0..07823bba 100644 --- a/app/projects/credit/page.tsx +++ b/app/projects/credit/page.tsx @@ -46,7 +46,7 @@ export default function Credit() {
-
+
1
@@ -59,7 +59,7 @@ export default function Credit() {
-
+
2
@@ -73,7 +73,7 @@ export default function Credit() {
-
+
3
@@ -94,7 +94,7 @@ export default function Credit() {

Contact Us diff --git a/app/projects/page.tsx b/app/projects/page.tsx index 02c0c453..7e5e4ed1 100644 --- a/app/projects/page.tsx +++ b/app/projects/page.tsx @@ -71,7 +71,7 @@ export default function Projects() {

{project.title}

{project.description}

-
+
Learn more
@@ -213,14 +213,14 @@ export default function RecurringFulfillment() {
-
-
+
+
POPULAR

Business

@@ -237,7 +237,7 @@ export default function RecurringFulfillment() { @@ -257,7 +257,7 @@ export default function RecurringFulfillment() { @@ -297,7 +297,7 @@ export default function RecurringFulfillment() {

Contact Us diff --git a/app/projects/techno-capital/page.tsx b/app/projects/techno-capital/page.tsx index 17ea95be..c91ec6c6 100644 --- a/app/projects/techno-capital/page.tsx +++ b/app/projects/techno-capital/page.tsx @@ -30,7 +30,7 @@ export default function TechnoCapital() { {/* Title and Overview */}
- + Coming Soon Investment fund launching 2026 @@ -51,7 +51,7 @@ export default function TechnoCapital() {
  • SubSpace Capital
    -
    +
    1. -
      +
      1
      @@ -314,7 +314,7 @@ export default function TechnoCapital() {
    2. -
      +
      2
      @@ -326,7 +326,7 @@ export default function TechnoCapital() {
    3. -
      +
      3
      @@ -347,7 +347,7 @@ export default function TechnoCapital() {
      • {submitting ? 'Submitting...' : 'Join Waitlist'} diff --git a/app/solutions/page.tsx b/app/solutions/page.tsx index 8d88fbc2..2b2e5251 100644 --- a/app/solutions/page.tsx +++ b/app/solutions/page.tsx @@ -38,7 +38,7 @@ export default function SolutionsPage() {

        Learn more @@ -55,7 +55,7 @@ export default function SolutionsPage() { {/* Businesses */}
        - + Coming Soon
        @@ -71,7 +71,7 @@ export default function SolutionsPage() {

        Learn more @@ -88,7 +88,7 @@ export default function SolutionsPage() { {/* Governments */}
        - + Coming Soon
        @@ -104,7 +104,7 @@ export default function SolutionsPage() {

        Learn more @@ -131,7 +131,7 @@ export default function SolutionsPage() { className="group flex h-full flex-col rounded-xl border border-gray-200 bg-white p-6 shadow-sm transition-shadow hover:shadow-md relative" > {solution.slug !== 'swiss-german-teacher' && ( - + Coming Soon )} @@ -139,7 +139,7 @@ export default function SolutionsPage() {

        {solution.title}

        {solution.overview}

        - + Learn more → @@ -158,7 +158,7 @@ export default function SolutionsPage() {

        Get in Touch diff --git a/components/ConsultationForm.tsx b/components/ConsultationForm.tsx index fbcc00ef..c26daa03 100644 --- a/components/ConsultationForm.tsx +++ b/components/ConsultationForm.tsx @@ -81,7 +81,7 @@ export default function ConsultationForm() {

        @@ -103,7 +103,7 @@ export default function ConsultationForm() { {...register('name', { required: 'Name is required' })} type="text" id="name" - className="mt-1 block w-full rounded-md border-gray-200 bg-white px-3 py-2 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-200 placeholder:text-gray-400 focus:ring-2 focus:ring-openai-green sm:text-sm" + className="mt-1 block w-full rounded-md border-gray-200 bg-white px-3 py-2 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-200 placeholder:text-gray-400 focus:ring-2 focus:ring-action sm:text-sm" /> {errors.name &&

        {errors.name.message}

        }
        @@ -122,7 +122,7 @@ export default function ConsultationForm() { })} type="email" id="email" - className="mt-1 block w-full rounded-md border-gray-200 bg-white px-3 py-2 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-200 placeholder:text-gray-400 focus:ring-2 focus:ring-openai-green sm:text-sm" + className="mt-1 block w-full rounded-md border-gray-200 bg-white px-3 py-2 text-gray-900 shadow-sm ring-1 ring-inset ring-gray-200 placeholder:text-gray-400 focus:ring-2 focus:ring-action sm:text-sm" /> {errors.email &&

        {errors.email.message}

        }
        @@ -135,7 +135,7 @@ export default function ConsultationForm() {