Compare commits

..

No commits in common. "master" and "main" have entirely different histories.
master ... main

16 changed files with 10 additions and 1430 deletions

@ -1 +0,0 @@
/var/www/html/404.html

9
LICENSE Normal file

@ -0,0 +1,9 @@
MIT License
Copyright (c) 2025 nebula
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

@ -1,3 +1,3 @@
# helixnebula.space # helixnebula.space
this bespoke static site generator creates https://helixnebula.space/ this bespoke static site generate creates https://helixnebula.space/

@ -1,139 +0,0 @@
from sys import argv
import subprocess
from PIL import Image
from jinja2 import Environment, FileSystemLoader
from markdown import markdown
from glob import glob
from json import dump, dumps, load
from os import path
from subprocess import call
import re
numbers = re.compile("[0-9]+")
out_dir = "/var/www/html/"
base_url = "https://helixnebula.space/"
template_environment = Environment(
loader=FileSystemLoader("templates/"))
with open("metadata.json", "r") as f:
metadata = load(f)
for placename in metadata.keys():
read_path = f"{out_dir}{placename}/"
photos = [
path.basename(photo).split('/')[-1] for photo in
glob(read_path + "*")
]
try:
photos.remove("index.html")
except ValueError:
pass
metadata[placename]["count"] = len(photos)
metadata[placename]["photos"] = photos
metadata[placename]["photos"].sort(key=lambda path: int(numbers.search(path).group(0)))
with open(f"{out_dir}photos.json", "w") as f:
dump(metadata, f)
def covers(overwrite=False):
print("running covers")
for placename, info in metadata.items():
read_path = f"{out_dir}{placename}/{info['cover']}"
write_path = f"{out_dir}cover/cover_{info['cover']}"
if not overwrite and path.exists(write_path):
continue
command = ["convert", read_path, "-strip", "-interlace", "Plane", "-gaussian-blur", "0.05",
"-auto-orient", "-resize", "700x525>", "-quality", "80%", write_path]
subprocess.run(command)
def thumbnails(overwrite=False):
print("running thumbnails")
for placename in metadata.keys():
for photo in metadata[placename]["photos"]:
read_path = f"{out_dir}{placename}/{photo}"
write_path = f"{out_dir}thumbnail/thumbnail_{photo}"
if not overwrite and path.exists(write_path):
continue
command = ["convert", read_path, "-strip", "-interlace", "Plane", "-gaussian-blur", "0.05",
"-auto-orient", "-resize", "300x200>", "-quality", "65%", write_path]
subprocess.run(command)
def compressed(overwrite=False):
print("running compressed")
for placename in metadata.keys():
for photo in metadata[placename]["photos"]:
read_path = f"{out_dir}{placename}/{photo}"
write_path = f"{out_dir}compressed/compressed_{photo}"
if not overwrite and path.exists(write_path):
continue
command = ["convert", read_path, "-auto-orient", "-strip", "-resize", "1200>", "-quality", "90%", write_path]
subprocess.run(command)
def render_index():
template = template_environment.get_template("main")
data = {key: value for key, value in sorted(metadata.items(), key=lambda item: item[1]['title'])}
photo_counts = {placename: metadata[placename]["count"] for placename in metadata.keys()}
total_count = 0
posts = [
path.basename(post).split('/')[-1][:-3] for post in
glob("md/*")
]
posts.sort()
for _, info in metadata.items():
total_count = info["count"] + total_count
with open(out_dir + "index.html", "w") as f:
f.write(template.render({
"metadata": data,
"album_count": len(metadata.keys()),
"photo_counts": photo_counts,
"total_count": total_count,
"posts": posts
}))
def render_places():
template = template_environment.get_template("place")
for placename, info in metadata.items():
working_path = out_dir + placename
photos = metadata[placename]["photos"]
photos_json = dumps(photos)
count = len(photos)
widths = []
heights = []
for photo in photos:
photo_path = out_dir + "thumbnail/thumbnail_" + photo
img = Image.open(photo_path)
width, height = img.size
widths.append(width)
heights.append(height)
photo_specs = zip(widths, heights, photos)
try:
with open("md/" + placename + ".md", "r") as f:
md = markdown(f.read())
except FileNotFoundError:
md = "<h1>No story (yet)</h1>"
with open(working_path + "/index.html", "w") as f:
f.write(template.render({
"count": count,
"placename": placename,
"cover": info["cover"],
"info": info,
"markdown": md,
"photos": photo_specs,
"photos_json": photos_json
}))
def copy_files():
call("cp js/* html/js/", shell=True)
call("cp style.css html/style.css", shell=True)
if __name__ == "__main__":
try:
overwrite = "overwrite" in argv
covers(overwrite=overwrite)
thumbnails(overwrite=overwrite)
compressed(overwrite=overwrite)
except KeyboardInterrupt:
exit()
render_index()
render_places()
copy_files()

1
html

@ -1 +0,0 @@
/var/www/html/

@ -1,117 +0,0 @@
// `photos` variable populated by script tag in place page html
viewState = null;
galleryContainer = document.getElementById("galleryContainer");
galleryImage = document.getElementById("galleryImage");
previewLinks = document.getElementsByClassName("previewLink");
headerImage = document.getElementById("headerImage");
touchDragThreshold = 50;
directionDetermined = false;
// null is used when no information is supposed to be available.
// functions set these to useful values during touch events.
touchDragStartX = null;
touchDirection = null;
// changes to style.rotate are necessary because transformed elements
// get stuck in front of the gallery images
function enlargeImage (filename) {
viewState = photos.indexOf(filename);
galleryImage.fullRes = filename;
galleryImage.src = "/compressed/compressed_" + filename;
galleryContainer.style.display = "block";
headerImage.style.rotate = "none";
};
function delGallery () {
galleryContainer.style.display = "none";
galleryImage.src = "";
headerImage.style.rotate = "-3deg";
};
function nextImage () {
viewState++;
if (viewState == previewLinks.length) {
viewState = 0;
};
galleryImage.fullRes = photos[viewState];
galleryImage.src = "/compressed/compressed_" + photos[viewState];
};
function prevImage () {
viewState--;
if (viewState == -1) {
viewState = previewLinks.length - 1;
};
galleryImage.fullRes = photos[viewState];
galleryImage.src = "/compressed/compressed_" + photos[viewState];
};
function imageNewTab () {
window.open(galleryImage.fullRes, "_blank")
};
function keyHandler (event) {
if (event.key == "ArrowRight" | event.key == "Space") {
nextImage();
} else if (event.key == "ArrowLeft") {
prevImage();
} else if (event.key == "Escape" | event.key == "q") {
delGallery();
}
};
function delGalleryHandler (event) {
if (event.target.id == "galleryContainer") {
delGallery();
};
};
function mouseUpHandler (event) {
console.log("mousedown");
if (event.clientX > window.innerWidth / 2) {
nextImage();
} else {
prevImage();
};
};
function onTouchMove (event) {
event.preventDefault();
screenX = event.changedTouches[0].screenX;
if (!directionDetermined && touchDragStartX == null) {
touchDragStartX = screenX;
};
touchDelta = Math.abs(touchDragStartX - screenX);
if (!directionDetermined && (touchDelta > touchDragThreshold)) {
touchDirection = touchDragStartX > screenX;
touchDragStartX = null;
directionDetermined = true;
};
};
function onTouchEnd (event) {
event.preventDefault();
// poorly phrased, but this must reset state to default
directionDetermined = false;
touchDragStartX = null;
if (touchDirection == null) {
return;
};
if (touchDirection) {
nextImage();
} else {
prevImage();
};
touchDirection = null;
};
document.onkeydown = keyHandler;
document.body.onclick = delGalleryHandler;
galleryImage.addEventListener("mouseup", mouseUpHandler);
galleryImage.addEventListener("touchmove", onTouchMove);
galleryImage.addEventListener("touchend", onTouchEnd);
galleryImage.addEventListener("touchstart", function (event) {
event.preventDefault();
});

@ -1,56 +0,0 @@
# A Peaceful Glimpse Into The Great Basin
This is the Great Basin, a land of contradictions: it's flat and rugged, hot and
cold, forest, marsh, and desert. The valleys, mountains, natural lakes, playas,
salt flats, volcanic activity, and more combine to form a place that, in my
opinion, is indescribably beautiful and fun to explore. It's sparsely populated,
with vast stretches of untrammeled wilderness. Seemingly in the middle of
nowhere, one can find many unpaved roads and trails to explore, however you will
not find very many developed hiking trails outside of the more popular areas. I
have hiked on jeep roads my car wasn't hardy enough to traverse.
A little background on what basin and range topography means goes a long way in
understanding and appreciating the landscapes of Nevada and western Utah. [This
very informative video](https://www.youtube.com/watch?v=Owjt_WJKrBo) helps
illustrate how these lands formed, I highly recommend watching it. [The
Wikipedia page for The Great Basin](https://en.wikipedia.org/wiki/Great_Basin)
is another great place to learn more. Finally, [this page at
birdandhike.com](https://www.birdandhike.com/Areas/BasinRange_Area/_BasinRange_Area.htm)
is honestly a better overview of this place than I can give. But, I did take
some pictures too!
Entering from the east along Mail Summit Road raises you from the valley into
the pinyon/juniper forests of the Seaman mountain range. Following the road will
bring you down into the vast Coal Valley, a dry, sagebrush-laden basin. The
valleys in the monument are pristine, with little variations like hills or
ridges between the mountain ranges. There are 3 such named ranges that make up
the monument, the eastern Seaman range, the western Quinn Canyon range, and the
central Golden Gate range, with Coal Valley to it's east and Garden Valley to
the west. The Quinn Canyon range is the highest, and features snowy caps in my
photos.
Thanks to the [map provided by Bird &
Hike](https://www.birdandhike.com/Hike/BasinRange/Camps-BR/_BR-Camps/_BR_camps.htm),
I found some scenic campsites, and one that was not on this map. My favorite
was the "GV Crags" site, with a cool rock outcropping and a trail that leads up
to the Golden Gate range (however it doesn't go to any high peaks, but does go
high enough to reach the forest)
Drives through the valleys, along the bases of the mountain ranges, and nights
under the stars here are great. It's very peaceful and I saw very very few other
people here. There are a couple of small ranches within the monument's borders,
but they do not intrude on the views or solitude. Of particular note would be
[City by Michael Heizer](http://www.tripleaughtfoundation.org/), which is not
available outside of a scheduled tour, but it is located here.
Also present in the monument are petroglyphs, but ancient rock art kind of gives
me the creeps when I look at it, so I did not explore those areas. The Bird &
Hike website goes into details about those.
This is an area that begs further exploration on my part and I will be returning
when I have the time. I would like to do more hiking, and take more photos in
the forests. My first visits, I did not stray terribly far from my campsites,
and I will do more exploring on foot next time. Enjoy the photos! And don't
forget to check out [the overview on Bird &
Hike](https://www.birdandhike.com/Hike/BasinRange/_B-R_Over/_BasinRange_Over.htm)
if you want to see and learn more.

@ -1,113 +0,0 @@
# The Looney Tunes Badlands
The Bisti is, without a doubt, the single weirdest place I have ever been in
my life. It turned my understanding of how natural formations came to be right
on its metaphorical head. It is so bewildering that it exceeds description,
but I will try anyways.
The BLM-managed Bisti/De-Na-Zin wilderness, as the name implies, has two named
sections. The area these two wilderness areas cover is quite large, and trekking to
the heart of the region and back is probably not feasible in one day. Both are
known for absurd formations and an abundance of exposed petrified wood. It's
extremely dry, and is prone to large amounts of blowing dust in the spring.
The Bisti has no developed hiking trails, nor are you able to follow anyone
else's footprints except on the occasional sandy areas. I found some vague
descriptions online of what direction to try going first, but ended up feeling
like the coolest stuff I found was not there. It is very much a choose your
own path adventure. I didn't take any GPS tracks to share with you.
Admittedly, the view from the parking area is not impressive. None of the
weird stuff is there to see unless you commit to really hiking in. But it's
worth it.
On my first trip, I packed my things for an overnight backpacking adventure,
and set into the wilderness in the early afternoon. The first encounter is a
fairly large "plain" that is surrounded by small hills. Its inviting to look
at, and suggests that one can use it as a little highway into the wilds. I
first headed toward some of those low hills to see what I could find. A
staircase-like arroyo winding through the large mounds was one of my first
observations. The surface of the Bisti, it's flats and it's hills, are mostly
shale. Its like clay, when packed in it is quite hard but other times, like on
hillsides, it will collapse under your step. The hard parts look smooth and
the soft parts are very pitted, almost looking like a thick gravel. This
material seems to erode easily with rainfall, making the arroyos very dramatic
in appearance. This was far from the weirdest thing I would see on this trip,
but I was already pretty enamoured.
The shale came in hues of gray, yellow, red, and black. I'm sure the different
colors are made of different compounds (and shale may not even be the right
term for it), but I'm not a scientist. My first bewilderment of the region is
that there are many mounds, hills of various colors in close proximity. One
could be pitch black, and the one next to it would be vibrant red, and the
space between them would change colors quite abrubtly. The entirety of the
Bisti is not as dull looking as the drive to the parking area may suggest.
The next oddity I observed was an abundance of small caves and tube-like
erosions. The Bisti is filled with pits, crevices, holes, and small caverns.
Most of them are too small to walk in, but I did find a few that I could walk
into. I wonder what formed these. I often found myself looking at things that
were obviously eroded by water, but didn't actually make any sense to me. The
pipe-like formations that went up and down seemed to defy gravity, I was
staring at things wondering what could possess water to do that. It almost
seems like the water was jetted through the ground, like there was a lot of
pressure. There is also an abundance of paths that the water cut straight
through a mass of shale, but these made sense because one could track where
the water flows horizontally. At least *some* things make sense, but a lot of
it simply did not.
Then comes the petrified wood. Its essentially an ancient log that turned into
a rock. There were surely trees here at some point in the past, but the
petrified wood that is here is just casually sitting on the ground as if
someone just plucked them out from someplace else and just set them down
there. It's fascinating and fun to find.
There are some deposits of pristine looking sand, perfectly rippled from the
wind. There are no dunes of it that I found, but the bottom of some bluffs and
hills would have pools of it. It looks soft, I want to run my hands through
it.
Now, the hoodoos. And weird balancing rock formations? A lot of this stuff
looks like clay mushrooms. Some of it looks like big massess of very solid
rock sitting on thin pillars of softer looking material. The colors of the
heads and stems of these formations can be completely different. They look
like little goblins created them. Some are small, and others are sitting
well above the head and into the sky. These multicolored cliffs, rock
deposits, and hoodoos need to be seen to be understood or believed. And also,
flats between the hills with many rocks and boulders interspersed, just
sitting on the ground as if someone arranged them.
I set up camp at the base of a shale hill. The place I decided to sleep was
not quite as extravagent as what I had seen so far or what I would see in the
morning, but it was still inviting and I enjoyed it. I cooked dinner and drank
tea. As the night went on, I noticed that it was completely silent. No sound
of insects or plants blowing in the wind of any kind. Just silence. I really
liked it. I walked out under the moonlight and drank it all in. Silence, a
great view of the night sky (as anywhere away from the cities), and plenty of
room to walk. I had a peaceful day exploring and a peaceful night
appreciating.
In the morning, I took a new route. I found a lot of red stuff. And I do mean
*red*, very vibrantly so. I wound through the hills for a couple miles, not
finding a lot of hoodos but definitely weird caves and tunnels carved by
water. More and more weird stuff here. At this point I was heading back to my
car because i was running out of water. And then I left, not to return for
over a year.
My second trip, I had driven there for hours, only to realize once I was
getting close that the horizons were very hazy from blowing dust. I knew it
would be a bad idea to go out but again, I packed the overnighter bag and set
out into the badlands. It was extremely windy, and dusty, and by the time i
made it a couple miles in, my eyes were irritated. I did find some cool areas
and took some good pictures though.
Eventually I tried to set up camp, but it was a disaster. The intense wind
ripped my tent stakes out of the soft ground, and my food cooker was
collecting lots of dust into my food. I realized this was a lost cause and
packed my things up, trudged directly into the wind for two miles, and left to
go back where I came from. My eyes were filled with dirt, and I'm lucky I
didnt get some sort of eye or respritory infection. I was still happy to see
the Bisti again.
This place is really unique, and I'm glad that I went. It is a place of
extremes, very dry, very dusty, very barren of life, very bizarre.

@ -1,71 +0,0 @@
# Oases in the Desert
Before writing this, I did not know what the plural form for the word "oasis"
was. Apparently it's "oases", which I had never heard before in my life! It's
hard for me to talk about Caballo Lake without also mentioning Elephant Butte
Lake. The two are less than 20 miles apart, and are both dammed resevoirs fed
by the iconic Rio Grande.
There is a cansus-designated place in New Mexico called Caballo, which has a
very small population. But they do have a post office! The name is shared also
by the Caballo Mountains range and Caballo Lake. As a title for this album, it
is used loosely to refer to that whole region.
Caballo Lake State Park is a peaceful place. There are small gardens of cacti
in various spots, with picnicking, fishing, and camping areas with spectacular
views of the Caballo Mountains. In my time spent there, I saw a lot of families
enjoying themselves, fishing, grilling, and chilling out. I was camping on a
rocky shoreline of the lake, and a man was walking with his dog. His dog
excitedly ran over to my campsite to greet me, and his owner followed and we
chatted for a while.
He was an interesting character, telling me stories of him being a
self-described con artist. He likes to sit at intersections in the nearby town
of Truth or Consequences, writing carefully phrased signs for panhandling. He
pointed out to me that he takes great care not to lie. While he may be asking
for money, he does not claim to be homeless or in danger, but he tries to
appeal to folks who do help the homeless. One time, someone gave him money and
said very sternly "this is for your dog, not for you.", and he said that he
listened to that demand. He came back later and gave me a real wooden walking
stick, colored like lapis lazuli. I still have the walking stick, though I
never preferred using it over my trekking poles. It does look quite lovely
though.
I have enjoyed kayaking on the lake. One morning I brewed myself some tea on
the shore and enjoyed it while slowly floating about. I spent a couple days
camping in the same spot, and there was another family nearby on the lake
shore. We never talked, but we were able to see what the other was doing at
camp. They spent a lot of time fishing. After a couple days, I decided to pack
all my backpacking gear onto my kayak so i could cross the lake and camp on the
other side. I found a nice sandy alcove with cottonwood trees, bordered by some
steep bluffs that led out to the desert at the base of the mountains. I enjoyed
a night of solitude, slept in my tent, and returned to the park the next morning.
When I got back, the family I was camping near at the park was concerned that I
had went missing. They asked if I was okay, and if I hadn't showed up earlier,
they would have asked the rangers to find me and see if I was alright. They
didn't expect me to leave like that and thought i got lost or hurt! I told them
I just wanted to camp on the other side, and they understood. They were very
kind and I appreciated that.
When I was hanging out by Truth or Consequences, I found some unpaved roads on
my atlas that led to the east side of the Caballo Mountains, "behind" the lake.
The roads traversed southward along the valley, and then had turnouts that went
west towards the mountain range. I found a cool spot to hang out and do a
little mountain biking. I didn't go all the way to the peaks, but the views
were really nice anyways. You can see the distant Elephant Butte Lake, from a
high vantage point that made it look quite small. Sadly I did not feel like
taking a lot of pictures in this area, but I regret that and want to go back to
do more photography, and then go to the peaks.
The east side of these mountains are where you can find the Jornada del Muerto.
It is a very dry, sometimes red-colored stretch of desert that challenged
Spanish travelers with a waterless 90 mile stretch. Along the highway south of
Engle, I found some access points where I walked the old trail and hiked up to
[Point of Rocks](https://www.nps.gov/articles/000/new-mexico-point-of-rocks.htm).
Here you can also find Spaceport America.
The areas around Truth or Consequences and Caballo have turned into one of my
favorite regions of New Mexico. I have spent a lot of time here enjoying the
Chihuahuan Desert. I feel very welcome and comfortable there and will surely be
back in the future.

@ -1,142 +0,0 @@
# Hell on Wheels & Heaven in the Mountains
Picture this: a sunny, peaceful, and warm June drive into the Great Basin
desert, through valleys and surrounded by mountains, along the loneliest road
in America. Before setting out, I studied my atlas, searching for new access
roads into the wilderness. I drove east, until arriving at a small unpaved two
track leading to the Pancake mountain range. Silly name, I know, and honestly
thats what motivated me to go.
A Kia Soul is a funny vehicle to trek the desert wilderness. Front wheel drive
with road tires gives little traction on unpaved surfaces. I was cautiously
driving down the trail, when I came to a hill. I lost traction before the
peak, forcing me to reverse. In these situations, I always went in for a second
shot at a higher speed. Momentum works wonders to get through steep or sandy
sections.
The trail had small plants growing between where tires had worn the track. I
didn't think anything of it, they looked small and harmless. So I gave it the
gas and made it up the hill. I felt a small thump under the vehicle on my way
up, but honestly I had done worse in the past without any damage. All seemed
well...until I smelled gasoline. I stopped the car, stepped outside and could
smell it strongly. I crouched under the vehicle and saw a steady drip coming
from the fuel tank. Oops...
I had no cell signal, and couldnt call for help. I quickly realized that my
only option was to turn around and beeline to the nearest settlement. The
closest town was Eureka, I didn't know what all was there or if anyone could
help me, but it was my only choice. It was not very close and it took a while
to get there, but the gas leak was slow enough that I made it there with at
least a quarter of a tank left. I was hoping to catch cell signal there so I
could google the nearest mechanic shop, but even the town had no cell service.
I found a gas station on what appeared to be the main street, so I parked and
walked inside. My only hope was to ask the person working behind the counter if
there was anywhere in town to get my car fixed. She knew a guy apparently,
phoned him in and he showed up maybe ten minutes later. He crouched under my
car and told me what I already knew. But he didnt have the gear to fix it. He
needed not only a new gas tank but also a lift for the whole vehicle. He
reccomended a shop in Elko that could help me.
I think that many city folk could not imagine how remote Great Basin
communities can be. Eureka is a town with few services and no cell signal, and
from there to Elko was....over 100 miles, with mostly untamed wilderness
between them. I tanked up at this Eureka gas station and gunned it to the
North. Honestly I was not sure how far I could go before the tank leaked out,
but I didnt really have a choice but to try.
Thankfully the speed limit on state highway 278 was 70 MPH, which did wonders
to make me feel like I was getting there quickly. Along the way, I encountered
a vehicle going below that speed that I was not immediately able to pass. I was
in a rush and i really wanted them out of my way, but it didnt seem like that
big of a deal until I saw the sparks of a cigarette being tossed from the window
to the road. This scared the living crap out of me, because I was leaking fuel
and was about to drive right over that. Thankfully nothing bad happened, and I
was soon able to pass them and continue my...panicked drive.
It took nearly two hours but I made it to Elko with some fuel left. It would
have been great to be able to roll right up to the mechanic and get the process
going the same day, but it was too late in the day and they closed. I went to
Wal-Mart and bought a siphon kit and small gas canister so I could suck the
fuel out of the tank to save it for the morning, but I couldnt get it to work.
I was almost out of fuel but I managed to make it to a gas station where I just
got some fresh fuel to put in the 2.5 gallon can. I then drove out past city
limits and parked in the first spot that I could sleep in the car with. The
smell of gasoline filled the car, so I set up a tent outside and slept there
instead. Fun times!
First thing in the morning I showed up at the shop, after pouring the fuel can
into the now empty tank. Its a wild story to tell someone and they seemed a
bit...surprised at least, but they took the vehicle in and ordered the new tank
(or whatever it is they do at first). My dad found and booked me a hotel room
in Elko, so I plucked my essential gear and clothes out of the car and walked
from the shop to the hotel and checked in. I took a shower and tried to relax
for the evening.
The next day, to pass the time, I went to the [Northeastern Nevada
Museum](https://museumelko.org/). The wildlife exhibit was awesome, but the
settler and mining history section made me feel bad for the environment and for
the natives. They at least had some pretty mineral samples on display. After
that I walked to a mexican bakery and got some sweet treats. I went back to my
hotel room and quite frankly I was bored out of my mind that night. I didn't
want to be in a hotel, I wanted to be back out in the wilds.
The next morning, I walked back to the shop and asked if i could get more
things from my car, which was just sitting there waiting for the part to
arrive. I packed my big overnight bag with my camping essentials and about 4
days worth of food. I then installed a ridesharing app onto my phone and
requested a drive from the shop to the nearby Ruby Mountains. But that didnt
work out...three times, the ride was declined after waiting for like 10 minutes
each. The whole time, I was waiting in the shop, and there were people around
me. Eventually I told them I was trying to pay for a ride but couldnt get one,
and someone from the shop actually offered me a ride! When he was ready, I
grabbed my bag and he drove us all the way down Lamoille Canyon and to a
trailhead. There was no cell signal in the mountains, so we agreed to meet back
at the parking lot at a specific time some days later. And from then I was
entirely on my own.
In Elko, and in the lowlands around it, it was a warm June day, about 90F. When
I stepped out of his car into the mountain air, it was significantly cooler. I
filled my sawyer filter bottle with some cold water from a nearby stream of
snowmelt, and headed up the trail. In contrast to the desert valleys, there
were large trees, green grass, and lots of snow. I navigated the trail and
headed to higher ground.
I met some alpine lakes and passages covered in snow. One of the lakes,
Lamoille Lake, was mostly frozen, even in late June. The higher I hiked, the
more snowy it got. The first snowy passage was actually pretty sketchy for me,
as I did not have waterproof or even warm footwear and the sides of the trail
were steep. My hiking poles were awkward to use with this much snow on the
ground, and I almost slipped downward towards a snowy slope a few times. At the
end of that was land I could more easily traverse, which made a great campsite.
But when I arrived at the segment of trail that is called Liberty Pass, the
snow cover was too much and the trail was steep. I had no snow shoes, I didnt
even bring my crampons, so I had to accept that I couldnt proceed further
without serious problems with my shoes. They kept getting wetter and colder. I
turned around and explored what I could.
In the next days, the high of finding new mountain wilderness wore off, and
depression started setting in. I couldn't talk to anyone because I had no cell
signal, I couldn't hike higher because of my crappy shoes, and I couldn't bail
out because I didn't have my car. Sadness and embarassment from the repair
expenses, and my lack of control over the situation weighed me down. If that
wasnt bad enough, the next day, i broke my backpacking gas stove by carelessly
crossthreading the screw-in connection. I couldnt even cook a warm meal
anymore, and had to ration raw pasta and oatmeal. My protein source
(lentils) were inedible when raw. Things weren't looking great.
Despite the gloom, I still was happier there than I was in that hotel room.
Some cheer returned to me when it began to snow. A cloudy day in the 30F-40F
range, with gray skies and slow falling snow, made for good pictures and
brought back my appreciation for my surroundings. Time passed slowly but
eventually I swung back from the depression.
Eventually it was time for me to hike back to the parking area for my ride. He
showed up at about the right time and the car was fixed. I thanked them
fervently and drove away from Elko feeling simultaneously scarred and happy.
My time in the Ruby Mountains was bittersweet. Beauty abounds here, and water
is plentiful. I would go back in a heartbeat. But I still felt damaged by my
emotions and the moments that I felt stuck there. I hope to return in better
circumstances. And I learned to be more careful when screwing my stoves onto
the fuel canisters...and to not punch holes in my gas tank.

@ -1,33 +0,0 @@
# Autumn Love
My sister and her boyfriend invited me to go on a trip with them to the Smoky
Mountains. This is great, because I hadn't previously planned a hiking trip to
the eastern half of the country, so having someone else pay for a hotel there
so we can go on a hiking trip sounded like a great deal and I am very thankful
I got to go here.
It was a long drive, but it was worth it. We initially arrived in Pigeon Forge
to eat and stay for the night. Quite frankly I did not enjoy Pigeon Forge. I
like to travel to rural areas and escape the crowds, but this town was
basically a huge and very busy theme park. I'm sure many people enjoy this town
but it wasn't really for me. But it wasn't the focus of our trip anyways. We
came to hike, and hike we did, even though the trails were very busy and we had
trouble parking.
The next morning we headed into Smoky Mountains National Park. I don't remember
the names of the trails we went on, but in addition to some extravagant fall
colors, we got to see some lovely rivers and waterfalls. They were fun hikes,
and were uphill enough to give us a workout. My sister's dog had a great time
on these trails too. We hiked a river trail after the first day, and before we
left the state, we also went to see Cherokee Lake.
Cherokee Lake was accessible from a hiking trailhead near a neighborhood. We
traversed a pretty big segment of it's shoreline, and at one point found some
heavily eroded rocks that reminded me of [the Bisti
badlands](https://helixnebula.space/Bisti/). The water levels seemed like they
were much lower than what they used to be.
At one point we drove up to an overlook that had a great view of Gatlinburg. I
don't remember all of the trip because it was quite a long time ago and I never
wrote about it, but I did enjoy it. If I ever go back myself, I intend to stay
a lot longer than we did that time.

@ -1,103 +0,0 @@
# Poor Decisions With Great Views
This was one of my first trip experiences. When I first started making trips
out West, Arizona was the first state I explored. The first time I'd ever gone,
I had a friend in Phoenix who invited me to hang out for about a week. I fell
in love with the scenery long before I even arrived in Phoenix, and in a
relatively short amount of time, I started to return to the state on my own. I
decided to use my existing camping gear (mostly backpacking stuff) and save a
ton of money I would have otherwise spent on lodging. It was these early trips
that I began to experiment with ways to find public land, and sleep comfortably
in my vehicle.
I had acquired and extensively used the Arizona copy of the DeLorme Atlas &
Gazetteers. Scanning the pages, I located Roosevelt Lake, but tucked away,
smaller and seemingly more remote, was Apache Lake. I have always enjoyed
finding less busy, more obscure locations, and I decided that I wanted to check
out this smaller Apache Lake moreso than the larger, more popular Roosevelt
Lake.
## The Roads
Apache Lake is accessible via state route 88, which travels by Tortilla Flat on
the west side and Roosevelt Lake on the east side. The west side is easily
accessible from Apache Junction, however at the time I was visiting, the
stretch of unpaved road that goes from Tortilla Flat to Apache Lake was washed
out and closed. I was forced to enter from the east side, which took me from
the Phoenix metro, through [Superior](https://helixnebula.space/Superior/), and
allll the way to Globe before cutting back north towards the lakes.
Traveling from Globe, I stopped at a general market and gas station, from which
I got breakfast and some maps. The first pictures in this album are from the
dam and bridge at Roosevelt Lake. Turning down 88 from 188 leads you by the
dam, and from there, a long stretch of decent dirt road takes you to Apache
Lake, with lovely views of the Salt River and Superstition Mountains along the
way. More recently than this visit, the road has been paved.
## The Bittersweet
I came to a turnoff leading to a [private resort on the
lake](https://apachelake.com/), and I went downhill to check it out. I went
inside the building and asked about what the place was. I was told I could camp
there, and I was intrigued and wanted to try something new, so I decided to buy
a night. I was kinda broke and it was more money than I expected to spend, but
I was too embarassed to just say no at that point. I didn't really know what I
was getting myself into, but it was certainly going to be interesting.
There was live music, a bar, primitive camping areas, a marina, a hotel, and
all sorts of goodies here. While exploring, I saw that there was a place to
rent a kayak, I was interested until I learned it was quite expensive to rent
it for the day...I had already spent so much just to be there. I felt really
embarassed to say nevermind to the clerk when he said that!
After setting up camp, I decided to check out the bar. I have drank a lot of
alcohol in my days but this was the first time I ever got sociable enough to go
to a bar. I'd always avoided them. I talked up with a lot of people there, many
of them were surprised that I had even heard of Apache Lake as a traveler from
Oklahoma. Even in the early days of my solo travels, I knew how to find obscure
places, apparently.
One dude just started buying me drinks. Shot after drink after shot, I was
really quite drunk. I bought a lot of my own drinks too. I was stumbling around
a bit, and quite frankly acting quite stupid, but what else is drinking for? As
the night went on, I moved outside to watch and listen to the live music. I met
some folks that wanted to take me out on their boat in the morning, since I
didn't have one. We discussed about where to meet in the morning and when.
Eventually I wandered away from the crowd to find some solitude again. I
remember laying down and staring into the night sky for quite a long time. I
was still pretty well intoxicated, and the beauty of the galaxy really
entranced me for a while. Before I went to bed, I took a shower at the marina.
In the morning, I felt hung over, poorly rested, and regretted just about
everything at that point. I spent all the money I had left for my trip on the
campsite and the alcohol i bought at the bar. I tried to find the folks
that wanted me to go boating with them, but it seems they either slept in or
were already gone. I felt really out of place at this resort about now, I was
broke and couldn't pay for anything to eat at the restaraunt, so I packed up my
things and left without telling anyone.
## Car Problems Has Entered the Chat
On my way back out, a light popped onto my dashboard, it was an empty oil pan
indicator. I didn't really know what that meant at the time, and I didn't have
cell service to contact my dad (the car guru in my life) until later. I called
to ask about it when I was back by Roosevelt, and he said that was really
really bad and that by the time that light comes on, theres pretty much no oil
left and that the car should not be run anymore. I certainly didn't have any
motor oil with me, so I had no choice but to get it in Globe.
On this day, we learned that my Kia Soul burned a significant amount of oil on
long drives. Dad taught me how to check the oil levels, and told me what kind
of oil to use. This continued to be a problem for the coming year of travels,
and I had to carry oil with me at all times and treat it almost like a second
gas tank. The rate at which it consumed oil seemed very random, with some long
drives not dropping by much and then a shorter drive leaving it almost empty.
## Farewell
This lake is very beautiful, and I wish I got to experience it without getting
wrapped up into an expensive party. I swore this off as the last time I would
ever blow my money on alcohol at a bar. I have not yet returned to Apache Lake,
but since then [I have visted the superstition mountains
again](https://helixnebula.space/Peralta/).

@ -1,242 +0,0 @@
{
"BasinRange": {
"title": "Basin & Range National Monument",
"state": "Nevada",
"cover": "99.jpg"
},
"Berlin": {
"title": "Berlin Ichthyosaur State Park",
"state": "Nevada",
"cover": "135.jpg"
},
"Bisti": {
"title": "Bisti Badlands",
"state": "New Mexico",
"cover": "19.jpg"
},
"Canyonlands": {
"title": "Canyonlands National Park",
"state": "Utah",
"cover": "20240616141708.jpg"
},
"CratersMoon": {
"title": "Craters of the Moon",
"state": "Idaho",
"cover": "20240701200914.jpg"
},
"GoldButte": {
"title": "Gold Butte National Monument",
"state": "Nevada",
"cover": "20240320115524.jpg"
},
"GreatBasinNP": {
"title": "Great Basin National Park",
"state": "Nevada",
"cover": "20240618111751.jpg"
},
"LunarLake": {
"title": "Lunar Lake & Lunar Crater",
"state": "Nevada",
"cover": "20240619100121.jpg"
},
"Misc": {
"title": "Misc. Uncategorized",
"state": "Many",
"cover": "45.jpg"
},
"Quartzsite": {
"title": "Kofa Wildlife Refuge",
"state": "Arizona",
"cover": "20240318163253.jpg"
},
"Sequoia": {
"title": "Sequoia National Park",
"state": "California",
"cover": "208.jpg"
},
"Tahoe": {
"title": "Lake Tahoe",
"state": "Nevada",
"cover": "20240401121328.jpg"
},
"WalkerLake": {
"title": "Walker Lake",
"state": "Nevada",
"cover": "203.jpg"
},
"Bluewater": {
"title": "Bluewater Lake State Park",
"state": "New Mexico",
"cover": "IMG_9773.JPEG"
},
"Cathedral": {
"title": "Cathedral Gorge State Park",
"state": "Nevada",
"cover": "IMG_1183.JPEG"
},
"Clayton": {
"title": "Clayton Lake & Dinosaur Tracks",
"state": "New Mexico",
"cover": "IMG_0907.JPEG"
},
"Caballo": {
"title": "Caballo",
"state": "New Mexico",
"cover": "IMG_0760.JPEG"
},
"Peralta": {
"title": "Peralta Trail (Weaver's Needle)",
"state": "Arizona",
"cover": "IMG_6990.JPEG"
},
"EchoCanyon": {
"title": "Echo Canyon State Park",
"state": "Nevada",
"cover": "IMG_1201.JPEG"
},
"CityOfRocks": {
"title": "City of Rocks State Park",
"state": "New Mexico",
"cover": "IMG_9191.JPEG"
},
"Diamonds": {
"title": "Diamond Range",
"state": "Nevada",
"cover": "IMG_0623.JPEG"
},
"Rubies": {
"title": "Ruby Mountains",
"state": "Nevada",
"cover": "IMG_0667.JPEG"
},
"ElMalpais": {
"title": "El Malpais National Monument",
"state": "New Mexico",
"cover": "IMG_9669.JPEG"
},
"CibolaGrants": {
"title": "Cibola National Forest Near Grants",
"state": "New Mexico",
"cover": "IMG_9966.JPEG"
},
"CibolaDatil": {
"title": "Cibola National Forest Near Datil",
"state": "New Mexico",
"cover": "IMG_9575.JPEG"
},
"Datil": {
"title": "Datil",
"state": "New Mexico",
"cover": "IMG_6663.JPEG"
},
"Flagstaff": {
"title": "Flagstaff",
"state": "Arizona",
"cover": "IMG_8048.JPEG"
},
"VLA": {
"title": "Very Large Array",
"state": "New Mexico",
"cover": "IMG_6644.JPEG"
},
"Phoenix": {
"title": "Phoenix",
"state": "Arizona",
"cover": "IMG_7879.JPEG"
},
"SaltRiver": {
"title": "Salt River Canyon",
"state": "Arizona",
"cover": "IMG_6709.JPEG"
},
"CoconinoFlagstaff": {
"title": "Coconino National Forest Near Flagstaff",
"state": "Arizona",
"cover": "IMG_8407.JPEG"
},
"WatsonLake": {
"title": "Watson Lake",
"state": "Arizona",
"cover": "IMG_7580.JPEG"
},
"PrescottNF": {
"title": "Prescott National Forest",
"state": "Arizona",
"cover": "IMG_7458.JPEG"
},
"BoyceThompson": {
"title": "Boyce Thompson Arboretum",
"state": "Arizona",
"cover": "1606.JPEG"
},
"ToApacheLake": {
"title": "To Apache Lake",
"state": "Arizona",
"cover": "IMG_1735.JPG"
},
"SonoranSnow": {
"title": "Sonoran Desert Snow Day",
"state": "Arizona",
"cover": "IMG_8764.JPEG"
},
"GoldwaterLakes": {
"title": "Goldwater Lakes",
"state": "Arizona",
"cover": "IMG_7200.JPEG"
},
"Roswell": {
"title": "Roswell & The International UFO Museum",
"state": "New Mexico",
"cover": "IMG_5957.JPEG"
},
"Mogollon": {
"title": "Mogollon, A Ghost Town",
"state": "New Mexico",
"cover": "IMG_5380.JPEG"
},
"ChiNaturePark": {
"title": "Chihuahuan Desert Nature Park",
"state": "New Mexico",
"cover": "IMG_6236.JPEG"
},
"Bumblebee": {
"title": "Bumblebee",
"state": "Arizona",
"cover": "IMG_8535.JPEG"
},
"TontoNF": {
"title": "Tonto National Forest",
"state": "Arizona",
"cover": "IMG_1670.JPG"
},
"Superior": {
"title": "Superior",
"state": "Arizona",
"cover": "IMG_6153.JPEG"
},
"Gila": {
"title": "Gila National Forest",
"state": "New Mexico",
"cover": "IMG_5468.JPEG"
},
"OakFlat": {
"title": "Oak Flat",
"state": "Arizona",
"cover": "IMG_6104.JPEG"
},
"Pushawalla": {
"title": "Pushawalla Palms Trail",
"state": "California",
"cover": "IMG_1424.JPG"
},
"SmokyMountains": {
"title": "Smoky Mountains",
"state": "Tennessee",
"cover": "IMG_5708.JPEG"
},
"TruthOrConsequences": {
"title": "Truth or Consequences",
"state": "New Mexico",
"cover": "IMG_9135.JPEG"
}
}

288
style.css

@ -1,288 +0,0 @@
body {
margin: 0px;
padding: 0px;
font-family: sans-serif;
background-color: #B3C8CF;
}
.mainHeader {
background-image: url("/compressed/compressed_199.jpg");
background-repeat: none;
background-size: cover;
background-position: center center;
height: 7em;
border-bottom: 2px solid #000;
}
.title {
margin: 0px;
padding: 0px;
color: white;
text-shadow: 3px 3px black;
text-align: center;
font-size: 3em;
padding-top: 0.8em;
font-family: monospace;
}
h1, h3 {
text-align: center;
}
/* in-album image browser */
.galleryContainer {
display: none;
background-color: rgba(0, 0, 0 , 0.8);
width: 100%;
height: 100%;
position: fixed;
margin: 0px;
padding: 0px;
}
.galleryImage {
display: block;
max-width: 100%;
max-height: 90%;
margin-left: auto;
margin-right: auto;
}
.toolbar {
padding: 6px;
text-align: center;
}
.toolbar > button {
color: white;
background-color: #222;
border: 2px solid #B3C8CF;
border-radius: 4px;
}
/* in-album page */
.hint {
text-align: center;
}
.locationDisplay {
margin-top: 1em;
border-left: 0.2em solid black;
padding-left: 1em;
}
.locationTitle {
display: block;
font-size: 2em;
/* color: white;
text-shadow: 2px 2px black; */
}
.locationState {
display: block;
font-size: 1.5em;
margin-left: 1em;
}
.postBody {
color: #000;
font-size: 125%;
max-width: 1200px;
margin: auto;
}
p > a, p > a:visited {
color: #50593a;
}
p > a:hover {
color: #6f3763;
}
.allphotos > a {
text-decoration: none;
}
.headerImageContainer {
margin: auto;
}
.headerImage {
margin: 1em;
border-radius: 1em;
max-width: 500px;
rotate: -3deg;
box-shadow: 4px 4px 10px black;
}
.indexlink, .indexlink:visited {
font-size: 1.3em;
color: #007b88;
}
.indexlink:hover {
color: white
}
.photoCount {
text-align: center;
}
/* index photos */
@keyframes scaleUp {
from {transform: scale(1);}
to {transform: scale(1.025);}
}
.tocText {
font-size: 1.3em;
text-decoration: underline;
}
.tocText:hover {
text-decoration: none;
}
.tocLink, .tocLink:visited {
font-size: 1em;
color: #007b88;
line-height: 2.6ex;
margin-left: 1em;
}
.tocLink:hover, .placeLink:hover {
color: #ffffff;
text-shadow: 1px 1px 1px #262219, 0 0 0.125em black;
}
.photolinks {
text-align: center;
}
.placeLink {
color: #FFF;
font-size: 145%;
text-shadow: 2px 2px #39464a;
text-decoration: underline;
}
.mainImgContainer {
position: relative;
margin: 0.75em;
}
.mainImgContainerTop {
box-sizing: border-box;
text-align: center;
position: absolute;
width: 100%;
top: 0px;
background-color: rgba(15, 15, 15 , 0.7);
border-top-right-radius: 0.5em;
border-top-left-radius: 0.5em;
padding: 0.5em;
}
.mainImgContainerBottom {
box-sizing: border-box;
position: absolute;
bottom: 15px;
left: 10px;
font-size: 125%;
color: white;
background-color: rgba(15, 15, 15 , 0.7);
border-radius: 0.5em;
padding: 0.4em;
}
.photolink > a > .mainImgContainer > img {
border-radius: 0.5em;
width: 100%;
}
.photolink > a > .mainImgContainer:hover {
transform: scale(1.025);
animation-name: scaleUp;
animation-duration: 0.5s;
}
@media only screen and (min-width: 650px) {
.mainBody {
max-width: 110em;
margin-left: auto;
margin-right: auto;
padding: 1em;
}
.mainHeader {
margin: 1em;
border: 2px solid #000;
border-radius: 1em;
}
.photolinks {
display: grid;
grid-template-columns: 50% 50%;
}
.allphotos {
text-align: center;
}
.allphotos > a > .preview {
margin: 0.5rem;
border-radius: 0.5em;
}
}
@media only screen and (min-width: 1400px) {
.photolinks {
grid-template-columns: 33% 33% 33%;
}
.placeLink {
font-size: 145%;
}
}
@media only screen and (max-width: 650px) {
.allphotos {
text-align: center;
}
.preview {
width: 31%;
height: 100%;
vertical-align: middle;
margin-bottom: 0.2em;
border-radius: 0.5em;
}
.placeLink {
font-size: 150%;
}
.mainBody {
margin-left: 1em;
margin-right: 1em;
padding-top: 1em;
}
.galleryImage {
position: relative;
top: 45%;
transform: translateY(-45%);
}
.headerImage {
max-width: 60%;
}
.placeLink {
font-size: 125%;
}
}

@ -1,69 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>nebula's photoblog</title>
<link rel="icon" href="favicon.ico" />
<link rel="stylesheet" href="style.css?1" />
</head>
<body>
<div class="mainHeader">
<p class="title">
i take pictures
</p>
</div>
<div class="mainBody">
<div class="postBody">
<p>
<h1>Exploring America the Beautiful</h1>
This is an extensive collection of photos I have taken while traveling
across the United States. I have spent countless hours dedicated to
enjoying and capturing the natural wonders that surround us. These
photos and trips were made possible by the extensive efforts of
individuals across our nation, including people from state parks,
Bureau of Land Management, United States Forest Service, National Parks
Service, and more. I hope you enjoy these photos as much as I enjoyed
taking them.
</p>
<h3>A collection of {{ total_count }} photos in {{ album_count }} albums.</h3>
<details class="toc">
<summary class="tocText">Table of Contents</summary>
{% for placename, info in metadata.items() %}
<div class="tocEntry">
<a class="tocLink" href="/{{ placename }}/">{{ info['title'] }}, {{ info['state'] }} [{{ info["count"] }}]</a>
</div>
{% endfor %}
</details>
<details class="toc">
<summary class="tocText">Albums With Stories</summary>
{% for placename in posts %}
<div class="tocEntry">
<a class="tocLink" href="/{{ placename }}">{{ metadata[placename]['title'] }}, {{ metadata[placename]['state'] }}</a>
</div>
{% endfor %}
</details>
<p xmlns:cc="http://creativecommons.org/ns#" >This work is licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-SA 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1" alt=""></a></p>
</div>
<br>
<div class="photolinks">
{% for placename, info in metadata.items() %}
<div class="photolink">
<a href="/{{ placename }}/">
<div class="mainImgContainer">
<img class="preview" src="cover/cover_{{ info['cover'] }}">
<div class="mainImgContainerTop">
<span class="placeLink">{{ info["title"] }}</span>
</div>
<div class="mainImgContainerBottom">
<span class="indexPhotoCount">View {{ photo_counts[placename] }} photos</span>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
</div>
</body>
</html>

@ -1,54 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>{{ info['title'] }}</title>
<link rel="icon" href="../favicon.ico" />
</head>
<body>
<link rel="stylesheet" href="../style.css?1" />
<div id="galleryContainer" class="galleryContainer">
<div class="toolbar">
<button onclick="prevImage()">Previous</button>
<button onclick="imageNewTab()">Open Full Size</button>
<button onclick="delGallery()">Exit</button>
<button onclick="nextImage()">Next</button>
</div>
<img id="galleryImage" class="galleryImage">
</div>
<div class="mainBody">
<a class="indexlink" href="../">
Home
</a>
<div class="locationDisplay">
<span class="locationTitle">{{ info['title'] }}</span>
<span class="locationState">{{ info['state'] }}</span>
</div>
<div class="headerImageContainer">
<a target="_blank" href="{{ cover }}", onclick="javascript:enlargeImage('{{ cover }}');return false;">
<img id="headerImage" class="headerImage" src="/cover/cover_{{ cover }}">
</a>
</div>
<div class="postBody">
{{ markdown }}
</div>
<h3 class="photoCount">{{ count }} photos</h3>
<h4 class="hint">Click or tap on images to enlarge them. Arrow keys or swiping with a touch screen scrolls through photos.</h4>
<div class="allphotos">
{% for width, height, photo in photos %}
<a id="{{ photo }}" class="previewLink" onclick="javascript:enlargeImage('{{ photo }}');return false;" href="{{ photo }}" target="_blank">
<img width="{{ width }}" height="{{ height }}" id="{{ photo }}" class="preview" src="/thumbnail/thumbnail_{{ photo }}">
</a>
{% endfor %}
</div>
<p xmlns:cc="http://creativecommons.org/ns#" >This work is licensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">CC BY-NC-SA 4.0<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1" alt=""><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/sa.svg?ref=chooser-v1" alt=""></a></p>
</div>
<script>
photos = JSON.parse('{{ photos_json }}');
</script>
<script src="/js/imgGallery.js"></script>
</body>
</html>