- {recipeStrip.length === 1 ?
{t('sec.savedEmpty')}
: null}
+ {recipeStrip.length === 0 ?
{t('sec.savedEmpty')}
: null}
) : null}
diff --git a/docker/frontend/src/styles/app.css b/docker/frontend/src/styles/app.css
index 3a43260..9c29423 100644
--- a/docker/frontend/src/styles/app.css
+++ b/docker/frontend/src/styles/app.css
@@ -115,6 +115,18 @@
it apart from the tab's own buttons at the foot of the column. */
.reset-row { margin-top: 6px; padding-top: 12px; border-top: 1px solid var(--border); }
.chip-row { display: flex; flex-wrap: wrap; gap: 6px; }
+/* The rule a strip is read across (the mixer's PICK, its bands, the three
+ knobs): a line of its own, so it breaks the row it is written into whichever
+ direction that row runs — a full width wraps it even in a phone's row-shaped
+ column, and `height: 1px` holds it to a line in the desktop column, where the
+ row's main axis is the other way round. */
+.chip-rule {
+ flex: 0 0 auto;
+ width: 100%;
+ height: 1px;
+ margin: 3px 0;
+ background: var(--border-soft);
+}
/* In a column the chips stack: one chip per row, full width. */
.col .chip-row { flex-direction: column; align-items: stretch; }
.col .chip { justify-content: space-between; text-align: left; }
diff --git a/docker/frontend/src/ui/ChipColumn.tsx b/docker/frontend/src/ui/ChipColumn.tsx
index a6a6fae..19558e7 100644
--- a/docker/frontend/src/ui/ChipColumn.tsx
+++ b/docker/frontend/src/ui/ChipColumn.tsx
@@ -23,6 +23,11 @@ export interface ChipDef {
// shows its state through the border alone.
bg?: string;
fg?: string;
+ // A rule instead of a button: the line the row is read across, between two
+ // sets that are not the same kind of thing (the mixer's PICK, the bands, the
+ // three image-wide knobs). It takes a line of its own and nothing else — the
+ // label it separates is the chip below it.
+ divider?: boolean;
// Present when the chip itself can be dragged somewhere: the payload the drop
// target reads back (the recipe's id, for the FAVORITED rail button).
drag?: string;
@@ -61,41 +66,45 @@ export interface SliderDef {
export function ChipRow({ chips, grid }: { chips: ChipDef[]; grid?: boolean }) {
return (