@charset "utf-8";
/* ----------------------------------------------------------------------------------------------
 *                 ORANGE-PMI PLATFORM  Version 2.0.0 - Last modified 2026-10-21
 *           Modular Web Architecture · Powered by Orangecommunication · www.oranc.net
 * ----------------------------------------------------------------------------------------------
 * 폼 공용 컴포넌트 — 입력칸 · 선택 · 체크 · 필수표시 · 도움말.
 *
 * form.css (public_html/<site>/asset/css) — 이 사이트의 base.php 가 `site::css/form.css` 로 건다.
 *   앞에 `variables.css` 가 먼저 와야 한다 — 색·치수는 거기 토큰을 읽는다.
 *   **이 사이트 소유**다 — 같은 파일이 사이트마다 한 벌씩 있다 (2026-09-21 사용자 결정:
 *   업그레이드가 덮어쓰는 `asset/core/` 에 두지 않는다). 모양을 바꿀 때는 이 파일을 직접 고친다.
 *   ⚠ **다른 사이트에도 같은 파일이 있다 — 한쪽만 고치면 갈라진다.** 공통 규칙을 손볼 때는
 *     `public_html/<site>/asset/css/` 아래 같은 이름을 **전부** 본다. 2026-09-21 이전에 이 복제로
 *     main 이 gwizard 의 수정을 3일간 못 받은 적이 있다. → global-template "공통 UI class"
 *
 *   ── 담는 것 / 담지 않는 것 ──────────────────────────────────────────────────
 *     담는다   c-input · c-select · c-textarea · c-check · c-req · c-help · c-notice · c-search (+ 잠김 상태 · c-seg · c-switch · c-colorpick · 첨부칸)
 *     ✗ 버튼   c-btn 은 ui.css — 폼 밖(목록 · 표 안)에서도 쓰므로 폼에 매이지 않는다
 *     ✗ 배치   버튼줄 l-actions · 검색줄 l-search 는 layout.css
 *     ✗ 표     라벨 칸이 딸린 입력형 표는 table.css (c-table)
 *
 *   ★ 이름을 `c-form__input` 으로 짓지 않는다 — Input·Select 는 폼 **밖에서도** 쓰므로 폼의
 *     내부 요소가 아니다(지침 4장). 독립 컴포넌트로 둔다.
 *
 *   ※ 값의 출처는 gwizard 의 레거시 관리자 CSS 다 — 새로 그린 디자인이 아니다.
 *     [구 .input_form · .textarea_form · 전역 select · .ghelp · .inlineblock]
 *
 *   ── 2026-09-29 KRDS(정부 디자인 시스템) ──────────────────────────────────────
 *   입력칸·select·체크·라디오의 **꼴**을 KRDS(krds-uiux 1.1.0 component.css)에서 옮겼다 — 사용자 지시. 값은 variables.css.
 *     입력칸       높이·여백·모서리는 토큰(48 · 16 · 6) · 포커스 = 주조색 테두리 1 + outline 1(KRDS 2px) · 잠김 = 회색 바탕
 *     select       브라우저 화살표 ✗ → KRDS ico_angle.svg(asset/img/icon) · 오른쪽 여백 = 좌우여백 + 8 + 아이콘 20
 *     체크·라디오   브라우저 그림 ✗ → 20px 상자(체크 4px 모서리 · 라디오 원) · 고르면 주조색 채움 + 흰 체크(ico_checkbox_checked.svg 를
 *                  mask 로) · 라디오는 안에 점 10px. 분절 선택(c-seg)의 라디오도 같은 그림
 * ---------------------------------------------------------------------------------------------- */


/*  입력 컨트롤  ==================================================================================
    ★ 높이는 `--control-height` 하나다 — **한 줄에 나란히 서는 넷**(입력칸·select·버튼·정렬 화살표)이
      같은 토큰을 읽는다. 그래서 목록 한 줄에 [이름칸][체크][∧][∨][+][M][C] 가 섞여 서도 위아래가
      맞는다(사용자 지적 2026-09-18). 화살표 규칙은 사이트 CSS 에 있지만 값은 같은 토큰이다 —
      2026-09-19 에 셋만 줄이고 화살표를 빠뜨린 사고가 그래서 이제 일어나지 않는다.
      → variables.css "치수" 절
    ★ 줄 높이는 `calc(--control-height - 2px)` — 위아래 테두리 1px 씩을 뺀 값이다. **높이에서 따라
      나오는 수**라 숫자로 적지 않는다(적어 두면 높이를 고칠 때 같이 고쳐야 하고, 그게 위 사고의 꼴이다).
    ★ input 은 line-height 만으로는 높이가 브라우저마다 갈리므로(폰트 크기에 따라 content 가 더
      커진다) height 를 **명시**한다 — box-sizing:border-box 라 테두리가 이 안에 든다.
    ★ **목록 행 안에서는 `--control-height-sm`** 이다 — 행이 좁아서다. 그 네 줄은 table.css 에
      모여 있다(여기 말고 거기서 고칠 것).
    ★ 안쪽 좌우 여백은 `--control-pad-x` 다 — **셋이 같은 값을 읽는다**(입력칸·select·textarea).
      관리자는 좁고(5px) 사용자쪽은 넓다(10px) — 사이트가 바꾸는 축이라 토큰이다.
      textarea 는 위아래도 같은 값을 쓴다(레거시가 그랬다 — 한 값으로 사방을 준다).  */
.c-input					{vertical-align:middle; height:var(--control-height); border:1px solid var(--border-color); padding:0 var(--control-pad-x); letter-spacing:0; line-height:calc(var(--control-height) - 2px); margin:1px 0; border-radius:var(--radius-input); font-size:var(--font-size-sm);}   /* 글자 15 = KRDS small 입력 (2026-09-29) */
.c-textarea					{width:100%; min-height:50px; background:#fff; padding:var(--control-pad-x); border:1px solid var(--border-color); overflow-x:hidden; overflow-y:auto; resize:none; border-radius:var(--radius-input); font-size:var(--font-size-sm);}
/*  ★ select 는 height 를 **명시**한다 — min-height 만으로는 안 줄어든다. 브라우저가 폰트·패딩으로
      정한 제 높이가 그보다 크면 그대로여서, 목록 행에서 이것만 크게 남아 튀었다(2026-09-19).
      input 과 같은 이유로 값도 같은 토큰을 읽는다(위 ★ 의 "넷").
    ★ 화살표는 KRDS 아이콘(ico_angle.svg, 20px)을 배경으로 오른쪽 끝에 놓는다 (2026-09-29) — 브라우저 기본 화살표는 OS 마다
      달라 `appearance:none` 으로 끈다. 오른쪽 안쪽 여백 = 좌우여백 + 8 + 20 이라 글자가 화살표를 안 가린다.  */
.c-select					{vertical-align:middle; min-width:80px; height:var(--control-height); line-height:calc(var(--control-height) - 2px); -webkit-appearance:none; appearance:none; background:#fff url(../img/icon/ico_angle.svg) no-repeat right var(--control-pad-x) center / 20px 20px; border:1px solid var(--border-color-select); padding:0 calc(var(--control-pad-x) + 28px) 0 var(--control-pad-x); color:var(--color-ink); border-radius:var(--radius-input); font-size:var(--font-size-sm);}
.c-input:focus,
.c-textarea:focus,
.c-select:focus				{border-color:var(--border-color-focus); outline:1px solid var(--border-color-focus); outline-offset:0;}   /* KRDS 포커스 = 주조색 2px — 테두리 1 + 바로 바깥 outline 1. outline:none ✗ (global-template 접근성) */

/*  기본값에서 벗어난 입력 — 라인(테두리)과 글자색으로 표시한다. 목록에서 대부분의 행이 기본값이라,
    눈에 걸리는 칸이 곧 "따로 걸어 둔 설정" 이다. 무엇이 기본값인지는 화면(컨트롤러)이 판정한다.
    ★ **상태(`is-`)라서** 컴포넌트가 아니다 — 같은 입력칸이 조건에 따라 띠는 모습이다(지침 2장).
    ★ `.c-select`·`.c-input` **뒤**에 와야 border-color 를 덮는다 — 명시도가 같아 순서가 우선순위다.
      그래서 유틸이 아니라 이 파일 이 자리에 둔다(utilities.css 는 더 뒤라 순서는 되지만, 상태는
      컴포넌트의 사정이므로 컴포넌트 옆에 있는 편이 읽힌다).  */
.is-changed					{border-color:var(--color-changed); color:var(--color-changed-ink); font-weight:600;}
.c-input::placeholder		{color:var(--color-placeholder);}

/*  날짜·시간 입력 — 브라우저가 제 껍데기(테두리·배경)를 따로 그려서 옆의 text 입력과 **선 색이 달라 보였다**
    (사용자 지적 2026-09-23). 껍데기를 벗겨 위 `.c-input` 의 테두리 하나만 남긴다.
    ★ 달력 아이콘은 별도 가상요소라 그대로 남는다.  */
.c-input[type="date"],
.c-input[type="datetime-local"],
.c-input[type="time"],
.c-input[type="month"]		{-webkit-appearance:none; appearance:none; background:#fff;}
/*  잠긴 입력(disabled) — KRDS 는 바탕을 회색으로 채우고 테두리·글자를 한 단계 옅게 한다 (2026-09-29).
    readonly 는 그대로 둔다 — 값은 읽어야 하므로 글자색을 낮추지 않는다. select 는 화살표도 옅은 것으로 바꾼다.  */
.c-input:disabled,
.c-textarea:disabled,
.c-select:disabled			{background-color:var(--bg-disabled); border-color:var(--border-color-disabled); color:var(--color-disabled); cursor:default;}
.c-select:disabled			{background-image:url(../img/icon/ico_angle_disabled.svg);}


/*  키워드 검색칸 — c-search  (2026-09-29 KRDS 키트 `keyword-sch` + `btn-ico-wrap`)
    ★ **사이트 것이다** — 게시판만의 부품이 아니라 **목록 화면의 부품**이라서다(사용자 판단 2026-09-30).
      자리(`l-search`·`l-toolbar > .l-search`, layout.css)가 이미 사이트 것이라 모양만 스킨에 두면 짝이 갈린다.
      2026-09-30 에 잠깐 게시판 스킨으로 내렸다가 되돌렸다. ※ 관리자(gwizard)에는 이 class 가 없다 — 그쪽은 제 꼴이다.
    <form class="c-search"> 안에 .c-input 하나와 돋보기 제출 버튼(.c-search__btn) — 버튼은 칸 **안** 오른쪽 20px 자리에 뜨고
    글자는 화면 밖 "검색"(u-blind) 뿐이다. 입력칸은 오른쪽 안쪽 여백을 20 + 24 + 20 으로 벌려 글자가 돋보기 밑으로 안 들어간다.
    폭은 400(KRDS 키트 588 은 콘텐츠 1200 기준 — 이 사이트 본문에선 과해 줄였다), 좁은 화면은 100%. 돋보기는 KRDS ico_sch.svg 를 ::before 에 mask 로 — 버튼 자체를 mask 하면
    포커스 테두리(outline)까지 잘려 나가서 가상요소에 그린다. 별도 글자 버튼 대신 이 꼴을 쓰는 것이 키트의 검색 모양이다.  */
.c-search					{position:relative; width:400px; max-width:100%;}   /* KRDS 키트 값은 588(콘텐츠 1200 기준) — 이 사이트 본문(941)에서는 60% 라 커 보여 400 으로(사용자 지적 2026-09-29) */
.c-search > .c-input		{width:100%; margin:0; padding-right:56px;}   /* 12 + 24 + 20 */
.c-search__btn				{position:absolute; top:50%; right:20px; width:24px; height:24px; padding:0; margin:0; border:0; background:none;
							 transform:translateY(-50%); color:var(--color-ink); cursor:pointer; border-radius:2px;}
.c-search__btn::before		{content:''; display:block; width:24px; height:24px; background-color:currentColor;
							 -webkit-mask:url(../img/icon/ico_sch.svg) no-repeat center / contain; mask:url(../img/icon/ico_sch.svg) no-repeat center / contain;}
.c-search__btn:hover		{color:var(--color-primary);}
.c-search__btn:focus-visible	{outline:2px solid var(--color-primary); outline-offset:2px;}
@media screen and (max-width:768px) {
	.c-search				{width:100%;}
}

/*  체크박스·라디오와 그 글자를 한 덩어리로  [구 .inlineblock]
    라디오도 이 class 를 쓴다 — 모양이 같아 `c-radio` 를 따로 두지 않는다(필요해지면 그때 나눈다).
    ★ 항목 사이 간격도 여기서 준다 — 안 주면 한 줄에 여럿일 때 따닥따닥 붙어 어디까지가 한 항목인지
      안 읽힌다(사용자 지적 2026-09-18). 마지막 것의 오른쪽 여백은 지워 칸이 헐거워지지 않게 한다.
      네모와 글자 사이는 flex 의 gap 이다(KRDS 8px). ※ 화면(HTML)에 margin 을 인라인으로 적지 않는다.
    ★ **네모·원을 직접 그린다** (2026-09-29 KRDS) — 브라우저 기본 그림은 OS 마다 달라 KRDS 꼴(20px · 체크 4px 모서리 ·
      고르면 주조색 채움 + 흰 체크 / 라디오는 테두리만 주조색 + 안에 점 10px)이 안 나온다. `accent-color` 로는 크기·모서리를 못 정한다.
      분절 선택(c-seg)의 라디오도 같은 그림이다 — 같은 선택자에 둔다(그쪽 margin 은 제 절에서 따로 준다).
      체크 표시는 KRDS ico_checkbox_checked.svg 를 **mask** 로 쓴다 — 파일에 박힌 선 색(파랑)이 아니라 흰색으로 물들여야 해서다.
      ⚠ 그리는 것이 ::after 라 input 이 position:relative 다. 포커스는 outline 으로 남긴다(global-template 접근성).
      ⚠ 선택자를 `[type="checkbox"]`·`[type="radio"]` 로 좁힌다 — 같은 label 안에 다른 input(날짜 등)이 서면 그것까지 상자로 그려진다.  */
.c-check					{display:inline-flex; align-items:center; gap:8px; margin-right:24px; cursor:pointer; vertical-align:middle;}
.c-check:last-child			{margin-right:0;}
.c-check > input[type="checkbox"],
.c-check > input[type="radio"],
.c-seg__item > input[type="radio"]	{-webkit-appearance:none; appearance:none; position:relative; flex:0 0 auto; width:20px; height:20px; margin:0;
							 border:1px solid var(--border-color); border-radius:var(--radius-check); background:#fff; cursor:pointer; vertical-align:middle;}
.c-check > input[type="radio"],
.c-seg__item > input[type="radio"]		{border-radius:50%;}
.c-check > input[type="checkbox"]:checked,
.c-check > input[type="radio"]:checked,
.c-seg__item > input[type="radio"]:checked	{border-color:var(--color-primary);}
.c-check > input[type="checkbox"]:checked,
.c-seg__item > input[type="checkbox"]:checked	{background:var(--color-primary);}
.c-check > input[type="checkbox"]:checked::after,
.c-check > input[type="radio"]:checked::after,
.c-seg__item > input[type="radio"]:checked::after	{content:''; position:absolute; inset:0; margin:auto; width:14px; height:14px; background:#fff;
							 -webkit-mask:url(../img/icon/ico_checkbox_checked.svg) no-repeat center / contain; mask:url(../img/icon/ico_checkbox_checked.svg) no-repeat center / contain;}
.c-check > input[type="radio"]:checked::after,
.c-seg__item > input[type="radio"]:checked::after	{width:10px; height:10px; border-radius:50%; background:var(--color-primary); -webkit-mask:none; mask:none;}
.c-check > input[type="checkbox"]:disabled,
.c-check > input[type="radio"]:disabled,
.c-seg__item > input[type="radio"]:disabled	{background:var(--bg-disabled); border-color:var(--border-color-disabled); cursor:default;}
.c-check > input[type="checkbox"]:focus-visible,
.c-check > input[type="radio"]:focus-visible,
.c-seg__item > input[type="radio"]:focus-visible	{outline:2px solid var(--color-primary); outline-offset:2px;}

/*  분절 선택(라디오 묶음) — 서로 배타인 선택지 **두셋**을 한 덩어리 버튼처럼 붙여 놓는다.
    게시판 권한의 '전체 / 로그인회원 / 관리자' 가 첫 자리다 (admin/bbs.form.php).
    ★ 라디오를 감싸는 <label> 이라 `c-check` 와 **역할이 같다** — 글자를 눌러도 켜진다.
      다만 `c-check` 는 줄에 흩어 놓는 항목의 간격(margin-right)을 갖는 반면 이쪽은 **붙여** 놓으므로
      같은 class 를 쓰지 못한다. 선택지가 흩어져도 되는 자리는 그대로 `c-check` 다.
    ★ 고른 것을 **바탕까지** 칠하는 것은 `:has()` 다 — 못 읽는 브라우저에서는 글자색·굵기만 바뀌어
      선택은 여전히 읽힌다(그래서 둘을 같이 둔다).
    ★ 높이는 입력칸과 같은 토큰 — 한 줄에 select·버튼과 나란히 서도 위아래가 맞는다.  */
.c-seg						{display:inline-flex; align-items:center; border:1px solid var(--border-color); border-radius:var(--radius-sm); overflow:hidden; background:#fff; vertical-align:middle;}
.c-seg__item				{display:inline-flex; align-items:center; height:calc(var(--control-height) - 2px); padding:0 11px; margin:0; line-height:1; white-space:nowrap; cursor:pointer; border-right:1px solid var(--border-color);}
.c-seg__item:last-child		{border-right:0;}
.c-seg__item > input		{margin:0 5px 0 0;}
.c-seg__item > input:checked + span	{color:var(--color-primary-ink); font-weight:600;}
.c-seg__item:has(> input:checked)	{background:var(--bg-seg-on);}

/*  도움말 고리 — 머리줄처럼 자리가 좁은 곳에서 설명을 `title` 로 접어 둔다.
    긴 규칙은 여전히 `c-notice` 가 편다 — 이쪽은 **그 자리에서 짧게** 되짚는 용도다.  */
.c-hint						{display:inline-flex; align-items:center; justify-content:center; width:16px; height:16px; margin-left:5px; border-radius:50%; background:rgba(255,255,255,.28); font-size:11px; font-weight:400; line-height:1; cursor:help; vertical-align:middle;}

/*  필수 표시 — **기호까지 CSS 가 낸다.** 화면은 빈 <span class="c-req"></span> 만 두므로
    사이트마다 기호·색을 여기 한 곳에서 바꾼다(HTML 을 건드리지 않는다).
    별표를 쓰는 이유 — 필수 입력의 관례라 설명 없이 읽히고, 획이 단순해 작은 크기에서도 안 뭉갠다
    (옛 ※ 는 획이 많아 본문 크기에서 잘 안 보였다).  */
.c-req::before				{content:'*'; color:var(--color-danger); font-weight:700; font-size:1.3em; line-height:1; vertical-align:middle;}

/*  선택 표시 — 필수(c-req)의 짝. **글자까지 CSS 가 낸다** — 화면은 빈 <span class="c-opt"></span> 만 둔다.
    ★ 언제 쓰나 — KRDS 입력폼(global_08): "대부분의 항목이 필수인 경우 **선택 입력 항목만** 표시하고,
      대부분의 필드가 선택 사항인 경우 필수 필드 레이블만 표시한다". 회원 폼이 그 첫 경우라
      2026-09-30 사용자 결정으로 옮겨 왔다 — 별표 여섯 개가 붙던 자리가 '(선택)' 하나가 됐다.
    ⚠ **한 폼 안에서 c-req 와 섞지 않는다** — KRDS 는 둘 중 하나를 "일관성 있게" 쓰라고 한다.
      게시판·관리자 폼은 대부분 필수뿐이라 c-req 를 그대로 쓴다(범위를 나눈 기준이 그것이다).  */
.c-opt::before				{content:'(선택)'; margin-left:4px; color:var(--color-help); font-size:0.85em; font-weight:400;}

/*  도움말·안내문 — 입력칸 **아래**(div)와 **옆**(span) 두 가지로 쓴다  [구 .ghelp]
    옆에 쓰면 그 줄의 높이를 늘리지 않는다 — 폭이 정해진 입력(날짜·일시·색)의 설명이 그 자리다.  */
/*  설명 글자 — **--font-size-sm 하나가 기준이다** (사용자 지시 2026-09-30 "모든 설명은 같은 사이즈,
    기준이 통일되어야 한다 · 한 단계 아래로"). 본문(17)에서 KRDS 한 단계 아래다.
    ⚠ 전엔 `--font-size-xs`(0.825 = 14px)였다 — 그 배수에 **근거가 적힌 적이 없고**, KRDS 본문 단계
      (19/17/15/13)에도 14 는 없어 눈금 사이에 떠 있었다. 그 토큰은 이 한 줄만 읽고 있었으므로 같이 걷었다.
    색은 2026-09-29 KRDS 회색(variables.css --color-help). 줄간격은 전역(단위 없는 수)이 제 글자 크기로 세 준다.  */
.c-help						{color:var(--color-help); font-size:var(--font-size-sm);}

/*  상태 메시지 — 상태(배지)에 붙는 **설명 한 줄**: 지금 무슨 일이 진행 중이고 그동안 무엇이 되고 안 되나  [2026-10-21 사용자 지시 "눈에 좀 띄는 색, KRDS 참조해 공통 스타일"]
    KRDS 입력 컴포넌트의 상태 메시지 꼴(component_09_03) — 시스템 색 **채움 아이콘 + 그 색 60단계 글자**. 크기는 설명 글자와 같은 --font-size-sm.
    색 = 배지와 같은 짝(신청 warn · 반려 danger · 승인 success · 그 밖 안내 info) — 고르는 것은 member_approval_msg() (guava/lib/member.lib.php) 하나.
    ⚠ 채움 아이콘은 **배경 그림**이다 — mask 로 칠하면 원과 느낌표 두 조각이 한 덩어리 단색이 된다(site-status.css 와 같은 이유).
    ⚠ c-help 의 수준(plain·warn·danger — 설정 설명이 "얼마나 급한가")과 다른 축이다 — 이건 "그 상태가 무엇을 뜻하나".  */
.c-stts-msg					{display:flex; align-items:flex-start; gap:6px; margin:8px 0 0; font-size:var(--font-size-sm); line-height:1.5; color:var(--color-info-ink);}
.c-stts-msg::before			{content:''; flex:none; width:16px; height:16px; margin-top:calc((1.5em - 16px) / 2); background:url(../img/icon/ico_information_fill.svg) no-repeat center / contain;}
.c-stts-msg--warn			{color:var(--color-warn-ink);}
.c-stts-msg--warn::before	{background-image:url(../img/icon/ico_warning_fill.svg);}
.c-stts-msg--danger			{color:var(--color-danger-ink);}
.c-stts-msg--danger::before	{background-image:url(../img/icon/ico_error_fill.svg);}
.c-stts-msg--success		{color:var(--color-success-ink);}
.c-stts-msg--success::before	{background-image:url(../img/icon/ico_success_fill.svg);}

/*  비밀번호 작성규칙 — 둥근 칩 + 체크 아이콘 · 아래 한 문장  [2026-10-08 사용자 지시 · 조각 guava shared/pswd.rule]
    충족한 조건은 core/js/pw-rule.js 가 `is-on` 을 붙인다 — 회색 → 파랑(정보 색 --color-info 계열 — 안내 상자와 같은 파랑, 2026-10-08 사용자 지시). 체크는 흰 선 SVG 를 원 위에 얹는다(색은 원 바탕이 낸다).  */
.c-pwrule					{margin-top:10px;}
.c-pwchip					{display:inline-flex; align-items:center; gap:6px; height:34px; padding:0 14px 0 10px; margin:0 6px 6px 0; border:1px solid var(--border-color-cell); border-radius:999px; background:#f6f7f8; color:var(--color-mute); font-size:var(--font-size-sm); white-space:nowrap; vertical-align:middle; transition:background-color .15s, border-color .15s, color .15s;}
.c-pwchip::before			{content:''; flex:none; width:18px; height:18px; border-radius:50%; background:#9aa3ab url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M4 8.3l2.6 2.5L12 5.4' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/12px no-repeat; transition:background-color .15s;}
.c-pwchip.is-on				{border-color:var(--color-info); background:var(--color-info-bg); color:var(--color-info-ink);}
.c-pwchip.is-on::before		{background-color:var(--color-info);}
/*  본인인증 수단 카드 — 켠 수단마다 하나(guava driver-certify certify_render). 누르면 그 수단의 인증 창이 열린다.
    아이콘은 img/certify/{mobile,monitor}.svg — KRDS 아이콘 세트(img/icon)에 휴대폰·모니터가 없어 같은 규격(24 · 선 1.6)으로 그렸다. 수단 키가 modifier 다.  [2026-10-08]  */
.c-certify					{display:grid; grid-template-columns:repeat(auto-fit, minmax(240px, 1fr)); gap:24px; margin:24px 0 0; padding:0; list-style:none;}
.c-certify__card			{display:flex; flex-direction:column; align-items:flex-start; gap:12px; width:100%; min-height:180px; padding:32px 32px 28px; border:1px solid var(--border-color-cell); border-radius:var(--radius-md, 10px); background:#f7f7f8; color:inherit; font:inherit; text-align:left; cursor:pointer; transition:border-color .15s, background-color .15s;}
.c-certify__card:hover,
.c-certify__card:focus-visible	{border-color:var(--color-primary); background:#fff;}
.c-certify__card:focus-visible	{outline:2px solid var(--color-primary); outline-offset:2px;}
.c-certify__tit				{display:flex; align-items:center; gap:10px; font-size:var(--font-size-lg); font-weight:700; color:var(--color-ink, #1e2124);}
.c-certify__tit::before		{content:''; flex:none; width:32px; height:32px; background:center/contain no-repeat;}
.c-certify__card--sms .c-certify__tit::before	{background-image:url("../img/certify/mobile.svg");}
.c-certify__card--ipin .c-certify__tit::before	{background-image:url("../img/certify/monitor.svg");}
.c-certify__desc			{color:var(--color-mute); font-size:var(--font-size-sm); line-height:1.6;}

.c-pwrule__text				{margin:2px 0 0; color:var(--color-mute); font-size:var(--font-size-sm);}
span.c-help					{margin-left:10px; vertical-align:middle;}   /* 입력 옆에 설 때 — 그 줄의 높이를 안 늘린다 */

/*  안내 박스 — 여러 줄짜리 설명을 흐름에서 떼어 감싼다. 입력칸 아래 한 줄짜리 .c-help 와 달리
    "이 섹션이 지금 왜 이런 상태인가"를 말하는 자리라, 글자색만으로는 본문에 묻힌다.
    .c-help 와 **같이** 쓴다 — 글자 크기는 그대로 두고 상자·색·아이콘을 더한다(이 규칙이 .c-help 보다
    뒤에 있어 같은 명시도에서 색이 이긴다).

    ★ 2026-09-30 **KRDS 꼴로 다시 그렸다**(사용자 지시 "정부표준형식으로 · 아이콘도 들어있으니까").
      ⚠ KRDS 에 인라인 안내 **상자** 컴포넌트는 없다 — 키트에서 이름이 비슷한 셋은 전부 다른 것이다:
        contextual_help(도움말 팝오버) · critical_alerts(긴급공지 띠) · form-hint(입력칸 아래 한 줄).
      그래서 근거로 삼은 것은 컴포넌트가 아니라 **규칙 둘**이다:
        ① 시스템 색(style_02) — 넷(danger·warning·success·information) 중 **information**.
           이 상자가 말하는 것은 오류도 경고도 아닌 상태 안내다. 쓰는 단계도 규칙대로
           아이콘 50 · 글자 60 · 배경 5 · 테두리 10 (값은 variables.css 의 --color-info-*).
        ② 아이콘 + 글자 가로 배치 — 키트의 `.form-group [class^=form-hint]` 가 flex + mask 아이콘이다.
      바뀐 것: 왼쪽 4px 굵은 선을 뺐다(KRDS 근거 없음 — 테두리는 1px 균일) · 래디어스 4 → 10(형태
      지침의 카드류) · 주황 축 → 정보 축.
      ⚠ 아이콘이 "안내"를 말하므로 **문구 앞 별표(*)는 두지 않는다** — 같은 말을 두 번 한다.  */
/*  아이콘은 **상자의 배경**이다 — ::before 도 flex 도 쓰지 않는다.
    ⚠ flex 로 두면 안 된다(2026-09-30 실측): flex 컨테이너에서는 **자식 요소 하나하나가 flex item** 이라
      문장 속 `<b>회사명</b>` 이 제 칸으로 떨어져 나가 좁은 폭에서 "(주)테크 / 원" 처럼 쪼개졌다.
      우리 안내문은 `<b>`·`<br>` 이 섞인 여러 줄 문장이라 KRDS 키트의 form-hint(짧은 한 줄, 인라인 요소 없음)
      와 사정이 다르다. 배경으로 깔면 글자는 평범한 흐름에 남는다.
    ⚠ 아이콘은 **mask 가 아니다**. 채움(_fill) 아이콘은 파란 원 + 흰 'i' 두 조각이라 mask 로 찍으면 둘 다
      불투명이어서 **단색 원**이 된다(실측). KRDS 키트도 이 아이콘만은 mask 를 끄고 배경 이미지로 쓴다 —
      `.form-group .form-hint-information::before` 가 `mask:none` + `background-image` +
      `background-color:transparent !important`(component.css). 색은 아이콘이 제 것을 낸다(#1A80E5).
      선(outline) 아이콘을 글자색으로 물들이는 c-ico 와는 방식이 다르다.
    왼쪽 여백 = 16(상자 여백) + 20(아이콘) + 8(간격) = 44.  */
/*  ⚠ 위 여백도 갖는다 — 2026-09-30 까지 `margin:0 0 15px 0` 이라 **앞 요소에 딱 붙었다**(사용자 지적:
    기업 확인 화면에서 표 바로 아래에 붙었다). 제목 바로 아래에 설 때 간격이 두 배가 되지는 않는다 —
    일반 블록이라 인접 형제의 margin 이 겹쳐져(collapse) 큰 쪽 하나만 남는다.  */
/*  ★ 2026-10-20 강조 안내 상자(c-callout, ui.css)와 한 모양으로 통일(사용자 지시) — 같은 토큰 · 같은 아이콘(파란 원 + 흰 i).
      아이콘은 그림 파일 대신 ::before 원이다(absolute — 상자는 여전히 flex 가 아니다, 위 ⚠). 글자는 회색 본문(전엔 파란 글자).  */
.c-notice					{position:relative; min-height:72px; padding:18px 24px 18px 74px; margin:0;   /* ⛔ 제 세로 margin ✗ — 앞뒤 사이는 마크업 u-gap(2026-10-21 사용자 "마진은 gap 로만" · 전엔 15px 0) */   /* 강조 안내 상자(c-callout, ui.css)와 같은 상자 — 여백 18·24, 아이콘 34 + 간격 16 (2026-10-20 사용자 "메인 안내 다 이것으로") */
							 border:1px solid var(--color-info-border); border-radius:var(--radius-md);
							 background:var(--color-info-bg); color:var(--color-help); font-size:var(--font-size-base); line-height:1.6; word-break:keep-all;}   /* 설명 = 본문 크기(2026-10-21 사용자 "info 가 본문보다 작다" — 전엔 sm) */
.c-notice::before			{content:'i'; position:absolute; left:24px; top:23px; width:34px; height:34px; line-height:34px; border-radius:50%;
							 background:var(--color-info); color:#fff; font-size:19px; font-weight:800; text-align:center; font-family:Georgia, serif;}   /* ★ 동그라미 꼭대기 = 첫 줄 글자 꼭대기 — 줄 수와 상관없이 위에 선다(2026-10-20 사용자 — 전엔 세로 가운데라 여러 줄이면 내려갔다). top 23 은 헤드리스 크롬 실측(패딩 18 + 줄높이 여백) */
.c-notice b					{color:#1e2124; font-weight:600;}   /* 굵은 글씨 한 단계 덜 굵게 — 기본 bold(700) → 600(2026-10-21 사용자 "조금 덜 굵게") */
.c-notice > b:first-child	{font-size:calc(var(--font-size-base) * 1.1);}   /* 제목 줄(굵은 첫 줄) — 본문보다 조금 크게(2026-10-21 사용자 — 전엔 본문 크기, 설명이 sm 이던 때) */
.c-notice a					{color:var(--color-info); font-weight:600;}
@media screen and (max-width:768px) {
	.c-notice				{min-height:0; padding:16px 16px 16px 52px;}   /* 왼쪽 52 = 16 + 아이콘 24 + 간격 12 */
	.c-notice::before		{left:16px; top:21px; width:24px; height:24px; line-height:24px; font-size:14px;}   /* 휴대폰은 아이콘 24(2026-10-20 사용자 "모바일에서는 느낌표 좀 줄여") — 강조 안내 상자와 같게 · top 은 위 ★ 와 같은 이유(실측 21 — 제목 줄이 한 단계 커진 뒤) */
}


/*  첨부칸 — 즉시 업로드 (upload_input($opt['progress'] = 1 | 2))  =====================================
    레거시 basic_multi 의 모양을 그대로 옮긴 것이다(사용자 지시 2026-09-22 "우선은 모양도 그대로").
    그래서 class 이름이 이 파일의 c-*·u-* 규칙과 다르다 — 레거시 마크업과 1:1로 맞춰 둔 자리라서다.
    값만 이 사이트 토큰으로 갈아끼웠다(레거시 --white1·--border-color1·--transition1 → 아래 토큰).
    움직이는 쪽은 app/guava/asset/js/upload.js, 그리는 쪽은 upload_input().
    ⚠ 레거시가 쓰던 Font Awesome 이 이 플랫폼에 없어(layouts/base.php 주석) 아이콘은 글자(＋·×)로 뒀다.  */

/*  한 자리 (progress 1) — [미리보기][첨부][삭제] 가 한 줄  */
.file_box						{position:relative; display:inline-block; vertical-align:middle;}
.file_box .up_file_progress		{display:none;}
.file_box .file_preview			{float:left; width:130px; height:40px; border-radius:var(--radius-input); overflow:hidden;
								 background:var(--bg-label); display:flex; justify-content:center; align-items:center;}
.file_box .file_preview img		{width:auto; height:100%;}
.file_box .file_preview span	{font-size:0.85em; color:var(--color-mute); padding:0 8px; overflow:hidden; white-space:nowrap;}
.file_box .file_btn				{float:left; width:80px; height:40px; line-height:40px; border-radius:var(--radius-input);
								 background:var(--color-dark); color:#fff; font-weight:500; text-align:center;
								 margin-left:10px; cursor:pointer;}
.file_box .file_btn:hover		{background:var(--color-black);}
.file_box .file_btn--del		{background:var(--color-mute);}
.file_box .file_btn--del:hover	{background:var(--color-danger);}
/*  진행률 — 미리보기 자리 위에 덮어 차오른다  */
.file_box .file_progress		{position:absolute; top:0; left:0; width:0; height:40px; border-radius:var(--radius-input);
								 background:var(--color-primary); opacity:0; transition:width 0.2s ease;}
.file_box .file_progress.is-on	{opacity:0.85;}

/*  여러 개 (progress 2) — 올린 것이 한 줄씩 쌓이고 맨 아래 [＋ 파일 등록]  */
.file_multi .file_items			{margin:0 0 8px 0;}
.up_file_progress2				{display:none;}
.uploaded_file_item				{position:relative; display:flex; align-items:center; justify-content:space-between;
								 font-size:0.9em; line-height:1.2em; padding:12px; margin-bottom:8px;
								 border:1px solid var(--border-color); border-radius:var(--radius-input); background:#fff;
								 overflow:hidden;}
.uploaded_file_item:hover		{border-color:var(--color-dark);}
.uploaded_file_item.uploading	{border-color:var(--color-primary); background:var(--bg-label);}
.uploaded_file_item.completed	{border-color:var(--color-primary);}
.uploaded_file_item.failed		{border-color:var(--color-danger); background:var(--color-danger-ink);}
.uploaded_file_item .file_info	{flex:1; margin-right:30px; min-width:0;}
.uploaded_file_item .file_name	{font-weight:500;}
.uploaded_file_item .file_size	{color:var(--color-mute); font-size:0.85em;}

.upload_progress_container		{position:absolute; bottom:0; left:0; right:0; height:4px; background:var(--border-color);}
.upload_progress_bar			{height:100%; width:0; background:var(--color-primary); transition:width 0.2s ease;}
.upload_percentage				{position:absolute; top:50%; right:40px; transform:translateY(-50%);
								 font-size:0.9em; font-weight:600; color:var(--color-primary);}

.remove_up_file_btns			{position:absolute; right:10px; width:22px; height:22px; flex-shrink:0;
								 display:flex; align-items:center; justify-content:center;
								 border:0; border-radius:50%; background:var(--color-mute); color:#fff;
								 font-weight:bold; line-height:1; cursor:pointer;}
.remove_up_file_btns:hover		{background:var(--color-danger);}
.uploaded_file_btns				{display:inline-block; padding:12px 13px; font-size:0.9em; line-height:1.3em;
								 border-radius:var(--radius-sm); background:var(--color-dark); color:#fff;
								 font-weight:500; text-align:center; cursor:pointer;}
.uploaded_file_btns:hover		{background:var(--color-black);}

/*  올리는 중이거나 아직 올린 것이 없을 때 감추는 것 — 자리는 남겨 두지 않는다  */
.is-hidden						{display:none !important;}

/*  색 고르개 — 견본 + 값 칸이 **한 덩이**로 보이고, 견본을 누르면 팔레트가 그 아래 뜬다 (core/js/colorpicker.js).
    레거시 `data-colorpicker` 의 모양을 옮긴 것이다. 값 칸이 곧 저장값이라 손으로 적어도 된다.  */
.c-colorpick				{position:relative; display:inline-flex; align-items:center; gap:6px; flex:0 0 auto; vertical-align:middle;
							 height:var(--control-height); padding:0 8px 0 4px; margin:1px 0;
							 border:1px solid var(--border-color); border-radius:var(--radius-input); background:#fff;}
.c-colorpick__swatch		{width:calc(var(--control-height) - 14px); height:calc(var(--control-height) - 14px); padding:0;
							 border:0; border-radius:3px; background:var(--bg-label); cursor:pointer;}   /* 고른 색은 JS 가 인라인으로 칠한다. 안 골랐으면 이 옅은 바탕이 보인다(누를 자리) */
/*  값 칸 — 감싸는 상자 **안**이라 자기 테두리·배경을 갖지 않는다. 포커스·자동완성일 때 브라우저가 그리는 것까지
    같이 눌러 둔다(그 상태에서만 안쪽에 네모가 비쳤다 — 사용자 지적 2026-09-23). 명시도를 한 단계 올려 전역 input 규칙을 이긴다.  */
.c-colorpick .c-colorpick__text,
.c-colorpick .c-colorpick__text:focus,
.c-colorpick .c-colorpick__text:focus-visible	{width:88px; height:calc(var(--control-height) - 4px); font-size:0.95em;
							 border:0; outline:0; padding:0; background:transparent; box-shadow:none;}
.c-colorpick .c-colorpick__text:-webkit-autofill	{box-shadow:0 0 0 100px #fff inset;}   /* 자동완성 노란 바탕 덮기 */

/*  팔레트 — 견본 바로 아래. 위에 뜨는 것이 없도록 z-index 는 모달(100000)보다 낮게 둔다.  */
.c-colorpick__pop			{position:absolute; top:calc(100% + 4px); left:0; z-index:900; width:max-content; padding:12px;
							 background:#fff; border:1px solid var(--border-color); border-radius:var(--radius-md); box-shadow:0 4px 16px rgba(0,0,0,.15);}
.c-colorpick__label			{margin:0 0 6px; color:var(--color-mute); font-size:0.85em;}
.c-colorpick__grid			{display:grid; grid-template-columns:repeat(10, 22px); gap:3px; margin-bottom:10px;}
.c-colorpick__cell			{width:22px; height:22px; padding:0; border:1px solid rgba(0,0,0,.12); border-radius:2px; cursor:pointer;}
.c-colorpick__cell:hover	{outline:2px solid var(--color-primary); outline-offset:1px;}
.c-colorpick__foot			{display:flex; align-items:center; gap:6px; padding-top:4px; border-top:1px solid var(--border-color);}
.c-colorpick__foot .c-btn	{margin:0; flex:1 1 auto;}
.c-colorpick__more			{position:absolute; width:1px; height:1px; opacity:0; pointer-events:none;}   /* [다른 색…] 이 click() 으로만 연다 */

/*  토글 스위치 — 켜고 끄는 **한 가지**를 묻는 자리(공지·게시·비공개). 체크박스의 다른 모양일 뿐이라 name·value 는 그대로다.
    체크박스가 여럿 나열되는 자리(분류 고르기 등)는 그냥 `c-check` 를 쓴다 — 스위치는 "켜짐/꺼짐" 하나에만.  */
.c-switch					{display:inline-flex; align-items:center; gap:10px; cursor:pointer; vertical-align:middle;}   /* 옆에 선 도움말·입력과 세로 기준을 맞춘다 */
.c-switch > input			{appearance:none; -webkit-appearance:none; position:relative; flex:0 0 auto; width:44px; height:24px; margin:0;
							 border:0; border-radius:12px; background:var(--bg-switch); cursor:pointer; transition:background .15s;}
.c-switch > input::after	{position:absolute; top:2px; left:2px; content:''; width:20px; height:20px; border-radius:50%;
							 background:#fff; box-shadow:0 1px 3px rgba(0,0,0,.25); transition:left .15s;}
.c-switch > input:checked	{background:var(--color-primary);}
.c-switch > input:checked::after	{left:22px;}
.c-switch > input:focus-visible	{outline:2px solid var(--color-primary); outline-offset:2px;}
