the editor sections fall to one column when it is narrow

A container query on the scroller, once, so a new section is responsive by being
in the column rather than by remembering to say so. Below 320px the two-column
sections stack instead of truncating every select to "Martia…".

Colors stays flex-wrap: three swatches in a two-column grid is 2 and 1.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-01 08:10:05 +01:00
co-authored by Claude Opus 5
parent 905e2e3325
commit 33f2ea4663
4 changed files with 12 additions and 4 deletions
+9 -1
View File
@@ -37,7 +37,15 @@ export const EditorPanel = () => {
</div> </div>
{editor ? ( {editor ? (
<div className="min-h-0 flex-1 overflow-auto p-3">{editor}</div> /*
`@container`, once, for every section inside it.
The sections lay out in two columns and have to fall back to one when the panel is dragged
narrow — and the window's width says nothing about that, because the width here is a divider
somebody moves. Declared on the scroller rather than per section, so a new section is
responsive by being in the column rather than by remembering to say so.
*/
<div className="@container min-h-0 flex-1 overflow-auto p-3">{editor}</div>
) : ( ) : (
<div className="flex min-h-0 flex-1 items-center justify-center p-6 text-center"> <div className="flex min-h-0 flex-1 items-center justify-center p-6 text-center">
{/* Names what the panel is FOR rather than saying it is empty. "Nothing selected" describes {/* Names what the panel is FOR rather than saying it is empty. "Nothing selected" describes
+1 -1
View File
@@ -60,7 +60,7 @@ export const FontSizesTab = ({
}; };
return ( return (
<div className="grid grid-cols-2 gap-3"> <div className="grid grid-cols-1 gap-3 @[20rem]:grid-cols-2">
{ROLES.map((role) => { {ROLES.map((role) => {
const current = sizes[role.size]; const current = sizes[role.size];
const own = current?.[key]; const own = current?.[key];
+1 -1
View File
@@ -354,7 +354,7 @@ export const LayoutPanel = () => {
give each one room to be read, which is the only thing this control is for. give each one room to be read, which is the only thing this control is for.
*/} */}
<div className="grid grid-cols-2 gap-3"> <div className="grid grid-cols-1 gap-3 @[20rem]:grid-cols-2">
{ROLES.map(({ font, label }) => ( {ROLES.map(({ font, label }) => (
<div key={font} className="flex flex-col gap-1"> <div key={font} className="flex flex-col gap-1">
<label className="text-xs">{label}</label> <label className="text-xs">{label}</label>
+1 -1
View File
@@ -94,7 +94,7 @@ export const SpacingTab = ({
{BANDS.map((band) => ( {BANDS.map((band) => (
<div key={band.key} className="flex flex-col gap-2"> <div key={band.key} className="flex flex-col gap-2">
<h4 className="text-xs font-medium">{band.label}</h4> <h4 className="text-xs font-medium">{band.label}</h4>
<div className="grid grid-cols-2 gap-3"> <div className="grid grid-cols-1 gap-3 @[20rem]:grid-cols-2">
{band.fields.map((field) => { {band.fields.map((field) => {
const current = (spacing as Record<string, Record<string, Steps> | undefined>)[band.key]?.[field.key]; const current = (spacing as Record<string, Record<string, Steps> | undefined>)[band.key]?.[field.key];
const own = current?.[key]; const own = current?.[key];