Files
decePubClient/Styles/feed.css
T
thepraandClaude Opus 5.5 620cbef219
Build / Build (push) Successful in 26s
Deploy / decepub.thepra.dev (push) Successful in 1m21s
CDN-fronted servers grouped per CDN, and servers through time
A post whose server is behind a CDN has no place of its own: the globe
groups such posts per CDN in labels on a ring above the Arctic, and
hovering one draws its arc to the CDN's group and a ring where the
server was before the CDN. The card's CDN chip names the CDN, its
domain, how PrivaPub found it (published ranges, response headers or
network), the place before the CDN and the CDN's servers week by week
(/api/privapub/v1/cdns/:domain); the author's tooltip lists the server's
changes of place and CDN week by week (/instances/:host/history). Both
are read on the first hover and kept for the session.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsXgEaXee4GCU1hwYgPJXw
2026-10-04 11:44:51 +02:00

92 lines
2.1 KiB
CSS

/* The feed: post HTML as PrivaPub's Mastodon API sends it (already sanitized; Mastodon's link markup hides the
scheme in .invisible and shortens long links with .ellipsis), and the globe's point labels, which replace the
look of globe.gl's own tooltip box. */
@layer components {
.post-content p {
margin-block: 0 0.5em;
}
.post-content p:last-child {
margin-bottom: 0;
}
.post-content a {
color: var(--color-primary);
overflow-wrap: anywhere;
}
.post-content a.mention,
.post-content a.hashtag {
text-decoration-line: none;
font-weight: 600;
}
.post-content .invisible {
display: none;
}
.post-content .ellipsis::after {
content: "…";
}
.post-content blockquote {
border-inline-start: 3px solid var(--neo-strong);
padding-inline-start: 0.75rem;
opacity: 0.85;
}
.post-content pre,
.post-content code {
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
font-size: 0.85em;
white-space: pre-wrap;
}
.post-content ul {
list-style: disc;
padding-inline-start: 1.25rem;
}
.post-content ol {
list-style: decimal;
padding-inline-start: 1.25rem;
}
/* daisyUI's tooltip is a pill; a block of nerd stats needs the corners of a box. */
.tooltip-content:has(> .nerd-stats) {
border-radius: var(--radius-box);
padding: 0.5rem 0.65rem;
max-width: min(22rem, 90vw);
}
.float-tooltip-kap {
padding: 0 !important;
background: transparent !important;
}
.globe-label {
font: 11px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace;
padding: 0.4rem 0.55rem;
border-radius: 0.5rem;
color: var(--color-base-content);
background: var(--color-base-100);
box-shadow: 0 2px 10px rgb(0 0 0 / 0.25);
}
.globe-label span {
opacity: 0.65;
}
/* A CDN's group on the globe: a label in orbit, not a place. */
.globe-cdn {
font: 10px/1.3 ui-monospace, SFMono-Regular, Menlo, monospace;
white-space: nowrap;
padding: 0.15rem 0.45rem;
border-radius: 999px;
color: var(--color-base-content);
background: color-mix(in oklab, var(--color-base-100) 80%, transparent);
box-shadow: 0 1px 6px rgb(0 0 0 / 0.25);
pointer-events: none;
}
}