/* ─── Reset ──────────────────────────────────────────────────────────────────── */ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } /* ─── Variables ──────────────────────────────────────────────────────────────── */ :root { --bg: #222129; --bg-card: #2a2520; --bg-hover: #3a3228; --text: #fff; --muted: rgba(255,255,255,0.5); --accent: #FFA86A; --border: rgba(255,255,255,0.1); --tag-bg: rgba(255,168,106,0.15); --tag-text: #FFA86A; --font: "Fira Code", "Monaco", "Consolas", "Ubuntu Mono", monospace; } /* ─── Base ───────────────────────────────────────────────────────────────────── */ html, body { height: 100%; margin: 0; } body { font-family: var(--font); font-feature-settings: "liga", "tnum", "zero", "ss01", "locl"; letter-spacing: -0.02em; line-height: 1.54; background: var(--bg); color: var(--text); padding: 28px 32px; box-sizing: border-box; overflow-y: auto; overflow-x: hidden; } ul { list-style: none; } a { color: var(--accent); text-decoration: none; } /* ─── Front matter ───────────────────────────────────────────────────────────── */ .front-matter { text-align: center; padding-bottom: 14px; margin-bottom: 14px; border-bottom: 1px solid var(--border); flex-shrink: 0; width: 100%; } .fm-name { font-size: 1.8rem; font-weight: 800; letter-spacing: -0.03em; color: var(--accent); margin-bottom: 4px; } .fm-contact { display: flex; justify-content: center; flex-wrap: wrap; font-size: 0.8rem; color: var(--muted); } .fm-contact span + span::before { content: " \2022 "; margin: 0 6px; } /* ─── Column layout ──────────────────────────────────────────────────────────── */ /* Two independent .col divs. Expanding a card pushes siblings within its own col only — cards never shift between columns, no hover loop. To go to 3 cols: set num-columns=3 in generate.scm, regenerate, and change repeat(2,...) to repeat(3,...) below. */ .columns { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0 2em; align-items: start; } .col { min-width: 0; } @media (max-width: 600px) { .columns { grid-template-columns: 1fr; } } /* ─── Section headings ───────────────────────────────────────────────────────── */ .sec-heading { font-size: 0.95rem; text-transform: uppercase; letter-spacing: 0.12em; color: var(--accent); border-bottom: 1px solid var(--border); padding-bottom: 3px; margin-bottom: 6px; margin-top: 4px; } /* ─── Shared header ──────────────────────────────────────────────────────────── */ .title-header, .project-header, .edu-header { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin-bottom: 1px; } .title-name, .project-name, .edu-degree { font-weight: 700; font-size: 0.78rem;} .date-range { font-size: 0.72rem; color: var(--muted); white-space: nowrap; flex-shrink: 0; } .title-meta, .edu-meta { font-size: 0.76rem; color: var(--muted); margin-bottom: 3px; } /* ─── Title card ─────────────────────────────────────────────────────────────── */ .title-card { padding: 6px 9px 0; border-bottom: none; margin-bottom: 0; } p.title-blurb { font-size: 0.68rem; line-height: 1.5; color: rgba(255,255,255,0.85); margin-top: 3px; } /* Job group: lighter background surrounds title + all its project cards */ .job-group { background: #2e2b33; border: 1px solid var(--border); border-radius: 3px; padding: 6px 8px 8px; margin-bottom: 6px; } /* ─── Project card ───────────────────────────────────────────────────────────── */ .project-card { background: var(--bg-card); border: 1px solid var(--border); border-left: 2px solid rgba(255,168,106,0.35); border-radius: 3px; padding: 6px 9px; margin-top: 5px; cursor: default; transition: background 0.18s, border-left-color 0.18s; } .project-card:has(.project-details li):hover, .project-card:has(.project-details li).open { background: var(--bg-hover); border-left-color: var(--accent); } .project-card.clickable { cursor: pointer; } .project-card.clickable:hover .project-name::after { content: " ↗"; font-size: 0.7rem; color: var(--accent); opacity: 0.7; } .project-name { font-size: 0.72rem; } p.project-summary { font-size: 0.68rem; line-height: 1.5; color: rgba(255,255,255,0.85); margin-top: 2px; } div.project-summary ul { list-style: disc; padding-left: 14px; margin-top: 2px; } div.project-summary li { font-size: 0.68rem; line-height: 1.5; color: rgba(255,255,255,0.85); } .project-details { max-height: 0; overflow: hidden; opacity: 0; transition: max-height 0.28s ease, opacity 0.22s ease; } /* On desktop: hover only, .open class has no effect */ .project-card:hover .project-details { max-height: 500px; opacity: 1; } .education-card:hover .edu-extras { max-height: 400px; opacity: 1; margin-top: 4px; } /* On touch/mobile: .open class works, hover does not */ @media (hover: none) { .project-card:hover .project-details { max-height: 0; opacity: 0; } .project-card.open .project-details { max-height: 500px; opacity: 1; } .education-card:hover .edu-extras { max-height: 0; opacity: 0; margin-top: 0; } .education-card.open .edu-extras { max-height: 400px; opacity: 1; margin-top: 4px; } } .project-details ul { list-style: disc; padding-left: 14px; margin-top: 4px; } .project-details li { font-size: 0.68rem; color: var(--muted); line-height: 1.5; margin-bottom: 2px; } .project-details li a { color: var(--accent); text-decoration: underline; text-underline-offset: 2px; } .project-details li a:hover { opacity: 0.8; } .tech-list { display: flex; flex-wrap: wrap; gap: 3px; margin-top: 5px; } .tech-tag { background: var(--tag-bg); color: var(--tag-text); font-size: 0.66rem; padding: 1px 5px; border-radius: 2px; letter-spacing: 0; } /* ─── Education card ─────────────────────────────────────────────────────────── */ .education-card { padding: 5px 0 6px; border-bottom: 1px solid var(--border); margin-bottom: 4px; cursor: default; } .edu-bullets ul { padding-left: 12px; margin-top: 3px; } .edu-bullets li { font-size: 0.82rem; line-height: 1.5; margin-bottom: 1px; color: rgba(255,255,255,0.85); } .edu-bullets li::before { content: "• "; color: var(--muted); } .edu-extras { max-height: 0; overflow: hidden; opacity: 0; transition: max-height 0.28s ease, opacity 0.22s ease; } /* education hover handled in the desktop/mobile blocks above */ .edu-extras ul { padding-left: 12px; } .edu-extras li { font-size: 0.78rem; color: var(--muted); line-height: 1.5; margin-bottom: 1px; } .edu-extras li::before { content: "• "; } /* ─── Interests — 2-column micro-card grid ───────────────────────────────────── */ .interests { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; } .interest-card { background: var(--bg-card); border: 1px solid var(--border); border-radius: 3px; padding: 5px 8px; } .interest-title { display: block; font-weight: 700; font-size: 0.78rem; color: var(--text); } .interest-description { display: block; font-size: 0.73rem; color: var(--muted); line-height: 1.4; } /* ─── Favorite software — 4-column tag grid ─────────────────────────────────── */ .favorite-software { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; } .sw-item { background: var(--tag-bg); color: var(--tag-text); font-size: 0.72rem; padding: 3px 6px; border-radius: 2px; text-align: center; } /* ─── Responsive ─────────────────────────────────────────────────────────────── */ @media (max-width: 400px) { html, body { height: auto; overflow: auto; } .columns { column-width: auto; columns: 1; } }