From a9ef6116223eb896b665b9b7c5fe085a652bea7e Mon Sep 17 00:00:00 2001 From: Jason Tudisco Date: Wed, 27 May 2026 21:54:26 -0600 Subject: [PATCH] design(kez-chat/web): restyle auth + claims pages to the dark theme (phase 6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Completes visual consistency across the whole app — every surface now uses the tactical-terminal token set, so the redesign can ship without a light-on-dark login screen. • app.css: dark defaults for input/textarea/select (bg-elevated, token text/border/placeholder, accent focus) so forms that don't set an explicit bg still read correctly. • Landing / CreateAccount / Restore / Unlock: light utility classes → tokens (bg-white→surface, text-gray-*→text tiers, gray-900 buttons→ accent, red/green/amber→danger/verified/warning). • Claims / AddClaim: same swap, plus the nostr publish panel + format toggle + status badges remapped (purple→accent, blue→accent, yellow→warning). Now consistent end to end. Remaining polish (message ticks, day separators, contact preview-card, skeletons, emoji-picker dark theme) tracked for a follow-up; ready to deploy for a look. Co-Authored-By: Claude Opus 4.7 --- kez-chat/web/src/app.css | 21 +++++ kez-chat/web/src/routes/AddClaim.svelte | 90 ++++++++++---------- kez-chat/web/src/routes/Claims.svelte | 54 ++++++------ kez-chat/web/src/routes/CreateAccount.svelte | 74 ++++++++-------- kez-chat/web/src/routes/Landing.svelte | 34 ++++---- kez-chat/web/src/routes/Restore.svelte | 20 ++--- kez-chat/web/src/routes/Unlock.svelte | 18 ++-- 7 files changed, 166 insertions(+), 145 deletions(-) diff --git a/kez-chat/web/src/app.css b/kez-chat/web/src/app.css index 4dead42..c927942 100644 --- a/kez-chat/web/src/app.css +++ b/kez-chat/web/src/app.css @@ -72,6 +72,27 @@ samp { font-family: var(--font-mono); } +/* Dark-theme defaults for form controls so any page that doesn't set an + explicit bg (the auth + claims forms) still reads correctly. Components + that set bg-elevated/bg-surface explicitly override this. */ +input, +textarea, +select { + background-color: var(--color-elevated); + color: var(--color-text); + border-color: var(--color-border); +} +input::placeholder, +textarea::placeholder { + color: var(--color-text-muted); +} +input:focus-visible, +textarea:focus-visible, +select:focus-visible { + outline: none; + border-color: var(--color-accent); +} + /* Cyan text-selection — reinforces the accent. */ ::selection { background: #28c8e840; diff --git a/kez-chat/web/src/routes/AddClaim.svelte b/kez-chat/web/src/routes/AddClaim.svelte index 08d311c..30761e5 100644 --- a/kez-chat/web/src/routes/AddClaim.svelte +++ b/kez-chat/web/src/routes/AddClaim.svelte @@ -246,9 +246,9 @@
-

Add a claim

+

Add a claim

-
    -
  1. 1. Channel
  2. +
      +
    1. 1. Channel
    2. -
    3. 2. Identifier
    4. +
    5. 2. Identifier
    6. -
    7. 3. Publish
    8. +
    9. 3. Publish
    10. -
    11. 4. Done
    12. +
    13. 4. Done
    {#if step === "pick"}
    {#each CHANNELS as c} {/each}
    @@ -286,7 +286,7 @@ onsubmit={(e) => { e.preventDefault(); buildAndSign(); }} >
    -
    @@ -317,14 +317,14 @@
    @@ -367,20 +367,20 @@
    {#await renderArtifact(envelope, format)} -
    Computing…
    +
    Computing…
    {:then text} -
    {text}
    +
    {text}
    {#if format === "compact"} -

    +

    {text.length} chars · zstd-compressed signed envelope, base64url-encoded.

    {/if} {:catch e} -
    Error: {e.message}
    +
    Error: {e.message}
    {/await}
{#if selected.key === "nostr" && nip07Available} -
-

⚡ One-click publish via your nostr extension

-

+

+

⚡ One-click publish via your nostr extension

+

Wraps the markdown block in a normal nostr post (kind 1), asks your extension to sign it, and broadcasts to the relay pool. Verifiers (web + Rust CLI) will pick it up automatically.

{#if nostrPublish.status === "ok"} - + ✓ Posted to {nostrPublish.result.ok.length} relay(s). view on njump.me {:else if nostrPublish.status === "error"} - ✗ {nostrPublish.message} + ✗ {nostrPublish.message} {/if}
{#if nostrPublish.status === "ok" && nostrPublish.result.failed.length > 0} -

+

{nostrPublish.result.failed.length} relay(s) didn't ack: {nostrPublish.result.failed.map((f) => f.relay).join(", ")}

@@ -427,15 +427,15 @@
{/if} -
+
-

+

A claim is a signed envelope that says "I control this other account." Publish the proof on the channel itself (a public gist, a DNS TXT record, a nostr event, etc.) and anyone can verify it without @@ -117,13 +117,13 @@

{#if loading} -

Loading…

+

Loading…

{:else if claims.length === 0} -
-

No claims yet.

+
+

No claims yet.

Add your first claim @@ -134,67 +134,67 @@ {@const badge = statusBadge(c)} {@const isVerifying = verifying.has(c.id)} {@const isExpanded = expanded.has(c.id)} -
  • +
  • -

    +

    {c.envelope.payload.subject}

    {badge.text}
    -

    +

    Channel: {c.channel} · Signed: {c.envelope.payload.created_at}

    {#if c.last_verify} -

    +

    {c.last_verify.summary} - · checked {formatChecked(c.last_verify.checked_at)} + · checked {formatChecked(c.last_verify.checked_at)}

    {#if c.last_verify.evidence_url || c.last_verify.details} {#if isExpanded} -
    +
    {#if c.last_verify.evidence_url}
    - Evidence URL: + Evidence URL: {c.last_verify.evidence_url}
    {/if} {#if c.last_verify.details} -
    {c.last_verify.details}
    +
    {c.last_verify.details}
    {/if}
    {/if} {/if} {:else if c.published_at} -

    +

    ✓ You marked this published at {c.published_at}

    {:else} -

    +

    ⚠ Not marked as published yet

    {/if}
    {#if !c.published_at} {/if}
    -