diff --git a/frontend/src/components/dashboard/v2/AlertBar.vue b/frontend/src/components/dashboard/v2/AlertBar.vue index 74d61c8..966e79d 100644 --- a/frontend/src/components/dashboard/v2/AlertBar.vue +++ b/frontend/src/components/dashboard/v2/AlertBar.vue @@ -168,4 +168,24 @@ defineEmits<{ .blk:hover { background: rgba(251,113,133,.22); } + +@media (max-width: 767px) { + .alertbar { + flex-wrap: wrap; + gap: 8px; + padding: 10px; + } + + .seg { + flex: 0 0 calc(50% - 4px); + } + + .sep { + display: none; + } + + .blk { + margin-left: 0; + } +} diff --git a/frontend/src/components/dashboard/v2/FlowCanvas.vue b/frontend/src/components/dashboard/v2/FlowCanvas.vue index 014fb87..258cb81 100644 --- a/frontend/src/components/dashboard/v2/FlowCanvas.vue +++ b/frontend/src/components/dashboard/v2/FlowCanvas.vue @@ -288,12 +288,12 @@ function handleReset() { @click="handleReset" > - Reset + Reset - @@ -481,4 +481,28 @@ function handleReset() { :deep(.node.dragging) { cursor: grabbing; } + +@media (max-width: 767px) { + .add-label { + display: none; + } + + .reset-label { + display: none; + } + + .add-btn { + width: 34px; + padding: 0; + display: grid; + place-items: center; + } + + .reset-btn { + width: 30px; + padding: 0; + display: grid; + place-items: center; + } +} diff --git a/frontend/src/components/dashboard/v2/IrisChat.vue b/frontend/src/components/dashboard/v2/IrisChat.vue index dcae8a4..f68f0d7 100644 --- a/frontend/src/components/dashboard/v2/IrisChat.vue +++ b/frontend/src/components/dashboard/v2/IrisChat.vue @@ -251,6 +251,22 @@ watch( @keyframes blink { 50% { opacity: 0; } } +@media (max-width: 767px) { + .iris-panel { + width: 100%; + flex: 0 0 auto; + max-height: 45vh; + } + + .chat-scroll { + max-height: 30vh; + } + + .expand-btn { + display: none; + } +} + /* ── Input ───────────────────────────────────── */ .chat-in { padding: 12px; diff --git a/frontend/src/components/dashboard/v2/TaskStrip.vue b/frontend/src/components/dashboard/v2/TaskStrip.vue index 1cc06b3..ec1ccca 100644 --- a/frontend/src/components/dashboard/v2/TaskStrip.vue +++ b/frontend/src/components/dashboard/v2/TaskStrip.vue @@ -146,4 +146,20 @@ function statusLabel(s: TaskItem['status']): string { padding: 12px; white-space: nowrap; } + +@media (max-width: 767px) { + .tstrip { + overflow-x: auto; + -webkit-overflow-scrolling: touch; + scrollbar-width: none; + } + + .tstrip::-webkit-scrollbar { + display: none; + } + + .tcard { + flex: 0 0 200px; + } +} diff --git a/frontend/src/components/layout/Sidebar.vue b/frontend/src/components/layout/Sidebar.vue index 9378224..7d8603a 100644 --- a/frontend/src/components/layout/Sidebar.vue +++ b/frontend/src/components/layout/Sidebar.vue @@ -6,6 +6,14 @@ import { useAgentStore } from '../../stores/agents' import { useTaskStore } from '../../stores/tasks' import { navigation, icons } from '../../composables/icons' import type { NavGroupDef } from '../../composables/icons' + +defineProps<{ + mobileOpen?: boolean +}>() + +defineEmits<{ + close: [] +}>() import NavGroup from './NavGroup.vue' import { initials } from '../../utils/format' @@ -63,7 +71,8 @@ const dynamicNavigation = computed(() => {