style: reduce empty space on dev-env page

- Tighter vertical spacing (space-y-4, smaller header margins)
- Larger device mockup at all breakpoints (up to 700px monitor)
- Wider content area (max-w-5xl) for dev-env page
- Less padding in device hero section

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-14 08:39:15 +08:00
parent 1077c76366
commit 8d08383391
4 changed files with 13 additions and 13 deletions

View File

@@ -76,11 +76,11 @@ export default async function StaticPage({ params }: Props) {
<> <>
<JsonLd data={webPageSchema} /> <JsonLd data={webPageSchema} />
<ReadingProgress /> <ReadingProgress />
<PostLayout hasToc={hasToc} contentKey={slug}> <PostLayout hasToc={hasToc} contentKey={slug} wide={slug === 'dev-env'}>
<div className="space-y-8"> <div className={slug === 'dev-env' ? 'space-y-4' : 'space-y-8'}>
<SectionDivider> <SectionDivider>
<ScrollReveal> <ScrollReveal>
<header className="mb-6 space-y-4 text-center"> <header className={slug === 'dev-env' ? 'mb-4 space-y-3 text-center' : 'mb-6 space-y-4 text-center'}>
{page.published_at && ( {page.published_at && (
<p className="type-small text-slate-500 dark:text-slate-500"> <p className="type-small text-slate-500 dark:text-slate-500">
{new Date(page.published_at).toLocaleDateString( {new Date(page.published_at).toLocaleDateString(

View File

@@ -9,7 +9,7 @@ import { SiArchlinux, SiUbuntu, SiLinux } from 'react-icons/si';
export function DevEnvDeviceHero() { export function DevEnvDeviceHero() {
return ( return (
<div <div
className="dev-env-device-hero -mx-4 mb-8 flex justify-center py-8 sm:-mx-12 sm:py-12 lg:-mx-20 group-[.toc-open]:lg:-mx-4" className="dev-env-device-hero -mx-4 mb-6 flex justify-center py-4 sm:-mx-12 sm:py-6 lg:-mx-20 lg:py-8 group-[.toc-open]:lg:-mx-4"
role="img" role="img"
aria-label="Mac mini、鍵盤與外接螢幕的 3D 裝置展示" aria-label="Mac mini、鍵盤與外接螢幕的 3D 裝置展示"
> >

View File

@@ -11,7 +11,7 @@ const PostToc = dynamic(() => import('./post-toc').then(mod => ({ default: mod.P
ssr: false, ssr: false,
}); });
export function PostLayout({ children, hasToc = true, contentKey }: { children: React.ReactNode; hasToc?: boolean; contentKey?: string }) { export function PostLayout({ children, hasToc = true, contentKey, wide }: { children: React.ReactNode; hasToc?: boolean; contentKey?: string; wide?: boolean }) {
const [isTocOpen, setIsTocOpen] = useState(false); // Default closed on mobile const [isTocOpen, setIsTocOpen] = useState(false); // Default closed on mobile
const [isDesktopTocOpen, setIsDesktopTocOpen] = useState(hasToc); // Separate state for desktop const [isDesktopTocOpen, setIsDesktopTocOpen] = useState(hasToc); // Separate state for desktop
const [mounted, setMounted] = useState(false); const [mounted, setMounted] = useState(false);
@@ -116,7 +116,7 @@ export function PostLayout({ children, hasToc = true, contentKey }: { children:
)}> )}>
{/* Main Content Area */} {/* Main Content Area */}
<div className="min-w-0"> <div className="min-w-0">
<div className={cn("mx-auto transition-all duration-500 ease-snappy", isDesktopTocOpen && hasToc ? "max-w-3xl" : "max-w-4xl")}> <div className={cn("mx-auto transition-all duration-500 ease-snappy", isDesktopTocOpen && hasToc ? "max-w-3xl" : wide ? "max-w-5xl" : "max-w-4xl")}>
{children} {children}
</div> </div>
</div> </div>

View File

@@ -111,10 +111,10 @@
margin-top: 40px; margin-top: 40px;
} }
/* Large screen: scale up proportionally */ /* Large screen: scale up proportionally to fill space */
@media (min-width: 1024px) { @media (min-width: 1024px) {
.dev-env-monitor { .dev-env-monitor {
width: min(420px, 32vw); width: min(520px, 42vw);
} }
.dev-env-monitor + .dev-env-desk { .dev-env-monitor + .dev-env-desk {
margin-top: 48px; margin-top: 48px;
@@ -123,7 +123,7 @@
@media (min-width: 1280px) { @media (min-width: 1280px) {
.dev-env-monitor { .dev-env-monitor {
width: min(480px, 28vw); width: min(600px, 40vw);
} }
.dev-env-monitor + .dev-env-desk { .dev-env-monitor + .dev-env-desk {
margin-top: 56px; margin-top: 56px;
@@ -132,7 +132,7 @@
@media (min-width: 1536px) { @media (min-width: 1536px) {
.dev-env-monitor { .dev-env-monitor {
width: min(540px, 26vw); width: min(700px, 42vw);
} }
.dev-env-monitor + .dev-env-desk { .dev-env-monitor + .dev-env-desk {
margin-top: 64px; margin-top: 64px;
@@ -552,7 +552,7 @@
@media (min-width: 1024px) { @media (min-width: 1024px) {
.dev-env-desk { .dev-env-desk {
width: min(460px, 34vw); width: min(560px, 45vw);
height: 66px; height: 66px;
padding: 0 16px; padding: 0 16px;
gap: 16px; gap: 16px;
@@ -561,7 +561,7 @@
@media (min-width: 1280px) { @media (min-width: 1280px) {
.dev-env-desk { .dev-env-desk {
width: min(520px, 30vw); width: min(640px, 43vw);
height: 76px; height: 76px;
padding: 0 20px; padding: 0 20px;
gap: 20px; gap: 20px;
@@ -570,7 +570,7 @@
@media (min-width: 1536px) { @media (min-width: 1536px) {
.dev-env-desk { .dev-env-desk {
width: min(600px, 28vw); width: min(760px, 46vw);
height: 86px; height: 86px;
padding: 0 24px; padding: 0 24px;
gap: 24px; gap: 24px;