diff --git a/apps/web/src/components/admin/global-roles/GlobalRolesTable.tsx b/apps/web/src/components/admin/global-roles/GlobalRolesTable.tsx index 2e96ef01..b67e0407 100644 --- a/apps/web/src/components/admin/global-roles/GlobalRolesTable.tsx +++ b/apps/web/src/components/admin/global-roles/GlobalRolesTable.tsx @@ -70,7 +70,7 @@ export function GlobalRolesTable({ {active.map((permission) => ( {permission} diff --git a/apps/web/src/components/admin/users/UsersTable.tsx b/apps/web/src/components/admin/users/UsersTable.tsx index b07ae13f..2d96f2a5 100644 --- a/apps/web/src/components/admin/users/UsersTable.tsx +++ b/apps/web/src/components/admin/users/UsersTable.tsx @@ -70,12 +70,12 @@ export function UsersTable({ {user.username} {user.must_change_password ? ( - + pwd reset ) : null} {isSelf ? ( - + you ) : null} @@ -87,7 +87,7 @@ export function UsersTable({ )} - + {user.role} diff --git a/apps/web/src/components/app-shell/app-sidebar.tsx b/apps/web/src/components/app-shell/app-sidebar.tsx index dfd7d4ff..0f185d72 100644 --- a/apps/web/src/components/app-shell/app-sidebar.tsx +++ b/apps/web/src/components/app-shell/app-sidebar.tsx @@ -116,7 +116,7 @@ function TreeInlineRename({ setValue(e.target.value)} onFocus={(e) => e.target.select()} onKeyDown={(e) => { @@ -180,7 +180,7 @@ function DocsDocRow({ {expanded && ( -
+					
 						{msg.text}
 					
)} @@ -282,7 +282,7 @@ function ThinkingMessage({ msg }: { msg: ChatMessage }) { {expanded && ( -

+

{msg.text}

)} @@ -309,11 +309,11 @@ function AgentBubble({ msg }: { msg: ChatMessage }) {
-

+

{msg.text}

-

+

{new Date(msg.createdAt).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", @@ -332,11 +332,11 @@ function UserBubble({ msg }: { msg: ChatMessage }) {

-

+

{msg.text}

-

+

{new Date(msg.createdAt).toLocaleTimeString([], { hour: "2-digit", minute: "2-digit", @@ -350,7 +350,7 @@ function UserBubble({ msg }: { msg: ChatMessage }) { function SystemNote({ msg }: { msg: ChatMessage }) { return (

- + {msg.text}
@@ -506,7 +506,7 @@ export function ConversationView({ {statusLabel} diff --git a/apps/web/src/components/projects/docs/doc-editor.tsx b/apps/web/src/components/projects/docs/doc-editor.tsx index 039f84bf..2d4426d3 100644 --- a/apps/web/src/components/projects/docs/doc-editor.tsx +++ b/apps/web/src/components/projects/docs/doc-editor.tsx @@ -167,7 +167,7 @@ export const DocEditor = forwardRef( // biome-ignore lint/a11y/noStaticElementInteractions: wrapper captures keydown from BlockNote rich-text editor
diff --git a/apps/web/src/components/projects/interactions/add-task-row.tsx b/apps/web/src/components/projects/interactions/add-task-row.tsx index 21247262..69398bbe 100644 --- a/apps/web/src/components/projects/interactions/add-task-row.tsx +++ b/apps/web/src/components/projects/interactions/add-task-row.tsx @@ -59,7 +59,7 @@ export function AddTaskRow({ @@ -99,7 +99,7 @@ export function AddTaskRow({ @@ -107,7 +107,7 @@ export function AddTaskRow({ type="button" onClick={submit} disabled={!value.trim()} - className="rounded-lg bg-primary px-3 py-1.5 text-[11px] font-semibold text-primary-foreground hover:bg-primary/90 shadow-sm disabled:opacity-40 transition-all duration-150" + className="rounded-lg bg-primary px-3 py-1.5 text-xs font-semibold text-primary-foreground hover:bg-primary/90 shadow-sm disabled:opacity-40 transition-all duration-150" > Create @@ -122,7 +122,7 @@ export function AddTaskRow({ @@ -645,7 +645,7 @@ export function BoardView({ }} /> )} - + {colDef.label} - + {displayCount}
@@ -703,7 +703,7 @@ export function BoardView({ > - + {displayCount} {colDef.color && ( @@ -717,7 +717,7 @@ export function BoardView({ )}
)} - + {swimDef.label}
@@ -806,7 +806,7 @@ export function BoardView({ > - + {displayCount} {colDef.color && ( @@ -820,7 +820,7 @@ export function BoardView({ )}
-

+

{title}

{headerActions} @@ -1291,7 +1291,7 @@ export function InteractionLayout({ type="button" onClick={handleNewSprint} disabled={createSprintMutation.isPending} - className="flex items-center gap-1.5 rounded-lg border border-dashed border-border/60 bg-muted/10 px-3 py-1.5 text-[12px] font-semibold text-muted-foreground hover:border-primary/50 hover:bg-primary/5 hover:text-primary transition-all duration-150 disabled:opacity-50" + className="flex items-center gap-1.5 rounded-lg border border-dashed border-border/60 bg-muted/10 px-3 py-1.5 text-xs font-semibold text-muted-foreground hover:border-primary/50 hover:bg-primary/5 hover:text-primary transition-all duration-150 disabled:opacity-50" > New sprint @@ -1299,9 +1299,7 @@ export function InteractionLayout({ )}
{description && ( -

- {description} -

+

{description}

)}
@@ -1356,7 +1354,7 @@ export function InteractionLayout({ setPreferredViewId(view.id); }} className={cn( - "flex items-center gap-1.5 px-2.5 py-2.5 text-[12px] font-medium transition-all duration-150", + "flex items-center gap-1.5 px-2.5 py-2.5 text-xs font-medium transition-all duration-150", isActive ? "text-primary" : "text-muted-foreground/80 hover:text-foreground", @@ -1434,7 +1432,7 @@ export function InteractionLayout({ value={searchQuery} onChange={(e) => setSearchQuery(e.target.value)} placeholder="Search tasks…" - className="w-36 bg-transparent text-[12px] font-medium outline-none placeholder:text-muted-foreground/50" + className="w-36 bg-transparent text-xs font-medium outline-none placeholder:text-muted-foreground/50" onKeyDown={(e) => { if (e.key === "Escape") { setSearchOpen(false); diff --git a/apps/web/src/components/projects/interactions/list-group.tsx b/apps/web/src/components/projects/interactions/list-group.tsx index 4cf9c5df..4ea0091d 100644 --- a/apps/web/src/components/projects/interactions/list-group.tsx +++ b/apps/web/src/components/projects/interactions/list-group.tsx @@ -243,10 +243,10 @@ export function ListGroup({ const columnHeaders = (
{isDraggable &&
} -
+
ID
-
+
Title
{visibleFields.map((fk) => { @@ -256,7 +256,7 @@ export function ListGroup({ key={fk} className={cn( col.className, - "text-[10px] font-bold uppercase tracking-[0.08em] text-muted-foreground/60", + "text-xs font-bold uppercase tracking-[0.08em] text-muted-foreground/60", col.responsive ? "hidden sm:block" : "", )} > @@ -415,7 +415,7 @@ export function ListGroup({ type="button" onClick={groupPagination.onLoadMore} disabled={groupPagination.isLoadingMore} - className="flex w-full items-center justify-center border-t border-border/10 py-2 text-[12px] font-medium text-muted-foreground/60 hover:text-primary hover:bg-primary/5 transition-all duration-150 disabled:opacity-50" + className="flex w-full items-center justify-center border-t border-border/10 py-2 text-sm font-medium text-muted-foreground/60 hover:text-primary hover:bg-primary/5 transition-all duration-150 disabled:opacity-50" > {groupPagination.isLoadingMore ? "Loading…" : "View more"} @@ -467,7 +467,7 @@ export function ListGroup({ }} /> )} - + {groupDef.label} @@ -479,7 +479,7 @@ export function ListGroup({ e.stopPropagation(); setStartSprintOpen(true); }} - className="flex items-center gap-1.5 rounded-md bg-emerald-500 px-2.5 py-1 text-[11px] font-semibold text-white shadow-sm hover:bg-emerald-600 active:scale-95 transition-all duration-150 shrink-0" + className="flex items-center gap-1.5 rounded-md bg-emerald-500 px-2.5 py-1 text-xs font-semibold text-white shadow-sm hover:bg-emerald-600 active:scale-95 transition-all duration-150 shrink-0" > Start sprint @@ -494,7 +494,7 @@ export function ListGroup({ e.stopPropagation(); onCreateSprint(); }} - className="flex items-center gap-1.5 rounded-md border border-dashed border-primary/40 bg-primary/5 px-2.5 py-1 text-[11px] font-semibold text-primary hover:bg-primary/10 hover:border-primary/60 active:scale-95 transition-all duration-150 shrink-0" + className="flex items-center gap-1.5 rounded-md border border-dashed border-primary/40 bg-primary/5 px-2.5 py-1 text-xs font-semibold text-primary hover:bg-primary/10 hover:border-primary/60 active:scale-95 transition-all duration-150 shrink-0" > New sprint @@ -502,7 +502,7 @@ export function ListGroup({ )} {/* Task count / field sum badge */} - + {fieldSum && fieldSum !== "count" ? `${apiFieldSum ?? 0}` : (totalCount ?? tasks.length)} @@ -587,7 +587,7 @@ export function ListGroup({ > {swimDef.key !== "__all" && (
- + {swimDef.label}
@@ -597,7 +597,7 @@ export function ListGroup({ columnHeaders} {laneTasks.length === 0 && !groupPagination?.hasMore ? (
-

No tasks

+

No tasks

) : ( laneTasks.map((task, index) => @@ -624,7 +624,7 @@ export function ListGroup({ {columnHeaders} {orderedTasks.length === 0 && !groupPagination?.hasMore ? (
-

No tasks

+

No tasks

) : ( orderedTasks.map((task, index) => diff --git a/apps/web/src/components/projects/interactions/new-view-popover.tsx b/apps/web/src/components/projects/interactions/new-view-popover.tsx index 12b69548..d7739388 100644 --- a/apps/web/src/components/projects/interactions/new-view-popover.tsx +++ b/apps/web/src/components/projects/interactions/new-view-popover.tsx @@ -68,7 +68,7 @@ export function NewViewPopover({ diff --git a/apps/web/src/components/projects/interactions/rename-view-dialog.tsx b/apps/web/src/components/projects/interactions/rename-view-dialog.tsx index fb7a8189..12805ca6 100644 --- a/apps/web/src/components/projects/interactions/rename-view-dialog.tsx +++ b/apps/web/src/components/projects/interactions/rename-view-dialog.tsx @@ -48,7 +48,7 @@ export function RenameViewDialog({ value={name} onChange={(e) => setName(e.target.value)} onKeyDown={(e) => e.key === "Enter" && submit()} - className="w-full rounded-lg border border-border/30 bg-muted/15 px-3.5 py-2.5 text-[13px] font-medium outline-none focus:border-primary/40 focus:ring-2 focus:ring-primary/15 placeholder:text-muted-foreground/50 transition-all duration-150" + className="w-full rounded-lg border border-border/30 bg-muted/15 px-3.5 py-2.5 text-sm font-medium outline-none focus:border-primary/40 focus:ring-2 focus:ring-primary/15 placeholder:text-muted-foreground/50 transition-all duration-150" /> }> diff --git a/apps/web/src/components/projects/interactions/roadmap-view.tsx b/apps/web/src/components/projects/interactions/roadmap-view.tsx index cd04f234..9c9a9943 100644 --- a/apps/web/src/components/projects/interactions/roadmap-view.tsx +++ b/apps/web/src/components/projects/interactions/roadmap-view.tsx @@ -280,7 +280,7 @@ export function RoadmapView({ type?.color ?? "oklch(var(--muted-foreground) / 0.25)", }} /> - + {task.title}
@@ -308,10 +308,10 @@ export function RoadmapView({ boxShadow: group.color ? `0 0 6px ${group.color}40` : undefined, }} /> - + {group.label} - + {count}
@@ -343,7 +343,7 @@ export function RoadmapView({ style={{ width: LEFT_COL_W }} > - + Task
@@ -362,7 +362,7 @@ export function RoadmapView({ )} style={{ left: m.px, width: m.widthPx }} > - + {m.label}
@@ -385,7 +385,7 @@ export function RoadmapView({ {filtered.length === 0 ? (
-

No tasks to display

+

No tasks to display

) : ( groupDefs.map((group) => { @@ -415,7 +415,7 @@ export function RoadmapView({ type="button" onClick={pagination.onLoadMore} disabled={pagination.isLoadingMore} - className="rounded-lg border border-border/40 px-4 py-1.5 text-[12px] font-medium text-muted-foreground hover:border-primary/50 hover:text-primary transition-all duration-150 disabled:opacity-50" + className="rounded-lg border border-border/40 px-4 py-1.5 text-sm font-medium text-muted-foreground hover:border-primary/50 hover:text-primary transition-all duration-150 disabled:opacity-50" > {pagination.isLoadingMore ? "Loading…" : "View more"} diff --git a/apps/web/src/components/projects/interactions/start-sprint-modal.tsx b/apps/web/src/components/projects/interactions/start-sprint-modal.tsx index be8bea1f..ac90d01b 100644 --- a/apps/web/src/components/projects/interactions/start-sprint-modal.tsx +++ b/apps/web/src/components/projects/interactions/start-sprint-modal.tsx @@ -101,7 +101,7 @@ export function StartSprintModal({ > -

+

Start sprint

diff --git a/apps/web/src/components/projects/interactions/task-card.tsx b/apps/web/src/components/projects/interactions/task-card.tsx index edecc692..a1dc6c02 100644 --- a/apps/web/src/components/projects/interactions/task-card.tsx +++ b/apps/web/src/components/projects/interactions/task-card.tsx @@ -90,13 +90,13 @@ export function TaskCard({ className="flex size-5 items-center justify-center rounded-full transition-all duration-150 hover:ring-2 hover:ring-primary/30" > {assignee ? ( -
+
{(assignee.full_name || assignee.username) .slice(0, 1) .toUpperCase()}
) : ( -
+
)} @@ -107,7 +107,7 @@ export function TaskCard({ >
@@ -150,7 +150,7 @@ export function AddFieldDialog({
@@ -162,13 +162,13 @@ export function AddFieldDialog({ setFieldKey(slugify(e.target.value)); }} placeholder="release_tag" - className="w-full rounded-lg border border-border/30 bg-muted/15 px-3.5 py-2.5 text-[13px] font-mono outline-none focus:border-primary/40 focus:ring-2 focus:ring-primary/15 placeholder:text-muted-foreground/45 transition-all duration-150" + className="w-full rounded-lg border border-border/30 bg-muted/15 px-3.5 py-2.5 text-sm font-mono outline-none focus:border-primary/40 focus:ring-2 focus:ring-primary/15 placeholder:text-muted-foreground/45 transition-all duration-150" />
{/* Field type */}
-

+

Field type

@@ -178,7 +178,7 @@ export function AddFieldDialog({ type="button" onClick={() => setFieldType(ft)} className={cn( - "rounded-lg border px-3 py-1.5 text-[11px] font-semibold transition-all duration-150", + "rounded-lg border px-3 py-1.5 text-xs font-semibold transition-all duration-150", fieldType === ft ? "border-primary/40 bg-primary/10 text-primary shadow-sm shadow-primary/10" : "border-border/25 text-muted-foreground/70 hover:border-border/50 hover:bg-muted/30 hover:text-muted-foreground", @@ -192,7 +192,7 @@ export function AddFieldDialog({ {/* Required toggle */}
- + Required @@ -233,7 +233,7 @@ export function AddFieldDialog({ type="button" disabled={!displayName.trim() || submitting} onClick={handleCreate} - className="rounded-lg bg-primary px-4 py-2 text-[13px] font-semibold text-primary-foreground disabled:opacity-40 hover:bg-primary/90 transition-all duration-150 shadow-sm disabled:shadow-none" + className="rounded-lg bg-primary px-4 py-2 text-sm font-semibold text-primary-foreground disabled:opacity-40 hover:bg-primary/90 transition-all duration-150 shadow-sm disabled:shadow-none" > {submitting ? "Creating…" : "Create field"} diff --git a/apps/web/src/components/projects/interactions/task-detail/add-task-link-modal.tsx b/apps/web/src/components/projects/interactions/task-detail/add-task-link-modal.tsx index 2f40aaf6..005b5df0 100644 --- a/apps/web/src/components/projects/interactions/task-detail/add-task-link-modal.tsx +++ b/apps/web/src/components/projects/interactions/task-detail/add-task-link-modal.tsx @@ -150,7 +150,7 @@ export function AddTaskLinkModal({
-

+

Link task

@@ -165,7 +165,7 @@ export function AddTaskLinkModal({ {/* Link type selector */}
-

+

Relationship

@@ -174,7 +174,7 @@ export function AddTaskLinkModal({ key={opt.value} type="button" onClick={() => setSelectedLinkType(opt.value)} - className={`px-3 py-2 rounded-lg text-left text-[12px] font-medium transition-all duration-150 border ${ + className={`px-3 py-2 rounded-lg text-left text-sm font-medium transition-all duration-150 border ${ selectedLinkType === opt.value ? "bg-primary/10 border-primary/30 text-primary" : "bg-muted/20 border-border/20 text-muted-foreground hover:bg-muted/40 hover:text-foreground" @@ -197,7 +197,7 @@ export function AddTaskLinkModal({ value={query} onChange={(e) => setQuery(e.target.value)} placeholder="Search tasks by title or number..." - className="w-full pl-9 pr-3 py-2.5 rounded-lg border border-border/30 bg-muted/20 text-[13px] placeholder:text-muted-foreground/50 focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/40 transition-all duration-150" + className="w-full pl-9 pr-3 py-2.5 rounded-lg border border-border/30 bg-muted/20 text-sm placeholder:text-muted-foreground/50 focus:outline-none focus:ring-2 focus:ring-primary/20 focus:border-primary/40 transition-all duration-150" />
@@ -205,12 +205,12 @@ export function AddTaskLinkModal({ {/* Task list */}
{loading && ( -
+
Loading tasks…
)} {!loading && filteredTasks.length === 0 && ( -
+
No tasks found
)} @@ -226,10 +226,10 @@ export function AddTaskLinkModal({ onClick={() => handleSelect(task)} className="w-full flex items-center gap-3 px-4 py-3 text-left hover:bg-muted/30 transition-colors duration-100 border-b border-border/10 last:border-0" > - + {prefix} - + {task.title} diff --git a/apps/web/src/components/projects/interactions/task-detail/attachment-item.tsx b/apps/web/src/components/projects/interactions/task-detail/attachment-item.tsx index d8a52368..ffddce32 100644 --- a/apps/web/src/components/projects/interactions/task-detail/attachment-item.tsx +++ b/apps/web/src/components/projects/interactions/task-detail/attachment-item.tsx @@ -67,17 +67,17 @@ export function AttachmentItem({ className="flex size-10 shrink-0 items-center justify-center rounded-lg bg-linear-to-br from-primary/12 to-primary/5 text-primary/80 hover:from-primary/20 hover:to-primary/10 transition-all duration-150" aria-label={`Preview ${attachment.file.file_name}`} > - {ext} + {ext} diff --git a/apps/web/src/components/projects/interactions/task-detail/description-section.tsx b/apps/web/src/components/projects/interactions/task-detail/description-section.tsx index 1d9eafe8..03a959c1 100644 --- a/apps/web/src/components/projects/interactions/task-detail/description-section.tsx +++ b/apps/web/src/components/projects/interactions/task-detail/description-section.tsx @@ -187,14 +187,14 @@ export function DescriptionSection({ return (
-

+

Description

{canEdit && (
{writeWithAIMutation.error && ( -

+

{writeWithAIMutation.error.message}

)} diff --git a/apps/web/src/components/projects/interactions/task-detail/index.tsx b/apps/web/src/components/projects/interactions/task-detail/index.tsx index c4918331..2def834d 100644 --- a/apps/web/src/components/projects/interactions/task-detail/index.tsx +++ b/apps/web/src/components/projects/interactions/task-detail/index.tsx @@ -40,7 +40,7 @@ export type { } from "./types"; const TITLE_CLASSES = - "font-[Syne] text-xl lg:text-[26px] font-bold leading-snug text-foreground tracking-tight w-full"; + "font-[Syne] text-xl lg:text-3xl font-bold leading-snug text-foreground tracking-tight w-full"; export function TaskDetailModal({ task: taskProp, @@ -259,7 +259,7 @@ export function TaskDetailModal({
{taskType && ( )} {status && ( - + -

+

Properties

@@ -456,10 +456,10 @@ export function TaskDetailModal({
-

+

Task not found

-

+

This task may have been deleted or the link is invalid.

diff --git a/apps/web/src/components/projects/interactions/task-detail/primitives.tsx b/apps/web/src/components/projects/interactions/task-detail/primitives.tsx index 9afc1010..35f90298 100644 --- a/apps/web/src/components/projects/interactions/task-detail/primitives.tsx +++ b/apps/web/src/components/projects/interactions/task-detail/primitives.tsx @@ -9,7 +9,7 @@ export function FieldRow({ }) { return (
- + {label}
{children}
@@ -26,17 +26,17 @@ export function FieldValue({ }) { if (empty) { return ( - Empty + Empty ); } return ( - {children} + {children} ); } export function SectionHeading({ children }: { children: React.ReactNode }) { return ( -

+

{children}

diff --git a/apps/web/src/components/projects/interactions/task-detail/properties-panel.tsx b/apps/web/src/components/projects/interactions/task-detail/properties-panel.tsx index b7fedc4a..bf9e3518 100644 --- a/apps/web/src/components/projects/interactions/task-detail/properties-panel.tsx +++ b/apps/web/src/components/projects/interactions/task-detail/properties-panel.tsx @@ -174,7 +174,7 @@ export function PropertiesPanel({
diff --git a/apps/web/src/components/projects/interactions/task-detail/subtasks-section.tsx b/apps/web/src/components/projects/interactions/task-detail/subtasks-section.tsx index 8c603a49..b3912904 100644 --- a/apps/web/src/components/projects/interactions/task-detail/subtasks-section.tsx +++ b/apps/web/src/components/projects/interactions/task-detail/subtasks-section.tsx @@ -65,7 +65,7 @@ export function SubtasksSection({ return (
-

+

Subtasks

@@ -73,7 +73,7 @@ export function SubtasksSection({ @@ -493,9 +489,7 @@ function AssigneeFilterSection({ onChange={() => onChange([])} /> {members.length === 0 ? ( -

- No members -

+

No members

) : ( members.map((m) => { const display = m.full_name || m.username; @@ -507,7 +501,7 @@ function AssigneeFilterSection({ checked={isAll || selectedIds.includes(m.id)} onChange={() => toggle(m.id)} icon={ -
+
{display.slice(0, 1).toUpperCase()}
} @@ -521,7 +515,7 @@ function AssigneeFilterSection({ checked={isAll || selectedIds.includes(UNASSIGNED_FILTER_ID)} onChange={() => toggle(UNASSIGNED_FILTER_ID)} icon={ -
+
} @@ -630,7 +624,7 @@ function TaskTypeFilterSection({ {normalTypes.length > 0 && ( <>
- + Normal types
@@ -670,7 +664,7 @@ function TaskTypeFilterSection({ {systemTypes.length > 0 && ( <>
- + System types
@@ -688,7 +682,7 @@ function TaskTypeFilterSection({ )} {taskTypes.length === 0 && ( -

+

No task types

)} @@ -722,11 +716,11 @@ function CollapsibleFilter({ ) : ( )} - + {label} {badge != null && badge > 0 && ( - + {badge} )} @@ -883,27 +877,27 @@ export function ViewSettingsPanel({
{fieldsOpen ? ( <> -

+

Choose fields

) : ( <> -

+

View settings

{hasSavedFilters && ( @@ -930,7 +924,7 @@ export function ViewSettingsPanel({ @@ -956,7 +950,7 @@ export function ViewSettingsPanel({ -

+

Controls what the agent can read and modify in this project.

@@ -395,7 +395,7 @@ function CreateAgentDialog({
- + Model
@@ -499,7 +499,7 @@ function CreateAgentDialog({ )}
-

+

Stored encrypted — never exposed in API responses.

@@ -528,7 +528,7 @@ function CreateAgentDialog({
{systemPrompt.length > 0 && ( - + {systemPrompt.length} chars )} @@ -658,7 +658,7 @@ function AgentCard({
- + {agent.llm_provider} {canWrite && ( diff --git a/apps/web/src/routes/_authenticated/projects/$projectId/docs/$docId.tsx b/apps/web/src/routes/_authenticated/projects/$projectId/docs/$docId.tsx index 0ba19107..8a5c63b5 100644 --- a/apps/web/src/routes/_authenticated/projects/$projectId/docs/$docId.tsx +++ b/apps/web/src/routes/_authenticated/projects/$projectId/docs/$docId.tsx @@ -118,7 +118,7 @@ function DocEditorPage() { {/* ── Header bar ───────────────────────────────────────────────── */}
{/* Breadcrumb path */} -
+
{folderPath.map((folder) => ( @@ -139,17 +139,13 @@ function DocEditorPage() { {/* Right: save status + panel toggle */}
{dirty && !updateMutation.isPending && ( - - Unsaved - + Unsaved )} {updateMutation.isPending && ( - - Saving… - + Saving… )} {!dirty && updateMutation.isSuccess && !updateMutation.isPending && ( - + Saved diff --git a/apps/web/src/routes/_authenticated/projects/$projectId/interactions/sprints/$sprintId.tsx b/apps/web/src/routes/_authenticated/projects/$projectId/interactions/sprints/$sprintId.tsx index 2de047a5..585538a6 100644 --- a/apps/web/src/routes/_authenticated/projects/$projectId/interactions/sprints/$sprintId.tsx +++ b/apps/web/src/routes/_authenticated/projects/$projectId/interactions/sprints/$sprintId.tsx @@ -134,7 +134,7 @@ function SprintPage() { -

+

Complete sprint

-

+

{incompleteTasks.length > 0 ? `${incompleteTasks.length} incomplete task${incompleteTasks.length === 1 ? "" : "s"} will be moved to:` : "No incomplete tasks remain in this sprint."} @@ -197,7 +197,7 @@ function SprintPage() { />

Product Backlog

-

+

Tasks will be unassigned from any sprint

@@ -224,7 +224,7 @@ function SprintPage() { />

{s.name}

-

+

{s.status}

diff --git a/apps/web/src/routes/_authenticated/projects/$projectId/settings/index.tsx b/apps/web/src/routes/_authenticated/projects/$projectId/settings/index.tsx index 47637241..9f4afc6f 100644 --- a/apps/web/src/routes/_authenticated/projects/$projectId/settings/index.tsx +++ b/apps/web/src/routes/_authenticated/projects/$projectId/settings/index.tsx @@ -150,7 +150,7 @@ function SettingsPage() {
{/* Sidebar nav — hidden on small screens */}
``` @@ -661,25 +670,34 @@ For inline empty states:
- {author} - {timeAgo} + {author} + {timeAgo}
-

{content}

+

{content}

``` ### Comment Input +Comments are rich text (BlockNote `CommentEditor`), not a plain `