/* ═══════════════════════════════════════════════════════════════ ADMIN PANEL STYLES - AADHAAR PRO Organized CSS with Reusable Utility Classes ═══════════════════════════════════════════════════════════════ */ /* ═══════════════════════════════════════════════════════════════ SECTION 1: REUSABLE UTILITY CLASSES (DRY Principles) Use these across multiple components ═══════════════════════════════════════════════════════════════ */ /* ─── Master Hover Effect (Stat Card Style) ──────────────────────*/ /* Apply to ANY element for premium hover animation */ .hover-effect-master { position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .hover-effect-master::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .hover-effect-master:hover { border-color: var(--primary-color); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); transform: translateY(-3px); } .hover-effect-master:hover::before { opacity: 1; } /* ─── Card Base Styles ───────────────────────────────────────────*/ .card-base { background: var(--card-bg); border: 1px solid var(--border-color); border-radius: 16px; padding: 24px; } /* ─── Button Base Styles ─────────────────────────────────────────*/ .button-base { padding: 10px 18px; border-radius: 10px; font-family: 'Outfit', sans-serif; font-size: 0.9rem; font-weight: 500; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; gap: 8px; position: relative; overflow: hidden; } .button-base::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .button-base:hover { border-color: var(--primary-color); color: var(--primary-color); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); transform: translateY(-3px); } .button-base:hover::before { opacity: 1; } /* ─── Input/Select Base Styles ───────────────────────────────────*/ .input-base { padding: 12px 16px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--card-bg); color: var(--text-color); font-family: 'Outfit', sans-serif; font-size: 0.9rem; cursor: pointer; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .input-base::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .input-base:hover { border-color: var(--primary-color); box-shadow: 0 4px 12px rgba(67, 97, 238, 0.1); transform: translateY(-1px); } .input-base:hover::before { opacity: 1; } .input-base:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.1); } /* ─── Table Row Base Styles ──────────────────────────────────────*/ .table-row-base { position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .table-row-base::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .table-row-base:hover { background: var(--bg-color); transform: translateX(4px); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); } .table-row-base:hover::before { opacity: 1; } /* ─── Badge/Pill Base Styles ─────────────────────────────────────*/ .badge-base { display: inline-block; padding: 4px 12px; border-radius: 20px; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .badge-base:hover { transform: scale(1.05); } /* Status Variants */ .badge-pending { background: rgba(245, 158, 11, 0.1); color: #b45309; } .badge-approved { background: rgba(34, 197, 94, 0.1); color: #15803d; } .badge-rejected { background: rgba(239, 68, 68, 0.1); color: #b91c1c; } /* ─── Layout Utilities ───────────────────────────────────────────*/ .grid-auto-fit { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; } .flex-center { display: flex; align-items: center; justify-content: center; } .flex-between { display: flex; align-items: center; justify-content: space-between; } /* ─── Animation Utilities ────────────────────────────────────────*/ @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } .animate-fade-in { animation: fadeIn 0.3s ease; } .animate-slide-up { animation: slideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1); } /* ═══════════════════════════════════════════════════════════════ SECTION 2: ADMIN LAYOUT & STRUCTURE ═══════════════════════════════════════════════════════════════ */ /* Admin Grid Layout */ .admin-grid { display: grid; grid-template-columns: 1fr; gap: 30px; margin-top: 20px; } /* Section Management */ .admin-section { display: none; opacity: 0; transform: translateY(20px); transition: all 0.4s ease; } .admin-section.active { display: block; opacity: 1; transform: translateY(0); } /* ═══════════════════════════════════════════════════════════════ SECTION 3: TAB NAVIGATION COMPONENTS ═══════════════════════════════════════════════════════════════ */ /* ─── Admin Tabs ─────────────────────────────────────────────────*/ .admin-tabs { display: flex; gap: 8px; margin-bottom: 25px; overflow-x: auto; padding-bottom: 5px; scrollbar-width: none; } .admin-tabs::-webkit-scrollbar { display: none; } .admin-tab-btn { padding: 12px 24px; border-radius: 12px; border: 2px solid var(--border-color); background: transparent; font-family: 'Outfit', sans-serif; font-size: 0.95rem; font-weight: 500; cursor: pointer; color: var(--text-muted); white-space: nowrap; display: flex; align-items: center; gap: 8px; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .admin-tab-btn::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .admin-tab-btn:hover, .admin-tab-btn.tab-hover-effect:hover { border-color: var(--primary-color); color: var(--primary-color); transform: translateY(-3px); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); } .admin-tab-btn:hover::before, .admin-tab-btn.tab-hover-effect:hover::before { opacity: 1; } .admin-tab-btn.active, .admin-tab-btn.tab-hover-effect.active { background: var(--primary-color); border-color: var(--primary-color); color: white; box-shadow: 0 8px 20px rgba(67, 97, 238, 0.2); transform: translateY(-3px); } .admin-tab-btn.active:hover, .admin-tab-btn.tab-hover-effect.active:hover { box-shadow: 0 10px 25px rgba(67, 97, 238, 0.3); } /* ─── Payment Tabs ───────────────────────────────────────────────*/ .payment-tabs-container { display: flex; gap: 4px; margin: 20px 0; overflow-x: auto; padding-bottom: 5px; } .payment-tab-btn { padding: 12px 24px; border-radius: 8px; border: 2px solid var(--border-color); background: var(--card-bg); font-family: 'Outfit', sans-serif; font-size: 0.9rem; cursor: pointer; color: var(--text-color); white-space: nowrap; display: flex; align-items: center; gap: 8px; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .payment-tab-btn::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .payment-tab-btn:hover, .payment-tab-btn.tab-hover-effect:hover { border-color: var(--primary-color); color: var(--primary-color); transform: translateY(-3px); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); } .payment-tab-btn:hover::before, .payment-tab-btn.tab-hover-effect:hover::before { opacity: 1; } .payment-tab-btn.active, .payment-tab-btn.tab-hover-effect.active { background: var(--primary-color); border-color: var(--primary-color); color: white; box-shadow: 0 8px 20px rgba(67, 97, 238, 0.2); transform: translateY(-3px); } .payment-tab-btn.active:hover, .payment-tab-btn.tab-hover-effect.active:hover { box-shadow: 0 10px 25px rgba(67, 97, 238, 0.3); } /* ─── Ticket Filter Tabs ─────────────────────────────────────────*/ .ticket-filter-tabs { display: flex; gap: 6px; padding: 12px 16px; border-bottom: 1px solid var(--border-color); flex-wrap: wrap; background: var(--bg-secondary); } .tf-tab { font-size: 0.75rem; padding: 8px 16px; border-radius: 20px; border: 2px solid var(--border-color); cursor: pointer; background: var(--card-bg); color: var(--text-color); font-weight: 600; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .tf-tab::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .tf-tab:hover, .tf-tab.tab-hover-effect:hover { border-color: var(--primary-color); color: var(--primary-color); transform: translateY(-3px); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); } .tf-tab:hover::before, .tf-tab.tab-hover-effect:hover::before { opacity: 1; } .tf-tab.on { background: var(--card-bg) !important; border-color: var(--border-color) !important; color: var(--text-color) !important; font-weight: 600 !important; } /* ─── Wallet Filter Select ───────────────────────────────────────*/ .wallet-filter-select { padding: 12px 16px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--card-bg); color: var(--text-color); font-size: 0.9rem; cursor: pointer; min-width: 160px; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .wallet-filter-select::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .wallet-filter-select:hover, .wallet-filter-select.input-hover-effect:hover { border-color: var(--primary-color); box-shadow: 0 4px 12px rgba(67, 97, 238, 0.1); transform: translateY(-1px); } .wallet-filter-select:hover::before, .wallet-filter-select.input-hover-effect:hover::before { opacity: 1; } /* ─── Wallet Sort Select ─────────────────────────────────────────*/ .wallet-sort-select { padding: 12px 16px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--card-bg); color: var(--text-color); font-size: 0.9rem; cursor: pointer; min-width: 180px; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .wallet-sort-select::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .wallet-sort-select:hover, .wallet-sort-select.input-hover-effect:hover { border-color: var(--primary-color); box-shadow: 0 4px 12px rgba(67, 97, 238, 0.1); transform: translateY(-1px); } .wallet-sort-select:hover::before, .wallet-sort-select.input-hover-effect:hover::before { opacity: 1; } /* ─── Wallet Controls ────────────────────────────────────────────*/ .wallet-controls { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 16px; } .wallet-search-wrap { flex: 1; min-width: 240px; position: relative; } .wallet-search-wrap i { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--text-muted); } .wallet-controls input, .wallet-controls select { padding: 12px 16px; border-radius: 12px; border: 1px solid var(--border-color); background: var(--card-bg); color: var(--text-color); font-family: 'Outfit', sans-serif; font-size: 0.9rem; transition: all 0.3s ease; cursor: pointer; } .wallet-controls input:hover, .wallet-controls select:hover { border-color: var(--primary-color); box-shadow: 0 4px 12px rgba(67, 97, 238, 0.1); transform: translateY(-1px); } .wallet-controls input:focus, .wallet-controls select:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.1); } .wallet-search-wrap input { width: 100%; padding-left: 36px; } /* ─── Wallet Controls Inline ─────────────────────────────────────*/ .wallet-controls-inline { display: flex; gap: 16px; align-items: center; margin: 20px 0; flex-wrap: wrap; } .wallet-search-wrap-inline { position: relative; flex: 1; min-width: 250px; } .wallet-search-wrap-inline i { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--text-muted); z-index: 2; } .wallet-search-wrap-inline input { width: 100%; padding: 12px 12px 12px 40px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--card-bg); color: var(--text-color); font-size: 0.9rem; } /* ─── Payment Controls ───────────────────────────────────────────*/ .payment-controls-container { display: flex; gap: 12px; margin-bottom: 20px; flex-wrap: wrap; } /* ─── Search Box ─────────────────────────────────────────────────*/ .search-box { position: relative; flex: 1; min-width: 250px; } .search-box i { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--text-muted); transition: color 0.3s cubic-bezier(0.4, 0, 0.2, 1); z-index: 2; } .search-box:hover i { color: var(--primary-color); } .search-box input { width: 100%; padding: 12px 16px 12px 40px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--card-bg); color: var(--text-color); font-family: 'Outfit', sans-serif; font-size: 0.9rem; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .search-box input::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .search-box input:hover, .search-box input.input-hover-effect:hover { border-color: var(--primary-color); box-shadow: 0 4px 12px rgba(67, 97, 238, 0.1); transform: translateY(-1px); } .search-box input:hover::before, .search-box input.input-hover-effect:hover::before { opacity: 1; } .search-box input:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.1); } /* ─── Filter/Sort Selects ────────────────────────────────────────*/ .filter-select { padding: 12px 16px; border: 1px solid var(--border-color); border-radius: 12px; background: var(--card-bg); color: var(--text-color); font-family: 'Outfit', sans-serif; font-size: 0.9rem; min-width: 140px; cursor: pointer; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .filter-select::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .filter-select:hover, .filter-select.input-hover-effect:hover { border-color: var(--primary-color); box-shadow: 0 4px 12px rgba(67, 97, 238, 0.1); transform: translateY(-1px); } .filter-select:hover::before, .filter-select.input-hover-effect:hover::before { opacity: 1; } .filter-select:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.1); } /* ─── Admin Tab Container ────────────────────────────────────────*/ .admin-tabs-container { display: flex; gap: 4px; margin-bottom: 20px; overflow-x: auto; padding-bottom: 5px; } /* ─── Tab Badge ──────────────────────────────────────────────────*/ .tab-badge { display: none; background: #e74c3c; color: #fff; border-radius: 20px; font-size: 0.7rem; padding: 1px 7px; margin-left: 6px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .payment-tab-btn:hover .tab-badge, .admin-tab-btn:hover .tab-badge { transform: scale(1.1); box-shadow: 0 4px 12px rgba(231, 76, 60, 0.3); } /* ─── Welcome Banner ─────────────────────────────────────────────*/ .admin-banner { background: var(--primary-gradient) !important; border-radius: 20px; padding: 30px; color: #fff !important; border: 2px solid red; border: none !important; box-shadow: 0 10px 30px rgba(67, 97, 238, 0.2) !important; position: relative; overflow: hidden; } .admin-banner h1 { color: #fff !important; margin: 0 0 8px 0 !important; } .admin-banner p { color: rgba(255, 255, 255, 0.9) !important; margin: 0 !important; } .admin-banner .btn-premium.small { padding: 8px 16px !important; font-size: 0.9rem !important; background: rgba(255, 255, 255, 0.15) !important; border: 1px solid rgba(255, 255, 255, 0.3) !important; color: #fff !important; } .admin-banner-decoration { position: absolute; right: -30px; top: -30px; width: 120px; height: 120px; background: rgba(255, 255, 255, 0.1); border-radius: 50%; } /* ─── Stat Grid ──────────────────────────────────────────────────*/ .stat-grid-container { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; margin-top: 20px; } /* ─── Feature Grid Admin ───────────────────────────────────────*/ .feature-grid-admin { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-top: 30px; } /* ─── Logo Area Icon ─────────────────────────────────────────────*/ .logo-area i { color: var(--warning); } /* ─── Open Ticket Count Badge ────────────────────────────────────*/ #open-ticket-count { display: none; background: #e74c3c; color: #fff; border-radius: 20px; font-size: 0.7rem; padding: 1px 6px; margin-left: auto; } /* ─── Enhanced Stat Cards ────────────────────────────────────────*/ .stat-card { background: var(--card-bg); border: 1px solid var(--border-color); border-radius: 16px; padding: 24px; display: flex; align-items: center; gap: 20px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; } .stat-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .stat-card:hover { border-color: var(--primary-color); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); transform: translateY(-3px); } .stat-card:hover::before { opacity: 1; } .stat-icon { width: 56px; height: 56px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 1.6rem; flex-shrink: 0; } .stat-info h3 { font-size: 1.6rem; margin: 0 0 6px 0; color: var(--text-color); font-weight: 700; } .stat-info p { font-size: 0.9rem; color: var(--text-muted); margin: 0; font-weight: 500; } /* ─── Enhanced Feature Cards ─────────────────────────────────────*/ .feature-card-admin { background: var(--card-bg); border: 1px solid var(--border-color); border-radius: 18px; padding: 25px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .feature-card-admin:hover { border-color: var(--primary-color); box-shadow: 0 12px 35px rgba(0, 0, 0, 0.1); transform: translateY(-3px); } .feature-card-admin h4 { margin: 0 0 18px 0; font-size: 1.1rem; display: flex; align-items: center; gap: 10px; color: var(--text-color); font-weight: 600; } .action-buttons { display: flex; flex-wrap: wrap; gap: 12px; } .ra-btn { padding: 10px 18px; border-radius: 10px; border: 2px solid var(--border-color); background: transparent; font-family: 'Outfit', sans-serif; font-size: 0.9rem; font-weight: 500; cursor: pointer; color: var(--text-color); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; display: flex; align-items: center; gap: 8px; } .ra-btn::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .ra-btn:hover { border-color: var(--primary-color); color: var(--primary-color); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); transform: translateY(-3px); } .ra-btn:hover::before { opacity: 1; } .ra-btn.primary { background: var(--primary-color); border-color: var(--primary-color); color: white; } .ra-btn.primary:hover { background: #3a0ca3; border-color: #3a0ca3; transform: translateY(-2px); box-shadow: 0 6px 20px rgba(67, 97, 238, 0.3); } /* ─── Table Wrapper ──────────────────────────────────────────────*/ .table-wrapper { background: var(--card-bg); border-radius: 20px; border: 1px solid var(--border-color); padding: 25px; overflow-x: auto; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.02); } .admin-table { width: 100%; border-collapse: collapse; } .admin-table th { text-align: left; padding: 18px 15px; font-size: 0.9rem; color: var(--text-muted); font-weight: 600; text-transform: uppercase; letter-spacing: 1px; border-bottom: 2px solid var(--border-color); } .admin-table td { padding: 18px 15px; border-bottom: 1px solid var(--border-color); font-size: 0.95rem; vertical-align: middle; } .admin-table tr { position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .admin-table tr::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .admin-table tr:hover, .admin-table tr.table-row-hover:hover { background: var(--bg-color); transform: translateX(4px); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); } .admin-table tr:hover::before, .admin-table tr.table-row-hover:hover::before { opacity: 1; } /* ─── User Info Styling ────────────────────────────────────────*/ .user-cell { display: flex; flex-direction: column; gap: 4px; } .user-cell strong { color: var(--text-color); } .user-cell small { color: var(--text-muted); font-size: 0.8rem; } /* ─── Status Badges ──────────────────────────────────────────────*/ .status-pill { padding: 6px 14px; border-radius: 8px; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; } .status-pending { background: rgba(245, 158, 11, 0.1); color: #b45309; } .status-approved { background: rgba(34, 197, 94, 0.1); color: #15803d; } .status-rejected { background: rgba(239, 68, 68, 0.1); color: #b91c1c; } /* ─── Action Buttons ─────────────────────────────────────────────*/ .admin-actions { display: flex; gap: 10px; } .btn-verify { padding: 8px 16px; border-radius: 10px; font-size: 0.85rem; font-weight: 600; cursor: pointer; border: none; transition: var(--transition); } .btn-approve { background: var(--success); color: #fff; } .btn-reject { background: var(--error); color: #fff; } .btn-verify:hover { transform: translateY(-2px); opacity: 0.9; } .proof-link { color: var(--primary-color); text-decoration: none; font-weight: 600; display: flex; align-items: center; gap: 6px; } .proof-link:hover { text-decoration: underline; } /* ─── Ticket Panel Split Layout ────────────────────────────────*/ .ticket-panel { display: grid; grid-template-columns: 340px 1fr; gap: 20px; min-height: 550px; margin-top: 20px; } .ticket-list-col { background: var(--card-bg); border: 1px solid var(--border-color); border-radius: 16px; overflow: hidden; display: flex; flex-direction: column; position: relative; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .ticket-list-col::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .ticket-list-col:hover::before { opacity: 1; } .ticket-list-header { padding: 16px 20px; border-bottom: 1px solid var(--border-color); display: flex; align-items: center; justify-content: space-between; background: var(--bg-secondary); } .ticket-list-header h4 { font-size: 1rem; font-weight: 700; color: var(--text-color); margin: 0; } .ticket-list-header button { width: 36px; height: 36px; border-radius: 10px; border: 2px solid var(--border-color); background: transparent; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; } .ticket-list-header button::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .ticket-list-header button:hover { border-color: var(--primary-color); color: var(--primary-color); transform: translateY(-3px); box-shadow: 0 8px 20px rgba(67, 97, 238, 0.15); } .ticket-list-header button:hover::before { opacity: 1; } .ticket-items { overflow-y: auto; max-height: 500px; flex: 1; scrollbar-width: thin; scrollbar-color: var(--border-color) transparent; } .tkt-row { padding: 14px 20px; border-bottom: 1px solid var(--border-color); cursor: pointer; position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .tkt-row::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .tkt-row:hover { background: var(--bg-color); transform: translateX(4px); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); } .tkt-row:hover::before { opacity: 1; } .tkt-row.active { background: rgba(67, 97, 238, 0.05); border-left: 3px solid var(--primary-color); transform: translateX(4px); } .tkt-row-top { display: flex; align-items: center; gap: 8px; margin-bottom: 4px; } .tkt-num { font-size: 0.7rem; color: var(--text-muted); font-family: monospace; } .tkt-name { font-size: 0.9rem; font-weight: 600; flex: 1; color: var(--text-color); } .tkt-time { font-size: 0.7rem; color: var(--text-muted); } .tkt-row-bot { display: flex; align-items: center; gap: 8px; } .tkt-subject { font-size: 0.8rem; color: var(--text-muted); flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .priority-dot { width: 8px; height: 8px; border-radius: 50%; flex-shrink: 0; } .p-high { background: #ff4757; box-shadow: 0 0 5px rgba(255, 71, 87, 0.5); } .p-medium { background: #ffa502; } .p-low { background: #2ed573; } /* ─── Status pills ───────────────────────────────────────────────*/ .spill { display: inline-block; font-size: 0.65rem; font-weight: 700; padding: 3px 10px; border-radius: 20px; text-transform: uppercase; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .spill-open { background: rgba(255, 71, 87, 0.15); color: #ff4757; border: 1px solid rgba(255, 71, 87, 0.2); } .spill-pending { background: rgba(255, 165, 2, 0.15); color: #ffa502; border: 1px solid rgba(255, 165, 2, 0.2); } .spill-resolved { background: rgba(46, 213, 115, 0.15); color: #2ed573; border: 1px solid rgba(46, 213, 115, 0.2); } .spill-closed { background: var(--bg-color); color: var(--text-muted); border: 1px solid var(--border-color); } /* ─── Category pills ─────────────────────────────────────────────*/ .cpill { display: inline-block; font-size: 0.7rem; font-weight: 600; padding: 3px 12px; border-radius: 20px; background: var(--bg-secondary); border: 1px solid var(--border-color); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } /* ─── Ticket detail col ────────────────────────────────────────*/ .ticket-detail-col { background: var(--card-bg); border: 1px solid var(--border-color); border-radius: 16px; display: flex; flex-direction: column; overflow: hidden; position: relative; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .ticket-detail-col::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .ticket-detail-col:hover::before { opacity: 1; } .detail-head { padding: 24px; border-bottom: 1px solid var(--border-color); background: var(--bg-secondary); } .detail-head-top { display: flex; align-items: center; gap: 12px; margin-bottom: 12px; } .detail-head-num { font-size: 0.8rem; color: var(--text-muted); font-family: monospace; } .detail-head-name { font-size: 1.1rem; font-weight: 700; flex: 1; color: var(--text-color); } .detail-head-meta { display: flex; align-items: center; gap: 15px; flex-wrap: wrap; font-size: 0.85rem; color: var(--text-muted); } .chat-window { flex: 1; padding: 20px; overflow-y: auto; max-height: 450px; display: flex; flex-direction: column; gap: 15px; background: var(--bg-color); } .chat-msg { max-width: 85%; display: flex; flex-direction: column; } .chat-msg.from-user { align-self: flex-start; } .chat-msg.from-admin { align-self: flex-end; } .chat-bubble { padding: 12px 16px; border-radius: 15px; font-size: 0.9rem; line-height: 1.6; word-wrap: break-word; } .from-user .chat-bubble { background: var(--card-bg); border: 1px solid var(--border-color); color: var(--text-color); border-bottom-left-radius: 4px; } .from-admin .chat-bubble { background: var(--primary-gradient); color: #fff; border-bottom-right-radius: 4px; box-shadow: 0 4px 15px rgba(67, 97, 238, 0.2); } .chat-meta { font-size: 0.7rem; color: var(--text-muted); margin-top: 5px; padding: 0 5px; } .from-admin .chat-meta { text-align: right; } .reply-footer { padding: 20px; border-top: 1px solid var(--border-color); background: var(--card-bg); } .reply-textarea { width: 100%; border: 1px solid var(--border-color); border-radius: 12px; padding: 12px 15px; font-size: 0.9rem; font-family: inherit; resize: none; background: var(--bg-color); color: var(--text-color); margin-bottom: 15px; transition: var(--transition); } .reply-textarea:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 4px rgba(67, 97, 238, 0.1); } .reply-actions { display: flex; gap: 10px; flex-wrap: wrap; } .ra-btn { font-size: 0.85rem; padding: 10px 18px; border-radius: 10px; border: 1px solid var(--border-color); cursor: pointer; font-weight: 600; background: var(--bg-color); color: var(--text-color); transition: var(--transition); } .ra-btn:hover { transform: translateY(-2px); border-color: var(--text-muted); } .ra-btn.primary { background: var(--primary-gradient); color: #fff; border: none; box-shadow: 0 4px 12px rgba(67, 97, 238, 0.2); } .ra-btn.resolve { background: #2ed573; color: #fff; border: none; } .ra-btn.escalate { background: #ffa502; color: #fff; border: none; } /* ─── Wallet KPI Grid ────────────────────────────────────────────*/ .wallet-kpi-grid { display: grid; grid-template-columns: repeat(4, minmax(150px, 1fr)); gap: 14px; margin: 20px 0; } .wallet-kpi-card { background: var(--card-bg); border: 1px solid var(--border-color); border-radius: 16px; padding: 20px; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; cursor: pointer; } .wallet-kpi-card::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .wallet-kpi-card:hover { transform: translateY(-2px); box-shadow: 0 8px 25px rgba(0, 0, 0, 0.1); border-color: var(--primary-color); } .wallet-kpi-card:hover::before { opacity: 1; } .wallet-kpi-label { color: var(--text-muted); font-size: 0.78rem; margin-bottom: 6px; } .wallet-kpi-value { font-size: 1.4rem; font-weight: 700; color: var(--text-color); } /* ─── Wallet KPI Accent Bars ─────────────────────────────────────*/ .wallet-kpi-accent { position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .wallet-kpi-card:hover .wallet-kpi-accent { opacity: 1; } .wallet-kpi-accent.balance { background: linear-gradient(90deg, #00b894, #00cec9); } .wallet-kpi-accent.activity { background: linear-gradient(90deg, #fd9644, #feca57); } .wallet-kpi-accent.low-balance { background: linear-gradient(90deg, #ff7675, #ff6b81); } /* ─── Wallet Controls ────────────────────────────────────────────*/ .wallet-controls { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 16px; } .wallet-search-wrap { flex: 1; min-width: 240px; position: relative; } .wallet-search-wrap i { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--text-muted); } .wallet-controls input, .wallet-controls select { padding: 12px 16px; border-radius: 12px; border: 1px solid var(--border-color); background: var(--card-bg); color: var(--text-color); font-family: 'Outfit', sans-serif; font-size: 0.9rem; transition: all 0.3s ease; cursor: pointer; } .wallet-controls input:hover, .wallet-controls select:hover { border-color: var(--primary-color); box-shadow: 0 4px 12px rgba(67, 97, 238, 0.1); transform: translateY(-1px); } .wallet-controls input:focus, .wallet-controls select:focus { outline: none; border-color: var(--primary-color); box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.1); } .wallet-search-wrap input { width: 100%; padding-left: 36px; } /* ─── Wallet Layout ──────────────────────────────────────────────*/ .wallet-layout { display: grid; grid-template-columns: 1fr; gap: 16px; } .wallet-panel-head { display: flex; align-items: center; justify-content: space-between; margin-bottom: 10px; } .wallet-panel-head h3 { margin: 0; font-size: 1rem; color: var(--text-color); } .wallet-panel-head span { font-size: 0.8rem; color: var(--text-muted); } .wallet-balance { font-weight: 700; color: var(--primary-color); } .wallet-id { font-size: 0.72rem; color: var(--text-muted); font-family: monospace; } .wallet-cards-grid { display: none; gap: 10px; } .wallet-user-card { border: 1px solid var(--border-color); border-radius: 12px; padding: 12px; display: grid; gap: 8px; background: var(--card-bg); } .wallet-card-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; } .wallet-user-name { font-weight: 600; color: var(--text-color); } .wallet-user-phone { font-size: 0.8rem; color: var(--text-muted); } .wallet-meta { font-size: 0.78rem; color: var(--text-muted); } .wallet-actions-wrap { display: flex; gap: 8px; flex-wrap: wrap; } .wallet-action-btn { font-size: 0.75rem; padding: 6px 10px; border-radius: 8px; border: 1px solid var(--border-color); background: var(--bg-color); color: var(--text-color); cursor: pointer; font-family: 'Outfit', sans-serif; } .wallet-action-btn.primary { background: var(--primary-gradient); color: #fff; border: none; } /* ─── Wallet Table Wrapper ───────────────────────────────────────*/ .wallet-table-wrapper { background: var(--card-bg); border: 1px solid var(--border-color); border-radius: 16px; overflow: hidden; box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05); } .wallet-panel-head { padding: 20px; border-bottom: 1px solid var(--border-color); display: flex; justify-content: space-between; align-items: center; background: var(--bg-secondary); } .wallet-panel-head h3 { margin: 0; font-size: 1.1rem; color: var(--text-color); display: flex; align-items: center; gap: 8px; } .wallet-panel-head h3 i { color: var(--primary-color); } .wallet-panel-head span { font-size: 0.9rem; color: var(--text-muted); font-weight: 500; } .wallet-desktop-table { width: 100%; border-collapse: collapse; } .wallet-desktop-table thead tr { background: var(--bg-secondary); } .wallet-desktop-table th { padding: 16px; text-align: left; font-weight: 600; color: var(--text-color); border-bottom: 2px solid var(--border-color); } .wallet-desktop-table tbody tr { position: relative; overflow: hidden; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .wallet-desktop-table tbody tr::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .wallet-desktop-table tbody tr:hover, .wallet-desktop-table tbody tr.table-row-hover:hover { background: var(--bg-color); transform: translateX(4px); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); } .wallet-desktop-table tbody tr:hover::before, .wallet-desktop-table tbody tr.table-row-hover:hover::before { opacity: 1; } /* ─── Wallet User Details Modal ────────────────────────────────*/ #wallet-user-details-modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(5, 10, 25, 0.7); z-index: 1002; align-items: center; justify-content: center; backdrop-filter: blur(6px); } /* ─── Wallet Manage Modal ────────────────────────────────────────*/ #wallet-manage-modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(5, 10, 25, 0.65); z-index: 1003; align-items: center; justify-content: center; backdrop-filter: blur(6px); } /* ─── Wallet Modal Base ──────────────────────────────────────────*/ .wallet-modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 1002; align-items: center; justify-content: center; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); } .wallet-modal.manage { z-index: 1003; background: rgba(5, 10, 25, 0.65); } .wallet-modal:not(.manage) { background: rgba(5, 10, 25, 0.7); } /* ─── Wallet Detail Card ───────────────────────────────────────*/ .wallet-detail-card { border: 1px solid var(--border-color); border-radius: 12px; padding: 14px; background: var(--bg-color); } .wallet-detail-card h4 { margin: 0 0 10px 0; font-size: 0.92rem; color: var(--text-color); } .wallet-detail-grid { display: grid; grid-template-columns: repeat(2, minmax(180px, 1fr)); gap: 10px; } .wallet-detail-item { font-size: 0.82rem; color: var(--text-muted); } .wallet-detail-item strong { display: block; color: var(--text-color); font-size: 0.86rem; margin-bottom: 3px; } /* ─── Wallet History Table ─────────────────────────────────────*/ .wallet-history-table { width: 100%; border-collapse: collapse; } .wallet-history-table th, .wallet-history-table td { font-size: 0.8rem; text-align: left; border-bottom: 1px solid var(--border-color); padding: 8px 6px; vertical-align: top; } .wallet-history-empty { font-size: 0.82rem; color: var(--text-muted); } /* ─── Wallet Manage Fields ─────────────────────────────────────*/ .wallet-manage-fields { display: grid; gap: 12px; } .wallet-manage-user { color: var(--text-color); font-weight: 600; } .wallet-manage-balance { color: var(--primary-color); font-weight: 700; } .wallet-manage-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; } .wallet-manage-fields label { display: grid; gap: 6px; color: var(--text-muted); font-size: 0.82rem; } .wallet-manage-fields select, .wallet-manage-fields input, .wallet-manage-fields textarea { border: 1px solid var(--border-color); background: var(--bg-color); color: var(--text-color); border-radius: 10px; padding: 10px; font-family: 'Outfit', sans-serif; } .wallet-manage-fields textarea { min-height: 95px; resize: vertical; } .wallet-manage-feedback { min-height: 18px; margin: 0; font-size: 0.8rem; color: #ff7675; } .wallet-manage-feedback.success { color: #2ed573; } .wallet-manage-actions { display: flex; justify-content: flex-end; gap: 10px; } /* ─── Payment Details Modal ──────────────────────────────────────*/ .payment-details-modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); z-index: 1000; align-items: center; justify-content: center; } .payment-details-modal .modal-content { background: var(--card-bg); border-radius: 12px; padding: 30px; max-width: 500px; width: 90%; max-height: 80vh; overflow-y: auto; border: 1px solid var(--border-color); } .payment-details-modal .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .payment-details-modal .modal-header h3 { margin: 0; color: var(--text-color); } .payment-details-modal .modal-header button { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 1.2rem; } .payment-details-modal .modal-body { line-height: 1.6; } .payment-details-modal .modal-footer { margin-top: 20px; display: flex; gap: 10px; justify-content: flex-end; } .payment-details-modal .modal-footer button:first-child { padding: 8px 16px; border: 1px solid var(--border-color); background: var(--card-bg); color: var(--text-color); border-radius: 6px; cursor: pointer; font-family: 'Outfit', sans-serif; } .payment-details-modal .modal-actions { display: flex; gap: 10px; } /* ─── Rejection Modal ────────────────────────────────────────────*/ .rejection-modal { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.7); z-index: 1001; align-items: center; justify-content: center; backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); animation: fadeIn 0.3s ease; } .rejection-modal .modal-content { background: var(--card-bg); border-radius: 16px; padding: 30px; max-width: 500px; width: 90%; border: 1px solid var(--border-color); box-shadow: 0 20px 40px rgba(0, 0, 0, 0.2); animation: slideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1); transform-origin: center; } .rejection-modal .modal-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; } .rejection-modal .modal-header h3 { margin: 0; color: var(--text-color); display: flex; align-items: center; gap: 10px; } .rejection-modal .modal-header h3 i { color: #ff7675; } .rejection-modal .modal-header button { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 1.2rem; transition: color 0.2s ease; } .rejection-modal-body { margin-bottom: 25px; } .rejection-modal-body p { color: var(--text-muted); margin-bottom: 15px; font-size: 0.95rem; line-height: 1.5; } .rejection-modal-body textarea { width: 100%; min-height: 120px; padding: 15px; border: 2px solid var(--border-color); border-radius: 10px; background: var(--card-bg); color: var(--text-color); font-family: 'Outfit', sans-serif; font-size: 0.95rem; resize: vertical; transition: all 0.3s ease; } .rejection-error { color: #ff7675; font-size: 0.85rem; margin-top: 8px; display: none; font-weight: 500; } .rejection-error i { margin-right: 4px; } .rejection-modal-footer { display: flex; gap: 12px; justify-content: flex-end; } .rejection-modal-footer button:first-child { padding: 10px 20px; border: 2px solid var(--border-color); background: transparent; color: var(--text-color); border-radius: 8px; cursor: pointer; font-family: 'Outfit', sans-serif; font-weight: 500; transition: all 0.2s ease; } .rejection-modal-footer button:last-child { padding: 10px 24px; background: #ff7675; color: white; border: none; border-radius: 8px; cursor: pointer; font-family: 'Outfit', sans-serif; font-weight: 600; transition: all 0.2s ease; box-shadow: 0 4px 12px rgba(255, 118, 117, 0.3); } /* ─── Custom Confirm Modal ───────────────────────────────────────*/ #custom-confirm-modal { display: none; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 9999; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); justify-content: center; align-items: center; } #custom-confirm-modal .auth-card { max-width: 400px; padding: 40px; text-align: center; animation: authSlideUp 0.3s ease-out; position: relative; } #modal-icon-container { font-size: 50px; margin-bottom: 15px; color: var(--primary-color); } #custom-confirm-modal h3 { font-size: 1.6rem; font-weight: 700; margin-bottom: 10px; } #custom-confirm-modal p { color: var(--text-muted); margin-bottom: 30px; font-size: 0.95rem; } #custom-confirm-modal .button-group { display: flex; gap: 15px; } #modal-cancel-btn { background: transparent; border: 2px solid var(--border-color); color: var(--text-color); box-shadow: none; } /* ─── Custom Modal ───────────────────────────────────────────────*/ .custom-modal { display: none; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 9999; background: rgba(0, 0, 0, 0.5); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); justify-content: center; align-items: center; } .custom-modal .auth-card { max-width: 400px; padding: 40px; text-align: center; animation: authSlideUp 0.3s ease-out; position: relative; } .custom-modal .button-group { display: flex; gap: 15px; } #modal-cancel-btn { background: transparent; border: 2px solid var(--border-color); color: var(--text-color); box-shadow: none; } /* ─── Loading State ──────────────────────────────────────────────*/ .loading-state { padding: 40px; text-align: center; color: var(--text-muted); } .loading-state i { color: var(--primary-color); margin-right: 8px; } /* ─── System Status Info Div ─────────────────────────────────────*/ .system-status-info { font-size: 0.85rem; color: var(--text-muted); line-height: 1.6; } .system-status-info div { display: flex; justify-content: space-between; margin-bottom: 5px; } /* ─── Status Online Span ─────────────────────────────────────────*/ .status-online { color: #2ed573; font-weight: 600; } /* ─── Responsive adjustments ─────────────────────────────────────*/ @media (max-width: 1024px) { .ticket-panel { grid-template-columns: 1fr; } .wallet-kpi-grid { grid-template-columns: repeat(2, minmax(150px, 1fr)); } } @media (max-width: 768px) { .wallet-kpi-grid { grid-template-columns: 1fr 1fr; } .wallet-desktop-table { display: none; } .wallet-cards-grid { display: grid; } .wallet-detail-grid { grid-template-columns: 1fr; } .wallet-history-table { display: block; overflow-x: auto; } .wallet-manage-grid { grid-template-columns: 1fr; } } @media (max-width: 520px) { .wallet-kpi-grid { grid-template-columns: 1fr; } .wallet-controls select { min-width: 100%; } } /* ─── Shake Animation for Validation ───────────────────────────*/ .shake-animation { animation: shake 0.5s cubic-bezier(.36, .07, .19, .97) both; } /* ─── Enhanced Modal Animations ────────────────────────────────*/ @keyframes modalSlideIn { from { opacity: 0; transform: scale(0.9) translateY(30px); } to { opacity: 1; transform: scale(1) translateY(0); } } /* ─── Enhanced Focus States for Modal Elements ───────────────────*/ #rejection-comment:focus { border-color: var(--primary-color); box-shadow: 0 0 0 4px rgba(67, 97, 238, 0.1); outline: none; } /* ─── Hover Effects for Modal Buttons ────────────────────────────*/ #rejection-comment-modal button:hover { transform: translateY(-1px); box-shadow: 0 6px 20px rgba(0, 0, 0, 0.15); } #rejection-comment-modal button:active { transform: translateY(0); } /* ─── Legacy class support for backward compatibility ────────────*/ .tab-hover-effect { /* Inherits from global .hover-effect-tab */ } .card-hover-effect { /* Inherits from global .hover-effect-card */ } .input-hover-effect { /* Inherits from global .hover-effect-input */ } .quick-action-hover { /* Inherits from global .hover-effect-button or .hover-effect-secondary */ } /* ─── Quick Action Buttons ─────────────────────────────────────*/ .quick-action-btn { padding: 8px 16px; border-radius: 10px; font-family: 'Outfit', sans-serif; font-size: 0.9rem; font-weight: 500; cursor: pointer; color: var(--text-color); transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); position: relative; overflow: hidden; display: flex; align-items: center; gap: 8px; } .quick-action-btn::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 3px; background: linear-gradient(90deg, var(--primary-color), #3a0ca3); opacity: 0; transition: opacity 0.3s ease; } .quick-action-btn:hover { border-color: var(--primary-color); color: var(--primary-color); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08); transform: translateY(-3px); } .quick-action-btn:hover::before { opacity: 1; } .quick-action-btn.primary { background: var(--primary-color); border-color: var(--primary-color); color: white; } .quick-action-btn.primary:hover { background: #3a0ca3; border-color: #3a0ca3; transform: translateY(-2px); box-shadow: 0 6px 20px rgba(67, 97, 238, 0.3); }