--- phase: 16-tablo-detail plan: 04 type: execute wave: 4 depends_on: - 16-03 files_modified: - backend/templates/files.templ autonomous: false requirements: - DETAIL-04 must_haves: truths: - "Files section uses .overview-section / .overview-section-heading layout with h3 'Files' on left and Upload file button on right" - "File list uses @ui.Table with Filename / Size / Uploaded / Actions columns" - "Each file row renders as with Download and Delete @ui.IconButton actions" - "FileDeleteConfirmFragment outer element is (matching element type for outerHTML swap)" - "Empty state uses @ui.EmptyState with Title 'No files yet' and Description 'Upload your first file to get started.'" - "All 9 existing file handler tests pass unchanged" - "Browser walkthrough confirms: files tab shows correct table layout, delete confirm swap works, empty state renders correctly" artifacts: - path: backend/templates/files.templ provides: Restyled FilesTabFragment, fileTableHead, fileTableBody, FileListRow as tr, FileDeleteConfirmFragment as tr contains: "@ui.Table(ui.TableProps{" - path: backend/templates/files_templ.go provides: Generated Go from restyled files.templ exports: [] key_links: - from: backend/templates/files.templ FileListRow to: backend/templates/files.templ FileDeleteConfirmFragment via: "hx-target='closest .file-row-zone' hx-swap='outerHTML'" pattern: "class=\"file-row-zone\"" - from: backend/templates/files.templ FilesTabFragment to: backend/internal/web/ui/table.templ @ui.Table via: "@ui.Table(ui.TableProps{Head: fileTableHead(), Body: fileTableBody(...)})" pattern: "ui.Table" --- Restyle the files section (DETAIL-04): replace raw `