diff --git a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/csvdata-browser/csvdata-browser.component.html b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/csvdata-browser/csvdata-browser.component.html
index 3340961..b0fa151 100644
--- a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/csvdata-browser/csvdata-browser.component.html
+++ b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/csvdata-browser/csvdata-browser.component.html
@@ -1,81 +1,114 @@
-
-
-
-
-
-
-
- {{item}}
-
-
- {{item}}
-
-
-
-
-
-
-
- |
-
-
- |
-
-
- |
-
-
-
-
- |
-
- |
- {{ item[col] }} |
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+
+
+
+ |
+
+
+
+
+
+ |
+
+ |
+ {{ item[col] }} |
+
+
+
+
+
+
+
+
-
-
+
+
+
\ No newline at end of file
diff --git a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/csvdata-browser/csvdata-browser.component.scss b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/csvdata-browser/csvdata-browser.component.scss
index e69de29..7976b6e 100644
--- a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/csvdata-browser/csvdata-browser.component.scss
+++ b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/csvdata-browser/csvdata-browser.component.scss
@@ -0,0 +1,65 @@
+:host {
+ display: block;
+ height: 100%;
+}
+
+.data-table-card {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+}
+
+/* Caption rows */
+.table-header {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: var(--space-2);
+ margin-bottom: var(--space-3);
+}
+
+.table-tools {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: var(--space-2);
+}
+
+/* Make the search input behave */
+.table-search {
+ width: min(380px, 100%);
+}
+
+.table-search input {
+ width: 100%;
+}
+
+/* Icon spacing inside our Bootstrap button */
+.table-header .btn i {
+ margin-right: var(--space-1);
+}
+
+/* Footer export row */
+.export-row {
+ width: 100%;
+ display: flex;
+ justify-content: center;
+ padding: var(--space-3);
+}
+
+/* Responsive stacking */
+@media (max-width: 768px) {
+ .table-header,
+ .table-tools {
+ flex-direction: column;
+ align-items: stretch;
+ }
+
+ .table-search {
+ width: 100%;
+ }
+
+ .table-tools .btn {
+ width: 100%;
+ }
+}
diff --git a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer-item/project-file-explorer-item.component.html b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer-item/project-file-explorer-item.component.html
index 97c0ee7..6922a88 100644
--- a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer-item/project-file-explorer-item.component.html
+++ b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer-item/project-file-explorer-item.component.html
@@ -1,15 +1,50 @@
-
-
-
-
+
+
+
+
+
+ {{ timeSince }}
+
-
\ No newline at end of file
+
+
diff --git a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer-item/project-file-explorer-item.component.scss b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer-item/project-file-explorer-item.component.scss
index 6eb0442..1df8a4f 100644
--- a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer-item/project-file-explorer-item.component.scss
+++ b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer-item/project-file-explorer-item.component.scss
@@ -1,6 +1,92 @@
-.list-group-item{
- border-top-right-radius: 0 !important;
- border-top-left-radius: 0 !important;
- border-bottom-right-radius: 0 !important;
- border-bottom-left-radius: 0 !important;
-}
\ No newline at end of file
+.file-item {
+ border: var(--border-w-1) var(--border-style) var(--border-color);
+ border-radius: var(--radius-1);
+ padding: var(--space-3) var(--space-4);
+ background: var(--surface-0);
+
+ transition: background-color var(--motion-fast), border-color var(--motion-fast);
+}
+
+/* Selected state */
+.file-item.is-selected {
+ background: var(--background-color-tertiary);
+ border-color: var(--c-accent-600);
+}
+
+.file-row {
+ width: 100%;
+ display: flex;
+ align-items: center;
+ gap: var(--space-3);
+}
+
+.file-left {
+ display: flex;
+ align-items: center;
+ gap: var(--space-2);
+ flex: 1 1 auto;
+ min-width: 0;
+}
+
+.file-icon {
+ color: var(--c-accent-600);
+ font-size: var(--fs-16);
+ flex: 0 0 auto;
+}
+
+.file-link {
+ cursor: pointer;
+ font-size: var(--fs-16);
+ font-weight: 500;
+
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+
+ color: var(--link-on-light);
+ text-decoration: none;
+}
+
+.file-link:hover {
+ color: var(--link-hover-color);
+ text-decoration: underline;
+}
+
+.file-right {
+ margin-left: auto;
+ display: inline-flex;
+ align-items: center;
+ gap: var(--space-2);
+ flex: 0 0 auto;
+}
+
+.file-meta {
+ font-size: var(--fs-12);
+ opacity: 0.75;
+ color: var(--text-on-light);
+ white-space: nowrap;
+}
+
+.file-item:hover {
+ border-color: var(--c-accent-600);
+}
+
+.file-icon.fa-level-up-alt {
+ color: var(--c-accent-600);
+}
+
+.file-link {
+ cursor: pointer;
+ font-size: var(--fs-16);
+ font-weight: 500;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ color: var(--link-on-light);
+ text-decoration: none;
+}
+
+.file-link:hover {
+ color: var(--link-hover-color);
+ text-decoration: underline;
+}
diff --git a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer.component.html b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer.component.html
index ff8e655..37c8da4 100644
--- a/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer.component.html
+++ b/src/Analysim.Web/ClientApp/src/app/projects/project-file-explorer/project-file-explorer.component.html
@@ -1,116 +1,282 @@
-