@charset "utf-8";

/* ### 기본 스타일 커스터마이징 시작 ### */
/* 기본박스 */
.mbskin {position:relative;margin:100px auto 0;width:360px;text-align:center}
.mbskin:after {right:10px;left:auto;
  -webkit-transform:skew(8deg) rotate(3deg);
    -moz-transform:skew(8deg) rotate(3deg);
    -ms-transform:skew(8deg) rotate(3deg);
     -o-transform:skew(8deg) rotate(3deg);
      transform:skew(8deg) rotate(3deg)}
.mbskin .mbskin_box{border:1px solid #dde7e9;background:#fff}
.mbskin .frm_input {width:100%}
.mbskin .btn_submit {width:100%;margin:10px 0 0;height:45px;font-weight:bold;font-size:1.25em}
.mbskin h1 {margin:60px 0 30px;font-size:2em}
/* ### 기본 스타일 커스터마이징 끝 ### */

/* 회원 비밀번호 확인 — 시안(회원 비밀번호 확인.html)을 옮긴 것이다.

   이 화면은 코어가 _head.sub.php 로 연다. 사이트 헤더도 푸터도 없어
   카드를 화면 가운데 세우는 일을 이 스킨이 해야 한다. popup.css 가
   .new_win 에 하는 것과 같은 방식이되, 여기는 .mbskin 이라 규칙을
   따로 둔다 — 로그인·아이디 찾기처럼 헤더를 낀 .mbskin 화면까지
   건드리면 안 되므로 #mb_confirm 으로 좁힌다.

   치수는 시안에서 그대로 재 왔고 — 카드 440px/16px, 표 44px/12px,
   입력 48px/10px, 아이디 상자 46px, 보내기 50px — 색만 사이트 팔레트로
   바꾼다. 시안은 청록(#2b5c7a) 계열인데 --solune-* 토큰으로 적는다.
   그러면 다크도 함께 따라온다. */
body.solune-page:not(:has([data-solune-header])):has(#mb_confirm) {
    margin: 0;
    min-height: 100vh;
    background: var(--solune-page);
}
body.solune-page .mc-page {
    display: flex;
    min-height: 100vh;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 20px;
    box-sizing: border-box;
    padding: 40px 20px;
}
body.solune-page .mc-logo { display: inline-flex; align-items: center; }
body.solune-page .mc-logo img { display: block; width: auto; height: 28px; }
/* 어두운 바탕에서는 로고가 묻힌다. 서랍 로고와 같은 방식으로 뒤집는다. */
html[data-theme="dark"] body.solune-page .mc-logo img { filter: brightness(0) invert(1); opacity: .92; }

/* 카드. .mbskin 의 옛 값(360px 고정폭 · 위 100px 여백 · 가운데 정렬)을
   여기서 다시 적는다. */
body.solune-page #mb_confirm.mbskin {
    width: 100%;
    max-width: 440px;
    overflow: hidden;
    margin: 0;
    padding: 0;
    border: 1px solid var(--solune-border);
    border-radius: 16px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-md);
    text-align: left;
}

body.solune-page #mb_confirm .mc-head {
    padding: 30px 28px 24px;
    border-bottom: 1px solid var(--solune-border);
}
/* 무엇을 지키려는 자리인지 한눈에. 자물쇠는 코어가 이미 싣는 Font Awesome 것이다. */
body.solune-page #mb_confirm .mc-mark {
    display: inline-flex;
    width: 44px;
    height: 44px;
    align-items: center;
    justify-content: center;
    margin: 0 0 16px;
    border-radius: 12px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: 18px;
}
body.solune-page #mb_confirm .mc-head h1 {
    margin: 0;
    padding: 0;
    border: 0;
    color: var(--solune-text);
    font-size: 22px;
    font-weight: 700;
    letter-spacing: -.03em;
    line-height: 1.3;
    text-align: left;
}
body.solune-page #mb_confirm .mc-head p {
    margin: 10px 0 0;
    color: var(--solune-muted);
    font-size: 14px;
    line-height: 1.65;
    text-align: left;
    text-wrap: pretty;
}
body.solune-page #mb_confirm .mc-head p strong { color: var(--solune-text); font-weight: 600; }

body.solune-page #mb_confirm .mc-fields {
    display: flex;
    flex-direction: column;
    gap: 18px;
    margin: 0;
    padding: 24px 28px 28px;
    border: 0;
}
body.solune-page #mb_confirm .mc-field { display: flex; min-width: 0; flex-direction: column; gap: 6px; }
body.solune-page #mb_confirm .mc-label {
    display: flex;
    width: auto;
    align-items: center;
    gap: 6px;
    color: var(--solune-text-soft);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: -.01em;
}
/* 필수는 별이 아니라 글자다. 테마가 입력칸 오른쪽 위에 얹는 빨간 별은
   무엇이 필수인지 읽히지 않아 끈다. */
body.solune-page #mb_confirm .mc-req { color: var(--solune-danger); font-size: 11px; font-weight: 700; }
body.solune-page #mb_confirm :is(input, textarea):is(.required, [required]):invalid { background-image: none !important; }

/* 지금 어느 계정으로 서 있는지. 고칠 수 없는 값이라 입력칸처럼 보이지
   않게 옅은 바탕에 담는다. */
body.solune-page #mb_confirm .mc-idbox {
    display: flex;
    height: 46px;
    align-items: center;
    gap: 10px;
    box-sizing: border-box;
    padding: 0 14px;
    border: 1px solid var(--solune-border);
    border-radius: 10px;
    background: var(--solune-surface-soft);
}
body.solune-page #mb_confirm .mc-idbox img {
    width: 24px;
    height: 24px;
    flex: none;
    border-radius: 50%;
    background: var(--solune-primary-soft);
    object-fit: cover;
}
body.solune-page #mb_confirm #mb_confirm_id {
    min-width: 0;
    flex: 1;
    overflow: hidden;
    color: var(--solune-text);
    font-size: 14.5px;
    font-weight: 600;
    text-overflow: ellipsis;
    white-space: nowrap;
}
body.solune-page #mb_confirm .mc-role { flex: none; color: var(--solune-muted); font-size: 12px; white-space: nowrap; }

/* 비밀번호. 보기 단추가 오른쪽 안에 앉으므로 그만큼 오른쪽 여백을 준다. */
body.solune-page #mb_confirm .mc-pw { position: relative; }
body.solune-page #mb_confirm .frm_input {
    width: 100%;
    height: 48px;
    box-sizing: border-box;
    padding: 0 48px 0 14px;
    border: 1px solid var(--solune-border) !important;
    border-radius: 10px;
    background: var(--solune-surface) !important;
    color: var(--solune-text);
    font-size: 15px;
}
/* 포커스는 한 겹만. 테마에 모든 입력에 걸리는 규칙이 둘 있어 그대로 두면
   테두리 · 후광 · 범용 링이 세 겹으로 그려진다. */
body.solune-page #mb_confirm .frm_input:focus {
    border-color: var(--solune-primary) !important;
    box-shadow: 0 0 0 3px var(--solune-primary-soft) !important;
}
body.solune-page #mb_confirm .frm_input:focus-visible { outline: 0; }
body.solune-page #mb_confirm .mc-pw-toggle {
    display: flex;
    position: absolute;
    top: 6px;
    right: 6px;
    width: 36px;
    height: 36px;
    align-items: center;
    justify-content: center;
    padding: 0;
    border: 0;
    border-radius: 8px;
    background: none;
    color: var(--solune-muted);
    font-size: 14px;
    cursor: pointer;
}
body.solune-page #mb_confirm .mc-pw-toggle:hover { background: var(--solune-surface-soft); color: var(--solune-text); }

/* 보내기. skins.css 의 공통 .btn_submit 규칙이 (0,3,1) 이라 흰 바탕으로
   덮여 있었다. id 를 물어 (1,2,1) 로 올린다. */
body.solune-page #mb_confirm .btn_submit {
    display: block;
    width: 100%;
    height: 50px;
    margin: 4px 0 0;
    padding: 0;
    border: 0;
    border-radius: 10px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-family: inherit;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: -.02em;
    cursor: pointer;
}
body.solune-page #mb_confirm .btn_submit:hover:not(:disabled) { background: var(--solune-primary-hover); }
body.solune-page #mb_confirm .btn_submit:disabled { opacity: .6; cursor: default; }

/* 카드 밖 안내. 남의 계정으로 서 있을 때 빠져나갈 길이다. */
body.solune-page .mc-foot {
    max-width: 440px;
    margin: 0;
    color: var(--solune-muted);
    font-size: 12.5px;
    line-height: 1.6;
    text-align: center;
    text-wrap: pretty;
}
body.solune-page .mc-foot strong { color: var(--solune-text-soft); font-weight: 600; }
body.solune-page .mc-foot a { color: var(--solune-primary); font-weight: 600; }

@media (max-width: 30rem) {
    body.solune-page .mc-page { padding: 24px 16px; gap: 16px; }
    body.solune-page #mb_confirm .mc-head { padding: 26px 20px 20px; }
    body.solune-page #mb_confirm .mc-head h1 { font-size: 20px; }
    body.solune-page #mb_confirm .mc-fields { padding: 20px 20px 24px; }
}

/* 회원가입 약관 — 시안(회원가입약관 (2).html)을 옮긴 것이다.

   앞 시안에서 달라진 자리.

   - 걸음 표시가 네모 상자 셋에서 동그란 번호 + 잇는 선으로 바뀌었다.
   - 동의 체크가 카드 맨 아래에서 머리줄 오른쪽으로 올라갔다.
   - SNS 가입이 제목과 설명을 갖춘 카드가 되고 아이콘마다 이름이 붙는다.
   - 모두 동의 · 보내기 · 로그인/취소가 한 카드로 묶였다.
   - 카드 모서리가 4px 에서 12px 로, 약관 상자는 300px 에서 220px 로.

   치수는 시안에서 그대로 재 왔고 — 카드 12px, 걸음 동그라미 28px, 약관
   상자 최대 220px, 안쪽 여백 18~24px — 색만 사이트 팔레트로 바꾼다.
   시안은 청록 계열(#2b5c7a)인데 화이트톤으로 옮겨 달라고 해서
   --solune-* 토큰으로 적는다. 그러면 다크도 함께 따라온다.

        시안 #1f2933           ->  --solune-text
        시안 #4a5763           ->  --solune-text-soft
        시안 #6b7785 · #8a95a1 ->  --solune-muted
        시안 #e9ecef           ->  --solune-border
        시안 #f6f8fa           ->  --solune-surface-soft
        시안 #2b5c7a           ->  --solune-primary
        시안 #c0392b           ->  --solune-danger (필수 표)
        시안 --shadow          ->  --solune-shadow-sm

   한 곳만 예외다 — SNS 표의 브랜드 색(#03c75a · #fee500 …)은 각 서비스의
   것이라 팔레트로 바꾸면 무슨 서비스인지 알아볼 수 없다.

   제목은 테마의 페이지 머리줄이 낸다. 시안은 제목 · 설명이 한 덩이인데,
   테마 머리줄이 제 아래에 선과 여백을 따로 그려서 설명과 갈라져 보였다.
   머리줄의 선과 아래 여백을 걷고 제목만 시안 크기로 키워, 그 아래
   .register-lead 를 바로 붙인다.

   가입 두 걸음(약관 · 정보 입력)이 같은 흐름으로 보여야 하므로 다음
   화면인 register_form.php 도 같이 건다. :has() 로 걸어 같은 파일을 쓰는
   다른 회원 화면(로그인 · 아이디 찾기)의 머리줄은 건드리지 않는다. */
body.solune-page:has(.register-skin) .solune-page-header,
body.solune-page:has(.register-form-skin) .solune-page-header {
    margin-bottom: 0 !important;
    padding-bottom: 0 !important;
    border-bottom: 0;
}
body.solune-page:has(.register-skin) .solune-page-header #container_title,
body.solune-page:has(.register-form-skin) .solune-page-header #container_title {
    margin: 0 0 10px;
    color: var(--solune-text);
    font-size: clamp(28px, 3.4vw, 40px);
    font-weight: 800;
    letter-spacing: -.04em;
    line-height: 1.15;
}

/* 시안은 760px 짜리 한 기둥이지만 폭은 따르지 않는다. 여기만 좁게 묶으면
   다음 걸음인 정보 입력(register_form.php)과 폭이 달라져, 이어지는 두
   화면에서 카드가 들썩인다. 본문 기둥이 주는 폭을 그대로 쓴다.

   좁을 때의 규칙은 화면이 아니라 이 덩이의 폭으로 잰다 — 회원 화면은 본문
   기둥 안에 들어앉아 1024px 창에서도 제 폭은 훨씬 좁다(CLAUDE.local.md). */
body.solune-page .register.register-skin {
    container: reg / inline-size;
    margin: 0;
}
body.solune-page .register.register-skin:after { display: block; visibility: hidden; clear: both; content: ""; }

/* 안내 한 줄. 시안은 제목 바로 아래 붙이고 구분선을 두지 않는다 — 아래로
   카드가 이어져 선이 한 겹 더 있으면 덩이가 둘로 갈라져 보인다. */
body.solune-page .register-skin .register-lead {
    margin: 6px 0 20px;
    max-width: 46em;
    color: var(--solune-muted);
    font-size: 14px;
    line-height: 1.7;
    text-wrap: pretty;
}

/* 세 걸음. 시안 (2) 는 네모 상자 셋 대신 동그란 번호를 선으로 잇는다.
   "지금 어디"가 한눈에 들어오고, 좁은 폭에서 이름만 접어도 선은 그대로
   남는다. 잇는 선은 li 의 ::after 가 그리고 마지막 걸음에는 두지 않는다. */
body.solune-page .register .register-steps {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0 0 20px;
    padding: 0;
    list-style: none;
}
body.solune-page .register .register-steps li {
    display: flex;
    min-width: 0;
    flex: 1 1 0;
    align-items: center;
    gap: 10px;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
}
/* 마지막 걸음은 이을 선이 없으니 남는 폭도 갖지 않는다. */
body.solune-page .register .register-steps li:last-child { flex: 0 0 auto; }
body.solune-page .register .register-steps li::after {
    min-width: 12px;
    height: 2px;
    flex: 1;
    border-radius: 1px;
    background: var(--solune-border);
    content: "";
}
body.solune-page .register .register-steps li:last-child::after { content: none; }
body.solune-page .register .register-step-n {
    display: inline-flex;
    width: 28px;
    height: 28px;
    flex: none;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--solune-border);
    border-radius: 50%;
    background: var(--solune-surface);
    color: var(--solune-muted);
    font-size: 12.5px;
    font-weight: 700;
    letter-spacing: 0;
}
body.solune-page .register .register-step-t {
    color: var(--solune-muted);
    font-size: 13px;
    font-weight: 500;
    letter-spacing: -.02em;
    white-space: nowrap;
}
body.solune-page .register .register-steps li.is-current .register-step-n {
    border-color: var(--solune-primary);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
}
body.solune-page .register .register-steps li.is-current .register-step-t { color: var(--solune-text); font-weight: 700; }
/* 끝난 걸음. 지금 걸음과 헷갈리지 않게 채우지 않고 테두리와 글자에만
   강조색을 쓰고 번호 자리에 체크를 넣는다. 이미 지나온 자리라 지금 자리
   보다 조용해야 한다. 잇는 선도 여기까지는 강조색이라 어디까지 왔는지가
   선으로도 보인다. */
body.solune-page .register .register-steps li.is-done .register-step-n {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}
body.solune-page .register .register-steps li.is-done .register-step-t { color: var(--solune-text-soft); }
body.solune-page .register .register-steps li.is-done::after { background: var(--solune-primary); }

/* 카드. SNS · 약관 둘 · 마지막까지 넷이 같은 모양이다. */
body.solune-page .register-skin section,
body.solune-page .register .register-sns {
    position: static;
    overflow: hidden;
    margin: 0 0 20px;
    border: 1px solid var(--solune-border);
    border-radius: 12px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}
body.solune-page .register-skin .register-final { margin-bottom: 0; }

/* 카드 머리 — 왼쪽에 필수 표와 제목, 오른쪽에 동의 체크.

   앞 시안에서는 체크를 카드 맨 아래에 두었다("읽고 나서 누르는 자리"라는
   까닭이었다). 시안 (2) 가 머리줄로 올렸다 — 무엇에 동의하는지(제목)와
   동의했는지가 한 줄에서 같이 보이고, 약관이 길어도 체크를 찾아 내려가지
   않아도 된다. */
body.solune-page .register .register-head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 18px 24px;
    border-bottom: 1px solid var(--solune-border);
    /* 개인정보 카드는 코어가 쓰는 .fregister_terms 를 달고 있고, 소셜 스킨의
       `.fregister_terms div {background:#fff}` 가 이 머리줄까지 닿는다.
       라이트에서는 티가 안 나지만 다크에서는 흰 띠에 흰 글자가 됐다. */
    background: none;
}
body.solune-page .register .register-head h2 {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
    color: var(--solune-text);
    font-size: 16px;
    font-weight: 700;
    letter-spacing: -.02em;
    line-height: 1.4;
    text-align: left;
}
/* 필수는 채운 배지가 아니라 테두리 글자다. 시안이 그렇게 두어 제목보다
   앞서 읽히지 않는다. */
body.solune-page .register .register-req {
    flex: none;
    padding: 1px 6px;
    border: 1px solid currentColor;
    border-radius: 4px;
    background: none;
    color: var(--solune-danger);
    font-size: 11.5px;
    font-weight: 700;
    letter-spacing: 0;
}

/* 본문. 읽는 상자에 한 겹 더 테두리를 둘러 "카드"와 "읽는 곳"을 나눈다.
   코어 소셜 스킨의 `.fregister_terms div {background:#fff}` 가 여기까지
   닿아 다크에서 흰 덩이가 생기므로 배경을 다시 지운다. */
body.solune-page .register-skin .register-body {
    padding: 20px 24px 20px;
    background: none;
}
/* 약관 전문. 길어도 카드가 늘어나지 않게 안에서 굴린다.

   시안 값은 220px 인데 그것보다 키웠다. 시안이 넣어 둔 글은 한 줄짜리
   자리표시라 220px 로 충분해 보였지만, 실제 약관 전문이 들어가면 열 줄
   남짓만 보이고 나머지를 계속 굴려야 한다. 짧으면 어차피 내용만큼만
   차지하므로(최대값일 뿐이다) 키워서 잃는 것이 없다. */
body.solune-page .register-skin .register-doc {
    max-height: 420px;
    overflow-y: auto;
    padding: 16px 18px;
    border: 1px solid var(--solune-border);
    border-radius: 8px;
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
    font-size: 13.5px;
    line-height: 1.75;
    white-space: pre-line;
}
body.solune-page .register-skin .register-doc:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: -2px; }
/* 표가 든 상자는 굴리지 않는다. 두 줄뿐이라 접을 이유가 없다. */
body.solune-page .register-skin .register-doc-table {
    max-height: none;
    overflow: hidden;
    padding: 0;
    background: var(--solune-surface);
    white-space: normal;
}
body.solune-page .register-skin .register-doc-table table {
    width: 100%;
    border-collapse: collapse;
    table-layout: fixed;
}
body.solune-page .register-skin .register-doc-table caption { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
body.solune-page .register-skin .register-doc-table th {
    padding: 10px 14px;
    border: 0;
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    font-size: 12.5px;
    font-weight: 600;
    letter-spacing: 0;
    text-align: left;
}
body.solune-page .register-skin .register-doc-table th + th { border-left: 1px solid var(--solune-border); }
body.solune-page .register-skin .register-doc-table th:first-child { width: 33%; }
body.solune-page .register-skin .register-doc-table th:last-child { width: 22%; }
body.solune-page .register-skin .register-doc-table td {
    padding: 12px 14px;
    border: 0;
    border-top: 1px solid var(--solune-border);
    color: var(--solune-text-soft);
    font-size: 13.5px;
    line-height: 1.6;
    vertical-align: top;
}
body.solune-page .register-skin .register-doc-table td + td { border-left: 1px solid var(--solune-border); }
body.solune-page .register-skin .register-doc-table td:last-child { color: var(--solune-text); font-weight: 600; }
/* 좁은 폭에서 한 줄씩 쌓을 때만 쓰는 이름표. 넓을 때는 머리줄이 대신한다. */
body.solune-page .register-skin .register-doc-table td::before {
    display: none;
    margin-bottom: 2px;
    color: var(--solune-muted);
    font-size: 11.5px;
    font-weight: 400;
    content: attr(data-label);
}

/* 동의 줄. 머리줄 오른쪽에 선다. 켜면 글자가 강조색이 되어 카드를 훑기만
   해도 어디를 눌렀는지 보인다. 코어 소셜 스킨이 이 줄을 카드 오른쪽 위로
   절대배치하므로(.fregister_agree{position:absolute}) 자리를 되돌린다. */
body.solune-page .register-skin .fregister_agree {
    display: flex;
    position: static;
    flex: none;
    align-items: center;
    gap: 8px;
    margin: 0;
    padding: 0;
    cursor: pointer;
}
body.solune-page .register-skin :is(.fregister_agree, .chk_all) input[type="checkbox"] {
    position: static;
    flex: none;
    width: 18px;
    height: 18px;
    margin: 0;
    accent-color: var(--solune-primary);
    cursor: pointer;
}
body.solune-page .register-skin :is(.fregister_agree, .chk_all) span {
    position: static;
    width: auto;
    height: auto;
    border: 0;
    border-radius: 0;
    background: none;
    color: var(--solune-text-soft);
    font-size: 13.5px;
    font-weight: 600;
    letter-spacing: -.02em;
}
body.solune-page .register-skin .fregister_agree.is-on span { color: var(--solune-primary); }

/* SNS 가입 카드. 코어 소셜 스킨이 제목(h2)과 아이콘 줄을 함께 내므로 그
   제목은 낭독기 몫으로 감추고, 설명까지 갖춘 머리줄을 여기서 세운다.
   코어는 h2 와 .sns-wrap 을 각각 50% 로 띄워 두는데(float) 그 배치를
   걷어야 시안의 격자가 선다. */
body.solune-page .register .register-sns-head {
    flex-direction: column;
    align-items: flex-start;
    gap: 4px;
    padding: 18px 24px 6px;
    border-bottom: 0;
}
body.solune-page .register .register-sns-head h2 { font-size: 15px; }
body.solune-page .register .register-sns-head p {
    margin: 0;
    color: var(--solune-muted);
    font-size: 12.5px;
    line-height: 1.6;
}
body.solune-page .register #sns_register {
    float: none;
    width: auto;
    height: auto;
    margin: 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    text-align: left;
}
body.solune-page .register #sns_register > h2 {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
}
body.solune-page .register #sns_register .sns-wrap {
    display: grid;
    float: none;
    width: auto;
    height: auto;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    gap: 8px;
    margin: 0;
    padding: 14px 24px 22px;
    line-height: normal;
    text-align: left;
}
body.solune-page .register #sns_register .sns-icon {
    display: flex;
    width: auto;
    min-width: 0;
    height: auto;
    flex-direction: column;
    align-items: center;
    gap: 8px;
    margin: 0;
    padding: 12px 6px;
    border: 1px solid var(--solune-border);
    border-radius: 10px;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    line-height: normal;
    text-align: center;
    text-decoration: none;
}
body.solune-page .register #sns_register .sns-icon:hover { background: var(--solune-surface-soft); }
/* 표는 브랜드 색 동그라미에 머리글자 하나. 코어는 이 자리에 색 배경만
   주고 그림은 구글에만 넣어 두어 여섯이 서로 다른 모양이었다. 색은 각
   서비스의 것이라 여기서만 사이트 팔레트를 따르지 않는다. */
body.solune-page .register #sns_register .sns-icon .ico {
    display: inline-flex;
    width: 36px;
    height: 36px;
    flex: none;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    background: var(--solune-surface-soft);
    color: var(--solune-text);
    font-size: 14px;
    font-weight: 800;
}
body.solune-page .register #sns_register .sns-naver .ico { background: #03c75a; color: #fff; }
body.solune-page .register #sns_register .sns-naver .ico::before { content: "N"; }
body.solune-page .register #sns_register .sns-kakao .ico { background: #fee500; color: #191919; }
body.solune-page .register #sns_register .sns-kakao .ico::before { content: "K"; }
body.solune-page .register #sns_register .sns-facebook .ico { background: #1877f2; color: #fff; }
body.solune-page .register #sns_register .sns-facebook .ico::before { content: "f"; }
body.solune-page .register #sns_register .sns-google .ico { border: 1px solid var(--solune-border); background: #fff; color: #4285f4; }
body.solune-page .register #sns_register .sns-google .ico::before { content: "G"; }
body.solune-page .register #sns_register .sns-twitter .ico { background: #000; color: #fff; }
body.solune-page .register #sns_register .sns-twitter .ico::before { content: "X"; }
body.solune-page .register #sns_register .sns-payco .ico { background: #ff1c1c; color: #fff; }
body.solune-page .register #sns_register .sns-payco .ico::before { content: "P"; }
/* 안에 든 긴 글("네이버로 회원가입하기")은 낭독기 몫으로 두고, 눈에는
   코어가 title 에 넣어 둔 짧은 이름을 꺼내 보인다. */
body.solune-page .register #sns_register .sns-icon .txt {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
}
body.solune-page .register #sns_register .sns-icon::after {
    color: var(--solune-text-soft);
    font-size: 12.5px;
    font-weight: 600;
    white-space: nowrap;
    content: attr(title);
}

/* 마지막 카드 — 모두 동의 · 보내기 · 로그인과 취소가 한 덩이다. 시안이
   그렇게 묶는다. 여기까지 읽고 결정하는 자리라 흩어 두면 무엇을 눌러야
   하는지 한 번 더 찾게 된다. */
body.solune-page .register-skin #fregister_chkall {
    display: flex;
    position: static;
    align-items: center;
    gap: 12px;
    margin: 0;
    padding: 18px 24px;
    border: 0;
    border-bottom: 1px solid var(--solune-border);
    border-radius: 0;
    background: none;
    line-height: normal;
    text-align: left;
    cursor: pointer;
}
body.solune-page .register-skin #fregister_chkall input[type="checkbox"] { width: 20px; height: 20px; margin: 0; }
body.solune-page .register-skin #fregister_chkall span { color: var(--solune-text); font-size: 15px; font-weight: 700; letter-spacing: -.03em; }

body.solune-page .register-skin .register-final-body {
    display: flex;
    flex-direction: column;
    gap: 12px;
    padding: 20px 24px 22px;
}

/* 버튼 줄 */
body.solune-page .register-skin .btn_confirm {
    display: block;
    margin: 0;
    padding: 0;
    border: 0;
    text-align: left;
}
body.solune-page .register-skin .btn_confirm .btn_submit {
    display: flex;
    width: 100%;
    height: 50px !important;
    min-height: 0;
    align-items: center;
    justify-content: center;
    float: none;
    margin: 0;
    padding: 0 24px;
    border: 0;
    border-radius: 10px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-family: inherit;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: -.02em;
    cursor: pointer;
}
body.solune-page .register-skin .btn_confirm .btn_submit:hover:not(:disabled) { background: var(--solune-primary-hover); }
/* 둘 다 동의해야 열린다. 스크립트가 켜고 끈다 — 아직 덜 됐을 때는 흐리게
   두고 몇 개 했는지 단추 안에 적는다. */
body.solune-page .register-skin .btn_confirm .btn_submit:disabled { opacity: .5; cursor: default; }
body.solune-page .register-skin .register-count { font-weight: 600; }

body.solune-page .register-skin .register-login {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin: 0;
    color: var(--solune-muted);
    font-size: 13px;
}
body.solune-page .register-skin .register-login a {
    color: var(--solune-primary);
    font-weight: 600;
}
/* 취소는 되돌아가는 길이라 조용히 둔다. 단추가 아니라 글이다. */
body.solune-page .register-skin .register-login .btn_close {
    float: none;
    width: auto;
    height: auto !important;
    padding: 0;
    border: 0;
    background: none;
    color: var(--solune-muted);
    font-weight: 400;
}
body.solune-page .register-skin .register-login .btn_close:hover { color: var(--solune-text); }

/* 좁을 때. 시안이 600px 에서 접는 것을 그대로 따른다. */
@container reg (max-width: 600px) {
    body.solune-page .register-skin .register-lead { margin-bottom: 16px; font-size: 13.5px; }
    /* 좁은 화면은 세로도 짧다. 420px 짜리 상자를 그대로 두면 한 화면을
       거의 다 먹어 아래 동의 줄이 보이지 않는다. */
    body.solune-page .register-skin .register-doc { max-height: 300px; }
    body.solune-page .register .register-steps { gap: 6px; }
    /* 걸음 이름을 접고 번호만 남긴다. 셋을 다 적으면 줄바꿈되어 잇는 선이
       끊겨 보인다. 지금 어느 걸음인지는 페이지 제목이 이미 말하고 있다. */
    body.solune-page .register .register-step-t { display: none; }
    body.solune-page .register :is(.register-head, .register-body, .register-final-body) { padding-inline: 20px; }
    body.solune-page .register-skin #fregister_chkall { padding-inline: 20px; }
    body.solune-page .register #sns_register .sns-wrap { grid-template-columns: repeat(3, minmax(0, 1fr)); padding-inline: 20px; }
    body.solune-page .register #sns_register .sns-icon::after { display: none; }
    /* 표는 세 칸을 한 줄에 못 넣는다. 칸마다 이름표를 붙여 세로로 쌓는다. */
    body.solune-page .register-skin .register-doc-table :is(table, tbody, tr, td) { display: block; }
    body.solune-page .register-skin .register-doc-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
    body.solune-page .register-skin .register-doc-table td { border: 0; }
    body.solune-page .register-skin .register-doc-table td + td { padding-top: 0; }
    body.solune-page .register-skin .register-doc-table tr + tr { border-top: 1px solid var(--solune-border); }
    body.solune-page .register-skin .register-doc-table td::before { display: block; }
}

.chk_li {padding-left:20px}

#sns_register .login-sns,
#sns_register h2 {border:0 !important}

/* 회원정보 입력 — 시안(회원가입 페이지 (standalone).html)을 옮긴 것이다.

   치수는 시안에서 그대로 재 왔고 — 카드 14px, 라벨칸 190px, 줄 여백 18px,
   입력 12px/14px, 알약 999px — 색만 사이트 팔레트로 바꾼다. 시안은
   따뜻한 회색 바탕(#faf9f6)에 남색(#2b4c93)인데, 화이트톤으로 옮겨
   달라고 해서 --solune-* 토큰으로 적는다. 그러면 다크도 함께 따라온다.

        시안 #2b2925 · #ffffff  ->  --solune-text · --solune-surface
        시안 #57534c            ->  --solune-text-soft
        시안 #8b857b            ->  --solune-muted
        시안 #e7e4dd            ->  --solune-border
        시안 #efece6            ->  --rf-line (테두리보다 옅은 안쪽 선)
        시안 #2b4c93 · #223d75  ->  --solune-primary · --solune-primary-hover
        시안 #f2f5fb            ->  --solune-primary-soft
        시안 #a13a2f            ->  --solune-danger

   시안의 --ok(#1f6f5c)만 짝이 되는 토큰이 없다. 걸음 표시의 "끝난 걸음"과
   확인 문구에만 쓰는 성공색이라 여기서 --rf-ok 로 따로 둔다. 완료(초록)와
   현재(파랑)를 같은 색으로 칠하면 둘을 구분할 수 없다.

   제목은 테마의 페이지 머리줄이 낸다. 여기서는 그 아래부터 그린다. */
body.solune-page .register.register-form-skin {
    container: reg / inline-size;
    --rf-line: color-mix(in oklch, var(--solune-border) 55%, var(--solune-surface));
    --rf-ok: #1f6f5c;
    --rf-ok-ink: #fff;
    --rf-cols: 190px minmax(0, 1fr);
    --rf-pad: 18px;
    margin: 0;
}
/* 다크는 테마와 같은 방식으로 건다 — html[data-theme] 은 부트 스크립트가
   붙인다(community.css 와 같은 열쇠). 어두운 바탕에서는 짙은 초록이 묻혀
   밝은 민트로 바꾸는데, 그러면 흰 ✓ 가 잘 안 보이므로 글자를 뒤집는다. */
html[data-theme="dark"] body.solune-page .register.register-form-skin {
    --rf-ok: #5fbfa3;
    --rf-ok-ink: var(--solune-page);
}
body.solune-page .register.register-form-skin:after { display: block; visibility: hidden; clear: both; content: ""; }

/* 머리 — 안내 한 줄과 "* 필수" 표시가 양끝에 선다. */
body.solune-page .register-form-skin .rf-lead {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: 8px 20px;
    margin: 0 0 28px;
    padding-bottom: 24px;
    border-bottom: 1px solid var(--solune-border);
}
body.solune-page .register-form-skin .rf-lead-text {
    margin: 0;
    max-width: 46em;
    color: var(--solune-text-soft);
    font-size: 15px;
    line-height: 1.6;
    text-wrap: pretty;
}
body.solune-page .register-form-skin .rf-req-note { margin: 0; color: var(--solune-muted); font-size: 13px; }
body.solune-page .register-form-skin .rf-star { color: var(--solune-primary); }

/* 세 걸음은 약관 화면과 한 벌이다. 위 "세 걸음" 절이 맡는다 — 여기
   있던 알약 모양 규칙은 그 클래스를 쓰는 마크업이 없어져 걷었다. */

/* 카드 */
body.solune-page .register-form-skin #fregisterform .rf-card {
    position: static;
    margin: 0 0 20px;
    padding: 28px 30px;
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
}
body.solune-page .register-form-skin #fregisterform .rf-card-head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: 4px 16px;
    padding-bottom: 4px;
}
body.solune-page .register-form-skin #fregisterform .rf-card-head h2 {
    margin: 0;
    padding: 0;
    border: 0;
    color: var(--solune-text);
    font-size: 17px;
    font-weight: 700;
    letter-spacing: -.02em;
    text-align: left;
}
body.solune-page .register-form-skin #fregisterform .rf-card-head span { color: var(--solune-muted); font-size: 13px; }

/* 한 줄 = 라벨칸 + 입력칸. 줄과 줄 사이는 위 선으로만 나눈다. */
body.solune-page .register-form-skin .rf-row {
    display: grid;
    grid-template-columns: var(--rf-cols);
    gap: 6px 24px;
    align-items: start;
    padding: var(--rf-pad) 0;
    border-top: 1px solid var(--rf-line);
}
body.solune-page .register-form-skin #fregisterform .rf-card-head + .rf-row,
body.solune-page .register-form-skin #fregisterform .rf-card-head + .rf-checks { margin-top: 14px; }
body.solune-page .register-form-skin .rf-row:last-child { padding-bottom: 4px; }
body.solune-page .register-form-skin .rf-label {
    display: block;
    margin: 0;
    padding-top: 11px;
    color: var(--solune-text);
    font-size: 14px;
    font-weight: 600;
    letter-spacing: -.01em;
    line-height: 1.4;
}
body.solune-page .register-form-skin .rf-field {
    display: flex;
    min-width: 0;
    flex-direction: column;
    gap: 8px;
}
body.solune-page .register-form-skin .rf-inline {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}

/* 입력칸. 테마 기본은 높이 40px 에 위아래 여백이 0 이라 시안보다 얕다.
   여기서는 높이를 풀고 여백으로 키를 잡는다. */
body.solune-page .register-form-skin #fregisterform :is(.rf-input, .frm_input) {
    width: 100%;
    margin: 0;
    height: auto;
    min-width: 0;
    box-sizing: border-box;
    padding: 12px 14px;
    border: 1px solid var(--solune-border);
    border-radius: 8px;
    background: var(--solune-surface);
    color: var(--solune-text);
    font-family: inherit;
    font-size: 15px;
    line-height: 1.4;
}
body.solune-page .register-form-skin .rf-input-grow { flex: 1 1 220px; width: auto; }
body.solune-page .register-form-skin .rf-input-sm { max-width: 320px; }
body.solune-page .register-form-skin .rf-input-md { max-width: 420px; }
body.solune-page .register-form-skin .rf-input-zip { width: 130px; flex: none; }
body.solune-page .register-form-skin #fregisterform .rf-textarea { resize: vertical; line-height: 1.65; }
/* 읽기 전용 칸(우편번호·기본주소·본인확인이 채우는 이름)은 눌러도 고칠 수
   없다는 것이 보여야 한다. */
body.solune-page .register-form-skin #fregisterform :is(.rf-input, .frm_input)[readonly] {
    background: var(--solune-surface-soft);
    color: var(--solune-text-soft);
}
/* 라벨에 이미 * 가 붙어 있다. 입력칸 안의 빨간 별(default.css 의 require.png)
   까지 함께 뜨면 같은 말이 두 번이다. */
body.solune-page .register-form-skin :is(input, textarea, select):is(.required, [required]):invalid {
    background-image: none !important;
}
/* 파일 올리기 — 회원아이콘 · 회원이미지.

   브라우저 기본 모양("파일 선택  선택된 파일 없음")이 그대로 나와 이 카드
   에서만 다른 시대의 물건처럼 보였다. 칸은 다른 입력칸과 같은 테두리로
   두르고, 안의 고르기 단추는 곁들이 버튼(.rf-subbtn)과 같은 옅은 강조색으로
   맞춘다.

   #fregisterform 을 함께 적는다 — 코어 소셜 스킨이 `#reg_mb_icon,
   #reg_mb_img {float:right}` 로 id 를 물고 있어(1,0,1) 클래스 셋으로는
   못 이긴다. 지금은 부모가 flex 라 float 이 먹지 않지만, 배치를 바꾸면
   조용히 오른쪽으로 튀어나간다. */
body.solune-page .register-form-skin #fregisterform .rf-file {
    width: 100%;
    max-width: 420px;
    box-sizing: border-box;
    float: none;
    padding: 9px 12px;
    border: 1px solid var(--solune-border);
    border-radius: 8px;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-size: 13.5px;
    line-height: 1.5;
    cursor: pointer;
}
body.solune-page .register-form-skin #fregisterform .rf-file::file-selector-button {
    margin: 0 12px 0 0;
    padding: 7px 14px;
    border: 1px solid color-mix(in oklch, var(--solune-primary) 25%, var(--solune-border));
    border-radius: 6px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
}
body.solune-page .register-form-skin #fregisterform .rf-file::file-selector-button:hover {
    border-color: var(--solune-primary);
    background: color-mix(in oklch, var(--solune-primary) 14%, var(--solune-surface));
}
body.solune-page .register-form-skin #fregisterform .rf-file:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: 1px; }

/* 지금 쓰고 있는 그림. 미리보기와 삭제 체크를 한 줄에 둔다. */
body.solune-page .register-form-skin .rf-filenow {
    display: flex;
    max-width: 420px;
    align-items: center;
    gap: 12px;
    padding: 10px 12px;
    border: 1px solid var(--rf-line);
    border-radius: 8px;
    background: var(--solune-surface-soft);
}
body.solune-page .register-form-skin .rf-filenow img {
    max-width: 120px;
    max-height: 60px;
    width: auto;
    height: auto;
    flex: none;
    border: 1px solid var(--solune-border);
    border-radius: 6px;
    background: var(--solune-surface);
}
body.solune-page .register-form-skin .rf-filenow .rf-check-inline { margin-left: auto; }

/* SNS 로그인 관리 — 정보수정에만 나온다.

   코어 소셜 스킨이 <li> 하나에 라벨과 아이콘 줄을 담아 내보내, 카드 안에
   목록 표식이 튀어나오고 24px 짜리 색 상자 여섯이 가운데에 몰려 있었다.
   무엇이 연결됐는지도 회색 스프라이트로만 구분돼, 색을 못 보면 알 수 없다.
   회원가입 화면의 SNS 격자와 같은 문법으로 다시 앉히고 연결 여부를 글자로
   적는다. 그림은 코어 스프라이트(sns_logo.png · sns_logo_not.png)를 그대로
   쓴다 — 연결/미연결 두 벌이 이미 있다. */
body.solune-page .register-form-skin #fregisterform .rf-card-social li {
    display: block;
    margin: 0;
    padding: 0;
    list-style: none;
}
/* 코어가 낸 라벨. 카드 머리가 같은 말을 하므로 감춘다. */
body.solune-page .register-form-skin .rf-card-social .frm_label { display: none; }
body.solune-page .register-form-skin .rf-card-social .reg-form {
    margin: 0;
    padding: 0;
    border: 0;
    background: none;
}
body.solune-page .register-form-skin .rf-card-social .sns-wrap {
    display: grid;
    float: none;
    width: auto;
    height: auto;
    /* 230px 아래로 내려가면 "페이스북 로그인" 같은 긴 이름이 잘린다 —
       표 24 + 이름 95 + 상태 52 + 사이 20 + 안쪽 여백 28 이 들어가야 한다. */
    grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
    gap: 10px;
    margin: 14px 0 0;
    padding: 0;
    line-height: normal;
    text-align: left;
}
body.solune-page .register-form-skin .rf-card-social .sns-icon {
    display: flex;
    width: auto;
    min-width: 0;
    height: auto;
    align-items: center;
    gap: 10px;
    overflow: visible;
    margin: 0;
    padding: 12px 14px;
    border: 1px solid var(--solune-border);
    border-radius: 10px;
    background: var(--solune-surface);
    color: var(--solune-text);
    line-height: normal;
    text-align: left;
    text-decoration: none;
}
body.solune-page .register-form-skin .rf-card-social .sns-icon:hover {
    border-color: var(--solune-border-strong);
    background: var(--solune-surface-soft);
}
body.solune-page .register-form-skin .rf-card-social .sns-icon .ico { flex: none; }
body.solune-page .register-form-skin .rf-card-social .sns-icon .txt {
    position: static;
    min-width: 0;
    flex: 1;
    overflow: hidden;
    color: inherit;
    font-size: 13.5px;
    font-weight: 600;
    line-height: 1.3;
    text-overflow: ellipsis;
    white-space: nowrap;
}
/* 연결 여부. 코어는 흑백 스프라이트로만 갈라 두어 눈으로 견주기 전에는
   알 수 없다. title 에 든 말("… 연결을 해제합니다")은 마우스를 올려야
   보이므로, 상태를 글자로 한 번 더 적는다. */
body.solune-page .register-form-skin .rf-card-social .sns-icon::after {
    flex: none;
    padding: 2px 8px;
    border-radius: 999px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: 11.5px;
    font-weight: 700;
    content: "연결됨";
}
body.solune-page .register-form-skin .rf-card-social .sns-icon-not { color: var(--solune-text-soft); }
body.solune-page .register-form-skin .rf-card-social .sns-icon-not::after {
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    content: "연결하기";
}

/* 곁들이 버튼 — 중복확인 · 주소 검색 · 본인확인. */
body.solune-page .register-form-skin .rf-subbtn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: none;
    min-height: 0;
    height: auto;
    padding: 12px 18px;
    border: 1px solid color-mix(in oklch, var(--solune-primary) 25%, var(--solune-border));
    border-radius: 8px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    line-height: 1.4;
    white-space: nowrap;
    cursor: pointer;
}
body.solune-page .register-form-skin .rf-subbtn:hover {
    border-color: var(--solune-primary);
    background: color-mix(in oklch, var(--solune-primary) 12%, var(--solune-surface));
    color: var(--solune-primary);
}

/* 소셜 로그인 스킨의 스타일시트(코어 skin/social/style.css:107)가

       #fregisterform p { color:#fff; background:#f2838f; height:50px; ... }

   로 폼 안의 모든 <p> 에 분홍 경고 띠를 깐다. 그 스킨이 내는 안내 <p> 하나를
   노린 규칙인데 선택자가 그 하나를 가리지 못한다. 우리 폼은 도움말·검사
   결과·남은 항목 안내가 전부 <p> 라 통째로 분홍 띠가 됐다.

   같은 파일은 <section> · <h2> · <textarea> · .consent-* · .js-open-consent
   에도 #fregisterform 으로 값을 깐다 — 카드가 3px 모서리에 #dde7e9 테두리로,
   카드 제목이 20px 여백에 밑줄로 바뀌어 있었다. register_form.skin.php 가
   social_register.skin.php 를 include 하는 한 이 스타일시트는 늘 실린다.

   id 가 든 (1,0,1) 이라 클래스 셋(0,3,1)으로는 못 이긴다. 그래서 폼 안을
   다루는 규칙에는 #fregisterform 을 함께 적어 (1,3,1) 로 올린다. 폼
   밖(.rf-lead · .register-steps · .register-sns · .rf-foot · 머리줄)에는
   닿지 않으므로 그대로 둔다. SNS 카드를 폼 밖에 둔 것도 그 까닭이다 —
   안에 넣으면 설명 <p> 가 저 분홍 띠가 된다.

   되돌리는 규칙은 <p> 전부가 아니라 내 클래스에만 건다. 저 분홍 띠는 소셜
   쪽이 자기 안내 <p> 하나를 노린 것이라, 언젠가 그 <p> 가 나오면 원래
   모양대로 나오는 편이 맞다. */
body.solune-page .register-form-skin #fregisterform :is(.rf-help, .rf-msg, .rf-status) {
    position: static;
    height: auto;
    padding: 0;
    border-radius: 0;
    background: none;
    font-weight: 400;
    text-align: left;
}
body.solune-page .register-form-skin #fregisterform :is(.rf-help, .rf-msg, .rf-status):before { content: none; }

/* 도움말과 결과 문구. 같은 자리를 쓰므로 크기를 맞춰 둔다 — 문구가 바뀔 때
   아래 것들이 밀려 올라가지 않게. */
body.solune-page .register-form-skin #fregisterform :is(.rf-help, .rf-msg) {
    margin: 0;
    color: var(--solune-muted);
    font-size: 13px;
    line-height: 1.5;
}
body.solune-page .register-form-skin #fregisterform .rf-msg:empty { display: none; }
body.solune-page .register-form-skin #fregisterform .rf-msg.is-ok { color: var(--rf-ok); font-weight: 600; }
body.solune-page .register-form-skin #fregisterform .rf-msg.is-err { color: var(--solune-danger); font-weight: 600; }
body.solune-page .register-form-skin #fregisterform #msg_certify { margin: 0; padding: 0; border: 0; background: none; text-align: left; }

/* 비밀번호 세기 막대 */
body.solune-page .register-form-skin .rf-meter {
    --rf-meter-color: var(--solune-muted);
    display: flex;
    align-items: center;
    gap: 12px;
}
body.solune-page .register-form-skin .rf-meter[hidden] { display: none; }
body.solune-page .register-form-skin .rf-meter.is-weak { --rf-meter-color: var(--solune-danger); }
body.solune-page .register-form-skin .rf-meter.is-fair { --rf-meter-color: #a8681f; }
body.solune-page .register-form-skin .rf-meter.is-good { --rf-meter-color: var(--solune-primary); }
body.solune-page .register-form-skin .rf-meter.is-strong { --rf-meter-color: var(--rf-ok); }
body.solune-page .register-form-skin .rf-meter-track {
    flex: 1;
    height: 4px;
    overflow: hidden;
    border-radius: 999px;
    background: var(--rf-line);
}
body.solune-page .register-form-skin .rf-meter-bar {
    width: 0;
    height: 100%;
    border-radius: 999px;
    background: var(--rf-meter-color);
    transition: width .25s ease;
}
body.solune-page .register-form-skin .rf-meter-label {
    min-width: 52px;
    color: var(--rf-meter-color);
    font-size: 12.5px;
    font-weight: 600;
    text-align: right;
}

/* 체크 줄 — 정보공개 · 수신설정. 글 전체가 누르는 자리다. */
body.solune-page .register-form-skin .rf-checks {
    display: flex;
    flex-direction: column;
    padding-top: 14px;
    border-top: 1px solid var(--rf-line);
}
body.solune-page .register-form-skin .rf-check {
    display: flex;
    position: static;
    align-items: flex-start;
    gap: 14px;
    margin: 0;
    padding: 16px 4px;
    border-radius: 10px;
    cursor: pointer;
}
body.solune-page .register-form-skin .rf-check + .rf-check,
body.solune-page .register-form-skin .rf-consent + .rf-consent { border-top: 1px solid var(--rf-line); }
body.solune-page .register-form-skin label.rf-check:hover { background: var(--solune-surface-soft); }
body.solune-page .register-form-skin .rf-check.is-locked { cursor: default; }
body.solune-page .register-form-skin .rf-check input[type="checkbox"] {
    position: static;
    width: 18px;
    height: 18px;
    flex: none;
    margin: 2px 0 0;
    opacity: 1;
    accent-color: var(--solune-primary);
    cursor: pointer;
}
body.solune-page .register-form-skin .rf-check-text {
    display: flex;
    position: static;
    min-width: 0;
    flex: 1;
    flex-direction: column;
    gap: 4px;
    width: auto;
    height: auto;
    border: 0;
    background: none;
    cursor: pointer;
}
body.solune-page .register-form-skin .rf-check-title {
    color: var(--solune-text);
    font-size: 14.5px;
    font-weight: 600;
    letter-spacing: -.01em;
}
body.solune-page .register-form-skin .rf-check-desc { color: var(--solune-text-soft); font-size: 13px; line-height: 1.55; }
body.solune-page .register-form-skin .rf-check-inline { padding: 0; gap: 8px; }
body.solune-page .register-form-skin .rf-check-inline input[type="checkbox"] { margin: 0; }
body.solune-page .register-form-skin .rf-check-sub { align-items: center; gap: 10px; padding: 10px 4px 10px 32px; }
body.solune-page .register-form-skin .rf-check-sub input[type="checkbox"] { width: 17px; height: 17px; margin: 0; }
body.solune-page .register-form-skin .rf-check-sub .rf-check-title { font-size: 14px; font-weight: 500; }
body.solune-page .register-form-skin .rf-check input[type="checkbox"]:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: 2px; }
/* 수신설정 — 레거시 클래스는 스크립트가 쓰므로 이름은 두고 배치만 푼다. */
body.solune-page .register-form-skin .rf-consent { position: static; }
body.solune-page .register-form-skin .consent-line { display: flex; align-items: flex-start; margin: 0 !important; }
body.solune-page .register-form-skin #fregisterform .sub-consents { margin: 0; padding: 0 4px 8px; list-style: none; }
body.solune-page .register-form-skin .sub-consents .chk_box { position: static; }
body.solune-page .register-form-skin #fregisterform .consent-date { margin: 0 0 0 32px !important; color: var(--solune-muted); font-size: 12px; }
body.solune-page .register-form-skin #fregisterform .consent-date:empty { display: none; }
body.solune-page .register-form-skin #fregisterform .js-open-consent {
    flex: none;
    align-self: center;
    margin: 0;
    padding: 6px 2px;
    border: 0;
    background: none;
    color: var(--solune-primary);
    font-family: inherit;
    font-size: 12.5px;
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
    cursor: pointer;
}

/* 자동등록방지. 코어가 <fieldset> 로 내는 것을 한 줄로 편다. */
body.solune-page .register-form-skin .rf-captcha #captcha {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin: 0;
    padding: 0;
    border: 0;
}
body.solune-page .register-form-skin .rf-captcha #captcha legend {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    overflow: hidden !important;
    clip-path: inset(50%);
}
body.solune-page .register-form-skin .rf-captcha #captcha_img {
    order: 1;
    width: auto;
    height: 52px;
    flex: none;
    border: 1px solid var(--solune-border);
    border-radius: 8px;
    background: var(--solune-surface-soft);
}
body.solune-page .register-form-skin .rf-captcha #captcha_key {
    order: 2;
    width: auto;
    height: 52px;
    min-width: 150px;
    flex: 1 1 150px;
    box-sizing: border-box;
    padding: 0 14px;
    border: 1px solid var(--solune-border);
    border-radius: 8px;
    background: var(--solune-surface);
    color: var(--solune-text);
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 16px;
    letter-spacing: .12em;
}
/* 여기 단추는 아이콘만 있는 공용 정사각형이 아니라 글자를 함께 다는
   알약이다. 폼이 넓어 이름을 적을 자리가 있고, 적어 두면 무엇을 누르는지
   아이콘만 볼 때보다 분명하다. 그래서 폭·글자·넘침을 모두 여기서 다시
   말한다 — 공용 규칙(default.css)의 값을 그대로 두면 44px 정사각에
   글자가 잘린다. */
body.solune-page .register-form-skin .rf-captcha :is(#captcha_mp3, #captcha_reload) {
    order: 3;
    display: inline-flex;
    width: auto;
    overflow: visible;
    align-items: center;
    gap: 6px;
    height: 52px;
    flex: none;
    min-height: 0;
    padding: 0 14px;
    border: 1px solid var(--solune-border);
    border-radius: 8px;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-family: inherit;
    font-size: 13px;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
}
body.solune-page .register-form-skin .rf-captcha :is(#captcha_mp3, #captcha_reload):hover { border-color: var(--solune-border-strong); color: var(--solune-text); }
/* 모바일에서는 코어가 음성듣기 버튼 대신 <audio controls> 를 넣는다(m_captcha). */
body.solune-page .register-form-skin .rf-captcha #captcha_audio { order: 4; width: 100%; height: 36px; }
body.solune-page .register-form-skin .rf-captcha #captcha_info { order: 5; width: 100%; color: var(--solune-muted); font-size: 13px; }

/* 버튼 막대.

   한때 시안대로 화면 아래에 붙여(position: sticky) 따라오게 했는데,
   고정되지 않게 해 달라는 말을 들어 걷었다. 이제 폼 맨 끝에 그냥 선다.

   붙어 있을 때는 아래 내용이 비쳐 보이라고 바탕을 반투명 페이지색에
   흐림까지 얹었었다. 제자리에 서는 지금은 그 바탕이 페이지와 같은 색이라
   테두리만 남으므로, 위 카드들과 같은 표면색으로 되돌린다. */
body.solune-page .register-form-skin .rf-actions {
    display: flex;
    position: static;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px 16px;
    margin: 0;
    padding: 16px 20px;
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
    text-align: left;
}
body.solune-page .register-form-skin #fregisterform .rf-status {
    margin: 0;
    min-width: 0;
    flex: 1 1 200px;
    color: var(--solune-text-soft);
    font-size: 13.5px;
    line-height: 1.5;
}
body.solune-page .register-form-skin #fregisterform .rf-status.is-ok { color: var(--rf-ok); font-weight: 600; }
body.solune-page .register-form-skin #fregisterform .rf-status:empty { display: none; }
body.solune-page .register-form-skin .rf-actions-btns {
    display: flex;
    gap: 10px;
    margin-left: auto;
}
body.solune-page .register-form-skin .rf-actions-btns :is(.rf-btn-submit, .rf-btn-cancel) {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    float: none;
    width: auto;
    height: auto !important;
    min-height: 0;
    border-radius: 8px;
    font-family: inherit;
    letter-spacing: -.01em;
    text-decoration: none;
}
/* 아래 넷은 .rf-actions 를 한 칸 더 끼워 (0,4,1) 로 올린다. skins.css:79 의

       body.solune-page :is(…, .btn_confirm .btn_submit, .btn_submit, …)

   이 :is() 안에서 가장 센 인자(.btn_confirm .btn_submit)의 값을 가져가
   (0,3,1) 이 되는데, 이는 body.solune-page .register-form-skin .rf-btn-submit
   과 정확히 같다. 같으면 나중에 실린 쪽이 이기고 skins.css 는 스킨
   style.css 뒤에 실린다 — 그래서 보내기 버튼이 흰 바탕으로 나왔다.
   패딩·글자 크기는 그 규칙에 없어서 내 값이 남아, 반만 어긋난 모양이었다. */
body.solune-page .register-form-skin .rf-actions .rf-btn-submit {
    padding: 14px 30px;
    border: 1px solid var(--solune-primary);
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: 15px;
    font-weight: 700;
    cursor: pointer;
}
body.solune-page .register-form-skin .rf-actions .rf-btn-submit:hover:not(:disabled) { border-color: var(--solune-primary-hover); background: var(--solune-primary-hover); color: var(--solune-primary-ink); }
/* 보내는 중에는 코어가 이 버튼을 잠근다. */
body.solune-page .register-form-skin .rf-actions .rf-btn-submit:disabled {
    border-color: var(--solune-border);
    background: var(--solune-surface-soft);
    color: var(--solune-muted);
    cursor: not-allowed;
}
body.solune-page .register-form-skin .rf-actions .rf-btn-cancel {
    padding: 14px 22px;
    border: 1px solid var(--solune-border);
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-size: 15px;
    font-weight: 600;
}
body.solune-page .register-form-skin .rf-actions .rf-btn-cancel:hover { border-color: var(--solune-border-strong); background: var(--solune-surface-soft); color: var(--solune-text); }

body.solune-page .register-form-skin .rf-foot {
    margin: 16px 0 0;
    color: var(--solune-muted);
    font-size: 13px;
    line-height: 1.6;
    text-align: center;
}
body.solune-page .register-form-skin .rf-foot a {
    color: var(--solune-primary);
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* 좁은 화면에서는 라벨을 입력칸 위로 올린다. 190px 을 그대로 두면 입력칸에
   남는 폭이 없다. */
@media (max-width: 47.5rem) {
    body.solune-page .register.register-form-skin { --rf-cols: minmax(0, 1fr); --rf-pad: 14px; }
    body.solune-page .register-form-skin .rf-label { padding-top: 0; }
    body.solune-page .register-form-skin #fregisterform .rf-card { padding: 22px 18px; }
    body.solune-page .register-form-skin .rf-lead { margin-bottom: 22px; padding-bottom: 18px; }
    body.solune-page .register-form-skin .rf-lead-text { font-size: 14px; }
    body.solune-page .register-form-skin .rf-actions-btns { width: 100%; margin-left: 0; }
    body.solune-page .register-form-skin .rf-actions-btns :is(.rf-btn-submit, .rf-btn-cancel) { flex: 1 1 auto; padding-inline: 16px; }
    body.solune-page .register-form-skin .rf-input-sm,
    body.solune-page .register-form-skin .rf-input-md { max-width: none; }
}

/* 회원가입 완료 — 가입 세 걸음의 마지막이다.

   여태 그누보드 기본 그대로였다. 연파랑 판(#edf3fc)에 파란 글씨(#3684fa),
   파란 단추(#3a8afd) — 앞 두 걸음이 사이트 팔레트로 서 있는데 이 화면만
   기본 색으로 남아 흐름이 끊겼다. 앞 둘과 같은 카드로 맞추고 색은
   --solune-* 토큰으로 적는다. 그러면 다크도 함께 따라온다.

   걸음 표시는 여기서 다시 적지 않는다. 위 "세 걸음" 절이 세 화면을 모두
   맡는다. */
body.solune-page .register.register-result-skin {
    container: reg / inline-size;
    margin: 0;
}

body.solune-page .register-result-skin #reg_result {
    overflow: hidden;
    margin: 0;
    padding: 0;
    border: 1px solid var(--solune-border);
    border-radius: 12px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
    text-align: center;
}

/* 카드 머리. 무슨 일이 일어났는지가 먼저, 누구에게 하는 말인지가 그 다음. */
body.solune-page .register-result-skin .rr-hero { padding: 40px 24px 32px; }
body.solune-page .register-result-skin .rr-mark {
    display: inline-flex;
    width: 64px;
    height: 64px;
    align-items: center;
    justify-content: center;
    margin: 0 0 18px;
    border-radius: 50%;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}
/* 코어가 두고 간 선물 아이콘을 그대로 쓴다. 3em 이던 것을 동그라미에 맞춘다. */
body.solune-page .register-result-skin .rr-mark i { font-size: 26px; }
body.solune-page .register-result-skin #reg_result .reg_result_p {
    margin: 0;
    padding: 0;
    border: 0;
    color: var(--solune-text);
    font-size: 22px;
    font-weight: 700;
    letter-spacing: -.03em;
    line-height: 1.35;
}
body.solune-page .register-result-skin .rr-hero-sub {
    margin: 8px 0 0;
    color: var(--solune-muted);
    font-size: 14.5px;
    line-height: 1.6;
}
body.solune-page .register-result-skin .rr-hero-sub strong { color: var(--solune-text); font-weight: 700; }

/* 이메일 인증 안내. 이 화면에서 지금 해야 할 일이 있는 유일한 자리라
   상자에 따로 담는다. 아래 안내와 섞으면 읽고 지나가는 글이 된다. */
body.solune-page .register-result-skin .rr-notice {
    margin: 0 24px 24px;
    padding: 18px 20px;
    border: 1px solid var(--solune-border);
    border-radius: 10px;
    background: var(--solune-surface-soft);
    text-align: left;
}
body.solune-page .register-result-skin .rr-notice-lead {
    margin: 0;
    color: var(--solune-text);
    font-size: 13.5px;
    font-weight: 600;
    line-height: 1.7;
}
body.solune-page .register-result-skin .rr-notice-sub {
    margin: 12px 0 0;
    color: var(--solune-muted);
    font-size: 12.5px;
    line-height: 1.6;
}
/* 아이디와 이메일. 이름과 값이 짝이라 두 칸으로 세운다. */
body.solune-page .register-result-skin #result_email {
    display: grid;
    grid-template-columns: auto minmax(0, 1fr);
    gap: 6px 16px;
    margin: 14px 0 0;
    padding: 14px 0 0;
    border: 0;
    border-top: 1px solid var(--solune-border);
    background: none;
    line-height: 1.5;
}
body.solune-page .register-result-skin #result_email dt {
    color: var(--solune-muted);
    font-size: 12.5px;
    font-weight: 500;
    white-space: nowrap;
}
body.solune-page .register-result-skin #result_email dd {
    min-width: 0;
    margin: 0;
    color: var(--solune-text);
    font-size: 13.5px;
    font-weight: 600;
    word-break: break-all;
}

/* 남은 안내. 서로 다른 이야기라 목록으로 끊어 둔다. */
body.solune-page .register-result-skin .rr-notes {
    margin: 0;
    padding: 20px 24px 24px;
    border-top: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
    list-style: none;
    text-align: left;
}
body.solune-page .register-result-skin .rr-notes li {
    position: relative;
    padding-left: 16px;
    color: var(--solune-muted);
    font-size: 13px;
    line-height: 1.75;
}
body.solune-page .register-result-skin .rr-notes li + li { margin-top: 10px; }
body.solune-page .register-result-skin .rr-notes li::before {
    position: absolute;
    top: .7em;
    left: 2px;
    width: 4px;
    height: 4px;
    border-radius: 50%;
    background: var(--solune-border-strong);
    content: "";
}
body.solune-page .register-result-skin #reg_result .result_txt { text-align: left; }

/* 메인으로. 앞 두 걸음의 보내기 단추와 같은 치수다. */
body.solune-page .register-result-skin .btn_confirm_reg { margin: 20px 0 0; text-align: center; }
body.solune-page .register-result-skin .reg_btn_submit {
    display: inline-flex;
    width: 100%;
    max-width: 280px;
    height: 50px;
    align-items: center;
    justify-content: center;
    margin: 0 auto;
    border: 0;
    border-radius: 10px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: 15px;
    font-weight: 700;
    letter-spacing: -.02em;
    line-height: normal;
    text-decoration: none;
}
body.solune-page .register-result-skin .reg_btn_submit:hover { background: var(--solune-primary-hover); }

@container reg (max-width: 600px) {
    body.solune-page .register-result-skin .rr-hero { padding: 32px 20px 26px; }
    body.solune-page .register-result-skin #reg_result .reg_result_p { font-size: 19px; }
    body.solune-page .register-result-skin .rr-notice { margin-inline: 20px; }
    body.solune-page .register-result-skin .rr-notes { padding-inline: 20px; }
    /* 이름과 값을 한 줄에 두면 긴 이메일이 잘린다. 위아래로 쌓는다. */
    body.solune-page .register-result-skin #result_email { grid-template-columns: minmax(0, 1fr); gap: 2px; }
    body.solune-page .register-result-skin #result_email dd + dt { margin-top: 10px; }
    body.solune-page .register-result-skin .reg_btn_submit { max-width: none; }
}

.mb_log_cate h2 {width:50%;float:left;padding:20px 0;text-align:center}
.mb_log_cate .join {width:50%;float:left;padding:20px 0;text-align:center;background:#f7f7f7;color:#6e6e6e}
.mb_log_cate:after {display:block;visibility:hidden;clear:both;content:""}

.tooltip_icon {display:inline-block;vertical-align:baseline;color:#b3b5b8;border:0;font-size:1.4em;background:transparent;cursor:pointer}
.tooltip_icon:hover {color:#448bf5}
.tooltip {position:absolute;width:auto;color:#fff;background:#000;padding:10px;font-size:small;line-height:18px;display:none;z-index:9;font-weight:normal;margin-left:15px;margin-top:10px}
.tooltip:before {content:"";position:absolute;top:0;left:-10px;width:0;height:0;border-style:solid;border-top:0px solid transparent;border-bottom:10px solid transparent;border-left:0;border-right:10px solid #000}

/* 아이디/비밀번호 찾기 */
/* 회원정보 찾기 — 시안(회원정보 찾기)을 옮긴 것이다.

   여기 있던 그누보드 기본 규칙은 걷었다. 두 상자를 460px 로 float 시키고
   회색(#f7f7f7)으로 칠하던 것들이다. float 이라 바깥 상자의 높이가 0 으로
   무너져 오른쪽에 테두리 선만 남아 보였다. 격자로 바꾼다.

   #mb_hp_label 한 줄만 남긴다 — 본인인증을 켠 사이트에서 코어가 내는
   라벨이고, 여기서 다시 그릴 것이 없다. */
body.solune-page #find_info.solune-pl-page {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 20px;
    max-width: 640px;
    padding: 0;
    border: 0;
    background: none;
    box-shadow: none;
}
body.solune-page #find_info #mb_hp_label { display: inline-block; margin-left: 10px; }

body.solune-page #find_info .solune-pl-card {
    min-width: 0;
    width: auto;
    float: none;
    margin: 0;
    padding: 0;
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}

/* 카드 머리 — 무엇으로 찾는 길인지 표와 제목으로 먼저 말한다. */
body.solune-page #find_info .solune-pl-head {
    padding: 22px 24px 18px;
    border-bottom: 1px solid var(--solune-border);
}
body.solune-page #find_info .solune-pl-head h3 {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 0;
    padding: 0;
    border: 0;
    color: var(--solune-text);
    font-size: 17px;
    font-weight: 700;
    letter-spacing: -.02em;
    text-align: left;
}
body.solune-page #find_info .solune-pl-mark {
    display: inline-flex;
    width: 34px;
    height: 34px;
    flex: none;
    align-items: center;
    justify-content: center;
    border-radius: 10px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: 15px;
}
body.solune-page #find_info .solune-pl-head p {
    margin: 12px 0 0;
    color: var(--solune-muted);
    font-size: 13.5px;
    line-height: 1.7;
    text-wrap: pretty;
}

/* 폼 */
body.solune-page #find_info .solune-pl-fields {
    display: flex;
    flex-direction: column;
    gap: 18px;
    margin: 0;
    padding: 22px 24px 24px;
    border: 0;
}
body.solune-page #find_info .solune-pl-field { display: flex; min-width: 0; flex-direction: column; gap: 6px; }
body.solune-page #find_info .solune-pl-field > label {
    color: var(--solune-text-soft);
    font-size: 13px;
    font-weight: 600;
}
/* 필수는 글자로 적는다. 테마가 입력칸 오른쪽 위에 얹는 빨간 별은 무엇이
   필수인지 읽히지 않아 끈다. */
body.solune-page #find_info .solune-pl-req { color: var(--solune-danger); font-size: 11px; font-weight: 700; }
body.solune-page #find_info :is(input):is(.required, [required]):invalid { background-image: none !important; }

/* 입력칸. 테마가 모든 텍스트 입력에 테두리와 배경을 !important 로 다시
   그리므로 같은 무게로 맞춘다. 자동등록방지 칸은 뺀다 — 그 높이는
   default.css 의 공용 절이 --cap-h 로 잡아 그림·단추와 맞춘다. */
body.solune-page #find_info :is(.frm_input, .captcha_box) {
    width: 100%;
    box-sizing: border-box;
    padding: 0 14px;
    border: 1px solid var(--solune-border) !important;
    border-radius: 10px;
    background: var(--solune-surface) !important;
    color: var(--solune-text);
    font-size: 14.5px;
}
body.solune-page #find_info .frm_input:not(.captcha_box) { height: 46px; }
/* 포커스는 한 겹만. 테마에 모든 입력에 걸리는 규칙이 둘 있다. */
body.solune-page #find_info :is(.frm_input, .captcha_box):focus {
    border-color: var(--solune-primary) !important;
    box-shadow: 0 0 0 3px color-mix(in oklch, var(--solune-primary) 20%, transparent) !important;
}
body.solune-page #find_info :is(.frm_input, .captcha_box):focus-visible { outline: 0; }

/* 보내기. 이 화면에서 할 일이 하나뿐이라 카드 폭을 채운다.

   단추 규칙에는 .solune-pl-page 를 한 칸 더 끼운다. popup.css 의
   `.new_win:not(.solune-winpage) :is(.btn_submit, #btn_submit)` 이 :is()
   안의 id 값을 가져가 (1,3,1) 이 되는데, 그것이 내 규칙과 같은 무게라
   나중에 실린 popup.css 가 이긴다(CLAUDE.local.md). */
body.solune-page #find_info .solune-pl-actions { display: block; margin: 4px 0 0; padding: 0; text-align: left; }
body.solune-page #find_info.solune-pl-page .solune-pl-actions .btn_submit {
    display: block;
    width: 100%;
    height: 50px;
    padding: 0;
    border: 0;
    border-radius: 10px;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-family: inherit;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: -.02em;
    cursor: pointer;
}
body.solune-page #find_info.solune-pl-page .solune-pl-actions .btn_submit:hover { background: var(--solune-primary-hover); }

/* 본인인증 단추들. 셋까지 설 수 있어 좁아지면 접히게 둔다. */
body.solune-page #find_info .solune-pl-certs {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    padding: 20px 24px 24px;
}
body.solune-page #find_info.solune-pl-page .solune-pl-certs .btn_submit {
    height: 46px;
    flex: 1 1 160px;
    padding: 0 16px;
    border: 1px solid color-mix(in oklch, var(--solune-primary) 25%, var(--solune-border));
    border-radius: 10px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-family: inherit;
    font-size: 14px;
    font-weight: 600;
    white-space: nowrap;
    cursor: pointer;
}
body.solune-page #find_info.solune-pl-page .solune-pl-certs .btn_submit:hover {
    border-color: var(--solune-primary);
    background: color-mix(in oklch, var(--solune-primary) 14%, var(--solune-surface));
}

@media (max-width: 30rem) {
    body.solune-page #find_info .solune-pl-head { padding: 18px 18px 16px; }
    body.solune-page #find_info .solune-pl-fields { padding: 18px 18px 20px; }
    body.solune-page #find_info .solune-pl-certs { padding: 16px 18px 20px; }
}
#find_info p {line-height:1.5em}
#find_info #mb_email {margin:10px 0}
#find_info .find_btn .btn_submit {width:30%;word-break:keep-all;}

/* 비밀번호 재설정 */
#pw_reset #info_fs {margin-bottom: 10px}
#pw_reset .frm_input {margin:10px 0 0}

/* 기존 회원 본인인증 */
#member_cert_refresh p {position:relative;text-align:center;color:#fff;height:50px;line-height:50px;font-size:1.1em;background:#f2838f;margin:0 0 10px;border-radius:5px;font-weight:bold}
#member_cert_refresh p:before {content:"";position:absolute;top:0;left:0;width:5px;height:50px;border-radius:5px 0 0 5px;background:#da4453}
#member_cert_refresh p i {font-size:1.2em;vertical-align:middle}
#member_cert_refresh section {margin:10px auto 15px;border:1px solid #dde7e9;position:relative;border-radius:3px}

#member_cert_refresh h2 {text-align:left;padding:20px;border-bottom:1px solid #dde7e9;font-size:1.2em}
#member_cert_refresh textarea {display:block;padding:20px;width:100%;height:150px;background:#fff;border:0;line-height:1.6em}
#member_cert_refresh_private {position:relative}
#member_cert_refresh_private div {padding:20px;background:#fff}
#member_cert_refresh_private table {width:100%;border-collapse:collapse;font-size:1em;}
#member_cert_refresh_private table caption {position:absolute;font-size:0;line-height:0;overflow:hidden}
#member_cert_refresh_private table th {background:#f7f7f9;width:33.33%;color:#000;padding:10px;border:1px solid #d8dbdf;font-weight:bold;}
#member_cert_refresh_private table td {border:1px solid #e7e9ec;padding:10px;border-top:0}

.member_cert_refresh_agree {position:absolute;top:0;right:0}
.member_cert_refresh_agree input[type="checkbox"] + label {color:#676e70}
.member_cert_refresh_agree input[type="checkbox"] + label:hover {color:#2172f8}
.member_cert_refresh_agree input[type="checkbox"] + label span {position:absolute;top:20px;right:15px;width:17px;height:17px;display:block;background:#fff;border:1px solid #999;border-radius:3px}
.member_cert_refresh_agree input[type="checkbox"]:checked + label {color:#000}
.member_cert_refresh_agree input[type="checkbox"]:checked + label span {background:url('./img/chk.png') no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px}
.member_cert_refresh_agree.chk_all input[type="checkbox"] + label span {top:18px}

#member_cert_refresh #find_info {margin:50px 0}
#member_cert_refresh #find_info .find_btn {padding:10px 20px;background:#fff}
#member_cert_refresh #find_info .find_btn > div {margin:10px 0}

/* 쪽지 */
.memo_list {border-top:1px solid #ececec}
.memo_list li {border-bottom:1px solid #ececec;background:#fff;padding:10px 15px;list-style:none;position:relative}
.memo_list li:after {display:block;visibility:hidden;clear:both;content:""}
.memo_list li.read {background:#f6f6f6}
.memo_list li.empty_li {text-align:center;padding:20px 0;color:#666}

.memo_list .memo_li {float:left}
.memo_list .profile_big_img {position:relative;margin-right:15px}
.memo_list .profile_big_img img {border-radius:50%;width:52px;height:52px}
.memo_list .memo_li.memo_name {padding-top:5px;float:none}
.memo_list .memo_preview a{display:block;margin-right:30px;padding-top:10px;font-weight:normal !important;font-size:1.2em}
.memo_list .memo_preview a:hover{text-decoration:underline}
.memo_list .memo_name a,
.memo_list .memo_name .sv_wrap {font-weight:bold}
.memo_list .no_read {position:absolute;bottom:0;right:0;display:inline-block;background:#3a8afd;border:1px solid #e1edff;text-indent:-9999px;border-radius:10px;width:10px;height:10px;box-shadow:0 0 10px 3px #9ec3f9}
.memo_list .no_read {animation:blinker 1s linear infinite}

@keyframes blinker {
	50% {opacity:0}
	}

#memo_list h1#win_title {padding:10px 10px 10px 20px}
#memo_list .memo_datetime {font-size:0.92em;color:#888d92}
#memo_list .memo_del {position:absolute;right:15px;top:15px;padding:10px;color:#c7c9cb;font-size:1.4em}
#memo_list .memo_cnt {margin-top:5px;font-weight:normal;display:inline-block;font-size:1.2em}
#memo_list .pg_wrap {margin-top:10px;width:100%;float:inherit;text-align:center}

#memo_view_contents {margin-bottom:20px;border-top:1px solid #ececec;border-bottom:1px solid #ececec}
#memo_view_contents h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
#memo_view_ul {margin:0;list-style:none;background:#f6f6f6}
#memo_view_ul:after {display:block;visibility:hidden;clear:both;content:""}
.memo_view_li {position:relative;/*padding:10px;float:left;width:50%*/}

.memo_view_li .profile_img img {display:none}
.memo_from {position:relative;background:#fff;border-bottom:1px solid #ececec;padding:15px 20px}
.memo_from li {float:left}
.memo_from li.memo_profile img {width:40px;height:40px;border-radius:50%}
.memo_from li:first-child {margin-right:10px}
.memo_from li.memo_view_nick {width:80%}
.memo_from li.memo_view_nick a {font-weight:bold !important}
.memo_from li.memo_view_date {display:block;color:#555;line-height:24px}
.memo_from li.memo_op_btn {position:absolute}
.memo_from li.list_btn {right:53px;}
.memo_from li.del_btn {right:15px;}
.memo_from:after {display:block;visibility:hidden;clear:both;content:""}

.memo_btn {width:100%}
.memo_btn a {display:inline-block;width:50%;font-size:1em;color:#888d92;padding:20px}
.memo_btn a.btn_right {float:right;text-align:right}
.memo_btn a i {font-size:1.2em;color:#acabab;vertical-align:bottom}

#memo_view p {padding:10px;min-height:150px;height:auto !important;height:150px;background:#fff;line-height:1.8em}
#memo_view textarea {height:100px}

#memo_write .form_01 {padding:20px;border-top:1px solid #ececec}

.reply_btn {display:inline-block;width:150px;height:45px;line-height:50px;padding:0 10px;font-weight:bold;background:#3a8afd;color:#fff;border-radius:3px;vertical-align:bottom;margin-right:5px}
#memo_write .reply_btn {font-size:1em}

/* 스크랩 */
#scrap li:after {display:block;visibility:hidden;clear:both;content:""}
#scrap li {position:relative;padding:20px;border-bottom:1px solid #ececec}
#scrap .scrap_tit {font-weight:bold;display:block;font-size:1.083em;margin-bottom:10px;line-height:1.3em}
#scrap .scrap_cate {float:left;display:block;color:#ac92ec;background:#eeeaf8;padding:3px;border-radius:3px;font-size:0.92em;margin-right:10px}
#scrap .scrap_datetime {color:#777;line-height:18px}
#scrap .scrap_del {position:absolute;top:15px;right:15px;font-size:18px;color:#c7c9cb}
#scrap .scrap_del:hover {color:#3a8afd}

#scrap_do .new_win_con {padding:0 20px}
#scrap_do textarea {width:100%;height:100px}
#scrap_do .scrap_tit {margin-bottom:10px;background:#f3f3f3;padding:10px 15px;font-size:1.2em;font-weight:bold}
#scrap_do label {display:block;margin:0 0 5px;font-size:1em}
#scrap_do .win_btn:after {display:block;visibility:hidden;clear:both;content:""}
#scrap .win_btn, #scrap_do .win_btn {margin:20px 0;text-align:center}
#scrap_do .win_btn .btn_submit {float:inherit}
#scrap_do .win_desc {margin:0 20px}

/*포인트*/
#point {text-align:center}
#point h1 {text-align:left}
#point .point_all {margin:20px 20px 15px;border-radius:5px;background:#edf3fc;border:1px solid #d6e2f4;color:#485172;font-size:1.083em}
#point .point_all:after {display:block;visibility:hidden;clear:both;content:""}
#point .point_all li {float:left;width:50%;padding:20px;text-align:left}
#point .point_all li span {float:right;color:#485172;font-weight:bold}
#point .point_all li:last-child {border-left:1px solid #d6e2f4}
#point .point_all .full_li {width:100%;border-bottom:1px solid #d6e2f4;text-align:left}
#point .point_all .full_li span {color:#000;font-weight:bold;font-size:1.2em}
#point .point_status{background:#737373;border:0;color:#fff;font-weight:bold;font-size:1.083em;text-align:left}
#point .point_status:after {display:block;visibility:hidden;clear:both;content:""}
#point .point_status span{margin-left:10px;float:right}

.point_list {}
.point_list li:first-child {border-top:1px solid #ececec}
.point_list li {border-bottom:1px solid #ececec;background:#fff;padding:15px;list-style:none;position:relative}
.point_list li:after {display:block;visibility:hidden;clear:both;content:""}

.point_list .point_use {background:#f6f6f6}
.point_list .point_use .point_num {font-size:1.25em;color:#ff4f76;font-weight:bold;float:right}
.point_list .point_num {font-size:1.25em;color:#3a8afd;font-weight:bold;position:absolute;right:15px;top:25px}
.point_list .point_top {line-height:15px;margin:0 0 5px}
.point_list .point_top:after {display:block;visibility:hidden;clear:both;content:""}
.point_list .point_tit {font-weight:bold;float:left;font-size:1.083em;display:block}
.point_list .point_date1 {float:left;color:#888d92}
.point_list .point_date {float:left;color:#888d92}
.point_list .txt_expired {color:red;margin-left:5px}

#point .pg_wrap {width:100%;float:inherit;text-align:center}
#point .btn_close {margin:20px auto}

/* 회원 비밀번호 확인은 이 파일 맨 위의 "회원 비밀번호 확인" 절이 맡는다.
   여기 있던 그누보드 기본 규칙(설명 줄 아래 회색 밑줄, 파란 strong,
   fieldset 50px 여백, 흰 바탕 !important)은 걷었다. 남겨 두면 새 규칙이
   적지 않은 값 — padding · border-bottom 같은 것 — 만 옛 값으로 남아
   설명 줄이 들여쓰이고 밑줄이 두 겹으로 그려졌다.

   아래 #pw_confirm(비밀글 비밀번호 확인)은 다른 화면이라 제 절이 따로 맡는다. */

/* 비밀글 비밀번호 확인 — 시안(비밀글 비밀번호 확인 v5).
   위 "회원 비밀번호 확인"(#mb_confirm) 카드와 같은 결로 두되, 시안처럼 머리를
   가운데 정렬하고 옅은 바탕 띠로 가른다. 색은 사이트 팔레트를 쓴다 —
   시안 #2b5cd9 -> --solune-primary, #eef2fc -> --solune-primary-soft.

   여기 있던 그누보드 기본 규칙(제목 60px 여백 · 설명 아래 회색 밑줄 ·
   파란 strong · fieldset 50px 여백 · 흰 바탕 !important)은 새 마크업과
   맞지 않아 걷었다. .mbskin 의 옛 값(360 고정폭 · 위 100 · 가운데 정렬)도
   여기서 다시 적는다. */
body.solune-page #pw_confirm.mbskin {
    width: 100%;
    max-width: 460px;
    margin: 48px auto 0;
    padding: 0 16px;
    box-sizing: border-box;
    /* skins.css 의 .mbskin 이 모든 회원 화면 상자에 흰 바탕 · 모서리 · 테두리를 입힌다.
       여기서는 카드(.pw-card)가 따로 있고 경로 표시는 그 밖에 서야 하므로 겉상자는 비운다. */
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
    text-align: left;
}
body.solune-page #pw_confirm .pw-crumb {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin: 0 0 16px;
    color: var(--solune-muted);
    font-size: 13px;
}
body.solune-page #pw_confirm .pw-crumb a { color: var(--solune-muted); }
body.solune-page #pw_confirm .pw-crumb a:first-child { color: var(--solune-primary); }
body.solune-page #pw_confirm .pw-crumb a:hover { color: var(--solune-primary); }
body.solune-page #pw_confirm .pw-crumb > span[aria-hidden] { color: var(--solune-border-strong); }
body.solune-page #pw_confirm .pw-crumb [aria-current] { color: var(--solune-text); font-weight: 600; }

body.solune-page #pw_confirm .pw-card {
    overflow: hidden;
    border: 1px solid var(--solune-border);
    border-radius: 14px;
    background: var(--solune-surface);
    box-shadow: var(--solune-shadow-sm);
}
body.solune-page #pw_confirm .pw-head {
    padding: 36px 32px 28px;
    border-bottom: 1px solid var(--solune-border);
    background: var(--solune-surface-soft);
    text-align: center;
}
body.solune-page #pw_confirm .pw-mark {
    display: flex;
    width: 52px;
    height: 52px;
    align-items: center;
    justify-content: center;
    margin: 0 auto 14px;
    border-radius: 50%;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: 20px;
}
body.solune-page #pw_confirm .pw-badge {
    display: inline-flex;
    align-items: center;
    margin: 0 0 10px;
    padding: 3px 10px;
    border-radius: 999px;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font-size: 11.5px;
    font-weight: 600;
}
body.solune-page #pw_confirm .pw-head h1 {
    margin: 0 0 8px;
    padding: 0;
    border: 0;
    color: var(--solune-text);
    font-size: 24px;
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1.2;
    word-break: keep-all;
}
body.solune-page #pw_confirm .pw-head p {
    margin: 0;
    padding: 0;
    border: 0;
    color: var(--solune-muted);
    font-size: 13.5px;
    line-height: 1.6;
    word-break: keep-all;
}
/* 코어 문구의 첫 문장은 strong 이다. 파란 큰 글자로 두면 제목과 다투므로
   설명과 같은 크기에 글자색만 한 단 진하게 둔다. */
body.solune-page #pw_confirm .pw-head p strong { display: block; margin: 0 0 2px; color: var(--solune-text-soft); font-size: inherit; font-weight: 600; }

body.solune-page #pw_confirm .pw-form fieldset {
    display: grid;
    gap: 14px;
    margin: 0;
    padding: 26px 28px 20px;
    border: 0;
    text-align: left;
}
body.solune-page #pw_confirm .pw-label-row { display: flex; align-items: center; justify-content: space-between; margin-bottom: -8px; }
body.solune-page #pw_confirm .pw-label { color: var(--solune-text); font-size: 12.5px; font-weight: 600; letter-spacing: 0; }
/* 표시 · 숨기기. 글자 단추지만 누를 자리는 24px 을 넘긴다(WCAG 2.2 AA). */
body.solune-page #pw_confirm .pw-toggle {
    min-height: 28px;
    padding: 0 4px;
    border: 0;
    background: none;
    color: var(--solune-muted);
    cursor: pointer;
    font-size: 12px;
    font-weight: 600;
}
body.solune-page #pw_confirm .pw-toggle:hover { color: var(--solune-primary); }
body.solune-page #pw_confirm .pw-toggle:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: 2px; border-radius: 4px; }
body.solune-page #pw_confirm .pw-form .frm_input {
    width: 100%;
    height: 46px;
    box-sizing: border-box;
    padding: 0 14px;
    border-radius: 10px;
    font-size: 15px;
}
body.solune-page #pw_confirm .pw-form .btn_submit {
    width: 100%;
    height: 46px;
    border: 0;
    border-radius: 10px;
    background: var(--solune-primary);
    color: var(--color-primary-content, #fff);
    cursor: pointer;
    font-size: 15px;
    font-weight: 600;
}
body.solune-page #pw_confirm .pw-form .btn_submit:hover { background: var(--solune-primary-hover); }

body.solune-page #pw_confirm .pw-links {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 6px 14px;
    padding: 0 28px 26px;
    color: var(--solune-muted);
    font-size: 12.5px;
}
body.solune-page #pw_confirm .pw-links a { color: var(--solune-muted); }
body.solune-page #pw_confirm .pw-links a:hover { color: var(--solune-primary); }
body.solune-page #pw_confirm .pw-links-sep { width: 1px; height: 12px; background: var(--solune-border); }

@media (max-width: 767px) {
    body.solune-page #pw_confirm.mbskin { margin-top: 20px; }
    body.solune-page #pw_confirm .pw-head { padding: 28px 20px 24px; }
    body.solune-page #pw_confirm .pw-head h1 { font-size: 22px; }
    body.solune-page #pw_confirm .pw-form fieldset { padding: 20px 16px 18px; }
    body.solune-page #pw_confirm .pw-links { padding: 0 16px 22px; }
}

#mb_confirm_id {}

/* 메일 쓰기 — 쪽지쓰기와 같은 팝업 껍데기(머리 · 본문 · 바닥)를 쓴다.
   껍데기 자체는 css/default.css 의 .solune-winpage 절이 맡고, 여기서는
   그 안의 칸들만 그린다.

   여기 있던 그누보드 기본 규칙은 걷었다 — 40px 아이콘 상자를 파일칸 위에
   절대배치하던 .lb_icon, 그것을 피하려고 준 padding-left:50px, 파란 안내
   글(#3497d9). 아이콘 상자는 브라우저 기본 파일칸과 겹쳐 있었다. */
body.solune-page #formmail.solune-fm-page .solune-fm-form {
    display: flex;
    min-height: 0;
    flex: 1;
    flex-direction: column;
    margin: 0;
}
body.solune-page #formmail.solune-fm-page .solune-fm-body { gap: 1.125rem; }

body.solune-page #formmail.solune-fm-page .solune-fm-field { display: flex; min-width: 0; flex-direction: column; gap: .375rem; }
body.solune-page #formmail.solune-fm-page .solune-fm-field > label,
body.solune-page #formmail.solune-fm-page .solune-fm-label {
    color: var(--solune-text);
    font-size: .8125rem;
    font-weight: 600;
}
/* 필수는 글자로 적는다. 코어는 입력칸 오른쪽 위에 빨간 별 하나를 얹는데
   (default.css 가 !important 로 깐다) 그것만으로는 무엇이 필수인지 읽히지
   않는다. 글자를 세웠으니 별은 끈다. */
body.solune-page #formmail.solune-fm-page .solune-fm-req { color: var(--solune-danger); font-weight: 700; }
body.solune-page #formmail.solune-fm-page :is(input, textarea):is(.required, [required]):invalid { background-image: none !important; }

body.solune-page #formmail.solune-fm-page .solune-fm-hint {
    margin: 0;
    color: var(--solune-muted);
    font-size: .75rem;
    line-height: 1.5;
}

/* 입력칸. 테마는 모든 텍스트 입력에 테두리와 배경을 !important 로 다시
   그리므로 같은 무게로 맞춘다. */
body.solune-page #formmail.solune-fm-page :is(.frm_input, textarea, .captcha_box) {
    width: 100%;
    box-sizing: border-box;
    padding: 0 .875rem;
    border: 1px solid var(--solune-border) !important;
    border-radius: .5rem;
    background: var(--solune-surface) !important;
    color: var(--solune-text);
    font-size: .875rem;
}
/* 자동등록방지 입력칸은 뺀다. 그 칸의 높이는 default.css 의 공용 절이
   --cap-h 로 잡아 그림·단추와 같은 값을 쓰는데, 여기 규칙이 더 세서 좁은
   화면에서 이 칸만 42px 로 남고 나머지가 35px 이 됐다. */
body.solune-page #formmail.solune-fm-page .frm_input:not(.captcha_box) { height: 2.625rem; }
body.solune-page #formmail.solune-fm-page textarea {
    min-height: 10rem;
    height: auto;
    padding: .875rem;
    line-height: 1.6;
    resize: vertical;
}
/* 포커스는 한 겹만. 테마에 모든 입력에 걸리는 규칙이 둘 있어 그대로 두면
   링이 겹쳐 세 겹이 된다. */
body.solune-page #formmail.solune-fm-page :is(.frm_input, textarea, .captcha_box):focus {
    border-color: var(--solune-primary) !important;
    box-shadow: 0 0 0 3px color-mix(in oklch, var(--solune-primary) 20%, transparent) !important;
}
body.solune-page #formmail.solune-fm-page :is(.frm_input, textarea, .captcha_box):focus-visible { outline: 0; }

/* 형식 세 갈래. 표식과 글자를 한 칸에 담아 어디까지가 한 선택지인지 보이게
   한다. 고른 칸만 테두리와 글자를 강조색으로 둔다. */
body.solune-page #formmail.solune-fm-page .solune-fm-types { display: flex; flex-wrap: wrap; gap: .5rem; }
body.solune-page #formmail.solune-fm-page .solune-fm-types label {
    display: inline-flex;
    align-items: center;
    gap: .4375rem;
    padding: .5rem .75rem;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-size: .8125rem;
    font-weight: 600;
    cursor: pointer;
}
body.solune-page #formmail.solune-fm-page .solune-fm-types label:hover { background: var(--solune-surface-soft); }
body.solune-page #formmail.solune-fm-page .solune-fm-types label:has(:checked) {
    border-color: var(--solune-primary);
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
}
/* 코어 .chk_box 규칙이 라디오를 0x0 으로 감추고 라벨 안 빈 span 을 가짜
   동그라미로 그렸다. 이 화면에서는 진짜 라디오를 그대로 보여 준다. */
body.solune-page #formmail.solune-fm-page .solune-fm-types input[type="radio"] {
    position: static;
    width: .875rem;
    height: .875rem;
    margin: 0;
    opacity: 1;
    accent-color: var(--solune-primary);
    cursor: pointer;
}

/* 첨부. 브라우저 기본 모양 그대로면 이 창에서만 다른 시대의 물건처럼
   보인다. 고르기 단추는 옅은 강조색으로 맞춘다. */
body.solune-page #formmail.solune-fm-page .solune-fm-file {
    width: 100%;
    box-sizing: border-box;
    padding: .5rem .75rem;
    border: 1px solid var(--solune-border);
    border-radius: .5rem;
    background: var(--solune-surface);
    color: var(--solune-text-soft);
    font-size: .8125rem;
    line-height: 1.5;
    cursor: pointer;
}
body.solune-page #formmail.solune-fm-page .solune-fm-file::file-selector-button {
    margin: 0 .75rem 0 0;
    padding: .375rem .75rem;
    border: 1px solid color-mix(in oklch, var(--solune-primary) 25%, var(--solune-border));
    border-radius: .375rem;
    background: var(--solune-primary-soft);
    color: var(--solune-primary);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
}
body.solune-page #formmail.solune-fm-page .solune-fm-file::file-selector-button:hover {
    border-color: var(--solune-primary);
    background: color-mix(in oklch, var(--solune-primary) 14%, var(--solune-surface));
}
body.solune-page #formmail.solune-fm-page .solune-fm-file:focus-visible { outline: 2px solid var(--solune-primary); outline-offset: 1px; }

/* 바닥. 창닫기와 메일발송 둘뿐이라 오른쪽 끝에 모은다. 메일발송이 주된
   행동이라 채워 그린다. */
body.solune-page #formmail.solune-fm-page .solune-fm-actions {
    display: flex;
    justify-content: flex-end;
    gap: .5rem;
}
body.solune-page #formmail.solune-fm-page .solune-fm-actions .reply_btn {
    height: 2.5rem;
    padding: 0 1.25rem;
    border: 0;
    border-radius: .5rem;
    background: var(--solune-primary);
    color: var(--solune-primary-ink);
    font-size: .875rem;
    font-weight: 600;
}
body.solune-page #formmail.solune-fm-page .solune-fm-actions .reply_btn:hover:not(:disabled) { background: var(--solune-primary-hover); }
body.solune-page #formmail.solune-fm-page .solune-fm-actions .reply_btn:disabled { opacity: .6; cursor: default; }
.chk_box {position:relative}
.chk_box input[type="radio"] {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
.chk_box input[type="radio"] + label {position:relative;padding-left:23px;display:inline-block;color:#676e70}
.chk_box input[type="radio"] + label span {position:absolute;top:0;left:0;width:15px;height:15px;display:block;background:#f7f8f9;border:1px solid #cdd6df;border-radius:50%}
.chk_box input[type="radio"]:checked + label {color:#3a8afd}
.chk_box input[type="radio"]:checked + label span {border-color:#3a8afd}
.chk_box input[type="radio"]:checked + label span:before {width:7px;height:7px;background:#3a8afd;content:'';position:absolute;top:3px;left:3px;border-radius:50%}
.chk_box input[type="checkbox"] + label {position:relative;color:#676e70}
.chk_box input[type="checkbox"] + label:hover {color:#2172f8}
.chk_box input[type="checkbox"] + label span {float:left;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px}
.chk_box input[type="checkbox"]:checked + label {color:#000}
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px}
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}

/* 자기소개 */
#profile h1 a {}
#profile table {margin-bottom:0}
#profile table th {text-align:left;padding:10px;width:100px}
#profile section {color:#6794d3;background:#fff;padding:10px;border:1px solid #eee;margin:10px 0}
#profile h2 {margin:0 0 5px}
#profile .profile_name {text-align:center;font-weight:bold}
#profile .my_profile_img {display:block;margin:20px 0 5px}
#profile .my_profile_img img {border-radius:50%}
#profile .profile_img img {border-radius:50%}
#profile .profile_name .sv_wrap {font-weight:bold;text-align:left}
