Files
GMW/services/frontend/tailwind.config.js
T

190 lines
6.7 KiB
JavaScript
Raw Normal View History

/** ═══════════════════════════════════════════════════════════════════════
* IMPHNEN Design System — Tailwind Configuration
* Approachable Modernism untuk komunitas programmer Indonesia 🇮🇩
* ═══════════════════════════════════════════════════════════════════════ */
/** @type {import('tailwindcss').Config} */
export default {
content: ["./index.html", "./src/**/*.{ts,tsx}"],
theme: {
extend: {
/* ─── Typography — Poppins Monofamily ─────────────────────────── */
fontFamily: {
sans: ["Poppins", "ui-sans-serif", "system-ui", "-apple-system", "BlinkMacSystemFont", "Segoe UI", "sans-serif"],
display: ["Poppins", "sans-serif"],
},
fontSize: {
display: ["60px", { lineHeight: "68px", fontWeight: "700", letterSpacing: "-0.04em" }],
"headline-lg": ["40px", { lineHeight: "48px", fontWeight: "600", letterSpacing: "-0.02em" }],
"headline-md": ["28px", { lineHeight: "36px", fontWeight: "600", letterSpacing: "-0.01em" }],
"title-lg": ["20px", { lineHeight: "28px", fontWeight: "600" }],
"body-lg": ["18px", { lineHeight: "28px", fontWeight: "400", letterSpacing: "0.01em" }],
"body-md": ["16px", { lineHeight: "24px", fontWeight: "400", letterSpacing: "0.01em" }],
"label-md": ["14px", { lineHeight: "20px", fontWeight: "600", letterSpacing: "0.02em" }],
"label-sm": ["12px", { lineHeight: "16px", fontWeight: "500", letterSpacing: "0.03em" }],
},
/* ─── Brand Colors — IMPHNEN Signature ────────────────────────── */
colors: {
/* Surface */
background: "#ffffff",
foreground: "#1a1a1a",
muted: {
DEFAULT: "#f5f5f5",
foreground: "#666666",
},
accent: {
DEFAULT: "#f0f0f0",
foreground: "#1a1a1a",
},
card: {
DEFAULT: "#ffffff",
foreground: "#1a1a1a",
},
popover: {
DEFAULT: "#ffffff",
foreground: "#1a1a1a",
},
/* Primary — #23a1eb */
primary: {
DEFAULT: "#23a1eb",
foreground: "#ffffff",
soft: "#e1f0fd",
hover: "#1a8fd9",
active: "#0877c1",
},
/* Secondary — #1877f2 (Facebook) */
secondary: {
DEFAULT: "#1877f2",
foreground: "#ffffff",
soft: "#e7f1ff",
},
/* Tertiary — #5865f2 (Discord) */
tertiary: {
DEFAULT: "#5865f2",
foreground: "#ffffff",
soft: "#eef0ff",
},
/* Semantic */
success: {
DEFAULT: "#22c55e",
soft: "#dcfce7",
},
warning: {
DEFAULT: "#f59e0b",
soft: "#fef3c7",
},
destructive: {
DEFAULT: "#e4405f",
foreground: "#ffffff",
soft: "#ffebee",
},
info: {
DEFAULT: "#3b82f6",
soft: "#dbeafe",
},
/* Border & Ring */
border: "#e0e0e0",
input: "#e0e0e0",
ring: "#23a1eb",
},
/* ─── Border Radius — Friendly Geometry ───────────────────────── */
borderRadius: {
sm: "0.25rem",
DEFAULT: "0.5rem",
md: "0.75rem",
lg: "1rem",
xl: "1.5rem",
full: "9999px",
},
/* ─── Box Shadow — Subtle Elevation ───────────────────────────── */
boxShadow: {
sm: "0 1px 2px rgba(0, 0, 0, 0.06)",
DEFAULT: "0 1px 3px rgba(0, 0, 0, 0.06), 0 1px 2px rgba(0, 0, 0, 0.04)",
md: "0 4px 12px rgba(0, 0, 0, 0.08)",
lg: "0 16px 40px rgba(0, 0, 0, 0.12)",
glow: "0 0 0 3px rgba(35, 161, 235, 0.15)",
},
/* ─── Spacing — Rhythm System ────────────────────────────────── */
spacing: {
xs: "4px",
sm: "12px",
md: "24px",
lg: "40px",
xl: "64px",
gutter: "24px",
},
maxWidth: {
container: "1280px",
},
/* ─── Transition Timing ───────────────────────────────────────── */
transitionDuration: {
fast: "150ms",
base: "200ms",
slow: "300ms",
},
transitionTimingFunction: {
snappy: "cubic-bezier(0.4, 0, 0.2, 1)",
},
/* ─── Animations — Signature IMPHNEN ──────────────────────────── */
animation: {
"bar-pulse": "barPulse 0.4s ease-in-out infinite",
"fade-in-up": "fadeInUp 0.5s ease-out",
"fade-in": "fadeIn 0.3s ease-out",
"scale-in": "scaleIn 0.3s ease-out",
"slide-in-right": "slideInRight 0.3s ease-out",
"shimmer": "shimmer 1.5s ease-in-out infinite",
"notification-pulse": "notificationPulse 2s ease-in-out infinite",
"mascot-wiggle": "mascotWiggle 0.6s ease-in-out",
"glow-pulse": "glowPulse 3s ease-in-out infinite",
},
keyframes: {
barPulse: {
"0%, 100%": { transform: "scaleY(0.8)" },
"50%": { transform: "scaleY(1.2)" },
},
fadeInUp: {
"0%": { opacity: "0", transform: "translateY(20px)" },
"100%": { opacity: "1", transform: "translateY(0)" },
},
fadeIn: {
"0%": { opacity: "0" },
"100%": { opacity: "1" },
},
scaleIn: {
"0%": { opacity: "0", transform: "scale(0.95)" },
"100%": { opacity: "1", transform: "scale(1)" },
},
slideInRight: {
"0%": { opacity: "0", transform: "translateX(20px)" },
"100%": { opacity: "1", transform: "translateX(0)" },
},
notificationPulse: {
"0%": { boxShadow: "0 0 0 0 rgba(35, 161, 235, 0.4)" },
"70%": { boxShadow: "0 0 0 8px transparent" },
"100%": { boxShadow: "0 0 0 0 transparent" },
},
mascotWiggle: {
"0%, 100%": { transform: "rotate(0deg)" },
"15%": { transform: "rotate(-8deg)" },
"30%": { transform: "rotate(6deg)" },
"45%": { transform: "rotate(-4deg)" },
"60%": { transform: "rotate(2deg)" },
},
},
},
},
plugins: [],
};