Refine mobile layout updates

هذا الالتزام موجود في:
2026-05-02 22:41:27 +03:00
الأصل 8e52455c08
التزام c9cb188d7b
4 ملفات معدلة مع 69 إضافات و34 حذوفات

عرض الملف

@@ -247,6 +247,7 @@
.type-hero-title {
font-size: var(--text-hero-title);
line-height: 1.08;
text-wrap: balance;
}
.navbar-brand-mobile {
@@ -255,16 +256,6 @@
text-overflow: ellipsis;
}
.hero-title-mobile-lines {
display: flex;
flex-direction: column;
gap: 0.08em;
}
.hero-title-mobile-lines span {
display: block;
}
@media (min-width: 1024px) {
.type-hero-title-latin {
font-size: var(--text-hero-title-latin);
@@ -396,6 +387,14 @@
box-shadow: var(--button-secondary-shadow);
}
.hero-action-link {
min-width: 210px;
min-height: 58px;
padding: 0.95rem 1.6rem;
font-size: 16px;
line-height: 1.2;
}
.display-face {
font-family: var(--font-display), serif;
}
@@ -685,6 +684,11 @@
flex: 1 1 auto;
}
.navbar-brand-mobile {
line-height: 1.12;
margin-bottom: 0.35rem;
}
.navbar-logo-shell {
padding: 0.45rem;
border-radius: 18px;
@@ -733,12 +737,14 @@
.navbar-specialty {
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
white-space: normal;
overflow: visible;
text-overflow: clip;
font-size: 11px;
letter-spacing: 0.06em;
line-height: 1.35;
letter-spacing: 0.04em;
line-height: 1.4;
text-wrap: pretty;
margin-top: 0;
}
.type-page-title {
@@ -771,6 +777,18 @@
padding: 1.25rem 1rem;
}
.hero-action-group {
justify-content: flex-start;
gap: 0.75rem;
}
.hero-action-link {
min-width: 170px;
min-height: 46px;
padding: 0.7rem 1rem;
font-size: 13px;
}
.line-frame::before,
.line-frame::after {
height: 56px;
@@ -779,6 +797,25 @@
}
@media (max-width: 430px) {
.navbar-brand-lockup {
align-items: flex-start;
}
.navbar-brand-copy {
min-width: 0;
padding-top: 0.15rem;
}
.navbar-brand-mobile {
margin-bottom: 0.45rem;
}
.navbar-specialty {
max-width: 100%;
font-size: 10.5px;
line-height: 1.45;
}
.type-hero-title {
font-size: clamp(30px, 11.5vw, 40px);
line-height: 1.02;
@@ -799,16 +836,16 @@
.hero-action-group {
display: flex;
flex-direction: column;
flex-direction: row;
justify-content: flex-start;
align-items: flex-start;
flex-wrap: wrap;
gap: 0.75rem;
}
.hero-action-group > * {
width: auto;
min-width: min(100%, 13.5rem);
padding: 0.8rem 1.35rem;
font-size: 13px;
min-width: 150px;
}
}
@@ -826,6 +863,11 @@
font-size: clamp(18px, 5.8vw, 22px);
}
.navbar-specialty {
font-size: 10px;
letter-spacing: 0.03em;
}
.contact-card {
padding: 1rem 0.875rem;
}

عرض الملف

@@ -16,11 +16,6 @@ export function HomePage({ language }: { language: Language }) {
const dir = getDirection(language);
const t = portfolioContent[language];
const founderName = language === "ar" ? sharedProfile.founderNameAr : sharedProfile.founderNameEn;
const founderNameParts = founderName.trim().split(/\s+/);
const mobileFounderNameLines =
founderNameParts.length > 2
? [`${founderNameParts[0]} ${founderNameParts[1]}`, founderNameParts.slice(2).join(" ")]
: [founderName];
const address = language === "ar" ? sharedProfile.addressAr : sharedProfile.address;
const heroImageAlt =
language === "ar"
@@ -68,12 +63,7 @@ export function HomePage({ language }: { language: Language }) {
language === "en" ? "type-hero-title-latin" : ""
}`}
>
<span className="hidden sm:inline">{founderName}</span>
<span className="hero-title-mobile-lines sm:hidden">
{mobileFounderNameLines.map((line) => (
<span key={line}>{line}</span>
))}
</span>
{founderName}
</h1>
<div className="mt-8 max-w-2xl space-y-4">
@@ -89,15 +79,15 @@ export function HomePage({ language }: { language: Language }) {
</div>
<div className={`hero-action-group mt-10 flex flex-wrap gap-4 ${dir === "rtl" ? "justify-start" : ""}`}>
<Link href={`${basePath}#projects`} className="button-primary">
<Link href={`${basePath}#projects`} className="button-primary hero-action-link">
{t.ui.viewProjects}
</Link>
{hasResume ? (
<Link href={resumeFile.href} className="button-secondary" download>
<Link href={resumeFile.href} className="button-secondary hero-action-link" download>
{t.ui.downloadCv}
</Link>
) : (
<Link href={`${basePath}/resume`} className="button-secondary">
<Link href={`${basePath}/resume`} className="button-secondary hero-action-link">
{t.ui.onlineResume}
</Link>
)}

عرض الملف

@@ -65,7 +65,7 @@ export function Navbar({ language }: { language: Language }) {
</div>
</div>
<div className={`navbar-mobile-controls flex items-center gap-2 md:hidden ${dir === "rtl" ? "flex-row-reverse" : ""}`}>
<div className="navbar-mobile-controls flex items-center gap-2 md:hidden">
<ThemeToggle language={language} />
<LanguageToggle language={language} />
<MobileNav

3
package-lock.json مولّد
عرض الملف

@@ -20,6 +20,9 @@
"postcss": "8.4.49",
"tailwindcss": "3.4.17",
"typescript": "5.7.2"
},
"engines": {
"node": "20.x"
}
},
"node_modules/@alloc/quick-lru": {