slice 4: accent palette refinement — blue → teal

Replace the four accent-family hex codes site-wide with the teal palette
(keeps the dark theme; only swaps the accent family, not the dark base):

  #3b82f6 (accent primary CTA)   → #5B7C8D  (teal)        [839×]
  #2563eb (accent-dark / hover)  → #4A6473  (darker teal) [44×]
  #60a5fa (info link, lighter)   → #8FB0C3  (mid teal)    [68×]
  #1e3a5f (accent-muted bg)      → #2F4F5F  (navy)        [44×]

tailwind.config.js tokens updated to match (accent/accent-dark/accent-muted).
Sweep also covers tailwind.css. 108 files touched. The dark base (#0d0d0d,
#111, #161616, #1a1a1a etc.) is intentionally untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-15 23:33:04 +00:00
parent f6fa7570c4
commit 52fe7bceb6
109 changed files with 937 additions and 937 deletions

View File

@@ -80,8 +80,8 @@ export default function EventTagPicker({ articleId }: { articleId: string }) {
className={
"text-xs px-2.5 py-1 rounded-full border transition-colors " +
(on
? "bg-[var(--color-text-info,#60a5fa)]/15 border-[var(--color-text-info,#60a5fa)]/60 text-[var(--color-text-info,#60a5fa)]"
: "border-[#374151] text-[#9ca3af] hover:border-[var(--color-text-info,#60a5fa)] hover:text-[var(--color-text-info,#60a5fa)]")
? "bg-[var(--color-text-info,#8FB0C3)]/15 border-[var(--color-text-info,#8FB0C3)]/60 text-[var(--color-text-info,#8FB0C3)]"
: "border-[#374151] text-[#9ca3af] hover:border-[var(--color-text-info,#8FB0C3)] hover:text-[var(--color-text-info,#8FB0C3)]")
}
title={`${ev.start_date} ${ev.end_date} (${ev.status})`}
>

View File

@@ -41,7 +41,7 @@ export default function ReviewActions({ id, currentStatus }: Props) {
value={note}
onChange={(e) => setNote(e.target.value)}
placeholder="Reviewer note (optional)"
className="w-full rounded border border-[#1f2937] bg-[#070a10] p-2 text-sm text-[#e5e7eb] focus:border-[#3b82f6] focus:outline-none"
className="w-full rounded border border-[#1f2937] bg-[#070a10] p-2 text-sm text-[#e5e7eb] focus:border-[#5B7C8D] focus:outline-none"
rows={2}
/>
<div className="mt-3 flex flex-wrap gap-3 text-sm">

View File

@@ -41,12 +41,12 @@ export default async function ReviewDetailPage({ params }: { params: Promise<{ i
return (
<main className="mx-auto max-w-6xl px-6 py-10 text-[#e5e7eb]">
<Link href="/admin/review-queue" className="text-sm text-[#60a5fa] hover:underline">
<Link href="/admin/review-queue" className="text-sm text-[#8FB0C3] hover:underline">
Back to queue
</Link>
<header className="mt-4 mb-6 border-b border-[#222] pb-4">
<div className="flex items-center gap-3 text-xs uppercase tracking-wider text-[#60a5fa]">
<div className="flex items-center gap-3 text-xs uppercase tracking-wider text-[#8FB0C3]">
<span>{persona?.name || "—"}</span>
<span className="text-[#4b5563]">·</span>
<span>{art.category}</span>

View File

@@ -70,7 +70,7 @@ export default async function ReviewQueuePage() {
return (
<li
key={r.id}
className="rounded border border-[#1f2937] bg-[#0b0f17] p-5 hover:border-[#3b82f6] transition-colors"
className="rounded border border-[#1f2937] bg-[#0b0f17] p-5 hover:border-[#5B7C8D] transition-colors"
>
<div className="flex items-start gap-4">
{persona?.avatar_url ? (
@@ -85,7 +85,7 @@ export default async function ReviewQueuePage() {
<div className="h-14 w-14 rounded-full bg-[#1f2937]" />
)}
<div className="flex-1 min-w-0">
<div className="text-xs uppercase tracking-wider text-[#60a5fa]">
<div className="text-xs uppercase tracking-wider text-[#8FB0C3]">
{persona?.name || "—"} · {r.category}
</div>
<h2 className="text-xl font-semibold mt-1">{r.title}</h2>
@@ -100,7 +100,7 @@ export default async function ReviewQueuePage() {
<div className="mt-4 flex flex-wrap items-center gap-3 text-xs">
<Link
href={`/admin/review-queue/${r.id}`}
className="rounded bg-[#1d4ed8] px-3 py-1.5 font-medium text-white hover:bg-[#2563eb]"
className="rounded bg-[#1d4ed8] px-3 py-1.5 font-medium text-white hover:bg-[#4A6473]"
>
Review
</Link>