my_pi_agent / web /space.css
AlexWortega's picture
Phone layout: keep the top bar on one line, give the preview the pane
963836f
Raw
History Blame Contribute Delete
3.62 kB
/* Space-only overrides: one model, and a layout that survives a phone.
*
* Written against the shipped classes rather than the source, because this file
* ships next to a built bundle. Every selector below hangs off something stable:
* a title attribute, a data-testid, or the literal Tailwind class in the markup.
*/
/* ── one model ─────────────────────────────────────────────────────────────
* This Space serves exactly one model on its own GPU, so the picker offers a
* choice that does not exist, and the "bring an OpenRouter key" prompt offers
* one that costs money. Both are hidden rather than deleted: the app keeps
* working, it just stops advertising alternatives.
*/
button[title="Choose model & params"],
div:has(> input[data-testid="welcome-key"]) {
display: none !important;
}
/* ── phone layout ──────────────────────────────────────────────────────────
* The desktop layout is two panes side by side, and the right one is
* `w-[46%] min-w-[380px]` β€” on a 390px screen that alone is wider than the
* viewport, so the chat gets squeezed to nothing. Below 860px the two panes
* stack instead, each scrolling on its own.
*/
@media (max-width: 860px) {
/* the row that holds chat + workspace */
div.flex-1.min-h-0.flex {
flex-direction: column;
}
/* chat pane */
section.flex-1.min-w-0 {
flex: 1 1 58%;
min-height: 0;
}
/* workspace pane: full width, and the divider moves from left edge to top */
section[class*="min-w-[380px]"] {
width: 100% !important;
min-width: 0 !important;
flex: 1 1 42%;
min-height: 0;
border-left: 0 !important;
border-top: 2px solid var(--color-ink);
}
/* margins tuned for a 1400px window waste a third of a 390px one */
section.flex-1.min-w-0 > div.overflow-y-auto {
padding-left: 0.9rem;
padding-right: 0.9rem;
padding-top: 1.1rem;
}
/* chrome rows: let them scroll sideways instead of clipping their buttons */
header.h-11,
section[class*="min-w-[380px]"] > div:first-child {
gap: 1rem;
overflow-x: auto;
scrollbar-width: none;
}
header.h-11::-webkit-scrollbar,
section[class*="min-w-[380px]"] > div:first-child::-webkit-scrollbar {
display: none;
}
/* the agent's own hero/landing block is sized for a wide column */
.max-w-2xl {
max-width: 100%;
}
/* the top bar is a single row of short labels; letting "pi agent" and the
project name wrap turns an 44px-high bar into a 60px one and still clips */
header.h-11 {
white-space: nowrap;
}
header.h-11 > * {
flex-shrink: 0;
}
/* the workspace's 160px file column plus a preview does not fit on a phone.
The preview is the point of that pane, so the file list steps aside; the
Code tab still shows what the agent wrote. */
section[class*="min-w-[380px]"] div.w-40 {
display: none;
}
/* with the pane only ~40vh tall, the framed preview needs its padding back */
section[class*="min-w-[380px]"] div.p-4 {
padding: 0.5rem 0.5rem 0.25rem;
}
/* the theme switch sits where the status line ends up on a narrow screen */
#pi-theme-toggle {
bottom: 34px;
opacity: 0.75;
}
}
/* Coarse pointers: the bracket buttons are 11–12px text with no padding, which
* is a fine mouse target and a poor thumb one. */
@media (pointer: coarse) {
.btn-bracket {
padding: 4px 2px;
}
}