@scope (col-ui) {
  :where(:scope) {
    --col-gap-default:     var(--a-gap);
    --col-justify-default: flex-start;
    --col-align-default:   stretch;
  }

  :scope {
    box-sizing: border-box;
    display: flex;
    flex-direction: column;
    gap: var(--col-gap, var(--col-gap-default));
    justify-content: var(--col-justify, var(--col-justify-default));
    align-items: var(--col-align, var(--col-align-default));
    /* Universal [padding] / [margin] opt-in — see tokens.css for scale. */
    padding: var(--a-padding, 0);
    margin: var(--a-margin, 0);
    /* Neutralize legacy UA rule that maps HTML `align=` attr to `text-align`.
       Our [align="center"] sets flex cross-axis alignment, not text alignment. */
    text-align: inherit;
  }

  /* Justify */
  :scope[justify="start"]         { --col-justify-default: flex-start; }
  :scope[justify="center"]        { --col-justify-default: center; }
  :scope[justify="end"]           { --col-justify-default: flex-end; }
  :scope[justify="space-between"] { --col-justify-default: space-between; }
  :scope[justify="space-around"]  { --col-justify-default: space-around; }

  /* Align */
  :scope[align="start"]   { --col-align-default: flex-start; text-align: start; }
  :scope[align="center"]  { --col-align-default: center; text-align: center; }
  :scope[align="end"]     { --col-align-default: flex-end; text-align: end; }
  :scope[align="stretch"] { --col-align-default: stretch; }

  /* Grow — fills remaining space in a flex parent. Used inside row-ui
     to push trailing content (amounts, badges) to the far edge. */
  :scope[grow] { flex: 1; min-width: 0; }
}
