feat(ui): apply Justine ink & parchment design system
- Map Justine tokens to shadcn CSS variables (--vibn-* aliases) - Switch fonts to Inter + Lora via next/font (IBM Plex Mono for code) - Base typography: body Inter, h1–h3 Lora; marketing hero + wordmark serif - Project shell and global chrome use semantic colors - Replace Outfit/Newsreader references across TSX inline styles Made-with: Cursor
This commit is contained in:
@@ -59,7 +59,7 @@ function StatusTag({ status }: { status?: string }) {
|
||||
display: "inline-flex", alignItems: "center", gap: 5,
|
||||
padding: "3px 9px", borderRadius: 4,
|
||||
fontSize: "0.68rem", fontWeight: 600, letterSpacing: "0.02em",
|
||||
color, background: bg, fontFamily: "Outfit, sans-serif",
|
||||
color, background: bg, fontFamily: "var(--font-inter), ui-sans-serif, sans-serif",
|
||||
}}>
|
||||
<StatusDot status={status} /> {label}
|
||||
</span>
|
||||
@@ -135,13 +135,13 @@ export default function ProjectsPage() {
|
||||
return (
|
||||
<div
|
||||
className="vibn-enter"
|
||||
style={{ padding: "44px 52px", maxWidth: 900, fontFamily: "Outfit, sans-serif" }}
|
||||
style={{ padding: "44px 52px", maxWidth: 900, fontFamily: "var(--font-inter), ui-sans-serif, sans-serif" }}
|
||||
>
|
||||
{/* Header */}
|
||||
<div style={{ display: "flex", justifyContent: "space-between", alignItems: "flex-end", marginBottom: 36 }}>
|
||||
<div>
|
||||
<h1 style={{
|
||||
fontFamily: "Newsreader, serif", fontSize: "1.9rem",
|
||||
fontFamily: "var(--font-lora), ui-serif, serif", fontSize: "1.9rem",
|
||||
fontWeight: 400, color: "#1a1a1a", letterSpacing: "-0.03em",
|
||||
lineHeight: 1.15, marginBottom: 4,
|
||||
}}>
|
||||
@@ -159,7 +159,7 @@ export default function ProjectsPage() {
|
||||
background: "#1a1a1a", color: "#fff",
|
||||
border: "1px solid #1a1a1a",
|
||||
fontSize: "0.78rem", fontWeight: 600,
|
||||
fontFamily: "Outfit, sans-serif", cursor: "pointer",
|
||||
fontFamily: "var(--font-inter), ui-sans-serif, sans-serif", cursor: "pointer",
|
||||
}}
|
||||
>
|
||||
<span style={{ fontSize: "1rem", lineHeight: 1, fontWeight: 300 }}>+</span>
|
||||
@@ -189,7 +189,7 @@ export default function ProjectsPage() {
|
||||
width: "100%", display: "flex", alignItems: "center",
|
||||
padding: "18px 22px", borderRadius: 10,
|
||||
background: "#fff", border: "1px solid #e8e4dc",
|
||||
cursor: "pointer", fontFamily: "Outfit, sans-serif",
|
||||
cursor: "pointer", fontFamily: "var(--font-inter), ui-sans-serif, sans-serif",
|
||||
textDecoration: "none", boxShadow: "0 1px 2px #1a1a1a05",
|
||||
transition: "all 0.15s",
|
||||
}}
|
||||
@@ -212,7 +212,7 @@ export default function ProjectsPage() {
|
||||
flexShrink: 0,
|
||||
}}>
|
||||
<span style={{
|
||||
fontFamily: "Newsreader, serif",
|
||||
fontFamily: "var(--font-lora), ui-serif, serif",
|
||||
fontSize: "1.05rem", fontWeight: 500, color: "#1a1a1a",
|
||||
}}>
|
||||
{p.productName[0]?.toUpperCase() ?? "P"}
|
||||
@@ -259,7 +259,7 @@ export default function ProjectsPage() {
|
||||
color: "#c0bab2", cursor: "pointer",
|
||||
opacity: hoveredId === p.id ? 1 : 0,
|
||||
transition: "opacity 0.15s, color 0.15s",
|
||||
fontFamily: "Outfit, sans-serif", flexShrink: 0,
|
||||
fontFamily: "var(--font-inter), ui-sans-serif, sans-serif", flexShrink: 0,
|
||||
}}
|
||||
onMouseEnter={(e) => { e.currentTarget.style.color = "#d32f2f"; }}
|
||||
onMouseLeave={(e) => { e.currentTarget.style.color = "#c0bab2"; }}
|
||||
@@ -278,7 +278,7 @@ export default function ProjectsPage() {
|
||||
width: "100%", display: "flex", alignItems: "center", justifyContent: "center",
|
||||
padding: "22px", borderRadius: 10,
|
||||
background: "transparent", border: "1px dashed #d0ccc4",
|
||||
cursor: "pointer", fontFamily: "Outfit, sans-serif",
|
||||
cursor: "pointer", fontFamily: "var(--font-inter), ui-sans-serif, sans-serif",
|
||||
color: "#b5b0a6", fontSize: "0.84rem", fontWeight: 500,
|
||||
transition: "all 0.15s",
|
||||
animationDelay: `${projects.length * 0.05}s`,
|
||||
@@ -295,7 +295,7 @@ export default function ProjectsPage() {
|
||||
{/* Empty state */}
|
||||
{!loading && projects.length === 0 && (
|
||||
<div style={{ textAlign: "center", paddingTop: 64 }}>
|
||||
<h3 style={{ fontFamily: "Newsreader, serif", fontSize: "1.3rem", fontWeight: 400, color: "#1a1a1a", marginBottom: 8 }}>
|
||||
<h3 style={{ fontFamily: "var(--font-lora), ui-serif, serif", fontSize: "1.3rem", fontWeight: 400, color: "#1a1a1a", marginBottom: 8 }}>
|
||||
No projects yet
|
||||
</h3>
|
||||
<p style={{ fontSize: "0.82rem", color: "#a09a90", lineHeight: 1.6, marginBottom: 24 }}>
|
||||
@@ -307,7 +307,7 @@ export default function ProjectsPage() {
|
||||
padding: "10px 22px", borderRadius: 7,
|
||||
background: "#1a1a1a", color: "#fff",
|
||||
border: "none", fontSize: "0.84rem", fontWeight: 600,
|
||||
fontFamily: "Outfit, sans-serif", cursor: "pointer",
|
||||
fontFamily: "var(--font-inter), ui-sans-serif, sans-serif", cursor: "pointer",
|
||||
}}
|
||||
>
|
||||
Create your first project
|
||||
|
||||
Reference in New Issue
Block a user