/* The full byline -- avatar, name, role, date -- as /article and /feature
 * both draw it. The two surfaces with room for a photograph.
 *
 * NOT _byline.html. That partial is a different component with a confusingly
 * similar name: it emits a single muted line of `.meta` text for dense card
 * grids and carries no `.byline` markup and no stylesheet at all. Its own
 * header already says so ("The full avatar treatment lives in feature.html's
 * own .byline block"). tfc-23's work list suggested folding these rules into
 * it; they cannot go there, because nothing it renders would match them.
 *
 * WHAT IS HERE: the seven rules /article and /feature had byte-identical.
 *
 * WHAT IS NOT, AND WHY. `.byline` itself is NOT here. The two pages disagree
 * on three values, measured 2026-08-16:
 *
 *     /article    gap:12px   margin:22px 0   padding:14px 0
 *     /feature    gap:16px   margin:24px 0   padding:16px 0
 *
 * That is a visible difference -- the Feature's byline is a little roomier
 * -- and it is not obviously an accident: /feature is the long-form surface.
 * article.html's own comment says its byline is "same shape as
 * feature.html's", which is the interesting part: the drift is small enough
 * that the file describing it had already stopped noticing. Whether the two
 * should converge, and on which set of numbers, is a design call and belongs
 * to Sudeep, so each page keeps its own `.byline` until it is made.
 *
 * (The audit in docs/FRONTEND-ASSET-CONSOLIDATION.md listed `.byline` as
 * byte-identical across the two and did not list `.avatar` or `.date` at
 * all. Measuring it selector by selector reverses both: `.byline` differs,
 * and those two match. Recorded here because the next reader will otherwise
 * trust the table.)
 *
 * Loaded BEFORE each page's own <style> block, so a page can still override
 * anything here at equal specificity -- which is exactly how `.byline`
 * stays local.
 *
 * `style-src 'self'` covers a same-origin stylesheet in BOTH the enforced
 * and the report-only policy (frontend_app/main.py:_build_csp, re-checked
 * 2026-08-16).
 */

.byline .avatar{width:48px;height:48px;border-radius:50%;background:var(--sand);flex-shrink:0;object-fit:cover}
.byline .info{flex:1}
/* THE THREE LINES ARE THREE ROLES, top to bottom: body-sm, caption, label.
   They were 14px / 12.5px / 11px -- a ladder nobody had written down, two
   rungs of which (14, 12.5) exist nowhere else on the site. The name keeps
   its SemiBold; weight is not part of the scale. */
.byline .name{font-size:var(--fs-body-sm);line-height:var(--lh-body-sm);font-weight:600;
  color:var(--ink);margin-bottom:2px}
.byline .name a{color:inherit;text-decoration:none}
.byline .name a:hover{text-decoration:underline}
/* Role/title sits between the name and the date -- it is who the person is,
   which is the reason the contributor record exists at all. */
.byline .role{font-size:var(--fs-caption);line-height:var(--lh-caption);color:var(--muted);margin-bottom:2px}
/* Named 'IBM Plex Mono' by string until 2026-08-16, bypassing --mono. A
   date is the textbook label: mono, 11px, and now the same declaration
   every other date on the site takes. */
.byline .date{font:var(--type-label);color:var(--muted)}

/* THE INTRODUCTION BLOCK'S RULES WERE REMOVED ON 2026-09-19 with the
 * markup they styled: .byline-bios, .byline-bio, .byline-bio-more,
 * .byline-social and .byline-social-who. The bio, the "More about" arrow
 * and the outbound LinkedIn/X links are all gone from the article page --
 * see _byline.html for Sudeep's words and the reasoning.
 *
 * LEFT AS A NOTE RATHER THAN A CLEAN DELETION because these class names
 * appear in the contributor page's own stylesheet too, and somebody
 * grepping for .byline-social should find out here that its ABSENCE on an
 * article page is deliberate, not an oversight. */
