bugs and fixes

This commit is contained in:
2026-05-15 16:12:18 +02:00
parent ab6f6088f2
commit dcec203378
7 changed files with 54 additions and 41 deletions
-3
View File
@@ -146,9 +146,6 @@ export default function Search() {
<path d="m21 21-4.3-4.3" />
</svg>
<span className="tc-label">Search</span>
<kbd className="tc-kbd">
<span>{isMac ? '⌘' : 'Ctrl'}</span><span className="opacity-50">+</span><span>K</span>
</kbd>
</button>
{open && (
@@ -469,7 +469,7 @@ export default function Editor({ editSlug }: Props) {
{/* Slug */}
<div>
<label className="field-label">
Slug <span className="normal-case tracking-normal text-[var(--overlay0)] italic font-display"> auto-derived from title</span>
Slug <span className="slug-hint normal-case tracking-normal text-[var(--overlay0)] italic font-display"> auto-derived from title</span>
</label>
<input
type="text"
+14 -12
View File
@@ -130,11 +130,19 @@ const hasContact = (siteConfig.contact_links?.length ?? 0) > 0;
)}
<Search client:idle />
<ThemeSwitcher client:only="react" defaultTheme={siteConfig.theme} />
{isAdmin && (
<>
<span class="topbar-divider" aria-hidden="true"></span>
<LogoutButton client:idle />
</>
<span class="topbar-divider" aria-hidden="true"></span>
{isAdmin ? (
<LogoutButton client:idle />
) : (
<a
href="/admin/login"
class="topbar-control tc-collapse-sm"
aria-label="Admin login"
title="Admin login"
>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 18v3c0 .6.4 1 1 1h4v-3h3v-3h2l1.4-1.4a6.5 6.5 0 1 0-4-4Z"/><circle cx="16.5" cy="7.5" r=".5" fill="currentColor"/></svg>
<span class="tc-label">Admin</span>
</a>
)}
</nav>
)}
@@ -173,16 +181,10 @@ const hasContact = (siteConfig.contact_links?.length ?? 0) > 0;
<a href="/contact" class="hover:text-[var(--mauve)] transition-colors">Contact</a>
</>
)}
{!isAdmin && (
<>
<span class="text-[var(--overlay0)]" aria-hidden="true">·</span>
<a href="/admin/login" class="hover:text-[var(--mauve)] transition-colors">Admin login</a>
</>
)}
</div>
</>
)}
<div class="text-[var(--overlay0)] text-xs italic">
<div class="site-copyright text-[var(--overlay0)] text-xs italic">
&copy; {year} · {siteConfig.title}
</div>
</footer>
+1 -1
View File
@@ -60,7 +60,7 @@ function obfuscateEmail(addr: string): { user: string; host: string; display: st
<section class="max-w-2xl mx-auto">
<div class="mb-10 md:mb-14">
<div class="font-display italic text-[var(--subtext0)] text-xs tracking-[0.3em] uppercase mb-4">Correspondence</div>
<h1 class="font-display italic font-semibold text-[var(--text)] text-5xl md:text-6xl leading-[0.95] tracking-tight mb-6">
<h1 class="font-display italic font-semibold text-[var(--text)] text-5xl md:text-6xl leading-[1.08] tracking-tight mb-6">
Get in touch
</h1>
{intro && (
+1 -1
View File
@@ -68,7 +68,7 @@ const isAdmin = Astro.cookies.get('admin_session')?.value === '1';
)}
<section class="relative mb-16 md:mb-24">
<div class="max-w-2xl">
<h1 class="font-display italic font-semibold text-[var(--text)] text-5xl md:text-7xl lg:text-8xl leading-[0.95] tracking-tight mb-6">
<h1 class="font-display italic font-semibold text-[var(--text)] text-5xl md:text-7xl lg:text-8xl leading-[1.08] tracking-tight mb-6">
{isAdmin ? (
<EditableText
client:visible
+1 -1
View File
@@ -110,7 +110,7 @@ const displayTitle = post ? (post.title || formatSlug(post.slug)) : 'Work';
{/* Plaque header */}
<header class="max-w-3xl mx-auto text-center mb-12 md:mb-16">
<h1 class="font-display italic font-semibold text-[var(--text)] text-4xl md:text-6xl lg:text-7xl leading-[0.95] tracking-tight mb-6">
<h1 class="font-display italic font-semibold text-[var(--text)] text-4xl md:text-6xl lg:text-7xl leading-[1.08] tracking-tight mb-6">
{displayTitle}
</h1>
+36 -22
View File
@@ -330,8 +330,9 @@ code, pre, kbd, samp {
font-style: italic;
color: var(--text);
margin: 0 0 1.25rem;
line-height: 1.05;
line-height: 1.15;
letter-spacing: -0.02em;
padding-bottom: 0.06em;
}
.prose h2 {
font-family: var(--font-display);
@@ -741,13 +742,18 @@ code, pre, kbd, samp {
font-style: italic;
font-weight: 500;
font-size: 1.18rem;
line-height: 1.18;
line-height: 1.3;
color: var(--text);
letter-spacing: -0.005em;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
/* line-clamp's overflow:hidden clips italic-Fraunces descenders (g, y, p).
* Pad the clip box and pull the layout back with a matching negative
* margin so descenders survive without shifting siblings. */
padding-bottom: 0.16em;
margin-bottom: -0.16em;
transition: color 0.25s ease;
}
.plate:hover .plate-caption-title {
@@ -757,12 +763,14 @@ code, pre, kbd, samp {
font-family: var(--font-sans);
font-style: italic;
font-size: 0.82rem;
line-height: 1.4;
line-height: 1.45;
color: var(--subtext0);
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
overflow: hidden;
padding-bottom: 0.14em;
margin-bottom: -0.14em;
}
.plate .plate-caption-meta {
font-family: var(--font-sans);
@@ -823,7 +831,7 @@ code, pre, kbd, samp {
font-size: 1.6rem;
letter-spacing: -0.01em;
color: var(--text);
line-height: 1;
line-height: 1.12;
}
.nameplate-subtitle {
font-family: var(--font-sans);
@@ -1116,9 +1124,6 @@ select.topbar-control.theme-select {
* phones. Written unlayered (not Tailwind utilities) so it reliably wins
* over the `.topbar-control` base in the Tailwind v4 cascade. */
.topbar-control .tc-label { display: inline; }
@media (max-width: 1023px) {
.topbar-control .tc-kbd { display: none; }
}
@media (max-width: 767px) {
.topbar-control.tc-collapse-md { width: 2rem; padding: 0; }
.topbar-control.tc-collapse-md .tc-label { display: none; }
@@ -1368,18 +1373,32 @@ input[type="date"] { color-scheme: light; }
}
.breakcore .section-rule::before,
.breakcore .section-rule::after {
height: 6px;
opacity: 0.55;
background: repeating-linear-gradient(
45deg,
var(--yellow) 0 8px,
var(--crust) 8px 16px
height: 1px;
opacity: 0.85;
background: linear-gradient(
to right,
transparent,
color-mix(in srgb, var(--mauve) 70%, transparent) 45%,
color-mix(in srgb, var(--teal) 70%, transparent) 55%,
transparent
);
}
.breakcore .section-rule .ornament {
color: var(--mauve);
}
/* Readability — `--overlay0` (#5A2D8E) is near-invisible on the breakcore
* ground. Lift the spots that use it as actual copy to the readable
* subtext ramp. */
.breakcore .prose h6,
.breakcore .prose del,
.breakcore .hljs-comment,
.breakcore .hljs-quote,
.breakcore .site-copyright,
.breakcore .slug-hint {
color: var(--subtext0);
}
/* Chips — neon outline, monospace caps. */
.breakcore .chip {
background: transparent;
@@ -1518,22 +1537,17 @@ input[type="date"] { color-scheme: light; }
margin-top: 1.5rem;
}
/* Breakcore: hard edges + hazard cap + chromatic title. */
/* Breakcore: hard edges + neon cap + chromatic title. */
.breakcore .cdialog-panel {
border-radius: 0;
padding-top: 1.9rem;
padding-top: 1.85rem;
}
.breakcore .cdialog-panel::before {
content: "";
position: absolute;
inset: 0 0 auto 0;
height: 5px;
background: repeating-linear-gradient(
45deg,
var(--yellow) 0 8px,
var(--crust) 8px 16px
);
opacity: 0.6;
height: 2px;
background: linear-gradient(90deg, var(--mauve), var(--teal));
}
.breakcore .cdialog-title {
text-shadow: -1px 0 0 var(--teal), 1px 0 0 var(--mauve);