mirror of
https://github.com/tiennm99/tsuki.git
synced 2026-05-23 10:25:30 +00:00
e19bb67c88
- 9 CSS files (tokens, reset, typography, layout, components, home, archive, toc, view-transitions) bundled via resources.Concat - 3 ES module JS files (theme-toggle, code-copy, toc-active); toc-active loaded only on long posts - @view-transition: navigation auto for cross-page morph (CSS-only) - TOC partial gated by WordCount>400 and Params.toc!=false; sticky on wide viewports, framed block on narrow - render-heading.html adds cosmetic anchor links - Hugo asset pipeline: resources.Concat | minify | fingerprint (no SCSS, no PostCSS, no Node) - i18n/vi.yml extended with prev/next/posts/archiveEmpty/toggleTheme - Bundle sizes: CSS 3.3 KB gz (budget 15), JS 0.8 KB gz (budget 8) Config: github-ascii heading IDs, :contentbasename permalink token for clean ASCII URLs, pagination.pagerSize migration (Hugo 0.128+).
96 lines
2.2 KiB
CSS
96 lines
2.2 KiB
CSS
/* tsuki: page layout — header, main, footer composition */
|
|
|
|
body {
|
|
display: grid;
|
|
grid-template-rows: auto 1fr auto;
|
|
}
|
|
|
|
.site-header,
|
|
main,
|
|
.site-footer { padding-inline: var(--tsuki-space-6); }
|
|
|
|
.site-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: var(--tsuki-space-4);
|
|
flex-wrap: wrap;
|
|
max-width: var(--tsuki-wide-width);
|
|
margin-inline: auto;
|
|
width: 100%;
|
|
padding-block: var(--tsuki-space-6);
|
|
border-bottom: 1px solid var(--tsuki-border);
|
|
}
|
|
|
|
.site-title {
|
|
font-weight: 650;
|
|
font-size: var(--tsuki-fs-lg);
|
|
letter-spacing: -0.01em;
|
|
color: var(--tsuki-fg);
|
|
text-decoration: none;
|
|
}
|
|
.site-title:hover { text-decoration: none; color: var(--tsuki-accent); }
|
|
|
|
.site-nav { margin-inline-start: auto; }
|
|
.site-nav ul {
|
|
display: flex;
|
|
gap: var(--tsuki-space-4);
|
|
list-style: none;
|
|
padding: 0;
|
|
margin: 0;
|
|
}
|
|
.site-nav a { color: var(--tsuki-fg-muted); }
|
|
.site-nav a:hover { color: var(--tsuki-fg); }
|
|
.site-nav a[aria-current="page"] { color: var(--tsuki-fg); font-weight: 550; }
|
|
|
|
.theme-toggle {
|
|
background: transparent;
|
|
border: 1px solid var(--tsuki-border);
|
|
border-radius: 999px;
|
|
width: 2rem;
|
|
height: 2rem;
|
|
display: inline-grid;
|
|
place-items: center;
|
|
color: var(--tsuki-fg-muted);
|
|
transition: var(--tsuki-transition);
|
|
}
|
|
.theme-toggle:hover { color: var(--tsuki-fg); border-color: var(--tsuki-fg-muted); }
|
|
|
|
main {
|
|
max-width: var(--tsuki-content-width);
|
|
margin-inline: auto;
|
|
width: 100%;
|
|
padding-block: var(--tsuki-space-12) var(--tsuki-space-16);
|
|
}
|
|
|
|
body.home main,
|
|
body.list main { max-width: var(--tsuki-wide-width); }
|
|
|
|
.site-footer {
|
|
max-width: var(--tsuki-wide-width);
|
|
margin-inline: auto;
|
|
width: 100%;
|
|
padding-block: var(--tsuki-space-8);
|
|
border-top: 1px solid var(--tsuki-border);
|
|
color: var(--tsuki-fg-muted);
|
|
font-size: var(--tsuki-fs-sm);
|
|
display: flex;
|
|
justify-content: space-between;
|
|
flex-wrap: wrap;
|
|
gap: var(--tsuki-space-3);
|
|
}
|
|
.site-footer p { margin: 0; }
|
|
|
|
.list-header {
|
|
margin-block-end: var(--tsuki-space-8);
|
|
border-block-end: 1px solid var(--tsuki-border);
|
|
padding-block-end: var(--tsuki-space-6);
|
|
}
|
|
.list-title {
|
|
font-size: var(--tsuki-fs-2xl);
|
|
margin: 0;
|
|
}
|
|
.list-description {
|
|
margin: var(--tsuki-space-2) 0 0;
|
|
color: var(--tsuki-fg-muted);
|
|
}
|