285 lines
15 KiB
CSS
285 lines
15 KiB
CSS
:root {
|
|
--bg: #0d0d0d;
|
|
--fg: #e8e8e8;
|
|
--muted: #888;
|
|
--line: #262626;
|
|
--field: #161616;
|
|
}
|
|
* { box-sizing: border-box; }
|
|
body {
|
|
margin-inline: auto;
|
|
max-width: 680px;
|
|
padding: 2rem 1.25rem;
|
|
background: var(--bg);
|
|
color: var(--fg);
|
|
font: 16px/1.6 ui-monospace, "JetBrains Mono", Menlo, monospace;
|
|
}
|
|
a { color: var(--fg); text-decoration: none; border-bottom: 1px solid var(--muted); }
|
|
a:hover { border-color: var(--fg); }
|
|
|
|
header nav {
|
|
display: flex;
|
|
gap: 1rem;
|
|
margin-bottom: 2rem;
|
|
padding-bottom: 1rem;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
h1 { font-size: 1.6rem; }
|
|
h1 .phonetic { color: darkgrey; font-size: 1rem; font-weight: normal; }
|
|
h2 { font-size: 1.1rem; color: var(--muted); font-weight: normal; }
|
|
footer {
|
|
margin-top: 3rem;
|
|
padding-top: 1rem;
|
|
border-top: 1px solid var(--line);
|
|
color: var(--muted);
|
|
}
|
|
.buttons88x31 {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: .4rem;
|
|
margin-bottom: .8rem;
|
|
}
|
|
.buttons88x31 a { border-bottom: none; }
|
|
.buttons88x31 img {
|
|
width: 88px;
|
|
height: 31px;
|
|
image-rendering: pixelated;
|
|
display: block;
|
|
}
|
|
|
|
.dot {
|
|
display: inline-block;
|
|
width: .6em; height: .6em;
|
|
border-radius: 50%;
|
|
background: var(--muted);
|
|
vertical-align: middle;
|
|
}
|
|
.dot-online { background: #3ba55d; }
|
|
.dot-idle { background: #faa61a; }
|
|
.dot-dnd { background: #ed4245; }
|
|
.dot-offline { background: #747f8d; }
|
|
|
|
.status-row {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: stretch;
|
|
gap: .6rem;
|
|
}
|
|
.status-card {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: .8rem;
|
|
padding: .8rem;
|
|
flex: 1 1 220px;
|
|
min-width: 0;
|
|
border: 1px solid var(--line);
|
|
border-radius: 4px;
|
|
background-size: cover;
|
|
background-position: center;
|
|
}
|
|
.status-card .avatar { border-radius: 4px; flex: none; }
|
|
.status-card .who { display: flex; flex-direction: column; gap: .15rem; }
|
|
.status-card .name { font-weight: bold; }
|
|
.status-card .state { color: var(--muted); font-size: .9rem; }
|
|
|
|
.spotify-card {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: .8rem;
|
|
padding: .7rem;
|
|
flex: 1 1 220px;
|
|
min-width: 0;
|
|
border: 1px solid var(--line);
|
|
border-radius: 4px;
|
|
color: var(--fg);
|
|
}
|
|
a.spotify-card:hover { border-color: #1db954; }
|
|
.spotify-card .album-art { border-radius: 4px; flex: none; }
|
|
.spotify-card .album-art--empty {
|
|
width: 64px; height: 64px;
|
|
display: flex; align-items: center; justify-content: center;
|
|
background: var(--field);
|
|
color: var(--muted);
|
|
font-size: 1.5rem;
|
|
}
|
|
|
|
.np-label { font-size: .72rem; letter-spacing: .02em; }
|
|
.spotify-card .np-label { color: #1db954; }
|
|
.spotify-idle .np-label { color: var(--muted); }
|
|
.dc-label { color: #5865f2; }
|
|
.spotify-card .track { display: flex; flex-direction: column; gap: .1rem; min-width: 0; }
|
|
.spotify-card .np-label { color: #1db954; font-size: .72rem; letter-spacing: .02em; }
|
|
.spotify-card .song { font-weight: bold; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
.spotify-card .artist { color: var(--muted); font-size: .85rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
|
|
|
form { display: flex; flex-direction: column; gap: .5rem; margin: 1.5rem 0; }
|
|
input, textarea {
|
|
background: var(--field);
|
|
border: 1px solid var(--line);
|
|
color: var(--fg);
|
|
padding: .6rem;
|
|
font: inherit;
|
|
border-radius: 4px;
|
|
}
|
|
textarea { min-height: 5rem; resize: vertical; }
|
|
button {
|
|
align-self: flex-start;
|
|
background: var(--fg);
|
|
color: var(--bg);
|
|
border: 0;
|
|
padding: .5rem 1.2rem;
|
|
font: inherit;
|
|
cursor: pointer;
|
|
border-radius: 4px;
|
|
}
|
|
.entry { border-top: 1px solid var(--line); padding: .8rem 0; }
|
|
.entry .date { color: var(--muted); font-size: .8rem; margin-left: .5rem; }
|
|
.entry p { margin: .3rem 0 0; }
|
|
|
|
.muted { color: var(--muted); }
|
|
|
|
/* post list (home widget + /blog) */
|
|
.posts-widget { margin: 2rem 0; }
|
|
.post-list { list-style: none; padding: 0; margin: 1rem 0; }
|
|
.post-list li {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: baseline;
|
|
gap: 1rem;
|
|
padding: .6rem 0;
|
|
border-top: 1px solid var(--line);
|
|
}
|
|
.post-list .date { color: var(--muted); font-size: .85rem; white-space: nowrap; }
|
|
|
|
/* single post */
|
|
.back-link { margin: .5rem 0; }
|
|
.back-link a { border-bottom: none; color: var(--muted); }
|
|
.back-link a:hover { color: var(--fg); }
|
|
.post-title { margin-bottom: .2rem; }
|
|
.post-meta { color: var(--muted); font-size: .85rem; margin-bottom: 1.5rem; }
|
|
.post-body img {
|
|
max-width: 100%;
|
|
height: auto;
|
|
display: block;
|
|
margin: 1.5rem 0;
|
|
border-radius: 4px;
|
|
}
|
|
.post-body h1, .post-body h2, .post-body h3 { margin: 1.8rem 0 .6rem; }
|
|
.post-body h2 { color: var(--fg); font-size: 1.2rem; }
|
|
.post-body pre {
|
|
background: var(--field);
|
|
border: 1px solid var(--line);
|
|
border-radius: 4px;
|
|
padding: .8rem;
|
|
overflow-x: auto;
|
|
}
|
|
.post-body code {
|
|
background: var(--field);
|
|
padding: .1rem .3rem;
|
|
border-radius: 3px;
|
|
font-size: .9em;
|
|
}
|
|
.post-body pre code { background: none; padding: 0; }
|
|
.post-body blockquote {
|
|
border-left: 3px solid var(--line);
|
|
margin: 1rem 0;
|
|
padding-left: 1rem;
|
|
color: var(--muted);
|
|
}
|
|
|
|
/* ── side art ───────────────────────────────────────────────────────────
|
|
Full-height sakura in both margins: ANSI art (inc/art/sakura.ans, `cat`
|
|
it), turned by inc/art.php into one text layer per color, served as
|
|
sideart.php's ::before content on the empty <b>s and mirrored for the right
|
|
side so the branches hang in from the outer corners. Hidden when there's
|
|
no margin. */
|
|
|
|
/* The art is drawn for .6em-wide characters; system monospaces range from
|
|
.5em up, which squashes it. So it gets its own: JetBrains Mono's printable
|
|
ASCII (OFL), 4.6 KB, inlined so it arrives with this file -- as a separate
|
|
download the art stayed invisible until it landed, then popped in.
|
|
Source: css/sideart.woff2. */
|
|
@font-face {
|
|
font-family: sideart;
|
|
src: url(data:font/woff2;base64,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) format("woff2");
|
|
}
|
|
|
|
.side {
|
|
position: fixed;
|
|
top: 0;
|
|
z-index: -2;
|
|
margin: 0;
|
|
max-width: calc(50% - 360px);
|
|
overflow: hidden;
|
|
/* 88 rows at a 1.2 line fill the height */
|
|
font: calc(100vh / 105.6) / 1.2 sideart, monospace;
|
|
opacity: .85;
|
|
pointer-events: none;
|
|
user-select: none;
|
|
}
|
|
/* the art comes as one layer per color, stacked */
|
|
.side { display: grid; }
|
|
.side > b { grid-area: 1 / 1; font-weight: normal; direction: ltr; unicode-bidi: isolate; }
|
|
.side-left { left: 0; }
|
|
/* rtl only so the right panel clips on its inner edge; the layers stay ltr
|
|
(above), or the bidi algorithm reorders runs of punctuation */
|
|
.side-right { right: 0; direction: rtl; }
|
|
|
|
/* the column's shadow: the art fades out under it instead of stopping dead
|
|
beside the text. Eased falloff, as wide as about a third of the margin. */
|
|
body::before {
|
|
content: "";
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: -1;
|
|
pointer-events: none;
|
|
--l: calc(50% - 340px);
|
|
--r: calc(50% + 340px);
|
|
--fade: clamp(60px, (100vw - 680px) * .16, 180px);
|
|
background: linear-gradient(90deg,
|
|
transparent calc(var(--l) - var(--fade)),
|
|
color-mix(in srgb, var(--bg) 22%, transparent) calc(var(--l) - var(--fade) * .75),
|
|
color-mix(in srgb, var(--bg) 55%, transparent) calc(var(--l) - var(--fade) * .5),
|
|
color-mix(in srgb, var(--bg) 85%, transparent) calc(var(--l) - var(--fade) * .25),
|
|
var(--bg) var(--l) var(--r),
|
|
color-mix(in srgb, var(--bg) 85%, transparent) calc(var(--r) + var(--fade) * .25),
|
|
color-mix(in srgb, var(--bg) 55%, transparent) calc(var(--r) + var(--fade) * .5),
|
|
color-mix(in srgb, var(--bg) 22%, transparent) calc(var(--r) + var(--fade) * .75),
|
|
transparent calc(var(--r) + var(--fade)));
|
|
}
|
|
|
|
@media (max-width: 1280px) {
|
|
.side, body::before { display: none; }
|
|
}
|
|
|
|
@media print, (forced-colors: active) {
|
|
.side, body::before { display: none; }
|
|
}
|
|
|
|
/* guestbook sign button */
|
|
.btn-sign {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: .5rem;
|
|
background: var(--fg);
|
|
color: var(--bg);
|
|
border: 1px solid var(--fg);
|
|
padding: .5rem 1.4rem;
|
|
border-radius: 4px;
|
|
font: inherit;
|
|
cursor: pointer;
|
|
transition: background .12s ease, color .12s ease, transform .08s ease;
|
|
}
|
|
.btn-sign .arrow { transition: transform .15s ease; }
|
|
.btn-sign:hover:not(:disabled) { background: transparent; color: var(--fg); }
|
|
.btn-sign:hover:not(:disabled) .arrow { transform: translateX(3px); }
|
|
.btn-sign:active:not(:disabled) { transform: translateY(1px); }
|
|
.btn-sign:focus-visible { outline: 2px solid var(--muted); outline-offset: 2px; }
|
|
.btn-sign:disabled { opacity: .55; cursor: progress; }
|
|
|
|
/* htmx swaps the label while the request is in flight */
|
|
.btn-sign .pending { display: none; }
|
|
.btn-sign.htmx-request .idle { display: none; }
|
|
.btn-sign.htmx-request .pending { display: inline; }
|
|
.btn-sign.htmx-request .arrow { display: none; }
|