Compare commits
No commits in common. "master" and "gh-pages" have entirely different histories.
File diff suppressed because it is too large
Load Diff
|
@ -1,395 +0,0 @@
|
||||||
--[[
|
|
||||||
Laser Blast
|
|
||||||
|
|
||||||
Inspired by Space Invaders, Astro Smash and a bit of Arkanoid
|
|
||||||
Destroy falling asteroids and collect powerups
|
|
||||||
|
|
||||||
Written by: Nitrogen Fingers
|
|
||||||
]]--
|
|
||||||
|
|
||||||
local version = 1.0
|
|
||||||
local reponame = "Laser Blast"
|
|
||||||
local requiresColour = false
|
|
||||||
if requiresColour then
|
|
||||||
print("This game can only be played on an Advanced Computer.")
|
|
||||||
end
|
|
||||||
|
|
||||||
local function displayNitrosoftTitle()
|
|
||||||
term.clear()
|
|
||||||
local _w,_h = term.getSize()
|
|
||||||
for i=1,math.random(1,10)+10 do
|
|
||||||
term.setCursorPos(math.random(1,_w), math.random(1,_h))
|
|
||||||
term.setTextColour(colours.yellow)
|
|
||||||
term.write(".")
|
|
||||||
end
|
|
||||||
local _t1,_t2 = "nitrosoft", "games"
|
|
||||||
term.setCursorPos(math.floor(_w/2-#_t1), math.floor(_h/2))
|
|
||||||
if term.isColour() then term.setTextColour(colours.blue) end
|
|
||||||
term.write(_t1)
|
|
||||||
term.setCursorPos(math.floor(_w/2-#_t2/2),math.floor(_h/2)+1)
|
|
||||||
term.setTextColour(colours.white)
|
|
||||||
term.write(_t2)
|
|
||||||
term.setCursorPos(math.floor(_w/2-#_t1), math.floor(_h/2)+2)
|
|
||||||
if term.isColour() then term.setTextColour(colours.red) end
|
|
||||||
term.write(string.rep("-",#_t1*2))
|
|
||||||
if term.isColour() then
|
|
||||||
term.setBackgroundColour(colours.green)
|
|
||||||
term.setCursorPos(_w/2+#_t1-4, math.floor(_h/2)-2)
|
|
||||||
term.write(" ")
|
|
||||||
term.setCursorPos(_w/2+#_t1-4, math.floor(_h/2)-1)
|
|
||||||
term.write(" ")
|
|
||||||
term.setBackgroundColour(colours.lime)
|
|
||||||
term.setCursorPos(_w/2+#_t1-3, math.floor(_h/2)-1)
|
|
||||||
term.write(" ")
|
|
||||||
term.setCursorPos(_w/2+#_t1-3, math.floor(_h/2))
|
|
||||||
term.write(" ")
|
|
||||||
end
|
|
||||||
term.setBackgroundColour(colours.black)
|
|
||||||
term.setTextColour(colours.white)
|
|
||||||
term.setCursorPos(1,_h)
|
|
||||||
term.write("v"..version)
|
|
||||||
os.pullEvent("key")
|
|
||||||
end
|
|
||||||
displayNitrosoftTitle()
|
|
||||||
|
|
||||||
local w,h = term.getSize()
|
|
||||||
local plpos = math.floor(w/2)
|
|
||||||
|
|
||||||
--music stuff
|
|
||||||
local minterval = 1
|
|
||||||
local mtimer = 1
|
|
||||||
local left = false
|
|
||||||
|
|
||||||
local level = 1
|
|
||||||
local score = 0
|
|
||||||
local gameover=false
|
|
||||||
local killc = 0
|
|
||||||
|
|
||||||
--x,y,dir
|
|
||||||
local projlist = {}
|
|
||||||
--x,y,intvspeed,dtimer
|
|
||||||
local baddylist = {}
|
|
||||||
local btimer = 0
|
|
||||||
local bintv = 1
|
|
||||||
local utime = 0
|
|
||||||
local bsmp = 6
|
|
||||||
local powerup = 0
|
|
||||||
|
|
||||||
--Landscape and stars
|
|
||||||
local stars = {}
|
|
||||||
for i=1,math.random()*10+10 do
|
|
||||||
stars[i] = { x = math.ceil(math.random()*w),
|
|
||||||
y = math.ceil(math.random() * h-8) }
|
|
||||||
end
|
|
||||||
local landscape = {
|
|
||||||
[6]=" _____________ ";
|
|
||||||
[5]=" _______ / \\_____ ";
|
|
||||||
[4]=" / \\___/____ \\_________";
|
|
||||||
[3]=" / \\ ";
|
|
||||||
[2]=" / \\_________ ";
|
|
||||||
[1]="______/ \\______________";
|
|
||||||
}
|
|
||||||
|
|
||||||
function drawHeader()
|
|
||||||
if term.isColour() then term.setTextColour(colours.white) end
|
|
||||||
term.setCursorPos(5, 1)
|
|
||||||
term.write("Score: "..score)
|
|
||||||
if score~=0 then term.write("00") end
|
|
||||||
local lstr = "Level: "..level
|
|
||||||
term.setCursorPos(w-#lstr-5,1)
|
|
||||||
term.write(lstr)
|
|
||||||
|
|
||||||
if powerup > 0 then
|
|
||||||
local pstr = "POWERUP"
|
|
||||||
term.setCursorPos(w/2 - #pstr/2,1)
|
|
||||||
if term.isColour() then term.setTextColour(colours.cyan) end
|
|
||||||
term.write(pstr)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawPlayer()
|
|
||||||
if term.isColour() then term.setTextColour(colours.white) end
|
|
||||||
term.setCursorPos(plpos-1, h-1)
|
|
||||||
term.write("@@@")
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawProjectile(proj)
|
|
||||||
if term.isColour() then term.setTextColour(colours.red) end
|
|
||||||
term.setCursorPos(proj.x, proj.y)
|
|
||||||
term.write("|")
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawVacance(x,y)
|
|
||||||
term.setCursorPos(x, y)
|
|
||||||
for _,baddy in pairs(baddylist) do
|
|
||||||
if baddy.x == x and baddy.y == y and baddy.dtimer > 0 then
|
|
||||||
drawBaddie(baddy)
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if y >= h-8 and y <= h-3 then
|
|
||||||
if term.isColour() then term.setTextColour(colours.lime) end
|
|
||||||
term.write(string.sub(landscape[h - y - 2], x, x))
|
|
||||||
elseif y < h-8 then
|
|
||||||
for i=1,#stars do
|
|
||||||
if x == stars[i].x and y == stars[i].y then
|
|
||||||
if term.isColour() then term.setTextColour(colours.yellow) end
|
|
||||||
term.write(".")
|
|
||||||
return
|
|
||||||
end
|
|
||||||
end
|
|
||||||
term.write(" ")
|
|
||||||
else
|
|
||||||
term.write(" ")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawBaddie(baddy)
|
|
||||||
term.setCursorPos(baddy.x, baddy.y)
|
|
||||||
if baddy.dtimer==0 then
|
|
||||||
if baddy.pup then
|
|
||||||
if term.isColour() then term.setTextColour(colours.blue) end
|
|
||||||
term.write("P")
|
|
||||||
elseif baddy.frag then
|
|
||||||
if term.isColour() then term.setTextColour(colours.brown) end
|
|
||||||
term.write("*")
|
|
||||||
else
|
|
||||||
if term.isColour() then term.setTextColour(colours.brown) end
|
|
||||||
term.write("O")
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if term.isColour() then term.setTextColour(colours.orange) end
|
|
||||||
term.write("#")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
--This now only needs to be called once. Awesome!
|
|
||||||
function drawWorld()
|
|
||||||
drawLandscape()
|
|
||||||
drawPlayer()
|
|
||||||
drawHeader()
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawLandscape()
|
|
||||||
if term.isColour() then
|
|
||||||
term.setTextColour(colours.yellow)
|
|
||||||
end
|
|
||||||
for i=1,#stars do
|
|
||||||
term.setCursorPos(stars[i].x, stars[i].y)
|
|
||||||
term.write(".")
|
|
||||||
end
|
|
||||||
|
|
||||||
term.setCursorPos(1,h)
|
|
||||||
local land = string.rep("-", w)
|
|
||||||
if term.isColour() then
|
|
||||||
term.setTextColour(colours.green)
|
|
||||||
end
|
|
||||||
term.write(land)
|
|
||||||
if term.isColour() then
|
|
||||||
term.setTextColour(colours.lime)
|
|
||||||
end
|
|
||||||
|
|
||||||
for y,line in ipairs(landscape) do
|
|
||||||
term.setCursorPos(1,h-y-2)
|
|
||||||
term.write(line)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function updateWorld()
|
|
||||||
--The music stuff
|
|
||||||
redstone.setOutput("back", false)
|
|
||||||
mtimer=mtimer-utime
|
|
||||||
if mtimer<=0 then
|
|
||||||
mtimer = minterval
|
|
||||||
if left then
|
|
||||||
redstone.setOutput("left", true)
|
|
||||||
redstone.setOutput("right", false)
|
|
||||||
else
|
|
||||||
redstone.setOutput("left", false)
|
|
||||||
redstone.setOutput("right", true)
|
|
||||||
end
|
|
||||||
left = not left
|
|
||||||
end
|
|
||||||
|
|
||||||
local i=1
|
|
||||||
while i<=#projlist do
|
|
||||||
drawVacance(projlist[i].x, projlist[i].y)
|
|
||||||
projlist[i].y = projlist[i].y+projlist[i].dir
|
|
||||||
if projlist[i].y <= 1 or projlist[i].y > h-1 then
|
|
||||||
table.remove(projlist,i)
|
|
||||||
i=i-1
|
|
||||||
else drawProjectile(projlist[i]) end
|
|
||||||
i=i+1
|
|
||||||
end
|
|
||||||
i=1
|
|
||||||
while i<=#baddylist do
|
|
||||||
local baddy = baddylist[i]
|
|
||||||
baddy.timer=baddy.timer+utime
|
|
||||||
|
|
||||||
if baddy.y==h-1 and math.abs(baddy.x-plpos)<2 then
|
|
||||||
if baddy.pup then
|
|
||||||
powerup = 10
|
|
||||||
drawPlayer()
|
|
||||||
else
|
|
||||||
gameover = true
|
|
||||||
redstone.setOutput("back", true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
j=1
|
|
||||||
while j<=#projlist do
|
|
||||||
local proj = projlist[j]
|
|
||||||
if baddy.x==proj.x and math.abs(baddy.y-proj.y)<2
|
|
||||||
and baddy.dtimer==0 then
|
|
||||||
baddy.dtimer = 0.5
|
|
||||||
drawBaddie(baddy)
|
|
||||||
drawVacance(projlist[j].x, projlist[j].y)
|
|
||||||
table.remove(projlist,j)
|
|
||||||
j=j-1
|
|
||||||
score=score+5
|
|
||||||
redstone.setOutput("back", true)
|
|
||||||
killc=killc+1
|
|
||||||
if killc>5+(level*5) and level<10 then levelUp() end
|
|
||||||
drawHeader()
|
|
||||||
|
|
||||||
--Adds fragments
|
|
||||||
if math.random(1, 5) == 2 and not baddy.frag then
|
|
||||||
table.insert(baddylist, {
|
|
||||||
x = baddy.x-1,
|
|
||||||
y = baddy.y,
|
|
||||||
pup = false,
|
|
||||||
frag = true,
|
|
||||||
timer = 0,
|
|
||||||
dtimer = 0,
|
|
||||||
speed = baddy.speed/2
|
|
||||||
})
|
|
||||||
drawBaddie(baddylist[#baddylist])
|
|
||||||
table.insert(baddylist, {
|
|
||||||
x = baddy.x+1,
|
|
||||||
y = baddy.y,
|
|
||||||
pup = false,
|
|
||||||
frag = true,
|
|
||||||
timer = 0,
|
|
||||||
dtimer = 0,
|
|
||||||
speed = baddy.speed/2
|
|
||||||
})
|
|
||||||
drawBaddie(baddylist[#baddylist])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
j=j+1
|
|
||||||
end
|
|
||||||
|
|
||||||
if baddy.timer>baddy.speed and baddy.dtimer==0 then
|
|
||||||
drawVacance(baddy.x, baddy.y)
|
|
||||||
baddy.y=baddy.y+1
|
|
||||||
if baddy.y==h then
|
|
||||||
table.remove(baddylist,i)
|
|
||||||
i=i-1
|
|
||||||
score=score-1
|
|
||||||
drawHeader()
|
|
||||||
else
|
|
||||||
drawBaddie(baddy)
|
|
||||||
baddy.timer = 0
|
|
||||||
end
|
|
||||||
elseif baddy.dtimer>0 then
|
|
||||||
baddy.dtimer=baddy.dtimer-utime
|
|
||||||
if baddy.dtimer<=0 then
|
|
||||||
drawVacance(baddy.x, baddy.y)
|
|
||||||
table.remove(baddylist,i)
|
|
||||||
i=i-1
|
|
||||||
end
|
|
||||||
end
|
|
||||||
i=i+1
|
|
||||||
end
|
|
||||||
btimer=btimer+utime
|
|
||||||
if btimer > bintv then
|
|
||||||
table.insert(baddylist, {
|
|
||||||
x = math.random(w/4, 3*(w/4)),
|
|
||||||
y = 2,
|
|
||||||
speed = utime*bsmp,
|
|
||||||
timer = 0,
|
|
||||||
dtimer = 0,
|
|
||||||
pup = math.random(1,20)==5,
|
|
||||||
frag = false
|
|
||||||
})
|
|
||||||
drawBaddie(baddylist[#baddylist])
|
|
||||||
btimer=0
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function levelUp()
|
|
||||||
level=level+1
|
|
||||||
bintv=bintv-0.10
|
|
||||||
bsmp=bsmp-0.5
|
|
||||||
killc=0
|
|
||||||
minterval=minterval-0.10
|
|
||||||
end
|
|
||||||
|
|
||||||
function updatePlayer(key)
|
|
||||||
if powerup>0 then
|
|
||||||
powerup = powerup-utime
|
|
||||||
end
|
|
||||||
|
|
||||||
if key==203 and plpos>1 then
|
|
||||||
term.setCursorPos(plpos+1,h-1)
|
|
||||||
term.write(" ")
|
|
||||||
plpos=plpos-1
|
|
||||||
drawPlayer()
|
|
||||||
elseif key==205 and plpos<w then
|
|
||||||
term.setCursorPos(plpos-1,h-1)
|
|
||||||
term.write(" ")
|
|
||||||
plpos=plpos+1
|
|
||||||
drawPlayer()
|
|
||||||
elseif key==57 then
|
|
||||||
if powerup>0 then
|
|
||||||
table.insert(projlist, {
|
|
||||||
dir = -1,
|
|
||||||
x = plpos+1,
|
|
||||||
y = h-2
|
|
||||||
})
|
|
||||||
drawProjectile(projlist[#projlist])
|
|
||||||
table.insert(projlist, {
|
|
||||||
dir = -1,
|
|
||||||
x = plpos-1,
|
|
||||||
y = h-2
|
|
||||||
})
|
|
||||||
drawProjectile(projlist[#projlist])
|
|
||||||
else
|
|
||||||
table.insert(projlist, {
|
|
||||||
dir = -1,
|
|
||||||
x = plpos,
|
|
||||||
y = h-2
|
|
||||||
})
|
|
||||||
drawProjectile(projlist[#projlist])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
term.setBackgroundColour(colours.black)
|
|
||||||
term.clear()
|
|
||||||
drawWorld()
|
|
||||||
local wtimer os.startTimer(utime)
|
|
||||||
while not gameover do
|
|
||||||
local e, v = os.pullEvent()
|
|
||||||
|
|
||||||
if e=="timer" then
|
|
||||||
updateWorld()
|
|
||||||
wtimer = os.startTimer(utime)
|
|
||||||
elseif e=="key" then
|
|
||||||
if v==28 then break end
|
|
||||||
updatePlayer(v)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
term.setCursorPos(plpos-1, h-1)
|
|
||||||
if term.isColour() then term.setTextColour(colours.red) end
|
|
||||||
term.write("###")
|
|
||||||
local go = "Game Over!"
|
|
||||||
term.setCursorPos(w/2 - #go/2, 10)
|
|
||||||
if term.isColour() then term.setTextColour(colours.white) end
|
|
||||||
term.write(go)
|
|
||||||
term.setCursorPos(1,h)
|
|
||||||
sleep(5)
|
|
||||||
redstone.setOutput("back", false)
|
|
||||||
term.clear()
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,254 +0,0 @@
|
||||||
--[[ Skyfall
|
|
||||||
By Nitrogenfingers
|
|
||||||
]]--
|
|
||||||
|
|
||||||
local version = 1
|
|
||||||
local reponame = "Skyfall"
|
|
||||||
local requiresColour = true
|
|
||||||
if requiresColour then
|
|
||||||
print("This game can only be played on an Advanced Computer.")
|
|
||||||
end
|
|
||||||
|
|
||||||
local function displayNitrosoftTitle()
|
|
||||||
sub.clr()
|
|
||||||
local _w,_h = sub.winSize()
|
|
||||||
local _t1,_t2 = "nitrosoft", "games"
|
|
||||||
sub.cursPos(math.floor(_w/2-#_t1), math.floor(_h/2))
|
|
||||||
if term.isColour() then sub.setTxt("blue") end
|
|
||||||
term.write(_t1)
|
|
||||||
sub.cursPos(math.floor(_w/2-#_t2/2),math.floor(_h/2)+1)
|
|
||||||
sub.setTxt("white")
|
|
||||||
term.write(_t2)
|
|
||||||
if term.isColour() then sub.setTxt("red") end
|
|
||||||
sub.cursPos(math.floor(_w/2-#_t1), math.floor(_h/2)+2)
|
|
||||||
term.write(string.rep("-",#_t1*2))
|
|
||||||
if term.isColour() then
|
|
||||||
sub.setBg("green")
|
|
||||||
sub.cursPos(_w/2+#_t1-4, math.floor(_h/2)-2)
|
|
||||||
term.write(" ")
|
|
||||||
sub.cursPos(_w/2+#_t1-4, math.floor(_h/2)-1)
|
|
||||||
term.write(" ")
|
|
||||||
sub.setBg("lime")
|
|
||||||
sub.cursPos(_w/2+#_t1-3, math.floor(_h/2)-1)
|
|
||||||
term.write(" ")
|
|
||||||
sub.cursPos(_w/2+#_t1-3, math.floor(_h/2))
|
|
||||||
term.write(" ")
|
|
||||||
end
|
|
||||||
sub.setBg("black")
|
|
||||||
sub.setTxt("white")
|
|
||||||
sub.cursPos(1,_h)
|
|
||||||
term.write("v"..version)
|
|
||||||
os.pullEvent("key")
|
|
||||||
end
|
|
||||||
displayNitrosoftTitle()
|
|
||||||
|
|
||||||
local w,h = sub.winSize()
|
|
||||||
|
|
||||||
local levelbg = {colours.lightBlue, colours.blue, colours.black}
|
|
||||||
local level = {}
|
|
||||||
local title = {
|
|
||||||
"##### ## # ## ## ##### ### ## ## ";
|
|
||||||
"## ## ## ## ## ## ##### ## ## ";
|
|
||||||
"##### #### ##### ### ## ## ## ## ";
|
|
||||||
" ## ## ## ### ## ##### ### ###";
|
|
||||||
"##### ## # ### ## ## ## ### ###";
|
|
||||||
}
|
|
||||||
|
|
||||||
local bgcol = colours.lightBlue
|
|
||||||
local pcol = colours.red
|
|
||||||
local flakes = {}
|
|
||||||
local px, py = math.floor(w/2), h
|
|
||||||
local pjump = 0
|
|
||||||
local jtimer, jinterval = nil,0.06
|
|
||||||
local gameOver = false
|
|
||||||
local levelnum = 1
|
|
||||||
|
|
||||||
local gintdef = 0.3
|
|
||||||
local gtimer, ginterval = nil,gintdef
|
|
||||||
|
|
||||||
local function makeLevel()
|
|
||||||
for y = 1, h+1 do
|
|
||||||
level[y] = {}
|
|
||||||
end
|
|
||||||
for x = 1, w do
|
|
||||||
level[h+1][x] = "#"
|
|
||||||
end
|
|
||||||
flakes = {}
|
|
||||||
end
|
|
||||||
|
|
||||||
local function updateTile(x,y)
|
|
||||||
sub.cursPos(x, y)
|
|
||||||
if level[y][x] == nil then sub.bg(bgcol)
|
|
||||||
else sub.setBg("white") end
|
|
||||||
term.write(" ")
|
|
||||||
end
|
|
||||||
|
|
||||||
local function drawPlayer()
|
|
||||||
if py <= 0 then return end
|
|
||||||
if level[py][px] == nil then
|
|
||||||
sub.cursPos(px, py)
|
|
||||||
term.setTextColour(pcol)
|
|
||||||
sub.bg(bgcol)
|
|
||||||
term.write("&")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local draw = function(self)
|
|
||||||
sub.cursPos(self.x,self.y)
|
|
||||||
sub.setBg("white")
|
|
||||||
term.write(" ")
|
|
||||||
end
|
|
||||||
|
|
||||||
local function drawLevel()
|
|
||||||
for y = 1, h do
|
|
||||||
for x = 1, w do
|
|
||||||
updateTile(x,y)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
drawPlayer()
|
|
||||||
for i=1,#flakes do
|
|
||||||
sub.cursPos(flakes[i].x, flakes[i].y)
|
|
||||||
sub.setBg("white")
|
|
||||||
term.write(" ") -- What the fuck?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function addFlake()
|
|
||||||
local x,y = math.random(1,w),1
|
|
||||||
level[y][x] = "#"
|
|
||||||
updateTile(x,y)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function updateBG()
|
|
||||||
sub.bg(bgcol)
|
|
||||||
sub.setTxtColour("white")
|
|
||||||
for i=1,#flakes do
|
|
||||||
updateTile(flakes[i].x, flakes[i].y)
|
|
||||||
flakes[i].y = flakes[i].y + 1
|
|
||||||
if level[flakes[i].y][flakes[i].x] == nil then
|
|
||||||
sub.cursPos(flakes[i].x, flakes[i].y)
|
|
||||||
sub.bg(bgcol)
|
|
||||||
term.write(".")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
for i=1,2 do
|
|
||||||
table.insert(flakes, {x = math.random(1,w), y = 1})
|
|
||||||
end
|
|
||||||
for i = #flakes,1,-1 do
|
|
||||||
if flakes[i].y >= h + 1 then
|
|
||||||
table.remove(flakes, i)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
drawPlayer()
|
|
||||||
end
|
|
||||||
|
|
||||||
local function updateSnow()
|
|
||||||
for y = h-1,1,-1 do
|
|
||||||
for x = 1,w do
|
|
||||||
if level[y][x] ~= nil and level[y+1][x] == nil then
|
|
||||||
level[y][x] = nil
|
|
||||||
updateTile(x,y)
|
|
||||||
level[y+1][x] = "#"
|
|
||||||
updateTile(x,y+1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if level[py][px] ~= nil then
|
|
||||||
if level[py+1][px] == nil then
|
|
||||||
py = py + 1
|
|
||||||
pjump = -1
|
|
||||||
else
|
|
||||||
gameOver = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function transitionLevel()
|
|
||||||
levelnum = levelnum + 1
|
|
||||||
bgcol = levelbg[math.min(levelnum, #levelbg)]
|
|
||||||
sub.bg(bgcol)
|
|
||||||
local ttimer = os.startTimer(0.1)
|
|
||||||
local inc = 0
|
|
||||||
while inc < h do
|
|
||||||
local id,p1 = os.pullEvent("timer")
|
|
||||||
if p1 == ttimer then
|
|
||||||
term.scroll(-1)
|
|
||||||
inc = inc + 1
|
|
||||||
ttimer = os.startTimer(0)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
makeLevel()
|
|
||||||
ginterval = math.max(ginterval - 0.1, 0.1)
|
|
||||||
py = h
|
|
||||||
gtimer = os.startTimer(ginterval)
|
|
||||||
jtimer = os.startTimer(jinterval)
|
|
||||||
end
|
|
||||||
|
|
||||||
local function update()
|
|
||||||
local bgcount = 0
|
|
||||||
gtimer = os.startTimer(ginterval)
|
|
||||||
jtimer = os.startTimer(jinterval)
|
|
||||||
drawLevel()
|
|
||||||
while not gameOver do
|
|
||||||
local _id, _p1 = os.pullEvent()
|
|
||||||
|
|
||||||
if _id == "timer" then
|
|
||||||
if _p1 == gtimer then
|
|
||||||
updateSnow()
|
|
||||||
for i=0, math.random(0,levelnum) do
|
|
||||||
addFlake()
|
|
||||||
end
|
|
||||||
gtimer = os.startTimer(ginterval)
|
|
||||||
elseif _p1 == jtimer then
|
|
||||||
if pjump > 0 then
|
|
||||||
updateTile(px,py)
|
|
||||||
py = py -1
|
|
||||||
pjump = pjump - 1
|
|
||||||
if py <= 1 then
|
|
||||||
transitionLevel()
|
|
||||||
pjump = 0
|
|
||||||
end
|
|
||||||
|
|
||||||
elseif level[py+1][px] == nil then
|
|
||||||
updateTile(px,py)
|
|
||||||
py = py + 1
|
|
||||||
else
|
|
||||||
pjump = 0
|
|
||||||
end
|
|
||||||
drawPlayer()
|
|
||||||
jtimer = os.startTimer(jinterval)
|
|
||||||
end
|
|
||||||
bgcount = bgcount + 1
|
|
||||||
if bgcount % 8 == 0 then updateBG() end
|
|
||||||
elseif _id == "key" then
|
|
||||||
if _p1 == keys.left and px > 1 then
|
|
||||||
updateTile(px,py)
|
|
||||||
if level[py][px-1] == nil then
|
|
||||||
px = px - 1
|
|
||||||
elseif level[py-1][px] == nil and level[py-1][px-1] == nil then
|
|
||||||
px = px - 1
|
|
||||||
py = py - 1
|
|
||||||
end
|
|
||||||
drawPlayer()
|
|
||||||
elseif _p1 == keys.right and px < w then
|
|
||||||
updateTile(px,py)
|
|
||||||
if level[py][px+1] == nil then
|
|
||||||
px = px + 1
|
|
||||||
elseif level[py-1][px] == nil and level[py-1][px+1] == nil then
|
|
||||||
px = px + 1
|
|
||||||
py = py - 1
|
|
||||||
end
|
|
||||||
drawPlayer()
|
|
||||||
elseif _p1 == keys.space and level[py+1][px] ~= nil then
|
|
||||||
pjump = 2
|
|
||||||
elseif _p1 == keys.enter then
|
|
||||||
gameOver = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
makeLevel()
|
|
||||||
update()
|
|
||||||
sub.clrBg("black")
|
|
File diff suppressed because it is too large
Load Diff
17
README.md
17
README.md
|
@ -1,17 +0,0 @@
|
||||||
NOTE: CrossBow has been abandoned until this point, and may be re-released at a later date.
|
|
||||||
|
|
||||||
# CrossBow
|
|
||||||
|
|
||||||
The next generation of consoles is dawning upon us, and with that Game Fusion and Nova have decided to usher in the new generation in style. Say hello to the future.
|
|
||||||
|
|
||||||
Featuring:
|
|
||||||
|
|
||||||
• A high-end, flexible and powerful file explorer, NovaBrowse, made specially for CrossBow.
|
|
||||||
|
|
||||||
• Cross-platform compatibility, including compatibility with CrossBow Portable.
|
|
||||||
|
|
||||||
• Smooth, real time animations in 1 line, thanks to the GFX API "Subsistence", coded specially for CrossBow [by Mr_Iron2]
|
|
||||||
|
|
||||||
• A true next-gen experience, with magnificent visuals coating the system in graphical brilliance
|
|
||||||
|
|
||||||
• And more!
|
|
154
files/apis/sub
154
files/apis/sub
|
@ -1,154 +0,0 @@
|
||||||
-- Subsistence Graphical [GFX] API
|
|
||||||
-- [C] 2016-2018 Game Fusion
|
|
||||||
|
|
||||||
function line(y)
|
|
||||||
term.setCursorPos(1,y)
|
|
||||||
term.clearLine()
|
|
||||||
end
|
|
||||||
|
|
||||||
--function xWave(colour) broken right now
|
|
||||||
-- local w,h = term.getSize()
|
|
||||||
-- for i = 1,w do
|
|
||||||
-- term.setBackgroundColour(colours[colour])
|
|
||||||
-- term.setCursorPos(i,1)
|
|
||||||
-- term.clearLine()
|
|
||||||
-- end
|
|
||||||
--end
|
|
||||||
|
|
||||||
function yWave(colour)
|
|
||||||
local w,h = term.getSize()
|
|
||||||
term.setBackgroundColour(colours[colour])
|
|
||||||
for i = 1,h do
|
|
||||||
line(i)
|
|
||||||
sleep(0.1)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function yWave(colour)
|
|
||||||
local w,h = term.getSize()
|
|
||||||
term.setBackgroundColour(colours[colour])
|
|
||||||
for i = 1,h do
|
|
||||||
line(i)
|
|
||||||
sleep()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function fastSleep()
|
|
||||||
os.queueEvent("subsleep")
|
|
||||||
os.pullEvent()
|
|
||||||
end
|
|
||||||
|
|
||||||
function menuAnim(oc)
|
|
||||||
if oc == "open" then
|
|
||||||
for i=1,12 do
|
|
||||||
paintutils.drawLine(i,2,i,19,colours.orange)
|
|
||||||
sleep()
|
|
||||||
end
|
|
||||||
elseif oc == "close" then
|
|
||||||
for i=12,1,-1 do
|
|
||||||
paintutils.drawLine(i,2,i,19,colours.white)
|
|
||||||
sleep()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
blit = term.blit
|
|
||||||
|
|
||||||
clr = term.clear
|
|
||||||
|
|
||||||
function center(y, str)
|
|
||||||
local w,h = term.getSize()
|
|
||||||
local x = (w/2)-(#str/2)
|
|
||||||
term.setCursorPos(x,y)
|
|
||||||
print(str)
|
|
||||||
end
|
|
||||||
|
|
||||||
cursPos = term.setCursorPos
|
|
||||||
|
|
||||||
cursBlink = term.setCursorBlink
|
|
||||||
|
|
||||||
function centerSlow(y, str)
|
|
||||||
local w,h = term.getSize()
|
|
||||||
local x = (w/2)-(#str/2)
|
|
||||||
term.setCursorPos(x,y)
|
|
||||||
textutils.slowPrint(str)
|
|
||||||
end
|
|
||||||
|
|
||||||
bg = term.setBackgroundColour
|
|
||||||
|
|
||||||
function setBg(col) -- thanks to MultMine for fix
|
|
||||||
term.setBackgroundColour(colours[col])
|
|
||||||
end
|
|
||||||
|
|
||||||
function setTxt(col)
|
|
||||||
term.setTextColour(colours[col])
|
|
||||||
end
|
|
||||||
|
|
||||||
function clrBg(back)
|
|
||||||
term.setBackgroundColour(colours[back])
|
|
||||||
term.clear()
|
|
||||||
end
|
|
||||||
|
|
||||||
function clrLine(y)
|
|
||||||
term.setCursorPos(1,y)
|
|
||||||
term.clearLine()
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Window/display commands
|
|
||||||
|
|
||||||
winSize = term.getSize
|
|
||||||
|
|
||||||
newWindow = window.create
|
|
||||||
|
|
||||||
current = term.current
|
|
||||||
|
|
||||||
redirect = term.redirect
|
|
||||||
|
|
||||||
function setVis(bool)
|
|
||||||
local func = term.current().setVisible
|
|
||||||
if func then
|
|
||||||
func(bool)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function redraw()
|
|
||||||
local func = term.current().redraw
|
|
||||||
if func then
|
|
||||||
func()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function monTxtScale(size)
|
|
||||||
local func = term.current().setTextScale
|
|
||||||
if func then
|
|
||||||
func(size)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Paintutils derived commands
|
|
||||||
|
|
||||||
loadImg = paintutils.loadImage
|
|
||||||
|
|
||||||
drawImg = paintutils.drawImage
|
|
||||||
|
|
||||||
function drawPixel(x, y, col)
|
|
||||||
paintutils.drawPixel(x, y, colours[col])
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawLine(x1, y1, x2, y2, col)
|
|
||||||
paintutils.drawLine(x1, y1, x2, y2, colours[col])
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawBox(x1, y1, x2, y2, col)
|
|
||||||
paintutils.drawBox(x1, y1, x2, y2, colours[col])
|
|
||||||
end
|
|
||||||
|
|
||||||
function drawFilledBox(x1, y1, x2, y2, col)
|
|
||||||
paintutils.drawFilledBox(x1, y1, x2, y2, colours[col])
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Textutils commands
|
|
||||||
|
|
||||||
slowWrite = textutils.slowWrite
|
|
||||||
|
|
||||||
slowPrint = textutils.slowPrint
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-us">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>CrossBow by Game-Fusion</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" type="text/css" href="stylesheets/normalize.css" media="screen">
|
||||||
|
<link href='https://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>
|
||||||
|
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
|
||||||
|
<link rel="stylesheet" type="text/css" href="stylesheets/github-light.css" media="screen">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<section class="page-header">
|
||||||
|
<h1 class="project-name">CrossBow</h1>
|
||||||
|
<h2 class="project-tagline">The next generation of consoles.</h2>
|
||||||
|
<a href="https://github.com/Game-Fusion/CrossBow" class="btn">View on GitHub</a>
|
||||||
|
<a href="https://github.com/Game-Fusion/CrossBow/zipball/master" class="btn">Download .zip</a>
|
||||||
|
<a href="https://github.com/Game-Fusion/CrossBow/tarball/master" class="btn">Download .tar.gz</a>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="main-content">
|
||||||
|
<h1>
|
||||||
|
<a id="crossbow" class="anchor" href="#crossbow" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>CrossBow</h1>
|
||||||
|
|
||||||
|
<h1>
|
||||||
|
<a id="say-hello-to-the-future" class="anchor" href="#say-hello-to-the-future" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Say hello to the future.</h1>
|
||||||
|
|
||||||
|
<p>The next generation of consoles is upon us, and with that Game Fusion and Nova have decided to usher in the new generation in style. Featuring a high-end, powerful file browser, designed with CrossBow in mind, you'll be able to work in style. Speaking of style, CrossBow is a true next-gen experience, with crisp visuals coating the system in graphical brilliance. CrossBow also makes games extremely easy for developers to port, meaning you'll get the latest releases as they come.</p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="a-game-changer" class="anchor" href="#a-game-changer" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>A game changer</h2>
|
||||||
|
|
||||||
|
<p>CrossBow is going to be one of if not the first next-gen console to release. This means hype levels are going to be high. Because of all of this potential hype, we've ensured the system will undergo an entire stage of polishing everything up and smoothing out rough edges, including but not limited to performance improvements, graphical enhancements and feature improvements.</p>
|
||||||
|
|
||||||
|
<h2>
|
||||||
|
<a id="refined" class="anchor" href="#refined" aria-hidden="true"><span aria-hidden="true" class="octicon octicon-link"></span></a>Refined</h2>
|
||||||
|
|
||||||
|
<p>CrossBow's visual splendour is second to none; it has slick animations executed in real time. All it takes is 1 line, and a coloured wave will glide across the screen. So how do they do this? It's simple; the Subsistence API. Subsistence can perform real-time graphical brilliance swiftly and easily. Any developers using Subsistence for graphics will find their games looking superb, and evidence of Subsistence making things look great is in the CrossBow menus. Everything is polished, there's animations in real-time with incredible visual elegance in a sophisticated style. And all of this is only in CrossBow, powered by Subsistence.</p>
|
||||||
|
|
||||||
|
<footer class="site-footer">
|
||||||
|
<span class="site-footer-owner"><a href="https://github.com/Game-Fusion/CrossBow">CrossBow</a> is maintained by <a href="https://github.com/Game-Fusion">Game-Fusion</a>.</span>
|
||||||
|
|
||||||
|
<span class="site-footer-credits">This page was generated by <a href="https://pages.github.com">GitHub Pages</a> using the <a href="https://github.com/jasonlong/cayman-theme">Cayman theme</a> by <a href="https://twitter.com/jasonlong">Jason Long</a>.</span>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"name": "CrossBow",
|
||||||
|
"tagline": "The next generation of consoles.",
|
||||||
|
"body": "# CrossBow\r\n\r\n# Say hello to the future.\r\n\r\nThe next generation of consoles is upon us, and with that Game Fusion and Nova have decided to usher in the new generation in style. Featuring a high-end, powerful file browser, designed with CrossBow in mind, you'll be able to work in style. Speaking of style, CrossBow is a true next-gen experience, with crisp visuals coating the system in graphical brilliance. CrossBow also makes games extremely easy for developers to port, meaning you'll get the latest releases as they come.\r\n\r\n## A game changer\r\n\r\nCrossBow is going to be one of if not the first next-gen console to release. This means hype levels are going to be high. Because of all of this potential hype, we've ensured the system will undergo an entire stage of polishing everything up and smoothing out rough edges, including but not limited to performance improvements, graphical enhancements and feature improvements.\r\n\r\n## Refined\r\n\r\nCrossBow's visual splendour is second to none; it has slick animations executed in real time. All it takes is 1 line, and a coloured wave will glide across the screen. So how do they do this? It's simple; the Subsistence API. Subsistence can perform real-time graphical brilliance swiftly and easily. Any developers using Subsistence for graphics will find their games looking superb, and evidence of Subsistence making things look great is in the CrossBow menus. Everything is polished, there's animations in real-time with incredible visual elegance in a sophisticated style. And all of this is only in CrossBow, powered by Subsistence.",
|
||||||
|
"note": "Don't delete this file! It's used internally to help with page regeneration."
|
||||||
|
}
|
|
@ -0,0 +1,124 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015 GitHub, Inc.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.pl-c /* comment */ {
|
||||||
|
color: #969896;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-c1 /* constant, markup.raw, meta.diff.header, meta.module-reference, meta.property-name, support, support.constant, support.variable, variable.other.constant */,
|
||||||
|
.pl-s .pl-v /* string variable */ {
|
||||||
|
color: #0086b3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-e /* entity */,
|
||||||
|
.pl-en /* entity.name */ {
|
||||||
|
color: #795da3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-s .pl-s1 /* string source */,
|
||||||
|
.pl-smi /* storage.modifier.import, storage.modifier.package, storage.type.java, variable.other, variable.parameter.function */ {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-ent /* entity.name.tag */ {
|
||||||
|
color: #63a35c;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-k /* keyword, storage, storage.type */ {
|
||||||
|
color: #a71d5d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-pds /* punctuation.definition.string, string.regexp.character-class */,
|
||||||
|
.pl-s /* string */,
|
||||||
|
.pl-s .pl-pse .pl-s1 /* string punctuation.section.embedded source */,
|
||||||
|
.pl-sr /* string.regexp */,
|
||||||
|
.pl-sr .pl-cce /* string.regexp constant.character.escape */,
|
||||||
|
.pl-sr .pl-sra /* string.regexp string.regexp.arbitrary-repitition */,
|
||||||
|
.pl-sr .pl-sre /* string.regexp source.ruby.embedded */ {
|
||||||
|
color: #183691;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-v /* variable */ {
|
||||||
|
color: #ed6a43;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-id /* invalid.deprecated */ {
|
||||||
|
color: #b52a1d;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-ii /* invalid.illegal */ {
|
||||||
|
background-color: #b52a1d;
|
||||||
|
color: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-sr .pl-cce /* string.regexp constant.character.escape */ {
|
||||||
|
color: #63a35c;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-ml /* markup.list */ {
|
||||||
|
color: #693a17;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-mh /* markup.heading */,
|
||||||
|
.pl-mh .pl-en /* markup.heading entity.name */,
|
||||||
|
.pl-ms /* meta.separator */ {
|
||||||
|
color: #1d3e81;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-mq /* markup.quote */ {
|
||||||
|
color: #008080;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-mi /* markup.italic */ {
|
||||||
|
color: #333;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-mb /* markup.bold */ {
|
||||||
|
color: #333;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-md /* markup.deleted, meta.diff.header.from-file */ {
|
||||||
|
background-color: #ffecec;
|
||||||
|
color: #bd2c00;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-mi1 /* markup.inserted, meta.diff.header.to-file */ {
|
||||||
|
background-color: #eaffea;
|
||||||
|
color: #55a532;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-mdr /* meta.diff.range */ {
|
||||||
|
color: #795da3;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pl-mo /* meta.output */ {
|
||||||
|
color: #1d3e81;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,424 @@
|
||||||
|
/*! normalize.css v3.0.2 | MIT License | git.io/normalize */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Set default font family to sans-serif.
|
||||||
|
* 2. Prevent iOS text size adjust after orientation change, without disabling
|
||||||
|
* user zoom.
|
||||||
|
*/
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif; /* 1 */
|
||||||
|
-ms-text-size-adjust: 100%; /* 2 */
|
||||||
|
-webkit-text-size-adjust: 100%; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove default margin.
|
||||||
|
*/
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HTML5 display definitions
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||||
|
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||||
|
* and Firefox.
|
||||||
|
* Correct `block` display not defined for `main` in IE 11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
article,
|
||||||
|
aside,
|
||||||
|
details,
|
||||||
|
figcaption,
|
||||||
|
figure,
|
||||||
|
footer,
|
||||||
|
header,
|
||||||
|
hgroup,
|
||||||
|
main,
|
||||||
|
menu,
|
||||||
|
nav,
|
||||||
|
section,
|
||||||
|
summary {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||||
|
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio,
|
||||||
|
canvas,
|
||||||
|
progress,
|
||||||
|
video {
|
||||||
|
display: inline-block; /* 1 */
|
||||||
|
vertical-align: baseline; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent modern browsers from displaying `audio` without controls.
|
||||||
|
* Remove excess height in iOS 5 devices.
|
||||||
|
*/
|
||||||
|
|
||||||
|
audio:not([controls]) {
|
||||||
|
display: none;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||||
|
* Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
|
||||||
|
*/
|
||||||
|
|
||||||
|
[hidden],
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the gray background color from active links in IE 10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Improve readability when focused and also mouse hovered in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
a:active,
|
||||||
|
a:hover {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Text-level semantics
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
abbr[title] {
|
||||||
|
border-bottom: 1px dotted;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in Safari and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address variable `h1` font-size and margin within `section` and `article`
|
||||||
|
* contexts in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
font-size: 2em;
|
||||||
|
margin: 0.67em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address styling not present in IE 8/9.
|
||||||
|
*/
|
||||||
|
|
||||||
|
mark {
|
||||||
|
background: #ff0;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address inconsistent and variable font size in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
position: relative;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Embedded content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove border when inside `a` element in IE 8/9/10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Correct overflow not hidden in IE 9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Grouping content
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address margin not present in IE 8/9 and Safari.
|
||||||
|
*/
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 1em 40px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address differences between Firefox and other browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Contain overflow in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address odd `em`-unit font size rendering in all browsers.
|
||||||
|
*/
|
||||||
|
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
pre,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Forms
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||||
|
* styling of `select`, unless a `border` property is set.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct color not being inherited.
|
||||||
|
* Known issue: affects color of disabled elements.
|
||||||
|
* 2. Correct font properties not being inherited.
|
||||||
|
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
input,
|
||||||
|
optgroup,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
color: inherit; /* 1 */
|
||||||
|
font: inherit; /* 2 */
|
||||||
|
margin: 0; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||||
|
* All other form control elements do not inherit `text-transform` values.
|
||||||
|
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||||
|
* Correct `select` style inheritance in Firefox.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||||
|
* and `video` controls.
|
||||||
|
* 2. Correct inability to style clickable `input` types in iOS.
|
||||||
|
* 3. Improve usability and consistency of cursor style between image-type
|
||||||
|
* `input` and others.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button,
|
||||||
|
html input[type="button"], /* 1 */
|
||||||
|
input[type="reset"],
|
||||||
|
input[type="submit"] {
|
||||||
|
-webkit-appearance: button; /* 2 */
|
||||||
|
cursor: pointer; /* 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Re-set default cursor for disabled elements.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button[disabled],
|
||||||
|
html input[disabled] {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove inner padding and border in Firefox 4+.
|
||||||
|
*/
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
input::-moz-focus-inner {
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||||
|
* the UA stylesheet.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input {
|
||||||
|
line-height: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* It's recommended that you don't attempt to style these elements.
|
||||||
|
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||||
|
*
|
||||||
|
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||||
|
* 2. Remove excess padding in IE 8/9/10.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="checkbox"],
|
||||||
|
input[type="radio"] {
|
||||||
|
box-sizing: border-box; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||||
|
* `font-size` values of the `input`, it causes the cursor style of the
|
||||||
|
* decrement button to change from `default` to `text`.
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="number"]::-webkit-inner-spin-button,
|
||||||
|
input[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||||
|
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome
|
||||||
|
* (include `-moz` to future-proof).
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"] {
|
||||||
|
-webkit-appearance: textfield; /* 1 */ /* 2 */
|
||||||
|
box-sizing: content-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||||
|
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||||
|
* padding (and `textfield` appearance).
|
||||||
|
*/
|
||||||
|
|
||||||
|
input[type="search"]::-webkit-search-cancel-button,
|
||||||
|
input[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Define consistent border, margin, and padding.
|
||||||
|
*/
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 1px solid #c0c0c0;
|
||||||
|
margin: 0 2px;
|
||||||
|
padding: 0.35em 0.625em 0.75em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||||
|
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||||
|
*/
|
||||||
|
|
||||||
|
legend {
|
||||||
|
border: 0; /* 1 */
|
||||||
|
padding: 0; /* 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||||
|
*/
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Don't inherit the `font-weight` (applied by a rule above).
|
||||||
|
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||||
|
*/
|
||||||
|
|
||||||
|
optgroup {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Tables
|
||||||
|
========================================================================== */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove most spacing between table cells.
|
||||||
|
*/
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td,
|
||||||
|
th {
|
||||||
|
padding: 0;
|
||||||
|
}
|
|
@ -0,0 +1,245 @@
|
||||||
|
* {
|
||||||
|
box-sizing: border-box; }
|
||||||
|
|
||||||
|
body {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||||
|
font-size: 16px;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #606c71; }
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #1e6bb8;
|
||||||
|
text-decoration: none; }
|
||||||
|
a:hover {
|
||||||
|
text-decoration: underline; }
|
||||||
|
|
||||||
|
.btn {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
color: rgba(255, 255, 255, 0.7);
|
||||||
|
background-color: rgba(255, 255, 255, 0.08);
|
||||||
|
border-color: rgba(255, 255, 255, 0.2);
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
border-radius: 0.3rem;
|
||||||
|
transition: color 0.2s, background-color 0.2s, border-color 0.2s; }
|
||||||
|
.btn + .btn {
|
||||||
|
margin-left: 1rem; }
|
||||||
|
|
||||||
|
.btn:hover {
|
||||||
|
color: rgba(255, 255, 255, 0.8);
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: rgba(255, 255, 255, 0.2);
|
||||||
|
border-color: rgba(255, 255, 255, 0.3); }
|
||||||
|
|
||||||
|
@media screen and (min-width: 64em) {
|
||||||
|
.btn {
|
||||||
|
padding: 0.75rem 1rem; } }
|
||||||
|
|
||||||
|
@media screen and (min-width: 42em) and (max-width: 64em) {
|
||||||
|
.btn {
|
||||||
|
padding: 0.6rem 0.9rem;
|
||||||
|
font-size: 0.9rem; } }
|
||||||
|
|
||||||
|
@media screen and (max-width: 42em) {
|
||||||
|
.btn {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
padding: 0.75rem;
|
||||||
|
font-size: 0.9rem; }
|
||||||
|
.btn + .btn {
|
||||||
|
margin-top: 1rem;
|
||||||
|
margin-left: 0; } }
|
||||||
|
|
||||||
|
.page-header {
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #159957;
|
||||||
|
background-image: linear-gradient(120deg, #155799, #159957); }
|
||||||
|
|
||||||
|
@media screen and (min-width: 64em) {
|
||||||
|
.page-header {
|
||||||
|
padding: 5rem 6rem; } }
|
||||||
|
|
||||||
|
@media screen and (min-width: 42em) and (max-width: 64em) {
|
||||||
|
.page-header {
|
||||||
|
padding: 3rem 4rem; } }
|
||||||
|
|
||||||
|
@media screen and (max-width: 42em) {
|
||||||
|
.page-header {
|
||||||
|
padding: 2rem 1rem; } }
|
||||||
|
|
||||||
|
.project-name {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0.1rem; }
|
||||||
|
|
||||||
|
@media screen and (min-width: 64em) {
|
||||||
|
.project-name {
|
||||||
|
font-size: 3.25rem; } }
|
||||||
|
|
||||||
|
@media screen and (min-width: 42em) and (max-width: 64em) {
|
||||||
|
.project-name {
|
||||||
|
font-size: 2.25rem; } }
|
||||||
|
|
||||||
|
@media screen and (max-width: 42em) {
|
||||||
|
.project-name {
|
||||||
|
font-size: 1.75rem; } }
|
||||||
|
|
||||||
|
.project-tagline {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
font-weight: normal;
|
||||||
|
opacity: 0.7; }
|
||||||
|
|
||||||
|
@media screen and (min-width: 64em) {
|
||||||
|
.project-tagline {
|
||||||
|
font-size: 1.25rem; } }
|
||||||
|
|
||||||
|
@media screen and (min-width: 42em) and (max-width: 64em) {
|
||||||
|
.project-tagline {
|
||||||
|
font-size: 1.15rem; } }
|
||||||
|
|
||||||
|
@media screen and (max-width: 42em) {
|
||||||
|
.project-tagline {
|
||||||
|
font-size: 1rem; } }
|
||||||
|
|
||||||
|
.main-content :first-child {
|
||||||
|
margin-top: 0; }
|
||||||
|
.main-content img {
|
||||||
|
max-width: 100%; }
|
||||||
|
.main-content h1, .main-content h2, .main-content h3, .main-content h4, .main-content h5, .main-content h6 {
|
||||||
|
margin-top: 2rem;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-weight: normal;
|
||||||
|
color: #159957; }
|
||||||
|
.main-content p {
|
||||||
|
margin-bottom: 1em; }
|
||||||
|
.main-content code {
|
||||||
|
padding: 2px 4px;
|
||||||
|
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #383e41;
|
||||||
|
background-color: #f3f6fa;
|
||||||
|
border-radius: 0.3rem; }
|
||||||
|
.main-content pre {
|
||||||
|
padding: 0.8rem;
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||||
|
color: #567482;
|
||||||
|
word-wrap: normal;
|
||||||
|
background-color: #f3f6fa;
|
||||||
|
border: solid 1px #dce6f0;
|
||||||
|
border-radius: 0.3rem; }
|
||||||
|
.main-content pre > code {
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
color: #567482;
|
||||||
|
word-break: normal;
|
||||||
|
white-space: pre;
|
||||||
|
background: transparent;
|
||||||
|
border: 0; }
|
||||||
|
.main-content .highlight {
|
||||||
|
margin-bottom: 1rem; }
|
||||||
|
.main-content .highlight pre {
|
||||||
|
margin-bottom: 0;
|
||||||
|
word-break: normal; }
|
||||||
|
.main-content .highlight pre, .main-content pre {
|
||||||
|
padding: 0.8rem;
|
||||||
|
overflow: auto;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: 1.45;
|
||||||
|
border-radius: 0.3rem; }
|
||||||
|
.main-content pre code, .main-content pre tt {
|
||||||
|
display: inline;
|
||||||
|
max-width: initial;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
overflow: initial;
|
||||||
|
line-height: inherit;
|
||||||
|
word-wrap: normal;
|
||||||
|
background-color: transparent;
|
||||||
|
border: 0; }
|
||||||
|
.main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after {
|
||||||
|
content: normal; }
|
||||||
|
.main-content ul, .main-content ol {
|
||||||
|
margin-top: 0; }
|
||||||
|
.main-content blockquote {
|
||||||
|
padding: 0 1rem;
|
||||||
|
margin-left: 0;
|
||||||
|
color: #819198;
|
||||||
|
border-left: 0.3rem solid #dce6f0; }
|
||||||
|
.main-content blockquote > :first-child {
|
||||||
|
margin-top: 0; }
|
||||||
|
.main-content blockquote > :last-child {
|
||||||
|
margin-bottom: 0; }
|
||||||
|
.main-content table {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
overflow: auto;
|
||||||
|
word-break: normal;
|
||||||
|
word-break: keep-all; }
|
||||||
|
.main-content table th {
|
||||||
|
font-weight: bold; }
|
||||||
|
.main-content table th, .main-content table td {
|
||||||
|
padding: 0.5rem 1rem;
|
||||||
|
border: 1px solid #e9ebec; }
|
||||||
|
.main-content dl {
|
||||||
|
padding: 0; }
|
||||||
|
.main-content dl dt {
|
||||||
|
padding: 0;
|
||||||
|
margin-top: 1rem;
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: bold; }
|
||||||
|
.main-content dl dd {
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: 1rem; }
|
||||||
|
.main-content hr {
|
||||||
|
height: 2px;
|
||||||
|
padding: 0;
|
||||||
|
margin: 1rem 0;
|
||||||
|
background-color: #eff0f1;
|
||||||
|
border: 0; }
|
||||||
|
|
||||||
|
@media screen and (min-width: 64em) {
|
||||||
|
.main-content {
|
||||||
|
max-width: 64rem;
|
||||||
|
padding: 2rem 6rem;
|
||||||
|
margin: 0 auto;
|
||||||
|
font-size: 1.1rem; } }
|
||||||
|
|
||||||
|
@media screen and (min-width: 42em) and (max-width: 64em) {
|
||||||
|
.main-content {
|
||||||
|
padding: 2rem 4rem;
|
||||||
|
font-size: 1.1rem; } }
|
||||||
|
|
||||||
|
@media screen and (max-width: 42em) {
|
||||||
|
.main-content {
|
||||||
|
padding: 2rem 1rem;
|
||||||
|
font-size: 1rem; } }
|
||||||
|
|
||||||
|
.site-footer {
|
||||||
|
padding-top: 2rem;
|
||||||
|
margin-top: 2rem;
|
||||||
|
border-top: solid 1px #eff0f1; }
|
||||||
|
|
||||||
|
.site-footer-owner {
|
||||||
|
display: block;
|
||||||
|
font-weight: bold; }
|
||||||
|
|
||||||
|
.site-footer-credits {
|
||||||
|
color: #819198; }
|
||||||
|
|
||||||
|
@media screen and (min-width: 64em) {
|
||||||
|
.site-footer {
|
||||||
|
font-size: 1rem; } }
|
||||||
|
|
||||||
|
@media screen and (min-width: 42em) and (max-width: 64em) {
|
||||||
|
.site-footer {
|
||||||
|
font-size: 1rem; } }
|
||||||
|
|
||||||
|
@media screen and (max-width: 42em) {
|
||||||
|
.site-footer {
|
||||||
|
font-size: 0.9rem; } }
|
Loading…
Reference in New Issue