:root { --mobile-nav-height: 60px; --mobile-chat-size: 56px; --mobile-bg: #ffffff; --mobile-nav-bg: #ffffff; --mobile-nav-border: #dee2e6; --mobile-nav-color: #6c757d; --mobile-nav-active: #0d6efd; --mobile-chat-bg: #0d6efd; /* Grouped-list surfaces: a faintly recessed list "well" with raised cards on top, so a card reads as elevated even where it shares the page colour. */ --mobile-list-bg: #f4f4f7; --mobile-card-bg: #ffffff; --mobile-card-border: #ececf1; --mobile-card-shadow: 0 1px 2px rgba(16, 24, 40, 0.06), 0 6px 16px rgba(16, 24, 40, 0.05); /* Raised neutral surface for the chat composer + assistant bubbles, kept grey/neutral on purpose so the mobile chat doesn't inherit the desktop's indigo-tinted --msg-assistant-bg (which reads as purple in dark mode). */ --mobile-surface: #f2f2f7; --mobile-surface-text: #1c1c1e; } [data-bs-theme="dark"] { --mobile-bg: #1c1c1e; --mobile-nav-bg: #1c1c1e; --mobile-nav-border: #3a3a3c; --mobile-nav-color: #8e8e93; --mobile-nav-active: #6ea8fe; --mobile-chat-bg: #0d6efd; --mobile-surface: #2c2c2e; --mobile-surface-text: #e5e5ea; /* Dark: recess the list below the page colour, raise cards above it. */ --mobile-list-bg: #161618; --mobile-card-bg: #2c2c2e; --mobile-card-border: #3a3a3c; --mobile-card-shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 4px 14px rgba(0, 0, 0, 0.3); } body { background: var(--mobile-bg); color-scheme: light dark; } /* Account for iOS status bar overlay (black-translucent) */ #mobile-root { padding-top: env(safe-area-inset-top); } /* Native shell (?native=true): the HTML bottom nav is hidden and the native chrome owns the status bar + tab bar, so drop the web-side safe-area insets it would otherwise double-apply. */ mobile-app[data-native] #mobile-root { padding-top: 0; } mobile-app[data-native] .chat-page-input-area { padding-bottom: 10px; } /* ── Section header ─────────────────────────────────── */ .mobile-section-header { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid var(--mobile-nav-border); flex-shrink: 0; } .mobile-section-title { font-size: 1.05rem; font-weight: 700; color: var(--bs-body-color, #212529); display: flex; align-items: center; gap: 8px; } .mobile-alert-error { margin: 12px 16px; padding: 10px 14px; background: #f8d7da; color: #842029; border-radius: 8px; font-size: 0.85rem; } /* Refresh button in section headers (agent-inbox.css isn't loaded on mobile). */ .inbox-refresh-btn { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; padding: 0; border: 1px solid var(--mobile-nav-border); border-radius: 8px; background: transparent; color: var(--mobile-nav-color); font-size: 1rem; cursor: pointer; -webkit-tap-highlight-color: transparent; } .inbox-refresh-btn:active { transform: scale(0.94); } /* ── Inbox ──────────────────────────────────────────── */ .mobile-inbox { display: flex; flex-direction: column; height: 100%; } .mobile-inbox-list { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 12px 16px; display: flex; flex-direction: column; gap: 12px; } .inbox-section-label { font-size: 0.8rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.5px; color: var(--mobile-nav-color); display: flex; align-items: center; gap: 8px; margin-top: 4px; } /* ── Footer buttons ──────────────────────────────────── */ .inbox-btn { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 12px; font-size: 0.9rem; font-weight: 600; border-radius: 10px; border: none; cursor: pointer; -webkit-tap-highlight-color: transparent; } .inbox-btn-approve { background: #198754; color: #fff; } .inbox-btn-reject { background: transparent; color: #dc3545; border: 1.5px solid #dc3545; } /* ── Empty state override (full-height inside mobile-inbox) ── */ .mobile-inbox .inbox-empty { flex: 1; height: auto; padding: 40px 20px; } #mobile-root { display: flex; flex-direction: column; height: 100%; height: 100dvh; } .mobile-content { flex: 1; min-height: 0; overflow: hidden; display: flex; flex-direction: column; } /* ── Coming soon ────────────────────────────────────── */ .mobile-coming-soon { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; height: 100%; color: var(--mobile-nav-color); } .mobile-coming-soon i { font-size: 2.5rem; opacity: 0.35; } .mobile-coming-soon p { margin: 0; font-size: 0.95rem; font-weight: 500; opacity: 0.6; } /* ── Bottom nav ─────────────────────────────────────── */ .mobile-nav { display: flex; align-items: center; justify-content: space-around; height: var(--mobile-nav-height); background: var(--mobile-nav-bg); border-top: 1px solid var(--mobile-nav-border); padding-bottom: env(safe-area-inset-bottom); position: relative; z-index: 100; } .mobile-nav-item { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; flex: 1; height: 100%; cursor: pointer; color: var(--mobile-nav-color); font-size: 0.62rem; user-select: none; -webkit-tap-highlight-color: transparent; transition: color 0.15s; } .mobile-nav-item.active { color: var(--mobile-nav-active); } .mobile-nav-item i { font-size: 1.3rem; line-height: 1; } /* ── Center chat FAB ────────────────────────────────── */ .mobile-nav-item.chat-btn { position: relative; top: -14px; flex: 1.2; } .chat-fab { width: var(--mobile-chat-size); height: var(--mobile-chat-size); border-radius: 50%; background: var(--mobile-chat-bg); display: flex; align-items: center; justify-content: center; box-shadow: 0 3px 10px rgba(0, 0, 0, 0.25); transition: transform 0.15s, box-shadow 0.15s; } .chat-fab i { font-size: 1.5rem; color: #fff !important; } .mobile-nav-item.chat-btn.active .chat-fab { box-shadow: 0 4px 14px rgba(13, 110, 253, 0.45); transform: scale(1.06); } .mobile-nav-item.chat-btn span { margin-top: 6px; font-size: 0.6rem; } /* ── Chat page ──────────────────────────────────────── */ .chat-page { display: flex; flex-direction: column; flex: 1; min-height: 0; overflow: hidden; } /* Wider bubbles on narrow screens */ .chat-page .copilot-msg { max-width: 96%; /* Allow the bubble to shrink below its content's intrinsic width so inner scroll containers (code/diff/table) collapse and scroll internally instead of widening the bubble past the viewport. */ min-width: 0; font-size: 0.92rem; } /* Assistant bubbles use a neutral surface instead of the desktop's indigo-tinted --msg-assistant-bg, which clashed with the mobile neutral palette. */ .chat-page .copilot-msg.assistant { background: var(--mobile-surface); color: var(--mobile-surface-text); } .chat-page-header-actions { display: flex; align-items: center; gap: 8px; } .chat-page-messages { flex: 1; min-height: 0; overflow-y: auto; /* Clip horizontally: wide content (code blocks, tables, diffs) scrolls inside its own bubble box, so the message list itself never pans sideways. Without this, `overflow-y: auto` makes the unset x-axis compute to `auto` too. */ overflow-x: hidden; -webkit-overflow-scrolling: touch; padding: 12px 14px; display: flex; flex-direction: column; gap: 8px; } .chat-page-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 10px; height: 100%; color: var(--mobile-nav-color); } .chat-page-empty i { font-size: 2rem; opacity: 0.4; } .chat-page-empty p { margin: 0; font-size: 0.9rem; opacity: 0.6; } .chat-page-input-area { padding: 10px 12px; padding-bottom: calc(10px + env(safe-area-inset-bottom, 0px)); border-top: 1px solid var(--mobile-nav-border); background: var(--mobile-bg); flex-shrink: 0; } /* Unified composer: a single bordered box wrapping the textarea and the toolbar below it, mirroring the desktop copilot (.copilot-composer). Uses the neutral mobile surface so it matches the assistant bubbles. */ .chat-page-composer { display: flex; flex-direction: column; border: 1px solid var(--mobile-nav-border); border-radius: 0.75rem; background: var(--mobile-surface); transition: border-color 0.15s, box-shadow 0.15s; } .chat-page-composer:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.12); } .chat-page-textarea { display: block; width: 100%; box-sizing: border-box; resize: none; border: none; outline: none; background: transparent; color: inherit; font-size: 0.95rem; line-height: 1.4; padding: 12px 14px 6px; min-height: 44px; max-height: 120px; overflow-y: auto; } /* ── Composer toolbar (below the textarea) ─────────────────────────────────── */ .chat-page-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 0.4rem; padding: 6px 8px; } .chat-page-toolbar-left, .chat-page-toolbar-right { display: flex; align-items: center; gap: 6px; } /* Model selector — a native