Initial commit.

Signed-off-by: Andreas Widen <aw@luflow.net>
This commit is contained in:
Andreas Widen 2026-07-27 17:57:03 +02:00
commit a4a5c7daa5
Signed by: hfsoulz
GPG key ID: 5B85F9B5F576A667
1389 changed files with 241399 additions and 0 deletions

View file

@ -0,0 +1,38 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
.breadcrumbs {
background-color: #e6e6e6;
background-image: url('../img/breadcrumbs-bg.png');
color: #e6e6e6;
font-size: 0.8em;
padding: 0px 15px;
}
.breadcrumbs span {
display: inline-block;
font-size: 0.7em;
line-height: 2em;
padding: 0px 5px;
}
.crumb:link,
.crumb:visited {
border-style: none;
color: #e6e6e6;
display: inline-block;
line-height: 2em;
padding: 0px 5px;
text-decoration: none;
}
.crumb:active,
.crumb:focus,
.crumb:hover {
color: #fade8b;
}
.crumb-active:link,
.crumb-active:visited {
color: #fade8b;
}

64
static/css/buttons.css Normal file
View file

@ -0,0 +1,64 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
.button-big,
.button-big:link,
.button-big:visited {
border-color: #f4bb15;
border-radius: 6px;
border-style: solid;
border-width: thin;
color: black;
display: inline-block;
font-size: 0.8em;
height: 47px;
line-height: 47px;
margin: 10px;
padding: 0px 30px;
text-align: center;
vertical-align: middle;
text-decoration: none;
}
.button-big:active,
.button-big:focus,
.button-big:hover {
border-color: black;
}
.button-light,
.button-light:link,
.button-light:visited {
color: white;
}
.button-light:active,
.button-light:focus,
.button-light:hover {
border-color: white;
}
.button-little,
.button-little:link,
.button-little:visited {
border-color: #c0c0c0;
border-radius: 4px;
border-style: solid;
border-width: thin;
color: #525252;
display: inline-block;
font-size: 0.8em;
margin: 5px;
padding: 5px 10px;
vertical-align: top;
text-decoration: none;
}
.button-little-active:link,
.button-little-active:visited,
.button-little:active,
.button-little:focus,
.button-little:hover {
background-color: #ffcc00;
border-color: #d4aa00;
}

122
static/css/common.css Normal file
View file

@ -0,0 +1,122 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: sans-serif;
}
#content {
min-height: 100vh;
background: #333;
width: 100%;
margin: 0 auto;
}
/* Offset element (A11Y)
- Hide the element in graphic Web browsers.
- But display it in text-based browsers.
*/
.a11y-offset {
position: absolute;
left: -50000px;
}
.bold {
font-weight: bold;
}
.centered-block {
margin-left: auto;
margin-right: auto;
}
.centered-text {
text-align: center;
}
.hidden {
visibility: hidden;
}
.justify {
text-align: justify;
}
.justify-left {
text-align: left;
}
.justify-right {
text-align: right;
}
.light-text {
color: #e6e6e6;
}
.limit-width {
max-width: 960px;
}
.mono {
font-family: monospace;
}
.link-yellow:link,
.link-yellow:visited {
border-style: none;
color: #f4bb15;
}
.link-yellow:active,
.link-yellow:focus,
.link-yellow:hover {
color: #f49b15;
}
.noise-bg {
background-color: #333;
background-image: url('../img/noise-bg.png');
}
.page-number-indicator {
display: block;
font-size: 0.4em;
font-weight: normal;
padding: 10px 5px;
}
.page-selector {
box-sizing: border-box;
padding: 20px;
}
.responsive-image {
display: block;
height: auto;
max-width: 100%;
}
.sheet {
box-sizing: border-box;
}
.top-shadow-bg {
background-image: url('../img/depression-shadow-top.png');
background-repeat: repeat-x;
}
@media screen and (min-width: 1280px) {
.sheet {
display: inline-block;
vertical-align: top;
width: 75%;
}
.sheet-padded {
padding-right: 20px;
}
}

73
static/css/elements.css Normal file
View file

@ -0,0 +1,73 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
blockquote {
color: #565656;
font-style: italic;
}
body {
font-family: sans-serif;
font-size: 16px;
margin: 0px;
}
code {
color: maroon;
font-size: 0.8em;
}
code,
pre {
font-family: monospace;
}
html {
background-color: #333;
}
main {
background-color: white;
}
pre {
background-color: #f6f6f6;
border-style: solid;
border-color: #d4cbb6;
border-radius: 0.3em;
border-width: thin;
overflow: auto;
padding: 1.2em;
}
pre,
pre code {
color: inherit;
font-size: 0.9em;
}
table {
border-collapse: collapse;
width: 100%;
}
table,
td,
th {
border-color: gray;
border-style: solid;
border-width: thin;
}
td,
th {
padding: 5px 10px;
}
td {
font-size: 0.9em;
}
th {
background-color: #f5f5f5;
}

10
static/css/footer.css Normal file
View file

@ -0,0 +1,10 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
footer {
background-color: #333;
color: #e6e6e6;
font-size: 0.8em;
padding: 20px;
text-align: center;
}

190
static/css/header.css Normal file
View file

@ -0,0 +1,190 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
header {
position: sticky;
transition: transform 0.25s ease-in-out;
top: 0;
width: 100%;
min-height: 66px;
background: #333;
border-color: #1a1a1a;
border-style: none none solid none;
border-width: thin;
padding: 0 32px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 0.9em;
z-index: 1000;
}
.nav-up {
transform: translateY(-100px);
}
.nav-down {
transform: translateY(0px);
}
.branding:link,
.branding:active,
.branding:focus,
.branding:hover,
.branding:visited {
background-image: url('../img/branding.png');
background-repeat: no-repeat;
border-style: none;
display: inline-block;
height: 55px;
width: 54px;
}
header ul {
position: relative;
}
header ul li {
position: relative;
list-style: none;
float: left;
}
header ul li a {
color: #fff;
font-size: 1.1em;
padding: 28px 25px;
text-decoration: none;
display: flex;
justify-content: space-between;
}
header ul li a:link {
color: #e6e6e6;
}
header ul li a:hover,
.menu-item-active:link,
.menu-item-active:visited {
color: #f4bb15;
}
a.menu-item-active:link,
a.menu-item-active:visited {
background-image: url('../img/menu-item-active-bg.png');
background-position: bottom center;
background-repeat: no-repeat;
}
header ul li a:hover {
background: #434343;
}
header ul li b {
padding-left: 4px;
}
header ul li ul {
position: absolute;
left: 0;
width: 200px;
background: #333;
display: none;
}
header ul li:hover > ul {
display: block;
}
header ul li ul li {
position: relative;
width: 100%;
border: 1px solid rgba(0, 0, 0, 0.2);
}
header ul li ul li ul {
top: 0;
left: 200px;
}
/* make it responsive */
@media (max-width: 900px) {
header {
padding: 10px 32px;
}
header nav {
position: absolute;
width: 100%;
top: 66px;
left: 0;
background: #333;
display: none;
}
header.active nav {
display: initial;
}
header nav ul li {
width: 100%;
}
a.menu-item-active:link,
a.menu-item-active:visited {
background-image: none;
}
header nav ul li ul {
position: relative;
width: 100%;
left: 0;
}
header ul li ul li ul {
top: 0;
left: 0;
}
header nav ul li:hover ul li {
background: #333;
}
.menuToggle {
position: relative;
width: 40px;
height: 50px;
cursor: pointer;
display: flex;
justify-content: center;
align-items: center;
}
.menuToggle::before {
content: '';
position: absolute;
width: 100%;
height: 3px;
background: #fff;
transform: translateY(-12px);
box-shadow: 0 12px #fff;
}
.menuToggle::after {
content: '';
position: absolute;
width: 100%;
height: 3px;
background: #fff;
transform: translateY(12px);
}
header.active .menuToggle::before {
transform: rotate(45deg);
box-shadow: 0 0 #fff;
}
header.active .menuToggle::after {
transform: rotate(315deg);
}
}

130
static/css/index.css Normal file
View file

@ -0,0 +1,130 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
h2 {
color: #4d4d4d;
font-size: 2.5em;
margin: 50px 0px;
}
h3 {
color: #4d4d4d;
font-size: 2em;
font-weight: normal;
margin: 50px 0px;
}
.action-box {
padding: 40px 0px;
}
.featured-content {
background-color: #3d3d3d;
background-image:
url('../img/checkerboard-bg.png'), url('../img/featured-box-bg.png');
background-position: top, bottom;
background-repeat: repeat, repeat-x;
color: white;
font-size: 17px;
padding: 40px 20px;
}
.featured-content > ul {
list-style-image: url('../img/white-star.png');
margin: auto;
max-width: 960px;
padding: 0px 30px;
}
.featured-content li {
padding: 10px 0px;
}
.discovery-box {
background-color: #333;
background-image:
url('../img/depression-shadow-top.png'), url('../img/noise-bg.png');
background-repeat: repeat-x, repeat;
color: #e6e6e6;
padding: 40px 10px;
text-align: center;
}
.discovery-box h2,
.discovery-box h3 {
color: #e6e6e6;
}
.screenshots-box {
padding: 40px 0px 0px 0px;
}
.screenshot-preview {
font-size: 0.7em;
margin: 40px auto;
max-width: 250px;
text-align: center;
}
.screenshot-preview a,
.screenshot-preview img {
border-radius: 5px;
display: block;
}
.screenshot-preview-description {
padding-top: 8px;
color: #e6e6e6;
}
.screenshot-preview a:link,
.screenshot-preview a:visited {
border-color: transparent;
border-style: solid;
border-width: thin;
box-shadow: 0 0 4px gray;
color: #e6e6e6;
position: relative;
}
.screenshot-preview a:active,
.screenshot-preview a:focus,
.screenshot-preview a:hover {
border-color: black;
box-shadow: 0 0 4px black;
}
.screenshot-viewer {
background-color: black;
}
@media screen and (min-width: 300px) {
.screenshot-inset-shadow {
border-radius: 5px;
box-shadow: inset 0 0 4px black;
display: block;
height: 140px;
position: absolute;
top: 0px;
width: 250px;
}
.screenshot-preview a:active .screenshot-inset-shadow,
.screenshot-preview a:focus .screenshot-inset-shadow,
.screenshot-preview a:hover .screenshot-inset-shadow {
box-shadow: none;
}
}
@media screen and (min-width: 480px) {
.button-big:link,
.button-big:visited {
display: inline-block;
}
.screenshot-preview {
display: inline-block;
margin: 15px;
vertical-align: top;
}
}

View file

@ -0,0 +1,59 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
.item-preview,
.item-preview:link,
.item-preview:visited {
border-color: #f4bb15;
border-style: none none solid none;
border-width: thin;
color: #4d4d4d;
display: block;
padding: 10px 15px;
text-align: left;
text-decoration: none;
}
.item-preview:active,
.item-preview:focus,
.item-preview:hover {
background-color: #f4bb15;
}
.item-preview h3 {
font-size: 1em;
font-weight: bold;
margin: 0px;
padding-top: 16px;
}
.item-preview p {
padding-top: 16px;
}
.item-date {
font-size: 0.9em;
}
@media screen and (min-width: 1024px) {
.item-preview,
.item-preview:link,
.item-preview:visited {
background-color: transparent;
border-color: transparent;
border-style: solid;
border-width: thin;
display: inline-block;
margin: 10px 0px 15px 0px;
vertical-align: top;
width: 270px;
text-decoration: none;
}
.item-preview:active,
.item-preview:focus,
.item-preview:hover {
border-color: #f4bb15;
}
}

71
static/css/page.css Normal file
View file

@ -0,0 +1,71 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
h1,
h2,
h3,
h4,
h5 {
color: #4d4d4d;
line-height: 1.2em;
}
h1,
h2,
h3 {
margin-top: 32px;
margin-bottom: 32px;
}
h4,
h5 {
margin-top: 16px;
margin-bottom: 16px;
}
h2 {
font-size: 2.5em;
text-align: center;
line-height: 1.2em;
padding: 16px 0;
}
h3 {
font-size: 1.5em;
line-height: 1.2em;
}
/* Aim for ~12 words per line for good readability. */
.page.limit-width,
.page-post.limit-width {
max-width: 720px;
}
.page-post {
background-color: white;
padding: 50px 20px;
}
.page {
background-color: white;
padding: 50px 20px;
}
.page p {
margin-top: 16px;
margin-bottom: 16px;
}
.page a:link,
.page a:visited {
color: #0064ff;
text-decoration: none;
}
.page a:active,
.page a:focus,
.page a:hover {
border-style: none none dashed none;
border-width: thin;
color: #357edd;
}

108
static/css/post.css Normal file
View file

@ -0,0 +1,108 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
article {
line-height: 1.4em;
}
article p {
margin-top: 16px;
margin-bottom: 16px;
}
article ul {
margin-left: 32px;
}
article a:link,
article a:visited {
color: #0064ff;
text-decoration: none;
}
article a:active,
article a:focus,
article a:hover {
border-style: none none dashed none;
border-width: thin;
color: #357edd;
}
article a img {
border-style: none;
}
article h2 {
font-size: 1.8em;
text-align: left;
line-height: 1.2em;
padding: 0 0;
}
article h4 {
font-size: 2em;
padding: 30px 0px;
}
article h5 {
font-size: 1.5em;
}
article audio,
article img,
article video {
display: block;
margin: 50px auto;
max-width: 100%;
}
.post-metadata {
color: #4d4d4d;
margin-bottom: 50px;
}
.topic-list {
margin: 50px 0px;
}
.topic-list p {
font-weight: bold;
margin-bottom: 30px;
}
/* Aim for ~12 words per line for good readability. */
article.limit-width {
max-width: 720px;
}
.license {
font-size: 0.8em;
line-height: 1.4em;
}
article button {
padding: 2px;
margin: 2px;
min-width: 5em;
}
/* force wrapping to new line so that scrollbar isn't needed: */
code[class*='language-'] {
white-space: pre-wrap;
word-break: break-all;
}
.copy-code {
position: absolute;
top: 0;
right: 0;
background-color: #white;
border-radius: 6px;
padding: 0.25rem 0.5rem;
font-size: 0.75rem;
line-height: 1rem;
}
.copy-code:hover {
background-color: #f6f6f6;
}

94
static/css/sidebar.css Normal file
View file

@ -0,0 +1,94 @@
/* luflow.net web site */
/* Public domain 2025. All rights waived */
.side-bar {
box-sizing: border-box;
color: #555753;
font-size: 0.9em;
padding: 30px 0px;
}
.bar-title {
color: #525252;
font-size: 14px;
}
.bar-list {
list-style-type: none;
padding: 0px;
}
.bar-item {
display: inline-block;
margin: 10px 5px;
vertical-align: top;
}
.bar-link:link,
.bar-link:visited {
border-color: silver;
border-radius: 4px;
border-style: solid;
border-width: thin;
color: #525252;
padding: 5px 10px;
text-decoration: none;
}
.bar-link:active,
.bar-link:focus,
.bar-link:hover {
background-color: #ffcc00;
border-color: #d4aa00;
}
.feed-link {
background-image: url('/static/img/feed-bg-white.png');
background-position: bottom left;
background-repeat: no-repeat;
}
@media screen and (min-width: 1280px) {
.side-bar {
border-color: #999;
border-radius: 4px;
border-style: solid;
border-width: thin;
display: inline-block;
padding: 0px;
text-align: left;
vertical-align: top;
width: 250px;
}
.bar-title {
background-color: #f5f5f5;
font-weight: normal;
margin: 0px;
padding: 8px;
}
.bar-title-top {
border-radius: 4px 4px 0px 0px;
}
.bar-list {
margin: 0px;
}
.bar-item {
display: block;
margin: 0px;
}
.bar-link:link,
.bar-link:visited {
border-color: #f5f5f5;
border-radius: 0px;
border-style: solid none none none;
display: block;
margin: 0px;
padding: 8px 8px 8px 16px;
text-decoration: none;
}
}