/* ==========================================================================
   약관 · 개인정보처리방침 — 반응형

   대상: #container.terms (Policy 영역 9개 화면)
     Service / Privacy / EmailPrivacy / PrevService2020 / PrevPrivacy* 등

   구조
     .section > ul.list_divide      장 선택 탭 (숨긴 radio + label, CSS 전용 탭)
     .section > .box_area           장 하나
         h3.l_box   190px float:left    장 제목
         div.r_box  890px float:right   조문 본문

   문제
     l_box 190 + r_box 890 = 1080 으로 데스크톱 폭에 맞춰 고정돼 있다.
     좁은 화면에서는 r_box 가 부모(343px)를 훨씬 넘겨 좌측으로 밀려나
     조문 제목과 본문 앞부분이 화면 밖으로 잘린다.

   기능은 건드리지 않는다. radio 기반 장 전환 동작은 그대로 두고 폭만 푼다.
   ========================================================================== */

@media (max-width: 1024px) {

    /* float 2단을 세로로 편다. 고정폭을 풀지 않으면 r_box 가 부모를 넘겨
       좌측으로 튀어나간다. */
    #container.terms .box_area {
        display: block;
        /* overflow:hidden 이었다(float 해제용). 바로 아래에서 자식 둘의
           float 를 none 으로 푸니 치울 게 없고, 그 값이 있으면 이 요소가
           sticky 의 기준 컨테이너가 되어 안쪽 장 제목이 붙지 않는다. */
        overflow: visible;
    }

        #container.terms .box_area .l_box,
        #container.terms .box_area .r_box {
            float: none;
            width: auto;
            max-width: none;
        }

        /* 장 제목을 그 장이 끝날 때까지 붙들어 둔다.
           데스크톱은 좌측 열이 이 일을 하지만 좁은 화면에는 그 열이 없다.
           약관이 15,773px 이라 조금만 내려가면 몇 장인지 알 수 없었다.
           본문이 뒤로 지나가므로 배경과 z-index 가 있어야 한다. */
        #container.terms .box_area .l_box {
            position: sticky;
            top: var(--mc-header-h, 45px);
            z-index: 1;
            /* 아래 여백은 margin 이 아니라 padding 이라야 한다.
               margin 은 배경 밖이라 멈춰 있는 동안 그 14px 틈으로
               본문이 비쳐 잘린 글줄이 보였다. */
            margin-bottom: 0;
            padding-top: 12px;
            padding-bottom: 14px;
            border-bottom: 1px solid var(--mc-border, #e7ebf5);
            background: var(--mc-surface, #fff);
        }

    /* 장 선택 탭이 6~7개라 한 줄에 안 들어간다. 가로 스크롤로 흘린다. */
    #container.terms .list_divide {
        display: flex;
        flex-wrap: nowrap;
        gap: 4px;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }

        #container.terms .list_divide::-webkit-scrollbar {
            display: none;
        }

        #container.terms .list_divide > li {
            flex: 0 0 auto;
            width: auto;
        }

    /* 본문 안의 표도 좁은 화면에서 넘칠 수 있다 */
    #container.terms table {
        display: block;
        width: 100%;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
    }

    #container.terms img {
        max-width: 100%;
        height: auto;
    }
}

@media (max-width: 768px) {

    #container.terms .box_area .l_box {
        font-size: 20px;
    }

    #container.terms .box_area .r_box {
        font-size: 14px;
        line-height: 1.7;
    }

    /* 조문 들여쓰기.
       데스크톱 기준 들여쓰기가 남아 본문 기준선이 44px 로 밀렸다(전수 리뷰).
       거터 하나만 쓰도록 안쪽 들여쓰기를 걷는다. */
    #container.terms .box_area .r_box :is(p, dl, dd, ul, li) {
        padding-left: 0;
        margin-left: 0;
        text-indent: 0;
        word-break: keep-all;
    }

        /* 위 규칙이 너무 넓었다.
           조문 번호 '( 9 )'는 .bracket_num 이 margin-left:-30px 로 내어쓰고
           li 의 padding-left:30px 가 그 자리를 만드는 짝이다. 패딩만 걷으니
           번호가 본문 왼쪽 밖으로 나가 -14px 에서 잘렸다(390px 실측).
           내어쓰기 자체는 조문을 읽는 데 필요하다 — 짝을 되돌린다.
           390px 에서 글자 자리는 358 → 328 이라 충분하다. */
        #container.terms .box_area .r_box li:has(> .bracket_num) {
            padding-left: 30px;
        }
}

/* ==========================================================================
   장 제목 (제 1 장 / 총칙)

   약관만 계단이 세 단이다.
     페이지 타이틀 34  >  장 제목  >  조 제목(.sub_title) 17
   섹션 제목 표준(20)을 그대로 쓰면 장과 조가 3px 차이라 구분이 약하다.
   장 제목은 좌측 컬럼에 세로로 놓인 구분자라 한 단계 더 띄운다.
   ========================================================================== */
#container.terms .box_area h3.l_box.section_title {
    font-size: 24px;
    line-height: 1.3;
    /* 줄바꿈은 폭에 맡기되 낱말 가운데서는 쪼개지 않는다 */
    word-break: keep-all;
}

/* 제목에 박혀 있던 <br> 을 걷고 번호/이름 두 조각으로 나눴다.
   그 <br> 들은 옛 190px 열에 글자를 맞추던 흔적이다. 실제로
   '제 3 장<br>계약 <br>당사자의<br>의무' 처럼 뜻과 무관한 자리에서
   끊겨 있었고(군더더기 공백까지), 열이 240px 이 된 지금은 한 줄에
   들어간다. 좁은 화면에서는 열이 358px 전체 폭인데도 그 <br> 때문에
   3~4줄로 쌓여 붙어 있는 띠가 105px 을 먹었다.

   데스크톱(2단)은 번호를 윗줄에 따로 둔다 — 좁은 열에서 번호와 이름이
   섞이면 어느 장인지 한눈에 안 들어온다. */
@media (min-width: 1025px) {

    #container.terms .box_area .l_box .ch_no {
        display: block;
    }
}

@media (max-width: 768px) {

    /* 좁은 화면에서는 장/조가 위아래로 놓여 크기 차이만으로 구분된다.
       타이틀이 24 로 줄므로 장 제목도 같이 줄여 계단을 유지한다. */
    #container.terms .box_area h3.l_box.section_title {
        font-size: 20px;
    }
}

/* ==========================================================================
   조문 본문 — 줄 간격과 색

   실측(PC 1920)
     서비스이용약관      16px / 22px   = 1.375   (.term_form .list_style li)
     개인정보처리방침 외  16px / 19.2px = 1.20    (레거시 .list_style li 120%)
     본문 <p>            16px / 20.8px = 1.30
     사이트 다른 본문                    1.6~1.7

   사이트에서 가장 길고(약관 15,773px · 방침 4,413px) 가장 읽기 어려운
   글에 가장 좁은 줄 간격이 붙어 있었다.

   줄 간격이 px 로 박혀 있어서 역전까지 났다 — 좁은 화면에서는 글자만
   14px 로 줄고 22px 는 그대로라 1.57 이 된다. PC 가 모바일보다 빽빽했다.
   비율로 바꾸면 두 폭이 같은 밀도가 된다.

   색도 #333 은 레거시다. 약관만 유독 검었다.

   특이도: 레거시가 .terms.service .term_form .list_style li (0,4,1) 까지
   쓴다. 클래스만으로는 못 넘어서 #container 로 ID 한 칸을 끼운다.

   목록 클래스를 하나씩 세지 않는다. 조문 본문은 ol.bracket ·
   ol.numbering · ul.list_style.dot · dl.list_style · 맨 p 로 흩어져
   있어서, .list_style 만 잡았더니 78곳 중 6곳만 바뀌고 72곳이 1.3 으로
   남았다.

   담는 그릇도 화면마다 다르다. 약관은 .section > .box_area 2단인데
   개인정보처리방침은 .box_area 없이 .section 바로 아래에 조문이 온다.
   .box_area 로 잡으면 방침 8개 화면이 통째로 빠진다.
   둘의 공통 조상인 .section 을 쓰고, 그 안의 장 선택 네비만 뺀다.
   ========================================================================== */
#container.terms .section :is(p, li, dd, dt):not(.list_divide > li) {
    line-height: 1.7;
    color: var(--mc-body, #4a5468);
}

/* 조 제목(.sub_title) 17px / 22.1px = 1.3.
   "제 2 조 이용약관의 효력 및 변경" 처럼 두 줄로 넘어가면 답답하다. */
#container.terms .sub_title {
    line-height: 1.45;
}

/* 장 선택 위의 굵은 검은 띠.
   레거시 ul.list_divide 의 border-top: 2px solid #2b2d3a 다.
   리뉴얼된 다른 화면에는 이런 선이 없어서, 제목과 장 선택 사이에
   검은 줄 하나만 떠 보였다. */
#container.terms .list_divide {
    border-top: 0;
}

/* ==========================================================================
   데스크톱 2단 — 비어 있던 좌측 열을 일하게 만든다

   1920px 실측(고치기 전)
     좌측 장 제목 열 190px + 거터 120 + 본문 890 = 1200
     장 제목 높이 31~125  /  본문 높이 884~3153
     제 4 장은 본문이 3,153px 인데 옆 제목은 94px — 나머지 3,000px 동안
     화면 왼쪽 26% 가 완전히 빈칸이다.
     그런데 이 열의 존재 이유는 "지금 몇 장인지" 알려주는 것인데
     position:relative 라 스크롤과 함께 사라진다. 26% 를 내주고
     정작 그 일을 안 했다.

     장 사이 여백도 일곱 장 전부 0px 이라, 제1장 마지막 항목과
     제2장 첫 조가 같은 흐름으로 이어졌다. 장이 바뀌는 게 안 보인다.

     한 줄 길이는 중앙값 49자 / 최대 75자. 들여쓰기 없는 단락이 길다.

   좁은 화면(1024 이하)은 위에서 이미 세로로 펴므로 건드리지 않는다.
   ========================================================================== */
@media (min-width: 1025px) {

    /* 장 제목을 그 장이 끝날 때까지 붙들어 둔다. 포함 블록이 .box_area 라
       다음 장으로 넘어가면 자연히 교대한다.
       float 는 유지된다 — sticky 는 absolute/fixed 와 달리 float 를 끄지 않는다.
       .box_area 의 overflow 가 visible 이어야 동작한다(실측 visible). */
    #container.terms .box_area .l_box {
        position: sticky;
        top: calc(var(--mc-header-h, 113px) + 24px);
        width: 240px;
    }

    /* 890 → 800. 한 줄 최대 75자가 58자 안쪽으로 들어온다.
       줄어든 90px 은 좌측 열(190→240)과 거터(120→160)로 보낸다.
       좌측 열이 넓어지면 '제 3 장 계약 당사자의 의무'가 4줄에서 2줄이 된다. */
    #container.terms .box_area .r_box {
        width: 800px;
    }

    /* 장 경계 — 데스크톱은 선까지 긋는다. 2단이라 좌측 제목만으로는
       장이 바뀐 걸 알기 어렵다. */
    #container.terms .box_area + .box_area {
        padding-top: 56px;
        border-top: 1px solid var(--mc-border, #e7ebf5);
    }
}

/* 장 사이 간격은 폭과 무관하게 필요하다. 좁은 화면도 0px 이라
   앞 장 마지막 항목과 다음 장 제목이 붙어 있었다.
   선은 데스크톱에서만 긋는다 — 좁은 화면에서는 장 제목(.l_box)이
   이미 아래 테두리를 갖고 있어 선이 두 겹이 된다. */
#container.terms .box_area + .box_area {
    margin-top: 40px;
}

@media (min-width: 1025px) {

    #container.terms .box_area + .box_area {
        margin-top: 56px;
    }
}

/* ==========================================================================
   장 선택 — 라디오 껍데기를 알약 앵커로

   마크업은 그대로 둔다. label 의 onclick="contractPage(...)" 가 jQuery 로
   해당 장까지 스크롤하는 동작이고, 여기서는 보이는 것만 바꾼다.

   왜 바꾸나
     input[type=radio] + label 이라 동그라미가 "골라야 하는 것"처럼 보인다.
     실제로는 선택이 아니라 이동이다.
     게다가 로드 시 체크가 0개라 지금 어느 장인지 알려주지 않았다.
     label 을 누르면 for 로 radio 가 체크되므로, :checked 만 칠해 주면
     JS 없이 "방금 간 장"이 표시된다.

   알약은 서브탭(.bulletin_tab)과 같은 언어를 쓴다 — 흰 알약, 1px 테두리,
   radius 999, 현재는 잉크색으로 채움. 화면마다 다른 탭이 되지 않게.

   (스크롤로 다른 장에 가면 표시는 따라오지 않는다. 그건 스크롤 추적
    스크립트가 필요한 일이라 여기서는 하지 않는다.)
   ========================================================================== */

/* 동그라미를 지운다. display:none 은 쓰지 않는다 — 키보드 초점과
   :checked 형제 선택자를 살려 둬야 한다. */
#container.terms .radio_list input.radio {
    position: absolute;
    width: 1px;
    height: 1px;
    opacity: 0;
    pointer-events: none;
}

    /* 레거시가 label 에 ::before(20px 링) / ::after(8px 점)로 라디오를
       그린다. 알약 안에 동그라미가 남으면 두 언어가 겹친다. */
    #container.terms .radio_list .radio_label::before,
    #container.terms .radio_list .radio_label::after {
        content: none;
    }

#container.terms .radio_list {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    /* 페이지 제목과 장 선택 사이가 98px 이었다.
       28(제목 margin) + 40(.section padding) + 30(레거시 ul margin).
       셋째 것만 걷어 68 로 맞춘다. */
    margin-top: 0;
    margin-bottom: 8px;
}

    /* 레거시가 li 에 폭을 준다(방침 half = 600px). 알약은 글자만큼만. */
    #container.terms .radio_list > li {
        width: auto;
        margin: 0;
    }

    #container.terms .radio_list .radio_label {
        display: inline-flex;
        align-items: center;
        height: 44px;
        /* 레거시 padding-left:25px 은 동그라미 자리였다 */
        padding: 0 20px;
        border: 1px solid var(--pc-border, #e7ebf5);
        border-radius: var(--mc-radius-pill);
        background: #fff;
        font-size: 14px;
        font-weight: 500;
        color: var(--pc-body, #4a5468);
        cursor: pointer;
    }

        #container.terms .radio_list .radio_label:hover {
            border-color: var(--mc-blue, #2b5bff);
            color: var(--mc-blue, #2b5bff);
        }

        #container.terms .radio_list input.radio:checked + .radio_label {
            border-color: var(--pc-ink, #0b1220);
            background: var(--pc-ink, #0b1220);
            color: #fff;
            font-weight: 600;
        }

        /* 키보드로 옮겨 다닐 때 어디 있는지 보이게 */
        #container.terms .radio_list input.radio:focus-visible + .radio_label {
            outline: 2px solid var(--mc-blue, #2b5bff);
            outline-offset: 2px;
        }

/* 접기 버튼은 좁은 화면에서만 쓴다. 데스크톱은 목차를 늘 펼쳐 둔다
   (약관 6개는 한 줄, 방침 13개는 세 줄이라 접을 이유가 없다). */
#container.terms .toc_toggle {
    display: none;
}

@media (max-width: 768px) {

    /* ---- 목차 접기 ----
       방침 390px 실측: 항목 13개가 10줄로 놓여 목차만 479px,
       본문 첫 줄이 y=973 이었다. 화면이 844px 이니 첫 화면에 내용이
       한 줄도 안 나왔다. 항목을 세로 목록으로 바꿔도 13줄이라 차이가
       없다 — 줄 수가 높이를 정한다. 그래서 접는다.
       접힌 자리에는 스크롤 추적이 알아낸 현재 항목을 띄운다. */
    #container.terms .toc_toggle {
        display: flex;
        align-items: center;
        gap: 10px;
        width: 100%;
        min-height: 48px;
        margin: 0 0 8px;
        padding: 10px 16px;
        border: 1px solid var(--pc-border, #e7ebf5);
        border-radius: 12px;
        background: var(--mc-tint, #f4f7fe);
        font-size: 14px;
        font-weight: 600;
        line-height: 1.4;
        color: var(--pc-ink, #0b1220);
        text-align: left;
        word-break: keep-all;
        cursor: pointer;
    }

        /* 남은 자리를 채워 화살표를 오른쪽 끝으로 민다 */
        #container.terms .toc_toggle__label {
            flex: 1 1 auto;
        }

        #container.terms .toc_toggle::after {
            content: "";
            flex: 0 0 auto;
            width: 10px;
            height: 10px;
            border-right: 2px solid var(--mc-muted, #7c87a0);
            border-bottom: 2px solid var(--mc-muted, #7c87a0);
            transform: translateY(-2px) rotate(45deg);
        }

        #container.terms .toc_toggle[aria-expanded="true"]::after {
            transform: translateY(2px) rotate(-135deg);
        }

    /* 버튼에 현재 항목을 띄우는 값은 스크롤 중에 보일 때만 있다.
       맨 위에서는 늘 첫 항목이라 알려 줄 것이 없다.
       약관은 장 제목(.l_box)이 이미 붙박이로 그 일을 하므로 둘을 겹치지
       않게 두고, 그 구조가 없는 방침 계열에서만 버튼을 붙인다. */
    #container.terms:not(:has(.box_area)) .toc_toggle {
        position: sticky;
        top: var(--mc-header-h, 45px);
        z-index: 2;
    }

    #container.terms .radio_list.is-collapsed {
        display: none;
    }

        /* 펼친 목차도 버튼을 따라 붙어 있어야 고른 항목이 화면에 있다 */
        #container.terms:not(:has(.box_area)) .radio_list:not(.is-collapsed) {
            position: sticky;
            top: calc(var(--mc-header-h, 45px) + 56px);
            z-index: 2;
            max-height: calc(100vh - var(--mc-header-h, 45px) - 76px);
            overflow-y: auto;
            padding: 4px;
            border-radius: 12px;
            background: var(--mc-surface, #fff);
            box-shadow: 0 12px 28px -12px rgba(11, 18, 32, .28);
        }

    /* 방침은 항목이 13개에 글자도 길다(가. 개인정보 수집에 대한 동의).
       390px 에서 한 줄에 하나씩 들어가므로 알약을 조금 줄인다. */
    #container.terms .radio_list {
        gap: 6px;
    }

        #container.terms .radio_list .radio_label {
            height: auto;
            min-height: 40px;
            padding: 8px 14px;
            font-size: 12px;
            line-height: 1.4;
        }
}

/* 목차는 접어서 전부 보이게 한다.
   실측(방침 390px): 13개 항목 내용폭 2908px — 화면의 8.5배를
   좌우로 훑어야 했다. 약관(5개)은 2줄로 접힌다. */
@media (max-width: 768px) {

    #container.terms .list_divide {
        flex-wrap: wrap;
        row-gap: 2px;
        overflow-x: visible;
    }

        /* 항목이 컨테이너보다 넓어지지 않게. 긴 항목은 여러 줄로 흘린다 */
        #container.terms .list_divide > li {
            max-width: 100%;
        }

            #container.terms .list_divide > li > label {
                white-space: normal;
                word-break: keep-all;
            }
}
