printf "},"
}
END{
- print "],"
- for(i=1;i<=NF;i++)
- {
- printf "\"%s\":[",fields[i]
- for(v in vals[i])
- {
- printf "\"%s\",",v
- }
- printf "],"
- }
+ print "]"
print "}\n"
}
name:loc:sub:date:desc
+20210912_0200:Bethany Beach:Landscape:September 2021:Atlantic Sunrise
+20210912_0241:Assawoman Bay:Landscape:September 2021:Sixty Five Acre Pond
+20210912_0374:Rehoboth Beach:Landscape:September 2021:Derelict Jetty
+20210912_0433:Rehoboth Beach:Fauna:September 2021:Fleeing Piper
+20210912_0448:Rehoboth Beach:Fauna:September 2021:Angry Bird
+20210912_0482:Bethany Beach:Fauna:September 2021:Sodium Lit Power Lines
+20210912_0492:Bethany Beach:Fauna:September 2021:Jupiter at the Shore
+20210908_0017:Petersburg:Landscape:September 2021:Sunny Barn
+20210908_0057:Welton Park:Landscape:September 2021:Potomac River
+20210908_0068:Welton Park:Landscape:September 2021:Tree Skeleton
+20210908_0073:Welton Park:Landscape:September 2021:Stump Canyon
+20210908_0112:Petersburg:Landscape:September 2021:Appalachain Sunset
+20210908_0180:Petersburg:Landscape:September 2021:Cloudy Morning
+20210907_0068:Hudson Trail:Landscape:September 2021:Rising Forest
+20210907_0078:Huckleberry Trail:Flora:September 2021:Pine Branches
+20210907_0115:Huckleberry Trail:Flora:September 2021:Mossy Outcrop
+20210907_0179:Huckleberry Trail:Flora:September 2021:Moss and Quartz
+20210907_0189:Huckleberry Trail:Flora:September 2021:Lone Pine
+20210907_0205:Huckleberry Trail:Flora:September 2021:Multicolor Moss
+20210907_0209:Huckleberry Trail:Flora:September 2021:Pine Bough
+20210907_0219:Huckleberry Trail:Flora:September 2021:Lichen Islands
+20210907_0224:Huckleberry Trail:Flora:September 2021:Coral Moss
+20210814_0154:Harpers Ferry:Landscape:August 2021:Potomac
+20210814_0198:Harpers Ferry:Landscape:August 2021:Green Pool
+20210814_0242:Winchester:Fauna:August 2021:Duck Race
+20210814_0293:Winchester:Fauna:August 2021:What the Duck
+20210808_0071:Patapsco:Flora:August 2021:Moss Ship
+20210808_0088:Patapsco:Flora:August 2021:Branchscape
+20210808_0106:Patapsco:Landscape:August 2021:Tree Reaching
+20210724_0001:Downton Road:Sol:July 2021:Rising Sun
+20210724_0057:Downton Road:Fauna:July 2021:Pigeons Hanging
+20210724_0071:Downton Road:Fauna:July 2021:Rabbits
+20210723_0026:Downton Road:Luna:July 2021:Rising Full
+20210723_0113:Sherwood Gardens:Flora:July 2021:Purple Flower
+20210723_0117:Sherwood Gardens:Sol:July 2021:Clouds
+20210723_0140:Hampden:Sol:July 2021:Clouds
+20210723_0149:Jones Fall Road:Architecture:July 2021:Bridge Understructure
+20210712_0127:Shaw Orchards:Flora:July 2021:Blueberries
+20210712_0132:Downton Road:Felines:July 2021:Misty
+20210712_0154:Patapsco:Flora:July 2021:Upturned Roots
+20210712_0182:Patapsco:Landscape:July 2021:Downed Log
+20210707_0006:South Kingstown:Fauna:July 2021:Joey
+20210707_0087:South Kingstown:Flora:July 2021:Landed Plant
+20210707_0166:Saugatucket Pond:Landscape:July 2021:Bird House
+20210707_0168:Saugatucket Pond:Landscape:July 2021:Lillyscape
+20210707_0281:Beavertail Point:Landscape:July 2021:Rocks
+20210707_0291:Beavertail Point:Landscape:July 2021:Seaweed Slope
+20210707_0302:Beavertail Point:Landscape:July 2021:Crest
+20210707_0358:Beavertail Point:Landscape:July 2021:Draining Rocks
+20210707_0365:Beavertail Point:Landscape:July 2021:Tidal Pool
+20210707_0412:Wickford:Fauna:July 2021:Seagull Lawyer
+20210707_0429:Beavertail Point:Landscape:July 2021:Dawn Shore
+20210707_0438:Beavertail Point:Landscape:July 2021:Crashing Waves
+20210701_0050:Dowton Road:Flora:July 2021:Pine Fruit
+20210629_0011:Patapsco:Flora:June 2021:Logscape
+20210629_0036:Patapsco:Flora:June 2021:Floating Root
+20210628_0002:Downton Road:Luna:June 2021:Rising Waning Gibous
+20210628_0020:Downton Road:Felines:June 2021:Creeper
+20210628_0028:Downton Road:Jove:June 2021:240 Second Transit
+20210627_0092:Patapsco:Landscape:June 2021:Shallow Creek
+20210627_0110:Patapsco:Fauna:June 2021:Dead Cicada
+20210627_0202:Patapsco:Flora:June 2021:Brown Ivy
+20210625_0054:Downton Road:Architecture:June 2021:Front Porch
+20210625_0066:Downton Road:Flora:June 2021:Day Lily Fence
+20210625_0074:Downton Road:Flora:June 2021:Floating Periwinkle
+20210625_0086:Downton Road:Flora:June 2021:Alien Pine
+20210625_0104:Downton Road:Flora:June 2021:Pine Berry Branch
+20210625_0162:Downton Road:Flora:June 2021:Landing Pad
+20210625_0490:Downton Road:Felines:June 2021:Misty
+20210619_0072:Downton Road:Felines:June 2021:Ali Napping
+20210619_0112:Patapsco:Flora:June 2021:Heavy Vines
+20210619_0170:UMBC:Flora:June 2021:Cat Tail
+20210619_0188:UMBC:Flora:June 2021:Floating Flower
+20210619_0204:UMBC:Architecture:June 2021:Arcing Walkway
+20210619_0264:UMBC:Architecture:June 2021:Backlit Planter
+20210619_0288:Federal Hill:Architecture:June 2021:Bunk
+20210619_0312:Federal Hill:Architecture:June 2021:Brick Facade
+20210619_0462:Fell's Point:Architecture:June 2021:City Pier
+20210619_0472:Fell's Point:Architecture:June 2021:Chop House
20210618_0022:Great North Mountain:Fauna:June 2021:Centipede
20210618_0086:Great North Mountain:Flora:June 2021:Moss
20210618_0098:Great North Mountain:Flora:June 2021:Dripping Flower
20210618_0471:White Rock Cliff:Landscape:June 2021:Backlit Trunk
20210618_0477:White Rock Cliff:Flora:June 2021:Pine Cone Trio
20210618_0508:White Rock Cliff:Flora:June 2021:Cliff Flowers
-20210619_0072:Downton Road:Felines:June 2021:Ali Napping
-20210619_0112:Patapsco:Flora:June 2021:Heavy Vines
-20210619_0170:UMBC:Flora:June 2021:Cat Tail
-20210619_0188:UMBC:Flora:June 2021:Floating Flower
-20210619_0204:UMBC:Architecture:June 2021:Arcing Walkway
-20210619_0264:UMBC:Architecture:June 2021:Backlit Planter
-20210619_0288:Federal Hill:Architecture:June 2021:Bunk
-20210619_0312:Federal Hill:Architecture:June 2021:Brick Facade
-20210619_0462:Fell's Point:Architecture:June 2021:City Pier
-20210619_0472:Fell's Point:Architecture:June 2021:Chop House
-20210625_0054:Downton Road:Architecture:June 2021:Front Porch
-20210625_0066:Downton Road:Flora:June 2021:Day Lily Fence
-20210625_0074:Downton Road:Flora:June 2021:Floating Periwinkle
-20210625_0086:Downton Road:Flora:June 2021:Alien Pine
-20210625_0104:Downton Road:Flora:June 2021:Pine Berry Branch
-20210625_0162:Downton Road:Flora:June 2021:Landing Pad
-20210625_0490:Downton Road:Felines:June 2021:Misty
-20210627_0092:Patapsco:Landscape:June 2021:Shallow Creek
-20210627_0110:Patapsco:Fauna:June 2021:Dead Cicada
-20210627_0202:Patapsco:Flora:June 2021:Brown Ivy
-20210628_0002:Downton Road:Luna:June 2021:Rising Waning Gibous
-20210628_0020:Downton Road:Felines:June 2021:Creeper
-20210628_0028:Downton Road:Jove:June 2021:240 Second Transit
-20210629_0011:Patapsco:Flora:June 2021:Logscape
-20210629_0036:Patapsco:Flora:June 2021:Floating Root
-20210701_0050:Dowton Road:Flora:July 2021:Pine Fruit
-20210707_0006:South Kingstown:Fauna:July 2021:Joey
-20210707_0087:South Kingstown:Flora:July 2021:Landed Plant
-20210707_0166:Saugatucket Pond:Landscape:July 2021:Bird House
-20210707_0168:Saugatucket Pond:Landscape:July 2021:Lillyscape
-20210707_0281:Beavertail Point:Landscape:July 2021:Rocks
-20210707_0291:Beavertail Point:Landscape:July 2021:Seaweed Slope
-20210707_0302:Beavertail Point:Landscape:July 2021:Crest
-20210707_0358:Beavertail Point:Landscape:July 2021:Draining Rocks
-20210707_0365:Beavertail Point:Landscape:July 2021:Tidal Pool
-20210707_0412:Wickford:Fauna:July 2021:Seagull Lawyer
-20210707_0429:Beavertail Point:Landscape:July 2021:Dawn Shore
-20210707_0438:Beavertail Point:Landscape:July 2021:Crashing Waves
-20210712_0127:Shaw Orchards:Flora:July 2021:Blueberries
-20210712_0132:Downton Road:Felines:July 2021:Misty
-20210712_0154:Patapsco:Flora:July 2021:Upturned Roots
-20210712_0182:Patapsco:Landscape:July 2021:Downed Log
-20210723_0026:Downton Road:Luna:July 2021:Rising Full
-20210723_0113:Sherwood Gardens:Flora:July 2021:Purple Flower
-20210723_0117:Sherwood Gardens:Sol:July 2021:Clouds
-20210723_0140:Hampden:Sol:July 2021:Clouds
-20210723_0149:Jones Fall Road:Architecture:July 2021:Bridge Understructure
-20210724_0001:Downton Road:Sol:July 2021:Rising Sun
-20210724_0057:Downton Road:Fauna:July 2021:Pigeons Hanging
-20210724_0071:Downton Road:Fauna:July 2021:Rabbits
-20210808_0071:Patapsco:Flora:August 2021:Moss Ship
-20210808_0088:Patapsco:Flora:August 2021:Branchscape
-20210808_0106:Patapsco:Landscape:August 2021:Tree Reaching
-20210814_0154:Harpers Ferry:Landscape:August 2021:Potomac
-20210814_0198:Harpers Ferry:Landscape:August 2021:Green Pool
-20210814_0242:Winchester:Fauna:August 2021:Duck Race
-20210814_0293:Winchester:Fauna:August 2021:What the Duck
-20210907_0068:Hudson Trail:Landscape:September 2021:Rising Forest
-20210907_0078:Huckleberry Trail:Flora:September 2021:Pine Branches
-20210907_0115:Huckleberry Trail:Flora:September 2021:Mossy Outcrop
-20210907_0179:Huckleberry Trail:Flora:September 2021:Moss and Quartz
-20210907_0189:Huckleberry Trail:Flora:September 2021:Lone Pine
-20210907_0205:Huckleberry Trail:Flora:September 2021:Multicolor Moss
-20210907_0209:Huckleberry Trail:Flora:September 2021:Pine Bough
-20210907_0219:Huckleberry Trail:Flora:September 2021:Lichen Islands
-20210907_0224:Huckleberry Trail:Flora:September 2021:Coral Moss
-20210908_0017:Petersburg:Landscape:September 2021:Sunny Barn
-20210908_0057:Welton Park:Landscape:September 2021:Potomac River
-20210908_0068:Welton Park:Landscape:September 2021:Tree Skeleton
-20210908_0073:Welton Park:Landscape:September 2021:Stump Canyon
-20210908_0112:Petersburg:Landscape:September 2021:Appalachain Sunset
-20210908_0180:Petersburg:Landscape:September 2021:Cloudy Morning
-20210912_0200:Bethany Beach:Landscape:September 2021:Atlantic Sunrise
-20210912_0241:Assawoman Bay:Landscape:September 2021:Sixty Five Acre Pond
-20210912_0374:Rehoboth Beach:Landscape:September 2021:Derelict Jetty
-20210912_0433:Rehoboth Beach:Fauna:September 2021:Fleeing Piper
-20210912_0448:Rehoboth Beach:Fauna:September 2021:Angry Bird
-20210912_0482:Bethany Beach:Fauna:September 2021:Sodium Lit Power Lines
-20210912_0492:Bethany Beach:Fauna:September 2021:Jupiter at the Shore
<!-- util must be first; driver must be last -->
<script type="text/javascript" src="scripts/util.js"></script>
<script type="text/javascript" src="scripts/photo.js"></script>
- <script type="text/javascript" src="scripts/click.js"></script>
<script type="text/javascript" src="scripts/dom.js"></script>
<script type="text/javascript" src="scripts/main.js"></script>
</head>
<body class="parent">
- <div class="grid parent">
- <div id="sidebar">
- <div class="float">
- <div id="logo">
- <a href="/">
- <img src="/media/logo_ng.svg" alt="MadKous">
- </a>
- </div>
- <div class="menu">
- <ul id="methods">
- <li id="loc"><a>Location</a></li>
- <li id="sub"><a>Subject</a></li>
- <li id="date"><a>Date</a></li>
- </ul>
- </div>
+ <div id="photo-layer" class="photo-bg hidden">
+ <div id="photo-left" class="arrow-bar">
+ <div class="center">
+ <a class="arrow-sym arrow-left" href="#"></a>
</div>
</div>
- <div id="thumbs" class="thumb-grid">
- </div>
- <div id="photo-layer" class="photo-bg hidden">
- <div id="photo-left" class="arrow-bar">
- <div class="center">
- <a class="arrow-sym arrow-left" href="#"></a>
- </div>
- </div>
- <div id="photo-frame" class="photo-frame"></div>
- <div id="photo-right" class="arrow-bar">
- <div class="center">
- <a class="arrow-sym arrow-right" href="#"></a>
- </div>
+ <div id="photo-frame" class="photo-frame"></div>
+ <div id="photo-right" class="arrow-bar">
+ <div class="center">
+ <a class="arrow-sym arrow-right" href="#"></a>
</div>
</div>
</div>
- <div>
+ <div id="logo">
+ <a href="/">
+ <img src="/media/logo_ng.svg" alt="MadKous">
+ </a>
+ </div>
</body>
</html>
+++ /dev/null
-var CLICK = (click => {
- click.category = (m, node) => {
- let s = node.innerText;
-
- if (CLASS.is_selected(node)) {
- if(PHOTO.removeFilter(m, s)) {
- UTIL.siblings(node).forEach(e => {
- CLASS.un_deselected(e);
- // CLASS.normal(e);
- });
- } else {
- CLASS.deselected(node);
- }
- CLASS.un_selected(node);
- } else if (CLASS.is_normal(node)) {
- PHOTO.addFilter(m, s, p => p[m] === s);
- UTIL.siblings(node).forEach(e => {
- CLASS.deselected(e);
- // CLASS.un_normal(e);
- });
- CLASS.un_deselected(node);
- CLASS.selected(node);
- } else { // assumed to be 'deselected'
- PHOTO.addFilter(m, s, p => p[m] === s);
- CLASS.un_deselected(node);
- CLASS.selected(node);
- }
- }
-
- click.method = (node) => {
- let m = node.id;
-
- if (CLASS.is_selected(node)) {
- CLASS.hidden(node.children[1]);
- CLASS.un_selected(node);
- // CLASS.normal(node);
- } else {
- CLASS.un_hidden(node.children[1]);
- // CLASS.un_normal(node);
- CLASS.selected(node);
- }
- }
-
- return click;
-
-})(CLICK || {});
dom.photo_frame;
dom.photo_left;
dom.photo_right;
- // pointers to <ul>
- dom.methods;
// thumbnail container
dom.thumb_grid;
- // lists of <li> by method
- dom.meth_list = new Object();
//// dom creation ////
dom.makeThumbnail = (p) => {
return e;
}
- dom.makeCategory = (s, m) => {
- let e = document.createElement("li");
- let d = document.createElement("a");
- d.innerText = s;
- e.appendChild(d);
- e.id = s;
- e.addEventListener("click", () => {
- event.stopPropagation();
- CLICK.category(m, e);
- });
- CLASS.normal(e);
- return e;
- }
-
- dom.makeList = (l) => {
- let c = document.createElement("ul");
- l.forEach(e => c.appendChild(e));
- CLASS.hidden(c);
- return c;
- }
-
- dom.makeMethod = (node, l) => {
- let m = node.id;
- node.appendChild(dom.makeList(l[m]));
- }
-
dom.loadPhoto = (p) => {
UTIL.removeAll(dom.photo_frame);
UTIL.disableScroll();
dom.photo_frame.appendChild(p.img());
CLASS.un_hidden(dom.photo_layer);
}
+
+ dom.addThumbnail = (t) => {
+
+ dom.thumb_grid.appendChild(t);
+ }
+
+ dom.addSection = (n) =>
+ {
+ let e = document.createElement("div");
+ e.innerText = n;
+ CLASS.section(e);
+ document.body.appendChild(e);
+
+ let g = document.createElement("div");
+ CLASS.grid(g);
+ document.body.appendChild(g);
+ dom.thumb_grid = g;
+
+ }
dom.init = () => {
- dom.thumb_grid = document.getElementById("thumbs");
- dom.methods = document.getElementById("methods");
dom.photo_layer = document.getElementById("photo-layer");
dom.photo_frame = document.getElementById("photo-frame");
dom.photo_left = document.getElementById("photo-left");
PHOTO.next();
});
// methods
- Array.from(dom.methods.children)
- .forEach(e => {
- dom.makeMethod(e, dom.meth_list);
- e.addEventListener("click", () => {
- event.stopPropagation();
- CLICK.method(e);
- });
- });
}
return dom;
//// json handling ////
function loadJson(text) {
let json = JSON.parse(text);
+ let section = "";
PHOTO.all = json.photos;
PHOTO.all.forEach((p, i) => {
p.thm = DOM.makeThumbnail(p);
return cel;
};
p.img = get;
- });
- PHOTO.methods.forEach(m => {
- let a = [];
- json[m].forEach(s => a.push(DOM.makeCategory(s, m)));
- DOM.meth_list[m] = a;
+ if (section === p.date) {
+ DOM.addThumbnail(p.thm)
+ } else {
+ section = p.date
+ DOM.addSection(section);
+ }
});
}
} else if (e.keyCode === 39) { // right arrow
if (!CLASS.is_hidden(DOM.photo_layer)) PHOTO.next();
} else {
- console.log(`${e.code} -> ${e.keyCode}`);
+// console.log(`${e.code} -> ${e.keyCode}`);
}
}
(event) => {
let xhttp = new XMLHttpRequest();
xhttp.onload = (() => {
- loadJson(xhttp.responseText);
DOM.init();
- PHOTO.updateThumbs();
+ loadJson(xhttp.responseText);
});
xhttp.open("GET", "data/pictures.json");
xhttp.send();
var PHOTO = (photo => {
- photo.methods = [ "loc", "date", "sub" ];
photo.all;
- photo.shown;
- photo.filter_groups
- = new Map(photo.methods.map(s => [s, new Map([["T", UTIL.top]])]));
-
- photo.updateThumbs = () => {
- UTIL.removeAll(DOM.thumb_grid);
- let pred = p => Array.from(photo.filter_groups.values()).every(
- m => Array.from(m.values()).some(f => f(p)));
- photo.shown = photo.all.filter(pred);
- photo.shown.forEach(p => DOM.thumb_grid.appendChild(p.thm));
- }
-
- photo.addFilter = (m, s, f) => {
- let g = photo.filter_groups.get(m);
- g.delete("T");
- g.set(s, f);
- photo.updateThumbs();
- }
-
- // returns true iff last filter removed
- photo.removeFilter = (m, s) => {
- let g = photo.filter_groups.get(m);
- let r = false;
- if (g.delete(s)) {
- if (g.size === 0) {
- g.set("T", UTIL.top);
- r = true;
- }
- photo.updateThumbs();
- }
- return r;
- }
photo.current = _ => document.querySelector("#photo-frame>img");
photo.hide = _ => {
CLASS.hidden(DOM.photo_layer);
}
photo.next = _ => {
- let i = photo.shown.findIndex(p => p.img() === photo.current());
+ let i = photo.all.findIndex(p => p.img() === photo.current());
if (i === -1)
console.log("error, no current image");
- let j = i + 1 === photo.shown.length ? 0 : i + 1;
- DOM.loadPhoto(photo.shown[j]);
+ let j = i + 1 === photo.all.length ? 0 : i + 1;
+ DOM.loadPhoto(photo.all[j]);
};
photo.prev = _ => {
- let i = photo.shown.findIndex(p => p.img() === photo.current());
+ let i = photo.all.findIndex(p => p.img() === photo.current());
if (i === -1)
console.log("error, no current image");
- let j = i <= 0 ? photo.shown.length - 1 : i - 1;
- DOM.loadPhoto(photo.shown[j]);
+ let j = i <= 0 ? photo.all.length - 1 : i - 1;
+ DOM.loadPhoto(photo.all[j]);
};
return photo;
})(UTIL || {});
var CLASS = (cls => {
- let classes = ["hidden", "selected", "deselected", "normal"];
+ let classes = ["hidden", "grid", "section"];
classes.forEach(c => {
cls[c] = (e) => e.classList.add(`${c}`);
cls[`un_${c}`] = (e) => e.classList.remove(`${c}`);
:root {
/* tan */
- --bg-col: #DDCFB8;
+ --bg-col: #CCBFA8;
--bg-lite-col: #CEC2A6;
--main-bd-col: #EEE2CF;
/* purple */
- --fg-col: #716E81;
+ --fg-col: #615E71;
--fg-emph-col: #5D5E7A;
--fg-mute-col: #716E8144;
--shadow-col: #35343CB3;
background-color: var(--bg-col);
color: var(--fg-col);
margin: 5%;
- font-size: calc(1em + 0.5vw);
+ font-size: calc(2em + 0.5vw);
font-family: sans-serif;
}
-.grid {
- display: grid;
- grid-template-columns: var(--menu-width) 1fr;
- grid-column-gap: 3vw;
- /* background-color: blue; */
-}
-
#sidebar {
/* background-color: blue; */
/* width: auto; */
display: flex;
padding-bottom: 3vh;
justify-content: center;
- align-items: center;
}
#logo > a > img {
- height: calc(7px + 7vw);
+ height: calc(7px + 10vw);
filter: hue-rotate(10deg) saturate(150%) drop-shadow(5px 5px 5px var(--shadow-col));
}
-.menu {
- display: inline grid;
- width: 100%;
-}
-
-.menu > ul {
- cursor: pointer;
- background-color: var(--bg-lite-col);
- width: 100%;
- border: medium inset var(--main-bd-col);
- overflow-y: scroll;
- max-height: 70vh;
- /* box-shadow: 5px 5px 5px inset var(--shadow-col); */
-}
-
-ul {
- list-style-type: none;
- margin: 0;
- padding: 0;
-}
-
-
-li > a {
- font-weight: bold;
- /* text-shadow: 3px 3px 3px var(--shadow-col); */
-}
-
-li {
- padding: 1vw;
-}
-
-li > div:active {
- animation-name: text_press;
- animation-timing-function: ease-in-out;
- animation-duration: 100ms;
- /* text-shadow: 1px 1px 1px var(--shadow-col); */
- /* transform: translate(0px, 1px); */
-}
-
@keyframes text_press {
0% {
}
}
}
-.thumb-grid {
+.section {
+ display: flex;
+ padding-bottom: 3vh;
+ justify-content: center;
+}
+
+.grid {
display: grid;
grid-row-gap: 1vw;
grid-column-gap: 1vw;
/* background-color: green; */
}
-.thumb-grid > div {
+.grid > div {
/* background-color: red; */
display: flex;
height: 160px;
align-items: center;
}
-.thumb-grid > div > img {
+.grid > div > img {
display: block;
max-height: 160px;
max-width: 160px;
box-shadow: 5px 5px 5px var(--shadow-col);
}
-.thumb-grid > div > img:hover {
+.grid > div > img:hover {
animation-name: box_bounce;
animation-timing-function: ease-in-out;
animation-duration: 300ms;
transform: translate(0px, -2.5px);
}
-.thumb-grid > div > img:active {
+.grid > div > img:active {
animation-name: box_press;
animation-timing-function: ease-in-out;
animation-duration: 100ms;
/* these must remain at the bottom */
.parent { height: 95%; }
-.normal { color: var(--fg-col); }
-.deselected { color: var(--fg-mute-col); }
-.selected { color: var(--fg-emph-col); }
.hidden { display: none; }