web theme: make the Revival/RustyWolf feature panels symmetric (equal-height split + shared 16:10 shot frame)

This commit is contained in:
Martin Dvořák 2026-09-30 12:26:46 +00:00
commit cd094f0173
3 changed files with 17 additions and 9 deletions

View file

@ -130,7 +130,10 @@ Themes: `web` = default frosted-glass website (sidebar + content, light/dark),
a `.web-quick` 2-up ("Right now" + "Gym PRs"), then services, activity, a `.web-quick` 2-up ("Right now" + "Gym PRs"), then services, activity,
projects, hardware, features (Revival/RustyWolf) and friends. Projects/hardware projects, hardware, features (Revival/RustyWolf) and friends. Projects/hardware
use a CSS multi-column **masonry** gallery (`.project-grid`) so short cards use a CSS multi-column **masonry** gallery (`.project-grid`) so short cards
don't leave half-empty grid slots. The old stacked TUI panel layout and the don't leave half-empty grid slots. The two feature panels (`.web-split`) stretch
to equal height and share a fixed `16 / 10` `.web-shot` frame with
`object-fit: cover` (+ `object-position: center top`), so source images with
different aspect ratios still line up. The old stacked TUI panel layout and the
`SlBackground` ASCII train were removed with it. `SlBackground` ASCII train were removed with it.
- **Not a terminal.** The web theme deliberately has no TUI chrome: the hero is - **Not a terminal.** The web theme deliberately has no TUI chrome: the hero is
a name + blurb (no `$ whoami` prompt, no blinking cursor), section eyebrows are a name + blurb (no `$ whoami` prompt, no blinking cursor), section eyebrows are

View file

@ -152,13 +152,7 @@ function FeatureShot({
}) { }) {
return ( return (
<div className="web-shot"> <div className="web-shot">
<Image <Image src={src} alt={alt} width={width} height={height} />
src={src}
alt={alt}
width={width}
height={height}
style={{ width: "100%", height: "auto", display: "block" }}
/>
</div> </div>
); );
} }

View file

@ -448,20 +448,31 @@ html[data-theme="web"] body {
display: grid; display: grid;
grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); grid-template-columns: repeat(auto-fit, minmax(340px, 1fr));
gap: 26px; gap: 26px;
align-items: start; align-items: stretch;
} }
.web-feature { .web-feature {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
.web-shot { .web-shot {
/* One fixed frame for every feature shot, regardless of the source image's
aspect ratio, so the two feature panels line up. */
aspect-ratio: 16 / 10;
border-radius: 16px; border-radius: 16px;
overflow: hidden; overflow: hidden;
border: 1px solid var(--glass-border); border: 1px solid var(--glass-border);
margin-bottom: 14px; margin-bottom: 14px;
box-shadow: 0 18px 36px -22px rgba(23, 32, 60, 0.5); box-shadow: 0 18px 36px -22px rgba(23, 32, 60, 0.5);
} }
.web-shot img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
object-position: center top;
}
.web-feature-text { .web-feature-text {
flex: 1;
font-size: 0.9rem; font-size: 0.9rem;
color: var(--web-muted); color: var(--web-muted);
} }