@@ -340,6 +341,32 @@ window.addEventListener('DOMContentLoaded', function() {
});
});
+// Persist tile expanded/collapsed state across page refresh via
+// localStorage. Set of expanded serials lives at 'imaging-expanded'.
+(function() {
+ var KEY = 'imaging-expanded';
+ function loadSet() {
+ try { return new Set(JSON.parse(localStorage.getItem(KEY) || '[]')); }
+ catch (e) { return new Set(); }
+ }
+ function saveSet(set) {
+ try { localStorage.setItem(KEY, JSON.stringify(Array.from(set))); }
+ catch (e) {}
+ }
+ window.addEventListener('DOMContentLoaded', function() {
+ var expanded = loadSet();
+ document.querySelectorAll('.imaging-card').forEach(function(card) {
+ var serial = card.getAttribute('data-serial');
+ if (serial && expanded.has(serial)) card.open = true;
+ card.addEventListener('toggle', function() {
+ var s = loadSet();
+ if (card.open) s.add(serial); else s.delete(serial);
+ saveSet(s);
+ });
+ });
+ });
+})();
+
// Client-side filter: hide imaging-card elements whose data-filter doesn't
// match the search query. Live as user types. Pauses auto-reload while
// the input is focused or non-empty so typing isn't interrupted by refresh.