diff --git a/docs/agent/current-state.md b/docs/agent/current-state.md index 9f7aec9..5e71fdb 100644 --- a/docs/agent/current-state.md +++ b/docs/agent/current-state.md @@ -2,6 +2,12 @@ Working memory, not an implementation timeline. Source is authoritative; begin with [code map](code-map.md), then [architecture](architecture.md) and [decisions](design-decisions.md). +## Web popup cosmetics — 2026-09-14 + +- `src/web_ui.c`: contextual buttons now occupy entire status cards; bounded grid columns and clipped/ellipsized values prevent narrow-window overflow. Quick panels preserve the visible terminal title, admin toolbar and selected-view indication; full-page promotion retains drafts and restores Settings presentation. +- Quick panels hide full-page explanations and duplicate detail readouts while preserving live status, errors and operation results. Wi-Fi exposes configured profile selection/enabled state and AP policy, plus Apply/Save/Refresh/Result; empty profile slots and advanced editors remain full-page-only. Profile selection is an editing target, not a direct-connect command; existing backend operations are unchanged. +- Validation: all 161 UI behavior groups and C/HTML checks PASS; 36 Chromium geometry fixtures PASS at 320/600/900/1200px. `pio run` PASS (94,212 B linked RAM / 1,830,329 B flash). No generated-asset regeneration, upload, erase or hardware validation. Updated regression coverage in `tests/web_ui_session/`. + ## Focused cleanup / PSRAM review — 2026-09-13 - User-authorized post-acceptance code review: removed superseded `admin_ssh_console_open()` SSH-only wrapper; production already uses available-slot admission. Updated adapter regression to actual production entry. Wrapper was already linker-discarded: no binary saving attributed to removal. diff --git a/src/web_ui.c b/src/web_ui.c index 179e7f9..1c54e88 100644 --- a/src/web_ui.c +++ b/src/web_ui.c @@ -26,9 +26,13 @@ static const char s_index_html[] = "--good:#52d68b;--warn:#ffc857;--bad:#ff6b7a;--radius:14px}\n" "*{box-sizing:border-box}\n" "[hidden]{display:none!important}\n" - ".quick-trigger{background:none;border:0;padding:0;color:inherit;text-align:left;cursor:pointer}.quick-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:3px}\n" + ".quick-trigger{display:block;width:100%;color:inherit;text-align:left;font:inherit;cursor:pointer;overflow:hidden}.quick-trigger:disabled{cursor:default}.quick-trigger:focus-visible{outline:2px solid var(--accent);outline-offset:3px}\n" ".settings-page[data-quick='true']{position:fixed;z-index:10;top:8px;right:8px;width:min(600px,calc(100vw - 16px));max-height:calc(100vh - 16px);max-height:calc(100dvh - 16px);overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;box-shadow:0 8px 32px #0008}\n" - "[data-quick='true']>#settings-navigation,[data-quick='true'] #network-password-mode-label,[data-quick='true'] #network-password-label,[data-quick='true'] #network-password-status{display:none}\n" + "[data-quick='true'] .full-settings-only,[data-quick='true'] #settings-navigation,[data-quick='true'] #quick-help,[data-quick='true'] h3,[data-quick='true']>div>h2,[data-quick='true'] p:not([role=status]),[data-quick='true'] #network-summary,[data-quick='true'] #broker-values,[data-quick='true'] #network-ssid-detail{display:none}\n" + "[data-quick='true'] #quick-header>h2{display:block}[data-quick='true'] #settings-values>:nth-child(n+3){display:none}\n" + "[data-quick='true'] #network-edit>*{display:none}[data-quick='true'] #network-edit>.settings-edit:first-of-type{display:grid}[data-quick='true'] #network-edit>.network-quick-actions{display:flex}\n" + "[data-quick='true'] #network-edit>.settings-edit>label{display:none}[data-quick='true'] #network-edit>.settings-edit>#network-target-label,[data-quick='true'] #network-edit>.settings-edit>#network-policy-label{display:grid}[data-quick='true'] #network-edit>.settings-edit>#network-enabled-label{display:flex}\n" + "[data-quick='true'] #network-wifi-load{display:none}\n" "html,body{height:100%;margin:0;overflow:hidden}\n" "body{background:radial-gradient(circle at top left,#142033 0,var(--bg) 42rem);" "color:var(--text);font:14px/1.45 system-ui,-apple-system,BlinkMacSystemFont," @@ -55,7 +59,7 @@ static const char s_index_html[] = ".dashboard{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,.65fr);gap:16px}\n" ".panel{background:linear-gradient(145deg,#151e2cdd,#0f1621ee);border:1px solid var(--line);" "border-radius:var(--radius);box-shadow:0 16px 45px #0005}\n" - ".status-grid{padding:16px;display:grid;grid-template-columns:repeat(4,minmax(105px,1fr));gap:12px}\n" + ".status-grid{min-width:0;padding:16px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}\n" ".status-item{min-width:0;padding:10px 12px;background:#0b111b99;border:1px solid #202c3e;" "border-radius:10px}\n" ".status-item.wide{grid-column:span 2}\n" @@ -152,14 +156,10 @@ static const char s_index_html[] = "Observer\n" "
Broker client" "
\n" - "
Active writer" - "
\n" - "
Broker clients" - "
\n" - "
Wi-Fi" - "
\n" - "
Serial" - "
\n" + "\n" + "\n" + "\n" + "\n" "\n" "
\n" "
\n" @@ -201,7 +201,7 @@ static const char s_index_html[] = "
" "

Explicit confirmation required. Acknowledgement is not peer receipt or completion. Connection loss, expiry, revocation or timeout does not prove cancellation after admission. No automatic mutation retry or restore. Check Result, inspect state, then act explicitly.

Reload / sign in after recovery
\n" "\n" - "\n" + "\n" "" "" - "

Check Result after any uncertain submission; never assume timeout or navigation cancels an operation.

" + "

Check Result after any uncertain submission; never assume timeout or navigation cancels an operation.

" "