commit 7d585484a6eea62071302ceee6734aceccbbfd7b Author: wangdequan Date: Mon Jul 6 12:12:36 2026 -0400 Initial Paprika Next.js implementation diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..a799dc7 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +DATABASE_URL="postgresql://paprika_app:REPLACE_WITH_SECURE_PASSWORD@127.0.0.1:5432/paprika" +NEXT_PUBLIC_SITE_URL="https://paprikalaw.com" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2eba9b --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +.next/ +node_modules/ +dist/ +coverage/ +.env +.env*.local +*.log +tsconfig.tsbuildinfo +git.txt diff --git a/app/[page]/page.tsx b/app/[page]/page.tsx new file mode 100644 index 0000000..7ccd4a9 --- /dev/null +++ b/app/[page]/page.tsx @@ -0,0 +1,31 @@ +import { notFound } from "next/navigation"; +import { LegacyPage } from "@/components/LegacyPage"; +import { legacyPages, type LegacyPageKey } from "@/lib/legacy-pages"; + +const routablePages = new Set(Object.keys(legacyPages)); +const replacedPages = new Set(["home", "start", "ask", "thanks"]); + +export function generateStaticParams() { + return Object.keys(legacyPages) + .filter((page) => !replacedPages.has(page)) + .map((page) => ({ page })); +} + +export async function generateMetadata({ params }: { params: Promise<{ page: string }> }) { + const { page: pageParam } = await params; + if (!routablePages.has(pageParam)) return {}; + const page = legacyPages[pageParam as LegacyPageKey]; + return { + title: page.title.replace("Paprika - ", "") + }; +} + +export default async function StaticPage({ params }: { params: Promise<{ page: string }> }) { + const { page } = await params; + + if (!routablePages.has(page) || replacedPages.has(page)) { + notFound(); + } + + return ; +} diff --git a/app/api/submissions/route.ts b/app/api/submissions/route.ts new file mode 100644 index 0000000..44e9491 --- /dev/null +++ b/app/api/submissions/route.ts @@ -0,0 +1,33 @@ +import { NextResponse } from "next/server"; +import { ZodError } from "zod"; +import { createSubmission } from "@/lib/submissions"; +import { submissionSchema } from "@/lib/submission-schema"; + +export async function POST(request: Request) { + try { + const payload = await request.json(); + const input = submissionSchema.parse(payload); + const submission = await createSubmission(input); + + return NextResponse.json({ + submission_id: submission.id, + created_at: submission.createdAt.toISOString() + }); + } catch (error) { + if (error instanceof ZodError) { + return NextResponse.json( + { + error: "Validation failed", + issues: error.flatten().fieldErrors + }, + { status: 400 } + ); + } + + console.error("Submission failed", error); + return NextResponse.json( + { error: "Submission could not be saved. Please try again." }, + { status: 500 } + ); + } +} diff --git a/app/ask/page.tsx b/app/ask/page.tsx new file mode 100644 index 0000000..b3ee32a --- /dev/null +++ b/app/ask/page.tsx @@ -0,0 +1,29 @@ +import Link from "next/link"; +import { SubmissionForm } from "@/components/forms/SubmissionForm"; + +export const metadata = { + title: "Ask a Question" +}; + +export default function AskPage() { + return ( + <> +
+

Ask a question.

+

+ Not ready to submit your full profile yet? Send us a quick question. We will help you + understand whether Paprika may be a fit. +

+
+ + Start Here + + + Ask a Question + +
+
+ + + ); +} diff --git a/app/globals.css b/app/globals.css new file mode 100644 index 0000000..04d0352 --- /dev/null +++ b/app/globals.css @@ -0,0 +1,2263 @@ + + :root { + --red: #d9432f; + --deep-red: #a9372d; + --ink: #241b14; + --text: #5c5249; + --muted: #8d847a; + --line: #e9e1d8; + --paper: #fffdfa; + --panel: rgba(255,255,255,.86); + --green: #4f7d61; + --header-text: #41505a; + } + + * { box-sizing: border-box; } + + html { + background: var(--paper); + color: var(--ink); + font-family: Avenir, "Avenir Next", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + letter-spacing: 0; + } + + body { + margin: 0; + min-height: 100vh; + background: + linear-gradient(rgba(38,27,19,.032) 1px, transparent 1px), + linear-gradient(90deg, rgba(38,27,19,.032) 1px, transparent 1px), + radial-gradient(circle at 50% 34%, rgba(255,255,255,.98) 0 34%, rgba(255,255,255,.64) 52%, rgba(255,253,250,0) 72%), + var(--paper); + background-size: 112px 112px, 112px 112px, 100% 920px, auto; + background-repeat: repeat, repeat, no-repeat, repeat; + } + + .site-header { + height: 92px; + display: flex; + align-items: center; + gap: 18px; + padding: 0 clamp(72px, 6vw, 92px); + border-bottom: 1px solid rgba(38,27,19,.08); + background: rgba(255,253,250,.94); + position: sticky; + top: 0; + z-index: 20; + backdrop-filter: blur(14px); + } + + .brand { + flex: 0 0 auto; + display: flex; + align-items: center; + gap: 22px; + text-decoration: none; + } + + .brand-name { + color: var(--red); + font-family: "Avenir Next", Avenir, sans-serif; + font-size: clamp(39px, 4vw, 50px); + line-height: .9; + font-weight: 900; + letter-spacing: -.04em; + } + + .brand-tag { + max-width: 238px; + color: var(--header-text); + font-size: 15px; + line-height: 1.13; + font-weight: 650; + } + + .nav { + margin-left: clamp(44px, 4.4vw, 60px); + display: flex; + align-items: center; + gap: clamp(12px, 1.25vw, 18px); + color: var(--header-text); + font-size: 15px; + font-weight: 720; + white-space: nowrap; + } + + .nav a { + color: inherit; + text-decoration: none; + } + + .nav a.active { + color: var(--deep-red); + } + + .nav-dropdown { + position: relative; + display: inline-flex; + align-items: center; + min-height: 50px; + } + + .nav-trigger { + display: inline-flex; + align-items: center; + gap: 7px; + color: inherit; + text-decoration: none; + } + + .nav-chevron { + font-size: 16px; + line-height: 1; + transform: translateY(-1px); + } + + .resources-menu { + position: absolute; + top: calc(100% + 15px); + left: 50%; + width: 285px; + padding: 20px 22px; + border-radius: 14px; + border: 1px solid rgba(38,27,19,.1); + background: rgba(255,253,250,.98); + box-shadow: 0 28px 70px rgba(48,35,24,.14); + opacity: 0; + visibility: hidden; + transform: translate(-50%, 8px); + transition: opacity .16s ease, transform .16s ease, visibility .16s ease; + white-space: normal; + } + + .nav-dropdown:hover .resources-menu, + .nav-dropdown:focus-within .resources-menu { + opacity: 1; + visibility: visible; + transform: translate(-50%, 0); + } + + .resources-menu a { + display: block; + padding: 0; + color: var(--ink); + text-decoration: none; + } + + .resources-menu a + a { + margin-top: 18px; + } + + .resources-menu strong { + display: block; + color: var(--ink); + font-size: 16px; + line-height: 1.22; + font-weight: 800; + letter-spacing: 0; + } + + .resources-menu span { + display: block; + margin-top: 4px; + color: #9b7c5c; + font-size: 13px; + line-height: 1.3; + font-weight: 400; + } + + .resources-menu a:hover strong { + color: var(--deep-red); + } + + .start { + margin-left: 4px; + height: 50px; + padding: 0 22px 0 24px; + border-radius: 999px; + display: inline-flex; + align-items: center; + gap: 13px; + background: var(--red); + color: #fffdfa !important; + box-shadow: 0 20px 42px rgba(217,67,47,.18); + } + + .start .button-arrow { + font-size: 24px; + line-height: 1; + transform: translateY(-1px); + } + + main { + min-height: 72vh; + } + + .hero { + width: min(1040px, calc(100% - 56px)); + margin: 0 auto; + padding: clamp(86px, 10vh, 132px) 0 0; + text-align: center; + } + + .hero.subpage { + padding-top: clamp(72px, 9vh, 112px); + } + + h1 { + max-width: 980px; + margin: 0 auto; + font-family: "Avenir Next", Avenir, sans-serif; + font-size: clamp(54px, 6.3vw, 74px); + line-height: .99; + font-weight: 780; + letter-spacing: -.014em; + color: #211812; + } + + .subpage h1 { + max-width: 900px; + font-size: clamp(44px, 5.2vw, 66px); + line-height: 1.04; + } + + .judging-hero h1 { + max-width: 960px; + font-size: clamp(44px, 5.2vw, 66px); + } + + .hero-kicker { + margin: 0 0 22px; + color: var(--red); + font-size: 14px; + font-weight: 900; + letter-spacing: .14em; + text-transform: uppercase; + } + + h1 em, + .time-line { + color: var(--deep-red); + font-family: Georgia, "Times New Roman", serif; + font-weight: 700; + font-style: italic; + letter-spacing: -.02em; + } + + h1 .accent { + color: var(--red); + font-family: Georgia, "Times New Roman", serif; + font-weight: 700; + font-style: italic; + letter-spacing: -.02em; + } + + .subhead { + max-width: 850px; + margin: 38px auto 0; + color: var(--text); + font-size: clamp(20px, 2vw, 24px); + line-height: 1.58; + font-weight: 400; + } + + .subpage .subhead { + max-width: 760px; + font-size: 22px; + } + + .press-hero-subhead { + max-width: 1060px; + font-size: 22px; + } + + .faq-hero .subhead { + max-width: 1120px; + white-space: nowrap; + } + + .press-hero { + width: min(1120px, calc(100% - 56px)); + } + + .actions { + margin-top: 46px; + display: flex; + justify-content: center; + align-items: center; + gap: 16px; + flex-wrap: wrap; + } + + .button { + min-width: 196px; + height: 58px; + padding: 0 30px; + border-radius: 999px; + display: inline-flex; + align-items: center; + justify-content: center; + text-decoration: none; + font-size: 17px; + font-weight: 820; + } + + .button.primary { + color: #fffdfa; + background: var(--red); + box-shadow: 0 24px 54px rgba(217,67,47,.2); + } + + .button.secondary { + color: #2a211a; + background: rgba(255,255,255,.7); + border: 1px solid #ded5ca; + box-shadow: 0 18px 40px rgba(56,41,28,.06); + } + + .microcopy { + max-width: 710px; + margin: 34px auto 0; + color: #91887e; + font-size: 16px; + line-height: 1.5; + font-style: italic; + } + + .time-line { + margin: 26px auto 0; + font-size: 31px; + line-height: 1.25; + font-weight: 600; + letter-spacing: 0; + } + + .cards, + .section, + .form-wrap { + width: min(1160px, calc(100% - 72px)); + margin-left: auto; + margin-right: auto; + } + + .cards { + margin-top: clamp(72px, 10vh, 104px); + margin-bottom: 96px; + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 24px; + } + + .home-services-intro { + width: min(1160px, calc(100% - 72px)); + margin: clamp(76px, 10vh, 112px) auto 0; + } + + .statement-section { + width: min(1160px, calc(100% - 72px)); + margin: 112px auto 104px; + } + + .home-services-intro .kicker, + .statement-section .kicker, + .process-kicker, + .question-kicker { + color: var(--red); + font-size: 14px; + font-weight: 900; + letter-spacing: .14em; + text-transform: uppercase; + } + + .home-services-intro h2, + .statement-section h2, + .question-section .section-title { + margin: 18px 0 0; + max-width: 780px; + color: #102d2e; + font-size: clamp(48px, 6vw, 74px); + line-height: .98; + font-weight: 840; + letter-spacing: -.025em; + } + + .home-services-intro p { + margin: 24px 0 0 6px; + max-width: 720px; + color: #746a60; + font-family: Georgia, "Times New Roman", serif; + font-size: 21px; + line-height: 1.45; + font-style: italic; + } + + .statement-section p { + margin: 28px 0 0; + max-width: 640px; + color: #625a52; + font-size: 18px; + line-height: 1.72; + } + + .home-services-intro + .cards { + margin-top: 54px; + } + + .section { + margin-top: 86px; + margin-bottom: 86px; + } + + .section.tight { + margin-top: 54px; + } + + .why-proof { + width: min(1160px, calc(100% - 72px)); + margin: 72px auto 110px; + } + + .why-proof-intro { + max-width: 860px; + margin: 0 auto 44px; + text-align: center; + } + + .why-proof-intro .process-kicker { + margin-bottom: 18px; + } + + .why-proof-intro h2 { + margin: 0; + color: #211812; + font-size: clamp(38px, 4.8vw, 58px); + line-height: 1.02; + font-weight: 840; + letter-spacing: -.02em; + } + + .why-proof-grid { + display: grid; + gap: 20px; + } + + .why-reason { + display: grid; + grid-template-columns: 270px 1fr; + gap: 38px; + padding: 38px 42px; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.11); + background: rgba(255,255,255,.84); + box-shadow: 0 24px 70px rgba(48,35,24,.06); + } + + .why-reason-side { + padding-top: 2px; + } + + .why-reason-num { + color: var(--red); + font-family: Georgia, "Times New Roman", serif; + font-size: 30px; + line-height: 1; + font-weight: 700; + } + + .why-reason h3 { + margin: 18px 0 0; + color: #102d2e; + font-size: 28px; + line-height: 1.12; + font-weight: 840; + letter-spacing: -.012em; + } + + .why-reason-body p { + margin: 0; + color: #5d6667; + font-size: 17px; + line-height: 1.62; + } + + .why-reason-body p + p { + margin-top: 14px; + } + + .why-tagline { + margin-top: 20px; + padding-top: 16px; + border-top: 1px solid rgba(217,67,47,.18); + color: var(--deep-red); + font-family: Georgia, "Times New Roman", serif; + font-size: 21px; + line-height: 1.34; + font-style: italic; + font-weight: 600; + } + + .why-closing { + margin-top: 26px; + padding: 34px 40px; + border-radius: 8px; + background: rgba(217,67,47,.06); + border: 1px solid rgba(217,67,47,.14); + text-align: center; + } + + .why-closing h3 { + margin: 0; + color: #102d2e; + font-size: clamp(30px, 3.6vw, 44px); + line-height: 1.05; + font-weight: 840; + letter-spacing: -.018em; + } + + .why-closing p { + max-width: 820px; + margin: 18px auto 0; + color: #5f564e; + font-size: 18px; + line-height: 1.62; + } + + .why-closing .why-tagline { + display: inline-block; + margin-top: 24px; + padding: 16px 24px 0; + } + + .why-v2 { + width: min(1160px, calc(100% - 72px)); + margin: 74px auto 110px; + } + + .why-v2-lede { + display: grid; + grid-template-columns: 1.05fr .95fr; + gap: 44px; + align-items: center; + margin-bottom: 30px; + padding: 42px 46px; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.1); + background: rgba(255,255,255,.76); + box-shadow: 0 24px 70px rgba(48,35,24,.055); + } + + .why-v2-lede h2 { + margin: 0; + color: #211812; + font-size: clamp(34px, 4.2vw, 54px); + line-height: 1.02; + font-weight: 840; + letter-spacing: -.02em; + } + + .why-v2-lede p { + margin: 20px 0 0; + max-width: 600px; + color: #625a52; + font-size: 18px; + line-height: 1.62; + } + + .why-v2-standards { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + } + + .why-v2-standard { + min-height: 112px; + padding: 20px 18px; + border-radius: 6px; + border: 1px solid rgba(38,27,19,.1); + background: rgba(255,253,250,.88); + } + + .why-v2-standard b { + display: block; + color: var(--red); + font-size: 12px; + letter-spacing: .12em; + text-transform: uppercase; + margin-bottom: 10px; + } + + .why-v2-standard span { + color: #102d2e; + font-size: 16px; + line-height: 1.38; + font-weight: 760; + } + + .why-v2-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 20px; + } + + .why-card { + min-height: 300px; + padding: 32px 34px; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.11); + background: rgba(255,255,255,.84); + box-shadow: 0 22px 66px rgba(48,35,24,.055); + display: flex; + flex-direction: column; + } + + .why-card.featured { + grid-column: 1 / -1; + min-height: 0; + display: grid; + grid-template-columns: 300px 1fr; + gap: 42px; + padding: 40px 44px; + border-top: 4px solid var(--red); + background: rgba(255,255,255,.88); + } + + .why-card.featured h3 { + font-size: clamp(32px, 3.4vw, 44px); + line-height: 1.04; + } + + .why-card.featured p { + margin-top: 4px; + font-size: 18px; + line-height: 1.62; + } + + .why-card-num { + color: var(--red); + font-family: Georgia, "Times New Roman", serif; + font-size: 28px; + line-height: 1; + font-weight: 700; + margin-bottom: 20px; + } + + .why-card h3 { + margin: 0; + color: #102d2e; + font-size: 29px; + line-height: 1.12; + font-weight: 840; + letter-spacing: -.012em; + } + + .why-card p { + margin: 18px 0 0; + color: #5d6667; + font-size: 16.5px; + line-height: 1.58; + } + + .why-card-line { + margin-top: auto; + padding-top: 22px; + color: var(--deep-red); + font-family: Georgia, "Times New Roman", serif; + font-size: 20px; + line-height: 1.32; + font-style: italic; + font-weight: 600; + } + + .why-card.peace { + background: rgba(217,67,47,.06); + border-color: rgba(217,67,47,.14); + } + + .why-v2-peace { + margin-top: 28px; + padding: 48px 54px; + border-radius: 8px; + border: 1px solid rgba(217,67,47,.16); + background: rgba(217,67,47,.06); + text-align: center; + } + + .why-v2-peace .process-kicker { + font-size: 16px; + } + + .why-v2-peace h2 { + max-width: 980px; + margin: 14px auto 0; + color: #102d2e; + font-size: clamp(38px, 5vw, 62px); + line-height: 1.02; + font-weight: 840; + letter-spacing: -.024em; + } + + .why-v2-peace p { + max-width: 860px; + margin: 28px auto 0; + color: #625a52; + font-size: 19px; + line-height: 1.62; + } + + .why-v2-peace .why-card-line { + display: inline-block; + margin-top: 28px; + padding-top: 20px; + min-width: 260px; + border-top: 1px solid rgba(217,67,47,.18); + font-size: 25px; + } + + .resource-hub { + width: min(1160px, calc(100% - 72px)); + margin: 70px auto 100px; + } + + .resource-tabs { + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 12px; + margin: 0 auto 42px; + } + + .resource-tab { + display: inline-flex; + align-items: center; + min-height: 44px; + padding: 0 20px; + border: 1px solid rgba(38,27,19,.14); + border-radius: 999px; + background: rgba(255,255,255,.78); + color: #324351; + font-size: 15px; + font-weight: 800; + box-shadow: 0 14px 34px rgba(48,35,24,.045); + } + + .resource-tab.active { + border-color: rgba(217,67,47,.34); + color: var(--deep-red); + background: rgba(217,67,47,.08); + } + + .resource-group { + margin-top: 52px; + } + + .resource-group:first-of-type { + margin-top: 0; + } + + .resource-group-head { + display: flex; + align-items: end; + justify-content: space-between; + gap: 28px; + margin-bottom: 22px; + padding-bottom: 18px; + border-bottom: 1px solid rgba(38,27,19,.1); + } + + .resource-group h2 { + margin: 0; + color: #211812; + font-size: 34px; + line-height: 1.08; + font-weight: 820; + letter-spacing: -.01em; + } + + .resource-group p { + margin: 0; + max-width: 520px; + color: #6d645b; + font-size: 16px; + line-height: 1.55; + } + + .resource-cards { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 18px; + } + + .resource-card { + min-height: 150px; + border: 1px solid rgba(38,27,19,.12); + border-radius: 8px; + background: rgba(255,255,255,.82); + padding: 24px; + box-shadow: 0 18px 42px rgba(48,35,24,.045); + } + + .resource-card h3 { + margin: 0; + color: #102d2e; + font-size: 21px; + line-height: 1.18; + font-weight: 840; + } + + .resource-card p { + margin-top: 14px; + font-size: 15px; + line-height: 1.55; + } + + .faq-page { + width: min(1160px, calc(100% - 72px)); + margin: 66px auto 110px; + } + + .faq-lede { + max-width: 860px; + margin: 0 auto 46px; + padding: 30px 34px; + border: 1px solid rgba(38,27,19,.1); + border-radius: 8px; + background: rgba(255,255,255,.78); + color: #5f574f; + font-size: 18px; + line-height: 1.62; + text-align: center; + box-shadow: 0 20px 58px rgba(48,35,24,.045); + } + + .faq-section { + display: grid; + grid-template-columns: 270px minmax(0, 1fr); + gap: 34px; + margin-top: 34px; + padding-top: 34px; + border-top: 1px solid rgba(38,27,19,.1); + } + + .faq-section:first-of-type { + margin-top: 0; + padding-top: 0; + border-top: 0; + } + + .faq-section-head { + padding-top: 8px; + } + + .faq-section-head .process-kicker { + text-align: left; + } + + .faq-section-head h2 { + margin: 14px 0 0; + color: #211812; + font-size: 34px; + line-height: 1.08; + font-weight: 840; + letter-spacing: -.01em; + } + + .faq-section-head p { + margin: 16px 0 0; + color: #7b7168; + font-size: 15.5px; + line-height: 1.55; + } + + .faq-list { + display: grid; + gap: 14px; + } + + .faq-item { + display: grid; + grid-template-columns: 46px minmax(0, 1fr); + gap: 18px; + padding: 24px 26px; + border: 1px solid rgba(38,27,19,.1); + border-radius: 8px; + background: rgba(255,255,255,.84); + box-shadow: 0 18px 44px rgba(48,35,24,.045); + } + + .faq-num { + color: var(--red); + font-size: 16px; + line-height: 1.2; + font-weight: 900; + letter-spacing: .1em; + } + + .faq-item h3 { + margin: 0; + color: #102d2e; + font-size: 22px; + line-height: 1.22; + font-weight: 840; + letter-spacing: -.006em; + } + + .faq-item p { + margin: 12px 0 0; + color: #4f5d5d; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + font-size: 16.3px; + line-height: 1.68; + font-weight: 400; + } + + .legal-doc { + width: min(920px, calc(100% - 72px)); + margin: 70px auto 108px; + } + + .legal-doc-head { + padding: 42px 46px; + border: 1px solid rgba(38,27,19,.1); + border-radius: 8px; + background: rgba(255,255,255,.8); + text-align: center; + box-shadow: 0 20px 58px rgba(48,35,24,.045); + } + + .legal-doc-head .process-kicker { + margin-bottom: 18px; + } + + .legal-doc-head h1 { + margin: 0; + color: #211812; + font-size: clamp(44px, 5vw, 68px); + line-height: 1.02; + font-weight: 840; + letter-spacing: -.024em; + } + + .legal-date { + margin-top: 20px; + color: #766d64; + font-size: 17px; + line-height: 1.5; + font-weight: 650; + } + + .legal-sections { + margin-top: 26px; + display: grid; + gap: 14px; + } + + .legal-section { + padding: 26px 30px; + border: 1px solid rgba(38,27,19,.1); + border-radius: 8px; + background: rgba(255,255,255,.84); + box-shadow: 0 18px 44px rgba(48,35,24,.04); + } + + .legal-section h2 { + margin: 0; + color: #102d2e; + font-size: 23px; + line-height: 1.22; + font-weight: 840; + letter-spacing: -.006em; + } + + .legal-section p { + margin: 14px 0 0; + color: #4f5d5d; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + font-size: 16.2px; + line-height: 1.7; + font-weight: 400; + } + + .legal-section ul { + margin: 16px 0 0; + padding-left: 22px; + color: #4f5d5d; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + font-size: 16.2px; + line-height: 1.7; + } + + .legal-section li + li { + margin-top: 6px; + } + + .criteria-page { + width: min(1160px, calc(100% - 72px)); + margin: 66px auto 108px; + } + + .criteria-intro, + .criteria-disclaimer { + border: 1px solid rgba(38,27,19,.1); + border-radius: 8px; + background: rgba(255,255,255,.78); + box-shadow: 0 20px 58px rgba(48,35,24,.045); + } + + .criteria-intro { + padding: 36px 42px 38px; + color: #5d554d; + font-size: 18px; + line-height: 1.62; + } + + .criteria-intro p { + margin: 0; + max-width: 980px; + } + + .criteria-note-inline { + margin-top: 24px; + padding: 24px 0 0; + border-top: 1px solid rgba(217,67,47,.18); + } + + .criteria-note-inline h2 { + margin: 0 0 12px; + color: var(--red); + font-size: 16px; + letter-spacing: .13em; + text-transform: uppercase; + } + + .criteria-note-inline p, + .criteria-disclaimer p { + margin: 0; + color: #625a52; + font-size: 16.5px; + line-height: 1.66; + } + + .criteria-note-inline p + p { + margin-top: 12px; + } + + .criteria-grid { + margin-top: 28px; + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 20px; + } + + .criterion-card { + min-height: 0; + padding: 30px 32px; + border: 1px solid rgba(38,27,19,.11); + border-radius: 8px; + background: rgba(255,255,255,.84); + box-shadow: 0 22px 58px rgba(48,35,24,.05); + } + + .criterion-meta { + color: var(--red); + font-size: 15px; + font-weight: 900; + letter-spacing: .13em; + text-transform: uppercase; + } + + .criterion-card h2 { + position: relative; + display: inline-block; + margin: 13px 0 0; + color: #102d2e; + font-size: 30px; + line-height: 1.08; + font-weight: 880; + letter-spacing: -.01em; + } + + .criterion-card h2::after { + content: ""; + display: block; + width: 42px; + height: 3px; + margin-top: 12px; + border-radius: 999px; + background: rgba(217,67,47,.74); + } + + .criterion-card p { + margin: 16px 0 0; + color: #4f5d5d; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + font-size: 16.2px; + line-height: 1.7; + font-weight: 400; + } + + .criterion-block { + margin-top: 18px; + padding-top: 16px; + border-top: 1px solid rgba(38,27,19,.08); + } + + .criterion-label { + display: block; + margin-bottom: 8px; + color: var(--deep-red); + font-size: 13px; + font-weight: 900; + letter-spacing: .08em; + text-transform: uppercase; + } + + .criteria-disclaimer { + margin-top: 24px; + padding: 24px 28px; + } + + .section-head { + max-width: 760px; + margin-bottom: 34px; + } + + .section-title { + margin: 0; + color: #211812; + font-size: clamp(34px, 4vw, 46px); + line-height: 1.12; + font-weight: 780; + letter-spacing: -.01em; + } + + .section-copy { + margin: 18px 0 0; + color: var(--text); + font-size: 20px; + line-height: 1.55; + } + + .card, + .panel, + .mini, + .article, + .field, + .notice { + border-radius: 4px; + border: 1px solid rgba(38,27,19,.12); + background: var(--panel); + box-shadow: 0 26px 70px rgba(48,35,24,.075); + } + + .card { + min-height: 326px; + padding: 30px 31px 28px; + border-top: 5px solid var(--red); + display: flex; + flex-direction: column; + } + + .meta { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 24px; + } + + .num { + width: 32px; + height: 32px; + border-radius: 50%; + background: #fff0ed; + color: var(--deep-red); + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 13px; + font-weight: 850; + } + + .label { + color: var(--deep-red); + font-size: 12px; + font-weight: 850; + letter-spacing: .12em; + text-transform: uppercase; + } + + .green-label { + color: var(--green); + } + + .card h2, + .panel h2, + .mini h3, + .article h3, + .notice h2 { + margin: 0; + color: #172a2b; + font-weight: 820; + letter-spacing: -.01em; + } + + .card h2 { + font-size: clamp(22px, 2vw, 25px); + line-height: 1.24; + } + + .card p, + .panel p, + .mini p, + .article p, + .notice p, + li { + color: #5e6969; + font-size: 16px; + line-height: 1.55; + } + + .card p { + margin: 20px 0 0; + } + + .explore { + margin-top: auto; + padding-top: 26px; + color: var(--deep-red); + text-decoration: none; + font-size: 15px; + font-weight: 850; + } + + .services-record-note { + width: min(860px, calc(100% - 72px)); + margin: -42px auto 78px; + padding-top: 28px; + border-top: 1px solid rgba(217,67,47,.18); + color: #625a52; + font-family: Georgia, "Times New Roman", serif; + font-size: 20px; + line-height: 1.58; + font-style: italic; + text-align: center; + } + + .services-cta { + margin: 56px 0 0; + padding: clamp(36px, 4.8vw, 56px) clamp(72px, 8vw, 112px); + background: var(--red); + color: #fffdfa; + } + + .services-cta-inner { + max-width: 1240px; + margin: 0 auto; + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 56px; + align-items: center; + } + + .services-cta h2 { + max-width: 680px; + margin: 0; + color: #fffdfa; + font-family: Georgia, "Times New Roman", serif; + font-size: clamp(40px, 4.5vw, 56px); + line-height: 1.02; + font-weight: 800; + letter-spacing: -.03em; + } + + .services-cta p { + max-width: 680px; + margin: 20px 0 0; + color: rgba(255,253,250,.9); + font-size: 17px; + line-height: 1.58; + font-weight: 520; + } + + .services-cta .button { + min-width: 250px; + color: var(--red); + background: #fffdfa; + box-shadow: 0 24px 54px rgba(100,20,12,.16); + } + + .two-col { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 24px; + } + + .grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 18px; + } + + .panel { + padding: 34px; + } + + .panel h2 { + font-size: 27px; + line-height: 1.2; + } + + .panel p { + margin: 18px 0 0; + } + + .mini { + min-height: 174px; + padding: 24px; + } + + .mini h3 { + font-size: 18px; + line-height: 1.25; + } + + .mini p { + margin: 12px 0 0; + font-size: 15px; + line-height: 1.45; + } + + .article { + padding: 28px; + min-height: 210px; + } + + .article h3 { + font-size: 23px; + line-height: 1.22; + } + + .article p { + margin: 16px 0 0; + } + + .split-feature { + display: grid; + grid-template-columns: .95fr 1.1fr; + gap: 72px; + align-items: start; + } + + .list { + margin: 0; + padding: 0; + list-style: none; + border-top: 1px solid rgba(38,27,19,.1); + } + + .list li { + display: grid; + grid-template-columns: 34px 1fr; + gap: 18px; + padding: 25px 0; + border-bottom: 1px solid rgba(38,27,19,.1); + align-items: start; + color: #40484e; + font-size: 20px; + line-height: 1.35; + font-weight: 780; + } + + .arrow { + color: var(--red); + font-weight: 900; + font-size: 24px; + line-height: 1.1; + } + + .list li.no-arrow .arrow { + display: none; + } + + .list li.no-arrow { + grid-template-columns: 1fr; + } + + .question-section { + width: min(1160px, calc(100% - 72px)); + margin: 110px auto 98px; + text-align: center; + } + + .question-section .section-head { + max-width: 850px; + } + + .question-section .section-title { + max-width: 780px; + margin-left: auto; + margin-right: auto; + color: #211812; + font-size: clamp(34px, 4vw, 46px); + line-height: 1.12; + font-weight: 780; + letter-spacing: -.01em; + } + + .question-section .section-copy { + margin-left: auto; + margin-right: auto; + max-width: 880px; + color: #625a52; + font-size: 18px; + line-height: 1.62; + } + + .question-card { + margin-top: 58px; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.12); + background: rgba(255,255,255,.84); + box-shadow: 0 24px 70px rgba(48,35,24,.065); + padding: 42px 52px; + text-align: left; + } + + .question-card-title { + margin: 0 0 30px; + color: var(--red); + font-size: 14px; + font-weight: 900; + letter-spacing: .14em; + text-transform: uppercase; + } + + .questions { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 0 56px; + } + + .question-item { + display: grid; + grid-template-columns: 38px 1fr; + gap: 14px; + padding: 18px 0; + border-bottom: 1px solid rgba(38,27,19,.1); + color: #3f3a34; + font-size: 17px; + line-height: 1.42; + } + + .question-num { + color: var(--red); + font-family: Georgia, "Times New Roman", serif; + font-size: 20px; + font-weight: 700; + } + + .press-standard { + width: min(1160px, calc(100% - 72px)); + margin: 88px auto 100px; + text-align: center; + } + + .press-standard .section-head { + max-width: 760px; + margin: 0 auto 48px; + padding-top: 38px; + border-top: 1px solid rgba(38,27,19,.1); + text-align: center; + } + + .press-standard .section-title { + margin-top: 18px; + color: #211812; + font-size: clamp(38px, 4.4vw, 52px); + line-height: 1.08; + font-weight: 780; + letter-spacing: -.01em; + } + + .press-standard .section-copy { + max-width: 780px; + margin: 18px auto 0; + color: #625a52; + font-size: 18px; + line-height: 1.58; + } + + .press-check-card { + max-width: 940px; + margin: 0 auto; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.12); + background: rgba(255,255,255,.86); + box-shadow: 0 26px 70px rgba(48,35,24,.065); + padding: 36px 46px 34px; + text-align: left; + } + + .press-check-item { + display: grid; + grid-template-columns: 46px 1fr; + gap: 22px; + padding: 18px 0; + border-bottom: 1px solid rgba(38,27,19,.1); + color: #3f3a34; + font-size: 16px; + line-height: 1.46; + } + + .press-check-num { + color: var(--red); + font-family: Georgia, "Times New Roman", serif; + font-size: 20px; + font-weight: 700; + } + + .press-check-closing { + margin: 30px 0 0; + padding-top: 24px; + border-top: 2px solid var(--red); + color: var(--deep-red); + font-family: Georgia, "Times New Roman", serif; + font-size: 22px; + line-height: 1.35; + font-style: italic; + font-weight: 600; + text-align: center; + white-space: nowrap; + } + + .press-cadence { + width: min(960px, calc(100% - 72px)); + margin: 78px auto 24px; + padding: 34px 52px 30px; + border-top: 3px solid var(--red); + border-radius: 0 0 8px 8px; + background: linear-gradient(rgba(217,67,47,.04), rgba(255,253,250,0)); + text-align: center; + } + + .press-cadence p { + margin: 0; + color: #5f564e; + font-family: Georgia, "Times New Roman", serif; + font-size: 21px; + line-height: 1.58; + font-style: italic; + } + + .outlet-network { + width: min(1160px, calc(100% - 72px)); + margin: 0 auto 100px; + text-align: center; + } + + .outlet-network-head { + max-width: 760px; + margin: 0 auto 38px; + padding-top: 34px; + border-top: 1px solid rgba(38,27,19,.1); + } + + .outlet-network h2 { + margin: 14px 0 0; + color: #211812; + font-size: clamp(38px, 4.4vw, 52px); + line-height: 1.08; + font-weight: 780; + letter-spacing: -.01em; + } + + .outlet-network p { + margin: 18px auto 0; + max-width: 650px; + color: #625a52; + font-size: 17px; + line-height: 1.66; + } + + .outlet-grid { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + gap: 11px 12px; + width: min(1120px, 100%); + box-sizing: border-box; + margin: 0 auto; + padding: 36px 34px; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.11); + background: rgba(255,255,255,.82); + box-shadow: 0 24px 70px rgba(48,35,24,.055); + } + + .outlet-name { + padding: 8px 11px; + border-radius: 999px; + border: 1px solid rgba(38,27,19,.09); + background: rgba(255,253,250,.76); + color: #3f4a4d; + font-size: 14px; + line-height: 1.2; + font-weight: 720; + } + + .avoid-section { + width: min(1180px, calc(100% - 72px)); + margin: 0 auto 100px; + text-align: center; + } + + .avoid-section .section-head { + max-width: 880px; + margin-left: auto; + margin-right: auto; + } + + .avoid-section .section-title { + margin-top: 18px; + color: #211812; + font-size: clamp(38px, 4.4vw, 52px); + line-height: 1.08; + font-weight: 780; + letter-spacing: -.01em; + } + + .avoid-section .section-copy { + max-width: 840px; + margin-left: auto; + margin-right: auto; + color: #625a52; + font-size: 18px; + line-height: 1.62; + } + + .avoid-grid { + margin-top: 42px; + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 18px; + } + + .avoid-card { + min-height: 300px; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.12); + background: rgba(255,255,255,.86); + box-shadow: 0 24px 64px rgba(48,35,24,.055); + overflow: hidden; + text-align: left; + } + + .avoid-mock { + position: relative; + min-height: 178px; + padding: 18px; + border-bottom: 1px solid rgba(38,27,19,.1); + background: + linear-gradient(135deg, rgba(16,45,46,.08), rgba(217,67,47,.05)), + rgba(255,253,250,.9); + } + + .mock-bar { + width: 100%; + height: 14px; + border-radius: 999px; + background: rgba(38,27,19,.14); + margin-bottom: 16px; + } + + .mock-source { + display: inline-block; + margin-bottom: 16px; + color: #102d2e; + font-size: 12px; + font-weight: 900; + letter-spacing: .12em; + text-transform: uppercase; + } + + .mock-title { + width: 84%; + height: 48px; + border-radius: 4px; + background: rgba(16,45,46,.22); + margin-bottom: 16px; + } + + .mock-disclosure { + display: inline-block; + padding: 8px 10px; + border-radius: 999px; + border: 1px solid rgba(217,67,47,.24); + background: rgba(217,67,47,.08); + color: var(--deep-red); + font-size: 11px; + font-weight: 900; + letter-spacing: .08em; + text-transform: uppercase; + } + + .avoid-x-stamp { + position: absolute; + right: 28px; + bottom: 13px; + width: 42px; + height: 42px; + border: 2px solid rgba(169,55,45,.52); + border-radius: 999px; + color: var(--deep-red); + background: rgba(255,253,250,.64); + transform: rotate(-6deg); + box-shadow: 0 10px 24px rgba(169,55,45,.08); + } + + .avoid-x-stamp::before { + content: "!"; + position: absolute; + inset: 0; + display: grid; + place-items: center; + font-family: Georgia, "Times New Roman", serif; + font-size: 28px; + line-height: 1; + font-weight: 800; + font-style: italic; + } + + .avoid-card-body { + padding: 22px; + } + + .avoid-card h3 { + margin: 0; + color: #102d2e; + font-size: 20px; + line-height: 1.18; + font-weight: 820; + } + + .avoid-card p { + margin: 12px 0 0; + color: #5e6969; + font-size: 15px; + line-height: 1.5; + } + + .avoid-explain { + margin-top: 24px; + padding: 30px 34px; + border-radius: 8px; + border: 1px solid rgba(217,67,47,.13); + background: rgba(217,67,47,.05); + text-align: left; + display: grid; + grid-template-columns: .75fr 1.25fr; + gap: 28px; + align-items: start; + } + + .avoid-explain h3 { + margin: 0; + color: #102d2e; + font-size: 26px; + line-height: 1.15; + font-weight: 820; + letter-spacing: -.01em; + } + + .avoid-explain ul { + margin: 0; + padding: 0; + list-style: none; + } + + .avoid-explain li { + padding: 0 0 12px 24px; + position: relative; + color: #4e5657; + font-size: 17px; + line-height: 1.5; + } + + .avoid-explain li::before { + content: "→"; + position: absolute; + left: 0; + color: var(--red); + font-weight: 900; + } + + .avoid-explain-note { + grid-column: 1 / -1; + margin: 0; + padding-top: 18px; + border-top: 1px solid rgba(217,67,47,.18); + color: #625a52; + font-size: 17px; + line-height: 1.55; + } + + .judging-counts { + width: min(1160px, calc(100% - 72px)); + margin: 86px auto 96px; + text-align: center; + } + + .judging-counts .section-head { + max-width: 820px; + margin-left: auto; + margin-right: auto; + margin-bottom: 48px; + } + + .judging-counts .section-title { + margin-top: 18px; + color: #211812; + font-size: clamp(38px, 4.4vw, 52px); + line-height: 1.08; + font-weight: 780; + letter-spacing: -.01em; + } + + .judging-counts .section-copy { + max-width: 980px; + margin-left: auto; + margin-right: auto; + color: #625a52; + font-size: 18px; + line-height: 1.58; + } + + .judging-counts-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 18px 24px; + text-align: left; + } + + .judging-count-card { + min-height: 126px; + padding: 26px 30px; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.11); + background: rgba(255,255,255,.84); + box-shadow: 0 22px 60px rgba(48,35,24,.052); + display: grid; + grid-template-columns: 34px 1fr; + gap: 20px; + align-items: start; + } + + .judging-count-card:first-child { + border-color: rgba(217,67,47,.42); + } + + .judging-count-card .arrow { + font-size: 24px; + } + + .judging-count-card h3 { + margin: 0; + color: #283947; + font-size: 22px; + line-height: 1.2; + font-weight: 820; + letter-spacing: -.01em; + } + + .judging-count-card p { + margin: 10px 0 0; + color: #817970; + font-size: 15px; + line-height: 1.48; + } + + .judging-network, + .judging-package { + width: min(1160px, calc(100% - 72px)); + margin: 0 auto 100px; + text-align: center; + } + + .judging-network-head, + .judging-package-head { + max-width: 820px; + margin: 0 auto 46px; + padding-top: 34px; + border-top: 1px solid rgba(38,27,19,.1); + } + + .judging-network h2, + .judging-package h2 { + margin: 14px 0 0; + color: #211812; + font-size: clamp(38px, 4.4vw, 52px); + line-height: 1.08; + font-weight: 780; + letter-spacing: -.01em; + } + + .judging-network p, + .judging-package p { + margin: 18px auto 0; + max-width: 680px; + color: #625a52; + font-size: 17px; + line-height: 1.62; + } + + .judging-network-group { + text-align: left; + margin-top: 36px; + } + + .judging-network-group h3 { + margin: 0 0 18px; + color: var(--red); + font-size: 14px; + font-weight: 900; + letter-spacing: .14em; + text-transform: uppercase; + } + + .judging-network-chips { + max-width: 1040px; + margin: 0 auto; + display: flex; + flex-wrap: wrap; + justify-content: center; + gap: 12px 14px; + } + + .judging-network-chip { + padding: 10px 15px; + border-radius: 999px; + border: 1px solid rgba(38,27,19,.09); + background: rgba(255,255,255,.76); + color: #3f4a4d; + font-size: 15px; + line-height: 1.2; + font-weight: 720; + box-shadow: 0 14px 36px rgba(48,35,24,.035); + } + + .judging-network-note { + margin-top: 44px; + padding: 23px 28px; + border-radius: 8px; + background: rgba(38,27,19,.035); + color: #746a60; + font-family: Georgia, "Times New Roman", serif; + font-size: 18px; + line-height: 1.45; + font-style: italic; + text-align: center; + } + + .judging-package-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 18px 24px; + text-align: left; + } + + .judging-package-card { + min-height: 142px; + padding: 28px 30px; + border-radius: 8px; + border: 1px solid rgba(38,27,19,.11); + background: rgba(255,255,255,.84); + box-shadow: 0 22px 60px rgba(48,35,24,.052); + display: grid; + grid-template-columns: 36px 1fr; + gap: 20px; + align-items: start; + } + + .check-dot { + width: 30px; + height: 30px; + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + background: var(--deep-red); + color: #fffdfa; + font-size: 20px; + font-weight: 900; + line-height: 1; + } + + .judging-package-card h3 { + margin: 0; + color: #283947; + font-size: 21px; + line-height: 1.2; + font-weight: 820; + letter-spacing: -.01em; + } + + .judging-package-card p { + margin: 12px 0 0; + color: #817970; + font-size: 16px; + line-height: 1.5; + } + + .process-section { + width: min(1160px, calc(100% - 72px)); + margin: 98px auto; + text-align: center; + } + + .process-section .section-copy { + margin-left: auto; + margin-right: auto; + } + + .steps { + margin-top: 50px; + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 16px; + } + + .step { + min-height: 220px; + padding: 28px 22px; + border: 1px solid rgba(38,27,19,.12); + border-radius: 6px; + background: rgba(255,255,255,.82); + box-shadow: 0 20px 54px rgba(48,35,24,.055); + display: flex; + flex-direction: column; + align-items: center; + justify-content: flex-start; + text-align: center; + } + + .step-num { + width: 42px; + height: 42px; + border-radius: 50%; + display: inline-flex; + align-items: center; + justify-content: center; + background: var(--red); + color: white; + font-family: Georgia, "Times New Roman", serif; + font-weight: 700; + margin-bottom: 24px; + } + + .step p { + margin: 0; + color: #514b45; + font-size: 16.5px; + line-height: 1.42; + } + + .pricing-band { + margin: 52px auto 0; + padding: 34px 40px; + border-radius: 10px; + border: 1px solid rgba(217,67,47,.12); + background: rgba(217,67,47,.06); + display: grid; + grid-template-columns: 1fr auto; + gap: 28px; + align-items: center; + text-align: left; + } + + .pricing-band h3 { + margin: 0; + color: #102d2e; + font-size: 32px; + line-height: 1.15; + font-weight: 840; + letter-spacing: -.018em; + } + + .pricing-band strong { + color: var(--red); + } + + .pricing-band p { + max-width: 720px; + margin: 14px 0 0; + color: #746a60; + font-size: 16px; + line-height: 1.55; + } + + .form-wrap { + margin-top: 54px; + margin-bottom: 90px; + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 16px; + } + + .field { + min-height: 58px; + padding: 18px; + color: #80766b; + font-size: 16px; + } + + .field strong { + display: block; + margin-bottom: 8px; + color: #30241c; + font-size: 18px; + line-height: 1.25; + } + + .field span:not(.req) { + display: block; + color: #80766b; + font-size: 15px; + line-height: 1.55; + font-weight: 500; + } + + .field.upload { + grid-column: span 2; + min-height: 66px; + border-style: dashed; + background: rgba(255,255,255,.54); + } + + .field.upload-inline { + grid-column: span 1; + } + + .req { + color: var(--red); + font-weight: 900; + } + + .field.large { + grid-column: span 2; + min-height: 126px; + } + + .field.question-field { + min-height: 216px; + } + + .field.start-question-field { + min-height: 190px; + } + + .form-note { + grid-column: span 2; + color: #8d847a; + font-size: 13px; + line-height: 1.5; + margin-top: 8px; + } + + .notice { + max-width: 840px; + margin: 60px auto 96px; + padding: 42px; + text-align: center; + } + + .notice h2 { + font-size: 34px; + line-height: 1.16; + } + + footer { + padding: 34px clamp(36px, 6vw, 92px) 46px; + border-top: 1px solid rgba(38,27,19,.09); + color: #8e857b; + font-size: 13px; + line-height: 1.6; + background: rgba(255,253,250,.78); + } + + .footer-links { + display: flex; + flex-wrap: wrap; + gap: 18px; + margin-bottom: 18px; + } + + .footer-links a { + color: #5c5249; + text-decoration: none; + font-weight: 700; + } + + @media (max-width: 1080px) { + .site-header { + align-items: flex-start; + flex-wrap: wrap; + } + + .nav { + width: 100%; + margin-left: 0; + flex-wrap: wrap; + } + + .cards, + .two-col, + .grid, + .split-feature, + .press-standard, + .press-cadence, + .outlet-network, + .avoid-grid, + .why-reason, + .why-card.featured, + .why-v2-lede, + .why-v2-grid, + .criteria-grid, + .faq-section, + .form-wrap, + .questions, + .steps { + grid-template-columns: 1fr; + } + + .field.large, + .form-note { + grid-column: span 1; + } + + .pricing-band { + grid-template-columns: 1fr; + text-align: center; + } + + .outlet-grid { + grid-template-columns: 1fr; + } + + .press-check-card { + padding: 34px 30px; + } + + .press-check-item { + grid-template-columns: 38px 1fr; + } + } + + +.form-error { color: var(--deep-red); font-size: 14px; font-weight: 750; line-height: 1.4; } +.form-success { color: var(--green); font-size: 14px; font-weight: 750; line-height: 1.4; } +.field-control { width: 100%; border: 0; outline: 0; background: transparent; color: var(--ink); font: inherit; font-weight: 650; } +.field-control::placeholder { color: var(--muted); opacity: .78; } +textarea.field-control { min-height: 126px; resize: vertical; line-height: 1.45; } +.checkbox-field { align-items: flex-start; gap: 12px; text-align: left; color: var(--text); font-size: 14px; line-height: 1.45; } +.checkbox-field input { margin-top: 3px; accent-color: var(--red); } +.button[disabled] { cursor: not-allowed; opacity: .62; } diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 0000000..2effe83 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,44 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { SiteHeader } from "@/components/SiteHeader"; +import "./globals.css"; + +export const metadata: Metadata = { + metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL || "https://paprikalaw.com"), + title: { + default: "Paprika", + template: "Paprika - %s" + }, + description: + "Attorney-curated evidence building for O-1 talent through press, judging opportunities, scholarly articles, and documented profile strategy.", + openGraph: { + title: "Paprika", + description: + "Attorney-curated evidence building for O-1 talent through press, judging opportunities, scholarly articles, and documented profile strategy.", + url: "/", + siteName: "Paprika", + type: "website" + } +}; + +export default function RootLayout({ children }: { children: React.ReactNode }) { + return ( + + + +
{children}
+
+
+ About + FAQ + Terms + Privacy + Disclaimer +
+
Paprika is not a law firm and does not provide legal advice or immigration representation.
+
Use of our services does not create an attorney-client relationship.
+
+ + + ); +} diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 0000000..95478e3 --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,5 @@ +import { LegacyPage } from "@/components/LegacyPage"; + +export default function HomePage() { + return ; +} diff --git a/app/robots.ts b/app/robots.ts new file mode 100644 index 0000000..36cf727 --- /dev/null +++ b/app/robots.ts @@ -0,0 +1,13 @@ +import type { MetadataRoute } from "next"; + +export default function robots(): MetadataRoute.Robots { + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://paprikalaw.com"; + + return { + rules: { + userAgent: "*", + allow: "/" + }, + sitemap: `${siteUrl}/sitemap.xml` + }; +} diff --git a/app/sitemap.ts b/app/sitemap.ts new file mode 100644 index 0000000..4636157 --- /dev/null +++ b/app/sitemap.ts @@ -0,0 +1,28 @@ +import type { MetadataRoute } from "next"; + +const routeOrder = [ + "home", + "press", + "judging", + "scholarly", + "services", + "why", + "resources", + "faq", + "start", + "ask", + "terms", + "privacy", + "disclaimer" +] as const; + +export default function sitemap(): MetadataRoute.Sitemap { + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL || "https://paprikalaw.com"; + + return routeOrder.map((key) => ({ + url: `${siteUrl}${key === "home" ? "" : `/${key}`}`, + lastModified: new Date("2026-07-06"), + changeFrequency: key === "home" ? "weekly" : "monthly", + priority: key === "home" ? 1 : key === "start" ? 0.9 : 0.7 + })); +} diff --git a/app/start/page.tsx b/app/start/page.tsx new file mode 100644 index 0000000..c08414a --- /dev/null +++ b/app/start/page.tsx @@ -0,0 +1,30 @@ +import Link from "next/link"; +import { SubmissionForm } from "@/components/forms/SubmissionForm"; + +export const metadata = { + title: "Start Here" +}; + +export default function StartPage() { + return ( + <> +
+

Start here.

+

+ Tell us a little about your background, goals, and timeline, whether you are actively + preparing or just starting to explore. No need to have everything figured out. A quick + summary is enough to start. +

+
+ + Start Here + + + Ask a Question + +
+
+ + + ); +} diff --git a/app/thanks/page.tsx b/app/thanks/page.tsx new file mode 100644 index 0000000..676400b --- /dev/null +++ b/app/thanks/page.tsx @@ -0,0 +1,29 @@ +import Link from "next/link"; + +export const metadata = { + title: "Thank You" +}; + +export default function ThanksPage({ + searchParams +}: { + searchParams: { submission_id?: string }; +}) { + return ( +
+

Thank you. We received your background.

+

+ The Paprika team will review your profile and follow up with next steps. If your timeline is + urgent, mention that in your reply. +

+ {searchParams.submission_id ? ( +

Submission ID: {searchParams.submission_id}

+ ) : null} +
+ + Back to Homepage + +
+
+ ); +} diff --git a/components/LegacyPage.tsx b/components/LegacyPage.tsx new file mode 100644 index 0000000..366dcdb --- /dev/null +++ b/components/LegacyPage.tsx @@ -0,0 +1,8 @@ +import type { LegacyPageKey } from "@/lib/legacy-pages"; +import { legacyPages } from "@/lib/legacy-pages"; + +export function LegacyPage({ pageKey }: { pageKey: LegacyPageKey }) { + const page = legacyPages[pageKey]; + + return
; +} diff --git a/components/SiteHeader.tsx b/components/SiteHeader.tsx new file mode 100644 index 0000000..6ef97f3 --- /dev/null +++ b/components/SiteHeader.tsx @@ -0,0 +1,56 @@ +"use client"; + +import Link from "next/link"; +import { usePathname } from "next/navigation"; +import { navItems, resourceItems } from "@/lib/navigation"; + +export function SiteHeader() { + const pathname = usePathname(); + const current = pathname === "/" ? "home" : pathname.split("/")[1]; + const resourcesActive = current === "faq" || current === "resources"; + + return ( +
+ +
Paprika
+
Attorney Curated Evidence Building for O-1 Talent
+ + +
+ ); +} diff --git a/components/forms/SubmissionForm.tsx b/components/forms/SubmissionForm.tsx new file mode 100644 index 0000000..2917a67 --- /dev/null +++ b/components/forms/SubmissionForm.tsx @@ -0,0 +1,150 @@ +"use client"; + +import { useRouter } from "next/navigation"; +import { useState, type FormEvent } from "react"; + +type FormType = "start" | "ask"; + +type FieldErrors = Record; + +export function SubmissionForm({ type }: { type: FormType }) { + const router = useRouter(); + const [errors, setErrors] = useState({}); + const [status, setStatus] = useState<"idle" | "submitting" | "error">("idle"); + + async function handleSubmit(event: FormEvent) { + event.preventDefault(); + setErrors({}); + setStatus("submitting"); + + const form = new FormData(event.currentTarget); + const payload = Object.fromEntries(form.entries()); + + const response = await fetch("/api/submissions", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + ...payload, + type, + consentAccepted: form.get("consentAccepted") === "on", + sourcePath: type === "start" ? "/start" : "/ask" + }) + }); + + const result = await response.json().catch(() => ({})); + + if (!response.ok) { + setErrors(result.issues || { form: [result.error || "Submission failed"] }); + setStatus("error"); + return; + } + + router.push(`/thanks?submission_id=${encodeURIComponent(result.submission_id)}`); + } + + return ( +
+ + + + + {type === "start" ? : } + + + + {errors.form?.length ?
{errors.form[0]}
: null} + + +
+ File upload is intentionally disabled until storage, size limits, access control, and privacy + handling are approved. +
+ + ); +} + +function StartFields({ errors }: { errors: FieldErrors }) { + return ( + <> + + + +