Compare commits

..

1 Commits

Author SHA1 Message Date
BodgeMaster f77cc59fc4 layout: add next/previous buttons to chapters, update copyright notice for 2026 2026-01-12 04:00:12 +01:00
10 changed files with 64 additions and 67 deletions

View File

@ -75,7 +75,7 @@
She hurries up the stairs and gets on. The doors close and it begins to She hurries up the stairs and gets on. The doors close and it begins to
move. Annie catches her breath and takes her library card out to look at move. Annie catches her breath and takes her library card out to look at
it. The note written on it reads: it. The note written on it reads:
<span class="quote non-speech">Metro Crystal Park 10:30PM <span class="quote non-speech">&lt;metro station&gt; 10:30PM
tonight</span>. tonight</span>.
</p> </p>

View File

@ -1 +0,0 @@
{"pages":["./prev.html","./layout.html","./next.html"]}

View File

@ -3,14 +3,14 @@
} }
a { a {
color: #051390; color: #1515A0;
} }
a:visited { a:visited {
color: #134709; color: #185113;
} }
html { html {
background-color: #d7d6d1; background-color: #e5e3e0;
} }
body { body {
@ -89,7 +89,7 @@ p.copyright {
margin-bottom: 0; margin-bottom: 0;
text-align: center; text-align: center;
font-size: 0.8em; font-size: 0.8em;
color: #606a76; color: gray;
bottom: 2px; bottom: 2px;
} }
@ -121,7 +121,7 @@ pre {
pre.terminal { pre.terminal {
color: #B5E550; color: #B5E550;
background-color: #3b3b3b; background-color: #3F3F3F;
border: 1px solid #101030; border: 1px solid #101030;
padding: 1em; padding: 1em;
@ -139,7 +139,7 @@ pre.terminal span.blur {
pre.paper { pre.paper {
/* TODO: typewriter-look? */ /* TODO: typewriter-look? */
/* TODO: tractor feed ribbons? */ /* TODO: tractor feed ribbons? */
background-color: #f0e8d6; background-color: #F0E6CE;
border: 1px solid #101030; border: 1px solid #101030;
padding: 1em; padding: 1em;
@ -147,7 +147,7 @@ pre.paper {
} }
span.paper.green { span.paper.green {
background-color: #d4deae; background-color: #D0DBA6;
} }
span.quote.speech { span.quote.speech {
@ -201,30 +201,30 @@ However, Chromium apparently doesn't apply the a:visted color to children of <a>
*/ */
span.chapter { span.chapter {
color: #051390; color: #1515A0;
} }
a:visited>span.chapter { a:visited>span.chapter {
color: #134709; color: #185113;
} }
span.chapter::before { span.chapter::before {
content: "\25b9"; content: "\25b9";
font-size: 0.75em; font-size: 0.75em;
position: relative; position: relative;
bottom: 0.15em; bottom: 0.15em;
color: #08083e; color: #090944;
} }
a:visited>span.chapter::before { a:visited>span.chapter::before {
color: #0e310b; color: #0f320c;
} }
span.chapter::after { span.chapter::after {
content: "\25c3"; content: "\25c3";
font-size: 0.75em; font-size: 0.75em;
position: relative; position: relative;
bottom: 0.15em; bottom: 0.15em;
color: #08083e; color: #090944;
} }
a:visited>span.chapter::after { a:visited>span.chapter::after {
color: #0e310b; color: #0f320c;
} }
span.blur { span.blur {
@ -289,7 +289,7 @@ div.home a:hover, div.next a:hover, div.prev a:hover {
.comment { .comment {
font-style: italic; font-style: italic;
color: #606a76 !important; color: gray !important;
} }
svg.hidden_filter { svg.hidden_filter {

View File

@ -59,8 +59,8 @@
<p> <p>
Looking outside again, Annie realizes:<br /> Looking outside again, Annie realizes:<br />
<span class="quote speech">I have never seen one of these</span> &ndash; <span class="quote speech">I have never seen one of these</span> &ndash;
she taps her hand on the control panel &ndash; she knocks on the control panel &ndash; <span class="quote speech">go
<span class="quote speech">go this fast.</span><br /> this fast.</span><br />
<span class="quote speech">Me neither</span>, says Jack. He adds: <span class="quote speech">Me neither</span>, says Jack. He adds:
<span class="quote speech">There used to be trains that could go faster <span class="quote speech">There used to be trains that could go faster
&ndash; a lot faster &ndash; but not the metro.</span> &ndash; a lot faster &ndash; but not the metro.</span>

View File

@ -155,6 +155,7 @@
<br /> <br />
<span class="quote speech">Uhh... yes.</span><br /> <span class="quote speech">Uhh... yes.</span><br />
He seems to be taken aback by her sudden excitement.<br /> He seems to be taken aback by her sudden excitement.<br />
<span class="comment">Missing: explanation, they go to car</span> <span class="comment">Missing: explanation, they go to car, Mary sits in
the front with Jack</span>
</p> </p>
<p class="copyright">Copyright &#169; 2023-2026 Jan Danielzick (aka. BodgeMaster) &ndash; All rights reserved.</p><script>let spans=["<span class=\"paper green\">","<span>"];let pre_texts=document.getElementsByTagName("pre");for(let i=0;i<pre_texts.length;i++){if(pre_texts[i].className!="paper")continue;let lines=pre_texts[i].innerHTML.split("\n");let result="";for(let j=0;j<lines.length;j++){if(lines[j].length>=80)result=result+spans[j%2]+lines[j]+"</span>\n";else result=result+spans[j%2]+lines[j]+" ".repeat(80-lines[j].length)+"</span>\n";}pre_texts[i].innerHTML=result;}fetch("./chapters.json").then(function(result){return result.json();}).then(function(json){let chapters=json.pages;for(let i=0;i<chapters.length;i++){if(chapters[i]===document.URL.replace(/^.*\//,"./")){let prevdiv=document.createElement("div");prevdiv.className="prev";if(i>0){prevdiv.innerHTML="<a href=\""+chapters[i-1]+"\">&#9667;</a>";}else{prevdiv.innerHTML="<p>&#9667;</p>";}document.body.appendChild(prevdiv);let nextdiv=document.createElement("div");nextdiv.className="next";if(i<chapters.length-1){nextdiv.innerHTML="<a href=\""+chapters[i+1]+"\">&#9657;</a>";}else{nextdiv.innerHTML="<p>&#9657;</p>";}document.body.appendChild(nextdiv);}}});</script></body></html> <p class="copyright">Copyright &#169; 2023-2026 Jan Danielzick (aka. BodgeMaster) &ndash; All rights reserved.</p><script>let spans=["<span class=\"paper green\">","<span>"];let pre_texts=document.getElementsByTagName("pre");for(let i=0;i<pre_texts.length;i++){if(pre_texts[i].className!="paper")continue;let lines=pre_texts[i].innerHTML.split("\n");let result="";for(let j=0;j<lines.length;j++){if(lines[j].length>=80)result=result+spans[j%2]+lines[j]+"</span>\n";else result=result+spans[j%2]+lines[j]+" ".repeat(80-lines[j].length)+"</span>\n";}pre_texts[i].innerHTML=result;}fetch("./chapters.json").then(function(result){return result.json();}).then(function(json){let chapters=json.pages;for(let i=0;i<chapters.length;i++){if(chapters[i]===document.URL.replace(/^.*\//,"./")){let prevdiv=document.createElement("div");prevdiv.className="prev";if(i>0){prevdiv.innerHTML="<a href=\""+chapters[i-1]+"\">&#9667;</a>";}else{prevdiv.innerHTML="<p>&#9667;</p>";}document.body.appendChild(prevdiv);let nextdiv=document.createElement("div");nextdiv.className="next";if(i<chapters.length-1){nextdiv.innerHTML="<a href=\""+chapters[i+1]+"\">&#9657;</a>";}else{nextdiv.innerHTML="<p>&#9657;</p>";}document.body.appendChild(nextdiv);}}});</script></body></html>

View File

@ -4,19 +4,18 @@
<!-- perspective: Jack --> <!-- perspective: Jack -->
<p> <p>
<!--
the fact that Mary sits in the front is already a given
-->
They drive on a dirt road alongside the dried-out <span class="comment"> They drive on a dirt road alongside the dried-out <span class="comment">
river name</span>. The road is in pretty poor condition and they get river name</span>. The road is in pretty poor condition and they get
shaken thoroughly. Mary sits in the front with Jack, showing him the way. shaken thoroughly.<br />
<br /> Mary appears to be having a blast:
She appears to be having a blast:
<span class="quote speech">Faster! Faster!</span><br /> <span class="quote speech">Faster! Faster!</span><br />
<span class="quote speech">I don&apos;t think Annie would appreciate <span class="quote speech">I don&apos;t think Annie would appreciate
that.</span><br /> that.</span><br />
<span class="quote speech">Aww.</span><br /> <span class="quote speech">Aww.</span><br />
They hear Annie say <span class="quote speech">thanks</span> from behind Annie says <span class="quote speech">thanks</span> from the rear seats.
Jack.<br />
<span class="comment">somezthing along the lines of &quot;You good back
there?&quot;</span>
</p> </p>
<p> <p>
<!-- <!--
@ -62,15 +61,17 @@
with a few walls that pertrude into the river and two with a few walls that pertrude into the river and two
<span class="comment">weers? translate: Stauwehre / Wehre</span>, one for <span class="comment">weers? translate: Stauwehre / Wehre</span>, one for
controlling the <span class="comment">inflow? tanslate: Zufluss</span>, controlling the <span class="comment">inflow? tanslate: Zufluss</span>,
one for a bypass <span class="comment"> can be adjusted with large one for a bypass. The floor of the tunnel sits significantly beneath
screws </span>. The floor of the tunnel sits significantly beneath the the river bed and, while the river bed is completely dry, there is still
river bed and, while the river bed is completely dry, there is still
some water inside. some water inside.
<span class="comment"><br />
TBD:<br /> <!--
- look at the large buried tank / branching point<br /> - trockenes Wehr am Einlass
- water in the tunnel
- bridge nearby
- look at the large buried tank / branching point
- go upstream to see where the river has gone - go upstream to see where the river has gone
</span> -->
</p> </p>
<p class="copyright">Copyright &#169; 2023-2026 Jan Danielzick (aka. BodgeMaster) &ndash; All rights reserved.</p><script>let spans=["<span class=\"paper green\">","<span>"];let pre_texts=document.getElementsByTagName("pre");for(let i=0;i<pre_texts.length;i++){if(pre_texts[i].className!="paper")continue;let lines=pre_texts[i].innerHTML.split("\n");let result="";for(let j=0;j<lines.length;j++){if(lines[j].length>=80)result=result+spans[j%2]+lines[j]+"</span>\n";else result=result+spans[j%2]+lines[j]+" ".repeat(80-lines[j].length)+"</span>\n";}pre_texts[i].innerHTML=result;}fetch("./chapters.json").then(function(result){return result.json();}).then(function(json){let chapters=json.pages;for(let i=0;i<chapters.length;i++){if(chapters[i]===document.URL.replace(/^.*\//,"./")){let prevdiv=document.createElement("div");prevdiv.className="prev";if(i>0){prevdiv.innerHTML="<a href=\""+chapters[i-1]+"\">&#9667;</a>";}else{prevdiv.innerHTML="<p>&#9667;</p>";}document.body.appendChild(prevdiv);let nextdiv=document.createElement("div");nextdiv.className="next";if(i<chapters.length-1){nextdiv.innerHTML="<a href=\""+chapters[i+1]+"\">&#9657;</a>";}else{nextdiv.innerHTML="<p>&#9657;</p>";}document.body.appendChild(nextdiv);}}});</script></body></html> <p class="copyright">Copyright &#169; 2023-2026 Jan Danielzick (aka. BodgeMaster) &ndash; All rights reserved.</p><script>let spans=["<span class=\"paper green\">","<span>"];let pre_texts=document.getElementsByTagName("pre");for(let i=0;i<pre_texts.length;i++){if(pre_texts[i].className!="paper")continue;let lines=pre_texts[i].innerHTML.split("\n");let result="";for(let j=0;j<lines.length;j++){if(lines[j].length>=80)result=result+spans[j%2]+lines[j]+"</span>\n";else result=result+spans[j%2]+lines[j]+" ".repeat(80-lines[j].length)+"</span>\n";}pre_texts[i].innerHTML=result;}fetch("./chapters.json").then(function(result){return result.json();}).then(function(json){let chapters=json.pages;for(let i=0;i<chapters.length;i++){if(chapters[i]===document.URL.replace(/^.*\//,"./")){let prevdiv=document.createElement("div");prevdiv.className="prev";if(i>0){prevdiv.innerHTML="<a href=\""+chapters[i-1]+"\">&#9667;</a>";}else{prevdiv.innerHTML="<p>&#9667;</p>";}document.body.appendChild(prevdiv);let nextdiv=document.createElement("div");nextdiv.className="next";if(i<chapters.length-1){nextdiv.innerHTML="<a href=\""+chapters[i+1]+"\">&#9657;</a>";}else{nextdiv.innerHTML="<p>&#9657;</p>";}document.body.appendChild(nextdiv);}}});</script></body></html>

View File

@ -1,5 +1,5 @@
<!DOCTYPE html><html><head><title> First Contact </title><link rel="stylesheet" type="text/css" href="html_resources/style.css"></head><body><svg class="hidden_filter"><filter id="crunchy_blur" x="0" y="0"><feFlood x="4" y="4" height="2" width="2"/><feComposite width="6" height="6" in2="SourceGraphic"/><feTile result="a"/><feComposite in="SourceGraphic" in2="a" operator="in"/><feMorphology operator="dilate" radius="1.4"/><feGaussianBlur stdDeviation="2.2"></feGaussianBlur></filter></svg><div class="home"><a href="index.html">&#8962;</a></div> <!DOCTYPE html><html><head><title> &lt;Lena first contact&gt; </title><link rel="stylesheet" type="text/css" href="html_resources/style.css"></head><body><svg class="hidden_filter"><filter id="crunchy_blur" x="0" y="0"><feFlood x="4" y="4" height="2" width="2"/><feComposite width="6" height="6" in2="SourceGraphic"/><feTile result="a"/><feComposite in="SourceGraphic" in2="a" operator="in"/><feMorphology operator="dilate" radius="1.4"/><feGaussianBlur stdDeviation="2.2"></feGaussianBlur></filter></svg><div class="home"><a href="index.html">&#8962;</a></div>
<h1>First Contact</h1> <h1>&lt;Lena first contact&gt;</h1>
<!-- perspective: Michelle --> <!-- perspective: Michelle -->
<p> <p>
@ -7,9 +7,9 @@
inside. Jack grabs a large box filled with all sorts of cables and spare inside. Jack grabs a large box filled with all sorts of cables and spare
parts and follows them. Annie follows not long after, carrying a stack of parts and follows them. Annie follows not long after, carrying a stack of
thick binders of documentation. They walk up the stairs and set their thick binders of documentation. They walk up the stairs and set their
things down somewhere off to the side. Then, they go for round two, things down somewhere off to the side. Then, they go for round
fetching a generator, two fuel canisters, a toolbox, and a box of random two, fetching a generator, two fuel canisters, a toolbox,
nuts and bolts and other metal parts from the truck. <span class="comment">something else</span> from the truck.
<!-- <!--
Things they will need later: Things they will need later:
- oscilloscope - oscilloscope
@ -46,7 +46,7 @@
With some effort, she manages to wrangle it to the other side of the With some effort, she manages to wrangle it to the other side of the
cable.<br /> cable.<br />
<span class="quote speech">James, Annie, can you catch this? Careful, <span class="quote speech">James, Annie, can you catch this? Careful,
heavy.</span><br /> it&apos;s heavy.</span><br />
The two stand across from each other and extend their arms. Michelle The two stand across from each other and extend their arms. Michelle
lets go and they catch it. She turns her attention back to the gearbox lets go and they catch it. She turns her attention back to the gearbox
in front of her. It is completely dried out and the large gears appear in front of her. It is completely dried out and the large gears appear

View File

@ -56,9 +56,8 @@
told to fill in the rest. told to fill in the rest.
</p> </p>
<p> <p>
Not much later, she finds herself at trial. As laid out in the paperwork, <span class="comment">something is missing here, maybe add a
she gets banished. She is almost kinda surprised it wasn&apos;t paragraph about the trial itself</span>
a trick, but also relieved.
</p> </p>
<p> <p>
Isabelle is taken to a cell with no bed or toilet, just a bench. Isabelle is taken to a cell with no bed or toilet, just a bench.
@ -96,15 +95,15 @@
It&apos;s a short ride from the prison to the nearest train station. It&apos;s a short ride from the prison to the nearest train station.
Apart from a few cars moving around, the entire area is completely dark. Apart from a few cars moving around, the entire area is completely dark.
No steetlights, no lit-up windows. It is dark enough that she can see No steetlights, no lit-up windows. It is dark enough that she can see
a faint shimmer on the dome ceiling, reflecting the light from other a faint shimmer on the dome ceiling, reflecting from other parts of
parts of the city. the city.
</p> </p>
<p> <p>
A train is waiting at the platform. Rather than the usual metro, this one A train is waiting at the platform. Rather than the usual metro, this one
is made up of a battery locomotive and a few flat bed cars. The guard is made up of a battery locomotive and a few flatbed cars. The guard
hands the key to her handcuffs over to a guy who seems to be in charge. hands the key to her handcuffs over to a guy who seems to be in charge.
They sign some paperwork. Then, the guard leaves and the guy tells her They sign some paperwork. Then, the guard leaves and the guy tells her
to go sit on the last car at the end of the train. to go sit on the last of the flatbed cars.
</p> </p>
<p> <p>
A few minutes later, the same repeats with Lucas. He sits down next to A few minutes later, the same repeats with Lucas. He sits down next to

View File

@ -9,29 +9,26 @@
bench next to the airlock. Emily helps her all the way into the bench next to the airlock. Emily helps her all the way into the
suit. Lena sits there for a moment, heavily breathing, while Emily waits. suit. Lena sits there for a moment, heavily breathing, while Emily waits.
<br /> <br />
<span class="quote speech">Sorry, I can&apos;t... too exhausted...</span> <span class="quote speech">Sorry, I can&apos;t... I feel exhausted.</span>
<br />
Emily nods and continues getting both of them ready.
</p> </p>
<p> <p>
She takes their helmets and brings them into the airlock. Then, she Emily takes their helmets and brings them into the airlock. She returns
returns for a life support unit, pulls it out of the rack in the wall, for a life support unit, pulls it out of the rack in the wall, and sets
and sets it down on the floor. Following a mental checklist, she makes it down on the floor. Following a mental checklist, she makes sure that
sure that the oxygen bottle is connected properly and the gauges read the oxygen bottle is connected properly and the gauges read what they
what they should. Everything okay... or is it? She double-checks with should. Everything okay... or is it? She double-checks with the check
the check list on the wall. Yes, this unit is ready. She triple-checks list on the wall. Yes, this unit is ready. She triple-checks everything
everything &ndash; first time it actually matters. Reasonably satisfied &ndash; first time it actually matters. Reasonably satisfied with her
with her findings, she carries it over to the airlock. Then, she repeats findings, she carries it over to the airlock. Then, she repeats this
this procedure for another unit. Finally, she helps Lena up and they procedure for the second unit. Finally, she helps Lena up and they get
get into the airlock. into the airlock.
</p> </p>
<p> <p>
Helmets on, inner door closed, airlock cycling. The pumps are getting The pumps are getting quieter and quieter. Lena kneels on the floor
quieter and quieter as the pressure drops. Lena kneels on the floor
holding a bunch of flowers from the biotope module, her life support holding a bunch of flowers from the biotope module, her life support
unit next to her on a short tether. Emily puts it on her back and helps unit next to her on a short tether. Emily puts it on her back and and
her up. The outer door of the airlock silently swings aside and they helps her up. The outer door of the airlock silently swings aside and
start walking, Lena leaning on her. they start walking, Lena leaning on Emily.
</p> </p>
<p> <p>
They reach the graveyard and walk over to the recent graves. The entire They reach the graveyard and walk over to the recent graves. The entire
@ -51,7 +48,7 @@
<span class="quote speech">Ultimately, you were right.</span> She is <span class="quote speech">Ultimately, you were right.</span> She is
interrupted by coughing. <span class="quote speech">If more had taken interrupted by coughing. <span class="quote speech">If more had taken
Tony&apos;s cure &ndash; no matter what risk it posed ... &ndash; maybe Tony&apos;s cure &ndash; no matter what risk it posed ... &ndash; maybe
some of them would have made it.</span><br /> some of them would be alive now.</span><br />
<span class="quote speech">What about you?</span> Emily asks with a <span class="quote speech">What about you?</span> Emily asks with a
slither of hope in her voice.<br /> slither of hope in her voice.<br />
<span class="quote speech">No &ndash; no cure can save me, it&apos;s too <span class="quote speech">No &ndash; no cure can save me, it&apos;s too

View File

@ -1,6 +1,6 @@
<!DOCTYPE html><html><head><title> One Step For A Child </title><link rel="stylesheet" type="text/css" href="html_resources/style.css"></head><body><svg class="hidden_filter"><filter id="crunchy_blur" x="0" y="0"><feFlood x="4" y="4" height="2" width="2"/><feComposite width="6" height="6" in2="SourceGraphic"/><feTile result="a"/><feComposite in="SourceGraphic" in2="a" operator="in"/><feMorphology operator="dilate" radius="1.4"/><feGaussianBlur stdDeviation="2.2"></feGaussianBlur></filter></svg><div class="home"><a href="index.html">&#8962;</a></div> <!DOCTYPE html><html><head><title> &lt;End&gt; </title><link rel="stylesheet" type="text/css" href="html_resources/style.css"></head><body><svg class="hidden_filter"><filter id="crunchy_blur" x="0" y="0"><feFlood x="4" y="4" height="2" width="2"/><feComposite width="6" height="6" in2="SourceGraphic"/><feTile result="a"/><feComposite in="SourceGraphic" in2="a" operator="in"/><feMorphology operator="dilate" radius="1.4"/><feGaussianBlur stdDeviation="2.2"></feGaussianBlur></filter></svg><div class="home"><a href="index.html">&#8962;</a></div>
<h1> One Step For A Child </h1> <h1> &lt;End&gt;</h1>
<!-- perspective: Jack --> <!-- perspective: Jack -->
<p> <p>