Add .gitignore, static assets, template & css updates

This commit is contained in:
russell@unturf.com 2026-04-21 18:27:17 -04:00
parent 0047dd1ac1
commit e1f7330592
7 changed files with 1310 additions and 234 deletions

6
.gitignore vendored Normal file
View file

@ -0,0 +1,6 @@
*.egg-info
*.pyc
build/
dist/
__pycache__/

View file

@ -0,0 +1,491 @@
/*
960 Grid System ~ Core CSS.
Learn more ~ http://960.gs/
Licensed under GPL and MIT.
*/
/* =Containers
--------------------------------------------------------------------------------*/
.container_12,
.container_16
{
margin-left: auto;
margin-right: auto;
width: 960px;
}
/* =Grid >> Global
--------------------------------------------------------------------------------*/
.grid_1,
.grid_2,
.grid_3,
.grid_4,
.grid_5,
.grid_6,
.grid_7,
.grid_8,
.grid_9,
.grid_10,
.grid_11,
.grid_12,
.grid_13,
.grid_14,
.grid_15,
.grid_16
{
display: inline;
float: left;
margin-left: 10px;
margin-right: 10px;
}
.container_12 .grid_3,
.container_16 .grid_4
{
width: 220px;
}
.container_12 .grid_6,
.container_16 .grid_8
{
width: 460px;
}
.container_12 .grid_9,
.container_16 .grid_12
{
width: 700px;
}
.container_12 .grid_12,
.container_16 .grid_16
{
width: 940px;
}
/* =Grid >> Children (Alpha ~ First, Omega ~ Last)
--------------------------------------------------------------------------------*/
.alpha
{
margin-left: 0;
}
.omega
{
margin-right: 0;
}
/* =Grid >> 12 Columns
--------------------------------------------------------------------------------*/
.container_12 .grid_1
{
width: 60px;
}
.container_12 .grid_2
{
width: 140px;
}
.container_12 .grid_4
{
width: 300px;
}
.container_12 .grid_5
{
width: 380px;
}
.container_12 .grid_7
{
width: 540px;
}
.container_12 .grid_8
{
width: 620px;
}
.container_12 .grid_10
{
width: 780px;
}
.container_12 .grid_11
{
width: 860px;
}
/* =Grid >> 16 Columns
--------------------------------------------------------------------------------*/
.container_16 .grid_1
{
width: 40px;
}
.container_16 .grid_2
{
width: 100px;
}
.container_16 .grid_3
{
width: 160px;
}
.container_16 .grid_5
{
width: 280px;
}
.container_16 .grid_6
{
width: 340px;
}
.container_16 .grid_7
{
width: 400px;
}
.container_16 .grid_9
{
width: 520px;
}
.container_16 .grid_10
{
width: 580px;
}
.container_16 .grid_11
{
width: 640px;
}
.container_16 .grid_13
{
width: 760px;
}
.container_16 .grid_14
{
width: 820px;
}
.container_16 .grid_15
{
width: 880px;
}
/* =Prefix Extra Space >> Global
--------------------------------------------------------------------------------*/
.container_12 .prefix_3,
.container_16 .prefix_4
{
padding-left: 240px;
}
.container_12 .prefix_6,
.container_16 .prefix_8
{
padding-left: 480px;
}
.container_12 .prefix_9,
.container_16 .prefix_12
{
padding-left: 720px;
}
/* =Prefix Extra Space >> 12 Columns
--------------------------------------------------------------------------------*/
.container_12 .prefix_1
{
padding-left: 80px;
}
.container_12 .prefix_2
{
padding-left: 160px;
}
.container_12 .prefix_4
{
padding-left: 320px;
}
.container_12 .prefix_5
{
padding-left: 400px;
}
.container_12 .prefix_7
{
padding-left: 560px;
}
.container_12 .prefix_8
{
padding-left: 640px;
}
.container_12 .prefix_10
{
padding-left: 800px;
}
.container_12 .prefix_11
{
padding-left: 880px;
}
/* =Prefix Extra Space >> 16 Columns
--------------------------------------------------------------------------------*/
.container_16 .prefix_1
{
padding-left: 60px;
}
.container_16 .prefix_2
{
padding-left: 120px;
}
.container_16 .prefix_3
{
padding-left: 180px;
}
.container_16 .prefix_5
{
padding-left: 300px;
}
.container_16 .prefix_6
{
padding-left: 360px;
}
.container_16 .prefix_7
{
padding-left: 420px;
}
.container_16 .prefix_9
{
padding-left: 540px;
}
.container_16 .prefix_10
{
padding-left: 600px;
}
.container_16 .prefix_11
{
padding-left: 660px;
}
.container_16 .prefix_13
{
padding-left: 780px;
}
.container_16 .prefix_14
{
padding-left: 840px;
}
.container_16 .prefix_15
{
padding-left: 900px;
}
/* =Suffix Extra Space >> Global
--------------------------------------------------------------------------------*/
.container_12 .suffix_3,
.container_16 .suffix_4
{
padding-right: 240px;
}
.container_12 .suffix_6,
.container_16 .suffix_8
{
padding-right: 480px;
}
.container_12 .suffix_9,
.container_16 .suffix_12
{
padding-right: 720px;
}
/* =Suffix Extra Space >> 12 Columns
--------------------------------------------------------------------------------*/
.container_12 .suffix_1
{
padding-right: 80px;
}
.container_12 .suffix_2
{
padding-right: 160px;
}
.container_12 .suffix_4
{
padding-right: 320px;
}
.container_12 .suffix_5
{
padding-right: 400px;
}
.container_12 .suffix_7
{
padding-right: 560px;
}
.container_12 .suffix_8
{
padding-right: 640px;
}
.container_12 .suffix_10
{
padding-right: 800px;
}
.container_12 .suffix_11
{
padding-right: 640px;
}
/* =Suffix Extra Space >> 16 Columns
--------------------------------------------------------------------------------*/
.container_16 .suffix_1
{
padding-right: 60px;
}
.container_16 .suffix_2
{
padding-right: 120px;
}
.container_16 .suffix_3
{
padding-right: 180px;
}
.container_16 .suffix_5
{
padding-right: 300px;
}
.container_16 .suffix_6
{
padding-right: 360px;
}
.container_16 .suffix_7
{
padding-right: 420px;
}
.container_16 .suffix_9
{
padding-right: 540px;
}
.container_16 .suffix_10
{
padding-right: 600px;
}
.container_16 .suffix_11
{
padding-right: 660px;
}
.container_16 .suffix_13
{
padding-right: 780px;
}
.container_16 .suffix_14
{
padding-right: 840px;
}
.container_16 .suffix_15
{
padding-right: 900px;
}
/* =Clear Floated Elements
--------------------------------------------------------------------------------*/
/* http://sonspring.com/journal/clearing-floats */
html body * span.clear,
html body * div.clear,
html body * li.clear,
html body * dd.clear
{
background: none;
border: 0;
clear: both;
display: block;
float: none;
font-size: 0;
list-style: none;
margin: 0;
padding: 0;
overflow: hidden;
visibility: hidden;
width: 0;
height: 0;
}
/* http://www.positioniseverything.net/easyclearing.html */
.clearfix:after
{
clear: both;
content: '.';
display: block;
visibility: hidden;
height: 0;
}
.clearfix
{
display: inline-block;
}
* html .clearfix
{
height: 1%;
}
.clearfix
{
display: block;
}

View file

@ -0,0 +1,69 @@
.hll { background-color: #404040 }
.c { color: #999999; font-style: italic } /* Comment */
.err { color: #a61717; background-color: #e3d2d2 } /* Error */
.g { color: #d0d0d0 } /* Generic */
.k { color: #6ab825; font-weight: bold } /* Keyword */
.l { color: #d0d0d0 } /* Literal */
.n { color: #d0d0d0 } /* Name */
.o { color: #d0d0d0 } /* Operator */
.x { color: #d0d0d0 } /* Other */
.p { color: #d0d0d0 } /* Punctuation */
.cm { color: #999999; font-style: italic } /* Comment.Multiline */
.cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
.c1 { color: #999999; font-style: italic } /* Comment.Single */
.cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
.gd { color: #d22323 } /* Generic.Deleted */
.ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
.gr { color: #d22323 } /* Generic.Error */
.gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
.gi { color: #589819 } /* Generic.Inserted */
.go { color: #cccccc } /* Generic.Output */
.gp { color: #aaaaaa } /* Generic.Prompt */
.gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
.gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
.gt { color: #d22323 } /* Generic.Traceback */
.kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
.kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */
.kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */
.kp { color: #6ab825 } /* Keyword.Pseudo */
.kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
.kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
.ld { color: #d0d0d0 } /* Literal.Date */
.m { color: #3677a9 } /* Literal.Number */
.s { color: #ed9d13 } /* Literal.String */
.na { color: #bbbbbb } /* Name.Attribute */
.nb { color: #24909d } /* Name.Builtin */
.nc { color: #447fcf; text-decoration: underline } /* Name.Class */
.no { color: #40ffff } /* Name.Constant */
.nd { color: #ffa500 } /* Name.Decorator */
.ni { color: #d0d0d0 } /* Name.Entity */
.ne { color: #bbbbbb } /* Name.Exception */
.nf { color: #447fcf } /* Name.Function */
.nl { color: #d0d0d0 } /* Name.Label */
.nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
.nx { color: #d0d0d0 } /* Name.Other */
.py { color: #d0d0d0 } /* Name.Property */
.nt { color: #6ab825; font-weight: bold } /* Name.Tag */
.nv { color: #40ffff } /* Name.Variable */
.ow { color: #6ab825; font-weight: bold } /* Operator.Word */
.w { color: #666666 } /* Text.Whitespace */
.mf { color: #3677a9 } /* Literal.Number.Float */
.mh { color: #3677a9 } /* Literal.Number.Hex */
.mi { color: #3677a9 } /* Literal.Number.Integer */
.mo { color: #3677a9 } /* Literal.Number.Oct */
.sb { color: #ed9d13 } /* Literal.String.Backtick */
.sc { color: #ed9d13 } /* Literal.String.Char */
.sd { color: #ed9d13 } /* Literal.String.Doc */
.s2 { color: #ed9d13 } /* Literal.String.Double */
.se { color: #ed9d13 } /* Literal.String.Escape */
.sh { color: #ed9d13 } /* Literal.String.Heredoc */
.si { color: #ed9d13 } /* Literal.String.Interpol */
.sx { color: #ffa500 } /* Literal.String.Other */
.sr { color: #ed9d13 } /* Literal.String.Regex */
.s1 { color: #ed9d13 } /* Literal.String.Single */
.ss { color: #ed9d13 } /* Literal.String.Symbol */
.bp { color: #24909d } /* Name.Builtin.Pseudo */
.vc { color: #40ffff } /* Name.Variable.Class */
.vg { color: #40ffff } /* Name.Variable.Global */
.vi { color: #40ffff } /* Name.Variable.Instance */
.il { color: #3677a9 } /* Literal.Number.Integer.Long */

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -2,14 +2,14 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<title>{% block title %}{{ request.domain }}{% endblock %}</title> <title>{% block title %}foxhop.net{% endblock %}</title>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#06060e">
{% include 'snippets/stylesheet-includes.j2' %} <link rel="stylesheet" href="/static/css/common.css">
<link rel="stylesheet" href="/static/theme/chaostheory/css/960.css">
<link rel="stylesheet" href="/static/theme/chaostheory/css/pygments-native.css">
<link rel="stylesheet" href="/static/theme/chaostheory/css/theme.css"> <link rel="stylesheet" href="/static/theme/chaostheory/css/theme.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Space+Mono:wght@400;700&display=swap">
{% include 'snippets/javascript-includes.j2' %} {% include 'snippets/javascript-includes.j2' %}
</head> </head>
@ -22,36 +22,71 @@
{% include 'snippets/flash-alerts.j2' %} {% include 'snippets/flash-alerts.j2' %}
<div class="searchbox"> <div id="header">
{% include 'snippets/search.j2' %} <a href="/">foxhop.net</a>
</div> </div>
<h1 class="brand"><a href="/">foxhop<span class="brand-dot">.</span></a></h1> <div class="container_16">
<p class="tagline">sensitive dependence on initial conditions</p>
<div id="remarkbox-menu"> <div id="wikibar" class="grid_16">
{%- block menu %} <div id="wikibar-left" class="grid_10">
<a href="/">home</a> | <a href="/" class="on">home</a>
<a href="/new">new thread</a> |
{%- if request.user %} {%- if request.user %}
{{ snippets.user_link(request.user) }} <a href="/log-out">[log out]</a> {{ snippets.user_link(request.user) }}
<a href="/log-out">log out</a>
{%- else %} {%- else %}
<a href="/join-or-log-in">join or log in</a> <a href="/join-or-log-in">join or log in</a>
{%- endif %} {%- endif %}
{%- endblock %} </div>
<div id="wikibar-right" class="grid_6">
<form action="/search" id="search" onsubmit="submit.disabled = true; return true;">
<input type="hidden" name="namespace" value="{{ request.namespace.name }}">
<input type="input" name="keywords" id="keywords" placeholder="search" required/>
</form>
</div>
</div>
<div class="clear"></div>
<div id="content" class="grid_16">
{% block content %}
{% endblock %}
</div>
</div> </div>
<div class="main"> <div id="footer">
{% block content %}
{% endblock %}
</div>
{% include 'snippets/phone-menu.j2' %}
<div id="remarkbox-footer">
<br />
{% include 'snippets/powered-by.j2' %} {% include 'snippets/powered-by.j2' %}
</div> </div>
<script>
// Build TOC from empty div.contents pandoc placeholder + heading id attrs
document.addEventListener('DOMContentLoaded', function() {
var toc = document.querySelector('#content div.contents');
if (!toc) return;
var content = document.getElementById('content');
var headings = content.querySelectorAll('h2, h3, h4');
if (!headings.length) { toc.style.display = 'none'; return; }
var title = document.createElement('p');
title.style.cssText = 'font-weight:bold; margin:0 0 6px 0; color:#6DCFF6; font-size:0.9em;';
title.textContent = 'Contents';
var ul = document.createElement('ul');
ul.style.margin = '0';
headings.forEach(function(h) {
if (!h.id) return;
var depth = parseInt(h.tagName[1]) - 2;
var li = document.createElement('li');
li.style.paddingLeft = (depth * 12) + 'px';
var a = document.createElement('a');
a.href = '#' + h.id;
a.textContent = h.textContent;
li.appendChild(a);
ul.appendChild(li);
});
toc.appendChild(title);
toc.appendChild(ul);
});
</script>
</body> </body>
</html> </html>