diff --git a/backend/internal/web/ui/app.css b/backend/internal/web/ui/app.css index 944aad6..edf1f46 100644 --- a/backend/internal/web/ui/app.css +++ b/backend/internal/web/ui/app.css @@ -352,6 +352,7 @@ margin-bottom: 1.5rem; } +.overview-section-heading h1, .overview-section-heading h3, .tasks-section-header h3 { color: var(--color-surface-muted-inverse); @@ -700,3 +701,61 @@ font-style: italic; padding: 0.75rem 1rem; } + +/* ============================================================ + Section 26 — Discussion message bubbles (Phase 17) + ============================================================ */ + +.message-row { + display: flex; + flex-direction: column; + padding: 0.75rem 1rem; +} + +.message-row.message-own { + align-items: flex-end; +} + +.message-row.message-other { + align-items: flex-start; +} + +.message-meta { + display: flex; + align-items: baseline; + gap: 0.5rem; + margin-bottom: 0.25rem; +} + +.message-author { + color: var(--color-text-primary); + font-size: 0.875rem; + font-weight: 600; +} + +.message-timestamp { + color: var(--color-text-muted); + font-size: 0.75rem; +} + +.message-bubble { + border-radius: 0.25rem 0.75rem 0.75rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + max-width: 70%; + padding: 0.75rem 1rem; + white-space: pre-wrap; + word-break: break-words; +} + +.message-row.message-own .message-bubble { + background-color: rgba(128, 78, 236, 0.10); + border-radius: 0.75rem 0.75rem 0.25rem 0.75rem; + color: var(--color-text-primary); +} + +.message-row.message-other .message-bubble { + background-color: var(--color-surface-default, #ffffff); + border: 1px solid var(--color-border-default, #e2e8f0); + color: var(--color-text-primary); +} diff --git a/backend/templates/discussion.templ b/backend/templates/discussion.templ index 500b0ae..a9f9cc0 100644 --- a/backend/templates/discussion.templ +++ b/backend/templates/discussion.templ @@ -15,18 +15,16 @@ templ DiscussionTabFragment(tablo sqlc.Tablo, data DiscussionTabData, form Discu

1 participant

-
+
if len(data.Messages) == 0 { @DiscussionEmptyState() } else { -
- for i, message := range data.Messages { - if DiscussionShowDaySeparator(data.Messages, i) { - @DiscussionDaySeparator(message.CreatedAt) - } - @DiscussionMessageRow(message) + for i, message := range data.Messages { + if DiscussionShowDaySeparator(data.Messages, i) { + @DiscussionDaySeparator(message.CreatedAt) } -
+ @DiscussionMessageRow(message) + } }
@DiscussionComposer(tablo, form, errs, csrfToken) @@ -34,25 +32,25 @@ templ DiscussionTabFragment(tablo sqlc.Tablo, data DiscussionTabData, form Discu } templ DiscussionEmptyState() { -
+

No messages yet

Start the discussion for this tablo.

} templ DiscussionDaySeparator(createdAt time.Time) { -
+
{ DiscussionDateLabel(createdAt) }
} templ DiscussionMessageRow(message DiscussionMessageView) { -
-
- { message.AuthorEmail } - +
+
+ { message.AuthorEmail } +
-

{ message.Body }

+
{ message.Body }
} diff --git a/backend/templates/planning.templ b/backend/templates/planning.templ index 6ec8d8a..f462f60 100644 --- a/backend/templates/planning.templ +++ b/backend/templates/planning.templ @@ -7,10 +7,10 @@ import ( templ PlanningPage(user *auth.User, csrfToken string, activePath string, tablos []sqlc.Tablo, agenda PlanningAgenda) { @AppLayout("Planning - Xtablo", user, csrfToken, activePath, tablos) { -
-
+
+
-

Planning

+

Planning

{ agenda.RangeLabel }

if len(agenda.Events) == 0 { -
+

No events in this range

Use the navigation controls to browse another 14-day window.

@@ -38,7 +38,7 @@ templ PlanningPage(user *auth.User, csrfToken string, activePath string, tablos } } -
+
} }