diff --git a/.claude/launch.json b/.claude/launch.json index b66b707..df0674a 100644 --- a/.claude/launch.json +++ b/.claude/launch.json @@ -4,7 +4,7 @@ { "name": "traverse-website", "runtimeExecutable": "npx", - "runtimeArgs": ["serve", "-l", "8090", "."], + "runtimeArgs": ["serve", "-l", "8090", "dist"], "port": 8090, "cwd": "/Users/enricopiovesan/Documents/repos/traverseweb" } diff --git a/public/assets/css/components.css b/public/assets/css/components.css index 2757aa9..6f843a7 100644 --- a/public/assets/css/components.css +++ b/public/assets/css/components.css @@ -525,3 +525,161 @@ .animate-delay-2 { animation-delay: 0.22s; } .animate-delay-3 { animation-delay: 0.38s; } .animate-delay-4 { animation-delay: 0.54s; } + +/* ─── Subpage: Page Hero ─────────────────────────────────────────────────── */ +.page-hero { + padding: 5rem 0 4rem; + border-bottom: 1px solid var(--border); +} +.page-hero-inner { max-width: 780px; } +.page-hero h1 { margin: 1rem 0 1.5rem; } +.page-hero-sub { + font-size: 1.1rem; + line-height: 1.75; + color: var(--fg-muted); + max-width: 640px; +} +.page-hero-badges { + display: flex; + gap: 0.5rem; + flex-wrap: wrap; + margin-top: 2rem; +} + +/* ─── Subpage: Two-column layout ─────────────────────────────────────────── */ +.two-col { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 4rem; + align-items: start; +} +@media (max-width: 820px) { .two-col { grid-template-columns: 1fr; gap: 2.5rem; } } + +/* ─── Subpage: Section typography ───────────────────────────────────────── */ +.section-title-sm { + font-family: var(--font-display); + font-size: 1.5rem; + font-weight: 600; + margin-bottom: 0.75rem; + line-height: 1.3; +} +.section-lead { + color: var(--fg-muted); + font-size: 0.95rem; + line-height: 1.7; + margin-bottom: 2rem; +} + +/* ─── Subpage: Problem / Benefit lists ───────────────────────────────────── */ +.problem-list, .benefit-list { + list-style: none; + padding: 0; + margin: 0; + display: flex; + flex-direction: column; + gap: 1.25rem; +} +.benefit-list { gap: 1rem; } +.problem-item, .benefit-item { + display: flex; + gap: 1rem; + align-items: flex-start; +} +.problem-icon, .benefit-icon { + flex-shrink: 0; + width: 28px; height: 28px; + border-radius: 6px; + display: flex; align-items: center; justify-content: center; + font-size: 0.75rem; + margin-top: 2px; +} +.problem-icon { + background: rgba(239,68,68,0.12); + border: 1px solid rgba(239,68,68,0.25); + color: #ef4444; +} +.benefit-icon { + background: rgba(16,185,129,0.1); + border: 1px solid rgba(16,185,129,0.25); + color: var(--success); +} +.problem-text { + font-size: 0.95rem; + line-height: 1.65; + color: var(--fg-muted); +} +.benefit-title { + font-weight: 600; + font-size: 0.9rem; + color: var(--fg); + margin-bottom: 0.2rem; +} +.benefit-desc { + font-size: 0.85rem; + color: var(--fg-muted); + line-height: 1.6; +} + +/* ─── Subpage: Use-case grid ─────────────────────────────────────────────── */ +.use-case-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 1.25rem; +} +@media (max-width: 640px) { .use-case-grid { grid-template-columns: 1fr; } } +.use-case-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 10px; + padding: 1.5rem; + transition: border-color 0.2s; +} +.use-case-card:hover { border-color: var(--accent); } +.use-case-num { + font-family: var(--font-mono); + font-size: 0.7rem; + color: var(--accent); + margin-bottom: 0.6rem; + letter-spacing: 0.05em; +} +.use-case-title { + font-family: var(--font-display); + font-weight: 600; + font-size: 0.95rem; + color: var(--fg); + margin-bottom: 0.4rem; +} +.use-case-desc { + font-size: 0.85rem; + color: var(--fg-muted); + line-height: 1.6; +} + +/* ─── Subpage: Stat row ──────────────────────────────────────────────────── */ +.stat-row { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; + margin-bottom: 3rem; +} +@media (max-width: 640px) { .stat-row { grid-template-columns: 1fr; } } +.stat-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: 10px; + padding: 1.5rem; + text-align: center; +} +.stat-value { + font-family: var(--font-display); + font-size: 2rem; + font-weight: 700; + color: var(--accent); + line-height: 1; + margin-bottom: 0.5rem; +} +.stat-label { + font-size: 0.8rem; + color: var(--fg-muted); + line-height: 1.4; +} diff --git a/scripts/strip_global_styles.py b/scripts/strip_global_styles.py new file mode 100644 index 0000000..b69f553 --- /dev/null +++ b/scripts/strip_global_styles.py @@ -0,0 +1,103 @@ +#!/usr/bin/env python3 +""" +Strip CSS rules for classes now defined globally in components.css +from page-level ' + + new_content = re.sub( + r'', + replace_style, + content, + flags=re.DOTALL + ) + + if new_content != content: + path.write_text(new_content, encoding="utf-8") + print(f" ✓ {path.relative_to(ROOT)}") + + +def main(): + pages = list(SRC_PAGES.rglob("*.astro")) + print(f"Scanning {len(pages)} pages...\n") + for p in sorted(pages): + process_file(p) + print("\nDone.") + + +if __name__ == "__main__": + main() diff --git a/src/pages/about.astro b/src/pages/about.astro index 115e3a2..6cadb1f 100644 --- a/src/pages/about.astro +++ b/src/pages/about.astro @@ -9,14 +9,7 @@ const _body = "