diff --git a/src/app/(marketing)/about/page.tsx b/src/app/(marketing)/about/page.tsx index ca4f9bb..c426dec 100644 --- a/src/app/(marketing)/about/page.tsx +++ b/src/app/(marketing)/about/page.tsx @@ -1,7 +1,332 @@ import type { Metadata } from "next"; -import Image from "next/image"; import Link from "next/link"; -import { Breadcrumb } from "@/components/marketing/Breadcrumb"; +import { Fraunces, Newsreader, JetBrains_Mono } from "next/font/google"; +import { AboutScrollReveal } from "@/components/marketing/AboutScrollReveal"; + +// ── Fonts loaded only for this page ────────────────────────────── +const fraunces = Fraunces({ + subsets: ["latin"], + variable: "--font-fraunces", + weight: ["300", "400", "500", "600"], + style: ["normal", "italic"], + display: "swap", +}); +const newsreader = Newsreader({ + subsets: ["latin"], + variable: "--font-newsreader", + weight: ["300", "400", "500", "600"], + style: ["normal", "italic"], + display: "swap", +}); +const jetbrainsMono = JetBrains_Mono({ + subsets: ["latin"], + variable: "--font-jetbrains", + weight: ["400", "500"], + display: "swap", +}); + +// ── Page-level styles (design tokens + letter layout) ───────────── +const CSS = ` +.tia-letter { + --paper: #f7f1e6; + --surface: #fbf6ea; + --ink: #1f1b16; + --ink-soft: #5a5048; + --ink-faint: #8a7e6f; + --rule: #ddd2bc; + --rule-soft: #e8ded0; + --accent: #c98a2b; + --accent-2: #b8503e; + --mani-bg: #1f1b16; + --mani-fg: #f3ead9; + --fd: var(--font-fraunces, Georgia, serif); + --fb: var(--font-newsreader, Georgia, serif); + --fl: var(--font-jetbrains, ui-monospace, monospace); + --fh: var(--font-caveat, cursive); + --dw: 400; + --ds: -0.02em; + --r: 18px; + --measure: 39rem; + + background: var(--paper); + color: var(--ink); + font-family: var(--fb); + font-size: 19px; + line-height: 1.75; + -webkit-font-smoothing: antialiased; +} + +/* subtle paper grain */ +.tia-letter::after { + content: ''; + position: fixed; inset: 0; pointer-events: none; z-index: 1; + background-image: repeating-linear-gradient(0deg,rgba(31,27,22,.016) 0 1px,transparent 1px 3px); +} + +/* ── hero ── */ +.tia-hero { + padding: clamp(52px,10vw,104px) clamp(20px,5vw,56px) clamp(8px,2vw,24px); + text-align: center; + position: relative; z-index: 2; +} +.tia-eyebrow { + display: inline-flex; align-items: center; gap: 10px; + font-family: var(--fl); font-size: 11px; letter-spacing: .22em; + text-transform: uppercase; color: var(--accent); margin: 0 0 22px; +} +.tia-eyebrow::before,.tia-eyebrow::after { + content: ''; width: 24px; height: 1px; background: var(--accent); +} +.tia-hero h1 { + font-family: var(--fd); font-weight: var(--dw); + font-size: clamp(2.7rem,7vw,4.6rem); line-height: 1.02; + letter-spacing: var(--ds); margin: 0; color: var(--ink); + font-style: italic; text-wrap: balance; +} +.tia-hero h1 .hand { + font-family: var(--fh); color: var(--accent-2); + font-weight: 600; font-size: 1.04em; font-style: normal; +} + +/* ── letter body ── */ +.tia-body { + position: relative; z-index: 2; + max-width: 1120px; margin: 0 auto; + padding: clamp(48px,9vw,96px) clamp(20px,5vw,56px) 0; +} +.tia-col { + max-width: var(--measure); margin: 0 auto; display: flow-root; +} +.tia-col p { margin: 0 0 1em; } +.tia-col p:last-child { margin-bottom: 0; } +.tia-col strong { font-weight: 600; color: var(--ink); } +.tia-col em { font-style: italic; } + +/* drop cap */ +.tia-dropcap::first-letter { + font-family: var(--fd); font-weight: 600; float: left; + font-size: 4.6em; line-height: .78; padding: 8px 14px 0 0; + color: var(--accent-2); font-style: italic; +} + +/* display highlight line */ +.tia-hl { + font-family: var(--fd); font-weight: var(--dw); + font-size: clamp(1.4rem,2.8vw,1.78rem); line-height: 1.28; + letter-spacing: var(--ds); color: var(--accent-2); + margin: 1em 0 0; font-style: italic; +} + +/* pull quotes */ +.tia-pull { + max-width: var(--measure); margin: 2em auto; + font-family: var(--fd); font-weight: var(--dw); + font-size: clamp(1.7rem,3.6vw,2.5rem); line-height: 1.16; + letter-spacing: var(--ds); color: var(--ink); + text-wrap: balance; padding-left: 28px; + border-left: 2px solid var(--accent); font-style: italic; +} +.tia-pull.accent { color: var(--accent-2); } +.tia-pull.center { + text-align: center; padding-left: 0; border-left: 0; + border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); + padding: 1.1em 0; +} + +/* quiet sub-headings */ +.tia-subhead { + max-width: var(--measure); margin: 2.4em auto .85em; + padding-top: 1em; border-top: 1px solid var(--rule-soft); + font-family: var(--fd); font-weight: var(--dw); + font-size: clamp(1.45rem,3vw,1.95rem); line-height: 1.14; + letter-spacing: var(--ds); color: var(--ink); font-style: italic; +} + +/* floated photo frame */ +.tia-float { + float: right; width: 250px; margin: 4px 0 18px 34px; +} +@media (max-width: 600px) { + .tia-float { float: none; width: min(290px,80vw); margin: 0 auto 22px; display: block; } +} +.tia-frame { + position: relative; background: var(--surface); + padding: 15px 15px 18px; border: 1px solid var(--rule); + box-shadow: 0 22px 50px -20px rgba(31,27,22,.34), 0 2px 6px rgba(31,27,22,.08); + transform: rotate(-1.6deg); +} +.tia-frame img { display: block; width: 100%; height: auto; } +.tia-tape { + position: absolute; top: -12px; left: 50%; + transform: translateX(-50%) rotate(-3deg); + width: 120px; height: 26px; + background: rgba(201,138,43,.6); opacity: .8; + box-shadow: 0 1px 3px rgba(0,0,0,.1); +} +.tia-float figcaption { + font-family: var(--fh); text-align: center; + margin-top: 10px; font-size: 1.2rem; color: var(--ink-soft); +} + +/* callout card */ +.tia-callout { + max-width: var(--measure); margin: 2.4em auto; + background: var(--surface); border: 1px solid var(--rule); + border-radius: var(--r); padding: clamp(24px,4vw,38px); + position: relative; +} +.tia-callout::before { + content: '“'; position: absolute; top: -.18em; left: .22em; + font-family: var(--fd); font-style: italic; font-size: 5rem; + color: rgba(201,138,43,.4); line-height: 1; +} +.tia-callout p { + font-size: 1.12rem; color: var(--ink-soft); + margin: 0 0 .8em; padding-left: 1.6em; +} +.tia-callout p:last-child { margin-bottom: 0; } +.tia-callout .place { + color: var(--accent); font-weight: 600; + font-family: var(--fh); font-size: 1.3em; +} + +/* ── manifesto (dark section) ── */ +.tia-mani { + background: var(--mani-bg); color: var(--mani-fg); + position: relative; z-index: 2; + margin: clamp(56px,9vw,104px) 0 0; + padding: clamp(56px,9vw,104px) clamp(20px,5vw,56px); +} +.tia-mani-inner { max-width: 920px; margin: 0 auto; } +.tia-mani .me { + font-family: var(--fl); font-size: 11px; letter-spacing: .24em; + text-transform: uppercase; color: rgba(201,138,43,.9); + display: block; margin: 0 0 28px; +} +.tia-mani .mi { + font-family: var(--fd); font-weight: var(--dw); + font-size: clamp(1.7rem,4vw,2.6rem); line-height: 1.18; + letter-spacing: var(--ds); margin: 0 0 .6em; font-style: italic; + color: var(--mani-fg); text-wrap: balance; +} +.tia-mani .mi em { color: rgba(201,138,43,.9); } +.tia-mani .ms { + font-size: 1.15rem; color: rgba(243,234,217,.72); + max-width: 38rem; margin: 0 0 44px; +} +.tia-mani .ms strong { color: var(--mani-fg); font-weight: 600; } + +/* creed list */ +.tia-creed { + list-style: none; max-width: var(--measure); + margin: 1.7em auto; padding: 0; + border-top: 1px solid var(--rule); +} +.tia-creed li { + display: flex; align-items: baseline; gap: 16px; + padding: 14px 2px; border-bottom: 1px solid var(--rule-soft); +} +.tia-creed .n { + font-family: var(--fl); font-size: 11px; letter-spacing: .12em; + color: var(--accent); min-width: 24px; +} +.tia-creed .t { + font-family: var(--fb); font-size: 1.12rem; line-height: 1.5; color: var(--ink); +} +.tia-mani .mf { + margin: 44px 0 0; font-size: 1.18rem; + color: rgba(243,234,217,.86); max-width: 40rem; +} +.tia-mani .mf strong { color: var(--mani-fg); font-weight: 600; } + +/* ── closing / signature ── */ +.tia-closing { + max-width: var(--measure); margin: 2.6em auto 0; text-align: center; + font-family: var(--fd); font-weight: var(--dw); + font-size: clamp(1.5rem,3.2vw,2.1rem); line-height: 1.22; + letter-spacing: var(--ds); color: var(--accent-2); font-style: italic; +} +.tia-divider { + max-width: var(--measure); margin: 2.6em auto; text-align: center; + line-height: 1; color: var(--accent); font-size: 1.1rem; +} +.tia-sign { max-width: var(--measure); margin: 0 auto; } +.tia-sign .thanks { color: var(--ink-soft); margin: 0 0 1.4em; } +.tia-sign .welcome { + font-family: var(--fd); font-weight: var(--dw); + font-size: clamp(1.5rem,3vw,2rem); letter-spacing: var(--ds); + margin: 0 0 .2em; color: var(--ink); +} +.tia-sign .warmth { color: var(--ink-faint); margin: 0 0 2em; } +.tia-sign-row { display: flex; align-items: center; gap: 22px; } +.tia-sign-row .names { + font-family: var(--fh); font-size: 2.1rem; line-height: 1; color: var(--ink); margin: 0; +} +.tia-sign-row .role { + font-family: var(--fl); font-size: 11px; letter-spacing: .12em; + text-transform: uppercase; color: var(--ink-faint); margin: 8px 0 0; +} + +/* P.S. box */ +.tia-ps { + max-width: var(--measure); margin: 2.6em auto 0; display: flow-root; + background: rgba(201,138,43,.09); border: 1px solid var(--rule); + border-radius: var(--r); padding: 24px 26px; + font-style: italic; color: var(--ink-soft); font-size: 1.04rem; line-height: 1.62; +} +.tia-ps-photo { + float: left; width: 78px; height: 78px; border-radius: 50%; + object-fit: cover; object-position: center 15%; + margin: 2px 20px 8px 0; + border: 2px solid var(--rule); + shape-outside: circle(52%); + box-shadow: 0 6px 16px -8px rgba(31,27,22,.4); +} +.tia-ps b { + font-style: normal; font-family: var(--fl); font-size: 11px; + letter-spacing: .14em; text-transform: uppercase; + color: var(--accent); margin-right: 6px; font-weight: 500; +} + +/* CTA */ +.tia-cta { + text-align: center; max-width: var(--measure); + margin: clamp(56px,9vw,96px) auto 0; + padding-bottom: clamp(56px,9vw,96px); +} +.tia-cta .ck { + font-family: var(--fl); font-size: 11px; letter-spacing: .2em; + text-transform: uppercase; color: var(--ink-faint); margin: 0 0 18px; +} +.tia-cta h3 { + font-family: var(--fd); font-weight: var(--dw); + font-size: clamp(1.7rem,4vw,2.4rem); letter-spacing: var(--ds); + margin: 0 0 28px; color: var(--ink); font-style: italic; text-wrap: balance; +} +.tia-cta .big { + display: inline-flex; align-items: center; gap: 12px; + background: var(--accent); color: #2a1c06; border: 0; + font-family: var(--fb); font-weight: 500; font-size: 1.05rem; + padding: 16px 32px; border-radius: var(--r); text-decoration: none; + box-shadow: 0 12px 30px -12px rgba(201,138,43,.7); + transition: transform .2s, filter .2s; +} +.tia-cta .big:hover { transform: translateY(-2px); filter: brightness(.96); } +.tia-cta .fine { font-size: .85rem; color: var(--ink-faint); margin: 16px 0 0; } + +/* text helpers */ +.tia-soft { color: var(--ink-soft); } +.tia-strong { font-weight: 600; color: var(--ink); } + +/* scroll reveal */ +.tia-reveal { + transition: opacity .8s cubic-bezier(.2,.7,.2,1), transform .8s cubic-bezier(.2,.7,.2,1); +} +.tia-reveal.tia-pre { opacity: 0; transform: translateY(18px); } +@media (prefers-reduced-motion: reduce) { + .tia-reveal.tia-pre { opacity: 1 !important; transform: none !important; } +} +`; export const metadata: Metadata = { title: "About Tia", @@ -15,151 +340,147 @@ export const metadata: Metadata = { }, }; +const CREED = [ + "Our vaccination schedule follows the IAP chart.", + "We don't sell your data.", + "We don't run ads.", + "We don't build engagement loops.", + "We don't treat your child as a product.", + "We build to protect memories, not compete for attention.", +]; + export default function AboutPage() { return ( -
+
+ {/* Page-specific design system — inline so it's scoped and SSR-safe */} + {/* eslint-disable-next-line react/no-danger */} +