diff --git a/public/app.js b/public/app.js index 135413a..a97c32d 100644 --- a/public/app.js +++ b/public/app.js @@ -740,33 +740,33 @@ function createLinkCard(link) { ${escapeHtml(link.url)} -
+ diff --git a/public/styles.css b/public/styles.css index f00caea..3accae8 100644 --- a/public/styles.css +++ b/public/styles.css @@ -744,8 +744,7 @@ body { } .links-container.layout-masonry .link-footer { - margin-top: auto; - padding-top: 0.75rem; + padding: 0.75rem 1.25rem; } .links-container.layout-masonry .empty-state { @@ -764,7 +763,9 @@ body { } .links-container.layout-list .link-card { - flex-direction: row; + display: grid; + grid-template-columns: 100px 1fr; + grid-template-rows: 1fr auto; border-radius: 10px; padding: 0; } @@ -772,13 +773,17 @@ body { .links-container.layout-list .link-image { width: 100px; height: 100px; - flex-shrink: 0; + grid-column: 1; + grid-row: 1; border-radius: 0; } .links-container.layout-list .link-content { padding: 0.75rem 1rem; - flex: 1; + grid-column: 2; + grid-row: 1; + display: flex; + flex-direction: column; } .links-container.layout-list .link-title { @@ -800,8 +805,11 @@ body { } .links-container.layout-list .link-footer { - padding-top: 0.5rem; + padding: 0.75rem 1rem; border-top: 1px solid var(--border); + grid-column: 1 / -1; + grid-row: 2; + width: 100%; } .links-container.layout-list .link-date { @@ -872,6 +880,10 @@ body { flex-direction: column; } +.link-card .link-footer { + padding: 1rem 1.5rem; +} + .link-title { font-size: 1.25rem; font-weight: 600; @@ -914,7 +926,6 @@ body { display: flex; justify-content: space-between; align-items: center; - padding-top: 1rem; border-top: 1px solid var(--border); } @@ -1080,27 +1091,43 @@ body { } .title-icon { - font-size: 1.25rem; + width: 44px; + height: 44px; } .header-right { flex-wrap: wrap; + gap: 0.75rem; } /* Remove focus outline and active state persistence on mobile nav buttons */ .search-toggle-btn, .add-link-toggle-btn, .lists-toggle-btn, - .layout-toggle-btn { + .layout-toggle-btn, + .login-toggle-btn { -webkit-tap-highlight-color: transparent; -webkit-touch-callout: none; touch-action: manipulation; + width: 44px; + height: 44px; + padding: 0.625rem; + } + + .search-toggle-btn svg, + .add-link-toggle-btn svg, + .lists-toggle-btn svg, + .layout-toggle-btn svg, + .login-toggle-btn svg { + width: 22px; + height: 22px; } .search-toggle-btn:focus, .add-link-toggle-btn:focus, .lists-toggle-btn:focus, - .layout-toggle-btn:focus { + .layout-toggle-btn:focus, + .login-toggle-btn:focus { outline: none; } @@ -1108,7 +1135,8 @@ body { .search-toggle-btn:active:not(.active), .add-link-toggle-btn:active:not(.active), .lists-toggle-btn:active:not(.active), - .layout-toggle-btn:active:not(.active) { + .layout-toggle-btn:active:not(.active), + .login-toggle-btn:active:not(.active) { background: transparent !important; border-color: var(--border) !important; color: var(--text-secondary) !important; @@ -1118,7 +1146,8 @@ body { .search-toggle-btn:not(.active), .add-link-toggle-btn:not(.active), .lists-toggle-btn:not(.active), - .layout-toggle-btn:not(.active) { + .layout-toggle-btn:not(.active), + .login-toggle-btn:not(.active) { background: transparent !important; border-color: var(--border) !important; color: var(--text-secondary) !important; @@ -1137,14 +1166,43 @@ body { } .user-info { - padding: 0.5rem; + padding: 0; gap: 0; + min-height: 44px; + width: 44px; + height: 44px; + display: flex; + align-items: center; + justify-content: center; + } + + .logout-btn { + width: 44px; + height: 44px; + padding: 0.625rem; + margin: 0; + } + + .logout-btn svg { + width: 20px; + height: 20px; } .add-link-toggle-btn { display: flex; } + .lists-toggle-btn { + width: 44px !important; + height: 44px !important; + padding: 0.625rem; + } + + .lists-toggle-btn svg { + width: 22px; + height: 22px; + } + .layout-toggle-wrapper { position: relative; } @@ -1169,14 +1227,34 @@ body { transform: translateY(0); } + .add-link-wrapper .input-wrapper { + height: 52px !important; + padding: 0.75rem 1rem !important; + } + + .add-link-wrapper .input-wrapper #linkInput { + font-size: 1rem; + } + + .add-link-wrapper .input-wrapper .btn-add { + width: 44px !important; + height: 44px !important; + padding: 0.625rem !important; + } + + .add-link-wrapper .input-wrapper .btn-add::after { + font-size: 1.5rem !important; + } + .search-wrapper { width: 100%; margin: 0; - padding: 0.625rem 1rem; + padding: 0.75rem 1rem; display: none; opacity: 0; transform: translateY(-10px); transition: opacity 0.3s ease, transform 0.3s ease; + min-height: 52px; } .search-wrapper.show { @@ -1185,31 +1263,130 @@ body { transform: translateY(0); } - .link-actions { - flex-wrap: wrap; - gap: 0.5rem; - } - - .archive-btn, - .delete-btn { - width: 36px; - height: 36px; + .search-wrapper #searchInput { + font-size: 1rem; } .input-wrapper { flex-wrap: nowrap; + min-height: 48px; + padding: 0.625rem 1rem; + } + + #linkInput { + font-size: 1rem; + padding: 0.625rem 0; } .btn-add { - width: 36px; - height: 36px; - padding: 0.5rem; + width: 44px; + height: 44px; + padding: 0.625rem; flex-shrink: 0; } + .btn-add::after { + font-size: 1.75rem; + } + + .link-actions { + flex-wrap: wrap; + gap: 0.625rem; + } + + .archive-btn, + .delete-btn, + .add-to-list-btn { + width: 44px !important; + height: 44px !important; + padding: 0.625rem; + } + + .archive-btn svg, + .delete-btn svg, + .add-to-list-btn svg { + width: 20px; + height: 20px; + } + + .add-to-list-btn { + width: 44px !important; + height: 44px !important; + padding: 0.625rem; + } + + .add-to-list-btn svg { + width: 20px; + height: 20px; + } + + .edit-lists-btn, + .clear-list-filters-btn { + padding: 0.625rem 1rem; + font-size: 0.9375rem; + min-height: 44px; + } + + .edit-lists-btn svg { + width: 18px; + height: 18px; + } + + .list-filter-chip { + padding: 0.625rem 1rem; + font-size: 0.9375rem; + min-height: 44px; + } + + .archive-toggle-slider { + width: 50px; + height: 28px; + } + + .archive-toggle-slider:before { + height: 22px; + width: 22px; + } + + .archive-toggle-switch input:checked + .archive-toggle-slider:before { + transform: translateX(22px); + } + .links-container { grid-template-columns: 1fr; } + + .close-modal-btn, + .close-overlay-btn { + width: 44px; + height: 44px; + padding: 0.625rem; + } + + .close-modal-btn svg, + .close-overlay-btn svg { + width: 22px; + height: 22px; + } + + .btn-login, + .btn-create-list { + padding: 0.875rem 1.5rem; + font-size: 1rem; + min-height: 48px; + } + + .form-group input { + padding: 0.875rem; + font-size: 1rem; + min-height: 48px; + } + + .create-list-form input { + padding: 0.875rem; + font-size: 1rem; + min-height: 48px; + } } /* Scroll to Top Button */ @@ -1235,6 +1412,20 @@ body { z-index: 999; } +@media (max-width: 768px) { + .scroll-to-top-btn { + width: 56px; + height: 56px; + bottom: 1.5rem; + right: 1.5rem; + } + + .scroll-to-top-btn svg { + width: 28px; + height: 28px; + } +} + .scroll-to-top-btn.show { opacity: 1; visibility: visible; @@ -1258,7 +1449,7 @@ body { @media (max-width: 400px) { .header-right { flex-wrap: nowrap; - gap: 0.5rem; + gap: 0.625rem; } .search-wrapper { @@ -1268,8 +1459,13 @@ body { .scroll-to-top-btn { bottom: 1.5rem; right: 1.5rem; - width: 45px; - height: 45px; + width: 52px; + height: 52px; + } + + .scroll-to-top-btn svg { + width: 26px; + height: 26px; } } @@ -2062,18 +2258,28 @@ body { .public-url-btn, .save-list-btn, .delete-list-btn { - padding: 0.25rem; - min-width: 28px; - width: 28px; - height: 28px; + padding: 0.625rem; + min-width: 44px; + width: 44px; + height: 44px; } .toggle-public-btn svg, .public-url-btn svg, .save-list-btn svg, .delete-list-btn svg { - width: 14px; - height: 14px; + width: 20px; + height: 20px; + } + + .list-item { + padding: 0.75rem; + } + + .list-name-input { + font-size: 1rem; + padding: 0.5rem; + min-height: 44px; } }