Files
jacob-mathison 8afb112eee feat: SiteLayout template + World menu with 5 new pages (Lore, World, Characters, Music, Gallery)
- SiteLayout.tsx: shared layout component with nav dropdown, mobile hamburger drawer, full footer
- Nav: World dropdown menu (Lore, World, Characters, Music, Gallery) + Follow link
- Footer: 3-column (World links, Social links, Legal links) + tagline
- pages/lore.tsx: lore entry grid with placeholder canon entries
- pages/world.tsx: location/setting cards with worldbuilding teaser
- pages/characters.tsx: character roster with locked/revealed states
- pages/music.tsx: soundtrack page with Patreon CTA (inspired by silmaai.com music page)
- pages/gallery.tsx: tabbed Official / Fan Art gallery with empty states and social tag CTAs
- styles/Layout.module.css: shared nav, dropdown, footer, page hero, coming-soon styles
- styles/World.module.css: lore, location, character, music styles
- styles/Gallery.module.css: tabs, grid, card, empty state styles
- All pages: SEO meta, canonical URLs, OG tags
2026-04-11 10:46:24 -05:00

139 lines
3.4 KiB
CSS

/* ── Tabs ──────────────────────────────────────────────────────────────────── */
.tabs {
display: flex;
gap: 0;
border-bottom: 1px solid var(--border);
margin-bottom: 3rem;
}
.tab {
padding: 0.75rem 2rem;
background: none;
border: none;
border-bottom: 2px solid transparent;
font-size: 0.78rem;
letter-spacing: 0.14em;
text-transform: uppercase;
color: var(--bone-dim);
cursor: pointer;
transition: color 0.2s, border-color 0.2s;
font-family: inherit;
margin-bottom: -1px;
}
.tab:hover { color: var(--bone); }
.tabActive {
color: var(--bone);
border-bottom-color: var(--red);
}
/* ── Section ───────────────────────────────────────────────────────────────── */
.section {}
/* ── Grid ──────────────────────────────────────────────────────────────────── */
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1.5rem;
margin-bottom: 3rem;
}
.card {
background: var(--dark-card);
border: 1px solid var(--border);
overflow: hidden;
transition: border-color 0.2s, transform 0.2s;
}
.card:hover {
border-color: rgba(232,220,200,0.25);
transform: translateY(-2px);
}
.cardImg {
width: 100%;
aspect-ratio: 4/3;
object-fit: cover;
display: block;
}
.cardCaption {
padding: 0.65rem 1rem;
font-size: 0.78rem;
color: var(--bone-dim);
opacity: 0.7;
border-top: 1px solid var(--border);
}
.cardCaption a {
color: var(--red);
text-decoration: underline;
}
/* ── Empty state ───────────────────────────────────────────────────────────── */
.empty {
text-align: center;
padding: 6rem 2rem;
border: 1px dashed var(--border);
background: var(--dark-card);
}
.emptyIcon {
display: block;
font-size: 3.5rem;
margin-bottom: 1.25rem;
opacity: 0.25;
}
.emptyTitle {
font-family: var(--font-display);
font-size: 1.1rem;
color: var(--bone);
margin-bottom: 0.65rem;
}
.emptyText {
font-size: 0.88rem;
color: var(--bone-dim);
max-width: 440px;
margin: 0 auto 2rem;
line-height: 1.75;
}
.emptyLinks {
display: flex;
gap: 0.75rem;
justify-content: center;
flex-wrap: wrap;
}
.emptyBtn {
display: inline-flex;
padding: 0.6rem 1.4rem;
background: transparent;
color: var(--bone-dim);
border: 1px solid var(--border);
font-size: 0.75rem;
letter-spacing: 0.1em;
text-transform: uppercase;
transition: border-color 0.2s, color 0.2s;
}
.emptyBtn:hover {
border-color: var(--red);
color: var(--bone);
}
/* ── Responsive ────────────────────────────────────────────────────────────── */
@media (max-width: 768px) {
.tabs { overflow-x: auto; }
.tab { padding: 0.65rem 1.25rem; white-space: nowrap; }
.grid { grid-template-columns: 1fr 1fr; }
.empty { padding: 3rem 1.25rem; }
}
@media (max-width: 480px) {
.grid { grid-template-columns: 1fr; }
}