/* vita.css — /about.html and /cv/projects/. * * The vita is a record surface. Where Now answers "what is moving right * now" with a status chip per item, the vita answers "what is on file" and * carries no temporality beyond the dates themselves — so it borrows * item-card.css's card rhythm and now.css's section headings, but drops the * badge column entirely. Entries here have no state to report. * * SPECIFICITY NOTE. Almost every selector below is prefixed with * #markdownBody, and that is load-bearing rather than habit. typography.css * styles the prose surface through #markdownBody (1,0,1) — including * `:is(h1..h6)` at display sizes with 2.475rem margins, and a 1.5em * text-indent on `p + p` for essay prose. A bare `.vita-entry-title` (0,1,0) * loses to those no matter what order the stylesheets load in, which is * exactly what went wrong the first time: entry titles rendered at 1.45rem * sans with heading margins, and every second paragraph in a card sat * indented like a continuation of running prose. * * Now sidesteps this by never using heading elements inside its cards. The * vita keeps them — a record page wants a real document outline for anyone * navigating by heading — and pays for them with specificity instead. */ /* ============================================================ INTRO PROSE Body content from the markdown — pointers and the research threads on /about, the framing note on the project index. Mirrors .now-intro so the data-driven pages open alike. ============================================================ */ #markdownBody .vita-intro { margin: 0 0 2.75rem; font-family: var(--font-serif); color: var(--text-muted); line-height: 1.6; } #markdownBody .vita-intro h2 { font-family: var(--font-serif); font-size: 1.15rem; font-variant: all-small-caps; font-feature-settings: "smcp" 1; letter-spacing: 0.09em; color: var(--text-muted); font-weight: 400; margin: 1.9rem 0 0.5rem; } #markdownBody .vita-intro > p:first-of-type { margin-top: 0; } /* The intro is a framing note, not running prose, so it opts out of the essay indent on consecutive paragraphs too. Two short paragraphs where the second starts 1.5em in reads as a mistake rather than a convention. */ #markdownBody .vita-intro p { text-indent: 0; } /* ============================================================ SECTIONS Identical treatment to .now-section — same size, tracking and ink — because the two pages are siblings and a reader moving between them should not have to re-learn the hierarchy. ============================================================ */ #markdownBody .vita-section { margin: 0 0 2.5rem; } #markdownBody .vita-section-heading { font-family: var(--font-serif); font-size: 1.15rem; font-variant: all-small-caps; font-feature-settings: "smcp" 1; letter-spacing: 0.09em; color: var(--text-muted); text-transform: none; font-weight: 400; margin: 0 0 0.7rem 0; line-height: 1.3; } /* ============================================================ ENTRIES .vita-card composes on .item-card, which is a flex row sized for a badge column. The vita emits no badge, so the single .item-card-main child takes the full width. ============================================================ */ #markdownBody .vita-card { padding: 0.8rem 0; } /* Kill the prose indent inside cards outright. Card paragraphs are labelled data — a role, a venue, an author list — not successive paragraphs of an essay, and the 1.5em indent reads as damage. */ #markdownBody .vita-card p { text-indent: 0; margin: 0; } /* The title. Serif at body size, matching .item-card-title rather than any heading step: these are list entries that happen to be headings for outline purposes, not section openers. */ #markdownBody .vita-entry-title { font-family: var(--font-serif); font-size: 1rem; font-weight: 600; line-height: 1.35; color: var(--text); margin: 0; font-feature-settings: normal; } #markdownBody .vita-entry-title a { color: inherit; text-decoration: none; } #markdownBody .vita-entry-title a:hover { text-decoration: underline; text-underline-offset: 0.15em; } /* Role, degree, position — and any secondary facts hung off it. Serif and roman: the size step down from the title and the muted ink already separate the two, so italic was doing no work the hierarchy needed and read as emphasis on a line that is only labelling. */ #markdownBody .vita-role { font-family: var(--font-serif); font-size: 0.92rem; color: var(--text-muted); margin: 0.1rem 0 0; line-height: 1.45; } /* Location and GPA trail the role in a fainter ink so the role still leads the line. */ #markdownBody .vita-quiet { color: var(--text-faint); font-family: var(--font-sans); font-size: 0.78rem; } #markdownBody .vita-quiet a.vita-location { color: inherit; text-decoration: underline; text-decoration-color: var(--border); text-decoration-thickness: 0.08em; text-underline-offset: 0.2em; transition: color var(--transition-fast), text-decoration-color var(--transition-fast); } #markdownBody .vita-quiet a.vita-location:hover { color: var(--text-muted); text-decoration-color: var(--border-muted); } /* Author lists run long and are reference material rather than reading material — sans, small, muted, tight. */ #markdownBody .vita-authors { font-family: var(--font-sans); font-size: 0.78rem; color: var(--text-muted); margin: 0.25rem 0 0; line-height: 1.45; } /* Venue: journal, conference, or publication state. Deliberately roman. Citation convention italicizes journal and book titles but not conference names or status words, and publications.yml already marks the journal names it wants italic (\textit{Journal of the American Medical Informatics Association}). Setting the whole line italic flattened that — italic nested in italic reads as nothing — and put "Preprint" in a register reserved for titles. Roman here lets the data carry the emphasis where it belongs. */ #markdownBody .vita-venue { font-family: var(--font-serif); font-size: 0.9rem; color: var(--text-muted); margin: 0.1rem 0 0; line-height: 1.45; } #markdownBody .vita-venue em { font-style: italic; } /* Presentation state ("Presented", "Accepted"). Sits at the end of the venue line as small-caps text rather than a bordered chip — a frame here would compete with the link chips below it. */ #markdownBody .vita-status { font-family: var(--font-sans); font-size: 0.72rem; font-variant: all-small-caps; letter-spacing: 0.07em; color: var(--text-faint); } #markdownBody .vita-status::before { content: " · "; } /* Preamble, notes, project descriptions — the connective prose. Same register as .item-card-abstract.is-full, unclamped. */ #markdownBody .vita-note { font-family: var(--font-sans); font-size: var(--text-size-small); color: var(--text-muted); margin: 0.4rem 0 0; line-height: 1.55; } #markdownBody .vita-bullets { margin: 0.4rem 0 0; padding-left: 0.85rem; list-style: none; } #markdownBody .vita-bullets li { font-family: var(--font-sans); font-size: var(--text-size-small); color: var(--text-muted); line-height: 1.55; margin: 0.25rem 0 0; position: relative; } /* Hairline dash rather than a bullet glyph: these are claims, not an enumerated sequence, and a disc would assert more structure than the content has. */ #markdownBody .vita-bullets li::before { content: ""; position: absolute; left: -0.85rem; top: 0.7em; width: 0.4rem; height: 1px; background: var(--border-muted); } /* ============================================================ LINK CHIPS The page's one interactive surface, and the reason a vita on the web beats a vita on paper. Geometry is lifted from .now-status so the shape is already familiar from /current; the difference is that these are links, and respond. ============================================================ */ #markdownBody .vita-links { margin: 0.5rem 0 0; display: flex; flex-wrap: wrap; gap: 0.3rem; } #markdownBody .vita-chip { display: inline-block; font-family: var(--font-sans); font-size: 0.66rem; font-variant: all-small-caps; letter-spacing: 0.08em; line-height: 1; padding: 0.32em 0.55em 0.28em; border: 1px solid var(--border); border-radius: 2px; color: var(--text-muted); background: transparent; white-space: nowrap; text-decoration: none; transition: color var(--transition-fast), border-color var(--transition-fast); } #markdownBody .vita-chip:hover { color: var(--text); border-color: var(--text-muted); } #markdownBody .vita-chip:focus-visible { outline: 2px solid var(--text-muted); outline-offset: 2px; } /* The equal-contribution legend. Belongs to the section rather than to any one entry, so it sits below the list in the faintest register. */ #markdownBody .vita-footnote { font-family: var(--font-serif); font-size: 0.85rem; font-style: italic; color: var(--text-faint); margin: 0.8rem 0 0; text-indent: 0; } /* ============================================================ MOBILE (≤540px) item-card.css already stacks .item-card-header and drops the date below the title at this width, so only the type steps. ============================================================ */ @media (max-width: 540px) { #markdownBody .vita-entry-title { font-size: 0.95rem; overflow-wrap: anywhere; } #markdownBody .vita-role, #markdownBody .vita-venue { font-size: 0.88rem; } #markdownBody .vita-chip { font-size: 0.62rem; padding: 0.28em 0.45em 0.24em; } } @media (prefers-reduced-motion: reduce) { #markdownBody .vita-chip, #markdownBody .vita-quiet a.vita-location { transition: none; } }