diff --git a/03_WordPress/wp-content/themes/ifnex/archive.php b/03_WordPress/wp-content/themes/ifnex/archive.php new file mode 100644 index 0000000..2a958ed --- /dev/null +++ b/03_WordPress/wp-content/themes/ifnex/archive.php @@ -0,0 +1,119 @@ + + + + + +
+
+
+
+ +

+

+
+
+
+ + +
+
+ + +
+ + + +
+ + +
+ 2, + 'prev_text' => ifnex_t('قبلی', 'Previous'), + 'next_text' => ifnex_t('بعدی', 'Next'), + 'class' => 'pagination-links', + ]); + ?> +
+ + +
+ + + + + + + +

+

+ + + +
+ + +
+
+ + \ No newline at end of file diff --git a/03_WordPress/wp-content/themes/ifnex/footer.php b/03_WordPress/wp-content/themes/ifnex/footer.php index ce84ada..0055de1 100644 --- a/03_WordPress/wp-content/themes/ifnex/footer.php +++ b/03_WordPress/wp-content/themes/ifnex/footer.php @@ -1,3 +1,5 @@ + + - - \ No newline at end of file diff --git a/03_WordPress/wp-content/themes/ifnex/front-page.php b/03_WordPress/wp-content/themes/ifnex/front-page.php index 540c1a2..76db11a 100644 --- a/03_WordPress/wp-content/themes/ifnex/front-page.php +++ b/03_WordPress/wp-content/themes/ifnex/front-page.php @@ -1,5 +1,58 @@ + 'International Shipping (Export)', 'desc' => 'Ship commercial and personal packages to over 150 countries worldwide with the fastest air and ground routes.', 'icon' => 'globe', 'link' => '#'], + ['title' => 'Domestic Delivery (Import)', 'desc' => 'Receive packages from around the world and get fast delivery in Iran with precise tracking and full insurance.', 'icon' => 'download', 'link' => '#'], + ['title' => 'Online Ordering', 'desc' => 'Place shipping orders online, pay securely, and track your shipment in real-time through your dedicated dashboard.', 'icon' => 'cart', 'link' => '#'], + ['title' => 'Package Tracking', 'desc' => 'Track your packages instantly with AWB number — see every step from pickup to delivery.', 'icon' => 'tracking', 'link' => '#tracking'], +] : [ + ['title' => 'ارسال بین‌المللی (صادرات)', 'desc' => 'ارسال مرسولات تجاری و شخصی به بیش از ۱۵۰ کشور جهان با سریع‌ترین مسیرهای هوایی و زمینی.', 'icon' => 'globe', 'link' => '#'], + ['title' => 'ارسال داخلی (واردات)', 'desc' => 'دریافت مرسولات از سراسر دنیا و تحویل سریع در ایران با سیستم ردیابی دقیق و بیمه کامل.', 'icon' => 'download', 'link' => '#'], + ['title' => 'سفارش آنلاین', 'desc' => 'ثبت سفارش ارسال به صورت آنلاین، پرداخت امن، و پیگیری لحظه‌ای از طریق پنل کاربری اختصاصی.', 'icon' => 'cart', 'link' => '#'], + ['title' => 'ردیابی مرسوله', 'desc' => 'ردیابی آنی مرسولات با شماره AWB — از لحظه تحویل تا رسیدن به مقصد، هر گام را ببینید.', 'icon' => 'tracking', 'link' => '#tracking'], +]; + +// Steps Data +$steps = $is_en ? [ + ['num' => '1', 'title' => 'Free Registration', 'desc' => 'Create your account in less than a minute and access your dashboard.', 'icon' => 'user'], + ['num' => '2', 'title' => 'Place Order', 'desc' => 'Enter sender, receiver and package details and choose the best service.', 'icon' => 'edit'], + ['num' => '3', 'title' => 'Online Payment', 'desc' => 'Pay shipping costs via secure gateway or IFNEX wallet and receive your receipt.', 'icon' => 'card'], + ['num' => '4', 'title' => 'Live Tracking', 'desc' => 'Track your package route at any moment with your dedicated AWB number.', 'icon' => 'map'], +] : [ + ['num' => '۱', 'title' => 'ثبت‌نام رایگان', 'desc' => 'حساب کاربری خود را در کمتر از یک دقیقه بسازید و به پنل مدیریت دسترسی پیدا کنید.', 'icon' => 'user'], + ['num' => '۲', 'title' => 'ثبت سفارش', 'desc' => 'اطلاعات فرستنده، گیرنده و مشخصات بسته را وارد کنید و بهترین سرویس را انتخاب نمایید.', 'icon' => 'edit'], + ['num' => '۳', 'title' => 'پرداخت آنلاین', 'desc' => 'هزینه ارسال را از طریق درگاه امن یا کیف پول IFNEX پرداخت کنید و رسید دریافت نمایید.', 'icon' => 'card'], + ['num' => '۴', 'title' => 'ردیابی آنی', 'desc' => 'با شماره AWB اختصاصی، مسیر مرسوله خود را در هر لحظه پیگیری کنید.', 'icon' => 'map'], +]; + +// Testimonials Data +$testimonials = $is_en ? [ + ['text' => 'With IFNEX, shipping our goods to Europe became much easier. The online panel is excellent and real-time tracking really helps.', 'name' => 'Mohammad Rezaei', 'role' => 'Export Manager, Niloofar Trading Co.', 'color' => '#f59e0b', 'initial' => 'M'], + ['text' => 'IFNEX support is outstanding. Every time I had a question, I got a quick answer. Prices are competitive too.', 'name' => 'Sara Ahmadi', 'role' => 'Entrepreneur, Online Store', 'color' => '#059669', 'initial' => 'S'], + ['text' => 'Integrating IFNEX Bridge with WordPress was very easy. Tracking and wallet systems are automatically displayed on my site.', 'name' => 'Ali Karimi', 'role' => 'WordPress Developer', 'color' => '#2563eb', 'initial' => 'A'], +] : [ + ['text' => 'با IFNEX ارسال بین‌المللی کالاهایمان به اروپا خیلی ساده‌تر شد. پنل آنلاین عالی است و پیگیری لحظه‌ای واقعاً کمک می‌کند.', 'name' => 'محمد رضایی', 'role' => 'مدیر صادرات، شرکت تجاری نیلوفر', 'color' => '#f59e0b', 'initial' => 'م'], + ['text' => 'پشتیبانی IFNEX فوق‌العاده است. هر بار که سوال داشتم سریع جواب گرفتم. قیمت‌ها هم رقابتی هستند.', 'name' => 'سارا احمدی', 'role' => 'کارآفرین، فروشگاه اینترنتی', 'color' => '#059669', 'initial' => 'س'], + ['text' => 'ادغام IFNEX Bridge با وردپرس خیلی راحت بود. سیستم ردیابی و کیف پول به طور خودکار در سایتم نمایش داده می‌شود.', 'name' => 'علی کریمی', 'role' => 'توسعه‌دهنده وردپرس', 'color' => '#2563eb', 'initial' => 'ع'], +]; +?> + @@ -15,67 +68,81 @@
- آنلاین و فعال · خدمات ۲۴/۷ +

- ارسال مرسوله به سراسر جهان + Fast, Secure & Reliable Global Shipping

-

سریع، امن و قابل اعتماد — از ایران به هر نقطه از دنیا

+

- ردیابی مرسوله - شروع ارسال + + + + + +
- بیش از ۵۰۰ کسب‌وکار فعال +
- پشتیبانی ۲۴ ساعته +
- بیمه کامل مرسولات +
-

ردیابی مرسوله

-

شماره AWB یا بارنامه خود را وارد کنید

+

+ +

+

+ +

- +
- +
-
یا
+
- ثبت سفارش جدید - محاسبه هزینه ارسال + + + + + +
- +۱۵۰ - کشور مقصد + + +
- +۵۰۰ - مشتری فعال + + +
- ۹۸٪ - رضایتمندی + +
@@ -96,64 +163,38 @@
- -

راه‌حل‌های جامع لجستیک

-

از ارسال بین‌المللی تا ردیابی لحظه‌ای — همه چیز در یک پلتفرم یکپارچه

+ +

+ Logistics Solutions' : 'راه‌حل‌های جامع لجستیک'; ?> +

+

+ +

- -
+ $service) : ?> +
+ -
-

ارسال بین‌المللی (صادرات)

-

ارسال مرسولات تجاری و شخصی به بیش از ۱۵۰ کشور جهان با سریع‌ترین مسیرهای هوایی و زمینی.

- - بیشتر بدانید - - -
- - -
-
+ -
-

ارسال داخلی (واردات)

-

دریافت مرسولات از سراسر دنیا و تحویل سریع در ایران با سیستم ردیابی دقیق و بیمه کامل.

- - بیشتر بدانید - - -
- - -
-
+ -
-

سفارش آنلاین

-

ثبت سفارش ارسال به صورت آنلاین، پرداخت امن، و پیگیری لحظه‌ای از طریق پنل کاربری اختصاصی.

- - بیشتر بدانید - - -
- - -
-
+ +
-

ردیابی مرسوله

-

ردیابی آنی مرسولات با شماره AWB — از لحظه تحویل تا رسیدن به مقصد، هر گام را ببینید.

- - ردیابی کنید +

+

+
+
+
@@ -164,48 +205,35 @@
- -

در چهار گام ساده ارسال کنید

-

فرآیند ارسال مرسوله با IFNEX سریع، شفاف و کاملاً آنلاین است

+ +

+ Simple Steps' : 'در چهار گام ساده ارسال کنید'; ?> +

+

+ +

-
+ $step) : ?> +
- ۱ + + -
-

ثبت‌نام رایگان

-

حساب کاربری خود را در کمتر از یک دقیقه بسازید و به پنل مدیریت دسترسی پیدا کنید.

-
- -
-
- ۲ + -
-

ثبت سفارش

-

اطلاعات فرستنده، گیرنده و مشخصات بسته را وارد کنید و بهترین سرویس را انتخاب نمایید.

-
- -
-
- ۳ + -
-

پرداخت آنلاین

-

هزینه ارسال را از طریق درگاه امن یا کیف پول IFNEX پرداخت کنید و رسید دریافت نمایید.

-
- -
-
- ۴ + +
-

ردیابی آنی

-

با شماره AWB اختصاصی، مسیر مرسوله خود را در هر لحظه پیگیری کنید.

+

+

+
@@ -217,24 +245,24 @@
-
+۱۰
-
سال تجربه
-
Years of Experience
+
+
+
+
-
+۱۵۰
-
کشور مقصد
-
Countries Served
+
+
+
+
-
+۱۰,۰۰۰
-
مرسوله تحویل‌شده
-
Packages Delivered
+
+
+
+
-
۹۸٪
-
رضایت مشتریان
-
Customer Satisfaction
+
%
+
+
@@ -246,71 +274,41 @@
- -

آنچه مشتریان ما می‌گویند

-

بیش از ۵۰۰ کسب‌وکار به IFNEX اعتماد کرده‌اند

+ +

+ Say' : 'آنچه مشتریان ما می‌گویند'; ?> +

+

+ +

-
+ $t) : ?> +
+ - - - - +
-

"با IFNEX ارسال بین‌المللی کالاهایمان به اروپا خیلی ساده‌تر شد. پنل آنلاین عالی است و پیگیری لحظه‌ای واقعاً کمک می‌کند."

+

""

-
م
+
-
محمد رضایی
-
مدیر صادرات، شرکت تجاری نیلوفر
-
-
-
- -
-
- - - - - -
-

"پشتیبانی IFNEX فوق‌العاده است. هر بار که سوال داشتم سریع جواب گرفتم. قیمت‌ها هم رقابتی هستند."

-
-
س
-
-
سارا احمدی
-
کارآفرین، فروشگاه اینترنتی
-
-
-
- -
-
- - - - - -
-

"ادغام IFNEX Bridge با وردپرس خیلی راحت بود. سیستم ردیابی و کیف پول به طور خودکار در سایتم نمایش داده می‌شود."

-
-
ع
-
-
علی کریمی
-
توسعه‌دهنده وردپرس
+
+
+
-
مورد اعتماد کسب‌وکارهای برتر
+
+ +
@@ -329,25 +327,29 @@
-

آماده ارسال مرسوله هستید؟

-

همین امروز با ما تماس بگیرید یا حساب کاربری رایگان بسازید

+

+

- +98 21 0000 0000 +
- info@ifnex.com +
- تهران، ایران +
diff --git a/03_WordPress/wp-content/themes/ifnex/functions.php b/03_WordPress/wp-content/themes/ifnex/functions.php index 67a4996..3e02731 100644 --- a/03_WordPress/wp-content/themes/ifnex/functions.php +++ b/03_WordPress/wp-content/themes/ifnex/functions.php @@ -1,8 +1,4 @@ 44, 'width' => 44, + 'height' => 50, 'width' => 180, 'flex-height' => true, 'flex-width' => true, ]); + add_theme_support('html5', ['search-form', 'comment-form', 'gallery', 'caption']); add_theme_support('responsive-embeds'); + add_theme_support('automatic-feed-links'); register_nav_menus([ 'primary' => __('منوی اصلی', 'ifnex'), 'footer_services' => __('منوی فوتر — خدمات', 'ifnex'), 'footer_support' => __('منوی فوتر — پشتیبانی', 'ifnex'), ]); + + load_theme_textdomain('ifnex', get_template_directory() . '/languages'); } add_action('after_setup_theme', 'ifnex_theme_setup'); @@ -39,41 +40,204 @@ foreach ($ifnex_includes as $file) { // ─── Enqueue Assets ──────────────────────────────────── function ifnex_enqueue_assets() { wp_enqueue_style('vazirmatn', 'https://fonts.googleapis.com/css2?family=Vazirmatn:wght@300;400;500;600;700;800;900&display=swap', [], null); - wp_enqueue_style('ifnex-main', get_stylesheet_uri(), ['vazirmatn'], '1.0.1'); // نسخه افزایش یافت برای کش - wp_enqueue_script('ifnex-main', get_template_directory_uri() . '/assets/js/main.js', [], '1.0.0', true); + wp_enqueue_style('ifnex-main', get_stylesheet_uri(), ['vazirmatn'], '1.0.3'); + wp_enqueue_script('ifnex-main', get_template_directory_uri() . '/assets/js/main.js', [], '1.0.1', true); wp_localize_script('ifnex-main', 'ifnexConfig', [ 'ajaxUrl' => admin_url('admin-ajax.php'), 'apiUrl' => get_option('ifnex_api_url', 'http://localhost:8000/api/v1'), 'homeUrl' => home_url('/'), + 'currentLang' => ifnex_get_current_lang(), ]); } add_action('wp_enqueue_scripts', 'ifnex_enqueue_assets'); -// ─── Helper Function برای منوی اصلی (ساده‌تر و تمیزتر از Walker) ── +// ─── تشخیص زبان (سازگار با Polylang) ───────────────── +function ifnex_get_current_lang() { + if (function_exists('pll_current_language')) { + return pll_current_language(); // Polylang + } + return isset($_GET['lang']) && $_GET['lang'] === 'en' ? 'en' : 'fa'; +} + +function ifnex_is_english() { + return ifnex_get_current_lang() === 'en'; +} + +function ifnex_text_direction() { + return ifnex_is_english() ? 'ltr' : 'rtl'; +} + +// ─── سوئیچر زبان (سازگار با Polylang) ─────────────── +function ifnex_language_switcher() { + if (function_exists('pll_the_languages')) { + // Polylang فعال است — از سوئیچر خودکار استفاده کن + $languages = pll_the_languages(['raw' => 1]); + $output = '
'; + + foreach ($languages as $lang) { + $is_active = $lang['current_lang'] ? 'active' : ''; + $label = strtoupper($lang['slug']); + $output .= sprintf( + '%s', + esc_url($lang['url']), + esc_attr($is_active), + esc_attr($lang['name']), + esc_html($label) + ); + + if ($lang !== end($languages)) { + $output .= '|'; + } + } + + $output .= '
'; + return $output; + } + + // Fallback: روش query parameter + $fa_url = ifnex_get_switch_url('fa'); + $en_url = ifnex_get_switch_url('en'); + $current = ifnex_get_current_lang(); + + return '
+ FA + | + EN +
'; +} + +// ─── سوئیچر زبان موبایل (سازگار با Polylang) ───────── +function ifnex_language_switcher_mobile() { + if (function_exists('pll_the_languages')) { + // Polylang فعال است + $languages = pll_the_languages(['raw' => 1]); + $output = '
'; + + foreach ($languages as $lang) { + $is_active = $lang['current_lang'] ? 'active' : ''; + $flag = $lang['slug'] === 'fa' ? '🇮🇷' : '🇬🇧'; + $label = $lang['slug'] === 'fa' ? 'فارسی' : 'English'; + + $output .= sprintf( + '%s %s', + esc_url($lang['url']), + esc_attr($is_active), + esc_html($flag), + esc_html($label) + ); + } + + $output .= '
'; + return $output; + } + + // Fallback: روش query parameter + $current = ifnex_get_current_lang(); + + return ''; +} + +function ifnex_get_switch_url($target_lang) { + $current_url = home_url(add_query_arg(null, null)); + $parsed = parse_url($current_url); + $query = []; + + if (isset($parsed['query'])) { + parse_str($parsed['query'], $query); + } + + if ($target_lang === 'fa') { + unset($query['lang']); + } else { + $query['lang'] = 'en'; + } + + $new_query = !empty($query) ? '?' . http_build_query($query) : ''; + return ($parsed['path'] ?? '/') . $new_query; +} + +// ─── تابع ترجمه (سازگار با Polylang) ────────────────── +function ifnex_t($fa_text, $en_text = null) { + if (ifnex_is_english() && $en_text) { + return $en_text; + } + return $fa_text; +} + +// ─── لوگو با fallback ───────────────────────────────── +function ifnex_get_logo_html($context = 'header') { + $logo_id = ifnex_get_option('logo_image_' . $context . '_id', 0); + + if ($logo_id) { + $custom_logo = wp_get_attachment_image($logo_id, 'full', false, [ + 'class' => 'logo-image', + 'alt' => get_bloginfo('name'), + ]); + + if ($custom_logo) { + return ''; + } + } + + return ''; +} + +// ─── Helper برای منو ────────────────────────────────── function ifnex_render_primary_menu() { + // Polylang به صورت خودکار منوی زبان صحیح را نمایش می‌دهد wp_nav_menu([ 'theme_location' => 'primary', 'container' => false, 'menu_class' => 'nav-list', 'items_wrap' => '
    %3$s
', - 'link_before' => '', - 'link_after' => '', 'fallback_cb' => false, ]); } -// ─── حذف کلاس‌های پیش‌فرض وردپرس از منو ────────────── add_filter('nav_menu_css_class', function($classes) { return array_filter($classes, function($class) { return in_array($class, ['current-menu-item', 'menu-item-has-children']); }); }); -// ─── حذف آیدی‌های پیش‌فرض از آیتم‌های منو ──────────── add_filter('nav_menu_item_id', '__return_null'); -// ─── حذف موارد اضافی وردپرس (سرعت) ────────────────── +// ─── body class بر اساس زبان ────────────────────────── +function ifnex_html_class($classes) { + if (ifnex_is_english()) { + $classes[] = 'lang-en'; + $classes[] = 'ltr'; + } else { + $classes[] = 'lang-fa'; + $classes[] = 'rtl'; + } + return $classes; +} +add_filter('body_class', 'ifnex_html_class'); + +// ─── حذف موارد اضافی ───────────────────────────────── remove_action('wp_head', 'wp_generator'); remove_action('wp_head', 'wlwmanifest_link'); remove_action('wp_head', 'rsd_link'); diff --git a/03_WordPress/wp-content/themes/ifnex/header.php b/03_WordPress/wp-content/themes/ifnex/header.php index 6a8d689..c58c9a1 100644 --- a/03_WordPress/wp-content/themes/ifnex/header.php +++ b/03_WordPress/wp-content/themes/ifnex/header.php @@ -1,5 +1,5 @@ - dir="rtl"> + dir="" lang=""> @@ -14,31 +14,27 @@
- - + + -
+ + + + + + + + +
+
+
+ +
+ + + +
+ + + #name); ?> + +
+ + + + + + + +
+
+ + \ No newline at end of file diff --git a/03_WordPress/wp-content/themes/ifnex/style.css b/03_WordPress/wp-content/themes/ifnex/style.css index 56f0d2e..0bc66c9 100644 --- a/03_WordPress/wp-content/themes/ifnex/style.css +++ b/03_WordPress/wp-content/themes/ifnex/style.css @@ -786,6 +786,665 @@ button { cursor: pointer; font-family: inherit; border: none; background: none; color: var(--white) !important; } +/* ═══════════════════════════════════════════════════ + LOGO IMAGE SUPPORT +════════════════════════════════════════════════════ */ +.logo-img-wrap { + display: flex; + align-items: center; + justify-content: center; + max-height: 50px; + flex-shrink: 0; +} + +.logo-img-wrap img { + max-height: 50px; + max-width: 180px; + width: auto; + height: auto; + object-fit: contain; +} + +.site-footer .logo-img-wrap { + max-height: 60px; +} + +.site-footer .logo-img-wrap img { + max-height: 60px; + max-width: 200px; +} + +/* ═══════════════════════════════════════════════════ + LANGUAGE SWITCHER +════════════════════════════════════════════════════ */ +.lang-switcher { + display: flex; + align-items: center; + gap: 4px; + background: var(--gray-100); + padding: 4px; + border-radius: var(--radius-sm); + margin-left: 8px; +} + +.lang-divider { + color: var(--gray-300); + font-size: 0.85rem; + user-select: none; +} + +.lang-btn { + padding: 6px 12px; + border-radius: 4px; + font-size: 0.8rem; + font-weight: 700; + color: var(--gray-600); + transition: all var(--transition); + text-decoration: none; + letter-spacing: 0.5px; +} + +.lang-btn:hover { + color: var(--primary-dark); +} + +.lang-btn.active { + background: var(--primary); + color: var(--white); + box-shadow: 0 2px 6px rgba(245,158,11,.3); +} + +.lang-switcher-mobile { + display: flex; + gap: 8px; + margin-bottom: 12px; +} + +.lang-switcher-mobile .lang-btn { + flex: 1; + text-align: center; + padding: 12px; + background: var(--gray-100); + border: 1px solid var(--gray-200); + border-radius: var(--radius-md); +} + +.lang-switcher-mobile .lang-btn.active { + background: var(--primary-light); + border-color: var(--primary); + color: var(--primary-dark); +} + +/* ═══════════════════════════════════════════════════ + ENGLISH MODE (LTR ADJUSTMENTS) +════════════════════════════════════════════════════ */ +html.lang-en body { + font-family: 'Inter', 'Segoe UI', system-ui, -apple-system, sans-serif; +} + +html.lang-en .nav-list a, +html.lang-en .btn, +html.lang-en .footer-links a, +html.lang-en .service-link svg { + transform: none; +} + +html.lang-en .service-link svg, +html.lang-en .footer-links a::before { + transform: scaleX(-1); +} + +/* ═══════════════════════════════════════════════════ + BLOG HERO +════════════════════════════════════════════════════ */ +.blog-hero { + position: relative; + padding: 140px 0 80px; + background: linear-gradient(135deg, var(--gray-900) 0%, var(--gray-800) 100%); + overflow: hidden; + text-align: center; +} + +.blog-hero::before { + content: ''; + position: absolute; + inset: 0; + background: radial-gradient(circle at 30% 50%, rgba(245,158,11,.15) 0%, transparent 60%); +} + +.blog-hero-content { + position: relative; + z-index: 1; +} + +.blog-hero-title { + font-size: clamp(2rem, 4vw, 3rem); + font-weight: 900; + color: var(--white); + margin: 12px 0; + letter-spacing: -1px; +} + +.blog-hero-subtitle { + font-size: 1.1rem; + color: rgba(255,255,255,.7); + max-width: 600px; + margin: 0 auto; +} + +/* ═══════════════════════════════════════════════════ + BLOG GRID +════════════════════════════════════════════════════ */ +.blog-section { + padding: 80px 0; + background: var(--gray-100); +} + +.blog-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 32px; +} + +.blog-card { + background: var(--white); + border-radius: var(--radius-md); + overflow: hidden; + box-shadow: var(--shadow-sm); + border: 1px solid var(--gray-200); + transition: transform var(--transition), box-shadow var(--transition); + display: flex; + flex-direction: column; +} + +.blog-card:hover { + transform: translateY(-6px); + box-shadow: var(--shadow-lg); +} + +.blog-card-image { + display: block; + aspect-ratio: 16/10; + overflow: hidden; + background: var(--gray-100); +} + +.blog-card-image img { + width: 100%; + height: 100%; + object-fit: cover; + transition: transform var(--transition); +} + +.blog-card:hover .blog-card-image img { + transform: scale(1.05); +} + +.blog-card-image-placeholder { + display: flex; + align-items: center; + justify-content: center; + background: linear-gradient(135deg, var(--gray-100) 0%, var(--gray-200) 100%); + color: var(--gray-400); +} + +.blog-card-content { + padding: 24px; + display: flex; + flex-direction: column; + flex: 1; +} + +.blog-card-meta { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; + font-size: 0.8rem; + color: var(--gray-500); + flex-wrap: wrap; +} + +.blog-card-date { + display: flex; + align-items: center; + gap: 4px; +} + +.blog-card-category { + background: var(--primary-light); + color: var(--primary-dark); + padding: 3px 10px; + border-radius: 100px; + font-weight: 600; + font-size: 0.75rem; +} + +.blog-card-title { + font-size: 1.15rem; + font-weight: 700; + color: var(--gray-900); + line-height: 1.4; + margin-bottom: 10px; +} + +.blog-card-title a { + color: inherit; + text-decoration: none; + transition: color var(--transition); +} + +.blog-card-title a:hover { + color: var(--primary-dark); +} + +.blog-card-excerpt { + font-size: 0.88rem; + color: var(--gray-600); + line-height: 1.65; + margin-bottom: 18px; + flex: 1; +} + +.blog-card-link { + display: inline-flex; + align-items: center; + gap: 6px; + font-size: 0.85rem; + font-weight: 600; + color: var(--primary-dark); + text-decoration: none; + transition: gap var(--transition); +} + +.blog-card-link:hover { + gap: 10px; +} + +html.lang-en .blog-card-link svg { + transform: scaleX(-1); +} + +/* ═══════════════════════════════════════════════════ + BLOG PAGINATION +════════════════════════════════════════════════════ */ +.blog-pagination { + margin-top: 56px; + display: flex; + justify-content: center; +} + +.pagination-links { + display: flex; + gap: 8px; + list-style: none; +} + +.pagination-links .page-numbers { + display: inline-flex; + align-items: center; + justify-content: center; + min-width: 40px; + height: 40px; + padding: 0 12px; + background: var(--white); + border: 1px solid var(--gray-200); + border-radius: var(--radius-sm); + font-size: 0.9rem; + font-weight: 600; + color: var(--gray-700); + text-decoration: none; + transition: all var(--transition); +} + +.pagination-links .page-numbers:hover { + border-color: var(--primary); + color: var(--primary-dark); + background: var(--primary-light); +} + +.pagination-links .page-numbers.current { + background: var(--primary); + border-color: var(--primary); + color: var(--white); + box-shadow: var(--shadow-amber); +} + +/* ═══════════════════════════════════════════════════ + BLOG EMPTY STATE +════════════════════════════════════════════════════ */ +.blog-empty { + text-align: center; + padding: 80px 24px; + color: var(--gray-400); +} + +.blog-empty svg { + margin-bottom: 20px; + color: var(--gray-300); +} + +.blog-empty h2 { + font-size: 1.5rem; + color: var(--gray-700); + margin-bottom: 10px; +} + +.blog-empty p { + color: var(--gray-500); + margin-bottom: 24px; +} + +/* ═══════════════════════════════════════════════════ + SINGLE POST +════════════════════════════════════════════════════ */ +.single-header { + padding: 120px 0 40px; + background: var(--gray-100); + border-bottom: 1px solid var(--gray-200); +} + +.single-breadcrumb { + display: flex; + align-items: center; + gap: 8px; + font-size: 0.85rem; + color: var(--gray-500); + margin-bottom: 20px; + flex-wrap: wrap; +} + +.single-breadcrumb a { + color: var(--gray-600); + text-decoration: none; + transition: color var(--transition); +} + +.single-breadcrumb a:hover { + color: var(--primary-dark); +} + +.single-breadcrumb .current { + color: var(--gray-400); +} + +.single-categories { + display: flex; + gap: 8px; + margin-bottom: 16px; + flex-wrap: wrap; +} + +.single-category { + background: var(--primary-light); + color: var(--primary-dark); + padding: 5px 14px; + border-radius: 100px; + font-size: 0.8rem; + font-weight: 600; + text-decoration: none; + transition: all var(--transition); +} + +.single-category:hover { + background: var(--primary); + color: var(--white); +} + +.single-title { + font-size: clamp(1.8rem, 4vw, 2.8rem); + font-weight: 900; + color: var(--gray-900); + line-height: 1.25; + margin-bottom: 20px; + letter-spacing: -0.5px; +} + +.single-meta { + display: flex; + align-items: center; + gap: 20px; + font-size: 0.9rem; + color: var(--gray-600); + flex-wrap: wrap; +} + +.single-meta > span { + display: flex; + align-items: center; + gap: 6px; +} + +.single-meta svg { + color: var(--primary); +} + +.single-featured { + padding: 40px 0; + background: var(--white); +} + +.single-featured-img { + width: 100%; + height: auto; + border-radius: var(--radius-lg); + box-shadow: var(--shadow-md); +} + +.single-content { + padding: 48px 0 80px; + background: var(--white); +} + +.single-body { + max-width: 760px; + margin: 0 auto; + font-size: 1.05rem; + line-height: 1.8; + color: var(--gray-800); +} + +.single-body h2 { + font-size: 1.6rem; + font-weight: 800; + margin: 32px 0 16px; + color: var(--gray-900); +} + +.single-body h3 { + font-size: 1.3rem; + font-weight: 700; + margin: 24px 0 12px; + color: var(--gray-900); +} + +.single-body p { + margin-bottom: 18px; +} + +.single-body ul, .single-body ol { + margin: 16px 0 16px 24px; + padding: 0; +} + +html.lang-en .single-body ul, +html.lang-en .single-body ol { + margin: 16px 24px 16px 0; +} + +.single-body li { + margin-bottom: 8px; + list-style: disc; +} + +.single-body ol li { + list-style: decimal; +} + +.single-body blockquote { + border-right: 4px solid var(--primary); + padding: 16px 24px; + background: var(--primary-light); + margin: 24px 0; + border-radius: 0 var(--radius-sm) var(--radius-sm) 0; + font-style: italic; + color: var(--gray-700); +} + +html.lang-en .single-body blockquote { + border-right: none; + border-left: 4px solid var(--primary); + border-radius: var(--radius-sm) 0 0 var(--radius-sm); +} + +.single-body img { + border-radius: var(--radius-md); + margin: 24px 0; +} + +.single-body a { + color: var(--primary-dark); + text-decoration: underline; + text-underline-offset: 3px; +} + +.single-body a:hover { + color: var(--primary); +} + +/* Single: Tags & Share */ +.single-tags, .single-share { + max-width: 760px; + margin: 40px auto 0; + padding: 24px 0; + border-top: 1px solid var(--gray-200); + display: flex; + align-items: center; + gap: 12px; + flex-wrap: wrap; +} + +.single-tags-label, .single-share-label { + font-size: 0.9rem; + font-weight: 600; + color: var(--gray-700); +} + +.single-tag { + display: inline-block; + background: var(--gray-100); + color: var(--gray-700); + padding: 4px 12px; + border-radius: 100px; + font-size: 0.82rem; + text-decoration: none; + transition: all var(--transition); +} + +.single-tag:hover { + background: var(--primary-light); + color: var(--primary-dark); +} + +.share-btn { + display: inline-block; + padding: 6px 14px; + background: var(--gray-100); + color: var(--gray-700); + border-radius: 100px; + font-size: 0.82rem; + font-weight: 600; + text-decoration: none; + transition: all var(--transition); +} + +.share-btn:hover { + background: var(--primary); + color: var(--white); +} + +/* Single: Navigation */ +.single-nav { + max-width: 760px; + margin: 40px auto 0; + padding: 32px 0; + border-top: 1px solid var(--gray-200); + display: grid; + grid-template-columns: 1fr 1fr; + gap: 32px; +} + +.single-nav-prev { + text-align: right; +} + +html.lang-en .single-nav-prev { + text-align: left; +} + +.single-nav-next { + text-align: left; +} + +html.lang-en .single-nav-next { + text-align: right; +} + +.single-nav-label { + display: block; + font-size: 0.8rem; + color: var(--gray-500); + margin-bottom: 6px; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.single-nav a { + font-size: 0.95rem; + font-weight: 600; + color: var(--gray-900); + text-decoration: none; + transition: color var(--transition); + display: inline-block; +} + +.single-nav a:hover { + color: var(--primary-dark); +} + +/* ═══════════════════════════════════════════════════ + ADMIN BAR OFFSET (WordPress Fix) +════════════════════════════════════════════════════ */ +.admin-bar .site-header { top: 32px; } +.admin-bar .mobile-drawer { top: 104px; } +.admin-bar .blog-hero { padding-top: 172px; } +.admin-bar .single-header { padding-top: 152px; } + +@media screen and (max-width: 782px) { + .admin-bar .site-header { top: 46px; } + .admin-bar .mobile-drawer { top: 118px; } + .admin-bar .blog-hero { padding-top: 186px; } + .admin-bar .single-header { padding-top: 166px; } +} + +/* ═══════════════════════════════════════════════════ + RESPONSIVE ADDITIONS +════════════════════════════════════════════════════ */ +@media (max-width: 1024px) { + .blog-grid { grid-template-columns: repeat(2, 1fr); gap: 24px; } +} + +@media (max-width: 768px) { + .lang-switcher { display: none; } + .blog-grid { grid-template-columns: 1fr; } + .blog-hero { padding: 120px 0 60px; } + .blog-section { padding: 48px 0; } + .single-header { padding: 100px 0 32px; } + .single-nav { grid-template-columns: 1fr; gap: 20px; } + .single-title { font-size: 1.8rem; } + .single-meta { font-size: 0.8rem; gap: 12px; } +} + /* ─── Responsive ──────────────────────────────────── */ @media (max-width: 1024px) { .services-grid { grid-template-columns: repeat(2, 1fr); }