diff --git a/src/operator-dashboard/static/styles.css b/src/operator-dashboard/static/styles.css index ee07306..62663b6 100644 --- a/src/operator-dashboard/static/styles.css +++ b/src/operator-dashboard/static/styles.css @@ -522,7 +522,9 @@ table.lifecycle-table th:nth-child(5) { } .status-bar { - top: 8px; + position: static; + top: auto; + z-index: auto; border-radius: 20px; } diff --git a/test/operator-dashboard-ui-static.test.mjs b/test/operator-dashboard-ui-static.test.mjs index 58645b6..06b0b25 100644 --- a/test/operator-dashboard-ui-static.test.mjs +++ b/test/operator-dashboard-ui-static.test.mjs @@ -4,6 +4,7 @@ import { readFileSync } from 'node:fs'; const strategySource = readFileSync(new URL('../src/operator-dashboard/static/pages/StrategyPage.jsx', import.meta.url), 'utf8'); const fundsSource = readFileSync(new URL('../src/operator-dashboard/static/pages/FundsPage.jsx', import.meta.url), 'utf8'); +const stylesSource = readFileSync(new URL('../src/operator-dashboard/static/styles.css', import.meta.url), 'utf8'); test('strategy page owns consolidated quote lifecycle and successful trade tables', () => { assert.match(strategySource, /Quote lifecycle/); @@ -21,3 +22,10 @@ test('funds page no longer renders duplicate quote and submission tables', () => assert.doesNotMatch(fundsSource, /Submitted quote responses/); assert.doesNotMatch(fundsSource, /Durable ledger/); }); + +test('mobile status bar uses normal document flow instead of sticky viewport positioning', () => { + assert.match( + stylesSource, + /@media \(max-width: 720px\)[\s\S]*?\.status-bar \{[\s\S]*?position: static;[\s\S]*?top: auto;[\s\S]*?z-index: auto;[\s\S]*?\}/, + ); +});