Compare commits
10 Commits
803f07a1b7
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 1cc464fa9b | |||
| 4c4e79e384 | |||
| ae57353e8f | |||
| fdb4840912 | |||
| 6f4ae177da | |||
| 9b9648d033 | |||
| 4ffc138909 | |||
|
|
08354c8905 | ||
| dc8ab1a0a7 | |||
|
|
4e19b2a1b0 |
55
.gitea/workflows/build-pdf.yml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
name: Build PDF
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [ main, master ]
|
||||||
|
pull_request:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
pdf:
|
||||||
|
name: make pdf
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup Go (from go.mod)
|
||||||
|
uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version-file: go.mod
|
||||||
|
check-latest: true
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- name: Install Chrome and tools (no snap)
|
||||||
|
run: |
|
||||||
|
set -euxo pipefail
|
||||||
|
if command -v sudo >/dev/null 2>&1; then SUDO=sudo; else SUDO=; fi
|
||||||
|
$SUDO apt-get update
|
||||||
|
# Base tools and fonts
|
||||||
|
DEBIAN_FRONTEND=noninteractive $SUDO apt-get install -y --no-install-recommends \
|
||||||
|
ca-certificates gnupg make fonts-liberation
|
||||||
|
|
||||||
|
# Add Google's official Chrome APT repo (avoids Ubuntu's snap-only chromium)
|
||||||
|
$SUDO install -d -m 0755 /etc/apt/keyrings
|
||||||
|
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | $SUDO gpg --dearmor -o /etc/apt/keyrings/google-linux-signing-keyring.gpg
|
||||||
|
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/google-linux-signing-keyring.gpg] https://dl.google.com/linux/chrome/deb/ stable main" | \
|
||||||
|
$SUDO tee /etc/apt/sources.list.d/google-chrome.list >/dev/null
|
||||||
|
$SUDO apt-get update
|
||||||
|
DEBIAN_FRONTEND=noninteractive $SUDO apt-get install -y --no-install-recommends google-chrome-stable
|
||||||
|
|
||||||
|
# Clean up apt lists to keep image lean
|
||||||
|
$SUDO rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
- name: Build PDF
|
||||||
|
env:
|
||||||
|
# Ensure our tools pick Chrome first if multiple are present
|
||||||
|
CHROME_PATH: /usr/bin/google-chrome-stable
|
||||||
|
run: make pdf
|
||||||
|
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: output-pdf
|
||||||
|
path: _dist/output.pdf
|
||||||
|
if-no-files-found: error
|
||||||
@@ -3,6 +3,11 @@
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Heading Now";
|
||||||
|
src: url("../font/HeadingNow-95Medium.otf");
|
||||||
|
}
|
||||||
|
|
||||||
/* Base */
|
/* Base */
|
||||||
html, body {
|
html, body {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
@@ -20,6 +25,39 @@ html, body {
|
|||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.interlude {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
color: white;
|
||||||
|
padding: 4rem;
|
||||||
|
z-index: 0; /* ensure stacking context */
|
||||||
|
}
|
||||||
|
|
||||||
|
.interlude::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
background-size: cover;
|
||||||
|
background-position: center;
|
||||||
|
filter: grayscale(20%) brightness(0.7);
|
||||||
|
z-index: -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.interlude::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
/*background: rgba(128, 0, 128, 0.3); /* purple tint */ */
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.interlude-caption {
|
||||||
|
color: rgba(225, 225, 225, 1.0);
|
||||||
|
font-family: "Heading Now";
|
||||||
|
line-height: 2em;
|
||||||
|
rotate: 5deg;
|
||||||
|
}
|
||||||
|
|
||||||
/* Use border-box sizing everywhere to keep dimensions predictable */
|
/* Use border-box sizing everywhere to keep dimensions predictable */
|
||||||
html { box-sizing: border-box; }
|
html { box-sizing: border-box; }
|
||||||
*, *::before, *::after { box-sizing: inherit; }
|
*, *::before, *::after { box-sizing: inherit; }
|
||||||
|
|||||||
BIN
assets/img/broken-screen.jpg
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
assets/img/crashman/crashman-1.png
Normal file
|
After Width: | Height: | Size: 247 KiB |
BIN
assets/img/crashman/crashman-2.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
assets/img/crashman/crashman-3.png
Normal file
|
After Width: | Height: | Size: 227 KiB |
BIN
assets/img/crashman/crashman-bg.png
Normal file
|
After Width: | Height: | Size: 3.0 MiB |
BIN
assets/img/free-dirt.jpg
Normal file
|
After Width: | Height: | Size: 5.8 MiB |
BIN
assets/img/javaguy.jpg
Normal file
|
After Width: | Height: | Size: 993 KiB |
BIN
assets/img/mr-nickel.jpg
Normal file
|
After Width: | Height: | Size: 2.8 MiB |
BIN
assets/img/windows-shirt.jpg
Normal file
|
After Width: | Height: | Size: 2.5 MiB |
@@ -4,10 +4,16 @@
|
|||||||
- hack-the-planet.html
|
- hack-the-planet.html
|
||||||
- wtf.html
|
- wtf.html
|
||||||
- drivingmissmuni.html
|
- drivingmissmuni.html
|
||||||
|
- crashman.html
|
||||||
- vranklevictim.html
|
- vranklevictim.html
|
||||||
- pearlstreetcafe.html
|
- pearlstreetcafe.html
|
||||||
- gtkapplang-1.html
|
- gtkapplang-1.html
|
||||||
- gtkapplang-2.html
|
- gtkapplang-2.html
|
||||||
- gtkapplang-3.html
|
- gtkapplang-3.html
|
||||||
- gtkapplang-4.html
|
- gtkapplang-4.html
|
||||||
|
- broken-screen.html
|
||||||
|
- windows-shirt.html
|
||||||
|
- free-dirt.html
|
||||||
|
- mr-nickel.html
|
||||||
|
- javaguy.html
|
||||||
|
|
||||||
|
|||||||
19
pages/broken-screen.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<style>
|
||||||
|
#broken-screen::before {
|
||||||
|
background-image: url("assets/img/broken-screen.jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
#broken-screen-caption {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 25%;
|
||||||
|
right: 15%;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="broken-screen" class="page-base interlude">
|
||||||
|
<div class="interlude-caption" id="broken-screen-caption">
|
||||||
|
have you tried<br/>
|
||||||
|
turning it off and on again?
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
89
pages/crashman.html
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
<style>
|
||||||
|
#crashman-page {
|
||||||
|
position: relative;
|
||||||
|
background: url("assets/img/crashman/crashman-bg.png") no-repeat center center;
|
||||||
|
background-size: cover;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#snips {
|
||||||
|
height: 120px;
|
||||||
|
width: 620px;
|
||||||
|
background-color: rgb(209, 1, 209);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
padding: 5px;
|
||||||
|
|
||||||
|
position: absolute;
|
||||||
|
bottom: 30px;
|
||||||
|
left: -50px;
|
||||||
|
transform: rotate(-5deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
#snips img {
|
||||||
|
flex: 1 1 0;
|
||||||
|
width: auto;
|
||||||
|
object-fit: contain;
|
||||||
|
max-height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#title {
|
||||||
|
position: absolute;
|
||||||
|
top: 350px;
|
||||||
|
right: 8px;
|
||||||
|
|
||||||
|
font-family: "Heading Now";
|
||||||
|
font-size: 48px;
|
||||||
|
|
||||||
|
color: #fff;
|
||||||
|
text-shadow:
|
||||||
|
0px 10px 0 rgb(209, 1, 209),
|
||||||
|
0px 20px 0 black;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text {
|
||||||
|
position: absolute;
|
||||||
|
top: 390px;
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
background-color: rgba(62, 6, 62, 0.704);
|
||||||
|
font: 11.75pt/1.40 Tahoma, sans-serif;
|
||||||
|
padding: 24px;
|
||||||
|
color: #fff;
|
||||||
|
line-height: 1.9em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stretch {
|
||||||
|
font-weight: 800;
|
||||||
|
transform: scaleX(2.1);
|
||||||
|
transform-origin: left;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="crashman-page" class="page-base">
|
||||||
|
|
||||||
|
<div id="text">
|
||||||
|
<p>
|
||||||
|
<b>Rusty Haight</b> is the human crash-test dummy. As director of the San Diego-based Collision Safety Institute,
|
||||||
|
Rusty has experienced more than 950 violent vehicle crash tests at speeds of up to 54 mph,
|
||||||
|
and taken <span class="stretch">140 air bags to the face.</span>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
Haight has contributed several publications on the topic of automobile safety
|
||||||
|
in <b>Collision Magazine</b> such as <em>Hyundai and Kia Crash Data: the Indispensable Compendium.</em>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="snips">
|
||||||
|
<img src="assets/img/crashman/crashman-1.png" />
|
||||||
|
<img src="assets/img/crashman/crashman-2.png" />
|
||||||
|
<img src="assets/img/crashman/crashman-3.png" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="title" class="ytmnd-1">crash man</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
15
pages/free-dirt.html
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<style>
|
||||||
|
#free-dirt::before {
|
||||||
|
background-image: url("assets/img/free-dirt.jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
#free-dirt-caption {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 25%;
|
||||||
|
right: 25%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="free-dirt" class="page-base interlude">
|
||||||
|
<div class="interlude-caption" id="free-dirt-caption">thanks...</div>
|
||||||
|
</div>
|
||||||
18
pages/javaguy.html
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<style>
|
||||||
|
#javaguy::before {
|
||||||
|
background-image: url("assets/img/javaguy.jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
#javaguy-caption {
|
||||||
|
position: absolute;
|
||||||
|
top: 5%;
|
||||||
|
left: 5%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="javaguy" class="page-base interlude">
|
||||||
|
<div class="interlude-caption" id="javaguy-caption">
|
||||||
|
i'm living in the real world<br/>
|
||||||
|
and he's living in a <em>virtual machine...</em><br/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
19
pages/mr-nickel.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<style>
|
||||||
|
#mr-nickel::before {
|
||||||
|
background-image: url("assets/img/mr-nickel.jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
#mr-nickel-caption {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 10%;
|
||||||
|
right: 5%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="mr-nickel" class="page-base interlude">
|
||||||
|
<div class="interlude-caption" id="mr-nickel-caption">
|
||||||
|
mr. nickel says<br/>
|
||||||
|
the financial collapse is imminent<br/>
|
||||||
|
and it's all your fault!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -133,7 +133,7 @@ figure {
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Famed composer Hilden Valeigh's soundtrack is a complex mix of droning repetitive ambiance. The 9 disc soundtrack is releasing exclusively for streamingon <span class="logo">ULTRA-PLUS®</span> later this winter.
|
Famed composer Hilden Valeigh's soundtrack is a complex mix of droning repetitive ambiance. The 9 disc soundtrack is releasing exclusively for streaming on <span class="logo">ULTRA-PLUS®</span> later this winter.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<aside style="position: absolute; bottom: 32px;">
|
<aside style="position: absolute; bottom: 32px;">
|
||||||
|
|||||||
19
pages/windows-shirt.html
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
<style>
|
||||||
|
#windows-shirt::before {
|
||||||
|
background-image: url("assets/img/windows-shirt.jpg");
|
||||||
|
}
|
||||||
|
|
||||||
|
#windows-shirt-caption {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 10%;
|
||||||
|
left: 10%;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="windows-shirt" class="page-base interlude">
|
||||||
|
<div class="interlude-caption" id="windows-shirt-caption">
|
||||||
|
we line up to store<br/>
|
||||||
|
only 4 gigabytes allowed<br/>
|
||||||
|
comrade, be grateful!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||