diff --git a/frontend/src/components/NoteCard.vue b/frontend/src/components/NoteCard.vue
index cefdc8c..eacdcf8 100644
--- a/frontend/src/components/NoteCard.vue
+++ b/frontend/src/components/NoteCard.vue
@@ -78,6 +78,19 @@ function goEdit() {
align-items: center;
gap: 0.6rem;
padding: 0.45rem 0.75rem;
+ background: var(--color-bg-card);
+ box-shadow: none;
+ border-radius: 0;
+ border-bottom: 1px solid var(--color-border);
+ transform: none !important;
+}
+.note-card.compact:first-child {
+ border-top: 1px solid var(--color-border);
+}
+.note-card.compact:hover {
+ box-shadow: none;
+ background: rgba(99, 102, 241, 0.04);
+ transform: none;
}
.note-title-compact {
font-size: 0.9rem;
@@ -137,6 +150,9 @@ function goEdit() {
font-size: 0.9rem;
max-height: 7.5em;
overflow: hidden;
+ position: relative;
+ -webkit-mask-image: linear-gradient(to bottom, black 60%, transparent 100%);
+ mask-image: linear-gradient(to bottom, black 60%, transparent 100%);
}
.note-meta {
display: flex;
diff --git a/frontend/src/components/TaskCard.vue b/frontend/src/components/TaskCard.vue
index 9a97798..28176ff 100644
--- a/frontend/src/components/TaskCard.vue
+++ b/frontend/src/components/TaskCard.vue
@@ -59,6 +59,14 @@ function isOverdue(): boolean {
Loading...
+No notes match your filters
@@ -280,10 +287,43 @@ function onOffsetUpdate(offset: number) { padding: 0; } +/* Skeleton loading */ +.note-list-skeleton { + margin-top: 1rem; +} +.skeleton-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); + gap: 0.75rem; +} +.skeleton-card { + height: 140px; + border-radius: var(--radius-md); + background: linear-gradient(90deg, var(--color-bg-secondary) 25%, var(--color-border) 50%, var(--color-bg-secondary) 75%); + background-size: 200% 100%; + animation: skeleton-shimmer 1.4s ease infinite; +} +.skeleton-rows { + display: flex; + flex-direction: column; + gap: 0.3rem; +} +.skeleton-row { + height: 40px; + border-radius: var(--radius-sm); + background: linear-gradient(90deg, var(--color-bg-secondary) 25%, var(--color-border) 50%, var(--color-bg-secondary) 75%); + background-size: 200% 100%; + animation: skeleton-shimmer 1.4s ease infinite; +} +@keyframes skeleton-shimmer { + 0% { background-position: 200% 0; } + 100% { background-position: -200% 0; } +} + /* Grid layout */ .cards-grid { display: grid; - grid-template-columns: repeat(3, 1fr); + grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 0.75rem; margin-top: 1rem; } diff --git a/frontend/src/views/TasksListView.vue b/frontend/src/views/TasksListView.vue index 0f4a1b8..762b0eb 100644 --- a/frontend/src/views/TasksListView.vue +++ b/frontend/src/views/TasksListView.vue @@ -345,11 +345,16 @@ function toggleGroup(key: string) { } .btn-new { padding: 0.45rem 1rem; - background: var(--color-primary); + background: linear-gradient(135deg, #6366f1, #4f46e5); color: #fff; border-radius: var(--radius-sm); text-decoration: none; font-size: 0.9rem; + box-shadow: 0 1px 6px rgba(99, 102, 241, 0.25); +} +.btn-new:hover { + box-shadow: 0 3px 12px rgba(99, 102, 241, 0.45); + filter: brightness(1.08); } .controls { display: flex;