aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--AGENTS.md5
-rw-r--r--src/features/messages.js8
-rw-r--r--src/style.css5
3 files changed, 14 insertions, 4 deletions
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..7d500e6
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,5 @@
+# User preferences
+
+- After completing and validating a requested change in this project, deploy it to production automatically. Do not stop at a local implementation or ask for deployment confirmation unless the user explicitly requests otherwise. This is the user's standing instruction from 2026-09-28.
+- Deploy only the requested changes; preserve unrelated work in the shared workspace. Use an isolated release worktree when necessary.
+- Production deploys through `git push prod HEAD:prod` (`prod` points to `cs:coinosv3.git`). The remote post-receive hook builds and publishes the site at https://v3.coinos.io. Verify the live assets and matching service-worker version after deployment.
diff --git a/src/features/messages.js b/src/features/messages.js
index fb2986f..31a3e4d 100644
--- a/src/features/messages.js
+++ b/src/features/messages.js
@@ -6403,10 +6403,10 @@ export function messagesFeature(ctx) {
const openable = open && !pending;
if (!pending) watchZaps([ev.id]);
return h('div', {
- class: 'row',
+ class: 'row note-post',
'data-zap-post': ev.id,
'data-focus-note': focus ? '1' : undefined,
- style: 'gap:10px;align-items:flex-start;padding:10px 0'
+ style: 'padding:10px 0'
+ (openable ? ';cursor:pointer' : '')
+ (pending ? ';opacity:.55' : '')
// joined: the reply box continues this highlight below, so the
@@ -6419,8 +6419,8 @@ export function messagesFeature(ctx) {
// the avatar is its own tap-target (profile), even inside an openable
// row — its handler stops propagation, so the row still opens the thread
avatar(pk, 'chat-avatar note-avatar'),
- h('div', { class: 'col grow', style: 'min-width:0;gap:3px' },
- h('div', { class: 'row between', style: 'align-items:center;gap:8px' },
+ h('div', { class: 'note-content' },
+ h('div', { class: 'row between note-header', style: 'align-items:center;gap:8px' },
h('div', { class: 'row', style: 'gap:7px;align-items:baseline;min-width:0' },
h('span', {
// the name, like the avatar, is its own tap-target (profile)
diff --git a/src/style.css b/src/style.css
index 2facddc..6507ba5 100644
--- a/src/style.css
+++ b/src/style.css
@@ -626,6 +626,11 @@ html:has(#app .chat-card), body:has(#app .chat-card) { overflow: hidden; }
/* The row under a post: reply, boost, quote, react, zap — spread across the
post's full width so each is a comfortable target, quiet until one carries
a count or you've used it. */
+.note-post { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 8px 10px; align-items: center; }
+.note-content { display: contents; }
+.note-content > * { grid-column: 1 / -1; min-width: 0; }
+.note-content > .note-header { grid-column: 2; grid-row: 1; }
+.note-content > .note-text { font-size: 18px; line-height: 1.5; }
.note-acts { margin-top: 8px; gap: 4px; width: min(100%, 340px); }
.note-acts > .note-act { flex: 1 1 0; min-width: 0; justify-content: center; padding-inline: 2px; }
/* server comparison table (Settings → Advanced → Ark server) */