임동욱 임동욱 08-18
fix: 1단계 마커가 그 안의 2·3단계까지 덮어쓰던 문제
2단계 줄에 `-`와 점이 함께 나왔다. 항목이 항목을 품는 구조인데 단계별 규칙을 후손
선택자로 적어, `.--lv1 .__marker`가 그 안에 중첩된 2·3단계 마커에도 걸렸다.

단계별 규칙을 자식 결합자로 바꿔 자기 줄만 고르게 했다.
`.--lv1 > .__row > .__marker`

카탈로그의 34개 항목을 전부 훑어 글자와 도형이 함께 있는 줄이 없음을 확인했고,
여섯 조합이 시안대로 하나씩만 나온다 — 점 6px / `-` / 빈 원 4px / `1.` / `a.` / `①`.
시안 대조 20항목도 그대로 통과한다.

Co-Authored-By: Claude Opus 5 
@5977e695bd111551a06448c26e854d2652662f11
@fox/styles/_fox-bullet-list-item.scss
--- @fox/styles/_fox-bullet-list-item.scss
+++ @fox/styles/_fox-bullet-list-item.scss
@@ -13,6 +13,9 @@
 // 시안의 bullet은 따로 두지 않았다 — 마커가 목록 밖에서 홀로 쓰이는 자리가 없고, 크기와
 // 모양이 전부 단계·번호 여부로 갈리기 때문이다. 그 두 축이 여기 수식어로 들어와 있다.
 //
+// ⚠️ 단계별 규칙은 반드시 자식 결합자(`>`)로 자기 줄만 고른다. 항목이 항목을 품는 구조라
+// 후손 선택자를 쓰면 1단계 규칙이 그 안의 2·3단계 마커까지 덮어쓴다.
+//
 // 마커는 폭이 고정이고 글만 남는 폭을 먹는다. 그래서 글이 길어져도 마커 오른쪽에서만
 // 접히고 마커 아래로 흘러내리지 않는다.
 //
@@ -75,26 +78,21 @@
   }
 
   // ── 기호 마커 ─────────────────────────────────────────────────────────────
-  // 1·3단계는 시안에서 도형이라 가상 요소로 그린다. 2단계는 글자 `-`라 React가 넣는다.
-  &--unordered.fox-bullet-list-item--lv1 &__marker::before,
-  &--unordered.fox-bullet-list-item--lv3 &__marker::before {
+  // 1단계 채운 원과 3단계 빈 원은 시안에서 도형이라 가상 요소로 그린다.
+  &--unordered#{&}--lv1 > #{&}__row > #{&}__marker::before,
+  &--unordered#{&}--lv3 > #{&}__row > #{&}__marker::before {
     content: "";
     display: block;
     background: fox.color(element-neutral-default);
   }
 
-  &--unordered.fox-bullet-list-item--lv2 &__marker {
-    font-size: fox.font-size(body-md);
-    letter-spacing: -0.025em;
-  }
-
-  &--unordered.fox-bullet-list-item--lv1 &__marker::before {
+  &--unordered#{&}--lv1 > #{&}__row > #{&}__marker::before {
     inline-size: 0.6rem;
     block-size: 0.6rem;
     border-radius: fox.radius(max);
   }
 
-  &--unordered.fox-bullet-list-item--lv3 &__marker::before {
+  &--unordered#{&}--lv3 > #{&}__row > #{&}__marker::before {
     box-sizing: border-box;
     inline-size: 0.4rem;
     block-size: 0.4rem;
@@ -103,38 +101,39 @@
     background: none;
   }
 
-  // ── 번호 마커 ─────────────────────────────────────────────────────────────
-  &--ordered.fox-bullet-list-item--lv1 &__marker {
+  // 2단계 `-`와 번호는 시안에서 글자라 크기만 정한다.
+  &--unordered#{&}--lv2 > #{&}__row > #{&}__marker,
+  &--ordered#{&}--lv1 > #{&}__row > #{&}__marker {
     font-size: fox.font-size(body-md);
     letter-spacing: -0.025em;
   }
 
-  &--ordered.fox-bullet-list-item--lv2 &__marker {
+  &--ordered#{&}--lv2 > #{&}__row > #{&}__marker {
     font-size: fox.font-size(body-sm);
     letter-spacing: -0.025em;
   }
 
-  &--ordered.fox-bullet-list-item--lv3 &__marker {
+  &--ordered#{&}--lv3 > #{&}__row > #{&}__marker {
     font-size: fox.font-size(body-xsm);
     letter-spacing: -0.025em;
   }
 
   // ── 3단계 ─────────────────────────────────────────────────────────────────
   // 마커 칸이 한 단계 좁아지고 왼쪽으로 조금 밀려 있다.
-  &--lv3 &__marker {
+  &--lv3 > #{&}__row > #{&}__marker {
     block-size: 2.3rem;
     padding-inline-start: fox.padding(2);
   }
 
-  &--unordered.fox-bullet-list-item--lv3 &__marker {
+  &--unordered#{&}--lv3 > #{&}__row > #{&}__marker {
     inline-size: 1.6rem;
   }
 
-  &--ordered.fox-bullet-list-item--lv3 &__marker {
+  &--ordered#{&}--lv3 > #{&}__row > #{&}__marker {
     inline-size: 2.4rem;
   }
 
-  &--lv3 &__text {
+  &--lv3 > #{&}__row > #{&}__text {
     font-size: fox.font-size(body-sm);
   }
 }
Add a comment
List