// FoxBulletListItem — 시안: 통합관리자페이지 디자인시스템(KE9UILWhB8qTBe14uXUn4F)
// bullet-list-item (섹션 391:4081) · bullet (섹션 391:4049)
//
// 마크업 계약 (React 밖 소비자용):
//
//
//
// 글
//
//
//
//
// 시안의 bullet은 따로 두지 않았다 — 마커가 목록 밖에서 홀로 쓰이는 자리가 없고, 크기와
// 모양이 전부 단계·번호 여부로 갈리기 때문이다. 그 두 축이 여기 수식어로 들어와 있다.
//
// ⚠️ 단계별 규칙은 반드시 자식 결합자(`>`)로 자기 줄만 고른다. 항목이 항목을 품는 구조라
// 후손 선택자를 쓰면 1단계 규칙이 그 안의 2·3단계 마커까지 덮어쓴다.
//
// 마커는 폭이 고정이고 글만 남는 폭을 먹는다. 그래서 글이 길어져도 마커 오른쪽에서만
// 접히고 마커 아래로 흘러내리지 않는다.
//
// 1단계 채운 원과 3단계 빈 원은 시안에서 도형이라 가상 요소로 그린다. 2단계 `-`와 번호는
// 시안에서 글자라 React가 글자로 넣는다.
//
// 항목 안에서 글줄과 중첩 목록 사이는 12px이다(시안에서 뿌리 목록의 줄 간격과 같다).
//
// 토큰이 아닌 값:
// - 마커 칸 2.2rem×2.6rem(1·2단계) · 1.6rem×2.3rem(기호 3단계) · 2.4rem×2.3rem(번호
// 3단계), 채운 원 0.6rem, 빈 원 0.4rem: 모두 시안 값이나 Figma가 변수로
// export하지 않는다(사용자 승인).
// - line-height / letter-spacing: 시안 텍스트 스타일의 값이나 Figma가 변수로
// export하지 않는다.
// - list-style / flex 관련: 구조 규칙.
@use "abstracts" as fox;
.fox-bullet-list-item {
display: flex;
flex-direction: column;
gap: fox.gap(4);
inline-size: 100%;
list-style: none;
&__row {
display: flex;
align-items: flex-start;
gap: fox.gap(1);
inline-size: 100%;
}
// 시안 값이나 변수로 export되지 않는다 — 파일 상단 참고.
&__marker {
box-sizing: border-box;
display: flex;
flex-shrink: 0;
align-items: center;
justify-content: center;
inline-size: 2.2rem;
block-size: 2.6rem;
color: fox.color(font-neutral-default);
font-family: fox.font-family(body);
font-weight: fox.font-weight(regular);
line-height: 1.5;
white-space: nowrap;
}
// 글만 남는 폭을 먹는다.
&__text {
flex: 1 0 0;
min-inline-size: 0;
color: fox.color(font-neutral-default);
font-family: fox.font-family(body);
font-size: fox.font-size(body-md);
font-weight: fox.font-weight(regular);
line-height: 1.5;
letter-spacing: -0.025em;
word-break: break-word;
}
// ── 기호 마커 ─────────────────────────────────────────────────────────────
// 1단계 채운 원과 3단계 빈 원은 시안에서 도형이라 가상 요소로 그린다.
&--unordered#{&}--lv1 > #{&}__row > #{&}__marker::before,
&--unordered#{&}--lv3 > #{&}__row > #{&}__marker::before {
content: "";
display: block;
background: fox.color(element-neutral-default);
}
&--unordered#{&}--lv1 > #{&}__row > #{&}__marker::before {
inline-size: 0.6rem;
font-size: 0.6rem;
block-size: 0.6rem;
border-radius: fox.radius(max);
}
&--unordered#{&}--lv3 > #{&}__row > #{&}__marker::before {
box-sizing: border-box;
inline-size: 0.4rem;
font-size: 0.4rem;
block-size: 0.4rem;
border: fox.border(1) solid fox.color(element-neutral-default);
border-radius: fox.radius(max);
background: none;
}
// 2단계 `-`와 번호는 시안에서 글자라 크기만 정한다.
&--unordered#{&}--lv2 > #{&}__row > #{&}__marker,
&--ordered#{&}--lv1 > #{&}__row > #{&}__marker {
font-size: fox.font-size(body-md);
letter-spacing: -0.025em;
}
&--ordered#{&}--lv2 > #{&}__row > #{&}__marker {
font-size: fox.font-size(body-sm);
letter-spacing: -0.025em;
}
&--ordered#{&}--lv3 > #{&}__row > #{&}__marker {
font-size: fox.font-size(body-xsm);
letter-spacing: -0.025em;
}
// ── 3단계 ─────────────────────────────────────────────────────────────────
// 마커 칸이 한 단계 좁아지고 왼쪽으로 조금 밀려 있다.
&--lv3 > #{&}__row > #{&}__marker {
block-size: 2.3rem;
padding-inline-start: fox.padding(2);
}
&--unordered#{&}--lv3 > #{&}__row > #{&}__marker {
inline-size: 1.6rem;
}
&--ordered#{&}--lv3 > #{&}__row > #{&}__marker {
inline-size: 2.4rem;
}
&--lv3 > #{&}__row > #{&}__text {
font-size: fox.font-size(body-sm);
}
}