Dashboard 2 single page? continue

continue a Dashboard 2 single page?

@jbudd, @kuema and @TotallyInformation my trick to hide navbar* and automatically adjusted width and height with custom paddings and margin in template

It may be easier to do, but it works.
*navbar seems to have a bug because it tends to appear when window is expanded, even when it's disabled.

may require some scrolling corrections

[
    {
        "id": "8edb7db434c0f47b",
        "type": "ui-template",
        "z": "03a3733837e5ab22",
        "group": "cd0dac1475062196",
        "page": "",
        "ui": "",
        "name": "v1 template full window",
        "order": 4,
        "width": 0,
        "height": 0,
        "head": "",
        "format": "<template>\n  <div class=\"demo\">\n    <h3 class=\"demo-title\">Demo — scrollable table</h3>\n    <p class=\"demo-info\">Table scrolls independently while page stays fixed.</p>\n\n    <div class=\"demo-table-wrap\">\n      <div class=\"demo-table-scroll\">\n        <table class=\"demo-table\">\n          <thead>\n            <tr>\n              <th>#</th>\n              <th>Name</th>\n              <th>Value</th>\n              <th>Status</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr v-for=\"n in 50\" :key=\"n\">\n              <td>{{ n }}</td>\n              <td>Item {{ n }}</td>\n              <td>{{ (Math.random() * 100).toFixed(1) }}</td>\n              <td>{{ n % 3 === 0 ? 'error' : n % 2 === 0 ? 'warn' : 'ok' }}</td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</template>\n\n<!-- ====== GLOBAL: Vuetify layout overrides ====== -->\n<style>\nhtml, body, #app,\n.v-application,\n.v-application__wrap,\n.nrdb-app,\n.v-main {\n  height: 100% !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  overflow: hidden !important;\n}\n.v-navigation-drawer {\n  display: none !important;\n}\n.v-main {\n  --v-layout-left: 0px !important;\n  --v-layout-right: 0px !important;\n  --v-layout-top: 0px !important;\n  --v-layout-bottom: 0px !important;\n}\n.nrdb-ui-page,\n.nrdb-ui-group,\n.v-card,\n.v-card-text,\n.nrdb-layout-group--grid,\n.nrdb-ui-widget {\n  height: 100% !important;\n  min-height: 0 !important;\n  padding: 0 !important;\n  margin: 0 !important;\n  overflow: hidden !important;\n  position: relative !important;\n}\n.v-card {\n  border: none !important;\n  box-shadow: none !important;\n}\n.v-card__loader,\n.v-card__underlay,\n.nrdb-layout-overlay {\n  display: none !important;\n}\n.nrdb-ui-page {\n  grid-template-rows: 1fr !important;\n}\n.nrdb-ui-page ~ div,\n.nrdb-ui-page ~ .nrdb-layout-overlay {\n  display: none !important;\n}\n</style>\n\n<!-- ====== layout ====== -->\n<style>\n.demo {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  padding: 16px;\n  box-sizing: border-box;\n  gap: 12px;\n  overflow: hidden;\n}\n.demo-title {\n  margin: 0;\n  flex-shrink: 0;\n}\n.demo-info {\n  margin: 0;\n  flex-shrink: 0;\n}\n.demo-table-wrap {\n  flex: 1;\n  min-height: 0;\n  overflow: hidden;\n  border-radius: 10px;\n}\n.demo-table-scroll {\n  height: 100%;\n  overflow-y: auto;\n}\n.demo-table {\n  width: 100%;\n  border-spacing: 0;\n}\n.demo-table th,\n.demo-table td {\n  padding: 8px 12px;\n  text-align: left;\n}\n.demo-table thead th {\n  position: sticky;\n  top: 0;\n  z-index: 1;\n}\n</style>\n\n<!-- ====== theme ====== -->\n<style>\n.demo {\n  font-family: Inter, sans-serif;\n  background: #f5f5f7;\n  border-radius: 12px;\n}\n.demo-title {\n  font-size: 18px;\n  font-weight: 700;\n  color: #1a1a1a;\n  letter-spacing: -0.02em;\n}\n.demo-info {\n  font-size: 13px;\n  color: #666;\n}\n.demo-table-wrap {\n  background: #fff;\n  border: 1px solid #d8d8d8;\n}\n.demo-table thead th {\n  font-size: 12px;\n  font-weight: 600;\n  color: #888;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  background: #fff;\n  border-bottom: 1px solid #d8d8d8;\n}\n.demo-table td {\n  font-size: 13px;\n  color: #1a1a1a;\n  border-bottom: 1px solid #eee;\n}\n.demo-table tbody tr:hover {\n  background: #f8f8fa;\n}\n</style>",
        "storeOutMessages": true,
        "passthru": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "className": "",
        "x": 150,
        "y": 60,
        "wires": [
            []
        ]
    },
    {
        "id": "cd0dac1475062196",
        "type": "ui-group",
        "name": "Group 1",
        "page": "e188ea992f7b5998",
        "width": "12",
        "height": 1,
        "order": 1,
        "showTitle": false,
        "className": "",
        "visible": "true",
        "disabled": "false",
        "groupType": "default"
    },
    {
        "id": "e188ea992f7b5998",
        "type": "ui-page",
        "name": "Page 1",
        "ui": "98d9c169110a1e36",
        "path": "/page1",
        "icon": "home",
        "layout": "grid",
        "theme": "4fb2df74dface31f",
        "breakpoints": [
            {
                "name": "Default",
                "px": "0",
                "cols": "3"
            }
        ],
        "order": 2,
        "className": "",
        "visible": true,
        "disabled": false
    },
    {
        "id": "98d9c169110a1e36",
        "type": "ui-base",
        "name": "My Dashboard",
        "path": "/dashboard",
        "appIcon": "",
        "includeClientData": true,
        "acceptsClientConfig": [
            "ui-notification",
            "ui-control"
        ],
        "showPathInSidebar": true,
        "headerContent": "none",
        "navigationStyle": "none",
        "titleBarStyle": "hidden",
        "showReconnectNotification": true,
        "notificationDisplayTime": 1,
        "showDisconnectNotification": true,
        "allowInstall": false
    },
    {
        "id": "4fb2df74dface31f",
        "type": "ui-theme",
        "name": "empty",
        "colors": {
            "surface": "#ffffff",
            "primary": "#0094ce",
            "bgPage": "#eeeeee",
            "groupBg": "#ffffff",
            "groupOutline": "#cccccc"
        },
        "sizes": {
            "density": "compact",
            "pagePadding": "0px",
            "groupGap": "0px",
            "groupBorderRadius": "0px",
            "widgetGap": "0px"
        }
    },
    {
        "id": "ae64a15bc0341aa0",
        "type": "global-config",
        "env": [],
        "modules": {
            "@flowfuse/node-red-dashboard": "1.30.2"
        }
    }
]

new version v2 only css

[
    {
        "id": "a6fce8891e67672a",
        "type": "ui-template",
        "z": "be68b547c65aba23",
        "group": "cd0dac1475062196",
        "page": "",
        "ui": "",
        "name": "v2 template full window",
        "order": 4,
        "width": 0,
        "height": 0,
        "head": "",
        "format": "<template>\n  <div class=\"demo\">\n    <h3 class=\"demo-title\">Demo — scrollable table</h3>\n    <p class=\"demo-info\">Table scrolls independently while page stays fixed.</p>\n\n    <div class=\"demo-table-wrap\">\n      <div class=\"demo-table-scroll\">\n        <table class=\"demo-table\">\n          <thead>\n            <tr>\n              <th>#</th>\n              <th>Name</th>\n              <th>Value</th>\n              <th>Status</th>\n            </tr>\n          </thead>\n          <tbody>\n            <tr v-for=\"n in 50\" :key=\"n\">\n              <td>{{ n }}</td>\n              <td>Item {{ n }}</td>\n              <td>{{ (Math.random() * 100).toFixed(1) }}</td>\n              <td>{{ n % 3 === 0 ? 'error' : n % 2 === 0 ? 'warn' : 'ok' }}</td>\n            </tr>\n          </tbody>\n        </table>\n      </div>\n    </div>\n  </div>\n</template>\n\n<!-- ====== GLOBAL: Vuetify layout overrides ====== -->\n<style>\nhtml, body, #app,\n.v-application,\n.v-application__wrap,\n.nrdb-app,\n.v-main {\n  height: 100% !important;\n  margin: 0 !important;\n  padding: 0 !important;\n  overflow: hidden !important;\n}\n.v-navigation-drawer {\n  display: none !important;\n}\n.v-main {\n  --v-layout-left: 0px !important;\n  --v-layout-right: 0px !important;\n  --v-layout-top: 0px !important;\n  --v-layout-bottom: 0px !important;\n}\n.nrdb-ui-page,\n.nrdb-ui-group,\n.v-card,\n.v-card-text,\n.nrdb-layout-group--grid,\n.nrdb-ui-widget {\n  height: 100% !important;\n  min-height: 0 !important;\n  padding: 0 !important;\n  margin: 0 !important;\n  overflow: hidden !important;\n  position: relative !important;\n}\n.v-card {\n  border: none !important;\n  box-shadow: none !important;\n}\n.v-card__loader,\n.v-card__underlay,\n.nrdb-layout-overlay {\n  display: none !important;\n}\n.nrdb-ui-page {\n  grid-template-rows: 1fr !important;\n}\n.nrdb-ui-page ~ div,\n.nrdb-ui-page ~ .nrdb-layout-overlay {\n  display: none !important;\n}\n</style>\n\n<!-- ====== layout ====== -->\n<style>\n.demo {\n  display: flex;\n  flex-direction: column;\n  height: 100%;\n  padding: 16px;\n  box-sizing: border-box;\n  gap: 12px;\n  overflow: hidden;\n}\n.demo-title {\n  margin: 0;\n  flex-shrink: 0;\n}\n.demo-info {\n  margin: 0;\n  flex-shrink: 0;\n}\n.demo-table-wrap {\n  flex: 1;\n  min-height: 0;\n  overflow: hidden;\n  border-radius: 10px;\n}\n.demo-table-scroll {\n  height: 100%;\n  overflow-y: auto;\n}\n.demo-table {\n  width: 100%;\n  border-spacing: 0;\n}\n.demo-table th,\n.demo-table td {\n  padding: 8px 12px;\n  text-align: left;\n}\n.demo-table thead th {\n  position: sticky;\n  top: 0;\n  z-index: 1;\n}\n</style>\n\n<!-- ====== theme ====== -->\n<style>\n.demo {\n  font-family: Inter, sans-serif;\n  background: #f5f5f7;\n  border-radius: 12px;\n}\n.demo-title {\n  font-size: 18px;\n  font-weight: 700;\n  color: #1a1a1a;\n  letter-spacing: -0.02em;\n}\n.demo-info {\n  font-size: 13px;\n  color: #666;\n}\n.demo-table-wrap {\n  background: #fff;\n  border: 1px solid #d8d8d8;\n}\n.demo-table thead th {\n  font-size: 12px;\n  font-weight: 600;\n  color: #888;\n  text-transform: uppercase;\n  letter-spacing: 0.04em;\n  background: #fff;\n  border-bottom: 1px solid #d8d8d8;\n}\n.demo-table td {\n  font-size: 13px;\n  color: #1a1a1a;\n  border-bottom: 1px solid #eee;\n}\n.demo-table tbody tr:hover {\n  background: #f8f8fa;\n}\n</style>",
        "storeOutMessages": true,
        "passthru": true,
        "resendOnRefresh": true,
        "templateScope": "local",
        "className": "",
        "x": 120,
        "y": 100,
        "wires": [
            []
        ]
    },
    {
        "id": "cd0dac1475062196",
        "type": "ui-group",
        "name": "Group 1",
        "page": "e188ea992f7b5998",
        "width": "12",
        "height": 1,
        "order": 1,
        "showTitle": false,
        "className": "",
        "visible": "true",
        "disabled": "false",
        "groupType": "default"
    },
    {
        "id": "e188ea992f7b5998",
        "type": "ui-page",
        "name": "Page 1",
        "ui": "98d9c169110a1e36",
        "path": "/page1",
        "icon": "home",
        "layout": "grid",
        "theme": "4fb2df74dface31f",
        "breakpoints": [
            {
                "name": "Default",
                "px": "0",
                "cols": "3"
            }
        ],
        "order": 2,
        "className": "",
        "visible": true,
        "disabled": false
    },
    {
        "id": "98d9c169110a1e36",
        "type": "ui-base",
        "name": "My Dashboard",
        "path": "/dashboard",
        "appIcon": "",
        "includeClientData": true,
        "acceptsClientConfig": [
            "ui-notification",
            "ui-control"
        ],
        "showPathInSidebar": true,
        "headerContent": "none",
        "navigationStyle": "none",
        "titleBarStyle": "hidden",
        "showReconnectNotification": true,
        "notificationDisplayTime": 1,
        "showDisconnectNotification": true,
        "allowInstall": false
    },
    {
        "id": "4fb2df74dface31f",
        "type": "ui-theme",
        "name": "empty",
        "colors": {
            "surface": "#ffffff",
            "primary": "#0094ce",
            "bgPage": "#eeeeee",
            "groupBg": "#ffffff",
            "groupOutline": "#cccccc"
        },
        "sizes": {
            "density": "compact",
            "pagePadding": "0px",
            "groupGap": "0px",
            "groupBorderRadius": "0px",
            "widgetGap": "0px"
        }
    },
    {
        "id": "5bbd48e3ad559896",
        "type": "global-config",
        "env": [],
        "modules": {
            "@flowfuse/node-red-dashboard": "1.30.2"
        }
    }
]