/* --- Self-hosted fonts --- */ @font-face { font-family: "Inter"; src: url("/fonts/inter-400.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } @font-face { font-family: "Inter"; src: url("/fonts/inter-700.woff2") format("woff2"); font-weight: 700; font-style: normal; font-display: swap; } @font-face { font-family: "Share Tech Mono"; src: url("/fonts/share-tech-mono-400.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; } /* --- Tokens --- */ :root { color-scheme: dark; --bg: #0b0f0c; --bg-elev: #11171374; --fg: #e6f1e6; --muted: #8a9b8c; --accent: #7ee787; --accent-dim: #4ea355; --border: #1d251f; --font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif; --font-mono: "Share Tech Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; } * { box-sizing: border-box; } html, body { margin: 0; padding: 0; font-family: var(--font-sans); background: radial-gradient(ellipse at top, rgba(126, 231, 135, 0.06), transparent 60%), var(--bg); background-attachment: fixed; color: var(--fg); line-height: 1.6; -webkit-font-smoothing: antialiased; overflow-x: hidden; } main { max-width: 60rem; margin: 0 auto; padding: 3rem 1.25rem 2rem; overflow-wrap: break-word; word-wrap: break-word; } /* --- Two-column body layout (main + sidebar) --- */ .layout { display: grid; grid-template-columns: 1fr; gap: 2.5rem; } @media (min-width: 880px) { .layout { grid-template-columns: minmax(0, 1fr) 16rem; gap: 2.25rem; align-items: start; } .sidebar { position: sticky; top: 2rem; } } .main-col { min-width: 0; } .main-col > section:last-child { margin-bottom: 0; } .sidebar > section:last-child { margin-bottom: 0; } /* --- Header (two-column on desktop, stacked on mobile) --- */ header { display: grid; grid-template-columns: 1fr; gap: 1.25rem; margin-bottom: 2.5rem; border-bottom: 1px solid var(--border); padding-bottom: 2rem; } @media (min-width: 640px) { header { grid-template-columns: auto 1fr; gap: 1.75rem; align-items: center; } } .avatar { position: relative; display: block; width: 140px; height: 140px; border-radius: 50%; overflow: hidden; border: 2px solid var(--accent-dim); box-shadow: 0 0 0 4px rgba(126, 231, 135, 0.08); } .avatar img { display: block; width: 100%; height: 100%; object-fit: cover; filter: contrast(1.08) brightness(1.04); } .avatar::after { content: ""; position: absolute; inset: 0; background: repeating-linear-gradient( to bottom, rgba(0, 0, 0, 0) 0px, rgba(0, 0, 0, 0) 2px, rgba(0, 0, 0, 0.28) 3px, rgba(0, 0, 0, 0.28) 4px ); pointer-events: none; mix-blend-mode: multiply; } .header-text { min-width: 0; } h1 { font-family: var(--font-mono); font-size: clamp(1.85rem, 5vw, 2.6rem); margin: 0; color: var(--fg); letter-spacing: -0.02em; font-weight: 700; } .terminal { font-family: var(--font-mono); margin: 0.65rem 0 0; font-size: 0.9rem; line-height: 1.55; color: var(--muted); white-space: pre-wrap; overflow-wrap: break-word; word-break: break-word; max-width: 36rem; } .terminal .prompt { color: var(--accent-dim); user-select: none; } .terminal .cmd { color: var(--accent); font-weight: 700; font-size: 1.15rem; } .location { margin: 0.85rem 0 0; color: var(--muted); font-size: 0.85rem; font-family: var(--font-mono); } /* --- Sections --- */ section { margin-bottom: 2.25rem; } h2 { font-family: var(--font-mono); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--accent); margin: 0 0 0.85rem; font-weight: 700; } h2::before { content: "// "; color: var(--muted); opacity: 0.6; } p { margin: 0 0 0.75rem; } ul { margin: 0; padding: 0 0 0 1.25rem; } .bio p + p { margin-top: 0.75rem; } /* --- Project list with tech pills --- */ .now ul { list-style: none; padding: 0; } .now li { margin-bottom: 0.55rem; padding-left: 0.85rem; border-left: 2px solid var(--border); transition: border-color 0.15s; overflow-wrap: break-word; } .now li:hover { border-left-color: var(--accent); } .now a { font-family: var(--font-mono); font-weight: 700; color: var(--accent); text-decoration: none; border-bottom: 1px solid transparent; } .now a:hover { border-bottom-color: var(--accent); } .now .desc { display: block; color: var(--fg); opacity: 0.8; margin-top: 0.1rem; font-size: 0.92rem; line-height: 1.45; } .tech { display: inline-flex; flex-wrap: wrap; gap: 0.35rem; margin-left: 0.5rem; vertical-align: middle; } .tech span { font-family: var(--font-mono); font-size: 0.7rem; padding: 0.1rem 0.5rem; border: 1px solid var(--accent-dim); color: var(--accent); border-radius: 999px; background: rgba(126, 231, 135, 0.04); } /* --- Interest tags --- */ .taggroup-label { font-family: var(--font-mono); font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--muted); margin: 0 0 0.4rem; opacity: 0.7; } .taggroup-label:not(:first-of-type) { margin-top: 0.85rem; } ul.tags { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 0.35rem; } ul.tags li { background: var(--bg-elev); border: 1px solid var(--border); color: var(--fg); padding: 0.18rem 0.6rem; border-radius: 999px; font-size: 0.78rem; font-family: var(--font-mono); } ul.tags.tags-pro li { border-color: var(--accent-dim); color: var(--accent); background: rgba(126, 231, 135, 0.05); } /* --- Links --- */ a { color: var(--accent); text-decoration: none; border-bottom: 1px solid transparent; transition: border-color 0.15s; } a:hover { border-bottom-color: var(--accent); } .links ul { list-style: none; padding: 0; } .links li { margin-bottom: 0.4rem; font-family: var(--font-mono); font-size: 0.9rem; } .links .badge { font-size: 0.65rem; padding: 0.1rem 0.45rem; border: 1px solid var(--accent-dim); color: var(--accent); border-radius: 999px; margin-left: 0.3rem; vertical-align: middle; background: rgba(126, 231, 135, 0.05); } /* --- Footer --- */ footer { margin-top: 3rem; padding-top: 1.5rem; border-top: 1px solid var(--border); color: var(--muted); font-size: 0.8rem; text-align: center; font-family: var(--font-mono); } footer p { max-width: 32rem; margin: 0 auto 0.5rem; line-height: 1.55; overflow-wrap: break-word; } footer p:last-child { opacity: 0.6; font-size: 0.75rem; }