A static install unavailable notice shows Field Notes, Missing install criteria reason, Use browser bookmark next step, and Install unavailable status.

Program

Unavailable states should explain why install is not offered and give a plain fallback.

install_unavailable_notice.html
Visuals: captured from real browser rendering
<section class="install-unavailable" aria-labelledby="install-unavailable-title"><h2 id="install-unavailable-title">Install unavailable notice</h2><div class="fallback-card" aria-label="Static install unavailable fallback">Use browser bookmark</div><dl>
  <div><dt>App</dt><dd>Field Notes</dd></div>
  <div><dt>Reason</dt><dd>Missing install criteria</dd></div><div><dt>Next step</dt><dd>Use browser bookmark</dd></div>
  <div><dt>Status</dt><dd><span class="badge">Install unavailable</span></dd></div></dl>
  <p class="check">Learner check: the fallback is visible without checking install criteria.</p>
  <p class="note">Static install unavailable notice only; no beforeinstallprompt event, appinstalled event, service worker, manifest fetch, install criteria check, platform detection, browser UI, route, API, network, storage, cookie, script, event listener, form submit, input, textarea, contenteditable, analytics, timer, object URL, download, account/session behavior, app installation, bookmark creation, or live submission runs.</p></section>
<style>
  .install-unavailable { display: grid; gap: 10px; max-width: 38rem; border: 1px solid #b45309; padding: 12px; background: #fffbeb; }
  .fallback-card { justify-self: start; border: 1px solid #b45309; background: #ffffff; padding: 8px 12px; font-weight: 700; }
  .install-unavailable dl { display: grid; gap: 8px; margin: 0; }
  .install-unavailable dl div { display: grid; grid-template-columns: 8rem 1fr; gap: 8px; }
  .install-unavailable dt { color: #475569; }
  .install-unavailable dd, .check, .note { margin: 0; }
  .badge { border-radius: 999px; background: #fde68a; padding: 2px 8px; }
  .note { color: #475569; }
</style>
  1. Label the install unavailable notice.

    The section is labelled by its visible heading.
    The section is labelled by its visible heading.
  2. Show app row.

    The app name is exact pinned data.
    The app name is exact pinned data.
  3. Show reason and next step rows.

    The reason and next step are exact pinned data.
    The reason and next step are exact pinned data.
  4. Render install-unavailable status.

    The status badge says install is unavailable.
    The status badge says install is unavailable.
  5. Check unavailable readback.

    The check says the fallback is visible without checking install criteria.
    The check says the fallback is visible without checking install criteria.
  6. Check unavailable honesty.

    App, reason, next step, status, and no live install.
    App, reason, next step, status, and no live install.
step flow step(1) labels the source, step(2) shows the app, step(3) shows reason and next step rows, step(4) shows install-unavailable status, step(5) checks the unavailable readback, and step(6) checks the honesty note.
install unavailable readback The section heading names the install unavailable notice surface.
unavailable rows App, Reason, Next step, and Status values are exact pinned data.
no criteria checks The lesson should not imply beforeinstallprompt events, appinstalled events, service workers, manifest fetches, install criteria checks, platform detection, browser UI, routes, APIs, networks, storage, cookies, scripts, event listeners, form submits, inputs, textareas, contenteditable surfaces, analytics, timers, object URLs, downloads, account/session behavior, app installation, bookmark creation, or live submissions.