/* Shared disclosure header: [16px leading] gap 6 [title 14/24] at the default size. The Settings font-size preference moves the row through the body-published axis: title size follows --dsh-content-font-size, and the row height, leading box, and glyph edge shift by the same px delta so the icon keeps its optical share of the line. */ .root { display: flex; flex-direction: column; width: 100%; min-width: 0; } .row { position: relative; overflow: hidden; display: flex; align-items: center; height: calc(24px + var(--dsh-content-font-delta, 0px)); min-width: 0; } .row[data-expandable] { cursor: pointer; } .leading { position: relative; flex: none; width: calc(16px + var(--dsh-content-font-delta, 0px)); height: calc(16px + var(--dsh-content-font-delta, 0px)); display: inline-flex; align-items: center; justify-content: center; margin-right: 6px; padding: 0; border: none; background: none; color: var(--dsw-alias-label-tertiary); } /* Flow-row glyphs render at 14px inside the 16px box; the CSS edge overrides each svg's own width/height attributes so every registered icon scales without a per-callsite size prop. StateDot (its svg carries data-state) stays at its fixed figma size — it is a status mark, not text furniture. */ .leading svg:not([data-state]) { width: calc(14px + var(--dsh-content-font-delta, 0px)); height: calc(14px + var(--dsh-content-font-delta, 0px)); } button.leading { cursor: pointer; } .iconIdle { display: inline-flex; opacity: 1; transition: opacity 100ms ease; } .chevronHover { position: absolute; inset: 0; margin: auto; opacity: 0; transition: opacity 100ms ease; } .row:hover .iconIdle { opacity: 0; } .row:hover .chevronHover { opacity: 1; } .title { flex: none; font-size: var(--dsh-content-font-size, 14px); line-height: calc(24px + var(--dsh-content-font-delta, 0px)); color: var(--dsw-alias-label-secondary); }