홈
성공사례
명예훼손 · 모욕
비밀유지 합의 위반 위약벌 청구
온라인 분쟁 · 원고 일부승소
비밀유지 합의를 깨고 영상으로 공개한 상대방,2천만원 배상책임 인정 판결을 받아낸 사례
외부에 알리지 않기로 합의해 놓고 상대방이 자기 콘텐츠로 내용을 공개하고 사실과 다른 주장까지 이어간 사건. 문자와 녹취로 약정의 존재를 세우고 위약벌의 성격을 논증해, 손해액을 일일이 계산하지 않고도 합의 위반의 책임을 판결로 확인받은 위약벌 청구 과정을 정리했습니다.
카테고리 명예훼손 · 온라인분쟁
결과 2천만원 배상책임 인정 · 원고 일부승소
관련 법조 민법 제398조 제2항
작성일 2026. 8.
의뢰인
온라인에서 전문 정보 콘텐츠를 운영해 온 분
사건 발단
업무 갈등을 정리하며 외부 비공개와 위반 시 금전 지급을 합의했으나, 상대방이 자신의 콘텐츠로 합의 내용을 공개하고 의뢰인이 부당한 요구를 했다는 취지의 사실과 다른 주장까지 전개
청구
비밀유지 약정 위반에 따른 위약벌 청구의 소
대응 전략
문자·녹취로 약정 성립과 체결 경위를 입증하고, 해당 약정이 의무 이행 확보를 위한 위약벌임을 논증해 손해액 개별 산정 없이 책임을 물음
결과
2천만원 지급 판결 — 합의 위반의 배상책임 인정, 원고 일부승소
다툼을 매듭지으면서 서로 이 일을 밖으로 꺼내지 않기로 약속하는 경우가 있습니다. 그런데 어렵게 만든 약속을 한쪽이 먼저 깨고 내용을 공개해 버리면 사정이 달라집니다. 공개에 그치지 않고 상대에 관한 사실과 다른 이야기까지 덧붙이면, 합의문은 종이 한 장으로 남게 됩니다.
이번에 소개할 사건이 그랬습니다. 의뢰인은 합의가 성립했으니 갈등이 더 커지지 않으리라 여겼지만, 상대방은 자신의 채널로 합의와 관련된 내용을 공개했고 의뢰인을 향한 사실과 다른 주장까지 이어 갔습니다.
뉴로이어 법률사무소는 문자와 녹취로 약정의 존재와 체결 경위를 세운 뒤, 그 조항이 형식적인 문구가 아니라 의무를 지키게 하려는 위약벌이라는 점을 논증했습니다. 그 결과 2천만원의 지급을 명하는 원고 일부승소 판결을 받아낸 과정을 말씀드리겠습니다.
01사건 개요 — 비공개를 약속한 사람이 먼저 카메라를 켰다
의뢰인은 온라인에서 전문적인 정보를 다루는 콘텐츠를 운영해 온 분이고, 상대방도 비슷한 분야에서 활동하던 사람이었습니다. 두 사람은 업무와 얽힌 문제로 갈등을 겪었고, 서로의 활동에 더는 영향을 주지 않는 방향으로 분쟁을 정리하기로 뜻을 모았습니다.
협의 끝에 양측은 관련 내용을 외부에 공개하지 않기로 했고, 이를 어길 경우 일정 금액을 지급한다는 조건까지 분명히 남겨 두었습니다. 합의가 성립한 이상 문제가 더 번지지는 않으리라는 것이 의뢰인의 생각이었습니다.
그런데 상대방은 이후 자신의 온라인 콘텐츠를 통해 합의와 관련된 내용을 일방적으로 공개했고, 의뢰인이 부당한 요구를 했다는 취지의 사실과 다른 주장까지 펼쳤습니다. 그 여파로 의뢰인이 오랜 시간에 걸쳐 쌓아 온 활동의 신뢰마저 흔들릴 상황이 되자, 의뢰인은 합의 위반의 책임을 묻기 위해 저희를 찾아오셨습니다.
비밀유지 합의가 깨졌을 때 남는 문제
이미 퍼진 내용을 되돌리기는 어렵습니다. 그래서 이런 분쟁에서는 공개를 막는 것보다 약속을 어긴 데 대한 금전적 책임을 실제로 확인받는 일이 현실적인 목표가 됩니다. 그 책임의 근거가 되는 것이 합의서에 넣어 둔 위반 시 지급 조항입니다.
약정의 성립 입증
비공개 약속과 위반 시 책임 부담이 실제로 합의됐다는 사실을 어떤 자료로 세울 것인가.
합의 체결의 자발성
한쪽이 조건을 밀어붙인 것이 아니라 양측이 필요에 따라 동의했다는 경위를 어떻게 보일 것인가.
약정의 법적 성격
해당 조항이 위약벌인지 손해배상액의 예정인지에 따라 갈리는 입증 부담의 무게.
손해액 산정의 벽
신뢰의 훼손처럼 금액으로 환산하기 어려운 피해를 어떻게 청구에 담을 것인가.
위반 이후의 파장
공개 영상과 댓글, 이용자 반응으로 이어진 여파를 재판부에 어떻게 전달할 것인가.
감액 가능성 대비
약정 금액이 과다하다는 판단이 내려질 경우에 대비해 청구를 어떻게 구성할 것인가.
02문제 해결 — 문자 한 줄부터 영상과 댓글까지 다시 맞춰봤습니다
사건을 맡고 가장 먼저 펼쳐 본 것은 양측이 주고받은 문자와 당시의 대화 녹취였습니다. 이런 분쟁은 결국 그런 약속이 실제로 있었는지부터 분명해져야 그다음 논의가 가능하기 때문입니다.
다행히 비공개로 하기로 한 범위와 이를 어길 경우 책임을 진다는 내용이 문자에 남아 있었고, 합의에 이르는 과정도 녹취로 확인됐습니다. 기록을 시간순으로 맞춰 보니 어느 한쪽이 조건을 억지로 관철한 것이 아니라 양측이 각자의 필요에 따라 동의해 합의에 도달했다는 흐름도 비교적 또렷하게 드러났습니다.
민법 제398조(배상액의 예정)
② 손해배상의 예정액이 부당히 과다한 경우에는 법원은 적당히 감액할 수 있다.
④ 위약금의 약정은 손해배상액의 예정으로 추정한다.
출처: 국가법령정보센터 · 작성일 기준 조문
문자·녹취로 약정 성립 확정
비공개 범위와 위반 시 책임 부담이 담긴 문자, 합의 과정을 담은 녹취를 확보해 약속의 존재 자체를 다툼의 대상에서 걷어냈습니다.
체결 경위의 재구성
기록을 맞춰 양측이 각자의 필요로 조건에 동의했다는 흐름을 보이고, 강요로 만들어진 합의라는 반론의 여지를 좁혔습니다.
위약벌 성격의 논증
관련 대법원 판례를 검토한 뒤, 이 약정이 형식적으로 적어 둔 문구가 아니라 비밀유지 의무를 실제로 지키게 하려고 당사자들이 스스로 정한 약속이며 의무 이행 확보를 위한 위약벌의 성격을 갖는다는 점을 집중적으로 주장했습니다.
손해 개별 산정 불요 논리
위약벌로 평가되는 이상, 위반 이후 발생한 손해를 하나하나 금액으로 계산해야만 책임을 물을 수 있는 것은 아니라는 논리를 전개해 입증의 무게를 덜었습니다.
위반 이후 파장의 입증
합의 내용을 공개한 영상과 뒤이어 달린 댓글, 이용자들의 반응을 시간순으로 정리해 제출하고, 의뢰인이 오랫동안 이어 온 공익적 제보와 검증 활동 자료를 함께 제시해 흔들린 것이 감정이 아니라 쌓아 온 신뢰라는 점을 전달했습니다.
이 사건 변호의 무게중심
재판부가 조항의 문구만 읽고 넘어가지 않도록, 왜 이런 합의를 하게 됐고 왜 위반 시 책임까지 미리 정해 두었는지를 체결 경위부터 차근차근 쌓아 올렸습니다. 조항의 성격을 정하는 것은 문언 그 자체보다 그 문언이 놓인 맥락이기 때문입니다.
주의해야 할 점
위반 시 금액을 크게 적어 둔다고 그대로 인정되는 것은 아닙니다. 손해배상액의 예정으로 평가되는 약정은 지나치게 과다할 경우 법원이 감액할 수 있습니다. 합의 당시의 사정과 예상되는 피해에 비추어 납득할 만한 수준으로 정해 두는 편이 실제 분쟁에서 더 유효합니다.
03최종 결과 — 2천만원 배상책임 인정, 원고 일부승소
법원은 상대방이 합의를 어긴 데 따른 배상책임 자체를 인정했습니다. 다만 처음에 정해 둔 금액이 전부 받아들여지지는 않았습니다. 재판부는 약정 금액이 지나치게 크다고 보아 민법 제398조 제2항에 따라 상당 부분을 감액했고, 최종적으로 상대방이 의뢰인에게 2천만원을 지급하라는 판결을 선고했습니다.
청구액 전부가 인정되지 않은 점은 저희로서도 아쉬움이 남는 대목입니다. 그러나 이 사건에서 더 무겁게 본 것은, 공개해 버리면 그만이라는 태도가 통하지 않는다는 사실을 판결로 확인받았다는 점이었습니다. 합의 위반에 값이 매겨진 셈입니다.
"이미 퍼진 말을 되돌릴 수는 없어도, 약속을 깬 대가는 남길 수 있습니다. 판결의 의미는 금액보다 그 확인에 있었습니다."
— 뉴로이어 법률사무소
이번 사건을 진행하며 다시 확인한 점이 있습니다. 비밀유지 합의를 맺을 때 외부에 말하지 않는다는 한 줄만 넣어 두는 것으로는 부족할 수 있다는 것입니다. 무엇을 공개해서는 안 되는지, 어떤 행위를 위반으로 볼 것인지, 어겼을 때 어떤 책임을 지는지까지 구체적으로 적어 두어야 실제로 문제가 생겼을 때 꺼내 쓸 수 있습니다.
저희는 비밀유지 합의 위반과 약정금·위약금 청구, 여기에 명예훼손과 온라인상 허위사실 유포가 함께 얽힌 사건을 여럿 다루고 있습니다. 상대방이 합의를 어기고 내용을 공개했거나 이미 작성해 둔 합의서로 책임을 물을 수 있을지 고민 중이시라면, 가지고 계신 문자와 녹취, 합의서부터 검토받아 보시기 바랍니다.
비밀유지 합의 위반, 책임을 묻기 전 점검 포인트
비공개 범위와 위반 시 책임이 문자·합의서 등 기록으로 남아 있는가
합의에 이르는 과정(녹취·대화 내역)을 확보해 두었는가
어떤 행위가 위반에 해당하는지 합의서에 구체적으로 적혀 있는가
위반 이후 공개된 게시물·영상과 반응을 시간순으로 갈무리했는가
약정 금액이 당시 사정에 비추어 납득할 만한 수준인지 검토했는가
사실과 다른 주장이 함께 있었다면 명예훼손 등 별도 대응도 검토했는가
관련 개념·법령 정리
위약벌
의무를 지키게 하려는 목적으로 위반 시 물기로 정한 제재금입니다. 손해 전보를 목적으로 하는 손해배상액의 예정과 구별되며, 위약벌로 평가되면 손해를 개별적으로 계산해 입증하지 않아도 약정에 따른 책임을 물을 수 있다는 점이 실익입니다.
손해배상액의 예정과 감액 (민법 제398조)
위약금 약정은 손해배상액의 예정으로 추정되고, 예정액이 부당히 과다하면 법원이 적당히 감액할 수 있습니다. 이 사건에서도 배상책임은 인정됐으나 금액은 제398조 제2항에 따라 조정됐습니다.
비밀유지 약정
분쟁 내용이나 특정 사실을 외부에 알리지 않기로 하는 합의입니다. 공개 금지의 범위, 위반으로 볼 행위, 위반 시 책임을 함께 정해 두어야 실제 분쟁에서 근거로 쓸 수 있습니다.
이 사건을 담당한 변호인
합의 위반과 온라인 허위사실이 얽힌 분쟁은 계약 법리와 명예훼손 대응을 함께 설계해야 합니다. 이 사건은 대표변호사가 직접 수행했습니다.
CEO Lawyer
김수열 대표변호사
#명예훼손·모욕#인플루언서·MCN#사이버범죄
서울대학교 심리학과를 거쳐 서울대학교 법학전문대학원을 졸업했고, 법무법인 율촌을 거쳐 뉴로이어 법률사무소를 이끌고 있는 대한변호사협회 인증 형사전문변호사입니다. 온라인 활동과 평판이 걸린 분쟁을 형사 대응부터 민사 청구까지 하나의 흐름으로 수행합니다.
유명 웹툰·드라마·웹소설 작가, 100만 유튜버 고소대리
서울대 총학생회장 명예훼손 사건 대법원 파기환송 승소
방송 출연자·인플루언서 악성댓글 집단 고소 성공 수행
프로필 자세히 보기 →
FAQ비밀유지 합의 위반·위약벌 청구, 자주 묻는 질문
비밀유지 합의를 어겼을 때 어떻게 대응할 수 있나요?
합의서에 위반 시 지급 조항이 있다면 그 약정을 근거로 금전 지급을 청구할 수 있습니다. 먼저 비공개 범위와 책임 조항이 담긴 문자·합의서, 합의 과정을 담은 녹취를 확보하고, 위반 이후 공개된 게시물과 반응을 시간순으로 갈무리해 두시는 것이 출발점입니다.
위약벌과 손해배상액의 예정은 무엇이 다른가요?
손해배상액의 예정은 발생할 손해를 미리 정해 두는 성격이고, 위약벌은 의무를 지키게 하려는 제재금 성격입니다. 위약벌로 평가되면 손해를 개별적으로 계산해 입증하지 않아도 약정에 따른 책임을 물을 수 있어, 어느 쪽으로 판단되는지가 소송의 무게를 좌우합니다.
손해를 금액으로 입증하지 못해도 청구할 수 있나요?
신뢰 훼손처럼 환산이 어려운 피해는 개별 산정이 쉽지 않습니다. 이 사건에서는 해당 약정이 의무 이행 확보를 위한 위약벌의 성격을 갖는다는 점을 논증해, 손해를 하나하나 계산해야만 책임을 물을 수 있는 것은 아니라는 논리를 전개했습니다.
합의서에 적어 둔 금액이 그대로 인정되나요?
그렇지 않을 수 있습니다. 손해배상액의 예정으로 판단되는 약정은 예정액이 부당히 과다하면 민법 제398조 제2항에 따라 법원이 감액할 수 있습니다. 이 사건에서도 배상책임은 인정됐지만 금액은 상당 부분 조정되어 2천만원으로 정해졌습니다.
위약금은 얼마로 정해 두는 것이 좋나요?
금액을 크게 적어 둔다고 그대로 인정되지는 않습니다. 감액될 여지를 줄이려면 합의 당시의 사정과 예상되는 피해에 비추어 납득할 만한 수준으로 정하고, 공개 금지의 범위와 위반으로 볼 행위까지 구체적으로 함께 적어 두는 편이 낫습니다.
합의 내용을 공개하면서 허위사실까지 말했다면요?
합의 위반에 따른 금전 청구와는 별개로 명예훼손 등 책임을 따로 검토할 수 있습니다. 이 사건에서도 상대방이 공개에 그치지 않고 사실과 다른 주장을 이어 갔다는 점, 그로 인해 의뢰인의 활동에 대한 신뢰가 흔들렸다는 점을 함께 소명했습니다.
함께 보면 좋은 글
기사삭제 합의 위약벌 청구, 위약벌 수천만원 지급 판결 원고 대리 사례
언론기사 허위사실 보도 손해배상, 일부 승소 원고 대리 성공사례
전여자친구 허위사실유포 명예훼손·스토킹·통매음, 손해배상 700만원 성공사례
합의서를 썼다면, 책임을 물을 근거도 남아 있습니다
상대방이 비밀유지 합의를 어기고 내용을 공개했다면 문자·녹취·합의서를 준비해 문의해 주세요.약정의 성격과 청구 가능성을 함께 검토해 드립니다.
카카오톡 상담
070-8098-0421
홈페이지 상담 신청
인용 법령: 민법 제398조(배상액의 예정) 제2항·제4항 (국가법령정보센터, 작성일 기준)
뉴로이어 법률사무소 · 서울 서초구 강남대로 525 세영제이타워 11층(06536) · 사업자등록번호 588-14-01388 · [email protected]
본 성공사례는 뉴로이어 법률사무소가 실제 수행한 사건을 바탕으로 작성됐으며, 의뢰인 보호를 위해 일부 사실관계를 조정했습니다. 개별 사건의 결과는 구체적 사정에 따라 달라질 수 있어, 본 글이 유사 사건에서 동일한 결과를 약속하는 것은 아닙니다.
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "비밀유지 합의를 깨고 영상으로 공개한 상대방, 2천만원 배상책임 인정 판결을 받아낸 성공사례",
"description": "외부에 알리지 않기로 한 비밀유지 합의를 깨고 상대방이 자신의 영상으로 내용을 공개하고 사실과 다른 주장까지 이어간 사건. 문자·녹취로 약정 성립을 세우고 위약벌의 성격을 논증해 손해액 개별 산정 없이 2천만원 배상책임을 인정받은 뉴로이어 위약벌 청구 원고 일부승소 성공사례입니다.",
"inLanguage": "ko",
"datePublished": "2026-08-12",
"dateModified": "2026-08-12",
"author": {
"@type": "Person",
"name": "김수열",
"jobTitle": "대표변호사",
"url": "https://newlawyer.co.kr/page/21_view?wr_id=1",
"image": "https://newlawyer.co.kr/data/file/member/thumb-238321632_UzWE7X3O_a622b2fa6778b002d58c2ddc7bdddb15cb53f084_460x460.jpg",
"knowsAbout": [
"명예훼손·모욕",
"비밀유지약정",
"위약벌 청구",
"인플루언서·MCN",
"사이버범죄"
],
"alumniOf": {
"@type": "CollegeOrUniversity",
"name": "서울대학교 법학전문대학원"
},
"worksFor": {
"@type": "LegalService",
"name": "뉴로이어 법률사무소",
"url": "https://www.newlawyer.co.kr"
}
},
"publisher": {
"@type": "LegalService",
"name": "뉴로이어 법률사무소",
"url": "https://www.newlawyer.co.kr",
"address": {
"@type": "PostalAddress",
"streetAddress": "강남대로 525 세영제이타워 11층",
"addressLocality": "서초구",
"addressRegion": "서울",
"postalCode": "06536",
"addressCountry": "KR"
},
"telephone": "+82-70-8098-0421"
},
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://www.newlawyer.co.kr/31/398"
},
"about": [
"비밀유지 합의 위반",
"위약벌 청구",
"위약벌 약정 효력",
"손해배상 예정 감액",
"민법 제398조",
"비밀유지약정"
]
}
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "홈",
"item": "https://www.newlawyer.co.kr"
},
{
"@type": "ListItem",
"position": 2,
"name": "성공사례",
"item": "https://www.newlawyer.co.kr/31"
},
{
"@type": "ListItem",
"position": 3,
"name": "명예훼손 · 모욕",
"item": "https://www.newlawyer.co.kr/31?sca=%EB%AA%85%EC%98%88%ED%9B%BC%EC%86%90+%C2%B7+%EB%AA%A8%EC%9A%95"
},
{
"@type": "ListItem",
"position": 4,
"name": "비밀유지 합의 위반 위약벌 청구",
"item": "https://www.newlawyer.co.kr/31/398"
}
]
}
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "비밀유지 합의를 어겼을 때 어떻게 대응할 수 있나요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "합의서에 위반 시 지급 조항이 있다면 그 약정을 근거로 금전 지급을 청구할 수 있습니다. 먼저 비공개 범위와 책임 조항이 담긴 문자·합의서, 합의 과정을 담은 녹취를 확보하고, 위반 이후 공개된 게시물과 반응을 시간순으로 갈무리해 두시는 것이 출발점입니다."
}
},
{
"@type": "Question",
"name": "위약벌과 손해배상액의 예정은 무엇이 다른가요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "손해배상액의 예정은 발생할 손해를 미리 정해 두는 성격이고, 위약벌은 의무를 지키게 하려는 제재금 성격입니다. 위약벌로 평가되면 손해를 개별적으로 계산해 입증하지 않아도 약정에 따른 책임을 물을 수 있어, 어느 쪽으로 판단되는지가 소송의 무게를 좌우합니다."
}
},
{
"@type": "Question",
"name": "손해를 금액으로 입증하지 못해도 청구할 수 있나요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "신뢰 훼손처럼 환산이 어려운 피해는 개별 산정이 쉽지 않습니다. 이 사건에서는 해당 약정이 의무 이행 확보를 위한 위약벌의 성격을 갖는다는 점을 논증해, 손해를 하나하나 계산해야만 책임을 물을 수 있는 것은 아니라는 논리를 전개했습니다."
}
},
{
"@type": "Question",
"name": "합의서에 적어 둔 금액이 그대로 인정되나요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "그렇지 않을 수 있습니다. 손해배상액의 예정으로 판단되는 약정은 예정액이 부당히 과다하면 민법 제398조 제2항에 따라 법원이 감액할 수 있습니다. 이 사건에서도 배상책임은 인정됐지만 금액은 상당 부분 조정되어 2천만원으로 정해졌습니다."
}
},
{
"@type": "Question",
"name": "위약금은 얼마로 정해 두는 것이 좋나요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "금액을 크게 적어 둔다고 그대로 인정되지는 않습니다. 감액될 여지를 줄이려면 합의 당시의 사정과 예상되는 피해에 비추어 납득할 만한 수준으로 정하고, 공개 금지의 범위와 위반으로 볼 행위까지 구체적으로 함께 적어 두는 편이 낫습니다."
}
},
{
"@type": "Question",
"name": "합의 내용을 공개하면서 허위사실까지 말했다면요?",
"acceptedAnswer": {
"@type": "Answer",
"text": "합의 위반에 따른 금전 청구와는 별개로 명예훼손 등 책임을 따로 검토할 수 있습니다. 이 사건에서도 상대방이 공개에 그치지 않고 사실과 다른 주장을 이어 갔다는 점, 그로 인해 의뢰인의 활동에 대한 신뢰가 흔들렸다는 점을 함께 소명했습니다."
}
}
]
}
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "비밀유지 합의 위반 시 위약벌 청구 절차",
"description": "상대방이 비밀유지 합의를 어기고 내용을 공개했을 때 약정에 따른 책임을 묻는 진행 순서입니다.",
"step": [
{
"@type": "HowToStep",
"name": "문자·녹취로 약정 성립 확정",
"text": "비공개 범위와 위반 시 책임 조항이 담긴 기록을 확보해 약속의 존재를 세웁니다."
},
{
"@type": "HowToStep",
"name": "체결 경위 재구성",
"text": "양측이 각자의 필요로 동의했다는 흐름을 정리해 강요 합의라는 반론을 좁힙니다."
},
{
"@type": "HowToStep",
"name": "위약벌 성격 논증",
"text": "해당 약정이 의무 이행 확보를 위한 위약벌임을 판례 검토와 함께 주장합니다."
},
{
"@type": "HowToStep",
"name": "손해 개별 산정 불요 논리 전개",
"text": "손해를 일일이 계산하지 않아도 약정에 따른 책임을 물을 수 있다는 논리를 폅니다."
},
{
"@type": "HowToStep",
"name": "위반 이후 파장 입증",
"text": "공개 게시물과 반응, 그간의 활동 자료를 시간순으로 정리해 신뢰 훼손을 소명합니다."
}
]
}
:root {
--nl-navy: #1f4e79;
--nl-navy-2: #2e5a8a;
--nl-navy-3: #0f2e4d;
--nl-navy-soft: #5b7ea1;
--nl-ink: #222222;
--nl-soft: #444444;
--nl-mute: #767676;
--nl-line: #e5e7eb;
--nl-line-soft: #eef0f3;
--nl-bg-soft: #f5f7fa;
--nl-bg-card: #fafbfc;
--nl-accent: #c0392b;
--nl-bg: #ffffff;
}
.nl-wrap {
font-family: "Pretendard", "Pretendard Variable", -apple-system, BlinkMacSystemFont, "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", sans-serif;
color: var(--nl-ink);
line-height: 1.85;
font-size: clamp(15px, 1.05vw + 12px, 17px);
background: var(--nl-bg);
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
word-break: keep-all;
overflow-wrap: anywhere;
max-width: 880px;
margin: 0 auto;
padding: clamp(20px, 4vw, 48px) clamp(16px, 3vw, 32px);
position: relative;
font-feature-settings: "ss01", "ss02";
letter-spacing: -0.005em;
}
.nl-wrap * { box-sizing: border-box; }
.nl-wrap a { color: var(--nl-navy); text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1px; }
.nl-wrap a:hover { color: var(--nl-navy-3); }
.nl-crumb {
font-size: 13px;
color: var(--nl-mute);
letter-spacing: 0.01em;
margin-bottom: 24px;
padding-bottom: 14px;
border-bottom: 1px solid var(--nl-line);
}
.nl-crumb ol { list-style: none; padding: 0; margin: 0; display: flex; flex-wrap: wrap; gap: 6px 10px; }
.nl-crumb li + li::before { content: "›"; margin-right: 10px; color: var(--nl-navy-soft); }
.nl-crumb a { color: var(--nl-mute); text-decoration: none; }
.nl-crumb a:hover { color: var(--nl-navy); }
.nl-tag {
display: inline-flex;
align-items: center;
gap: 8px;
font-size: 12px;
font-weight: 600;
letter-spacing: 0.12em;
color: #ffffff;
background: var(--nl-navy);
padding: 7px 16px;
border-radius: 2px;
}
.nl-tag::before {
content: "";
width: 6px; height: 6px;
border-radius: 50%;
background: #ffffff;
}
.nl-h1 {
font-weight: 800;
font-size: clamp(24px, 3.2vw + 12px, 38px);
line-height: 1.35;
color: var(--nl-navy-3);
margin: 16px 0 14px;
letter-spacing: -0.025em;
}
.nl-h1 .nl-h1-accent { color: var(--nl-navy); }
.nl-sub {
font-size: clamp(14px, 0.6vw + 12px, 16px);
color: var(--nl-soft);
margin: 0 0 28px;
line-height: 1.75;
font-weight: 400;
}
.nl-meta {
display: flex;
flex-wrap: wrap;
gap: 14px;
font-size: 13px;
color: var(--nl-mute);
padding: 12px 0;
border-top: 1px solid var(--nl-line);
border-bottom: 1px solid var(--nl-line);
margin-bottom: 36px;
}
.nl-meta span { display: inline-flex; align-items: center; gap: 6px; }
.nl-meta strong { color: var(--nl-navy); font-weight: 600; }
.nl-author {
display: grid;
grid-template-columns: auto 1fr;
gap: 18px;
align-items: center;
background: var(--nl-bg-soft);
border-left: 4px solid var(--nl-navy);
padding: 22px 24px;
margin: 0 0 36px;
border-radius: 2px;
}
.nl-author-badge {
width: 60px; height: 60px;
border-radius: 50%;
background: var(--nl-navy);
color: #fff;
display: flex; align-items: center; justify-content: center;
font-weight: 800;
font-size: 20px;
letter-spacing: 0.02em;
}
.nl-author-name { font-weight: 700; font-size: 16px; color: var(--nl-navy-3); margin: 0 0 4px; letter-spacing: -0.01em; }
.nl-author-role { font-size: 13px; color: var(--nl-soft); line-height: 1.65; margin: 0; }
.nl-author-role b { color: var(--nl-navy); font-weight: 600; }
.nl-summary {
background: var(--nl-bg-card);
border: 1px solid var(--nl-line);
border-radius: 4px;
padding: 28px 28px 24px;
margin: 0 0 40px;
position: relative;
}
.nl-summary::before {
content: "한눈에 보기";
position: absolute;
top: -12px; left: 24px;
background: var(--nl-navy);
color: #fff;
font-size: 11px;
letter-spacing: 0.16em;
font-weight: 600;
padding: 5px 14px;
border-radius: 2px;
}
.nl-summary dl {
display: grid;
grid-template-columns: 100px 1fr;
gap: 12px 20px;
margin: 4px 0 0;
font-size: 14.5px;
}
.nl-summary dt {
color: var(--nl-mute);
font-weight: 500;
border-right: 1px solid var(--nl-line);
padding-right: 20px;
line-height: 1.7;
}
.nl-summary dd { margin: 0; color: var(--nl-ink); line-height: 1.7; }
.nl-summary dd b { color: var(--nl-navy); font-weight: 700; }
.nl-summary dd .nl-win { color: var(--nl-navy); font-weight: 700; border-bottom: 2px solid var(--nl-navy); padding-bottom: 1px; }
.nl-lead {
background: var(--nl-bg-soft);
border-left: 4px solid var(--nl-navy);
padding: 22px 26px;
margin: 36px 0;
border-radius: 2px;
}
.nl-lead p { margin: 0; font-size: 16px; line-height: 1.85; color: var(--nl-ink); }
.nl-lead p + p { margin-top: 12px; }
.nl-lead strong { color: var(--nl-navy); font-weight: 700; }
.nl-h2 {
font-weight: 800;
font-size: clamp(20px, 1.5vw + 14px, 26px);
color: var(--nl-navy-3);
margin: 64px 0 22px;
padding-bottom: 14px;
border-bottom: 2px solid var(--nl-navy);
display: flex;
align-items: baseline;
gap: 14px;
letter-spacing: -0.025em;
}
.nl-h2 .nl-h2-no {
font-size: 13px;
color: var(--nl-navy-soft);
letter-spacing: 0.2em;
font-weight: 700;
}
.nl-h3 {
font-weight: 700;
font-size: clamp(17px, 0.7vw + 14px, 19px);
color: var(--nl-navy);
margin: 36px 0 14px;
padding-left: 14px;
border-left: 3px solid var(--nl-navy);
letter-spacing: -0.015em;
}
.nl-wrap p { margin: 14px 0; }
.nl-defn {
background: var(--nl-bg-card);
border: 1px solid var(--nl-line);
border-top: 3px solid var(--nl-navy);
padding: 18px 22px;
margin: 24px 0;
border-radius: 2px;
font-size: 15px;
}
.nl-defn dt {
font-size: 12px;
letter-spacing: 0.14em;
color: var(--nl-navy);
font-weight: 700;
margin-bottom: 8px;
}
.nl-defn dd { margin: 0; color: var(--nl-ink); line-height: 1.8; }
.nl-defn dd b { color: var(--nl-navy); font-weight: 700; }
.nl-statute {
background: var(--nl-bg-soft);
border: 1px solid var(--nl-line);
border-left: 4px solid var(--nl-navy);
padding: 22px 26px;
margin: 28px 0;
border-radius: 2px;
position: relative;
}
.nl-statute::before {
content: "법령";
position: absolute;
top: 16px; right: 20px;
font-size: 10px;
letter-spacing: 0.18em;
font-weight: 700;
color: #fff;
background: var(--nl-navy);
padding: 3px 9px;
border-radius: 2px;
}
.nl-statute .nl-statute-h {
font-weight: 800;
font-size: 16px;
color: var(--nl-navy-3);
margin: 0 0 12px;
padding-right: 60px;
letter-spacing: -0.015em;
}
.nl-statute ol { padding-left: 18px; margin: 8px 0 0; }
.nl-statute li { margin-bottom: 6px; line-height: 1.85; }
.nl-statute .nl-cite { display: block; margin-top: 14px; font-size: 12px; color: var(--nl-mute); }
.nl-statute .nl-cite a { color: var(--nl-navy); }
.nl-issues {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 14px;
margin: 28px 0;
}
.nl-issue {
background: #ffffff;
border: 1px solid var(--nl-line);
border-radius: 2px;
padding: 18px 20px;
position: relative;
overflow: hidden;
transition: border-color 0.2s;
}
.nl-issue:hover { border-color: var(--nl-navy); }
.nl-issue::before {
content: "";
position: absolute;
top: 0; left: 0;
width: 4px; height: 100%;
background: var(--nl-navy);
}
.nl-issue h4 {
font-size: 15px;
color: var(--nl-navy-3);
margin: 0 0 8px;
font-weight: 700;
letter-spacing: -0.015em;
}
.nl-issue p {
font-size: 13.5px;
color: var(--nl-soft);
margin: 0;
line-height: 1.7;
}
.nl-steps {
counter-reset: nlstep;
display: grid;
gap: 12px;
margin: 28px 0;
}
.nl-step {
display: grid;
grid-template-columns: 64px 1fr;
gap: 18px;
background: #ffffff;
border: 1px solid var(--nl-line);
border-left: 4px solid var(--nl-navy);
border-radius: 2px;
padding: 18px 22px;
align-items: start;
}
.nl-step::before {
counter-increment: nlstep;
content: "STEP " counter(nlstep);
font-size: 11px;
font-weight: 700;
color: var(--nl-navy);
background: var(--nl-bg-soft);
padding: 6px 10px;
border-radius: 2px;
letter-spacing: 0.08em;
text-align: center;
line-height: 1.4;
align-self: start;
white-space: nowrap;
}
.nl-step h4 {
font-size: 16px;
color: var(--nl-navy-3);
margin: 2px 0 6px;
font-weight: 700;
letter-spacing: -0.015em;
}
.nl-step p {
font-size: 14.5px;
color: var(--nl-soft);
margin: 0;
line-height: 1.75;
}
.nl-table {
width: 100%;
border-collapse: collapse;
margin: 28px 0;
font-size: 14px;
background: #fff;
border: 1px solid var(--nl-line);
border-radius: 2px;
overflow: hidden;
}
.nl-table th, .nl-table td {
padding: 14px 16px;
border-bottom: 1px solid var(--nl-line);
border-right: 1px solid var(--nl-line);
vertical-align: top;
line-height: 1.7;
}
.nl-table th:last-child, .nl-table td:last-child { border-right: none; }
.nl-table tr:last-child td { border-bottom: none; }
.nl-table thead th {
background: var(--nl-navy);
color: #fff;
font-weight: 600;
letter-spacing: 0.02em;
text-align: left;
font-size: 13.5px;
}
.nl-table tbody th {
background: var(--nl-bg-soft);
color: var(--nl-navy-3);
font-weight: 600;
text-align: left;
width: 28%;
}
.nl-table .nl-td-good { color: var(--nl-navy); font-weight: 700; }
.nl-table .nl-td-bad { color: var(--nl-accent); font-weight: 700; }
.nl-checklist {
background: var(--nl-bg-card);
border: 1px solid var(--nl-line);
border-radius: 2px;
padding: 24px 26px;
margin: 28px 0;
}
.nl-checklist h4 {
font-size: 16px;
color: var(--nl-navy-3);
margin: 0 0 14px;
padding-bottom: 12px;
border-bottom: 1px solid var(--nl-line);
font-weight: 700;
letter-spacing: -0.015em;
}
.nl-checklist ul { list-style: none; padding: 0; margin: 0; }
.nl-checklist li {
position: relative;
padding-left: 30px;
margin-bottom: 10px;
font-size: 14.5px;
color: var(--nl-ink);
line-height: 1.75;
}
.nl-checklist li::before {
content: "";
position: absolute;
left: 0; top: 5px;
width: 18px; height: 18px;
border: 2px solid var(--nl-navy);
border-radius: 2px;
background: #fff;
}
.nl-checklist li::after {
content: "";
position: absolute;
left: 4px; top: 8px;
width: 10px; height: 5px;
border-left: 2px solid var(--nl-navy);
border-bottom: 2px solid var(--nl-navy);
transform: rotate(-45deg);
}
.nl-caution {
background: var(--nl-bg-soft);
border-left: 4px solid var(--nl-navy);
padding: 18px 22px;
margin: 28px 0;
border-radius: 2px;
}
.nl-caution h4 {
font-size: 15px;
color: var(--nl-navy-3);
margin: 0 0 8px;
font-weight: 700;
letter-spacing: -0.015em;
}
.nl-caution h4::before { content: "⚠ "; color: var(--nl-navy); }
.nl-caution p { margin: 0; font-size: 14.5px; color: var(--nl-soft); line-height: 1.75; }
.nl-law {
background: var(--nl-bg-card);
border: 1px solid var(--nl-line);
border-radius: 2px;
padding: 24px 26px;
margin: 28px 0;
}
.nl-law h4 {
font-size: 15px;
color: var(--nl-navy-3);
margin: 0 0 12px;
padding-bottom: 12px;
border-bottom: 1px solid var(--nl-line);
font-weight: 700;
letter-spacing: -0.015em;
}
.nl-law dl { margin: 0; font-size: 14px; }
.nl-law dt { color: var(--nl-navy); font-weight: 700; margin-top: 12px; }
.nl-law dt:first-child { margin-top: 0; }
.nl-law dd { margin: 4px 0 0; color: var(--nl-soft); line-height: 1.75; }
.nl-quote {
border-left: 3px solid var(--nl-navy);
padding: 8px 22px;
margin: 28px 0;
color: var(--nl-soft);
font-size: 16px;
line-height: 1.85;
}
.nl-quote p { font-style: normal; }
.nl-quote cite { display: block; font-style: normal; font-size: 13px; color: var(--nl-mute); margin-top: 8px; }
.nl-faq {
margin: 40px 0;
border-top: 2px solid var(--nl-navy);
}
.nl-faq h2 { margin-top: 24px; }
.nl-faq details {
border-bottom: 1px solid var(--nl-line);
padding: 20px 4px;
}
.nl-faq summary {
font-size: 16px;
font-weight: 700;
color: var(--nl-navy-3);
cursor: pointer;
list-style: none;
display: flex;
align-items: flex-start;
gap: 12px;
line-height: 1.55;
padding-right: 30px;
position: relative;
letter-spacing: -0.015em;
}
.nl-faq summary::-webkit-details-marker { display: none; }
.nl-faq summary::before {
content: "Q";
flex-shrink: 0;
width: 26px; height: 26px;
background: var(--nl-navy);
color: #fff;
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
font-size: 13px;
font-weight: 700;
}
.nl-faq summary::after {
content: "+";
position: absolute;
right: 0; top: 0;
font-size: 22px;
color: var(--nl-navy);
font-weight: 300;
transition: transform 0.25s;
line-height: 1;
}
.nl-faq details[open] summary::after { content: "−"; }
.nl-faq .nl-a {
margin-top: 14px;
padding-left: 38px;
font-size: 14.5px;
color: var(--nl-soft);
line-height: 1.85;
}
.nl-faq .nl-a::before {
content: "A. ";
font-weight: 800;
color: var(--nl-navy);
}
.nl-related {
background: var(--nl-bg-soft);
border: 1px solid var(--nl-line);
border-radius: 2px;
padding: 24px 26px;
margin: 32px 0;
}
.nl-related h4 {
font-size: 14px;
color: var(--nl-navy-3);
letter-spacing: 0.04em;
margin: 0 0 14px;
padding-bottom: 12px;
border-bottom: 1px solid var(--nl-line);
font-weight: 700;
}
.nl-related ul { list-style: none; padding: 0; margin: 0; }
.nl-related li {
font-size: 14px;
margin: 8px 0;
padding-left: 14px;
position: relative;
}
.nl-related li::before { content: "›"; position: absolute; left: 0; color: var(--nl-navy); font-weight: 700; }
.nl-related a { color: var(--nl-navy); text-decoration: none; }
.nl-related a:hover { text-decoration: underline; }
.nl-cta {
margin: 48px 0 24px;
background: var(--nl-navy);
color: #fff;
border-radius: 2px;
padding: 38px 32px;
text-align: center;
position: relative;
overflow: hidden;
}
.nl-cta::before {
content: "";
position: absolute;
top: 0; left: 0; right: 0;
height: 3px;
background: linear-gradient(90deg, var(--nl-navy-soft) 0%, #ffffff 100%);
}
.nl-cta-h {
font-size: clamp(20px, 1.5vw + 12px, 26px);
font-weight: 800;
margin: 0 0 8px;
position: relative;
letter-spacing: -0.025em;
}
.nl-cta-sub {
font-size: 14.5px;
color: #c5d1e0;
margin: 0 0 24px;
line-height: 1.7;
position: relative;
}
.nl-cta-buttons {
display: flex;
flex-wrap: wrap;
gap: 10px;
justify-content: center;
position: relative;
}
.nl-cta-buttons a {
display: inline-flex;
align-items: center;
gap: 8px;
font-size: 14.5px;
font-weight: 600;
padding: 14px 26px;
border-radius: 2px;
text-decoration: none;
transition: transform 0.2s, box-shadow 0.2s;
letter-spacing: 0.01em;
}
.nl-cta-buttons a:hover { transform: translateY(-2px); box-shadow: 0 6px 16px rgba(0,0,0,0.25); }
.nl-cta-kakao { background: #fee500; color: #181600; }
.nl-cta-tel { background: #ffffff; color: var(--nl-navy-3); }
.nl-cta-web { background: #ffffff; color: var(--nl-navy); border: 1.5px solid var(--nl-navy); font-weight: 700; }
.nl-cta-secret {
display: inline-flex;
align-items: center;
gap: 6px;
margin-top: 18px;
font-size: 12px;
color: #c5d1e0;
letter-spacing: 0.08em;
position: relative;
}
.nl-cta-secret::before { content: "????"; }
.nl-footer-cite {
margin-top: 40px;
padding-top: 24px;
border-top: 1px solid var(--nl-line);
font-size: 12px;
color: var(--nl-mute);
line-height: 1.8;
}
.nl-footer-cite h4 {
font-size: 12px;
letter-spacing: 0.08em;
color: var(--nl-navy);
margin: 0 0 10px;
font-weight: 700;
}
.nl-footer-cite ul { padding-left: 18px; margin: 0; }
.nl-footer-cite li { margin: 4px 0; }
.nl-footer-cite a { color: var(--nl-navy); }
.nl-disclaimer {
margin-top: 28px;
font-size: 12px;
color: var(--nl-mute);
line-height: 1.75;
padding: 14px 16px;
background: var(--nl-bg-soft);
border: 1px solid var(--nl-line);
border-radius: 2px;
}
@media (max-width: 640px) {
.nl-wrap { padding: 16px 14px; }
.nl-issues { grid-template-columns: 1fr; }
.nl-summary dl { grid-template-columns: 1fr; gap: 4px 0; }
.nl-summary dt { border-right: none; border-bottom: 1px solid var(--nl-line); padding: 0 0 4px; margin-bottom: 4px; }
.nl-author { grid-template-columns: 1fr; text-align: center; }
.nl-author-badge { margin: 0 auto; }
.nl-table thead { display: none; }
.nl-table tr { display: block; border-bottom: 2px solid var(--nl-navy); padding: 8px 0; }
.nl-table th, .nl-table td { display: block; border-right: none; padding: 8px 14px; }
.nl-table tbody th { width: 100%; }
.nl-step { grid-template-columns: 1fr; gap: 8px; }
.nl-step::before { justify-self: start; }
.nl-cta { padding: 28px 20px; }
.nl-cta-buttons a { width: 100%; justify-content: center; }
}
@media (max-width: 380px) {
.nl-wrap { padding: 14px 12px; font-size: 14.5px; }
.nl-h2 { flex-direction: column; gap: 4px; align-items: flex-start; }
.nl-h2 .nl-h2-no { font-size: 12px; }
.nl-statute, .nl-defn, .nl-checklist, .nl-related, .nl-law { padding: 16px 18px; }
}
/* ==========================================================================
[ADD-ON] 담당 변호인 카드 (nl-team) — 기존 스타일 수정 없이 추가된 블록
사용처: 성공사례 하단, CTA 상단. 1~2인 카드 배치.
========================================================================== */
.nl-team {
margin: 40px 0 36px;
}
.nl-team-h {
font-size: 15px;
font-weight: 700;
color: var(--nl-navy);
letter-spacing: -0.01em;
margin: 0 0 4px;
padding-left: 12px;
border-left: 3px solid var(--nl-navy);
line-height: 1.4;
}
.nl-team-sub {
font-size: 13.5px;
color: var(--nl-mute);
margin: 0 0 18px;
padding-left: 15px;
line-height: 1.7;
}
.nl-team-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 16px;
}
.nl-card {
display: grid;
grid-template-columns: 84px minmax(0, 1fr);
gap: 16px;
background: var(--nl-bg-card);
border: 1px solid var(--nl-line);
border-top: 3px solid var(--nl-navy);
border-radius: 2px;
padding: 20px 18px;
align-items: start;
}
.nl-card-photo {
width: 84px;
height: 84px;
border-radius: 2px;
overflow: hidden;
background: var(--nl-bg-soft);
border: 1px solid var(--nl-line);
}
.nl-card-photo img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
}
.nl-card-role {
display: inline-block;
font-size: 10.5px;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--nl-navy-soft);
margin: 0 0 4px;
line-height: 1.3;
}
.nl-card-name {
font-size: 16.5px;
font-weight: 800;
color: var(--nl-ink);
letter-spacing: -0.02em;
margin: 0 0 8px;
line-height: 1.35;
}
.nl-card-name a {
color: var(--nl-ink);
text-decoration: none;
}
.nl-card-name a:hover {
color: var(--nl-navy);
text-decoration: underline;
text-underline-offset: 3px;
}
.nl-card-tags {
display: flex;
flex-wrap: wrap;
gap: 5px;
margin: 0 0 10px;
padding: 0;
list-style: none;
}
.nl-card-tags li {
font-size: 11.5px;
color: var(--nl-navy);
background: rgba(31, 78, 121, 0.07);
border-radius: 2px;
padding: 2px 7px;
line-height: 1.6;
letter-spacing: -0.01em;
}
.nl-card-desc {
font-size: 13.5px;
color: var(--nl-soft);
line-height: 1.75;
margin: 0 0 10px;
letter-spacing: -0.01em;
}
.nl-card-list {
margin: 0;
padding: 0;
list-style: none;
border-top: 1px solid var(--nl-line-soft);
padding-top: 9px;
}
.nl-card-list li {
font-size: 12.5px;
color: var(--nl-mute);
line-height: 1.7;
padding-left: 10px;
position: relative;
letter-spacing: -0.01em;
}
.nl-card-list li::before {
content: "";
position: absolute;
left: 0;
top: 9px;
width: 3px;
height: 3px;
border-radius: 50%;
background: var(--nl-navy-soft);
}
.nl-card-list li b {
color: var(--nl-soft);
font-weight: 700;
}
.nl-card-link {
display: inline-block;
font-size: 12.5px;
color: var(--nl-navy);
margin-top: 10px;
text-decoration: none;
border-bottom: 1px solid var(--nl-line);
padding-bottom: 1px;
}
.nl-card-link:hover {
border-bottom-color: var(--nl-navy);
}
@media (max-width: 760px) {
.nl-team-grid { grid-template-columns: 1fr; gap: 14px; }
}
@media (max-width: 480px) {
.nl-card {
grid-template-columns: 64px minmax(0, 1fr);
gap: 13px;
padding: 17px 15px;
}
.nl-card-photo { width: 64px; height: 64px; }
.nl-card-name { font-size: 15.5px; }
.nl-card-desc { font-size: 13px; }
}
/* [ADD-ON] 1인 카드일 때 전체 폭 사용 */
.nl-team-grid:has(> .nl-card:only-child) {
grid-template-columns: minmax(0, 1fr);
}
.nl-team-grid > .nl-card:only-child {
grid-template-columns: 110px minmax(0, 1fr);
gap: 20px;
padding: 22px 20px;
}
.nl-team-grid > .nl-card:only-child .nl-card-photo {
width: 110px;
height: 110px;
}
@media (max-width: 480px) {
.nl-team-grid > .nl-card:only-child {
grid-template-columns: 64px minmax(0, 1fr);
gap: 13px;
padding: 17px 15px;
}
.nl-team-grid > .nl-card:only-child .nl-card-photo {
width: 64px;
height: 64px;
}
}