diff --git a/src/pages/agent-office/AgentOffice.css b/src/pages/agent-office/AgentOffice.css index 71df0f6..3e14c9b 100644 --- a/src/pages/agent-office/AgentOffice.css +++ b/src/pages/agent-office/AgentOffice.css @@ -448,49 +448,101 @@ } } -/* ── 횡단 오버사이트 타임라인 ── */ -.ao-activity { display: flex; flex-direction: column; min-height: 0; } -.ao-activity-header { display: flex; align-items: center; } +/* ── 횡단 오버사이트 타임라인 (mission-control activity log) ── */ +.ao-activity { display: flex; flex-direction: column; min-height: 0; height: 100%; } +/* 헤더 — 섹션 타이틀 톤 (퍼플 액센트 + 트래킹) */ +.ao-activity-header { align-items: center; } +.ao-activity-header .ao-sidepanel-name { + color: #8b5cf6; letter-spacing: 0.6px; text-transform: uppercase; font-size: 13px; +} + +/* 필터 바 — 다크 슬레이트 셀렉트 */ .ao-activity-filters { display: flex; flex-wrap: wrap; gap: 6px; - padding: 8px 12px; border-bottom: 1px solid #1f2937; + padding: 8px 12px; border-bottom: 1px solid #333; + background: rgba(15, 23, 42, 0.6); } .ao-activity-select { - background: #111827; color: #e5e7eb; - border: 1px solid #374151; border-radius: 6px; - padding: 4px 8px; font-size: 12px; + background: #1e293b; color: #e2e8f0; + border: 1px solid #334155; border-radius: 4px; + padding: 4px 8px; font-family: inherit; font-size: 11px; cursor: pointer; + transition: border-color .12s, box-shadow .12s; } -.ao-activity-select:disabled { opacity: .4; cursor: not-allowed; } +.ao-activity-select:hover { border-color: #475569; } +.ao-activity-select:focus { outline: none; border-color: #8b5cf6; box-shadow: 0 0 0 2px rgba(139, 92, 246, 0.3); } +.ao-activity-select:disabled { opacity: .35; cursor: not-allowed; } -.ao-activity-content { flex: 1; overflow-y: auto; min-height: 0; } +.ao-activity-content { flex: 1; overflow-y: auto; min-height: 0; padding: 0; } +/* 활동 행 — 타임라인 스파인(수직 레일) + 신호등 도트 */ .ao-activity-item { + position: relative; display: flex; align-items: flex-start; gap: 10px; - padding: 10px 12px; border-bottom: 1px solid #161b25; + padding: 10px 12px; border-bottom: 1px solid #1a2233; cursor: pointer; transition: background .12s; + animation: ao-activity-in .18s ease-out both; } -.ao-activity-item:hover { background: #161b25; } -.ao-activity-item.is-highlight { background: rgba(245, 158, 11, .08); } -.ao-activity-dot { flex: 0 0 auto; width: 8px; height: 8px; border-radius: 50%; margin-top: 5px; } +.ao-activity-item::before { + content: ''; position: absolute; left: 16px; top: 0; bottom: 0; + width: 1px; background: #1e293b; z-index: 0; +} +.ao-activity-item:hover { background: #161b2e; } +.ao-activity-item:focus-visible { outline: none; background: #161b2e; box-shadow: inset 2px 0 0 #8b5cf6; } + +/* 진행/대기 강조 — 앰버 인셋 + 도트 펄스 */ +.ao-activity-item.is-highlight { background: rgba(245, 158, 11, 0.06); box-shadow: inset 2px 0 0 #f59e0b; } +.ao-activity-item.is-highlight .ao-activity-dot { animation: ao-pulse 1.6s ease-in-out infinite; } + +/* 에이전트 색 = 신호등. 링(#111)으로 뒤 레일을 끊어 점처럼 떠 보이게 */ +.ao-activity-dot { + position: relative; z-index: 1; flex: 0 0 auto; + width: 9px; height: 9px; border-radius: 50%; margin-top: 4px; + box-shadow: 0 0 0 3px #111; +} + .ao-activity-body { flex: 1; min-width: 0; } .ao-activity-line { display: flex; align-items: center; gap: 8px; } -.ao-activity-agent { font-size: 12px; font-weight: 600; } -.ao-activity-badge { font-size: 11px; padding: 1px 7px; border-radius: 10px; white-space: nowrap; } -.ao-activity-level { font-size: 12px; } +.ao-activity-agent { font-size: 11px; font-weight: bold; letter-spacing: 0.3px; } + +/* 상태 뱃지 — 터미널 톤(각진 모서리, 모노) */ +.ao-activity-badge { + font-size: 10px; font-weight: bold; letter-spacing: 0.3px; + padding: 1px 7px; border-radius: 4px; white-space: nowrap; +} + +/* 로그 레벨 표식 */ +.ao-activity-level { font-size: 12px; line-height: 1; } +.ao-activity-level.level-info { color: #475569; font-size: 15px; font-weight: bold; } +.ao-activity-level.level-warning, +.ao-activity-level.level-error { font-size: 12px; } + .ao-activity-msg { - font-size: 13px; color: #cbd5e1; margin-top: 2px; + font-size: 12.5px; color: #cbd5e1; margin-top: 3px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.ao-activity-item.is-log .ao-activity-msg { color: #94a3b8; } + .ao-activity-meta { flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: 2px; } -.ao-activity-time { font-size: 11px; color: #6b7280; } +.ao-activity-time { font-size: 10px; color: #64748b; } .ao-activity-dur { font-size: 10px; color: #475569; } .ao-activity-loading, -.ao-activity-end { text-align: center; padding: 12px; font-size: 12px; color: #6b7280; } -.ao-activity-sentinel { height: 1px; } -.ao-activity-error { padding: 12px; font-size: 13px; color: #fca5a5; } -.ao-activity-error button { - margin-left: 8px; background: #374151; color: #e5e7eb; - border: none; border-radius: 6px; padding: 2px 10px; cursor: pointer; +.ao-activity-end { + text-align: center; padding: 12px; font-size: 10px; + color: #475569; letter-spacing: 0.6px; text-transform: uppercase; +} +.ao-activity-sentinel { height: 1px; } + +.ao-activity-error { padding: 12px; font-size: 12px; color: #fca5a5; } +.ao-activity-error button { + margin-left: 8px; background: #2a2a4e; color: #8b5cf6; + border: 1px solid #4c1d95; border-radius: 4px; + padding: 3px 10px; font-family: inherit; font-size: 11px; cursor: pointer; +} +.ao-activity-error button:hover { background: #3a3a5e; } + +@keyframes ao-activity-in { + from { opacity: 0; transform: translateY(2px); } + to { opacity: 1; transform: none; } }