Phone Jump button; docs never scroll sideways; presence sweep timing kept

- Jump (phones / tablets): find a device by name and scroll to its card, or
  jump to a section, the top or the bottom of the page.
- Documentation on phones: long paths, links, code and tables wrap; toolbar is
  title, last edited, then the buttons.
- Filter bar's Clear is the only clear button on phones.
- Card fields: search box and add list as wide as the field rows.
- Presence sweep: the demo uses the hourly schedule too, and the last sweep
  time survives a worker restart (a restart used to trigger an extra sweep).
This commit is contained in:
Johan Sandoval committed 2026-10-06 22:01:43 +00:00
1 parent 9dc2d88726
commit b0f700928e
6 files changed
+272 -5

No files matched your search

+50 -2
View File
@@ -213,8 +213,6 @@ body { padding-bottom: var(--dock-h, 40px) !important; }
}
#docs > div > div:last-child > div:last-child { min-height: 60vh; }
#docContent img { max-width: 100%; height: auto; }
#docContent table { display: block; overflow-x: auto; }
#docContent pre { overflow-x: auto; }
#docToolbar { flex-wrap: wrap; gap: 8px; }
/* Modals fill the screen width and scroll inside themselves */
@@ -535,3 +533,53 @@ a.nav-brand:focus-visible { outline: 2px solid #3498db; outline-offset: 3px; }
/* Details title: when the toggle has to wrap under the name it sits on the left */
#detailsTitle.dt-wrapped .dt-toggle { margin-left: 0; }
/* Card fields: the search box and the add list are as wide as the field rows above them */
.xf-fields-sheet .xf-add .xf-search { margin: 0 0 8px; width: 100%; box-sizing: border-box; }
.xf-fields-sheet .xf-add .xf-list { margin: 0; width: 100%; box-sizing: border-box; }
/* Phones / tablets: the filter bar's own Clear button is enough */
@media (max-width: 1100px) {
.xf-clear-all { display: none !important; }
}
/* Documentation on phones / tablets: nothing scrolls sideways. Long paths, links and code
wrap; tables fit the width; the toolbar is title, last edited, then the buttons */
@media (max-width: 1100px) {
#docContent { overflow-x: hidden; overflow-wrap: anywhere; word-break: break-word; }
#docContent pre, #docContent pre code { white-space: pre-wrap !important; word-break: break-all; overflow-x: hidden !important; }
#docContent table { display: table !important; table-layout: fixed; width: 100%; overflow: visible !important; }
#docContent th, #docContent td { overflow-wrap: anywhere; word-break: break-word; white-space: normal !important; }
#docContent img { max-width: 100% !important; height: auto !important; }
#docContent a, #docContent code { overflow-wrap: anywhere; word-break: break-all; }
#docs, #docs > div, #docs > div > div:last-child > div:last-child { max-width: 100%; overflow-x: hidden; box-sizing: border-box; }
#docToolbar { flex-wrap: wrap !important; align-items: center; gap: 8px !important; }
#docToolbar #docHeaderInfo { flex: 1 1 100% !important; min-width: 0; }
#docToolbar #docDisplayTitle { overflow-wrap: anywhere; }
#docToolbar > button, #docToolbar > select { flex: 0 0 auto; margin: 0 !important; }
}
/* Phones / tablets: floating Jump button and its sheet */
.jump-btn {
position: fixed; right: 14px; bottom: calc(var(--dock-h, 40px) + 14px); z-index: 1800;
display: inline-flex; align-items: center; gap: 6px; padding: 10px 15px 10px 12px;
background: var(--table-header-bg); color: #fff; border: 1px solid rgba(255,255,255,0.25); border-radius: 999px;
font: inherit; font-weight: 700; font-size: 0.9em; cursor: pointer; box-shadow: 0 6px 18px rgba(0,0,0,0.35);
}
.jump-btn[hidden] { display: none; }
.jump-btn svg { width: 18px; height: 18px; }
.jump-sheet .jump-search { margin: 8px 12px; font-size: 16px; }
.jump-results, .jump-sections { overflow-y: auto; padding: 0 8px; }
.jump-results { max-height: 38vh; }
.jump-sections { max-height: 30vh; }
.jump-item {
display: flex; align-items: baseline; justify-content: space-between; gap: 10px; width: 100%;
padding: 12px 10px; background: none; border: 0; border-bottom: 1px solid var(--border-light);
color: var(--text-main); font: inherit; text-align: left; cursor: pointer;
}
.jump-item:hover, .jump-item:focus-visible { background: var(--hover-bg); }
.jump-item span { font-size: 0.8em; color: var(--text-muted); text-align: right; }
.jump-sec { font-weight: 600; }
.jump-empty { padding: 12px 10px; color: var(--text-muted); font-size: 0.9em; }
@keyframes jump-flash { 0%, 60% { box-shadow: 0 0 0 3px #3498db, 0 0 18px rgba(52,152,219,0.8); } 100% { box-shadow: none; } }
tr.jump-flash { animation: jump-flash 2.2s ease-out; }