diff --git a/docs/brand/GUIDELINES.md b/docs/brand/GUIDELINES.md
new file mode 100644
index 0000000..fcd6d39
--- /dev/null
+++ b/docs/brand/GUIDELINES.md
@@ -0,0 +1,52 @@
+# أنور پآي — Logo Guidelines (compact)
+
+## 1. The logo
+- **Idea:** an A built from a triangle lattice, where the gold piece is the next one being placed. It shows structure being built one step at a time, the way a model generates.
+- **Versions:** horizontal lockup (primary) · stacked · symbol · wordmark only · small-size symbol
+- **Light backgrounds:** `*-light.svg`. **Dark backgrounds:** `*-dark.svg`. **One colour:** `*-black.svg` / `*-white.svg`.
+- Arabic reads right to left, so in the horizontal lockup the symbol sits on the **right**, at the start of the line.
+
+## 2. Clear space
+Keep **one lattice-triangle height** (⅓ of the symbol's height) clear on every side. The zone scales with the logo.
+
+## 3. Minimum size and which symbol to use
+| Version | Screen | Print |
+|---|---|---|
+| Horizontal lockup | 120 px wide | 30 mm wide |
+| Stacked lockup | 72 px wide | 18 mm wide |
+| Symbol, full lattice (`anwarpy-symbol-*`) | **40 px and up** | 10 mm |
+| Symbol, small-size cut (`anwarpy-symbol-small*`, favicons) | **16–32 px** | 4–9 mm |
+
+Below about 40 px the gaps between triangles close up, so switch to the small-size cut there.
+
+## 4. Colour
+| Name | Use | HEX | RGB | CMYK (approx.) |
+|---|---|---|---|---|
+| Basalt ink | Pieces and wordmark on light | `#131519` | 19 21 25 | 24 16 0 90 |
+| Gold (light) | The gold piece on light | `#b08a45` | 176 138 69 | 0 22 61 31 |
+| Gold (dark) | The gold piece on dark | `#d4b47c` | 212 180 124 | 0 15 42 17 |
+| Paper | Pieces and wordmark on dark | `#f2f1ee` | 242 241 238 | 0 0 2 5 |
+
+- Contrast: ink on white 18.3:1 · gold on white 3.2:1 (passes the 3:1 minimum for graphics) · dark gold on `#0c0d0f` 9.8:1.
+- **Gold is used for exactly one piece.** Never colour the wordmark, a second triangle, or a background in gold behind the mark.
+- The CMYK values are naive conversions. Ask the printer for a proof or a Pantone match before printing.
+- The reversed (dark) files use slightly wider gaps (4.6 vs 4.0 units) so the light pieces don't look swollen. Always use the dark files on dark backgrounds rather than recolouring the light ones.
+
+**Approved pairs:** full colour on white or paper · dark version on basalt `#0c0d0f`/`#131519` · black on white · white on photos (calm area only).
+
+## 5. Typography
+- Wordmark: **IBM Plex Sans Arabic Bold**, outlined to vector paths with HarfBuzz shaping. Don't retype it.
+- Licence: SIL Open Font License 1.1 (allows use in a logo).
+
+## 6. Don'ts
+Don't stretch, rotate or mirror · don't move, add or recolour pieces · don't bring back the grey tone ramp · don't add glows, gradients, shadows or outlines · don't put the full-colour mark on gold or busy photos · don't use the full lattice below 40 px · don't rearrange the lockup or retype the name.
+
+## 7. Files
+- `svg/`: masters (symbol, small cut, horizontal, stacked, wordmark; light/dark/black/white; app icon)
+- `png/`: transparent PNG exports
+- `web/`: `favicon.ico`, `favicon.svg` (adapts to light/dark tabs), 16/32/48 px PNGs, `apple-touch-icon.png`, `icon-192/512.png`
+- `presentation.html` + `slides/`: final board with mockups
+
+## 8. Open items
+- No Latin "Anwarpy" lockup yet. Add one if the brand needs to appear in English.
+- No trademark search has been done. Run one (trademark databases plus a reverse image search) before wide rollout.
diff --git a/web/public/anwarpi-logo.jpg b/web/public/anwarpi-logo.jpg
index 7643a3c..eac1077 100644
Binary files a/web/public/anwarpi-logo.jpg and b/web/public/anwarpi-logo.jpg differ
diff --git a/web/public/apple-touch-icon.png b/web/public/apple-touch-icon.png
new file mode 100644
index 0000000..3a514b0
Binary files /dev/null and b/web/public/apple-touch-icon.png differ
diff --git a/web/public/brand/anwarpy-app-icon.svg b/web/public/brand/anwarpy-app-icon.svg
new file mode 100644
index 0000000..c2a716b
--- /dev/null
+++ b/web/public/brand/anwarpy-app-icon.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-favicon-tile.svg b/web/public/brand/anwarpy-favicon-tile.svg
new file mode 100644
index 0000000..4c44ef3
--- /dev/null
+++ b/web/public/brand/anwarpy-favicon-tile.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-horizontal-black.svg b/web/public/brand/anwarpy-horizontal-black.svg
new file mode 100644
index 0000000..1d24571
--- /dev/null
+++ b/web/public/brand/anwarpy-horizontal-black.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-horizontal-dark.svg b/web/public/brand/anwarpy-horizontal-dark.svg
new file mode 100644
index 0000000..d921462
--- /dev/null
+++ b/web/public/brand/anwarpy-horizontal-dark.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-horizontal-light.svg b/web/public/brand/anwarpy-horizontal-light.svg
new file mode 100644
index 0000000..f938c76
--- /dev/null
+++ b/web/public/brand/anwarpy-horizontal-light.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-horizontal-white.svg b/web/public/brand/anwarpy-horizontal-white.svg
new file mode 100644
index 0000000..8247361
--- /dev/null
+++ b/web/public/brand/anwarpy-horizontal-white.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-stacked-dark.svg b/web/public/brand/anwarpy-stacked-dark.svg
new file mode 100644
index 0000000..e149b0a
--- /dev/null
+++ b/web/public/brand/anwarpy-stacked-dark.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-stacked-light.svg b/web/public/brand/anwarpy-stacked-light.svg
new file mode 100644
index 0000000..ba93fc4
--- /dev/null
+++ b/web/public/brand/anwarpy-stacked-light.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-symbol-black.svg b/web/public/brand/anwarpy-symbol-black.svg
new file mode 100644
index 0000000..28719ff
--- /dev/null
+++ b/web/public/brand/anwarpy-symbol-black.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-symbol-dark.svg b/web/public/brand/anwarpy-symbol-dark.svg
new file mode 100644
index 0000000..ffaad96
--- /dev/null
+++ b/web/public/brand/anwarpy-symbol-dark.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-symbol-light.svg b/web/public/brand/anwarpy-symbol-light.svg
new file mode 100644
index 0000000..2307f4c
--- /dev/null
+++ b/web/public/brand/anwarpy-symbol-light.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-symbol-small-dark.svg b/web/public/brand/anwarpy-symbol-small-dark.svg
new file mode 100644
index 0000000..9bccbe3
--- /dev/null
+++ b/web/public/brand/anwarpy-symbol-small-dark.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-symbol-small.svg b/web/public/brand/anwarpy-symbol-small.svg
new file mode 100644
index 0000000..dd53bf2
--- /dev/null
+++ b/web/public/brand/anwarpy-symbol-small.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-symbol-white.svg b/web/public/brand/anwarpy-symbol-white.svg
new file mode 100644
index 0000000..6cbbdf9
--- /dev/null
+++ b/web/public/brand/anwarpy-symbol-white.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-wordmark-dark.svg b/web/public/brand/anwarpy-wordmark-dark.svg
new file mode 100644
index 0000000..f71fbec
--- /dev/null
+++ b/web/public/brand/anwarpy-wordmark-dark.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/anwarpy-wordmark-light.svg b/web/public/brand/anwarpy-wordmark-light.svg
new file mode 100644
index 0000000..b24a763
--- /dev/null
+++ b/web/public/brand/anwarpy-wordmark-light.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/favicon.svg b/web/public/brand/favicon.svg
new file mode 100644
index 0000000..132274b
--- /dev/null
+++ b/web/public/brand/favicon.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/brand/icon-256.png b/web/public/brand/icon-256.png
index 0e57453..b999c34 100644
Binary files a/web/public/brand/icon-256.png and b/web/public/brand/icon-256.png differ
diff --git a/web/public/brand/icon.svg b/web/public/brand/icon.svg
index c3d5ae1..132274b 100644
--- a/web/public/brand/icon.svg
+++ b/web/public/brand/icon.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/web/public/brand/mark-dark-1024.png b/web/public/brand/mark-dark-1024.png
index bddaf94..cdaae55 100644
Binary files a/web/public/brand/mark-dark-1024.png and b/web/public/brand/mark-dark-1024.png differ
diff --git a/web/public/brand/mark-light-1024.png b/web/public/brand/mark-light-1024.png
index 0e62c5b..44d616a 100644
Binary files a/web/public/brand/mark-light-1024.png and b/web/public/brand/mark-light-1024.png differ
diff --git a/web/public/brand/mark-light.svg b/web/public/brand/mark-light.svg
index f394877..2307f4c 100644
--- a/web/public/brand/mark-light.svg
+++ b/web/public/brand/mark-light.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/web/public/brand/mark.svg b/web/public/brand/mark.svg
index ff71bf8..ffaad96 100644
--- a/web/public/brand/mark.svg
+++ b/web/public/brand/mark.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
diff --git a/web/public/favicon-16.png b/web/public/favicon-16.png
new file mode 100644
index 0000000..e5bb1f5
Binary files /dev/null and b/web/public/favicon-16.png differ
diff --git a/web/public/favicon-32.png b/web/public/favicon-32.png
new file mode 100644
index 0000000..de86d18
Binary files /dev/null and b/web/public/favicon-32.png differ
diff --git a/web/public/favicon-48.png b/web/public/favicon-48.png
new file mode 100644
index 0000000..1bd3589
Binary files /dev/null and b/web/public/favicon-48.png differ
diff --git a/web/public/favicon.ico b/web/public/favicon.ico
new file mode 100644
index 0000000..9df2a95
Binary files /dev/null and b/web/public/favicon.ico differ
diff --git a/web/public/favicon.svg b/web/public/favicon.svg
new file mode 100644
index 0000000..132274b
--- /dev/null
+++ b/web/public/favicon.svg
@@ -0,0 +1 @@
+
diff --git a/web/public/icon-192.png b/web/public/icon-192.png
new file mode 100644
index 0000000..a39ccb1
Binary files /dev/null and b/web/public/icon-192.png differ
diff --git a/web/public/icon-512.png b/web/public/icon-512.png
new file mode 100644
index 0000000..d599aed
Binary files /dev/null and b/web/public/icon-512.png differ
diff --git a/web/public/og-default.png b/web/public/og-default.png
index f798c7b..71db326 100644
Binary files a/web/public/og-default.png and b/web/public/og-default.png differ
diff --git a/web/public/site.webmanifest b/web/public/site.webmanifest
new file mode 100644
index 0000000..5c96ba3
--- /dev/null
+++ b/web/public/site.webmanifest
@@ -0,0 +1 @@
+{"name":"أنور پآي","short_name":"أنور پآي","lang":"ar","dir":"rtl","icons":[{"src":"/icon-192.png","sizes":"192x192","type":"image/png"},{"src":"/icon-512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#131519","background_color":"#0c0d0f","display":"standalone"}
diff --git a/web/src/app/brand.css b/web/src/app/brand.css
new file mode 100644
index 0000000..ef60fb5
--- /dev/null
+++ b/web/src/app/brand.css
@@ -0,0 +1,21 @@
+/* Official light lockup for the site's light-only surfaces. Its SVG contains
+ the approved RTL composition and outlined IBM Plex Sans Arabic wordmark. */
+#site img.logo-lockup {
+ display: block;
+ width: 152px;
+ height: 60px;
+ max-width: none;
+ object-fit: contain;
+ flex: none;
+ transform: none;
+ filter: none;
+ background: none;
+ border-radius: 0;
+}
+@media (max-width: 640px) {
+ #site .site-header img.logo-lockup,
+ #site .menu-head img.logo-lockup {
+ width: 132px;
+ height: 52px;
+ }
+}
diff --git a/web/src/app/icon.png b/web/src/app/icon.png
index 59d8edd..d599aed 100644
Binary files a/web/src/app/icon.png and b/web/src/app/icon.png differ
diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx
index 4f2fc0e..6fc15fd 100644
--- a/web/src/app/layout.tsx
+++ b/web/src/app/layout.tsx
@@ -4,6 +4,7 @@ import './globals.css'
import './polish.css'
import './design.css'
import './color-trial.css'
+import './brand.css'
/* Bundle Readex Pro's Arabic/Latin variable font so builds never fetch Google Fonts. */
const sans = localFont({
@@ -13,13 +14,23 @@ const sans = localFont({
})
/* The design is light-only: stop browsers' forced dark modes from repainting it. */
-export const viewport: Viewport = { colorScheme: 'only light', themeColor: '#ffffff' }
+export const viewport: Viewport = { colorScheme: 'only light', themeColor: '#131519' }
export const metadata: Metadata = {
metadataBase: new URL(process.env.NEXT_PUBLIC_SITE_URL ?? 'https://anwarpi.ai'),
title: { default: 'أنور پآي — محتوى الذكاء الاصطناعي العملي بالعربية', template: '%s — أنور پآي' },
description: 'محتوى عربي عملي عن الذكاء الاصطناعي: تشغيل النماذج محليًا، وبناء الوكلاء، والأتمتة وRAG. استكشف تجارب أنور پآي وشروحات الأدوات بخطوات قابلة للتطبيق.',
alternates: { canonical: './' },
+ manifest: '/site.webmanifest',
+ icons: {
+ icon: [
+ { url: '/favicon.ico', sizes: '48x48' },
+ { url: '/favicon.svg', type: 'image/svg+xml' },
+ { url: '/favicon-32.png', sizes: '32x32', type: 'image/png' },
+ { url: '/favicon-16.png', sizes: '16x16', type: 'image/png' },
+ ],
+ apple: [{ url: '/apple-touch-icon.png', sizes: '180x180' }],
+ },
openGraph: {
type: 'website',
siteName: 'أنور پآي',
diff --git a/web/src/components/brand-logo.tsx b/web/src/components/brand-logo.tsx
new file mode 100644
index 0000000..df45fb4
--- /dev/null
+++ b/web/src/components/brand-logo.tsx
@@ -0,0 +1,13 @@
+/* The approved wordmark is outlined in the supplied SVG; never retype it. */
+export default function BrandLogo() {
+ return (
+ // eslint-disable-next-line @next/next/no-img-element
+
+ )
+}
diff --git a/web/src/components/footer.tsx b/web/src/components/footer.tsx
index 9e18afb..4e6f927 100644
--- a/web/src/components/footer.tsx
+++ b/web/src/components/footer.tsx
@@ -1,4 +1,5 @@
import Link from 'next/link'
+import BrandLogo from './brand-logo'
/* Footer — brand column + three link columns. */
export default function Footer() {
@@ -8,9 +9,7 @@ export default function Footer() {
- {/* eslint-disable-next-line @next/next/no-img-element */}
-

- أنور پآي
+
محتوى عربي عملي لتعلّم الذكاء الاصطناعي والوكلاء.
diff --git a/web/src/components/site-menu.tsx b/web/src/components/site-menu.tsx
index cbfba9c..7ad0d45 100644
--- a/web/src/components/site-menu.tsx
+++ b/web/src/components/site-menu.tsx
@@ -2,6 +2,7 @@
import { useEffect } from 'react'
import Link from 'next/link'
+import BrandLogo from './brand-logo'
import { usePathname } from 'next/navigation'
import { SITE_LINKS } from './site-links'
import AccountLink from './account-link'
@@ -71,9 +72,7 @@ export default function SiteMenu({
- {/* eslint-disable-next-line @next/next/no-img-element */}
-

- أنور پآي
+
diff --git a/web/src/components/topnav.tsx b/web/src/components/topnav.tsx
index e999792..002b2c0 100644
--- a/web/src/components/topnav.tsx
+++ b/web/src/components/topnav.tsx
@@ -1,4 +1,5 @@
import Link from 'next/link'
+import BrandLogo from './brand-logo'
import NavLinks from './nav-links'
import SiteMenu from './site-menu'
import AccountLink from './account-link'
@@ -12,9 +13,7 @@ export default function Topnav({ viewer }: { viewer?: { email: string } | null }