Build of the Astro site (4d6900c on astro)
Generated with npm run build. The source is on the astro branch. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
a701743635
commit
fb5c5dca78
1 changed files with 375 additions and 134 deletions
202
styles.css
Normal file
202
styles.css
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
/* Khaos im Kiez — terminal look, pure CSS, no JS */
|
||||
|
||||
:root {
|
||||
--bg: #020a04;
|
||||
--fg: #33ff66;
|
||||
--dim: #1f9a3f;
|
||||
--hot: #ff2a2a; /* KiK-Logo-Rot */
|
||||
--glow: 0 0 6px color-mix(in srgb, currentColor 55%, transparent); /* in each text's own color */
|
||||
}
|
||||
|
||||
* { box-sizing: border-box; }
|
||||
|
||||
html { background: #000; }
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
min-height: 100vh;
|
||||
padding: 2rem 1rem 4rem;
|
||||
background: radial-gradient(ellipse at center, var(--bg) 55%, #000 100%);
|
||||
color: var(--fg);
|
||||
font: 16px/1.5 "DejaVu Sans Mono", "Liberation Mono", "Cascadia Mono", Menlo, Consolas, monospace;
|
||||
text-shadow: var(--glow);
|
||||
}
|
||||
|
||||
/* CRT: Scanlines + Vignette */
|
||||
body::before {
|
||||
content: "";
|
||||
position: fixed; inset: 0;
|
||||
pointer-events: none;
|
||||
z-index: 10;
|
||||
background:
|
||||
repeating-linear-gradient(to bottom,
|
||||
rgba(0, 0, 0, 0) 0, rgba(0, 0, 0, 0) 2px,
|
||||
rgba(0, 0, 0, .22) 3px, rgba(0, 0, 0, .22) 4px),
|
||||
radial-gradient(ellipse at center, rgba(0,0,0,0) 60%, rgba(0,0,0,.55) 100%);
|
||||
}
|
||||
|
||||
::selection { background: var(--fg); color: #000; text-shadow: none; }
|
||||
|
||||
.term {
|
||||
max-width: 82ch;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
a {
|
||||
color: var(--fg);
|
||||
text-decoration: none;
|
||||
}
|
||||
a:hover, a:focus-visible {
|
||||
background: var(--fg);
|
||||
color: #000;
|
||||
text-shadow: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* Prompt */
|
||||
.prompt { white-space: pre-wrap; }
|
||||
.prompt .cwd { color: #3465a4; } /* the shell prompt's blue, as xterm.js renders it */
|
||||
.cursor {
|
||||
display: inline-block;
|
||||
width: .6em; height: 1.1em;
|
||||
vertical-align: text-bottom;
|
||||
background: var(--fg);
|
||||
animation: blink 1.1s steps(1) infinite;
|
||||
}
|
||||
@keyframes blink { 50% { opacity: 0; } }
|
||||
#term-input { all: unset; width: 0; caret-color: transparent; } /* as wide as its text, so the block cursor follows it */
|
||||
|
||||
/* Terminal: continues right below the first prompt. Lines scrolled off its screen become page text,
|
||||
the screen shows the rows in use and xterm.js fits rows and columns to the window. */
|
||||
.prompt:has(+ .history) { margin-bottom: 0; }
|
||||
.history { white-space: pre; overflow-x: clip; } /* rows of the terminal's width; cut, not wrapped, if the window narrows */
|
||||
.history > div { min-height: 1lh; } /* keeps empty lines */
|
||||
.history span { color: var(--fg); }
|
||||
.screen { overflow: clip; }
|
||||
.screen > div { height: 100dvh; }
|
||||
.screen .xterm-viewport, .screen .scrollbar { display: none; } /* the page scrolls instead */
|
||||
/* hovered links (xterm.js underlines them inline) invert in their own color, like the page's links */
|
||||
.screen .xterm-rows span[style*="text-decoration: underline"] { background-color: currentColor; -webkit-text-fill-color: #000; text-shadow: none; }
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
/* typing still reaches the terminal when it is not focused, so its cursor keeps blinking like the page's */
|
||||
.screen .xterm-rows:not(.xterm-focus) .xterm-cursor-block { animation: blink 1.1s steps(1) infinite; }
|
||||
}
|
||||
|
||||
/* Header */
|
||||
header {
|
||||
display: flex;
|
||||
gap: 1.5rem;
|
||||
align-items: center;
|
||||
margin: 1rem 0 1.5rem;
|
||||
}
|
||||
header img {
|
||||
width: 150px; height: 150px;
|
||||
flex: none;
|
||||
image-rendering: auto;
|
||||
filter: drop-shadow(0 0 8px rgba(255, 42, 42, .5));
|
||||
}
|
||||
h1 {
|
||||
margin: 0;
|
||||
font-size: 1.9rem;
|
||||
line-height: 1.15;
|
||||
font-weight: bold;
|
||||
letter-spacing: .04em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
h1 span { color: var(--hot); }
|
||||
.tagline { margin: .4rem 0 0; color: var(--dim); }
|
||||
|
||||
/* Menü */
|
||||
nav {
|
||||
border-top: 1px solid var(--dim);
|
||||
border-bottom: 1px solid var(--dim);
|
||||
padding: .3rem 0;
|
||||
margin-bottom: 2rem;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: .25rem 1.5rem;
|
||||
}
|
||||
nav .lang { margin-left: auto; }
|
||||
|
||||
/* Fenster-Boxen */
|
||||
section {
|
||||
border: 1px solid var(--fg);
|
||||
box-shadow: 0 0 10px rgba(51, 255, 102, .25), inset 0 0 10px rgba(51, 255, 102, .08);
|
||||
margin: 0 0 2rem;
|
||||
padding: 1.1rem 1.2rem .8rem;
|
||||
position: relative;
|
||||
}
|
||||
section > h2 {
|
||||
position: absolute;
|
||||
top: -.85em; left: 1rem;
|
||||
margin: 0;
|
||||
padding: 0 .6ch;
|
||||
background: #010603;
|
||||
font-size: 1rem;
|
||||
font-weight: bold;
|
||||
}
|
||||
section > h2::before { content: "┤ "; color: var(--dim); }
|
||||
section > h2::after { content: " ├"; color: var(--dim); }
|
||||
|
||||
section p { margin: 0 0 1rem; }
|
||||
|
||||
dl.kv {
|
||||
display: grid;
|
||||
grid-template-columns: max-content 1fr;
|
||||
gap: .15rem 1.5ch;
|
||||
margin: 0 0 1rem;
|
||||
}
|
||||
dl.kv dt { color: var(--dim); white-space: nowrap; min-width: 12ch; }
|
||||
dl.kv dt::after { content: " :"; }
|
||||
dl.kv dd { margin: 0; }
|
||||
|
||||
/* Buttons */
|
||||
.btn {
|
||||
display: inline-block;
|
||||
margin: 0 1.5ch .5rem 0;
|
||||
padding: 0 1ch;
|
||||
border: 1px solid var(--fg);
|
||||
}
|
||||
.btn::before { content: "[ "; }
|
||||
.btn::after { content: " ]"; }
|
||||
.btn { border: 0; padding: 0; }
|
||||
.btn.hot { color: var(--hot); }
|
||||
.btn.hot:hover, .btn.hot:focus-visible { background: var(--hot); color: #000; }
|
||||
|
||||
.note { color: var(--dim); }
|
||||
.todo { color: #ffcc33; text-shadow: none; }
|
||||
|
||||
/* Output-Listen */
|
||||
ul.out { list-style: none; margin: 0 0 1rem; padding: 0; }
|
||||
ul.out li::before { content: "> "; color: var(--dim); }
|
||||
|
||||
footer {
|
||||
color: var(--dim);
|
||||
text-align: center;
|
||||
border-top: 1px solid var(--dim);
|
||||
padding-top: .8rem;
|
||||
}
|
||||
footer a { color: var(--dim); }
|
||||
footer a:hover { color: #000; }
|
||||
|
||||
/* Mobil */
|
||||
@media (max-width: 560px) {
|
||||
body { font-size: 14px; padding: 1rem .6rem 3rem; }
|
||||
header { flex-direction: column; align-items: flex-start; gap: .8rem; }
|
||||
header img { width: 110px; height: 110px; }
|
||||
h1 { font-size: 1.4rem; }
|
||||
dl.kv { grid-template-columns: 1fr; }
|
||||
dl.kv dt::after { content: ""; }
|
||||
dl.kv dd { margin-bottom: .5rem; }
|
||||
nav .lang { margin-left: 0; }
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: reduce) {
|
||||
.cursor { animation: none; }
|
||||
}
|
||||
|
||||
@media print {
|
||||
body::before { display: none; }
|
||||
body, a { color: #000; background: #fff; text-shadow: none; }
|
||||
section { box-shadow: none; border-color: #000; }
|
||||
}
|
||||
Loading…
Reference in a new issue