diff --git a/src/pages/agent-office/AgentOffice.css b/src/pages/agent-office/AgentOffice.css index eebd63d..ab40f58 100644 --- a/src/pages/agent-office/AgentOffice.css +++ b/src/pages/agent-office/AgentOffice.css @@ -195,6 +195,11 @@ font-size: 11px; color: #94a3b8; } +.ao-sidepanel-actions { + display: flex; + align-items: center; + gap: 4px; +} .ao-sidepanel-close { background: none; border: none; @@ -204,6 +209,18 @@ padding: 0 4px; } .ao-sidepanel-close:hover { color: #fff; } +/* 전체 화면 토글 — 모바일 전용 (데스크톱에서는 숨김) */ +.ao-sidepanel-expand { + display: none; + background: none; + border: none; + color: #888; + font-size: 18px; + cursor: pointer; + padding: 0 4px; + line-height: 1; +} +.ao-sidepanel-expand:hover { color: #fff; } /* Tabs */ .ao-sidepanel-tabs { @@ -377,19 +394,31 @@ bottom: 0; left: 0; right: 0; + top: auto; width: 100%; + height: 55vh; max-height: 55vh; border-left: none; border-top: 1px solid #333; border-radius: 16px 16px 0 0; animation: slideUp 0.25s ease-out; z-index: 100; + transition: height 0.25s ease, max-height 0.25s ease, border-radius 0.25s ease; + } + /* 전체 화면으로 확장 */ + .ao-sidepanel.expanded { + top: 0; + height: 100dvh; + max-height: 100dvh; + border-radius: 0; + border-top: none; } @keyframes slideUp { from { transform: translateY(100%); } to { transform: translateY(0); } } + .ao-sidepanel-expand { display: inline-block; } .ao-sidepanel-header { padding: 8px 12px; } .ao-sidepanel-header::before { content: ''; diff --git a/src/pages/agent-office/assets/agent_music.webp b/src/pages/agent-office/assets/agent_music.webp index 2852da6..10dbab9 100644 Binary files a/src/pages/agent-office/assets/agent_music.webp and b/src/pages/agent-office/assets/agent_music.webp differ diff --git a/src/pages/agent-office/components/SidePanel.jsx b/src/pages/agent-office/components/SidePanel.jsx index e8ddaa5..af6e943 100644 --- a/src/pages/agent-office/components/SidePanel.jsx +++ b/src/pages/agent-office/components/SidePanel.jsx @@ -10,6 +10,7 @@ const TABS = ['Commands', 'Tasks', 'Tokens', 'Logs']; export default function SidePanel({ agentId, agentState, pendingTask, onClose, refreshTrigger }) { const [activeTab, setActiveTab] = useState('Commands'); + const [expanded, setExpanded] = useState(false); const meta = AGENT_META[agentId]; if (!meta) return null; @@ -18,7 +19,7 @@ export default function SidePanel({ agentId, agentState, pendingTask, onClose, r : agentState?.state || 'unknown'; return ( -
+
@@ -29,7 +30,17 @@ export default function SidePanel({ agentId, agentState, pendingTask, onClose, r
● {stateText}
- +
+ + +