national-parks-themes

A colorscheme for each of the 63 US National Parks, organized by state — for Neovim, and for eight terminals and shells. Every palette is drawn from the place itself: Zion's Navajo sandstone and the silt-green Virgin River, Denali's glacier ice and September tundra, the roseate spoonbill that refuses to blend into the Everglades. Each park ships a dark and a light variant.

checks license MIT Neovim 0.10+ 63 parks 126 colorschemes
lazy.nvim
{
  "pjhamera/national-parks-themes",
  lazy = false,
  priority = 1000,
  config = function()
    require("parks").setup()
    vim.cmd.colorscheme("parks-zion")
  end,
}

Alaska

Denali

Glacier ice and tundra under the high one

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1917

Glacier ice and tundra under the high one

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1917

Gates of the Arctic

Brooks Range wilderness with no road to it

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Brooks Range wilderness with no road to it

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Glacier Bay

Tidewater glaciers calving into a bay that was ice

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Tidewater glaciers calving into a bay that was ice

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Katmai

Brooks Falls sockeye and the Valley of Ten Thousand Smokes

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Brooks Falls sockeye and the Valley of Ten Thousand Smokes

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Kenai Fjords

Forty glaciers off one icefield, running to the sea

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Forty glaciers off one icefield, running to the sea

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Kobuk Valley

Arctic sand dunes on the caribou migration route

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Arctic sand dunes on the caribou migration route

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Lake Clark

Turquoise lake between two active volcanoes

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Turquoise lake between two active volcanoes

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Wrangell–St. Elias

Nine of the country's highest peaks, and a red mill town

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

Nine of the country's highest peaks, and a red mill town

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Alaska · est. 1980

American Samoa

National Park of American Samoa

Rainforest to reef, south of the equator

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

American Samoa · est. 1988

Rainforest to reef, south of the equator

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

American Samoa · est. 1988

Arizona

Grand Canyon

A mile down through two billion years of rock

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Arizona · est. 1919

A mile down through two billion years of rock

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Arizona · est. 1919

Petrified Forest

Triassic logs turned to quartz in the Painted Desert

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Arizona · est. 1962

Triassic logs turned to quartz in the Painted Desert

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Arizona · est. 1962

Saguaro

Sonoran giants, two hundred years to a silhouette

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Arizona · est. 1994

Sonoran giants, two hundred years to a silhouette

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Arizona · est. 1994

Arkansas

Hot Springs

Forty-seven thermal springs and a row of bathhouses

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Arkansas · est. 1921

Forty-seven thermal springs and a row of bathhouses

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Arkansas · est. 1921

California

Channel Islands

Kelp forests and island foxes, twenty miles offshore

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1980

Kelp forests and island foxes, twenty miles offshore

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1980

Death Valley

Badwater, borax, and the mineral colors of Artist's Palette

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · Nevada · est. 1994

Badwater, borax, and the mineral colors of Artist's Palette

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · Nevada · est. 1994

Joshua Tree

Yuccas and monzogranite where two deserts meet

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1994

Yuccas and monzogranite where two deserts meet

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1994

Kings Canyon

Granite eight thousand feet deep, sequoias on the rim

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1940

Granite eight thousand feet deep, sequoias on the rim

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1940

Lassen Volcanic

Boiling ground, cinder cones, and every kind of volcano

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1916

Boiling ground, cinder cones, and every kind of volcano

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1916

Pinnacles

Rhyolite spires, talus caves, and condors overhead

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 2013

Rhyolite spires, talus caves, and condors overhead

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 2013

Redwood

The tallest trees on earth, in permanent fog

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1968

The tallest trees on earth, in permanent fog

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1968

Sequoia

The largest trees on earth, under the highest ridge

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1890

The largest trees on earth, under the highest ridge

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1890

Yosemite

Granite, falls, and the valley that started all of it

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1890

Granite, falls, and the valley that started all of it

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

California · est. 1890

Colorado

Black Canyon of the Gunnison

Half an hour of sun a day at the bottom

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Colorado · est. 1999

Half an hour of sun a day at the bottom

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Colorado · est. 1999

Great Sand Dunes

Dune field at the foot of the Sangre de Cristos

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Colorado · est. 2004

Dune field at the foot of the Sangre de Cristos

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Colorado · est. 2004

Mesa Verde

Six hundred cliff dwellings in the canyon walls

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Colorado · est. 1906

Six hundred cliff dwellings in the canyon walls

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Colorado · est. 1906

Rocky Mountain

Alpine tundra, elk, and aspen turning all at once

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Colorado · est. 1915

Alpine tundra, elk, and aspen turning all at once

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Colorado · est. 1915

Florida

Biscayne

Living reef and mangrove shoreline, with Miami in sight

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Florida · est. 1980

Living reef and mangrove shoreline, with Miami in sight

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Florida · est. 1980

Dry Tortugas

Fort Jefferson, seventy miles out, in clear water

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Florida · est. 1992

Fort Jefferson, seventy miles out, in clear water

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Florida · est. 1992

Everglades

Sawgrass, slough water, and the roseate spoonbill

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Florida · est. 1934

Sawgrass, slough water, and the roseate spoonbill

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Florida · est. 1934

Hawaii

Haleakalā

Cinder cones above the clouds, ʻōhiʻa lehua below

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Hawaii · est. 1961

Cinder cones above the clouds, ʻōhiʻa lehua below

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Hawaii · est. 1961

Hawaiʻi Volcanoes

Kīlauea, and ground younger than you are

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Hawaii · est. 1916

Kīlauea, and ground younger than you are

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Hawaii · est. 1916

Indiana

Indiana Dunes

Lake Michigan dunes between the steel mills

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Indiana · est. 2019

Lake Michigan dunes between the steel mills

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Indiana · est. 2019

Kentucky

Mammoth Cave

Four hundred and twenty miles of passage, and counting

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Kentucky · est. 1941

Four hundred and twenty miles of passage, and counting

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Kentucky · est. 1941

Maine

Acadia

Pink granite, spruce-fir, and the North Atlantic

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Maine · est. 1919

Pink granite, spruce-fir, and the North Atlantic

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Maine · est. 1919

Michigan

Isle Royale

Wolves, moose, and Lake Superior all the way around

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Michigan · est. 1940

Wolves, moose, and Lake Superior all the way around

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Michigan · est. 1940

Minnesota

Voyageurs

Border lakes on the fur trade route, under the aurora

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Minnesota · est. 1975

Border lakes on the fur trade route, under the aurora

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Minnesota · est. 1975

Missouri

Gateway Arch

Six hundred and thirty feet of stainless steel

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Missouri · est. 2018

Six hundred and thirty feet of stainless steel

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Missouri · est. 2018

Montana

Glacier

Going-to-the-Sun, and red stones under clear water

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Montana · est. 1910

Going-to-the-Sun, and red stones under clear water

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Montana · est. 1910

Nevada

Great Basin

Five-thousand-year-old pines under the darkest sky

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Nevada · est. 1986

Five-thousand-year-old pines under the darkest sky

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Nevada · est. 1986

New Mexico

Carlsbad Caverns

The Big Room, and the bat flight at dusk

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

New Mexico · est. 1930

The Big Room, and the bat flight at dusk

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

New Mexico · est. 1930

White Sands

Gypsum dunes white enough to read as snow

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

New Mexico · est. 2019

Gypsum dunes white enough to read as snow

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

New Mexico · est. 2019

North Dakota

Theodore Roosevelt

Badlands and bison on the Little Missouri

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

North Dakota · est. 1978

Badlands and bison on the Little Missouri

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

North Dakota · est. 1978

Ohio

Cuyahoga Valley

The crooked river, recovered, between Cleveland and Akron

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Ohio · est. 2000

The crooked river, recovered, between Cleveland and Akron

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Ohio · est. 2000

Oregon

Crater Lake

The deepest lake in the country, and the bluest

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Oregon · est. 1902

The deepest lake in the country, and the bluest

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Oregon · est. 1902

South Carolina

Congaree

Old-growth bottomland, and fireflies flashing in unison

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

South Carolina · est. 2003

Old-growth bottomland, and fireflies flashing in unison

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

South Carolina · est. 2003

South Dakota

Badlands

Banded buttes above the mixed-grass prairie

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

South Dakota · est. 1978

Banded buttes above the mixed-grass prairie

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

South Dakota · est. 1978

Wind Cave

Boxwork calcite below, bison prairie above

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

South Dakota · est. 1903

Boxwork calcite below, bison prairie above

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

South Dakota · est. 1903

Tennessee

Great Smoky Mountains

Blue haze off the forest, ridge behind ridge

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Tennessee · North Carolina · est. 1934

Blue haze off the forest, ridge behind ridge

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Tennessee · North Carolina · est. 1934

Texas

Big Bend

A mountain range inside a desert inside a river bend

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Texas · est. 1944

A mountain range inside a desert inside a river bend

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Texas · est. 1944

Guadalupe Mountains

A fossil reef standing as the highest point in Texas

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Texas · est. 1972

A fossil reef standing as the highest point in Texas

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Texas · est. 1972

Utah

Arches

Two thousand arches out of Entrada sandstone

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1971

Two thousand arches out of Entrada sandstone

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1971

Bryce Canyon

Hoodoos in pink limestone, under a very dark sky

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1928

Hoodoos in pink limestone, under a very dark sky

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1928

Canyonlands

Three districts cut apart by two rivers

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1964

Three districts cut apart by two rivers

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1964

Capitol Reef

The Waterpocket Fold, and orchards that still bear fruit

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1971

The Waterpocket Fold, and orchards that still bear fruit

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1971

Zion

Navajo sandstone walls above the Virgin River

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1919

Navajo sandstone walls above the Virgin River

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Utah · est. 1919

Virgin Islands

Virgin Islands

Trunk Bay, coral gardens, and sugar mill ruins

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Virgin Islands · est. 1956

Trunk Bay, coral gardens, and sugar mill ruins

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Virgin Islands · est. 1956

Virginia

Shenandoah

A hundred and five miles of Skyline Drive on the Blue Ridge

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Virginia · est. 1935

A hundred and five miles of Skyline Drive on the Blue Ridge

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Virginia · est. 1935

Washington

Mount Rainier

An ice-covered volcano over meadows that bloom in a week

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Washington · est. 1899

An ice-covered volcano over meadows that bloom in a week

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Washington · est. 1899

North Cascades

Three hundred glaciers and a turquoise reservoir

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Washington · est. 1968

Three hundred glaciers and a turquoise reservoir

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Washington · est. 1968

Olympic

Rainforest, wild coast, and glaciers in one park

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Washington · est. 1938

Rainforest, wild coast, and glaciers in one park

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Washington · est. 1938

West Virginia

New River Gorge

An old river under the newest park's bridge

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

West Virginia · est. 2020

An old river under the newest park's bridge

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

West Virginia · est. 2020

Wyoming

Grand Teton

Seven thousand feet of granite with no foothills

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Wyoming · est. 1929

Seven thousand feet of granite with no foothills

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Wyoming · est. 1929

Yellowstone

The first park, on top of a supervolcano

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Wyoming · Montana · Idaho · est. 1872

The first park, on top of a supervolcano

-- the vault stays sealed until every key is present
local Vault = {}
 
function Vault.open(keys, depth)
  local ok = #keys >= 3 and depth < 120
  if not ok then
    return nil, "not enough keys"
  end
  return setmetatable({ depth = depth }, Vault)
end

Wyoming · Montana · Idaho · est. 1872