diff --git a/src/app/(app)/quotes/[id]/page.tsx b/src/app/(app)/quotes/[id]/page.tsx index a3a6227..302c32e 100644 --- a/src/app/(app)/quotes/[id]/page.tsx +++ b/src/app/(app)/quotes/[id]/page.tsx @@ -2219,12 +2219,17 @@ export default function QuoteDetailPage({ params }: { params: Promise<{ id: stri )} -
- {/* LEFT COLUMN — primary content (Description / Items / Notes). - The Items card lives here because it's the page's hero; the - admin panels on the right are quieter so the eye lands on - the data first. */} -
+ {/* Single-column stack. This used to be a 3-column grid with the + Items card in a `lg:col-span-2` and the admin panels beside + it, which left the items table ~430px of room for a table + whose natural width is ~790px — so pricing a quote meant + scrolling the table sideways. The items table is the page's + work surface; it gets the full width, and the admin panels + (reference / config, not things you act on while pricing) sit + 3-up underneath. */} +
+ {/* PRIMARY — Items + Notes. */} +
{/* The "Description" card used to live here showing `quote.description` — which for most quotes is the @@ -2300,14 +2305,18 @@ export default function QuoteDetailPage({ params }: { params: Promise<{ id: stri per line while Qty sat in 360px of empty space. - `min-w-[360px]` guarantees Description gets - the room it needs when Qty + Markup + - Processed + Update-price columns take - their fixed widths. Without this the - table-layout algorithm squeezes - Description down to ~250px on a - 1025px container. */} - Description + `min-w-[280px]` is a FLOOR, not a target. + The table is `table-layout: auto`, so + Description absorbs whatever width the + fixed columns don't use — on a full-width + card that lands around 380px. The floor + only matters on narrow viewports, where it + stops the layout algorithm collapsing + Description to a couple of words per line. + Keep it low enough that the table's + natural width still fits the card, or the + whole thing scrolls sideways again. */} + Description Qty Supplier Cost @@ -2318,7 +2327,11 @@ export default function QuoteDetailPage({ params }: { params: Promise<{ id: stri Markup - Processed + {/* "Done" rather than "Processed": the header + is `whitespace-nowrap`, so the longer word + set a ~78px floor on a column whose + content is a 2-3 character badge. */} + Done @@ -2452,16 +2465,17 @@ export default function QuoteDetailPage({ params }: { params: Promise<{ id: stri )}
- {/* RIGHT COLUMN — admin panels. The eye should land on the Items - card first; the panels on the right are reference / config - and sit quietly. Customer info lives in the strip below the - header (lifted out of this column during the v3 redesign). - Mobile stacks everything below the items. - Three cards now (down from six): + {/* ADMIN PANELS — reference / config, laid out 3-up BELOW the + items table rather than beside it, so the table gets the + page's full width. The eye still lands on the items first + because these now come after it in the flow. + `items-start` stops the three cards stretching to a shared + height when one has far more content than the others. + Three cards (down from six): 1. Attachments — tabbed (Outbound / Internal) 2. Linked Orders — its own card (specific, deserves focus) 3. Activity — tabbed (History / Email Status) */} -
+
{/* Attachments — single tabbed card with Outbound and Internal tabs. Both write to the same `quote_attachments` PB