export const CARD = { width: 1200, height: 630, padding: 48 } as const; export const FOOTER_HEIGHT = 148; export const CHIP = { height: 64, radius: 20, border: 2, inset: 8 } as const; export const COLORS = { background: "#fbfafa", surface: "#edecea", text: "#414349", textSecondary: "#676f7a", textLabel: "#555b64", textMuted: "#8a8f96", icon: "#676f7a", rule: "rgba(96, 96, 96, 0.16)", avatarRing: "rgba(65, 67, 73, 0.1)", avatarRingShadow: "rgba(144, 144, 144, 0.4)", headingShadow: "rgba(65, 67, 73, 0.12)", status: { text: "#ffffff", open: { bg: "#16a34a" }, closed: { bg: "#0a0a0a" }, merged: { bg: "#5750f1" }, success: { bg: "#16a34a" }, failed: { bg: "#b82d2d" }, running: { bg: "#5750f1" }, pending: { bg: "#8a8f96" }, timeout: { bg: "#0a0a0a" }, cancelled: { bg: "#0a0a0a" }, }, chip: { background: "#ffffff", stroke: "linear-gradient(to top left, rgba(64, 64, 64, 0.22), rgba(163, 163, 163, 0.22))", shadow: "0 2px 4px rgba(65, 67, 73, 0.04)", innerShadow: "inset 0 4px 2px rgba(245, 245, 245, 0.12)", }, diff: { additions: { bg: "rgba(0, 140, 61, 0.12)", text: "#007a35" }, deletions: { bg: "rgba(200, 49, 49, 0.12)", text: "#b82d2d" }, }, } as const; export const heading = (fontSize: number, lineHeight: number, fontWeight = 400) => ({ fontFamily: "Timeless Grotesk", fontSize, fontWeight, lineHeight, letterSpacing: -0.04 * fontSize, textShadow: `0 ${Math.round(fontSize * 0.0227 * 10) / 10}px 0 ${COLORS.headingShadow}`, }); const inter = (fontSize: number) => ({ fontFamily: "Inter", fontSize, fontWeight: 500, letterSpacing: -0.01 * fontSize, }); export const TYPOGRAPHY = { repoName: heading(144, 1, 500), title: heading(64, 1.1, 500), ownerHandle: heading(48, 1.1), metricValue: heading(56, 1), metricLabel: { fontFamily: "Timeless Grotesk", fontSize: 26, fontWeight: 400, lineHeight: 1.2, letterSpacing: -0.01 * 26, textTransform: "capitalize", }, cardHeader: inter(36), status: inter(34), body: inter(32), } as const;