erase background

This commit is contained in:
Priec
2026-06-01 22:47:24 +02:00
parent d8b622860c
commit 99f255fc29
11 changed files with 562 additions and 21 deletions

49
static/ascii/rain.txt Normal file
View File

@@ -0,0 +1,49 @@
_
=$ sa a y sa_gwaanggug, :
? ?F fY ` @F?YFZ@~?f r~ :
`
yyyy_ yagggm aggr _ygggs
_@@@@@_ @@@~~~ _ __ __ _ __ __ _ 4@@F $@@~~~ __ _
$@@~@@$ $@@@@@@L$@@y@@@L4@@@@@@g_ $@@W@@@@yg@@@@y yg@@@@@gy "@@$ $@@, y@@E _a@@@@@@y 4@@$g@@F4@@F y@@@F 4@@@@@@$_a@@@@@@g, @@$g@@$
g@@F ~@@@ ``@@@`` $@@@~`` `yyyyy@@@ $@@F``@@@F `@@@ u@@@yyy$@@L @@@,y@B@@ $@@ @@@~ 4@@@ 4@@@~``~4@@@@@P~ `@@@```$@@~ 7@@$ @@@~``'
g@@@$$$@@@y @@@ $@@L y@@@FFF@@@ $@@ @@@ @@@ 4@@@PPPPPPT "@@$$@~$@W@@F @@@ y@@@ 4@@$ 4@@@@@g_ @@@ @@@ @@@ @@$
y@@@~~~~~$@@L @@@ $@@L "@@$yy$@@@ $@@ @@@ @@@ R@@gyyyg@ 4@@@E "@@@@ 4@@$yg@@@~ 4@@$ 4@@F~R@@g_ @@@ 7@@@ga@@@~ @@$
^~~^ "~~~ ~~~ ~~~~ `~FF~~~~~ 7~~ ~~~ ~~~ `~FFFF~~ ~~~ ~~~~ `~FFFF~ "~~~ ~~~~ ~~~T ~~~ ~FFFF~ ~~~
`:: ::: ::: ::: ::: ::::::::::: ::: ::: :::: ::: ::::::::. ::
`:: ..... ... ... ... ::: ..... ::: ... ... ..... .... ... ````:::```` ::: ::: `::: ...... ... .. ..... :::```::: ... ... ....... ..::...
`:::```::: ::: ::: ::: ::: :::```:::: ::: ::::```::. :::```::: ::: ::: ::: `::: ::````` ::: :::```::: :::...::` ::: ::: :::````` ``::```
`::' ::: ::: ::: ::: ::: ::: `::: ::: ::: ::: ::: ::: ::: ::: ::: `::: `:::::.. ::: ::' ::: :::``:::. ::: ::: `::::::. ::
`::: .::: ::: .::: ::: ::: :::. :::: ::: ::: ::: `:::. .::: ::: `::: .:::' `::: ```::: ::: :: ::: ::: `:::. :::. .::: . ````:: ::. :::
`````:::`` ``::````` ``' ``` ```::````' ``` ``` ``' ``````::: ``` ```:::``` ```' ``:::``` ``` `` ``` ``` ```. ``::````` ``::::`` ````` ```
:....:::`
````````
.y + - i + .
4W*MF~EZK,,4~3 $~f~%g~M $~_Ta F~K~L4~$~$uEZLf~$ Q~a~3 F~ [ E4E_ $='EZ%4_z F~K~LyT% F~L4Z, TM #~$uM7L B~%_T3 F~$yED F~LyT% yy^%uT7LyT%?F Fg~3 F~L
" ?=! 4rf ~ ?=~`g9 F ?=? ~ ~ ~f ^ f h= ?=F `=F ?= ^rF:=^J F~r?=:_$~ ~ ~ ~?=T M=~==~z "=f f f hf $=~"=? ]gF"h= ~ ~?=? ?^ f _g ^=T h ~`=F ~ ~
` ` ` ` `` `
y== y_ _ __ __ _ _ _ ,___ y_= __ __ __ __ __ __ __ __ _ __ __ __ __a__ ;y_ __ _,___ _ __ _ yg _, __ __ _ _ __ ___ _ ___ ____ _ ____
`Th $`$ $ L`L $`$=="yMy~$`4 $`$ F`L$ 9 `L F`La== "=yy=g $ F la== =d $ E `4`4 $4`4-= E $`4 4 F`$== 4`# 3 F` P=\4_F4== E ~yF 4~J $`$ $4 $==4```L
`T~ ~~`T` ~T ~ `T" ~ ~ " " ~~" ~ ~`Z4 ~ ~ ~ TT `T~`T~ ~ ~ ~ ~T T~ ^ `T'~ ~ ~ ~ ~T ~T"`~`T~ ~ `T^ ~ `T` ~T~ ~ ~T ~ .F 4~~ ~ ~T`J `T^ ~T ~ ~

111
static/css/ascii.css Normal file
View File

@@ -0,0 +1,111 @@
/* ==========================================================================
tui-pages website - animated ASCII art layer (chafa-rendered)
Loaded AFTER site.css. Provides:
- .tp-ascii-rain full-bleed body background, slow drifting pattern
sourced from static/img/og-image-bg.svg
All animations respect prefers-reduced-motion.
========================================================================== */
/* Body-wide ASCII art background ---------------------------------------- */
/* Fixed full-bleed layer behind all content. Renders a chafa output of the
og-image-bg.svg (black background + "tui-pages" wordmark + headline +
subtitle), drawn as ASCII glyphs in a single full-width tile. Two copies
of the tile are stacked vertically and the whole track drifts slowly
upward, looping seamlessly when the top copy exits the viewport.
The hero is a static <img src="static/img/terminal-default.svg"> as
designed - this file does NOT touch the hero.
Regenerate the source tile with `make ascii` (uses chafa on
static/img/og-image-bg.svg). The chafa output is in static/ascii/rain.txt
and is 240 columns wide. */
.tp-ascii-rain {
position: fixed;
inset: 0;
z-index: 0; /* sit above the page background, below the content */
pointer-events: none;
opacity: 0.14;
overflow: hidden;
font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
font-size: clamp(6px, 0.9vw, 9px);
line-height: 1.05;
color: #f4a26b; /* warm rust-orange tint, picks up the brand */
white-space: pre;
text-shadow: 0 0 6px rgba(183, 65, 14, 0.25); /* faint phosphor glow */
will-change: transform;
}
/* The track holds two byte-identical copies of rain.txt stacked vertically.
translateY(0 -> -50%) is a perfect seamless loop. */
.tp-ascii-rain-track {
display: block;
width: 100%;
margin: 0;
padding: 0;
animation: tp-ascii-drift 90s linear infinite;
will-change: transform;
}
.tp-ascii-rain-cell {
display: block;
white-space: pre; /* preserve the chafa line breaks */
}
/* CRT scanlines overlay - a thin moving line every 2px. Faint so it doesn't
fight the page content. */
.tp-ascii-rain::after {
content: "";
position: absolute;
inset: 0;
background: repeating-linear-gradient(
to bottom,
transparent 0,
transparent 2px,
rgba(0, 0, 0, 0.18) 2px,
rgba(0, 0, 0, 0.18) 3px
);
pointer-events: none;
animation: tp-ascii-scanline 8s linear infinite;
}
@keyframes tp-ascii-drift {
0% { transform: translateY(0); }
100% { transform: translateY(-50%); }
}
@keyframes tp-ascii-scanline {
0% { background-position: 0 0; }
100% { background-position: 0 6px; }
}
/* The hero text is high-contrast on its own (zinc-50 / accent), and the
body ASCII rain is at 14% opacity. No overlay needed — the rain shows
through everywhere. */
/* Light theme: invert to dark text on light, dimmer, no glow. */
:root[data-theme="light"] .tp-ascii-rain {
opacity: 0.10;
color: #1f1f23;
text-shadow: none;
mix-blend-mode: multiply;
}
:root[data-theme="light"] .tp-ascii-rain::after {
background: repeating-linear-gradient(
to bottom,
transparent 0,
transparent 2px,
rgba(255, 255, 255, 0.12) 2px,
rgba(255, 255, 255, 0.12) 3px
);
}
/* Reduced motion: pause the drift, keep the static background. */
@media (prefers-reduced-motion: reduce) {
.tp-ascii-rain-track,
.tp-ascii-rain::after {
animation: none !important;
transform: none !important;
}
}

View File

@@ -55,9 +55,7 @@ body {
/* ---------- Hero --------------------------------------------------------- */
.tp-hero {
background:
radial-gradient(ellipse 80% 50% at 50% 0%, rgba(183, 65, 14, 0.15), transparent 70%),
linear-gradient(180deg, var(--tp-hero-from) 0%, var(--tp-hero-to) 100%);
background: transparent; /* let the body ASCII rain show through */
position: relative;
isolation: isolate;
}
@@ -75,6 +73,7 @@ body {
mask-image: radial-gradient(ellipse 60% 50% at 50% 0%, #000 30%, transparent 80%);
pointer-events: none;
z-index: -1;
opacity: 0.5; /* subtle grid, not a wall */
}
/* Subtle floating code lines in the hero, behind the content */
@@ -206,13 +205,12 @@ body {
.tp-terminal {
position: relative;
border-radius: 0.875rem;
background: #0b0b0f;
background: transparent; /* let the body ASCII art show through */
box-shadow:
0 1px 0 rgba(255, 255, 255, 0.04) inset,
0 30px 60px -20px rgba(0, 0, 0, 0.6),
0 18px 36px -18px rgba(0, 0, 0, 0.5);
0 0 0 1px rgba(244, 162, 107, 0.18), /* rust-orange hairline, brand */
0 30px 60px -20px rgba(0, 0, 0, 0.55),
0 18px 36px -18px rgba(0, 0, 0, 0.45);
overflow: hidden;
border: 1px solid rgba(63, 63, 70, 0.4);
}
.tp-terminal::after {
content: "";
@@ -220,7 +218,14 @@ body {
inset: 0;
pointer-events: none;
border-radius: inherit;
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.03);
background: linear-gradient(
to bottom,
rgba(11, 11, 15, 0.55) 0%,
rgba(11, 11, 15, 0) 18%,
rgba(11, 11, 15, 0) 82%,
rgba(11, 11, 15, 0.45) 100%
); /* darken only the top + bottom strips, leave the middle transparent
so the body ASCII art shows through the terminal content */
}
/* ---------- Selection --------------------------------------------------- */

View File

@@ -0,0 +1,29 @@
<svg width="1200" height="520" viewBox="0 0 1200 520" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="tui-pages terminal art (chafa source)">
<defs>
<pattern id="grid" width="40" height="40" patternUnits="userSpaceOnUse">
<path d="M 40 0 L 0 0 0 40" fill="none" stroke="#27272a" stroke-width="1" stroke-opacity="0.3"/>
</pattern>
</defs>
<rect width="1200" height="520" fill="#000000"/>
<rect width="1200" height="520" fill="url(#grid)"/>
<g transform="translate(80, 90)">
<text font-family="ui-monospace, 'JetBrains Mono', monospace" font-weight="700" font-size="22" fill="#f4f4f5" x="0" y="0">tui-pages</text>
<rect x="140" y="-15" width="4" height="24" fill="#b7410e"/>
</g>
<text font-family="Inter, system-ui, sans-serif" font-weight="700" font-size="84" fill="#f4f4f5" x="80" y="280" letter-spacing="-2">
A framework for
</text>
<text font-family="Inter, system-ui, sans-serif" font-weight="700" font-size="84" fill="#b7410e" x="80" y="370" letter-spacing="-2">
building TUIs in Rust.
</text>
<text font-family="Inter, system-ui, sans-serif" font-weight="400" font-size="28" fill="#a1a1aa" x="80" y="430">
Pre-programmed focus, keymaps, and page navigation.
</text>
<text font-family="Inter, system-ui, sans-serif" font-weight="400" font-size="28" fill="#a1a1aa" x="80" y="470">
Stop rewriting the same architecture for every project.
</text>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1,17 +1,17 @@
<svg viewBox="0 0 640 400" xmlns="http://www.w3.org/2000/svg" class="w-full h-auto" role="img" aria-label="examples/default terminal screenshot">
<style>
.bg { fill: #18181b; }
.chrome { fill: #27272a; }
.bg { fill: transparent; stroke: #3f3f46; stroke-width: 1; }
.chrome { fill: transparent; }
.dot { fill: #52525b; }
.sep { stroke: #27272a; stroke-width: 1; }
.tab { fill: #18181b; }
.sep { stroke: #3f3f46; stroke-width: 1; }
.tab { fill: transparent; }
text { font-family: ui-monospace, 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace; fill: #f4f4f5; }
.t-md { font-size: 15px; }
.t-sm { font-size: 13px; }
.t-xs { font-size: 11px; }
.muted { fill: #a1a1aa; }
.dim { fill: #71717a; }
.sel-bg { fill: #b7410e; }
.sel-bg { fill: #b7410e; fill-opacity: 0.85; }
.sel-fg { fill: #fff5f0; }
</style>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB