/* ========================================================================== SHAGUN — Editorial Brutalist Journal Design tokens ========================================================================== */ @import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=IBM+Plex+Mono:ital,wght@0,400;0,500;0,600;1,400&display=swap'); :root { --bg: #F7F3ED; --ink: #111111; --ink-soft: #555555; --border: #D8D3CC; --accent: #8A5A44; --accent-hover: #A33B2F; --selection: #E4D6C8; --font-display: 'Bebas Neue', 'Arial Narrow', sans-serif; --font-body: 'IBM Plex Mono', 'Geist Mono', monospace; --max-w: 1180px; --content-w: 700px; --space-1: 0.5rem; --space-2: 1rem; --space-3: 1.75rem; --space-4: 3rem; --space-5: 5rem; --space-6: 8rem; --space-7: 12rem; } /* ========================================================================== Reset ========================================================================== */ *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; scroll-behavior: auto !important; } } body { margin: 0; background-color: var(--bg); color: var(--ink); font-family: var(--font-body); font-size: 16px; line-height: 1.75; -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; /* subtle paper grain */ background-image: radial-gradient(rgba(17,17,17,0.018) 1px, transparent 1px); background-size: 3px 3px; animation: page-fade-in 0.6s ease both; } @keyframes page-fade-in { from { opacity: 0; } to { opacity: 1; } } ::selection { background: var(--selection); color: var(--ink); } a { color: inherit; text-decoration: none; } img { max-width: 100%; display: block; } h1, h2, h3, h4 { font-family: var(--font-display); font-weight: 400; letter-spacing: 0.01em; margin: 0; line-height: 0.95; } p { margin: 0 0 1.5em 0; } :focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; } /* ========================================================================== Layout helpers ========================================================================== */ .wrap { max-width: var(--max-w); margin: 0 auto; padding: 0 var(--space-4); } .prose-w { max-width: var(--content-w); margin: 0 auto; } .hairline { border: none; border-top: 1px solid var(--border); margin: 0; } /* ========================================================================== Reading progress bar ========================================================================== */ .progress-bar { position: fixed; top: 0; left: 0; height: 2px; width: 0%; background: var(--accent); z-index: 200; transition: width 0.08s linear; } /* ========================================================================== Nav ========================================================================== */ .site-nav { position: relative; z-index: 100; padding: var(--space-3) 0; } .site-nav .wrap { display: flex; align-items: center; justify-content: space-between; } .brand { font-family: var(--font-display); font-size: 1.5rem; letter-spacing: 0.03em; } .nav-links { display: flex; gap: var(--space-4); list-style: none; margin: 0; padding: 0; font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; } .nav-links a { position: relative; padding-bottom: 3px; } .nav-links a::after { content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px; background: var(--accent); transition: width 0.3s ease; } .nav-links a:hover::after, .nav-links a[aria-current="page"]::after { width: 100%; } .nav-links a[aria-current="page"] { color: var(--accent); } .nav-toggle { display: none; background: none; border: none; color: var(--ink); font-size: 1.3rem; line-height: 1; cursor: pointer; padding: 0.2rem; } /* ========================================================================== Article top bar (replaces full nav on essay pages) ========================================================================== */ .article-topbar { display: flex; justify-content: space-between; align-items: center; padding: var(--space-3) var(--space-4); } .article-topbar .back-link, .article-topbar .next-link { font-size: 0.72rem; letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-soft); position: relative; padding-bottom: 3px; } .article-topbar a::after { content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px; background: var(--accent); transition: width 0.3s ease; } .article-topbar a:hover::after { width: 100%; } /* ========================================================================== Vertical scroll rail (article pages) ========================================================================== */ .scroll-rail { position: fixed; top: 50%; right: var(--space-3); transform: translateY(-50%); width: 1px; height: 140px; background: var(--border); z-index: 90; display: none; } .scroll-rail-thumb { position: absolute; top: 0; left: -1px; width: 3px; height: 28px; background: var(--accent); } @media (min-width: 900px) { .scroll-rail { display: block; } } /* ========================================================================== Home — hero ========================================================================== */ .hero { min-height: calc(100vh - 100px); display: flex; flex-direction: column; justify-content: center; padding: var(--space-5) 0; } .hero-name { font-size: clamp(4.5rem, 14vw, 10rem); line-height: 0.85; } .hero-lines { margin-top: var(--space-4); font-size: clamp(1rem, 2vw, 1.15rem); color: var(--ink-soft); max-width: 360px; line-height: 1.6; } .hero-scroll { margin-top: var(--space-5); display: flex; align-items: center; gap: var(--space-2); font-size: 0.75rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-soft); } .hero-arrow { display: inline-block; animation: bob 2.2s ease-in-out infinite; } @keyframes bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(6px); } } /* ========================================================================== Essay list ========================================================================== */ .essays-section { padding: var(--space-6) 0 var(--space-6); } .section-label { font-size: 0.72rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: var(--space-4); } .essay-row { display: grid; grid-template-columns: 64px 1fr auto; gap: var(--space-4); align-items: start; padding: var(--space-4) 0; border-top: 1px solid var(--border); } .essay-row:last-of-type { border-bottom: 1px solid var(--border); } .essay-index { font-family: var(--font-display); font-size: 1.1rem; color: var(--ink-soft); padding-top: 0.3rem; } .essay-body .eyebrow { font-size: 0.7rem; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); margin-bottom: var(--space-1); } .essay-title { font-size: clamp(1.6rem, 3.4vw, 2.6rem); margin-bottom: var(--space-2); transition: color 0.25s ease; } .essay-row:hover .essay-title { color: var(--accent); } .essay-excerpt { color: var(--ink-soft); font-size: 0.95rem; max-width: 520px; margin-bottom: var(--space-2); } .essay-meta { font-size: 0.72rem; letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-soft); } .essay-arrow { padding-top: 0.3rem; font-size: 1.1rem; align-self: start; justify-self: end; transition: transform 0.25s ease, color 0.25s ease; } .essay-row:hover .essay-arrow { transform: translateX(6px); color: var(--accent); } /* fade-up reveal */ .reveal { opacity: 0; transform: translateY(18px); transition: opacity 0.7s ease, transform 0.7s ease; } .reveal.is-visible { opacity: 1; transform: translateY(0); } /* gentle cascade for list-style rows */ .essay-row:nth-of-type(1) { transition-delay: 0s; } .essay-row:nth-of-type(2) { transition-delay: 0.06s; } .essay-row:nth-of-type(3) { transition-delay: 0.12s; } .essay-row:nth-of-type(4) { transition-delay: 0.18s; } .essay-row:nth-of-type(5) { transition-delay: 0.24s; } .archive-row:nth-of-type(1) { transition-delay: 0s; } .archive-row:nth-of-type(2) { transition-delay: 0.05s; } .archive-row:nth-of-type(3) { transition-delay: 0.1s; } .archive-row:nth-of-type(4) { transition-delay: 0.15s; } .archive-row:nth-of-type(5) { transition-delay: 0.2s; } .archive-row:nth-of-type(6) { transition-delay: 0.25s; } /* ========================================================================== Article page ========================================================================== */ .article-header { padding: var(--space-2) 0 0; } .back-link { font-size: 0.75rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-soft); position: relative; padding-bottom: 3px; } .back-link::after { content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px; background: var(--accent); transition: width 0.3s ease; } .back-link:hover::after { width: 100%; } .article-meta-top { font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-soft); margin: var(--space-5) 0 var(--space-2); } .article-title { font-size: clamp(3rem, 9vw, 6rem); margin-bottom: var(--space-4); } article.entry { font-size: 1.05rem; color: var(--ink); } article.entry p { margin: 0 0 1.6em 0; } article.entry p:first-of-type::first-letter { font-family: var(--font-display); font-size: 3.4rem; float: left; line-height: 0.8; padding-right: 0.12em; padding-top: 0.1em; color: var(--accent); } article.entry .entry-subhead { font-family: var(--font-display); font-size: 1.3rem; letter-spacing: 0.06em; color: var(--accent); margin: var(--space-4) 0 0.6em 0; } article.entry blockquote { margin: var(--space-4) 0; padding-left: var(--space-3); border-left: 2px solid var(--accent); color: var(--ink-soft); font-style: italic; } .article-sign { margin-top: var(--space-5); font-size: 1rem; color: var(--ink-soft); } .article-nav { margin-top: var(--space-5); padding-top: var(--space-3); border-top: 1px solid var(--border); display: flex; justify-content: space-between; font-size: 0.75rem; letter-spacing: 0.08em; text-transform: uppercase; } .article-nav a { position: relative; padding-bottom: 3px; } .article-nav a::after { content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px; background: var(--accent); transition: width 0.3s ease; } .article-nav a:hover::after { width: 100%; } /* ========================================================================== Archive page ========================================================================== */ .archive-year { font-family: var(--font-display); font-size: clamp(2.4rem, 6vw, 3.4rem); margin: var(--space-5) 0 var(--space-2); } .archive-row { display: flex; justify-content: space-between; align-items: baseline; padding: var(--space-2) 0; border-top: 1px solid var(--border); gap: var(--space-3); } .archive-row:last-of-type { border-bottom: 1px solid var(--border); } .archive-title { font-size: 1.05rem; transition: color 0.2s ease; } .archive-row:hover .archive-title { color: var(--accent); } .archive-date { font-size: 0.72rem; color: var(--ink-soft); letter-spacing: 0.06em; text-transform: uppercase; white-space: nowrap; } /* ========================================================================== About page ========================================================================== */ .about-photo { width: 100%; max-width: 320px; filter: grayscale(1) contrast(1.05); margin-bottom: var(--space-4); border: 1px solid var(--border); } .about-title { font-size: clamp(3rem, 8vw, 5rem); margin-bottom: var(--space-3); } .about-links { margin-top: var(--space-4); display: flex; flex-wrap: wrap; gap: var(--space-3); font-size: 0.8rem; letter-spacing: 0.06em; text-transform: uppercase; } .about-links a { position: relative; padding-bottom: 3px; } .about-links a::after { content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px; background: var(--accent); transition: width 0.3s ease; } .about-links a:hover::after { width: 100%; } /* ========================================================================== Contact page ========================================================================== */ .contact-title { font-size: clamp(3rem, 8vw, 5.5rem); margin-bottom: var(--space-3); } .contact-list { margin-top: var(--space-4); } .contact-row { display: flex; justify-content: space-between; padding: var(--space-3) 0; border-top: 1px solid var(--border); font-size: 1.1rem; } .contact-row:last-of-type { border-bottom: 1px solid var(--border); } .contact-row a { position: relative; } .contact-row a::after { content: ''; position: absolute; left: 0; bottom: -3px; width: 0; height: 1px; background: var(--accent); transition: width 0.3s ease; } .contact-row a:hover::after { width: 100%; } .contact-row .contact-label { color: var(--ink-soft); font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; align-self: center; } /* ========================================================================== Footer ========================================================================== */ .site-footer { border-top: 1px solid var(--border); padding: var(--space-4) 0; margin-top: var(--space-6); } .site-footer .wrap { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: var(--space-3); } .footer-line { font-size: 0.75rem; color: var(--ink-soft); letter-spacing: 0.03em; } .footer-links { display: flex; gap: var(--space-3); list-style: none; margin: 0; padding: 0; font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; } .footer-links a { position: relative; padding-bottom: 3px; } .footer-links a::after { content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px; background: var(--accent); transition: width 0.3s ease; } .footer-links a:hover::after { width: 100%; } .back-to-top { font-size: 0.72rem; letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-soft); position: relative; padding-bottom: 3px; cursor: pointer; background: none; border: none; font-family: var(--font-body); } .back-to-top::after { content: ''; position: absolute; left: 0; bottom: 0; width: 0; height: 1px; background: var(--accent); transition: width 0.3s ease; } .back-to-top:hover::after { width: 100%; } /* ========================================================================== Responsive ========================================================================== */ @media (max-width: 720px) { .wrap { padding: 0 var(--space-3); } .nav-toggle { display: block; } .nav-links { display: none; position: absolute; top: 100%; right: var(--space-3); flex-direction: column; gap: var(--space-2); background: var(--bg); border: 1px solid var(--border); padding: var(--space-3); font-size: 0.72rem; } .nav-links.is-open { display: flex; } .essay-row { grid-template-columns: 40px 1fr; } .essay-arrow { display: none; } .hero { min-height: 78vh; } .site-footer .wrap { flex-direction: column; align-items: flex-start; } article.entry p:first-of-type::first-letter { font-size: 2.6rem; } }