Full 1:1 migration preserving all visuals, animations and behavior: - Nuxt 4 + Vue 3 (script setup, TypeScript strict) with SSG output - Tailwind CSS v4 with @tailwindcss/vite - Ant Design Vue 4 (dark theme, RTL, Persian locale) for design system - Pinia for state management (ui + contact stores) - motion-v (framer-motion port) for all animations - lucide-vue-next for icons - SEO improvements: og:image, canonical fix, real 404 page, JSON-LD services - JS bundle reduced from 302KB to 239KB gzip - Docker/nginx deployment preserved (out/ -> nginx) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { theme } from "ant-design-vue";
|
|
import type { ThemeConfig } from "ant-design-vue/es/config-provider/context";
|
|
|
|
/**
|
|
* Design-system palette — mirrors the Tailwind `@theme` tokens in assets/css/main.css.
|
|
* Keep both in sync: Tailwind drives layout/sections, Ant Design drives form controls.
|
|
*/
|
|
export const palette = {
|
|
bg: "#0a0a0c",
|
|
panel: "#121216",
|
|
panel2: "#17171c",
|
|
ink: "#edede6",
|
|
muted: "#8e8e96",
|
|
accent: "#ff5a00",
|
|
accentSoft: "#ff7a2a",
|
|
hazard: "#ffb800",
|
|
line: "#232329",
|
|
success: "#34d399", // tailwind emerald-400
|
|
} as const;
|
|
|
|
export const antdTheme: ThemeConfig = {
|
|
algorithm: theme.darkAlgorithm,
|
|
token: {
|
|
colorPrimary: palette.accent,
|
|
colorInfo: palette.accent,
|
|
colorWarning: palette.hazard,
|
|
colorSuccess: palette.success,
|
|
colorBgBase: palette.bg,
|
|
colorBgContainer: palette.bg,
|
|
colorBgElevated: palette.panel,
|
|
colorBorder: palette.line,
|
|
colorBorderSecondary: palette.line,
|
|
colorText: palette.ink,
|
|
colorTextDescription: palette.muted,
|
|
colorTextPlaceholder: "rgba(142, 142, 150, 0.5)",
|
|
colorTextLightSolid: palette.bg,
|
|
fontFamily: "var(--font-sans)",
|
|
fontSize: 14,
|
|
borderRadius: 8,
|
|
controlOutlineWidth: 0,
|
|
motionDurationMid: "0.15s",
|
|
wireframe: false,
|
|
},
|
|
};
|