Commit 853341b5 authored by Mahmoud Aglan's avatar Mahmoud Aglan

fix: update theme to El3ab brand identity + add reset button

- Update variables.css surfaces to match brand navy (#152132)
- Add sidebar-bg and input-bg CSS variables with fallbacks
- Add "Reset to Brand Identity" button in branding settings
- Add resetColors controller action that reverts all colors to
  their default_value from platform_theme
- Reset live DB colors to brand defaults
Co-Authored-By: 's avatarClaude Opus 4.6 <noreply@anthropic.com>
parent c08ba733
...@@ -174,6 +174,7 @@ return [ ...@@ -174,6 +174,7 @@ return [
'branding/colors' => ['module' => 'branding', 'action' => 'colors'], 'branding/colors' => ['module' => 'branding', 'action' => 'colors'],
'branding/assets' => ['module' => 'branding', 'action' => 'assets'], 'branding/assets' => ['module' => 'branding', 'action' => 'assets'],
'branding/update-color' => ['module' => 'branding', 'action' => 'updateColor'], 'branding/update-color' => ['module' => 'branding', 'action' => 'updateColor'],
'branding/reset-colors' => ['module' => 'branding', 'action' => 'resetColors'],
'branding/upload-asset' => ['module' => 'branding', 'action' => 'uploadAsset'], 'branding/upload-asset' => ['module' => 'branding', 'action' => 'uploadAsset'],
// Analytics // Analytics
......
...@@ -91,4 +91,28 @@ class BrandingController ...@@ -91,4 +91,28 @@ class BrandingController
AuditLog::log('upload', 'platform_asset', $id); AuditLog::log('upload', 'platform_asset', $id);
Response::success('تم رفع الملف', '/branding'); Response::success('تم رفع الملف', '/branding');
} }
public function resetColors(array $params, string $method): void
{
Auth::requireCsrf();
Auth::requireRole('superadmin');
$colors = $this->db->select('platform_theme', [
'select' => 'id,default_value',
'category' => 'eq.color',
]);
foreach ($colors as $color) {
if (!empty($color['default_value'])) {
$this->db->update('platform_theme', ['id' => "eq.{$color['id']}"], [
'value' => $color['default_value'],
'updated_at' => date('c'),
]);
}
}
ThemeService::invalidateCache();
AuditLog::log('reset', 'platform_theme', null, null, ['action' => 'reset_to_defaults']);
Response::success('تم إعادة جميع الألوان إلى هوية El3ab الأصلية', '/branding');
}
} }
...@@ -275,6 +275,16 @@ ...@@ -275,6 +275,16 @@
<?php if (empty($colors)): ?> <?php if (empty($colors)): ?>
<div class="card"><div class="empty-state"><h3 class="empty-state-title">لا توجد ألوان محفوظة</h3><p class="empty-state-text">أضف ألوان العلامة التجارية من جدول platform_theme</p></div></div> <div class="card"><div class="empty-state"><h3 class="empty-state-title">لا توجد ألوان محفوظة</h3><p class="empty-state-text">أضف ألوان العلامة التجارية من جدول platform_theme</p></div></div>
<?php else: ?> <?php else: ?>
<div class="flex items-center justify-between mb-4">
<p class="text-sm text-secondary">ألوان هوية El3ab — عدّل أي لون وسيُطبّق مباشرة على الواجهة</p>
<form method="POST" action="/branding/reset-colors" style="margin:0;">
<input type="hidden" name="_csrf" value="<?= Auth::csrfToken() ?>">
<button type="submit" class="btn btn-ghost btn-sm" onclick="return confirm('هل أنت متأكد؟ سيتم إعادة جميع الألوان إلى الافتراضي.')">
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><polyline points="1 4 1 10 7 10"/><path d="M3.51 15a9 9 0 1 0 2.13-9.36L1 10"/></svg>
إعادة للهوية الأصلية
</button>
</form>
</div>
<div class="grid grid-3"> <div class="grid grid-3">
<?php foreach ($colors as $color): ?> <?php foreach ($colors as $color): ?>
<div class="card"> <div class="card">
......
...@@ -206,7 +206,7 @@ ...@@ -206,7 +206,7 @@
.form-input { .form-input {
width: 100%; width: 100%;
padding: var(--space-3) var(--space-4); padding: var(--space-3) var(--space-4);
background: var(--bg-primary); background: var(--input-bg, var(--bg-primary));
border: 1px solid var(--border); border: 1px solid var(--border);
border-radius: var(--radius-md); border-radius: var(--radius-md);
color: var(--text-primary); color: var(--text-primary);
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
.sidebar { .sidebar {
grid-area: sidebar; grid-area: sidebar;
background: var(--bg-secondary); background: var(--sidebar-bg, var(--bg-secondary));
border-inline-end: 1px solid var(--border); border-inline-end: 1px solid var(--border);
position: fixed; position: fixed;
inset-inline-start: 0; inset-inline-start: 0;
......
...@@ -8,12 +8,14 @@ ...@@ -8,12 +8,14 @@
--brand-cyan: #00FFFF; --brand-cyan: #00FFFF;
--brand-purple: #6834BE; --brand-purple: #6834BE;
/* Surface Colors (Dark Theme) */ /* Surface Colors (Dark Theme — El3ab Navy) */
--bg-primary: #0a0e1a; --bg-primary: #152132;
--bg-secondary: #111827; --bg-secondary: #1C2A3F;
--bg-elevated: #1a2235; --bg-elevated: #253A52;
--bg-hover: #1f2937; --bg-hover: #2D4562;
--bg-active: #253348; --bg-active: #354F6E;
--sidebar-bg: #0F1923;
--input-bg: #1A2638;
--border: rgba(255, 255, 255, 0.06); --border: rgba(255, 255, 255, 0.06);
--border-hover: rgba(255, 255, 255, 0.12); --border-hover: rgba(255, 255, 255, 0.12);
--border-focus: rgba(32, 130, 240, 0.5); --border-focus: rgba(32, 130, 240, 0.5);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment