diff --git a/frontend/index.html b/frontend/index.html index 1c0d567..61688b2 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -2,7 +2,14 @@ - + + IdeA diff --git a/frontend/src/features/web/PairingScreen.tsx b/frontend/src/features/web/PairingScreen.tsx index 04e0685..32bb704 100644 --- a/frontend/src/features/web/PairingScreen.tsx +++ b/frontend/src/features/web/PairingScreen.tsx @@ -53,7 +53,7 @@ export function PairingScreen({ session, onPaired }: PairingScreenProps) { } return ( -
+
@@ -74,6 +74,12 @@ export function PairingScreen({ session, onPaired }: PairingScreenProps) { placeholder="p. ex. 4821-93" autoFocus autoComplete="one-time-code" + // #69 — phones: summon the numeric-ish keypad for a pairing code + // and keep the OS from "helpfully" capitalising/correcting it. + inputMode="numeric" + autoCapitalize="off" + autoCorrect="off" + spellCheck={false} disabled={busy} invalid={!!error} /> diff --git a/frontend/src/features/web/WebApp.tsx b/frontend/src/features/web/WebApp.tsx index b24e072..c222a49 100644 --- a/frontend/src/features/web/WebApp.tsx +++ b/frontend/src/features/web/WebApp.tsx @@ -49,9 +49,12 @@ export function WebApp({ session }: WebAppProps = {}) { return (
-
+
-

IdeA

+

IdeA

web diff --git a/frontend/src/features/web/WebWorkspace.tsx b/frontend/src/features/web/WebWorkspace.tsx index 3d978d2..ecce05b 100644 --- a/frontend/src/features/web/WebWorkspace.tsx +++ b/frontend/src/features/web/WebWorkspace.tsx @@ -75,7 +75,10 @@ export function WebWorkspace() { ); return ( -
+

Projets

@@ -223,7 +226,11 @@ function AgentLiveRow({ return (
  • -
    + {/* #69 — at 360px the name + two badges + the button no longer fit on one + line, so the name takes its own row on phones and the status cluster + wraps under it. From `sm` up this collapses back to the original + single-line desktop layout. */} +
    {agent.name} @@ -311,29 +318,36 @@ function WebBackgroundTaskRow({ return (
  • -
    - - {TASK_STATUS_LABEL[task.status]} - - {task.kind} - - + {/* #69 — status + kind + Cancel + Retry overflow a phone row. On narrow + screens the status/kind pair keeps the first line and the two actions + wrap onto a second, right-aligned one; `sm` restores the single row. */} +
    +
    + + {TASK_STATUS_LABEL[task.status]} + + {task.kind} +
    +
    + + +
    {message &&

    {message}

    }
  • diff --git a/frontend/src/shared/styles/theme.css b/frontend/src/shared/styles/theme.css index e48ebb0..8775763 100644 --- a/frontend/src/shared/styles/theme.css +++ b/frontend/src/shared/styles/theme.css @@ -60,12 +60,28 @@ height: 100%; } + /* #69 — phone viewports. `height: 100%` resolves against the *large* viewport, + so a mobile browser's collapsing URL bar leaves the last ~60px of the app + under the toolbar and makes xterm's fit() overshoot. `100dvh` tracks the + *dynamic* viewport instead. Desktop is unaffected: there the dynamic and + large viewports are identical, so this resolves to the same height. */ + @supports (height: 100dvh) { + html, + body, + #root { + height: 100dvh; + } + } + body { margin: 0; background-color: var(--color-canvas); color: var(--color-content); font-family: var(--font-sans); -webkit-font-smoothing: antialiased; + /* Phones: never rubber-band the whole document — the app owns its own + scroll containers, and an overscrolling body detaches the fixed shell. */ + overscroll-behavior-y: none; } /* A consistent focus ring across the kit (keyboard accessibility). */