/* ─────────────────────────────────────────────────────────────
   tip-icon — 물음표 배지 + 말풍선 툴팁 (단일 정의)

   🔴 왜 파일로 뺐나: 같은 `.tip-icon` 이 `detail.jte` 인라인 <style> 과 `environment.css` 에
   따로 정의돼 페이지마다 다르게 동작했다. detail 쪽은 `width: 280px` 고정 + 클램프 없음,
   environment 쪽은 `min(260px, 100vw-24px)` + `--tip-shift` 였다.
   실측 결과 detail 쪽 정의가 **모바일 페이지 가로 스크롤**을 만들었다:
   말풍선은 `position:absolute` 라 레이아웃엔 안 잡히지만 `opacity:0` 이어도 `scrollWidth` 에는
   잡힌다. 아이콘이 오른쪽으로 밀리면 말풍선이 화면 밖으로 나가고 문서가 넓어진다
   (360px 에서 360/360 -> 395/360, fixed "맨 위로" 버튼까지 밀렸다).
   CLAUDE.md: "증상이 페이지마다 다름이면 중복 정의를 지우고 한 곳으로 통일한 뒤 손댈 것".

   🔴 CSS 만으로는 부족하다 — `min()` 은 말풍선 *폭*만 화면 안에 넣고 *위치*는 못 옮긴다.
   아이콘 중심 정렬(`left:50%` + `translateX(-50%)`)이라 아이콘이 오른쪽에 있으면 여전히 넘친다.
   위치 보정은 `tip.js` 가 `--tip-shift` 로 한다. **CSS 와 JS 를 같이 실어야 한다.**

   ⚠️ 랭킹 페이지들(`*-ranking.css`)은 사이드바에서 pseudo 를 끄고 JS 로 body 에 팝업을 띄우는
   별도 기전이라 여기로 합치지 않았다. 그쪽 `.tip-icon` 색만 페이지별로 다르다.
   ───────────────────────────────────────────────────────────── */

.tip-icon {
    display: inline-flex; align-items: center; justify-content: center;
    width: 14px; height: 14px;
    border-radius: 50%;
    background: #93c5fd; color: #1e3a8a;
    font-size: 9px; font-weight: 700;
    cursor: help; vertical-align: middle;
    position: relative; margin-left: 4px;
    user-select: none; flex-shrink: 0;
}

.tip-icon::after {
    content: attr(data-tip);
    position: absolute;
    bottom: calc(100% + 6px);
    left: 50%;
    /* --tip-shift: tip.js 가 화면 밖으로 나가는 만큼 되밀어 넣는 값(기본 0) */
    transform: translateX(calc(-50% + var(--tip-shift, 0px)));
    background: #1e293b; color: #f1f5f9;
    font-size: 11px; font-weight: 400;
    line-height: 1.6;
    padding: 8px 12px;
    border-radius: 7px;
    width: min(260px, calc(100vw - 24px));
    white-space: normal;
    pointer-events: none;
    opacity: 0;
    transition: opacity .15s;
    z-index: 200;
    text-align: left;
}

.tip-icon::before {
    content: '';
    position: absolute;
    bottom: calc(100% + 1px);
    left: 50%;
    /* 기존 environment.css 동작을 그대로 보존한다(꼬리도 말풍선과 같이 움직인다).
       "꼬리는 아이콘을 가리켜야 하니 shift 를 빼자" 는 손이 갔지만, 그건 눈으로 확인하지 않은
       외형 변경이라 이번 범위에서 제외했다. */
    transform: translateX(calc(-50% + var(--tip-shift, 0px)));
    border: 5px solid transparent;
    border-top-color: #1e293b;
    pointer-events: none;
    opacity: 0;
    transition: opacity .15s;
    z-index: 200;
}

.tip-icon:hover::after, .tip-icon:hover::before,
.tip-icon:focus::after, .tip-icon:focus::before { opacity: 1; }
