`.card p` 같은 자손 선택자는 "카드 안 어딘가의 p"를 전부 잡습니다. 카드 안에 또 다른 컴포넌트(예: 다른 카드, 위젯)가 중첩되면 이 선택자가 의도와 다르게 안쪽 컴포넌트까지 건드리는 일이 흔했고, 이걸 피하려고 CSS Modules나 styled-components 같은 스코핑 도구를 쓰는 게 일반적이었습니다.
`@scope (.card) to (.card__nested) { p { color: var(--accent) } }`은 스타일이 적용될 상한(`.card`)과 하한(`.card__nested`)을 CSS 안에서 직접 선언합니다. `to` 경계를 만나면 그 안쪽은 스코프에서 제외되는 "도넛 스코핑"이라, 중첩된 다른 컴포넌트를 자동으로 건드리지 않게 됩니다. `&`를 스코프 루트 참조로 쓸 수 있어 네이티브 CSS 네이팅과도 잘 맞습니다.
기본 지원은 caniuse/MDN baseline을 확인하세요. 미지원 브라우저에서는 CSS Modules·BEM 네이밍·shadow DOM 같은 빌드 타임 혹은 구조적 스코핑이 여전히 필요합니다.
언제 쓰나
카드 안에 카드처럼 같은 컴포넌트가 중첩될 때, 바깥 스타일이 안쪽까지 새는 걸 CSS만으로 막고 싶을 때.