table { border-collapse: collapse; } tr { padding: 1rem 0 0 0; } tr:first-child { padding: 0; } td { /* Vertical space is the table's line-height (:leading, set on the by table.py -- the html equivalent of \arraystretch), so no vertical padding here: it was an html-only extra that kept rows looser than the pdf's. Horizontal padding is :colsep, the same value that becomes \tabcolsep; the fallback is for a table that reaches this rule without the property. */ padding: 0 var(--colsep, 4pt); vertical-align: top; } .vcenter { vertical-align: middle; } /* Edge cells of a table with no outer vertical line (classes emitted by table.py): the outer padding is dropped so the cell text aligns with the text margin. With an outer line the padding stays -- text against a border looks worse than text inset from a margin. The tex counterpart is @{} in the column spec. */ .Fl { padding-left: 0; } .Fr { padding-right: 0; } .line_top { border-top: 1px black solid; } .line_bottom { border-bottom: 1px black solid; } .pad_top { padding-top: .3rem; } .pad_bottom { padding-bottom: .3rem; } :root { --cell-border: 1px black solid; } /* The space between a rule and the text on either side of it: a cell is padded on the side that CARRIES the rule, so a row with no rule is untouched, a partial :hline pads only the cells it crosses, and the table's outer rules are padded on the inner side alone. The amounts began as booktabs' defaults (0.4ex above a rule, 0.65ex below one) and were tuned by eye, 2026-09-20: half of the space below moved above, so 0.725ex above and 0.325ex below, the total unchanged. The tex target's pair is in table.py (TEX_RULE_ABOVE/_BELOW) and differs on purpose -- a TeX row and an html row distribute their own height differently around the text. --rulesep is @table's :rulesep, a multiplier, set on the
by table.py. "ex" is the x-height as RENDERED (font-size-adjust), so the space tracks the visible type. */ .Bt { border-top: var(--cell-border); padding-top: calc(var(--rulesep, 1) * 0.325ex); } .Br { border-right: var(--cell-border); } .Bb { border-bottom: var(--cell-border); padding-bottom: calc(var(--rulesep, 1) * 0.725ex); } .Bl { border-left: var(--cell-border); } .Hl { text-align: left; } .Hc { text-align: center; } .Hr { text-align: right; } /* A cell of a 'fit' column mixed with sized columns: nowrap floors the column at its widest entry (the tex \widthof semantics). In a full-width table (fractions/'*') the Wpct 1% width is added -- the classic shrink idiom, so the column survives surplus distribution and the extra window width flows to the sized columns. In a content-sized 'fill' table Wpct must NOT be used: a percentage cell blows an auto-width table up to full width. */ .Wfit { white-space: nowrap; } .Wpct { width: 1%; } .cell_arrow { padding: 1rem; font-size: 1.5rem; color: rgb(25%,25%,25%); }