/* Mind Wall — live-mode state styles (additive; the original stylesheets are unchanged).
   Scoped to html[data-mode="live"], so the demo/reference mode renders exactly as before.
   These cover states the prototype never had: controls the server can't support yet,
   pending/failed sends and read-only identity fields. */
html[data-mode="live"] .switch:disabled { opacity: .42; cursor: not-allowed; }
html[data-mode="live"] .seg.is-locked { opacity: .5; }
html[data-mode="live"] .seg.is-locked .seg__btn { cursor: not-allowed; }
html[data-mode="live"] .input:disabled { opacity: .6; cursor: not-allowed; }
html[data-mode="live"] .set-row__locked { display: inline-flex; align-items: center; gap: 4px; }

/* chat: a message waiting for the server (public messages are reviewed first) */
html[data-mode="live"] .msg.is-pending .msg__bubble { opacity: .6; }
html[data-mode="live"] .msg.is-failed .msg__bubble { border-style: dashed; opacity: .75; }

/* notes / AI picker: an option the server can't honour yet */
html[data-mode="live"] .check.is-locked { opacity: .5; cursor: not-allowed; }

/* AI chat / chat: a message that couldn't be sent stays in its own conversation until the
   person edits, retries or discards it (it never moves into another chat's message box) */
html[data-mode="live"] .ai-msg.is-failed { flex-wrap: wrap; justify-content: flex-end; }
html[data-mode="live"] .ai-msg.is-failed .ai-msg__bubble { border-style: dashed; opacity: .75; }
html[data-mode="live"] .ai-msg__failed,
html[data-mode="live"] .msg__failed { flex-basis: 100%; margin: 4px 0 0; text-align: right; font-size: 12px; opacity: .8; }
html[data-mode="live"] .msg__failed { text-align: inherit; }
