(defcomp
  (&key items server-time)
  (div
    (~tw :tokens "space-y-8")
    (div
      (~tw :tokens "border-b border-stone-200 pb-6")
      (h1 (~tw :tokens "text-2xl font-bold text-stone-900") "Optimistic Updates")
      (p
        (~tw :tokens "mt-2 text-stone-600")
        "This page tests Phase 7c optimistic data mutations. Items are updated "
        "instantly on the client, then confirmed or reverted when the server responds."))
    (div
      (~tw :tokens "rounded-lg border border-stone-200 bg-white p-6 space-y-3")
      (h2 (~tw :tokens "text-lg font-semibold text-stone-800") "Current state")
      (dl
        (~tw :tokens "grid grid-cols-2 gap-2 text-sm")
        (dt (~tw :tokens "font-medium text-stone-600") "Server time")
        (dd (~tw :tokens "font-mono text-stone-900") server-time)
        (dt (~tw :tokens "font-medium text-stone-600") "Item count")
        (dd (~tw :tokens "text-stone-900") (str (len items)))))
    (div
      (~tw :tokens "space-y-3")
      (h2 (~tw :tokens "text-lg font-semibold text-stone-800") "Items")
      (div
        :id "optimistic-items"
        (~tw :tokens "space-y-2")
        (map
          (fn
            (item)
            (div
              (~tw :tokens "flex items-center justify-between rounded border border-stone-100 bg-white p-3")
              (div
                (~tw :tokens "flex items-center gap-3")
                (span
                  (~tw :tokens "flex-none rounded-full bg-violet-100 text-violet-700 w-6 h-6 flex items-center justify-center text-xs font-bold")
                  (str (get item "id")))
                (span (~tw :tokens "text-stone-900") (get item "label")))
              (span
                (~tw :tokens "text-xs px-2 py-0.5 rounded-full")
                :class (case
                  (get item "status")
                  "confirmed"
                  "bg-green-100 text-green-700"
                  "pending"
                  "bg-amber-100 text-amber-700"
                  "reverted"
                  "bg-red-100 text-red-700"
                  :else "bg-stone-100 text-stone-500")
                (get item "status"))))
          items))
      (div
        (~tw :tokens "pt-2")
        (button
          (~tw :tokens "px-4 py-2 bg-violet-500 text-white rounded hover:bg-violet-600 text-sm")
          :sx-post "/sx/action/add-demo-item"
          :sx-target "#sx-content"
          :sx-vals "{\"label\": \"New item\"}"
          "Add item (optimistic)")))
    (div
      (~tw :tokens "space-y-4")
      (h2 (~tw :tokens "text-lg font-semibold text-stone-800") "How it works")
      (div
        (~tw :tokens "space-y-2")
        (map-indexed
          (fn
            (i step)
            (div
              (~tw :tokens "flex items-start gap-3 rounded border border-stone-100 bg-white p-3")
              (span
                (~tw :tokens "flex-none rounded-full bg-stone-100 text-stone-700 w-6 h-6 flex items-center justify-center text-xs font-bold")
                (str (+ i 1)))
              (div
                (div (~tw :tokens "font-medium text-stone-900") (get step "label"))
                (div (~tw :tokens "text-sm text-stone-500") (get step "detail")))))
          (list
            (dict
              :label "Predict"
              :detail "Client applies mutator function to cached data immediately")
            (dict
              :label "Snapshot"
              :detail "Pre-mutation data saved in _optimistic-snapshots for rollback")
            (dict
              :label "Re-render"
              :detail "Page content re-evaluated and swapped with predicted data")
            (dict
              :label "Submit"
              :detail "Mutation sent to server via POST /sx/action/<name>")
            (dict
              :label "Confirm or revert"
              :detail "Server responds — cache updated with truth, or reverted to snapshot")))))
    (div
      (~tw :tokens "rounded-lg border border-amber-200 bg-amber-50 p-4 text-sm space-y-2")
      (p (~tw :tokens "font-semibold text-amber-800") "How to verify")
      (ol
        (~tw :tokens "list-decimal list-inside text-amber-700 space-y-1")
        (li "Open the browser console (F12)")
        (li "Navigate to this page from another isomorphism page")
        (li
          "Click \"Add item\" — item appears instantly with \"pending\" status")
        (li
          "Watch console for "
          (code (~tw :tokens "bg-amber-100 px-1 rounded") "sx:optimistic confirmed"))
        (li "Item status changes to \"confirmed\" when server responds")))))
