+
+
+ ${this.escapeHtml(col.title)}
+ ${cardCount}
-
- ${
- col.cards.length === 0
- ? `
-
- `
- : col.cards.map((card) => this.renderCard(card)).join("")
- }
-
-
- `;
+
+ ${
+ col.cards.length === 0
+ ? `
+
+ `
+ : col.cards.map((card) => this.renderCard(card)).join("")
+ }
+
+
+ ➕ افزودن کارت
+
+
+ `;
},
renderCard(card) {
diff --git a/BKP/14050626/xReleaseAssistant_Kanban_3.html b/BKP/14050626/xReleaseAssistant_Kanban_3.html
new file mode 100644
index 0000000..527dbc3
--- /dev/null
+++ b/BKP/14050626/xReleaseAssistant_Kanban_3.html
@@ -0,0 +1,10517 @@
+
+
+
+
+
+
دستیار انتشار
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ℹ️ اطلاعات پایه محصول فقط قابل مشاهده هستند.
+
+
+
+ توضیحات فقط خواندنی
+
+
+
+
+
+ آدرس URL وبهوک *
+
+
+ شناسه کلاینت *
+
+
+ وضعیت: غیرفعال
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ نام *
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ عنوان *
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+ عنوان *
+
+
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ عنوان *
+
+
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ℹ️ هر وابستگی فقط شامل یک پروژه است. انتخاب نسخه و محیط در زمان ثبت
+ استقرار انجام میشود.
+
+
📋 وابستگیهای فعلی
+
+
+
🔍 افزودن وابستگی جدید
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
📋
+
+ هیچ بردی وجود ندارد
+
+
+ برای شروع، یک برد جدید ایجاد کنید
+
+
+ ➕ ایجاد اولین برد
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BKP/14050626/xReleaseAssistant_Kanban_4.html b/BKP/14050626/xReleaseAssistant_Kanban_4.html
new file mode 100644
index 0000000..e93e6a9
--- /dev/null
+++ b/BKP/14050626/xReleaseAssistant_Kanban_4.html
@@ -0,0 +1,10741 @@
+
+
+
+
+
+
دستیار انتشار
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ℹ️ اطلاعات پایه محصول فقط قابل مشاهده هستند.
+
+
+
+ توضیحات فقط خواندنی
+
+
+
+
+
+ آدرس URL وبهوک *
+
+
+ شناسه کلاینت *
+
+
+ وضعیت: غیرفعال
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ نام *
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ عنوان *
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+ عنوان *
+
+
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ عنوان *
+
+
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ℹ️ هر وابستگی فقط شامل یک پروژه است. انتخاب نسخه و محیط در زمان ثبت
+ استقرار انجام میشود.
+
+
📋 وابستگیهای فعلی
+
+
+
🔍 افزودن وابستگی جدید
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
📋
+
+ هیچ بردی وجود ندارد
+
+
+ برای شروع، یک برد جدید ایجاد کنید
+
+
+ ➕ ایجاد اولین برد
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BKP/14050626/xReleaseAssistant_Kanban_AutoSaveRecover_5.html b/BKP/14050626/xReleaseAssistant_Kanban_AutoSaveRecover_5.html
new file mode 100644
index 0000000..7771293
--- /dev/null
+++ b/BKP/14050626/xReleaseAssistant_Kanban_AutoSaveRecover_5.html
@@ -0,0 +1,11637 @@
+
+
+
+
+
+
دستیار انتشار
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ℹ️ اطلاعات پایه محصول فقط قابل مشاهده هستند.
+
+
+
+ توضیحات فقط خواندنی
+
+
+
+
+
+ آدرس URL وبهوک *
+
+
+ شناسه کلاینت *
+
+
+ وضعیت: غیرفعال
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ نام *
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ عنوان *
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+ عنوان *
+
+
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ عنوان *
+
+
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ℹ️ هر وابستگی فقط شامل یک پروژه است. انتخاب نسخه و محیط در زمان ثبت
+ استقرار انجام میشود.
+
+
📋 وابستگیهای فعلی
+
+
+
🔍 افزودن وابستگی جدید
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
📋
+
+ هیچ بردی وجود ندارد
+
+
+ برای شروع، یک برد جدید ایجاد کنید
+
+
+ ➕ ایجاد اولین برد
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ نام تگ *
+
+
+
+ 🎨 رنگ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⚠️ داده ذخیرهشده خودکار یافت شد
+
+
+ به نظر میرسد در جلسه قبلی، تغییراتی در برنامه اعمال شده و به صورت
+ خودکار ذخیره شدهاند.
+
+
+ 📅 تاریخ ذخیره:
+ —
+
+
+
+
+
+
+ 📊 محتویات دادههای ذخیرهشده:
+
+
+
+ 🌍 محیطها:
+ 0
+
+
+ 📦 محصولات:
+ 0
+
+
+ 🌿 پروژهها:
+ 0
+
+
+ 🚀 استقرارها:
+ 0
+
+
+ 📋 بردها:
+ 0
+
+
+ 🏷️ تگهای برد:
+ 0
+
+
+
+
+
+ آیا میخواهید این دادهها را بازیابی کنید؟
+
+
+ بازیابی: تمام دادههای ذخیرهشده جایگزین
+ دادههای فعلی میشوند
+
+
+ نادیده گرفتن: دادههای خودکار حذف شده و
+ دادههای فعلی حفظ میشوند
+
+
+
+
+
+
+
+
+
+
+
+
ذخیره خودکار انجام شد
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Prompts.txt b/Prompts.txt
index d51563e..6621854 100644
--- a/Prompts.txt
+++ b/Prompts.txt
@@ -1 +1,5 @@
-- پس از هر تغییر مهم، مثلا ثبت تغییرات، افزودن پروژه ها، درج وابستگی، ویرایش و یا پاکسازی، یا بازیابی فایل، اطلاعات باید بروزرسانی شوند که این اتفاق نمی افتد. این موارد رو بررسی کن و پروژه رو با رفع این مشکل بروزرسانی کن سپس کد کامل پروژه رو ارائه بده ...
\ No newline at end of file
+آخرین نسخه تایید شده
+- در گروه بردها از ابزارها یک گزینه بنام "مدیریت تگ ها" اضافه کن و در صورت انتخاب کاربر مودال مدیریت تگ ها را نمایش بده.
+- قابلیت فیلتر کارتها بر اساس تگ در مودال بردها اضافه شود.
+- قابلیت Drag & Drop ستونها و کارتها بین ستونها پیادهسازی شود.
+- قابلیت جستجوی کارتها در برد فعال اضافه شود.
\ No newline at end of file
diff --git a/deepseek_html_20260917_3131af.html b/deepseek_html_20260917_3131af.html
new file mode 100644
index 0000000..340dceb
--- /dev/null
+++ b/deepseek_html_20260917_3131af.html
@@ -0,0 +1,8899 @@
+
+
+
+
+
+
دستیار انتشار
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ℹ️ اطلاعات پایه محصول فقط قابل مشاهده هستند.
+
+
+
+ توضیحات فقط خواندنی
+
+
+
+
+
+ آدرس URL وبهوک *
+
+
+ شناسه کلاینت *
+
+
+ وضعیت: غیرفعال
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ نام *
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ عنوان *
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+ عنوان *
+
+
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+ شناسه فقط خواندنی
+
+
+ عنوان *
+
+
+
+
+ توضیحات
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ℹ️ هر وابستگی فقط شامل یک پروژه است. انتخاب نسخه و محیط در زمان ثبت
+ استقرار انجام میشود.
+
+
📋 وابستگیهای فعلی
+
+
+
🔍 افزودن وابستگی جدید
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
📋
+
+ هیچ بردی وجود ندارد
+
+
+ برای شروع، یک برد جدید ایجاد کنید
+
+
+ ➕ ایجاد اولین برد
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ نام تگ *
+
+
+
+ 🎨 رنگ
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ⚠️ داده ذخیرهشده خودکار یافت شد
+
+
+ به نظر میرسد در جلسه قبلی، تغییراتی در برنامه اعمال شده و به صورت
+ خودکار ذخیره شدهاند.
+
+
+ 📅 تاریخ ذخیره:
+ —
+
+
+
+
+
+ 📊 محتویات دادههای ذخیرهشده:
+
+
+
+ 🌍 محیطها:
+ 0
+
+
+ 📦 محصولات:
+ 0
+
+
+ 🌿 پروژهها:
+ 0
+
+
+ 🚀 استقرارها:
+ 0
+
+
+ 📋 بردها:
+ 0
+
+
+ 🏷️ تگهای برد:
+ 0
+
+
+
+
+
+ آیا میخواهید این دادهها را بازیابی کنید؟
+
+
+ بازیابی: تمام دادههای ذخیرهشده جایگزین
+ دادههای فعلی میشوند
+
+
+ نادیده گرفتن: دادههای خودکار حذف شده و
+ دادههای فعلی حفظ میشوند
+
+
+
+
+
+
+
+
+
+
+
+
ذخیره خودکار انجام شد
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/xReleaseAssistant.html b/xReleaseAssistant.html
index ecd7ac9..7771293 100644
--- a/xReleaseAssistant.html
+++ b/xReleaseAssistant.html
@@ -28,6 +28,7 @@
--danger: #e53e3e;
--warning: #dd6b20;
--info: #3182ce;
+ --column-bg: #edf2f7;
--shadow:
0 4px 6px rgba(0, 0, 0, 0.08), 0 10px 20px rgba(26, 54, 93, 0.1);
--shadow-sm: 0 2px 4px rgba(0, 0, 0, 0.06);
@@ -50,6 +51,7 @@
--text: #e2e8f0;
--text-muted: #cbd5e0;
--text-light: #a0aec0;
+ --column-bg: #374151;
--border: #4a5568;
--border-light: #374151;
--shadow: 0 4px 6px rgba(0, 0, 0, 0.3), 0 10px 20px rgba(0, 0, 0, 0.4);
@@ -1990,6 +1992,688 @@
display: block;
}
+ /* ── Release Boards Modal Toolbar ── */
+ .rb-toolbar {
+ display: flex;
+ gap: 6px;
+ align-items: center;
+ flex-wrap: wrap;
+ padding: 8px 12px;
+ background: linear-gradient(
+ 135deg,
+ var(--primary-dark),
+ var(--primary)
+ );
+ border-bottom: 1px solid var(--border);
+ }
+ .rb-toolbar .btn {
+ background: rgba(255, 255, 255, 0.12);
+ border: 1px solid rgba(255, 255, 255, 0.2);
+ color: #fff;
+ font-size: 11px;
+ padding: 5px 10px;
+ }
+ .rb-toolbar .btn:hover {
+ background: var(--accent);
+ color: var(--primary-dark);
+ }
+ .rb-toolbar .btn.btn-accent {
+ background: linear-gradient(135deg, var(--accent), var(--accent-dark));
+ color: var(--primary-dark);
+ font-weight: 700;
+ }
+ .rb-toolbar .btn.btn-danger {
+ background: linear-gradient(135deg, #f56565, #e53e3e);
+ color: #fff;
+ }
+ .rb-toolbar-separator {
+ width: 1px;
+ height: 24px;
+ background: rgba(255, 255, 255, 0.2);
+ margin: 0 4px;
+ }
+
+ /* ── Release Boards Tab Bar ── */
+ .rb-tabs-bar {
+ background: linear-gradient(
+ 135deg,
+ var(--primary-dark) 0%,
+ var(--primary) 100%
+ );
+ border-bottom: 2px solid var(--accent);
+ display: flex;
+ align-items: center;
+ padding: 0 10px;
+ min-height: 42px;
+ gap: 3px;
+ overflow-x: auto;
+ }
+ .rb-tabs-bar::-webkit-scrollbar {
+ height: 4px;
+ }
+ .rb-tabs-bar::-webkit-scrollbar-thumb {
+ background: rgba(255, 255, 255, 0.2);
+ border-radius: 2px;
+ }
+
+ .rb-tab-item {
+ padding: 7px 14px;
+ background: rgba(255, 255, 255, 0.08);
+ border: 1px solid rgba(255, 255, 255, 0.1);
+ cursor: pointer;
+ font-family: inherit;
+ font-size: 12px;
+ font-weight: 500;
+ color: rgba(255, 255, 255, 0.85);
+ border-radius: 6px 6px 0 0;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ white-space: nowrap;
+ transition: all 0.2s;
+ border-bottom: 2px solid transparent;
+ }
+ .rb-tab-item:hover {
+ background: rgba(255, 255, 255, 0.15);
+ color: #fff;
+ }
+ .rb-tab-item.active {
+ background: var(--accent);
+ color: var(--primary-dark);
+ font-weight: 700;
+ border-bottom-color: var(--primary-dark);
+ }
+ .rb-tab-close {
+ width: 18px;
+ height: 18px;
+ border-radius: 50%;
+ background: transparent;
+ border: none;
+ cursor: pointer;
+ color: inherit;
+ font-size: 11px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ opacity: 0.6;
+ transition: all 0.2s;
+ }
+ .rb-tab-item:hover .rb-tab-close {
+ opacity: 1;
+ }
+ .rb-tab-close:hover {
+ background: var(--danger);
+ color: #fff;
+ }
+
+ .rb-tab-add {
+ background: rgba(255, 255, 255, 0.08);
+ border: 1px dashed rgba(255, 255, 255, 0.3);
+ color: rgba(255, 255, 255, 0.7);
+ padding: 7px 12px;
+ border-radius: 6px;
+ cursor: pointer;
+ font-size: 14px;
+ font-weight: 700;
+ transition: all 0.2s;
+ }
+ .rb-tab-add:hover {
+ background: var(--accent);
+ color: var(--primary-dark);
+ border-color: var(--accent);
+ }
+
+ .rb-empty-tabs {
+ color: rgba(255, 255, 255, 0.5);
+ font-size: 12px;
+ padding: 0 10px;
+ }
+
+ /* ── Release Boards Body ── */
+ .rb-board-area {
+ flex: 1;
+ overflow: auto;
+ padding: 20px;
+ background: var(--board-bg);
+ }
+ .rb-board-wrapper {
+ display: flex;
+ gap: 15px;
+ align-items: flex-start;
+ min-height: calc(100% - 40px);
+ padding-bottom: 20px;
+ }
+ .rb-empty-state {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ height: 100%;
+ color: var(--text-muted);
+ text-align: center;
+ padding: 60px 20px;
+ }
+ .rb-empty-state-icon {
+ font-size: 80px;
+ opacity: 0.3;
+ margin-bottom: 20px;
+ }
+ /* ── سوییچ ستونهای پیشفرض ── */
+ .rb-default-columns-switch {
+ border: 1px solid var(--border);
+ border-radius: var(--radius-sm);
+ padding: 12px;
+ background: var(--border-light);
+ }
+
+ .rb-switch-label {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 12px;
+ cursor: pointer;
+ user-select: none;
+ }
+
+ .rb-switch-info {
+ flex: 1;
+ min-width: 0;
+ }
+
+ .rb-switch-title {
+ font-size: 13px;
+ font-weight: 700;
+ color: var(--text);
+ margin-bottom: 2px;
+ }
+
+ .rb-switch-desc {
+ font-size: 11px;
+ color: var(--text-muted);
+ line-height: 1.5;
+ }
+
+ .rb-default-columns-preview {
+ display: flex;
+ gap: 6px;
+ margin-top: 10px;
+ padding-top: 10px;
+ border-top: 1px dashed var(--border);
+ flex-wrap: wrap;
+ animation: rbFadeIn 0.3s ease;
+ }
+
+ .rb-default-columns-preview.hidden {
+ display: none;
+ }
+
+ .rb-preview-column {
+ flex: 1;
+ min-width: 80px;
+ padding: 8px 10px;
+ border-radius: 6px;
+ font-size: 11px;
+ font-weight: 600;
+ text-align: center;
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ box-shadow: var(--shadow-sm);
+ transition: transform 0.2s;
+ }
+
+ .rb-preview-column:hover {
+ transform: translateY(-2px);
+ }
+
+ @keyframes rbFadeIn {
+ from {
+ opacity: 0;
+ transform: translateY(-5px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+ }
+ /* ═══════════════════════════════════════════════════
+ 🎴 Kanban Columns & Cards (Release Boards)
+ ═══════════════════════════════════════════════════ */
+
+ /* ── ستونها ── */
+ .column {
+ border-radius: var(--radius);
+ min-width: 300px;
+ max-width: 300px;
+ max-height: calc(100% - 20px);
+ display: flex;
+ flex-direction: column;
+ box-shadow: var(--shadow-sm);
+ border: 1px solid var(--border);
+ transition: all 0.2s;
+ background: var(--column-bg);
+ }
+
+ .column-header {
+ padding: 12px 14px;
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ border-bottom: 1px solid var(--border);
+ background: linear-gradient(
+ to bottom,
+ rgba(255, 255, 255, 0.3),
+ transparent
+ );
+ border-radius: var(--radius) var(--radius) 0 0;
+ }
+
+ .column-title {
+ font-weight: 700;
+ font-size: 14px;
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ flex: 1;
+ overflow: hidden;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ }
+
+ .column-count {
+ font-size: 11px;
+ padding: 2px 8px;
+ border-radius: 10px;
+ font-weight: 700;
+ background: rgba(0, 0, 0, 0.15);
+ color: inherit;
+ flex-shrink: 0;
+ }
+
+ .column-actions {
+ display: flex;
+ gap: 4px;
+ flex-shrink: 0;
+ }
+
+ .column-action-btn {
+ background: transparent;
+ border: none;
+ cursor: pointer;
+ color: inherit;
+ opacity: 0.7;
+ padding: 4px 6px;
+ border-radius: 4px;
+ font-size: 14px;
+ transition: all 0.2s;
+ }
+
+ .column-action-btn:hover {
+ background: rgba(0, 0, 0, 0.1);
+ opacity: 1;
+ }
+
+ .column-body {
+ padding: 10px;
+ overflow-y: auto;
+ flex: 1;
+ min-height: 60px;
+ }
+
+ .column-body::-webkit-scrollbar {
+ width: 6px;
+ }
+ .column-body::-webkit-scrollbar-thumb {
+ background: rgba(0, 0, 0, 0.15);
+ border-radius: 3px;
+ }
+
+ .column-footer {
+ padding: 8px;
+ border-top: 1px solid var(--border);
+ }
+
+ /* ── دکمه افزودن کارت ── */
+ .add-card-btn {
+ width: 100%;
+ background: transparent;
+ border: 1px dashed var(--border);
+ color: var(--text-muted);
+ padding: 8px;
+ border-radius: var(--radius-sm);
+ cursor: pointer;
+ font-family: inherit;
+ font-size: 13px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 6px;
+ transition: all 0.2s;
+ }
+
+ .add-card-btn:hover {
+ background: var(--card-bg);
+ border-color: var(--accent);
+ color: var(--accent-dark);
+ }
+
+ /* ── دکمه افزودن ستون ── */
+ .add-column-btn {
+ background: rgba(255, 255, 255, 0.5);
+ border: 2px dashed var(--border);
+ border-radius: var(--radius);
+ min-width: 280px;
+ min-height: 100px;
+ cursor: pointer;
+ color: var(--text-muted);
+ font-family: inherit;
+ font-size: 14px;
+ font-weight: 600;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ gap: 8px;
+ transition: all 0.2s;
+ flex-shrink: 0;
+ }
+
+ [data-theme="dark"] .add-column-btn {
+ background: rgba(255, 255, 255, 0.05);
+ }
+
+ .add-column-btn:hover {
+ background: var(--card-bg);
+ border-color: var(--accent);
+ color: var(--accent-dark);
+ }
+
+ /* ── کارتها ── */
+ .card {
+ background: var(--card-bg);
+ border-radius: 8px;
+ padding: 12px;
+ margin-bottom: 8px;
+ box-shadow: var(--shadow-sm);
+ cursor: pointer;
+ border: 1px solid var(--border);
+ transition: all 0.15s;
+ position: relative;
+ }
+
+ .card:hover {
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
+ transform: translateY(-1px);
+ border-color: var(--accent);
+ }
+
+ .card:active {
+ cursor: grabbing;
+ }
+
+ /* ── تگهای کارت ── */
+ .card-tags {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 4px;
+ margin-bottom: 8px;
+ }
+
+ .card-tag {
+ font-size: 10px;
+ padding: 2px 8px;
+ border-radius: 10px;
+ font-weight: 600;
+ color: white;
+ display: inline-block;
+ }
+
+ /* ── عنوان و توضیحات کارت ── */
+ .card-title {
+ font-weight: 700;
+ font-size: 13px;
+ margin-bottom: 6px;
+ line-height: 1.5;
+ color: var(--text);
+ }
+
+ .card-desc {
+ font-size: 12px;
+ margin-bottom: 8px;
+ line-height: 1.6;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+ overflow: hidden;
+ opacity: 0.85;
+ color: var(--text-muted);
+ }
+
+ /* ── متادیتای کارت ── */
+ .card-meta {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 6px;
+ font-size: 11px;
+ align-items: center;
+ opacity: 0.9;
+ margin-top: 6px;
+ }
+
+ .card-meta-item {
+ display: inline-flex;
+ align-items: center;
+ gap: 3px;
+ background: rgba(0, 0, 0, 0.08);
+ padding: 2px 6px;
+ border-radius: 4px;
+ color: var(--text-muted);
+ }
+
+ [data-theme="dark"] .card-meta-item {
+ background: rgba(255, 255, 255, 0.15);
+ color: var(--text);
+ }
+
+ .card-meta-item.overdue {
+ background: #fed7d7;
+ color: var(--danger);
+ font-weight: 600;
+ opacity: 1;
+ }
+
+ .card-meta-item.soon {
+ background: #fef5e7;
+ color: var(--warning);
+ font-weight: 600;
+ opacity: 1;
+ }
+
+ [data-theme="dark"] .card-meta-item.overdue {
+ background: rgba(229, 62, 62, 0.3);
+ color: #feb2b2;
+ }
+
+ [data-theme="dark"] .card-meta-item.soon {
+ background: rgba(221, 107, 32, 0.3);
+ color: #fbd38d;
+ }
+
+ /* ── نوار پیشرفت چکلیست ── */
+ .card-checklist-progress {
+ width: 100%;
+ height: 4px;
+ background: rgba(0, 0, 0, 0.1);
+ border-radius: 2px;
+ overflow: hidden;
+ margin-top: 8px;
+ }
+
+ [data-theme="dark"] .card-checklist-progress {
+ background: rgba(255, 255, 255, 0.15);
+ }
+
+ .card-checklist-bar {
+ height: 100%;
+ background: linear-gradient(90deg, var(--success), #48bb78);
+ transition: width 0.3s;
+ }
+
+ /* ── چیپهای تگ (برای مودال ویرایش) ── */
+ .tag-chip {
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+ padding: 4px 10px;
+ border-radius: 12px;
+ font-size: 12px;
+ font-weight: 600;
+ color: white;
+ transition: all 0.15s;
+ border: 2px solid transparent;
+ user-select: none;
+ }
+
+ .tag-chip.selected {
+ border-color: var(--primary);
+ transform: scale(1.05);
+ box-shadow:
+ 0 0 0 2px var(--card-bg),
+ 0 0 0 4px var(--primary);
+ }
+
+ .tag-chip:hover {
+ opacity: 0.85;
+ }
+
+ /* ── مدیریت تگها ── */
+ .rb-tag-add-form {
+ background: var(--border-light);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-sm);
+ padding: 12px;
+ margin-bottom: 16px;
+ }
+
+ .rb-tag-list-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ font-size: 13px;
+ font-weight: 700;
+ color: var(--text);
+ margin-bottom: 10px;
+ padding-bottom: 8px;
+ border-bottom: 1px solid var(--border);
+ }
+
+ .rb-tag-count {
+ background: var(--primary);
+ color: #fff;
+ font-size: 11px;
+ padding: 2px 8px;
+ border-radius: 10px;
+ font-weight: 700;
+ }
+
+ .rb-tag-list {
+ max-height: 320px;
+ overflow-y: auto;
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ }
+
+ .rb-tag-list::-webkit-scrollbar {
+ width: 6px;
+ }
+ .rb-tag-list::-webkit-scrollbar-thumb {
+ background: rgba(0, 0, 0, 0.15);
+ border-radius: 3px;
+ }
+
+ .rb-tag-item {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ padding: 8px 12px;
+ background: var(--card-bg);
+ border: 1px solid var(--border);
+ border-radius: var(--radius-sm);
+ transition: all 0.15s;
+ }
+
+ .rb-tag-item:hover {
+ border-color: var(--accent);
+ box-shadow: var(--shadow-sm);
+ }
+
+ .rb-tag-color-dot {
+ width: 16px;
+ height: 16px;
+ border-radius: 50%;
+ flex-shrink: 0;
+ border: 2px solid rgba(0, 0, 0, 0.1);
+ }
+
+ .rb-tag-name {
+ flex: 1;
+ font-size: 13px;
+ font-weight: 600;
+ color: var(--text);
+ }
+
+ .rb-tag-usage {
+ font-size: 11px;
+ color: var(--text-muted);
+ background: var(--border-light);
+ padding: 2px 8px;
+ border-radius: 10px;
+ }
+
+ .rb-tag-actions {
+ display: flex;
+ gap: 4px;
+ }
+
+ .rb-tag-action-btn {
+ background: transparent;
+ border: none;
+ cursor: pointer;
+ padding: 4px 6px;
+ border-radius: 4px;
+ font-size: 13px;
+ opacity: 0.6;
+ transition: all 0.15s;
+ }
+
+ .rb-tag-action-btn:hover {
+ opacity: 1;
+ background: var(--border-light);
+ }
+
+ .rb-tag-action-btn.danger:hover {
+ background: #fed7d7;
+ }
+
+ .rb-tag-empty {
+ text-align: center;
+ padding: 30px 10px;
+ color: var(--text-muted);
+ font-size: 13px;
+ }
+
+ .rb-tag-empty-icon {
+ font-size: 40px;
+ opacity: 0.3;
+ margin-bottom: 10px;
+ }
+
+ /* ── حالت خالی ستون ── */
+ .rb-board-area .empty-state {
+ text-align: center;
+ padding: 20px 10px;
+ color: var(--text-muted);
+ font-size: 12px;
+ }
+
::-webkit-scrollbar {
width: 8px;
height: 8px;
@@ -2815,10 +3499,700 @@