/* TADashboard.css - Standardized & Theme-aware */ :root { --ta-radius: 8px; --ta-radius-lg: 16px; /* Intent-based colors for TA status, using standard system colors where possible */ --ta-red: #ef4444; --ta-red-bg: rgba(239, 68, 68, 0.1); --ta-amber: #f59e0b; --ta-amber-bg: rgba(245, 158, 11, 0.1); --ta-blue: var(--primary); --ta-blue-bg: var(--primary-active); --ta-green: #10b981; --ta-green-bg: rgba(16, 185, 129, 0.1); } .ta-dashboard-container { display: flex; height: 100vh; width: 100%; background: var(--bg-surface); color: var(--text-primary); /* Inherit font-family from root to match chat */ font-family: inherit; overflow: hidden; } /* Internal Sidebar */ .ta-internal-sidebar { width: 240px; background: var(--bg-surface-secondary); border-right: 1px solid var(--border-primary); display: flex; flex-direction: column; flex-shrink: 0; } .sb-head { padding: 0 16px; height: 61px; display: flex; flex-direction: column; justify-content: center; border-bottom: 1px solid var(--border-primary); } .sb-title { font-size: 14px; font-weight: 700; color: var(--primary); } .sb-sub { font-size: 11px; color: var(--text-muted); } .sb-item { margin: 1px 8px; padding: 10px 12px; display: flex; align-items: center; gap: 12px; cursor: pointer; transition: all 0.2s; font-size: 14px; color: var(--text-secondary); border-radius: 8px; border: none; background: transparent; width: calc(100% - 16px); text-align: left; } .sb-item.active { background: var(--primary-active); color: var(--primary); font-weight: 600; } /* Main Content Area */ .ta-main-content { flex: 1; display: flex; flex-direction: column; overflow: hidden; background: var(--bg-surface); min-width: 0; } .ta-scroll-content { flex: 1; overflow-y: auto; padding: 24px; display: flex; flex-direction: column; gap: 24px; } .ta-header { display: flex; justify-content: space-between; align-items: center; height: 61px; padding: 0 24px; background: var(--bg-surface-secondary); border-bottom: 1px solid var(--border-primary); } .ta-title-area h1 { font-size: 16px; font-weight: 700; margin: 0; } /* Cards */ .ta-card-premium { background: var(--bg-surface-secondary); border: 1px solid var(--border-primary); border-radius: 12px; } .ta-card-body { padding: 12px 0; } .card-head { padding: 16px 24px; background: var(--bg-surface-tertiary); border-bottom: 1px solid var(--border-primary); } .card-head h3 { margin: 0; font-size: 14px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; } /* Inputs & Buttons */ .ta-input { width: 100%; background: var(--bg-surface); border: 1px solid var(--border-primary); color: var(--text-primary); border-radius: 8px; padding: 10px 14px; font-size: 14px; outline: none; transition: border-color 0.2s; font-family: inherit; } .ta-input:focus { border-color: var(--primary); } .vibrant-btn { background: var(--primary); color: #ffffff !important; border: none; padding: 10px 20px; font-weight: 600; font-size: 14px; border-radius: 8px; display: flex; align-items: center; justify-content: center; gap: 8px; cursor: pointer; font-family: inherit; } .ta-btn { padding: 8px 16px; border-radius: 8px; border: 1px solid var(--border-primary); background: var(--bg-surface-tertiary); color: var(--text-primary); font-size: 13px; font-weight: 600; cursor: pointer; display: inline-flex; align-items: center; gap: 8px; font-family: inherit; } /* Settings & Logs specific */ .config-group { display: flex; flex-direction: column; gap: 8px; } .config-label { font-size: 12px; font-weight: 700; color: var(--text-muted); text-transform: uppercase; } .ta-avatar-sm { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; } .ta-avatar-sm-placeholder { width: 32px; height: 32px; border-radius: 50%; background: var(--bg-surface-tertiary); display: flex; align-items: center; justify-content: center; color: var(--text-muted); } .ta-list-row { display: flex; padding: 16px 24px; border-bottom: 1px solid var(--border-primary); gap: 16px; } .ta-list-row:last-child { border-bottom: none; } /* Risk Card Professional Styles */ .risk-card-container { margin: 16px; padding: 20px 24px; border-radius: 16px; background: var(--bg-surface-secondary); display: flex; align-items: center; gap: 16px; transition: all 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); border: 1px solid var(--border-primary); position: relative; cursor: default; } .risk-card-container.critical { border-color: rgba(239, 68, 68, 0.3); box-shadow: 0 8px 20px -6px rgba(239, 68, 68, 0.2); } .risk-card-container.critical:hover { transform: translateY(-5px) scale(1.01); border-color: rgba(239, 68, 68, 0.8); box-shadow: 0 20px 40px -12px rgba(239, 68, 68, 0.5); z-index: 10; } .risk-card-container.warning { border-color: rgba(245, 158, 11, 0.3); box-shadow: 0 8px 20px -6px rgba(245, 158, 11, 0.2); } .risk-card-container.warning:hover { transform: translateY(-5px) scale(1.01); border-color: rgba(245, 158, 11, 0.8); box-shadow: 0 20px 40px -12px rgba(245, 158, 11, 0.5); z-index: 10; } /* Markdown Preview Area */ .markdown-content-area { height: 450px; overflow-y: auto; padding: 8px 4px; line-height: 1.8; color: var(--text-primary); font-size: 15px; } .markdown-content-area::-webkit-scrollbar { width: 6px; } .markdown-content-area::-webkit-scrollbar-track { background: transparent; } .markdown-content-area::-webkit-scrollbar-thumb { background: var(--border-primary); border-radius: 10px; } .markdown-content-area::-webkit-scrollbar-thumb:hover { background: var(--text-muted); } .blur-content { filter: blur(8px); opacity: 0.4; pointer-events: none; transition: all 0.4s ease; } /* Refine Chips */ .refine-chips-container { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; } .refine-chip { padding: 6px 14px; border-radius: 20px; background: var(--bg-surface-tertiary); border: 1px solid var(--border-primary); color: var(--text-secondary); font-size: 12px; font-weight: 600; cursor: pointer; transition: all 0.2s; display: flex; align-items: center; gap: 6px; } .refine-chip:hover { border-color: var(--primary); background: var(--bg-surface); } .refine-chip.active { background: var(--primary); color: white; border-color: var(--primary); box-shadow: 0 4px 12px rgba(var(--primary-rgb), 0.3); } .processing-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; background: rgba(var(--bg-surface-rgb), 0.7); backdrop-filter: blur(6px); z-index: 100; border-radius: 12px; } /* Processing overlay với card trắng (dành cho Recap Workflow) */ .processing-overlay-card { position: absolute; top: 0; left: 0; right: 0; bottom: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; background: linear-gradient(135deg, rgba(59, 130, 246, 0.15) 0%, rgba(147, 197, 253, 0.25) 100%); backdrop-filter: blur(4px); z-index: 100; border-radius: 12px; } .processing-card-content { display: flex; flex-direction: column; align-items: center; gap: 16px; padding: 32px; background: rgba(255, 255, 255, 0.95); border-radius: 16px; box-shadow: 0 8px 32px rgba(59, 130, 246, 0.2); } .processing-card-title { margin: 0; font-weight: 700; font-size: 16px; color: #1e3a8a; font-family: inherit; } .processing-card-text { margin: 4px 0 0; font-size: 13px; color: #4b5563; font-family: inherit; } /* Toast Notification */ .toast-container { position: fixed; bottom: 24px; right: 24px; z-index: 9999; display: flex; flex-direction: column-reverse; /* Để toast mới nhất và loading luôn nằm dưới cùng/gần tay nhất */ gap: 12px; pointer-events: none; } .toast-item { pointer-events: auto; min-width: 300px; background: var(--bg-surface-secondary); border: 1px solid var(--border-primary); border-left: 4px solid var(--primary); padding: 14px 20px; border-radius: 12px; box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.2); display: flex; align-items: center; gap: 12px; animation: slide-in-right 0.3s cubic-bezier(0.4, 0, 0.2, 1); } .toast-item.success { border-left-color: var(--ta-green); } .toast-item.error { border-left-color: var(--ta-red); } @keyframes slide-in-right { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* Metrics & Stats */ .metrics-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 20px; margin-bottom: 30px; } .stat-card { background: var(--bg-surface-secondary); border: 1px solid var(--border-primary); padding: 20px 24px; border-radius: 16px; display: flex; flex-direction: column; gap: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.02); } .stat-card.critical { border-bottom: 4px solid var(--ta-red); } .stat-card.warning { border-bottom: 4px solid var(--ta-amber); } .stat-card.success { border-bottom: 4px solid var(--ta-green); } .stat-label { font-size: 11px; font-weight: 700; text-transform: uppercase; color: var(--text-muted); letter-spacing: 0.05em; } .stat-value { font-size: 28px; font-weight: 800; color: var(--text-primary); display: flex; align-items: baseline; gap: 6px; } .stat-value span { font-size: 14px; font-weight: 600; color: var(--text-muted); } /* Custom Space Filter */ .space-filter-modern { margin-bottom: 24px; display: flex; align-items: center; gap: 16px; } .dropdown-custom { position: relative; width: 280px; } .dropdown-trigger { padding: 10px 16px; background: var(--bg-surface-secondary); border: 1px solid var(--border-primary); border-radius: 10px; display: flex; align-items: center; justify-content: space-between; cursor: pointer; font-size: 14px; font-weight: 600; transition: all 0.2s; } .dropdown-trigger:hover { border-color: var(--primary); } .dropdown-menu { position: absolute; top: calc(100% + 8px); left: 0; width: 100%; background: var(--bg-surface-secondary); border: 1px solid var(--border-primary); border-radius: 12px; box-shadow: 0 15px 30px rgba(0,0,0,0.15); z-index: 100; overflow: hidden; animation: fadeIn 0.2s ease-out; } .dropdown-item { padding: 12px 16px; font-size: 14px; cursor: pointer; transition: 0.2s; } .dropdown-item:hover { background: var(--primary-active); color: var(--primary); } .dropdown-item.active { background: var(--primary); color: white; } /* Chart Layout */ .monitoring-overview { display: grid; grid-template-columns: 1.5fr 1fr; gap: 24px; margin-bottom: 30px; min-width: 0; } .chart-card { background: var(--bg-surface-secondary); border: 1px solid var(--border-primary); border-radius: 16px; padding: 24px; display: flex; flex-direction: column; height: 100%; min-width: 0; min-height: 0; } .chart-card h4 { font-size: 13px; font-weight: 700; text-transform: uppercase; color: var(--text-muted); margin-bottom: 24px; } .ta-badge { padding: 2px 6px; border-radius: 4px; font-size: 10px; font-weight: 700; } .badge-red { background: var(--ta-red); color: white; } .badge-green { background: var(--ta-green); color: white; } .badge-amber { background: var(--ta-amber); color: white; } /* Animations */ .animate-fade { animation: fadeIn 0.2s ease-out; } @keyframes fadeIn { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } } .spin { animation: spin 1s linear infinite; } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .empty-state { padding: 60px 24px; text-align: center; color: var(--text-muted); }