97bd2a12df
deploy / deploy (push) Successful in 1m20s
Full design refactor of the public surface (home, blog, layout) using the taste-skill anti-slop rules. Admin CMS is untouched. - Single locked light theme: #fafafa bg, #18181b text, one accent #2563eb - Syne headings + system body + Vazirmatn (fa); hairline rules, no glows/cards - Remove AI tells: 5-colour palette, gradient text, neon glows, custom cursor, particle canvas, typewriter, scroll cue, per-section eyebrows, progress bars - Replace window scroll listener with an IntersectionObserver sentinel - 8 distinct section layouts; portfolio uses typographic covers (no broken imgs) - Zero em-dashes in visible copy; fix relative-path-safe asset refs - Add missing wwwroot/logo-mark.svg (was 404) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
135 lines
6.0 KiB
Plaintext
135 lines
6.0 KiB
Plaintext
@{
|
|
var locale = (string)(ViewData["Locale"] ?? "fa");
|
|
var isRtl = locale == "fa";
|
|
var dir = isRtl ? "rtl" : "ltr";
|
|
var lang = locale == "fa" ? "fa" : "en";
|
|
var title = (string?)ViewData["Title"] ?? (locale == "fa"
|
|
? "سروش اسعدی - مهندس هوش مصنوعی، مشاور، معمار راهکار"
|
|
: "Soroush Asadi - AI Engineer, Consultant, Solution Architect");
|
|
}
|
|
<!doctype html>
|
|
<html lang="@lang" dir="@dir">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>@title</title>
|
|
<meta name="description" content="@(locale == "fa"
|
|
? "طراحی و پیادهسازی سامانههای هوش مصنوعی در مقیاس سازمانی. راهبرد، LLM و RAG، اتوماسیون عاملمحور، زیرساخت ابری و استک گوگل."
|
|
: "Designing and deploying enterprise-grade AI systems. Strategy, LLM and RAG, agentic automation, cloud infrastructure, and the Google stack.")" />
|
|
<meta name="theme-color" content="#fafafa" />
|
|
|
|
<!-- Fonts: Syne (display) + Vazirmatn (Persian). Body is system sans. -->
|
|
<style>
|
|
@@font-face { font-family:'Syne'; src:url('/fonts/Syne-Variable.woff2') format('woff2'); font-weight:100 900; font-display:swap; }
|
|
@@font-face { font-family:'Vazirmatn'; src:url('/fonts/Vazirmatn-Arabic.woff2') format('woff2'); font-display:swap; }
|
|
</style>
|
|
|
|
<!-- Tailwind Play CDN - minimal config: one accent, neutral zinc scale is built in -->
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
<script>
|
|
tailwind.config = {
|
|
theme: {
|
|
extend: {
|
|
colors: { accent: '#2563eb', accentink: '#1d4ed8' },
|
|
fontFamily: {
|
|
display: ['Syne', 'system-ui', 'sans-serif'],
|
|
fa: ['Vazirmatn', 'system-ui', 'sans-serif'],
|
|
},
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<link rel="stylesheet" href="/css/site.css" />
|
|
<link rel="icon" href="/logo-mark.svg" type="image/svg+xml" />
|
|
</head>
|
|
<body class="site antialiased">
|
|
|
|
<!-- Sentinel for the navbar border (observed by IntersectionObserver) -->
|
|
<div id="nav-sentinel" aria-hidden="true"></div>
|
|
|
|
<!-- Navbar -->
|
|
<header id="navbar" class="fixed inset-x-0 top-0 z-50">
|
|
<div class="mx-auto flex max-w-6xl items-center justify-between px-5 py-3.5 sm:px-8">
|
|
<!-- Logo -->
|
|
<a href="/#top" class="flex items-center gap-2.5" aria-label="@(locale == "fa" ? "خانه" : "Home")">
|
|
<img src="/logo-mark.svg" alt="" width="26" height="26" class="h-[26px] w-[26px]" />
|
|
<span class="font-display text-[15px] font-bold text-zinc-900 @(isRtl ? "font-fa" : "")">
|
|
@(locale == "fa" ? "سروش اسعدی" : "Soroush Asadi")
|
|
</span>
|
|
</a>
|
|
|
|
<!-- Desktop nav -->
|
|
<nav class="hidden items-center gap-7 md:flex" aria-label="Main">
|
|
@if (locale == "fa")
|
|
{
|
|
<a href="/#services" class="nav-link">خدمات</a>
|
|
<a href="/#stack" class="nav-link">استک</a>
|
|
<a href="/#expertise" class="nav-link">تخصص</a>
|
|
<a href="/#portfolio" class="nav-link">نمونهکارها</a>
|
|
<a href="/#blog" class="nav-link">بلاگ</a>
|
|
}
|
|
else
|
|
{
|
|
<a href="/#services" class="nav-link">Services</a>
|
|
<a href="/#stack" class="nav-link">Stack</a>
|
|
<a href="/#expertise" class="nav-link">Expertise</a>
|
|
<a href="/#portfolio" class="nav-link">Portfolio</a>
|
|
<a href="/#blog" class="nav-link">Blog</a>
|
|
}
|
|
<a href="/#contact" class="btn text-sm">@(locale == "fa" ? "رزرو جلسه" : "Book a call")</a>
|
|
<!-- Locale toggle -->
|
|
<form method="post" action="/locale">
|
|
<input type="hidden" name="locale" value="@(locale == "fa" ? "en" : "fa")" />
|
|
<input type="hidden" name="returnUrl" value="@Context.Request.Path@Context.Request.QueryString" />
|
|
<button type="submit" class="nav-link text-xs tracking-wide">@(locale == "fa" ? "EN" : "FA")</button>
|
|
</form>
|
|
</nav>
|
|
|
|
<!-- Mobile menu button -->
|
|
<button id="menu-btn" class="flex flex-col gap-1.5 p-2 md:hidden" aria-label="@(locale == "fa" ? "منو" : "Menu")" aria-expanded="false">
|
|
<span class="block h-0.5 w-5 bg-zinc-800"></span>
|
|
<span class="block h-0.5 w-5 bg-zinc-800"></span>
|
|
<span class="block h-0.5 w-5 bg-zinc-800"></span>
|
|
</button>
|
|
</div>
|
|
|
|
<!-- Mobile drawer -->
|
|
<div id="mobile-menu" class="hidden border-t border-zinc-200 bg-white/95 backdrop-blur-xl md:hidden">
|
|
<nav class="flex flex-col gap-1 px-5 py-4">
|
|
@if (locale == "fa")
|
|
{
|
|
<a href="/#services" class="nav-link py-2">خدمات</a>
|
|
<a href="/#stack" class="nav-link py-2">استک</a>
|
|
<a href="/#expertise" class="nav-link py-2">تخصص</a>
|
|
<a href="/#portfolio" class="nav-link py-2">نمونهکارها</a>
|
|
<a href="/#blog" class="nav-link py-2">بلاگ</a>
|
|
<a href="/#contact" class="nav-link py-2">تماس</a>
|
|
}
|
|
else
|
|
{
|
|
<a href="/#services" class="nav-link py-2">Services</a>
|
|
<a href="/#stack" class="nav-link py-2">Stack</a>
|
|
<a href="/#expertise" class="nav-link py-2">Expertise</a>
|
|
<a href="/#portfolio" class="nav-link py-2">Portfolio</a>
|
|
<a href="/#blog" class="nav-link py-2">Blog</a>
|
|
<a href="/#contact" class="nav-link py-2">Contact</a>
|
|
}
|
|
<form method="post" action="/locale" class="mt-2">
|
|
<input type="hidden" name="locale" value="@(locale == "fa" ? "en" : "fa")" />
|
|
<input type="hidden" name="returnUrl" value="@Context.Request.Path@Context.Request.QueryString" />
|
|
<button type="submit" class="nav-link text-xs tracking-wide">@(locale == "fa" ? "Switch to English" : "تغییر به فارسی")</button>
|
|
</form>
|
|
</nav>
|
|
</div>
|
|
</header>
|
|
|
|
<main>
|
|
@RenderBody()
|
|
</main>
|
|
|
|
<script src="/js/app.js" defer></script>
|
|
@await RenderSectionAsync("Scripts", required: false)
|
|
</body>
|
|
</html>
|