diff --git a/public/admin.css b/public/admin.css index 0bbf891..a09fd5e 100644 --- a/public/admin.css +++ b/public/admin.css @@ -418,4 +418,13 @@ body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;b .worker-counts .chip.skipped b{color:var(--muted)} .worker-counts .chip.reverted b{color:var(--accent)} +@keyframes entryEnter{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}} +@keyframes entryPopIn{0%{opacity:0;transform:translateY(26px) scale(.95)}55%{opacity:1;transform:translateY(-5px) scale(1.015)}100%{opacity:1;transform:none}} +@keyframes entryFadeOut{to{opacity:0}} +.entry-enter{animation:entryEnter .4s cubic-bezier(.22,1,.36,1) both} +.entry-appear{animation:entryPopIn .6s cubic-bezier(.22,1,.36,1) both;position:relative} +.entry-appear::before{content:'';position:absolute;inset:-1px;border-radius:inherit;box-shadow:0 0 0 3px rgba(247,201,14,.9),0 10px 30px rgba(247,201,14,.4);animation:entryFadeOut 2.4s ease .35s both;pointer-events:none} +.entry-appear::after{content:'';position:absolute;inset:0;border-radius:inherit;background:linear-gradient(180deg,rgba(247,201,14,.16),transparent 55%);animation:entryFadeOut 2.4s ease .35s both;pointer-events:none} +@media (prefers-reduced-motion: reduce){.entry-enter,.entry-appear,.entry-appear::before,.entry-appear::after{animation:none}} + diff --git a/public/js/journal.js b/public/js/journal.js index 56999e3..ed19784 100644 --- a/public/js/journal.js +++ b/public/js/journal.js @@ -1,4 +1,7 @@ let currentEntries = []; +let seenEntryIds = new Set(); +let highlightNewIds = new Set(); +let highlightClearTimer = null; let editId = null; let editGroups = []; let groupsLoaded = false; @@ -91,7 +94,7 @@ async function detachFile(id) { function gridEntryHTML(e) { const mp = mainPhotoPath(e); return ` -