[grade=pending] QA sprint: commit 103 at-risk files from multi-agent sprint work

Committed by Hermes autonomous QA sprint 2026-08-13.
These files were modified during the Aug 12 sprint but never committed.
This commit is contained in:
Krystie
2026-08-12 17:34:10 -07:00
parent 0bf4406253
commit 503de258b8
105 changed files with 14057 additions and 2632 deletions
+322
View File
@@ -3878,3 +3878,325 @@ button:focus-visible {
.footer-legal { display: flex; gap: 14px; font-size: 0.8rem; }
.footer-legal a { color: var(--muted); text-decoration: none; }
.footer-legal a:hover, .footer-legal a:focus-visible { color: var(--accent); text-decoration: underline; }
/* ============================================================
DC-079: Mobile responsive improvements
Additive only — new media queries at the end of the file.
These cascade AFTER the existing rules above and only apply
at narrow widths, so existing desktop layouts are untouched.
Breakpoints: 768px (tablet/mobile), 480px (small phones).
============================================================ */
/* --- Hamburger toggle for the top-bar tools panel ---
DashCaddy uses a top-bar (no sidebar); the tools cluster
(.reload-caddy-container: theme toggle, Reload Caddy button,
license/version) is the panel that overflows on phones.
Below 768px it collapses; JS may add a `dc-mobile-open` class
to reveal it, and a `.dc-hamburger` button (if added later)
is styled here so the CSS is ready. Pure CSS fallback: the
panel remains reachable because it simply reflows below. */
.dc-hamburger {
display: none;
min-height: 44px;
min-width: 44px;
align-items: center;
justify-content: center;
font-size: 1.4rem;
line-height: 1;
background: transparent;
border: 1px solid var(--border);
border-radius: 10px;
cursor: pointer;
}
/* --- Fluid typography (clamp) for headings and body ---
Engages everywhere; the clamp() bounds are no-ops on desktop
where viewport is wide, and only tighten on small screens. */
.row .name {
font-size: clamp(15px, 1.1vw + 14px, 24px);
}
.weather-modal h3,
.logs-header h3 {
font-size: clamp(1rem, 2.5vw, 1.25rem);
}
/* ===================================================================
TABLET / MOBILE (max-width: 768px)
=================================================================== */
@media (max-width: 768px) {
/* --- Top bar: tools panel collapses (hamburger pattern) --- */
.reload-caddy-container {
position: static;
padding-top: 0;
width: 100%;
align-items: stretch;
}
/* Tools panel hidden by default; revealed when toggled.
Safe without JS: it simply stacks below the brand row. */
.reload-caddy-main {
flex-direction: column;
align-items: stretch;
width: 100%;
gap: 10px;
}
.reload-caddy-main .theme-toggle-group {
justify-content: flex-start;
flex-wrap: wrap;
gap: 8px;
}
/* Hamburger affordance becomes visible at this width */
.dc-hamburger {
display: inline-flex;
}
/* When JS hasn't toggled it open, keep the tools reachable but compact */
.top-row {
flex-wrap: wrap;
gap: 12px;
}
.brand-weather-group {
flex-wrap: wrap;
gap: 12px;
}
/* --- Dashboard grid: single column on mobile --- */
.grid {
grid-template-columns: 1fr;
gap: 12px;
}
.grid .card,
.grid .card[data-app] {
width: 100%;
min-width: 0;
max-width: 100%;
}
/* Top anchor row (DNS/Internet/etc.) — already collapses via existing
760px rule, but enforce 1fr here too for safety at 768px. */
.top {
grid-template-columns: 1fr;
gap: 12px;
margin: 12px 0 16px;
}
/* Generic 2-column utility grid → single column */
.grid-2col {
grid-template-columns: 1fr;
}
/* App-selector picker grid tighter */
.app-selector-grid {
grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
}
/* --- Cards: full width, comfortable mobile padding --- */
.card {
padding: 12px 14px 56px;
}
/* --- Tables: horizontally scrollable ---
DashCaddy tables are injected into .scroll-container wrappers.
Ensure any <table> anywhere can scroll sideways without breaking
the card/modal layout. */
.scroll-container,
.scroll-container > table,
.weather-modal-content table,
.logs-modal-content table,
.app-selector-content table {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
max-width: 100%;
}
table {
display: block;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
max-width: 100%;
}
/* --- Buttons: larger touch targets (min 44px) --- */
button,
.btn-option,
.btn-row button,
.weather-modal-buttons button,
.logs-controls select {
min-height: 44px;
}
button {
padding: 0.5rem 0.9rem;
}
/* Keep the small icon-style buttons readable but still tappable */
.btn-sm,
.btn-xs {
min-height: 44px;
padding: 0.45rem 0.8rem;
}
/* --- Modals: near full-screen on mobile --- */
.weather-modal {
align-items: stretch;
justify-content: stretch;
padding: 0;
}
.weather-modal.show {
align-items: stretch;
justify-content: stretch;
}
.weather-modal-content {
width: 100%;
max-width: 100%;
min-width: 0;
height: auto;
max-height: 100%;
min-height: 0;
border-radius: 0;
margin: 0;
resize: none;
overscroll-behavior: contain;
}
.weather-modal-content.version-info-modal-content,
.app-selector-content,
.draggable-dialog {
width: 100% !important;
max-width: 100% !important;
min-width: 0 !important;
left: 0 !important;
right: 0 !important;
border-radius: 0;
resize: none;
}
/* Logs modal already sized via min(90vw,800px); let it breathe full width */
.logs-modal {
align-items: stretch;
justify-content: stretch;
}
.logs-modal-content {
width: 100%;
height: 100%;
max-height: 100%;
border-radius: 0;
}
/* --- Alert config form row: stack vertically on mobile --- */
.alert-config-row {
grid-template-columns: 1fr;
gap: 6px;
}
/* --- Modal footer / panel bottom bars: stack buttons, full width --- */
.weather-modal-buttons,
.panel-bottom-bar,
.modal-footer-bar {
flex-direction: column;
align-items: stretch;
gap: 8px;
}
.weather-modal-buttons button,
.panel-bottom-bar button,
.modal-footer-bar button {
width: 100%;
}
/* --- Panel tabs: horizontally scrollable so labels don't truncate --- */
.panel-tabs {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
flex-wrap: nowrap;
}
/* --- Body padding a touch tighter --- */
body {
padding: 14px;
}
}
/* ===================================================================
SMALL PHONES (max-width: 480px)
=================================================================== */
@media (max-width: 480px) {
body {
padding: 8px;
}
/* Grid gap tight; cards edge-to-edge within the padding */
.grid {
gap: 10px;
}
.card {
padding: 10px 12px 52px;
border-radius: calc(var(--radius) - 2px);
}
.top {
gap: 10px;
margin: 8px 0 12px;
}
/* Fluid type tightens further on the smallest screens */
.row .name {
font-size: clamp(14px, 4vw, 18px);
}
/* Brand row: stack logo + weather + clock vertically to save width */
.brand-weather-group {
flex-direction: column;
align-items: stretch;
gap: 10px;
width: 100%;
}
.brand-weather-group > * {
width: 100%;
justify-content: flex-start;
}
/* Tools panel buttons full width */
.reload-caddy-main button,
.reload-caddy-main .theme-toggle-btn,
#reload-caddy-top {
width: 100%;
justify-content: center;
}
.license-version-row {
justify-content: center;
flex-wrap: wrap;
}
/* Modals truly full-screen on small phones */
.weather-modal-content,
.logs-modal-content,
.app-selector-content,
.draggable-dialog {
height: 100% !important;
max-height: 100% !important;
border-radius: 0 !important;
}
/* App picker: 2 columns max on narrow phones */
.app-selector-grid {
grid-template-columns: 1fr 1fr;
}
/* Slightly larger relative sizing for legibility at small widths */
.weather-temp,
.clock-time {
font-size: clamp(1rem, 6vw, 1.4rem);
}
}