:root{
  color-scheme: light;
  --fg:#22262e; --muted:#5e6473; --bg:#f4f5f7; --card:#ffffff; --border:#e5e7ec;
  --subtle:#f8f9fb; --soft:#eef0f4; --soft-h:#e3e6ed; --field:#ffffff; --field-bd:#c8cdd8;
  /* --primary = 글자·테두리용(카드 위 7.7:1) · --primary-bg = 흰글자 얹는 채움용(11.3:1) */
  --primary:#1f4fa8; --primary-d:#16294a; --on-primary:#ffffff; --danger:#a23545;
  --primary-bg:#1f3a66; --primary-bg-h:#16294a;
  /* 사이드바(네이비 프리미엄) - 브랜드 골드가 가장 살아나는 자리 */
  --side-bg:#182740; --side-bd:#182740; --side-fg:#d9dfeb; --side-dim:#9fb0c9;
  --side-hover:#21344f; --side-on-bg:#24375c; --side-on-fg:#f0d9ad;
  --gold:#d4ab66; --gold-ink:#8a5a12;   /* gold=네이비 위 · gold-ink=밝은 배경 위 */
  --ok-bg:#e3f2e7; --ok-fg:#1b6b38;
  --wait-bg:#f8ecd9; --wait-fg:#8a5a12;
  --info-bg:#e7edf9; --info-fg:#1f4fa8;
  --no-bg:#f9e7e9; --no-fg:#a23545; --no-bd:#eec3c8;
  --alert-bg:#f9e7e9; --alert-fg:#a23545; --alert-bd:#eec3c8;
  --warn-bg:#fff7e6; --warn-bd:#f3d9b0; --warn-fg:#8a5a12;
}
/* 다크 모드 - 사이드바 테마 스위치(시스템/라이트/다크)가 <html data-theme>로 적용.
   '시스템'은 JS가 OS 설정을 읽어 data-theme=dark/light로 해석해 넣음. */
:root[data-theme="dark"]{
  color-scheme: dark;
  --fg:#e6e8ec; --muted:#a0a7b4; --bg:#191b1f; --card:#23262b; --border:#31343b;
  --subtle:#282b31; --soft:#31343b; --soft-h:#3a3e46; --field:#17191d; --field-bd:#3b3f48;
  --primary:#8fb0e8; --primary-d:#3a63a8; --on-primary:#ffffff; --danger:#e9909b;
  --primary-bg:#2d5089; --primary-bg-h:#3a63a8;
  /* 다크에선 캔버스보다 더 깊은 남색으로 사이드바를 구분 */
  --side-bg:#131c2e; --side-bd:#1e293d; --side-fg:#ccd6e6; --side-dim:#93a3ba;
  --side-hover:#1b273e; --side-on-bg:#1f2f4d; --side-on-fg:#ecd3a4;
  --gold:#d4ab66; --gold-ink:#d4ab66;
  --ok-bg:#16331f; --ok-fg:#5fd089;
  --wait-bg:#352a17; --wait-fg:#e3b15f;
  --info-bg:#1e2c46; --info-fg:#9db8f2;
  --no-bg:#3a1f24; --no-fg:#f08a96; --no-bd:#5a2f36;
  --alert-bg:#3a1f24; --alert-fg:#f08a96; --alert-bd:#5a2f36;
  --warn-bg:#352a17; --warn-bd:#5a4a2a; --warn-fg:#e3b15f;
}
/* 본문 폰트 = Wanted Sans 가변(400~1000) 로컬 번들. @font-face는 vendor/wanted-sans/wanted-sans.css.
   (구 Pretendard 동적 서브셋은 vendor/pretendard에 남겨둠 - PDF·롤백용) */
*{box-sizing:border-box}
/* 스크롤바 자리를 항상 확보(scrollbar-gutter) - 페이지마다 세로 스크롤 유무가 달라
   클래식 스크롤바(윈도우·'항상 표시' 맥)에서 폭이 15px 오락가락하며 좌우로 튀던 현상 제거.
   오버레이 스크롤바(기본 맥)에선 자동으로 무효(공백 안 생김). */
html{-webkit-text-size-adjust:100%; scrollbar-gutter:stable}
body{
  margin:0; font-family:'Wanted Sans','Pretendard',system-ui,'Apple SD Gothic Neo','Malgun Gothic',sans-serif;
  font-size:17px; line-height:1.6; color:var(--fg); background:var(--bg);
  word-break:keep-all; overflow-wrap:break-word;   /* 한글은 단어(띄어쓰기) 단위로만 줄바꿈 - 낱말 중간 절단 금지. 칸보다 긴 이메일·URL만 예외로 접힘 */
}
h1{font-size:26px; margin:0 0 8px}
a.link{color:var(--primary); text-decoration:none}
a.link:hover{text-decoration:underline}
.muted{color:var(--muted)}
.container{max-width:2000px; margin:0 auto; padding:38px 40px 44px}
.card{background:var(--card); border:1px solid var(--border); border-radius:14px; padding:24px}

/* ═══ 표 「줄 전체」를 눌러 열기 - PC·모바일 동일(2026-07-28 나쿤 요청) ═══
   제목 칸에 링크가 있으면 그 줄(모바일에선 카드) 어디를 눌러도 같은 곳으로 간다.
   ⚠️ 줄이 통째로 버튼이므로 제목 글자에는 링크 표시(파란 글씨·밑줄)를 하지 않는다.
   줄 안의 다른 링크·버튼·입력칸은 위로 올려 원래대로 눌린다. */
.tbl tbody tr:has(td.card-title > a){cursor:pointer}
.tbl tbody tr:has(td.card-title > a):hover{background:var(--subtle)}
.tbl tbody tr{position:relative}
.tbl td.card-title > a{color:inherit; text-decoration:none}
.tbl td.card-title > a:hover{text-decoration:none}
.tbl td.card-title > a::after{content:''; position:absolute; inset:0; z-index:1}
.tbl td:not(.card-title) a, .tbl td .btn, .tbl td button,
.tbl td input, .tbl td select, .tbl td label{position:relative; z-index:2}

/* 카드 전체를 눌러 열기(2026-07-28 나쿤 요청) - 제목에 .card-open을 주면 카드 어디를 눌러도 같은 곳으로 간다.
   카드 안의 다른 링크·버튼·입력칸은 위로 올려 원래대로 눌린다.
   ⚠️ 카드가 통째로 버튼이므로 안쪽 글자에는 링크 표시(파란 글씨·밑줄)를 하지 않는다 - 대신 카드에 손 모양 커서와 hover 강조를 준다. */
.card{position:relative}
.card .card-open{color:inherit; text-decoration:none}
.card .card-open:hover{text-decoration:none}
.card .card-open::after{content:''; position:absolute; inset:0; z-index:1}
.card:has(> * .card-open), .card:has(> .card-open){cursor:pointer; transition:border-color .15s, box-shadow .15s}
.card:has(> * .card-open):hover, .card:has(> .card-open):hover{border-color:var(--primary); box-shadow:0 2px 10px rgba(0,0,0,.06)}
.card a:not(.card-open), .card .btn, .card button, .card input, .card select, .card textarea, .card label,
.card summary, .card details{position:relative; z-index:2}
/* ⚠️ 위 규칙이 「표 제목 링크」까지 잡으면 덮개(::after)의 기준이 그 글자가 되어 줄 전체를 못 덮는다.
   표 제목 링크는 기준을 잡지 않도록 되돌린다(덮개의 기준은 줄=tr). */
.card .tbl td.card-title > a, .tbl td.card-title > a{position:static}

/* ═══ 본문 세로 리듬 - 여기 한 곳에서만 정한다(2026-07-27 전면 통일) ═══
   그동안 블록마다 제각각 margin을 들고 있어 화면마다 간격이 0·8·12·14·16·17·18·20·24·36·40px로 갈렸다.
   디자인시스템 §4(간격은 4의 배수 · 카드 사이 16 · 구역 사이 40)대로 아래 4개 값만 쓴다. PC·모바일 동일.
   ⚠️ 새 블록을 main 바로 아래 넣을 때 개별 margin을 주지 말 것 - 여기 규칙이 알아서 맞춘다.
   개별 margin(클래스든 인라인이든)이 이겨서 다시 어긋나지 않도록 !important로 못 박는다. */
main.container > *{margin-top:16px !important; margin-bottom:0 !important}   /* 블록과 블록 사이 */
main.container > *:first-child{margin-top:0 !important}
main.container > h1 + p, main.container > h1 + .muted{margin-top:8px !important}   /* 제목과 그 설명은 한 덩어리 */
main.container > .sec-title{margin-top:40px !important}                      /* 구역 나눔 */
main.container > .sec-title + *{margin-top:12px !important}                  /* 구역 제목 → 첫 내용 */
main.container > .sec-title:first-child, main.container > h1 + .sec-title{margin-top:24px !important}

/* ===== 앱 셸: 좌측 사이드바 ===== */
.layout{display:flex; min-height:100vh}
.sidebar{flex:0 0 230px; width:230px; background:var(--side-bg); border-right:1px solid var(--side-bd); display:flex; flex-direction:column; position:sticky; top:0; height:100vh}
.side-brand{display:flex; align-items:center; box-sizing:border-box; min-height:54px; padding:6px 26px; text-decoration:none; border-bottom:1px solid var(--side-hover)}   /* 상단바와 높이 맞춰 가로선 정렬 */
/* 워드마크 = 본문과 같은 Wanted Sans 굵게(2026-07-26 필기체에서 교체 - 업무 도구 톤에 맞추고 브랜드 통일·가독성↑) */
.brand-wm{font-family:'Wanted Sans',system-ui,sans-serif; font-weight:800; font-size:23px; line-height:1.35;
  /* ⚠️ line-height:1이면 'g'의 내려간 꼬리가 글자상자 밖으로 나가는데, 이 워드마크는 그라디언트를 글자 모양으로
     잘라 칠하는 방식(background-clip:text)이라 상자 밖은 색이 안 칠해져 잘려 보인다 → 1.35로 상자를 넓힘(2026-07-26) */
  letter-spacing:-.5px; color:var(--gold);
  background:linear-gradient(92deg,#c1934a,#9c6f28); -webkit-background-clip:text; background-clip:text; -webkit-text-fill-color:transparent}
a.side-brand:hover .brand-wm{filter:brightness(1.12)}
.side-nav{flex:1; padding:14px 12px; display:flex; flex-direction:column; gap:3px; overflow-y:auto}
.side-nav a{display:block; padding:12px 14px; border-radius:10px; color:var(--side-fg); text-decoration:none; font-size:16px; font-weight:500}
.side-nav a:hover{background:var(--side-hover)}
.side-nav a.active{background:var(--side-on-bg); color:var(--side-on-fg); font-weight:700}
.flash-linkrow{display:flex; gap:6px; margin-top:8px; align-items:center}
.flash-linkbox{flex:1; min-width:0; font-size:14px; padding:6px 9px; border:1px solid var(--border); border-radius:8px; background:var(--field); color:var(--fg)}
.side-foot{padding:16px 18px; border-top:1px solid var(--side-hover); font-size:14px; color:var(--side-dim)}
.side-theme{display:flex; align-items:center; gap:1px; flex-wrap:wrap; margin:0 0 10px}
.side-theme-lbl{font-size:14px; color:var(--side-dim); margin-right:5px}
.side-theme button{flex:0 0 auto; font:inherit; font-size:14px; min-height:36px; padding:6px 10px; cursor:pointer; border:0; background:transparent; color:var(--side-dim); border-radius:8px; transition:background .15s, color .15s}
.side-theme button:hover{color:var(--side-fg); background:var(--side-hover)}
.side-theme button.is-on{background:var(--side-hover); color:var(--side-fg); font-weight:600}
.tabs{display:inline-flex; gap:4px; background:var(--soft); padding:5px; border-radius:14px; margin:0 0 24px; flex-wrap:wrap; max-width:100%}
.tab{padding:9px 18px; border-radius:10px; color:var(--muted); text-decoration:none; font-weight:600; font-size:14px; white-space:nowrap; transition:background .15s, color .15s}
.tab:hover{color:var(--fg)}
.tab.active{background:var(--card); color:var(--primary); box-shadow:0 1px 3px rgba(0,0,0,.10)}
.content-area{flex:1; min-width:0}
/* 상단바 - 계정(이름·옵션·로그아웃) 우상단. 데스크탑·모바일 공용(모바일은 왼쪽에 햄버거+브랜드도) */
.topbar{display:flex; align-items:center; gap:12px; box-sizing:border-box; min-height:54px; padding:8px 22px; background:var(--card); border-bottom:1px solid var(--border); position:sticky; top:0; z-index:30}
.topbar > .hamburger, .topbar > .mb-title{display:none}   /* 데스크탑: 브랜드는 사이드바에 있으니 숨김 */
.topbar-acct{margin-left:auto; display:flex; align-items:center; gap:12px}
.tb-user{color:var(--muted); font-size:14px; white-space:nowrap}
.tb-opt{position:relative}
.tb-opt > summary{list-style:none; cursor:pointer; color:var(--fg); font-weight:600; font-size:14px; padding:7px 13px; border:1px solid var(--border); border-radius:10px; background:var(--card); white-space:nowrap}
.tb-opt > summary::-webkit-details-marker{display:none}
.tb-opt > summary:hover{background:var(--soft)}
.tb-opt[open] > summary{background:var(--soft-h)}
.tb-logout{background:var(--soft); border:1px solid var(--border); color:var(--fg); font-family:inherit; font-weight:600; font-size:14px; cursor:pointer; min-height:36px; padding:7px 13px; border-radius:10px; white-space:nowrap}
.tb-logout:hover{background:var(--soft-h)}
.nav-overlay{display:none}
@media (max-width:900px){
  .sidebar{position:fixed; top:0; left:0; z-index:50; transform:translateX(-100%); transition:transform .22s ease; box-shadow:2px 0 16px rgba(0,0,0,.18)}
  #navtoggle:checked ~ .layout .sidebar{transform:none}
  #navtoggle:checked ~ .layout .nav-overlay{display:block; position:fixed; inset:0; background:rgba(0,0,0,.45); z-index:40}
  .topbar{padding:9px 16px}
  .topbar > .mb-title{display:inline-block}   /* 모바일: 브랜드 표시 */
  .topbar > .hamburger{display:inline-flex}   /* 모바일: 햄버거 표시(SVG 중앙정렬) */
  /* 햄버거 = SVG 메뉴 아이콘(이모지 ☰ 대체, 2026-07-24) + 터치 44px 확보 */
  .hamburger{align-items:center; justify-content:center; width:44px; height:44px; margin:-8px -10px; cursor:pointer; user-select:none; color:var(--text)}
  .hamburger .ic{width:26px; height:26px; vertical-align:0}
  .mb-title{font-weight:700; text-decoration:none; cursor:pointer}   /* 상단 로고 클릭 = 홈(a로 바뀜, 밑줄 제거) */
  .mb-title.brand-wm{font-size:21px; line-height:1.35; color:var(--gold-ink); transform:translateY(6px)}   /* line-height 1.35 = 'g' 꼬리까지 그라디언트 칠해짐(1.1이면 잘림) · translateY는 상자가 커진 만큼 재보정 */   /* 상단바는 밝은 배경 → 진한 골드 · translateY=삼선과 눈높이 맞춤(픽셀 실측 -0.2px) */
  .tb-user{display:none}   /* 모바일: 이름 숨겨 옵션·로그아웃 공간 확보 */
}

/* 로그인 */
.auth{min-height:100vh; display:flex; align-items:center; justify-content:center; padding:20px}
.brand{font-size:22px; margin:0 0 4px}
.sub{color:var(--muted); margin:0 0 22px}
form label{display:block; margin:0 0 16px; font-weight:500}
/* ⚠️ input·select는 글꼴을 물려받지 않는다(브라우저 기본=OS 글꼴). 지정하지 않으면 윈도우에서 본문과 다른 글꼴로 나온다.
   textarea·button에는 이미 font-family:inherit이 있었는데 이 둘만 빠져 있었음(2026-07-27 나쿤이 윈도우에서 발견). */
input, select{font-family:inherit}
/* 코드·경로 표시 - 고정폭은 영문·숫자에만 쓰고 한글은 본문 글꼴이 받게 한다
   (한글에 고정폭을 걸면 윈도우에서 굴림체로 떨어져 본문과 확 달라진다) */
code{font-family:ui-monospace,SFMono-Regular,'SF Mono',Consolas,'Liberation Mono',Menlo,'Wanted Sans',monospace}
/* ★ 입력칸 높이 = 앱 전체 46px 하나(2026-07-28 나쿤 확정). 입력칸·선택칸·툴바 버튼 전부 46px.
   ⚠️ 높이를 고정할 땐 위아래 패딩을 0으로 - 남겨두면 내용영역이 줄어 글자가 잘린다.
   여러 줄 칸(textarea)만 예외. */
input{
  display:block; width:100%; margin-top:7px; padding:0 14px; height:46px; font-size:17px;
  border:1px solid var(--field-bd); border-radius:10px; background:var(--field); color:var(--fg);
}
/* 포커스링(선택 테두리) 전면 제거 - 2026-07-27 나쿤 요청.
   브라우저 기본 링까지 나오지 않게 전역으로 끈다. 입력칸은 테두리 색만 바뀌어 어디에 쓰는지 보이게 유지 */
:focus, :focus-visible{outline:none !important}
input:focus{border-color:var(--primary)}
.pw-wrap{position:relative; display:block; margin-top:7px}
.pw-wrap input{margin-top:0; padding-right:54px}
.pw-wrap .pw-toggle{position:absolute}   /* 카드 안 클릭영역 규칙(.card button{position:relative})에 밀려 입력칸 밖으로 떨어지던 것 - 클래스 2개라 그 규칙을 이긴다(2026-07-28) */
.pw-toggle{border-radius:8px; position:absolute; right:6px; top:50%; transform:translateY(-50%); background:none; border:0; color:var(--muted); font-size:14px; cursor:pointer; min-height:34px; padding:8px 12px}   /* 입력칸(46px) 안에 겹치는 토글 - 규격 예외(34px), 모바일은 아래에서 44px */
.pw-toggle:hover{color:var(--fg)}
.btn{
  display:inline-flex; align-items:center; justify-content:center; width:auto;
  min-height:46px; padding:11px 22px; font-size:16px; font-weight:600;
  border:0; border-radius:10px; cursor:pointer;
}
a.btn{text-decoration:none}
.btn-block{width:100%}
.btn-primary{background:var(--primary-bg); color:var(--on-primary)}
.btn-primary:hover{background:var(--primary-bg-h)}
.alert{
  background:var(--alert-bg); color:var(--alert-fg); border:1px solid var(--alert-bd);
  padding:12px 14px; border-radius:10px; margin-bottom:18px; font-size:16px;
}
.alert-ok{background:var(--ok-bg); color:var(--ok-fg); border-color:var(--ok-fg)}
/* 작업 완료 1회용 알림(플래시) - 모든 페이지 상단 */
.container.flash-wrap{padding-top:22px; padding-bottom:0}
.flash-msg{margin:0; font-weight:600; box-shadow:0 2px 10px rgba(0,0,0,.08)}
/* 일시 알림(저장됨 등)은 레이아웃 위에 떠서 표시 - 나타나고 사라져도 아래 내용이 0px도 안 움직임.
   상시 경고 배너(메일 미검증 등)는 페이지 로드 때부터 있어 밀림이 없으므로 흐름 유지. */
.flash-float{position:fixed; top:66px; left:230px; right:0; z-index:1200; padding-top:0; pointer-events:none}
.flash-float .flash-msg{pointer-events:auto; box-shadow:0 10px 30px rgba(0,0,0,.22); animation:flash-in .22s ease}
@keyframes flash-in{from{transform:translateY(-10px); opacity:0} to{transform:none; opacity:1}}
@media (max-width:900px){ .flash-float{left:0} }   /* 모바일: 사이드바가 서랍이라 전체 폭 */

/* 대시보드 */
.stats{display:grid; grid-template-columns:repeat(auto-fit,minmax(160px,1fr)); gap:16px; margin-top:22px}
.stat{background:var(--card); border:1px solid var(--border); border-radius:14px; padding:24px; text-align:center}
.stat .num{font-size:34px; font-weight:700; color:var(--primary); line-height:1.1}
.stat .lbl{color:var(--muted); margin-top:8px}

@media (max-width:900px){
  body{font-size:16px}
  .container{padding:18px 14px}
  /* 카드 안쪽 여백은 PC와 같은 24px로 통일(2026-07-27 나쿤 요청) - 예전엔 22px이라 화면마다 달라 보였다 */
}

/* ===== 공통 폼·표 (온보딩·관리자) ===== */
.row-between{display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap}
/* 표 제목(열 머리글) 중앙정렬 - 금액 등 오른쪽정렬 지정 칸은 인라인 style이 우선 */
.tbl thead th{text-align:center}
/* ── 표 정렬: 모든 표의 머리글·내용을 가운데로 통일(2026-07-28 나쿤 요청) ──────────────
   예전엔 「첫 열(기업·이름)은 왼쪽」·「글자 열(.tl·.th-l)은 왼쪽」 예외가 있었는데,
   열마다 정렬이 달라 줄이 들쭉날쭉해 보였다. 일단 전부 가운데로 두고,
   써 보다 어색한 열만 아래 세 줄을 center → left 로 바꿔 되살린다.
   ※ 모바일 카드형(table.tbl-cards)은 라벨+값 구조라 왼쪽 정렬이 맞다 - 아래쪽 블록에서 별도 처리. */
.tbl-mid tbody td{text-align:center}
.tbl-mid thead th:first-child, .tbl-mid tbody td:first-child{text-align:center}   /* ← 되살리려면 left */
.tbl-mid .tl{text-align:center}                                                   /* ← 되살리려면 left */
.tbl thead th.th-l{text-align:center}                                             /* ← 되살리려면 left */
.tbl-mid tbody td.td-c, .tbl-mid thead th.td-c{text-align:center}
.tbl tbody td.td-c{text-align:center}
/* 카드 머리 아래 정보줄(프로그램·진행일·제출기한) - PC는 한 줄에 · 로 이어서, 모바일은 한 줄씩(2026-07-28 나쿤) */
@media (max-width:900px){
  .meta-line > span{display:block}
  .meta-line .sep{display:none}
}
/* 카드 안 항목 라벨 - 표 카드형의 data-label과 같은 모양.
   PC에서도 보인다(표에 머리글이 있는 것과 같은 역할 - 값만 나열하면 무엇인지 모른다) */
.mlab{font-style:normal; color:var(--muted); font-weight:600; font-size:14px; margin-right:3px}   /* 최소 14px 규칙(글자 7단) */
/* 모바일 카드에서 줄 리듬을 「진행 중·배정현황」 카드와 똑같이 맞춘다(2026-07-28 나쿤 「줄간격이 다르다」).
   그 카드들은 값 16px · 칸 패딩 3px 0 이라 줄높이 32px·중심간격 33px가 된다.
   여기만 .small(14px)이라 줄높이 23px로 촘촘하고 뱃지 줄만 30px이라 간격이 30/30/26/26로 들쭉날쭉했다. */
@media (max-width:900px){
  .rv-head .meta-line{font-size:16px}
  .meta-line > span{display:block; padding:3px 0; margin-top:0; min-height:26px}
  /* 제목↔첫 줄 틈도 카드 표와 같게 - 표에선 제목칸 아래 여백 6px이 전부다(9px 간격이 더 벌어져 보였다) */
  .rv-head > .rv-head-txt{gap:0}                      /* 클래스 2개 - 아래쪽 .rv-head-txt{gap:9px}를 이겨야 한다 */
  .rv-head > .rv-head-txt > .rv-name{padding-bottom:3px}
}

/* 금액 열은 예외로 오른쪽(2026-07-28 나쿤) - 자릿수가 세로로 맞아야 읽힌다.
   tabular-nums = 숫자 폭을 모두 같게 해 1과 8이 섞여도 자리가 안 흔들린다. */
.tbl thead th.num, .tbl tbody td.num{text-align:right; font-variant-numeric:tabular-nums}
/* 넓은 관리 표를 화면 폭에 맞춤(좌우 스크롤 방지) - 고정 레이아웃 + 긴 값 줄바꿈 */
.tbl-fixed{table-layout:fixed}
.tbl-fixed th, .tbl-fixed td{overflow-wrap:anywhere}
/* 배정현황 표: 긴 값(장소·분야·프로그램)을 줄바꿈해 화면 폭에 맞춤(좌우 스크롤 제거) - .tbl 전역 nowrap을 이 표에서만 해제. 한글은 단어(띄어쓰기) 단위로 끊음. (.tbl.tbl-assign 로 명시도를 .tbl td 보다 높여 뒤늦게 선언된 nowrap을 덮음) */
.tbl.tbl-assign th, .tbl.tbl-assign td{white-space:normal; word-break:keep-all; padding:12px 9px}   /* 열이 많아(최대 11) 좌우 패딩을 조밀하게 - 좁은 노트북 폭에서도 스크롤 없이 들어가게 */
.tbl.tbl-assign .row-actions{gap:4px}                         /* 액션 버튼 간격 축소 */
.tbl.tbl-assign .row-actions .btn-sm{padding:6px 10px; font-size:14px}   /* 여백만 조밀하게, 높이는 규격 36px 유지 */   /* 액션 버튼(재발송·관리·삭제)을 조밀하게 해 한 줄 유지 + 표 폭 확보 */
/* 모바일: 좁은 폰 화면에서 고정폭 표가 칸 뭉개져 글자 겹치던 것 방지 - 최소폭 유지해 좌우 스크롤(위 "옆으로 밀면" 힌트). 데스크탑은 영향 없음 */
@media (max-width: 768px){
  .tbl-fixed{min-width: 860px}
}
.sec-title{font-size:19px; margin:40px 0 12px; padding-top:24px; border-top:1px solid var(--border)}
.sec-title:first-of-type{border-top:0; padding-top:0; margin-top:14px}
.form-card{margin-top:16px}
/* 짧은 입력칸은 넓은 본문에서도 늘어지지 않게 폭 제한 */
.form-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:0 18px}   /* 가로로 채워 넓은 화면 여백 제거(좁으면 자동 줄바꿈) */
@media (max-width:560px){ .meta-grid{grid-template-columns:1fr} }
/* 날짜 + 시간 + 장소/금액 줄 - 윗줄(.form-row-4)과 같은 4등분 격자.
   칸마다 폭이 다르면 위아래 줄이 어긋나 보인다(2026-07-29 나쿤). 항목이 5개 이상이면 같은 격자의 다음 줄로 이어진다. */
.dt-row{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:6px 18px; align-items:end}
.dt-row > label{margin:0 0 4px; min-width:0}
/* 항목이 3개뿐인 줄(심화상담·시간 없는 보고서)은 3등분 - 4등분이면 오른쪽 한 칸이 비어 보인다 */
@media (min-width:1401px){ .dt-row:has(> :nth-child(3):last-child){grid-template-columns:repeat(3,minmax(0,1fr))} }
/* 공용 시간 입력 - 오전/오후 + 시/분(숫자 입력 + 증감 버튼) */
/* 4등분 칸 안에 들어가야 하므로 칸 폭에 맞춰 줄어든다(줄바꿈 금지 - 접히면 아랫줄이 밀린다).
   「시」·「분」 글자는 빼고 가운데 「:」로 - 빈 칸엔 placeholder가 시/분을 알려준다(2026-07-29). */
.timepick{display:flex; align-items:center; gap:5px; flex-wrap:nowrap; margin-top:4px; min-width:0}
.timepick .tp-ampm{width:auto; min-width:66px; margin:0; flex:0 0 auto}
.timepick .tp-sep{color:var(--muted); font-size:17px; flex:0 0 auto}
.timepick .stepper{flex:1 1 0}
.stepper{display:inline-flex; align-items:stretch; border:1px solid var(--field-bd); border-radius:10px; overflow:hidden; background:var(--field); height:46px; min-width:0}
.stepper input[type=number]{width:auto; flex:1 1 0; min-width:32px; text-align:center; border:0; margin:0; padding:0; background:transparent; color:var(--fg); font-size:16px; -moz-appearance:textfield}
.stepper input[type=number]::-webkit-outer-spin-button, .stepper input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none; margin:0}
.stepper button{width:34px; border:0; background:var(--soft); color:var(--fg); font-size:19px; line-height:1; cursor:pointer; padding:0; flex:0 0 auto}
.stepper button:hover{background:var(--soft-h)}
.stepper .st-dn{border-right:1px solid var(--field-bd)}
.stepper .st-up{border-left:1px solid var(--field-bd)}
/* 드래그&드롭 업로드 */
[hidden]{display:none !important}   /* hidden 속성은 무조건 숨김 - 체크박스 inline-block 규칙(362행대)이 navtoggle 등을 되살리는 회귀 방지 +
                                     .form-row-3 등 레이아웃 클래스의 display:grid가 hidden을 이겨 열려버리는 것도 차단(2026-07-21 평가 생성폼) */
.dropzone{border:2px dashed var(--border); border-radius:14px; padding:22px 16px; text-align:center; cursor:pointer; background:var(--subtle); margin-top:7px; transition:border-color .15s, background .15s}
.dropzone:hover{border-color:var(--primary)}
.dz-over{border-color:var(--primary); background:var(--info-bg)}
.dz-msg{color:var(--muted)}
.dz-link{color:var(--primary); text-decoration:underline}
.dz-files{margin-top:10px; display:flex; gap:8px; flex-wrap:wrap; justify-content:center; overflow-wrap:anywhere}   /* 긴 파일명만 필요할 때 접힘(단어 중간 절단 최소화) */
select,textarea{
  display:block; width:100%; margin-top:7px; padding:0 12px; font-size:17px;
  border:1px solid var(--field-bd); border-radius:10px; background:var(--field); color:var(--fg);
}
select{height:46px}   /* 입력칸과 같은 46px(여러줄칸 textarea는 제외) */
textarea{padding:12px}   /* 여러 줄 칸은 위아래 여백 유지 */
select:focus,textarea:focus{border-color:var(--primary)}
input[type=file]{padding:10px; background:var(--subtle); cursor:pointer; font-size:16px}
.consent-box{
  background:var(--subtle); border:1px solid var(--border); border-radius:10px;
  padding:16px 18px; font-size:16px; line-height:1.7; max-height:230px; overflow:auto;
}
.consent-box p{margin:0 0 8px}
.check-row{display:flex !important; align-items:center; gap:10px; margin:14px 0 6px !important; font-weight:600}
.check-row input{width:22px; height:22px; margin:0; flex:0 0 auto}
/* 라이트에서 배경과 묻혀 안 보이던 문제(2026-07-23 나쿤) - 테두리를 줘 버튼임이 드러나게. 다크도 같은 토큰이라 자연스러움 */
.btn-secondary{background:var(--soft); color:var(--fg); border:1.5px solid var(--field-bd)}
.btn-secondary:hover{background:var(--soft-h); border-color:var(--muted)}
.btn-inline{width:auto; height:46px; min-height:44px; padding:10px 18px; font-size:16px}   /* 높이 고정 - a와 button의 2px 차이 제거(2026-07-26) */
.btn-sm{width:auto; height:38px; min-height:38px; padding:7px 13px; font-size:14px; min-width:0; margin-top:0}   /* 표 안 행 액션용 - 높이 고정(a/button 2px 차이 제거, 2026-07-26) */
/* 접이식 보조 설정 */
.settings-fold{margin-top:40px; border-top:1px solid var(--border); padding-top:10px}
.settings-fold > summary{cursor:pointer; font-size:19px; font-weight:700; padding:12px 0; list-style:none}
.settings-fold > summary::-webkit-details-marker{display:none}
.settings-fold > summary::before{content:'▸  '; color:var(--muted)}
.settings-fold[open] > summary::before{content:'▾  '}
.small{font-size:14px}
.center{text-align:center}
.quick{margin-top:18px}
/* 표 */
.table-wrap{margin-top:16px; padding:0; overflow:auto}   /* 규격 16(4의 배수) - 18px이면 form 안에서 여백이 새어 나와 어긋난다 */
.table-wrap:not(:last-child){margin-bottom:24px}   /* 표 다음에 텍스트·다음 표가 오면 여백 확보(디자인 완성도) */
.tbl{width:100%; border-collapse:collapse; font-size:16px}
.tbl th,.tbl td{padding:14px 22px; text-align:center; border-bottom:1px solid var(--border); white-space:nowrap}  /* 열 간격 통일 + 머리글·내용 모두 가운데(2026-07-28 나쿤 「모든 표 일괄 중앙」) */
.tbl th{background:var(--subtle); color:var(--muted); font-weight:600; font-size:14px}
.tbl tr:last-child td{border-bottom:0}
.badge{display:inline-block; padding:4px 11px; border-radius:999px; font-size:14px; font-weight:600}
.badge.badge-long{min-width:0; white-space:normal; text-align:left; border-radius:14px; line-height:1.5}  /* 긴 경고문 뱃지 - 모바일 줄바꿈(.btn,.badge nowrap보다 우선) */
.badge-ok{background:var(--ok-bg); color:var(--ok-fg)}
.badge-wait{background:var(--wait-bg); color:var(--wait-fg)}
@media (max-width:900px){ .form-grid{grid-template-columns:1fr} }
@media (max-width:900px){   /* 모바일·태블릿: 기업표는 고정폭 대신 자동폭+가로스크롤(짓눌림 방지). table.* = 특이도↑로 데스크탑 규칙 이김 */
  table.tbl-companies{table-layout:auto}
  table.tbl-companies th, table.tbl-companies td{white-space:nowrap; word-break:normal}
  table.tbl-companies colgroup{display:none}
}

/* ===== 보고서 루프 ===== */
.badge-info{background:var(--info-bg); color:var(--info-fg)}
.badge-no{background:var(--no-bg); color:var(--no-fg)}
.alert-warn{background:var(--warn-bg); color:var(--warn-fg); border:1px solid var(--warn-bd)}
.assign-card{margin-top:16px}
.company-name{font-size:19px; font-weight:700}
.tbl.mini{margin-top:14px; font-size:16px; table-layout:fixed}   /* 카드마다 있는 표라 고정폭이라야 카드끼리 열이 맞음 */
.tbl.mini th,.tbl.mini td{padding:10px 12px; white-space:normal; word-break:keep-all}
.tbl.mini td.td-c{white-space:nowrap}                            /* 일자·상태·버튼은 한 줄 */
.tbl-companies{table-layout:fixed}
.tbl-companies th,.tbl-companies td{padding:14px 11px; white-space:normal; word-break:keep-all; overflow-wrap:anywhere; vertical-align:top}   /* 단어 단위 줄바꿈 · 긴 이메일·URL만 강제 분할 */
.tbl-notices th,.tbl-notices td{white-space:normal; word-break:keep-all; vertical-align:top}
/* 날짜는 한 줄로 - 표 폭이 좁아도 「2026-06-」/「27」처럼 접히면 읽기 어렵다(2026-07-27 나쿤 지적) */
.tbl-notices td:nth-child(4), .tbl-notices th:nth-child(4){white-space:nowrap}
.nowrap, td.nowrap, .dl-line{white-space:nowrap}
/* 공지 구분 열: 📌 고정폭 슬롯으로 배지 시작점 정렬 + 배지 폭 통일(공지/업데이트 균형) */
.notice-gubun{white-space:nowrap}
.notice-gubun .pin-slot{display:inline-block; width:18px; margin-right:6px; text-align:center}   /* 아이콘과 알약이 붙어 보여 한 칸 띄움(2026-07-27) */
.badge-gubun{min-width:54px; text-align:center}
.badge-gray{background:var(--soft); color:var(--muted)}
.prog-ended td{opacity:.55}   /* 종료(비활성) 프로그램 행 흐리게 */
/* 서명 위젯: 컨트롤 한 줄 + 현재 서명 미리보기 */
.sig-toolbar{display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-bottom:10px}
.sig-current{display:flex; gap:10px; align-items:center; flex-wrap:wrap; margin:0 0 10px}
.sig-current-img{height:60px; max-width:280px; background:#fff; border:1px solid var(--border); border-radius:8px; padding:4px 10px; object-fit:contain}
@media (max-width:900px){ .tbl-notices th:nth-child(n+3), .tbl-notices td:nth-child(n+3){display:none} }
.tbl-companies td:nth-child(5){white-space:nowrap}   /* 연락처(5번째 열): 전화번호 줄바꿈 방지 */
/* 체크박스 열(첫 칸): 20px 체크박스가 34px 칸을 넘지 않게 패딩 축소·가운데 정렬,
   전역 input margin-top(7px) 제거로 옆 칸 글자와 상단 맞춤(겹침·세로 어긋남 방지) */
.tbl-companies th:first-child, .tbl-companies td:first-child{padding-left:6px; padding-right:6px; text-align:center}
.tbl-companies th:first-child input[type=checkbox], .tbl-companies td:first-child input[type=checkbox]{display:inline-block; margin:0; vertical-align:top}
/* 기업 목록 툴바: 프로그램별 보기·검색·(선택개수)·대상프로그램·복제/이동/삭제를 한 줄로.
   긴 프로그램명은 셀렉트 최대폭으로 잘라(…) 한 줄 유지, 좁아지면 flex 줄바꿈(좌우 스크롤 없음) */
.co-toolbar{display:flex; flex-wrap:wrap; gap:8px 10px; align-items:center; margin:0 0 12px}
.co-toolbar select{width:auto; min-width:140px; max-width:240px; margin:0}
/* 검색 툴바(필터·검색칸·그 줄 버튼)도 같은 46px - 한 줄에 나란히 서므로 높이가 어긋나면 안 된다 */
.co-toolbar .btn, .co-toolbar button{ height:46px; min-height:46px }
.co-toolbar input:not([type=checkbox]):not([type=radio]), .co-toolbar select,
.prog-filter, .date-filter, .search-inp, .co-tb-search{
  height:46px; min-height:46px; padding-top:0; padding-bottom:0 }
/* 목록 검색칸 통일 - 크기·모양·오른쪽 정렬을 전 페이지 공통으로 */
.search-inp{display:block; width:300px; max-width:100%; margin:0; padding:0 14px; font-size:17px}   /* 위 필터 규칙과 같은 44px - 위아래 패딩을 0으로 둬야 글자가 안 잘린다(2026-07-28) */
.search-right{display:flex; justify-content:flex-end; margin:12px 0 0}
.co-toolbar .co-tb-search{width:300px; max-width:100%; margin:0 0 0 auto; padding:0 14px; font-size:17px}   /* 폭은 .search-inp와 통일(300px), 위치만 오른쪽 · 위아래 패딩 0(44px 규격) */
/* 검색형 콤보박스(멘토 배정 등) - 한 줄 입력 + 아래로 뜨는 목록(레이아웃 높이 안 밀림) */
.mentor-combo{position:relative; margin-top:7px}
.mentor-combo > input[type=text]{margin:0}
.combo-list{position:absolute; top:calc(100% + 3px); left:0; right:0; z-index:30; background:var(--card); border:1px solid var(--field-bd); border-radius:10px; max-height:260px; overflow:auto; box-shadow:0 10px 28px rgba(0,0,0,.14); padding:4px}
.combo-item{padding:9px 11px; border-radius:8px; cursor:pointer; font-size:16px}
.combo-item:hover{background:var(--soft)}
/* ⚠️ 목록이 뒤 요소에 덮이던 것(2026-07-29 나쿤): 부모 <label>이 `.card ... label{position:relative; z-index:2}`로
   z:2 「층」을 만들어 목록의 z-index:30이 그 층 안에 갇힌다 → 뒤에 오는 같은 z:2 요소(시간 스테퍼·장소칸)가 위로 올라온다.
   그 층 자체를 올린다(3 - 상단 고정바 22·상단바 30보다 낮게 둬서 그쪽은 그대로 덮이게).
   ※ 「열려 있을 때만」(`:has(.combo-list:not([hidden]))`)으로 걸면 닫힌 상태를 감사가 못 잡으므로 항상 건다. */
.card label:has(> .mentor-combo), .card label:has(> * > .combo-list){z-index:3}
@media (max-width:900px){ .search-inp,.search-right{width:100%} .search-right{justify-content:stretch} .co-toolbar .co-tb-search{margin-left:0} }
.nara-adm{display:contents}   /* PC: 도구줄의 직접 항목처럼(모바일에서만 격자) */
.co-toolbar .co-tb-sep{width:1px; align-self:stretch; background:var(--border); margin:2px 4px}
/* 목록 필터 칩(역할·상태 등) */
.chip-group{display:inline-flex; gap:4px; flex-wrap:wrap}
.chip{font:inherit; font-size:14px; min-height:36px; padding:6px 14px; border:1px solid var(--border); background:var(--card); color:var(--muted); border-radius:999px; cursor:pointer; white-space:nowrap}
.chip:hover{background:var(--soft); color:var(--fg)}
.chip.is-on{background:var(--info-bg); color:var(--info-fg); border-color:var(--info-fg); font-weight:600}
/* 기업 등록 폼: 4열 채움(2줄). 넓은 화면 여백 제거, 좁으면 2열→1열 */
.co-reg-grid{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:0 18px}
@media (max-width:1024px){ .co-reg-grid{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:600px){ .co-reg-grid{grid-template-columns:1fr} }
/* 현황 입력 상단: 기준일 + '새 스냅샷' 체크 한 줄, 하단 기준 정렬(줄 틀어짐·여백 방지) */
.snap-row{display:flex; gap:14px 28px; align-items:flex-end; flex-wrap:wrap; margin-bottom:4px}
.snap-row > label:first-child{flex:0 0 auto; min-width:200px}
.snap-chk{align-items:flex-start !important; gap:8px; padding-bottom:9px; flex:1 1 300px; line-height:1.4}
.snap-chk input{margin-top:1px}
/* 새 배정 폼: 줄별 고정 열(1줄=4칸, 2줄=3칸) - 각 줄이 화면을 가득 채움, 좁으면 2열→1열 */
.form-row-4{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:0 18px}
/* 창이 좁을 때 4열을 유지하면 칸이 240px 밑으로 떨어져 시간 입력칸에 숫자 두 자리가 안 들어간다 → 2열로(2026-07-29).
   두 줄(.form-row-4·.dt-row)이 같은 지점에서 함께 접혀야 열 폭이 어긋나지 않는다. */
@media (max-width:1400px){ .form-row-4,.form-row-3,.dt-row{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:600px){ .form-row-4,.form-row-3,.dt-row{grid-template-columns:1fr} }
.btn:disabled, .btn[disabled]{opacity:.45; cursor:not-allowed}
select:disabled{opacity:.55; cursor:not-allowed}
@media (max-width:900px){ .co-toolbar .co-tb-sep{display:none} }   /* 모바일: 구분선 숨김 */
.btn-row{display:flex; gap:12px; margin-top:8px; flex-wrap:wrap}
.btn-row .btn{width:auto; min-width:130px; margin-top:0}
/* 폼 작업 버튼 고정 바 - 스크롤해도 상단 우측에 항상 보이게(저장·제출 놓치지 않게) */
/* 설정 탭 바가 있는 화면에선 그 아래에 붙는다(--stabs-h는 base.html이 실제 높이를 재서 넣는다. 없으면 0) */
.form-actions .fa-left{margin-right:auto}       /* 왼쪽 끝에 붙일 묶음이 필요할 때 */
.form-actions .fa-save{margin-left:14px}        /* 삭제 바로 옆이라 저장은 조금 띄운다(오클릭 방지) */
.form-actions{position:sticky; top:calc(var(--tbh,54px) + var(--stabs-h, 0px)); z-index:22; display:flex; justify-content:flex-end; align-items:center; gap:10px; flex-wrap:wrap; margin:0 0 20px; padding:12px 0; background:var(--card); border-bottom:1px solid var(--border)}
.form-actions .fa-hint{margin-right:auto; color:var(--muted); font-size:14px; font-weight:600}
.form-actions .btn{width:auto; min-width:118px; margin-top:0}
@media(max-width:980px){ .form-actions .fa-hint{display:none} }
.char-count{margin:-8px 0 14px; text-align:right; font-weight:600}
.tab b{margin-left:4px}
.kv{display:flex; gap:12px; padding:8px 0; border-bottom:1px dashed var(--border)}
.kv span{width:110px; color:var(--muted); flex:0 0 auto}
/* 기업 현황: 긴 라벨이 두 줄로 접히지 않게 넓은 라벨열(내용에 따라 유연) + 어절 단위 줄바꿈 */
/* 현황 상세 - 짧은 항목은 2열, 긴 서술형(.kv-full)은 전체폭 */
.profile-view .kv-grid{display:grid; grid-template-columns:1fr 1fr; column-gap:36px}
.profile-view .kv-grid > .kv-full{grid-column:1 / -1; margin:8px 0 12px}
.profile-view .kv-full .field-label{color:var(--muted); font-weight:400; margin:0}     /* 긴 항목 라벨도 짧은 항목처럼 회색·보통 */
.profile-view .kv-longbox{white-space:pre-wrap; border-left:3px solid var(--border); padding:2px 0 2px 14px; margin-top:5px; word-break:keep-all; overflow-wrap:break-word; line-height:1.55; color:var(--fg)}   /* 박스 대신 옅은 왼쪽 선 */
.profile-view .kv{display:grid; grid-template-columns:minmax(150px,300px) 1fr; gap:10px 16px; align-items:baseline; padding:9px 0}
.profile-view .kv > span:first-child{width:auto; color:var(--muted); white-space:normal; word-break:keep-all; line-height:1.45}
.profile-view .kv b, .profile-view .kv .kv-val{word-break:keep-all; overflow-wrap:break-word; min-width:0; font-weight:400; color:var(--fg)}   /* 값도 보통 굵기 - 라벨(회색)과 색으로만 구분 */
@media (max-width:900px){ .profile-view .kv-grid{grid-template-columns:1fr; column-gap:0} }
@media (max-width:900px){ .profile-view .kv{grid-template-columns:1fr; gap:2px} }
.report-text{white-space:pre-wrap; line-height:1.8; background:var(--subtle); border:1px solid var(--border); border-radius:10px; padding:14px 16px; margin:0}
.thumbs{display:flex; gap:10px; flex-wrap:wrap}
.thumbs img{width:120px; height:120px; object-fit:cover; border:1px solid var(--border); border-radius:10px; display:block}
.thumb-del{position:relative; display:block; width:120px; height:120px; cursor:pointer}
.thumb-del img{transition:opacity .15s, filter .15s}
.thumb-del .thumb-x{position:absolute; top:6px; right:6px; width:24px; height:24px; border-radius:50%; background:rgba(0,0,0,.55); color:#fff; display:flex; align-items:center; justify-content:center; font-size:14px; line-height:1}
.thumb-del .thumb-badge{position:absolute; left:6px; bottom:6px; background:var(--danger); color:#fff; font-size:14px; font-weight:700; padding:2px 7px; border-radius:8px; display:none}
.thumb-del input:checked ~ img{opacity:.35; filter:grayscale(.5)}
.thumb-del input:checked ~ .thumb-x{background:var(--danger)}
.thumb-del input:checked ~ .thumb-badge{display:block}
.dz-thumb{width:88px; height:88px; object-fit:cover; border:1px solid var(--border); border-radius:8px; display:block}
.dz-item{position:relative; display:inline-block}
.dz-rm{position:absolute; top:-7px; right:-7px; width:20px; height:20px; padding:0; border:none; border-radius:50%; background:var(--danger); color:#fff; font-size:14px; line-height:1; cursor:pointer; box-shadow:0 1px 3px rgba(0,0,0,.3)}
.dz-rm:hover{filter:brightness(1.08)}
.dz-chip{background:var(--soft); border:1px solid var(--border); border-radius:8px; padding:3px 9px; font-size:14px; color:var(--muted)}
/* 검토 액션바 - 보고서 열자마자 상단 고정(확정·반려). 작성폼의 .form-actions와 같은 결 */
.review-bar{position:sticky; top:var(--tbh,54px); z-index:22; display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin:0 0 18px; padding:12px 16px; background:var(--card); border:1px solid var(--border);
  border-radius:14px; box-shadow:0 3px 14px rgba(0,0,0,.08)}
.review-bar .rb-hint{margin-right:auto; color:var(--fg); font-weight:600; font-size:14px}
/* PC: 사유 칸이 남는 폭을 다 채우고 그 뒤로 반려 → 확정 → 세부 수정이 한 줄
   (검토대기 카드와 같은 배치, 2026-07-28 나쿤). 폼을 투명하게 만들어야 같은 줄의 항목이 된다. */
.review-bar .rb-reject{display:contents}
.review-bar .rb-reject input{order:-1; flex:1 1 auto; min-width:0; width:auto; margin:0}
.review-bar > .btn{order:1}                 /* 「세부 수정」은 맨 뒤로 */
.review-bar .btn{margin-top:0; min-width:92px}
/* 모바일: 사유 칸은 한 줄 가득, 버튼들은 균등 분할(2026-07-28 나쿤 - 검토대기 카드와 같은 규칙).
   ⚠️ 예전엔 입력칸에 `min-width:0`이 없어 안내문구 길이만큼 자리를 잡고 **반려 버튼을 바 밖으로 밀어냈다**
      (320px에서 44px·360px에서 4px 넘침). flex 항목은 기본 min-width:auto라 내용보다 작아지지 못한다. */
@media(max-width:900px){
  /* grid로 나눈다 - flex(1 1 0)는 항목 종류가 섞이면 폭이 고르게 안 나뉜다(실측 119/119/81) */
  .review-bar{display:grid !important; gap:8px; padding:12px 14px}
  .review-bar:has(.rb-reject){grid-template-columns:repeat(3,1fr)}          /* 사유칸 + 버튼 3개 */
  .review-bar:not(:has(.rb-reject)){grid-template-columns:1fr}   /* 사유칸 없는 바 - 라벨이 길어 한 줄씩 가득 */
  .review-bar .rb-hint{grid-column:1 / -1; margin:0; font-size:14px}
  .review-bar .rb-reject{display:contents}                      /* 폼을 투명하게 - 입력칸·버튼이 바로 칸에 들어간다 */
  .review-bar .rb-reject input{order:-1; grid-column:1 / -1; width:100%; min-width:0; margin:0}
  .review-bar > .btn, .review-bar .rb-reject .btn,
  .review-bar > form:not(.rb-reject), .review-bar > form:not(.rb-reject) .btn{width:100%; min-width:0}
}
/* 설정 탭 - 조직 설정 | 내 계정 사이 구분선 */
/* 설정 탭 바는 스크롤해도 상단바 아래에 남는다(2026-07-29 나쿤).
   알약(.tabs)은 폭이 내용만큼이라 그것만 고정하면 옆으로 지나가는 본문이 그대로 보인다
   → 전체 폭 바깥 줄(.settings-tabs-bar)을 고정하고 그 줄을 배경색으로 덮는다.
   좌우 음수 여백은 .container의 좌우 여백과 같은 값(PC 40 · 모바일 14). */
.settings-tabs{align-items:center}
.settings-tabs-bar{position:sticky; top:var(--tbh,54px); z-index:21; background:var(--bg);
  margin:0 -40px; padding:14px 40px 0}
.settings-tabs-bar .settings-tabs{margin-bottom:20px}
@media (max-width:900px){ .settings-tabs-bar{margin:0 -14px; padding:12px 14px 0} }
.settings-tabs .tab-div{flex:0 0 auto; align-self:stretch; width:1px; min-height:24px; background:var(--border); margin:4px 8px}
@media (max-width:900px){ .settings-tabs .tab-div{display:none} }
/* 연도 선택기 - 전 목록 공용(전역 기억) */
.year-pick{display:inline-block; margin:0}
.year-pick select{width:auto; margin:0; padding:0 34px 0 13px; font-weight:700; font-size:16px; border-radius:10px; min-height:46px}
/* ===== UI/UX 다듬기(2026-07-03 분석 반영) ===== */
.btn, .badge{white-space:nowrap}                                   /* '수정'·'제출'이 세로로 꺾이지 않게 */
/* 고연령 사용자 클릭 편의 + 체크박스·라디오가 OS 다크 설정에 끌려가 '검은 네모/동그라미'로 나오는 것 방지.
   (meta color-scheme="light dark" 때문에, 배경은 라이트인데 폼 컨트롤만 다크로 그려지는 현상 - 요소에 직접 못박음) */
input[type=radio], input[type=checkbox]{width:20px; height:20px; accent-color:var(--primary); flex:0 0 auto; color-scheme:light;
  display:inline-block; vertical-align:middle; margin-top:0}   /* 일반 input{display:block} 상속 취소 → 라벨 글자와 같은 줄에(줄 갈라짐 방지) */
:root[data-theme="dark"] input[type=radio], :root[data-theme="dark"] input[type=checkbox]{color-scheme:dark}
/* 같은 이유로 선택칸(select)의 「펼침 목록」도 OS 다크에 끌려가 혼자 검게 나온다(2026-07-29 나쿤).
   목록은 브라우저가 그리는 부분이라 배경색으로 못 바꾸고 color-scheme으로만 지정된다 - 앱 테마에 못박는다. */
select, option, input[type=text], input[type=password], input[type=email], input[type=number], textarea{color-scheme:light}
:root[data-theme="dark"] select, :root[data-theme="dark"] option,
:root[data-theme="dark"] input[type=text], :root[data-theme="dark"] input[type=password],
:root[data-theme="dark"] input[type=email], :root[data-theme="dark"] input[type=number],
:root[data-theme="dark"] textarea{color-scheme:dark}
select option{background:var(--card); color:var(--fg)}   /* 목록 색을 직접 받아주는 환경(윈도우·안드로이드)에선 앱 색으로 */
a.todo{transition:border-color .15s, transform .1s}
a.todo:hover{border-color:var(--primary); transform:translateY(-1px)}   /* 대시보드 카드 = 클릭 가능함을 전달 */
/* 표가 옆으로 넘칠 때: '밀어서 보기' 힌트(JS가 has-scroll 부여) */
.table-wrap{position:relative}
.table-wrap.has-scroll::before{content:'⇠ 옆으로 밀면 더 보여요'; position:sticky; left:0; top:0; display:block;
  width:max-content; margin-left:auto; padding:3px 10px; font-size:14px; font-weight:600; color:var(--muted);
  background:var(--subtle); border-radius:0 0 0 8px; pointer-events:none}
@media (max-width:900px){
  .tbl.mini th:nth-child(3), .tbl.mini td:nth-child(3){display:none}       /* 내 멘토링: 장소 숨겨 수정 버튼 확보 */
  .tbl-progress th:nth-child(2), .tbl-progress td:nth-child(2){display:none} /* 검토 진행중·확정: 프로그램 숨김 */
  /* 검토 진행중·확정 표: 고정 % 열폭이 375px에선 짓눌려 글자가 옆 칸을 침범(겹침) → 기업표와 동일하게 자동폭+가로스크롤 */
  table.tbl-progress{table-layout:auto}
  table.tbl-progress colgroup{display:none}
  table.tbl-progress th, table.tbl-progress td{white-space:nowrap; word-break:normal}
  /* 배정현황 표(열 10개): 좁은 화면에서 전부 줄바꿈돼 행이 세로로 길쭉 → 줄바꿈 대신 가로스크롤(행 높이 일정) */
  .tbl.tbl-assign th, .tbl.tbl-assign td{white-space:nowrap; word-break:normal}
  /* 대시보드 주간현황 표(wk-tbl)도 tbl-assign이라 위 nowrap이 옮겨붙어 기업명이 옆 칸(멘토)으로 겹침 → 이 표만 줄바꿈 복원 */
  .tbl.tbl-assign.wk-tbl th, .tbl.tbl-assign.wk-tbl td{white-space:normal; word-break:keep-all}
  /* 사용자 표: overflow-wrap:anywhere가 '관리자'를 '관리/자'로 중간 절단 → 이름·이메일만 줄바꿈 허용, 나머지는 한 줄 */
  .tbl-users th:nth-child(n+3), .tbl-users td:nth-child(n+3){white-space:nowrap; overflow-wrap:normal}
  /* 고정 %폭+nowrap 조합이 좁은 화면에서 배지(+멘토·지급정보)가 옆 칸 위로 겹치게 함
     → 기업표(tbl-progress)와 동일하게 자동폭+가로스크롤. 전 셀 한 줄(이름이 세로 한 글자씩 찌그러지는 것 방지) */
  table.tbl-users{table-layout:auto}
  table.tbl-users colgroup{display:none}
  /* 특이도 table.* 로 - admin_users.html 페이지 내 스타일(white-space:normal)이 소스 순서로 이기는 것 차단 */
  table.tbl-users th, table.tbl-users td{white-space:nowrap; word-break:normal; overflow-wrap:normal}
}
/* ===== 검토 보드 (보고서 검토 한 페이지) ===== */
/* 보고서 검토 섹션 제목 - .sec-title과 완전히 같은 모습으로 통일(구분선·여백까지, 2026-07-26 일관성 감사) */
.rv-sec{font-size:19px; font-weight:700; margin:40px 0 12px; padding-top:24px; border-top:1px solid var(--border); scroll-margin-top:112px}
.rv-group:first-of-type .rv-sec{border-top:0; padding-top:0; margin-top:14px}   /* 첫 섹션은 선 없이(.sec-title:first-of-type과 동일) */
.rv-done-bar .rv-sec{border-top:0; padding-top:0}                               /* 접이식 바 안에서는 선 제거(레이아웃 보호) */
.rv-card{background:var(--card); border:1px solid var(--border); border-radius:14px; margin:10px 0; overflow:hidden}
.rv-head{display:grid; grid-template-columns:1fr auto; align-items:start; gap:9px; padding:13px 15px; cursor:pointer}
.rv-head-txt{display:flex; align-items:center; gap:9px; flex-wrap:wrap; min-width:0}   /* 글자만 접히고 ▾는 항상 오른쪽 끝 같은 줄 */
.rv-head:hover{background:var(--subtle)}
.rv-name{font-weight:700; font-size:16px; flex:1 1 100%}   /* 제목은 한 줄 차지(유형 뱃지는 아래 라벨줄로 내려감) */
.rv-chev{margin:3px 0 0; background:none; border:0; color:var(--muted); font-size:16px; cursor:pointer; padding:4px 6px; line-height:1; flex:0 0 auto}
.rv-chev span{display:inline-block; transition:transform .18s}
.rv-card.col .rv-chev span{transform:rotate(-90deg)}
.rv-act{display:flex; align-items:center; gap:8px; flex-wrap:wrap; padding:11px 15px; background:var(--subtle); border-top:1px solid var(--border)}
/* PC: 사유 칸이 남는 폭을 다 채우고 그 뒤로 반려 → 확정 → 자세히가 한 줄(2026-07-28 나쿤).
   폼을 display:contents로 투명하게 만들어야 입력칸·반려가 다른 버튼들과 같은 줄의 항목이 된다. */
.rv-reject{display:contents}
.rv-act .rv-reject input{flex:1 1 auto; min-width:0; width:auto; margin:0}
.rv-act .btn{height:46px; min-height:46px; flex:0 0 auto}   /* 같은 줄 입력칸(46px)과 높이 맞춤 */
.rv-body{padding:4px 15px 15px}
.rv-meta{font-size:14px; color:var(--muted); border-bottom:1px solid var(--border); padding:9px 0; margin-bottom:4px}
.rv-meta b{color:var(--fg); font-weight:600}
.rv-meta > span{color:var(--fg)}   /* 값은 본문색 - 예전 <b>가 하던 역할(라벨만 흐리게) */
.rv-fl{font-size:14px; font-weight:700; color:var(--muted); margin:13px 0 3px}
.rv-fl.rv-h{font-size:16px; color:var(--fg); border-bottom:1px solid var(--border); padding-bottom:5px; margin-top:16px}
.rv-fl b{color:var(--primary)}
.rv-tv{font-size:16px; line-height:1.65; white-space:pre-wrap; margin:0}
.rv-swot{display:grid; grid-template-columns:1fr 1fr; gap:6px 16px; font-size:14px; line-height:1.55; margin-top:4px}
.rv-card.col .rv-act, .rv-card.col .rv-body{display:none}
.rv-arch > summary .rv-sec{display:inline-block; margin:0}
.rv-arch > summary .rv-sec::before{content:'▸  '; color:var(--muted)}
.rv-arch[open] > summary .rv-sec::before{content:'▾  '}
/* 모바일: 사유 칸은 한 줄 가득, 버튼 3개는 동일 분할 + 가득(나쿤 공용 규칙) */
@media(max-width:900px){
  /* ▾ 화살표는 공용 button 44px 규격에 걸려 커지면 첫 줄에서 밀려난다 - 크기는 그대로, 누르는 영역만 44px */
  .rv-chev{ min-height:0; height:auto; position:relative }
  .rv-chev::after{ content:''; position:absolute; left:50%; top:50%; width:44px; height:44px; transform:translate(-50%,-50%) }
  .rv-act{display:grid !important; grid-template-columns:repeat(3,1fr); gap:8px}
  .rv-reject{display:contents}                      /* 폼을 투명하게 - 안쪽 입력칸·버튼이 바로 grid 칸이 된다 */
  .rv-reject input{grid-column:1 / -1; width:100%; margin:0}
  .rv-act > form, .rv-act > .btn, .rv-act .btn{width:100%}
  .rv-swot{grid-template-columns:1fr}
}
textarea{font-family:inherit; line-height:1.7; resize:vertical}

/* ── 평가위원 초대 - 이름↔풀 검색 연동 안내줄 ── */
.jd-match{grid-column:1 / -1; margin:2px 2px 0; font-size:14px; color:var(--muted); line-height:22px; min-height:22px}   /* 빈 상태에도 정확히 한 줄 높이 확보 - 안내가 떠도 아래가 0px도 안 밀림 */
.jd-match.is-ok{color:var(--primary); font-weight:700}
.jd-match.is-no{color:var(--warn-fg); font-weight:700}

/* ── 프로그램 필터 셀렉트 - 모든 페이지 동일 크기(내용 길이에 따라 달라지지 않게) ──
   select.으로 특이도를 올려 페이지 로컬 규칙(.co-toolbar select의 max-width:240px 등)을 이긴다 */
/* 부모가 flex인 페이지(대시보드 등)라 width:100%가 안 먹으므로 flex-basis로 폭 확보 - 좁은 화면에선 카드·검색칸과 오른쪽 끝을 맞춤(2026-07-26) */
/* 기간 필터 입력(멘토 배정 등) - 프로그램 셀렉트와 같은 줄, 좁은 화면에선 한 줄 차지 */
input.date-filter{width:150px; min-width:0; margin-top:0; flex:0 0 auto; text-align:center}
/* ── 모바일 폼 배치 규칙(2026-07-27) - 폰 종류에 상관없이 같게 보이게 ──
   form-even-m : 한 줄에 있던 칸·버튼을 화면 폭에 맞춰 「균등 분할」(글자가 잘리지 않게 min-width:0)
   form-stack-m: 한 줄에 몰아넣으면 잘리는 폼을 「한 줄에 하나씩」 세로로 쌓음 */
@media (max-width:900px){
  /* ⚠️ 데스크탑용 인라인 style="flex:..."이 클래스를 이기므로 모바일 규칙엔 !important가 필요하다 */
  .form-even-m{flex-wrap:wrap}
  .form-even-m > *{flex:1 1 0 !important; min-width:0 !important}   /* 같은 줄에 놓인 것끼리 폭을 똑같이 나눈다 */
  .form-even-m > .m-full{flex:1 1 100% !important}                  /* 이 칸만 한 줄을 통째로 쓴다(긴 이름·주요 버튼) */
  .form-even-m > .m-hide{display:none}                              /* 좁은 화면에선 빼는 장식(물결표 등) */
  .form-even-m > label input, .form-even-m > label select{width:100%; min-width:0}
  .form-stack-m{flex-direction:column; align-items:stretch}
  .form-stack-m > *{flex:none !important; width:100% !important; min-width:0 !important}

  /* ── 「동일 분할 + 가득 채우기」 공통 적용(2026-07-28 나쿤) ──
     모바일에서 줄 오른쪽에 빈 공간이 남거나 칸 폭이 제각각이면 마감이 없어 보인다.
     ⚠️ 전부 이 미디어쿼리 안에만 둘 것 - PC 화면은 손대지 않는다. */

  /* 탭바(설정 8개·배정 2개 등): 한 줄에 들어가는 만큼 놓되 「그 줄」을 똑같이 나눠 가득 채운다.
     격자(grid)로 하면 마지막 줄이 안 늘어나 오른쪽이 비므로 flex-wrap + flex-grow를 쓴다 */
  .tabs{display:flex !important; flex-wrap:wrap; gap:6px; width:100%; margin-left:0}
  .tabs .tab{flex:1 1 72px; min-width:0; padding:10px 4px; text-align:center;
             overflow:hidden; text-overflow:ellipsis}
  .settings-tabs .tab-div{display:none}          /* 구분선은 줄을 깨뜨리므로 모바일에선 감춤 */

  /* 표 카드 안 버튼 묶음(재발송·관리·삭제 등)
     ⚠️ flex는 자식마다 안쪽 여백이 달라 폭이 미묘하게 어긋난다(버튼 120 vs 폼 94) →
        칸을 강제로 똑같이 나누는 grid(1fr)로 둔다 */
  .row-actions{display:grid !important; grid-auto-flow:column; grid-auto-columns:1fr; gap:6px; width:100%}
  .row-actions > *{min-width:0}
  .row-actions .btn{width:100%}

  /* 목록 툴바(필터·검색·복제/이동/삭제): 입력칸은 한 줄 전체(줄이지 않음), 버튼은 균등하게 가득 */
  .co-toolbar{width:100%}
  .co-toolbar > form, .co-toolbar > input, .co-toolbar > select{flex:1 0 100% !important; width:100% !important;
                                                              min-width:0 !important; max-width:none !important}   /* PC용 max-width:240px 해제 */
  .co-toolbar > .btn{flex:1 1 0 !important; min-width:0}

  /* 주소 + 열기·복사: 주소는 한 줄 전체, 버튼은 반반 */
  .stage-url-row{flex-wrap:wrap}
  .stage-url-row > .stage-url{flex:1 1 100% !important; min-width:0}
  .stage-url-row > .btn{flex:1 1 0 !important; min-width:0}
}
@media (max-width:900px){ input.date-filter{flex:1 1 44%; min-width:0} }
select.prog-filter{flex:0 1 360px; width:360px; max-width:100%; min-width:0; margin:0}
/* 모바일: 고정 360px이면 화면이 더 넓은 폰(S25 울트라 등)에서 짧아 보임 → 가로폭 가득(카드와 오른쪽 끝 일치) */
@media (max-width:900px){ select.prog-filter{flex:1 1 100%; width:100%; max-width:none} }

/* ── 공용 페이지네이션(base.html data-paginate) - 표·목록이 무한히 길어지지 않게 ── */
.pg-hide{display:none !important}
.pager{display:flex; align-items:center; justify-content:center; gap:6px; margin:16px 0 4px; flex-wrap:wrap; position:relative}
/* 페이지 버튼은 중앙, 「총 N개」는 오른쪽 구석(중앙정렬을 안 밀게 절대배치) - 2026-07-23 나쿤 */
.pager-btn{min-width:40px; height:40px; padding:0 12px; border:1.5px solid var(--border); border-radius:10px;
           background:var(--card); color:var(--fg); font:inherit; font-size:16px; cursor:pointer}
.pager-btn:hover:not(:disabled):not(.is-cur){border-color:var(--primary); color:var(--primary)}
.pager-btn.is-cur{background:var(--primary-bg); border-color:var(--primary-bg); color:#fff; font-weight:700; cursor:default}
.pager-btn:disabled{opacity:.4; cursor:default}
.pager-gap{color:var(--muted); padding:0 2px}
.pager-info{position:absolute; right:0; color:var(--muted); font-size:14px}
.td-c > .btn{vertical-align:middle}   /* 같은 칸 버튼들 기준선 통일(2026-07-23) */
/* 잠금 토글 알약(평가 목록) - 잠금=붉은 톤·해제=푸른 톤(배지 토큰과 동일 톤, 원색 금지) */
.lock-pill{border:0; border-radius:999px; padding:4px 11px; font:inherit; font-size:14px;
  font-weight:600; cursor:pointer; vertical-align:middle; line-height:1.6}
  /* ⚠️ 배지(.badge)와 「똑같이」 - 예전엔 height:28px 고정 + 굵기 700이라 같은 줄 배지(30px·600)보다
     2px 낮고 더 굵어 줄이 어긋나 보였다(2026-07-28 나쿤 지적). 값을 바꿀 땐 .badge와 함께 바꿀 것. */
.lock-pill.js-lockoff{background:var(--no-bg); color:var(--no-fg)}      /* 잠긴 상태 = 붉은 「잠금」 */
.lock-pill.js-lockoff:hover{background:var(--no-bd)}
.lock-pill.js-lockon{background:var(--info-bg); color:var(--info-fg)}   /* 풀린 상태 = 푸른 「해제」 */
.lock-pill.js-lockon:hover{filter:brightness(.95)}
@media (max-width:900px){ .pager-info{display:none} }  /* 좁은 화면에선 버튼과 겹치지 않게 숨김 */
@media (max-width:900px){ .pager-btn{min-width:44px; height:44px} }
.checkbox-list{display:flex; flex-wrap:wrap; gap:10px 18px; margin:4px 0 6px}
.chk{display:flex !important; align-items:center; gap:7px; margin:0 !important; font-weight:400}
.chk input{width:20px; height:20px; margin:0; flex:0 0 auto}
/* 배정 기업 고르기 - 검색되는 표(체크박스+기업명+아이템+대표자), 스크롤+헤더고정 */
.copick-tbl{max-height:340px; overflow:auto; margin:4px 0 8px}
.copick-tbl thead th{position:sticky; top:0; background:var(--card); z-index:1}
.copick-tbl tbody tr{cursor:pointer}
.copick-tbl tbody tr.on{background:var(--info-bg)}
.copick-tbl tbody td{vertical-align:middle}
.copick-tbl input[type=checkbox]{width:20px; height:20px}
.linkbtn{background:none; border:0; padding:0; color:var(--primary); cursor:pointer; font:inherit}
.linkbtn:hover{text-decoration:underline}
.field-label{font-weight:500; margin:10px 0 4px}
.co-card{background:var(--subtle); border:1px solid var(--border); border-radius:10px; padding:12px 16px; margin:8px 0 20px}
.co-card-top{font-size:16px}
.co-card-meta{margin-top:5px; line-height:1.65}

/* ===== 대시보드 ===== */
.todo-row{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:14px; margin:18px 0}
.todo{display:block; background:var(--card); border:1px solid var(--border); border-radius:14px; padding:18px; text-decoration:none; color:var(--fg); text-align:center}  /* 내 멘토링 카드와 정렬 통일(가운데) */
.todo-n{font-size:34px; font-weight:700; line-height:1}
.todo-l{color:var(--muted); margin-top:6px; font-size:16px}
.todo-on{border-color:var(--primary); box-shadow:inset 0 0 0 1px var(--primary)}
.todo-on .todo-n{color:var(--primary)}
.todo-warn .todo-n{color:var(--warn-fg)}
.todo-danger{background:var(--no-bg); border-color:var(--no-bd)}
.todo-danger .todo-n{color:var(--no-fg)}
/* 마감 임박 카드 클릭 → '확인 필요' 표로 점프 + 깜빡여 눈에 띄게(이미 보이는 경우도 반응 보이게) */
#alerts{scroll-margin-top:16px}
@keyframes flashcard{0%,100%{border-color:var(--border)}25%,75%{border-color:var(--no-fg); box-shadow:0 0 0 2px var(--no-bd)}}
#alerts:target{animation:flashcard 1.3s ease-in-out 2}
.card-title{font-size:19px; font-weight:700; margin:0 0 14px}   /* 카드 안 제목도 구역 제목과 같은 크기(17→19) */
/* ═══ 표 안 글자는 크기·굵기를 한 가지로 (2026-07-27 전면 통일) ═══
   ① .card-title은 원래 「카드 안 제목」용(19px)인데 모바일 카드형 표에서 「제목 줄」 표시로도 쓴다.
      그대로 두면 데스크탑 표에서도 19px가 먹어 첫 칸만 커진다 → 표 안에서는 크기를 상속.
   ② 굵게 쓰지 않는다: 구역 제목·그룹 머리가 이미 굵어서 표까지 굵으면 강조가 흐려진다(나쿤 지적).
      <b>는 브라우저 기본이 bolder라 가변폰트에서 900(Black)까지 튀어 뭉개지는 문제도 같이 사라진다.
   ③ .small(14px)이 섞여 「분야」 칸만 작아 보이던 것도 표 안에서는 무시 - 보조 정보는 색(muted)으로만 구분.
   ※ 모바일 카드형에서는 제목 줄만 굵게 유지(카드의 머리글 역할 - 아래 tbl-cards 규칙). */
table td.card-title{font-size:inherit; margin:0}
table td, table td b, table td strong, table td a,
table td.card-title, table td.card-title b, table td.card-title a{font-weight:400}
table td.small, table th.small{font-size:inherit}
.bar{height:10px; background:var(--soft); border-radius:999px; overflow:hidden}
.bar-fill{height:100%; background:var(--primary); border-radius:999px}
.recent-co{font-weight:600}
.card-overdue{border-color:var(--no-bd)}
.card-urgent{border-color:var(--warn-bd)}
@media (max-width:680px){ .dash-grid{grid-template-columns:1fr} }

/* ===== 유형별 보고서 양식 ===== */
.req{color:var(--danger); font-weight:700}
.score-field input{max-width:130px}
.score-line{margin:6px 0 12px}
.score-head{display:flex; justify-content:space-between; font-size:16px; margin-bottom:5px; gap:10px}

/* 진단 - 지표 한 줄 + SWOT 2x2 */
.indicator-row{display:grid; grid-template-columns:108px 76px 1fr; gap:10px; align-items:start; margin:0 0 12px}
.ind-label{font-weight:600; padding-top:13px}
.indicator-row input.ind-score, .indicator-row textarea.ind-desc{margin-top:0}
.ind-score{text-align:center}
.indicator-row.view{grid-template-columns:108px 70px 1fr; align-items:start}
.indicator-row.view .ind-label{padding-top:14px}
.ind-score-v{font-weight:700; padding-top:14px; white-space:nowrap}
.swot-grid{display:grid; grid-template-columns:1fr 1fr; gap:14px; margin:4px 0 6px}
.swot-cell{margin:0 !important}
.swot-cell textarea{margin-top:6px; min-height:160px}
.swot-h{font-weight:600; margin-bottom:6px}
.swot-cell .report-text{min-height:130px}
@media (max-width:560px){
  .indicator-row, .indicator-row.view{grid-template-columns:1fr}
  .ind-label, .indicator-row.view .ind-label, .ind-score-v{padding-top:0}
  .ind-score{max-width:120px}
  .swot-grid{grid-template-columns:1fr}
}

/* ===== 평가(서류·발표·상담회) =====
   폰트 스케일은 사이트 기준 그대로: 18px(구역 제목) / 16px(본문·입력) / 14px(보조설명·뱃지).
   인라인 style 남발 금지 - 이 블록의 클래스만 쓴다. */
.ev-kind{display:block; border:2px solid var(--border); border-radius:14px; padding:16px 18px; cursor:pointer; margin:0;
         background:transparent; font:inherit; color:inherit; text-align:left; width:100%;
         transition:border-color .15s, background .15s}
.ev-kind b{display:block; margin-bottom:4px; font-size:17px}
.ev-kind span{font-size:14px; line-height:1.5}
.ev-kind:hover{border-color:var(--primary); background:var(--info-bg)}
.ev-kind-grid{display:grid; grid-template-columns:repeat(auto-fit,minmax(230px,1fr)); gap:12px; margin-bottom:16px}

/* 평가항목 빌더(구글폼식) */
.crit-row .crit-del{color:var(--no-fg); padding:6px 0; min-width:0}

/* 평가위원 선택 리스트 */
.judge-box{display:flex; flex-direction:column; gap:2px; max-height:300px; overflow:auto;
  border:1px solid var(--field-bd); border-radius:10px; padding:10px}
.judge-row .jr-name{overflow:hidden; text-overflow:ellipsis; white-space:nowrap}

/* 평가위원 2단 구조(2026-07-22): ①신규 초대 ②이 평가회 위원(위원장·분과 지정) ③풀에서 추가 - 전부 박스 구분 */
.jd-box{border:1px solid var(--border); border-radius:10px; background:var(--card); overflow:hidden; margin-bottom:14px}
.jd-head{display:flex; align-items:center; gap:10px; padding:8px 13px; background:var(--soft);
  border-bottom:1px solid var(--border); font-weight:700; font-size:14px; flex-wrap:wrap}
.jd-head .muted{font-weight:600}
.jd-invite{display:grid; grid-template-columns:1fr 1fr 1fr 1fr auto;   /* 이름·소속·이메일·핸드폰 4등분 + 버튼 */
  gap:10px; padding:12px 13px; align-items:center}
.jd-invite input{margin:0}
.jd-invite .ev-bulk-hint{grid-column:1/-1; margin:0}
#jdPool.judge-box{border:0; border-radius:0; padding:0; gap:0; height:340px; max-height:none}   /* 바깥 jd-box가 테두리 담당 · 높이 고정 - 검색으로 행이 줄어도 화면이 안 움직이게 */
.jd-row{display:flex; align-items:center; gap:10px; padding:8px 13px; border-top:1px dashed var(--border)}
#jdPool .jd-row:first-child, #jdPicked .jd-row:first-child{border-top:0}
.jd-row .jr-name{flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:16px}
.jd-ctrl{display:inline-flex; gap:8px; align-items:center}
.jd-ctrl select{width:auto; min-width:104px; margin:0; padding:0 26px 0 10px; font-size:14px}
#jdPool .jd-row .jd-ctrl, #jdPool .jd-row .jd-rm{display:none}      /* 풀에서는 추가 버튼만 */
#jdPicked .jd-row .jd-add{display:none}                             /* 위원 목록에서는 컨트롤+빼기 */
.jd-chair{margin:0; font-size:14px; padding:7px 14px; cursor:pointer; user-select:none}
.jd-chair:has(input:checked){background:var(--primary-bg); color:#fff; border-color:var(--primary-bg); font-weight:700}

/* 자료 일괄 등록 박스 */
.ev-bulk{border:1px dashed var(--field-bd); border-radius:10px; padding:16px 18px; background:var(--soft); margin:22px 0 14px}   /* 위 「+ 기업 추가」 버튼과 간격 확보(2026-07-23) */
.ev-bulk-row .btn{margin-top:0}
.ev-bulk b{font-size:16px}
.ev-bulk .ev-bulk-hint{display:block; margin-top:8px; font-size:14px; color:var(--muted); line-height:1.55}

/* 한 줄 배치(설명 + 컨트롤) */
.ev-bar .btn{margin-top:0}
.ev-clock.warn{color:var(--wait-fg)} .ev-clock.over{color:var(--no-fg)}

/* ===== 위원 작업대(3열) ===== */
.ev-wrap{display:grid; grid-template-columns:262px 1fr 400px; gap:12px; padding:14px 18px;
  height:calc(100vh - 54px); box-sizing:border-box}
.ev-col{min-width:0; min-height:0; display:flex; flex-direction:column}
.ev-card{background:var(--card); border:1px solid var(--border); border-radius:14px; overflow:hidden;
  display:flex; flex-direction:column; min-height:0}
.ev-col > .ev-card:not(.ev-chair):not(.ev-chatcard){flex:1}   /* 열 높이는 평가표·자료가 가득 - 채팅 카드는 하단 고정(2026-07-23) */
.ev-head{padding:13px 15px; border-bottom:1px solid var(--border); font-weight:700; font-size:16px;
  display:flex; align-items:center; gap:8px; flex:0 0 auto}
.ev-head .ev-sub{font-size:14px; color:var(--muted); font-weight:400}
.ev-body{flex:1; overflow-y:auto; min-height:0}
.ev-co{display:flex; gap:8px; align-items:center; padding:12px 14px; border-bottom:1px solid var(--border);
  cursor:pointer; font-size:16px}
.ev-co:hover{background:var(--soft)}
.ev-co.on{background:var(--info-bg); font-weight:700}
.ev-co.now::before{content:'▶'; color:var(--primary); font-size:14px}
.ev-co .ev-co-no{color:var(--muted); font-size:14px; margin-right:2px}
.ev-co .st{margin-left:auto; font-size:14px}
.ev-co.exc{opacity:.45; cursor:not-allowed}
.ev-pdf{flex:1; border:0; width:100%; background:#525659}
/* PDF 한 페이지 뷰어(2026-07-23) - 어두운 판에 페이지를 가운데 맞춤 + 하단 페이지 바(콘솔식 「현재 / 전체」) */
.ev-pdfbox{flex:1; min-height:0; position:relative; display:flex; align-items:center; justify-content:center; background:#525659; overflow:hidden}
.ev-pdfbox canvas{display:block; background:#fff; box-shadow:0 2px 14px rgba(0,0,0,.4); cursor:pointer}
.ev-pgbar{position:absolute; left:0; right:0; bottom:0; display:flex; align-items:center; justify-content:center; gap:12px; padding:7px 0; background:rgba(20,22,26,.62)}
.ev-pgbar button{width:46px; height:34px; border:0; border-radius:8px; background:rgba(255,255,255,.16); color:#fff; font-size:14px; cursor:pointer}
.ev-pgbar button:hover{background:rgba(255,255,255,.3)}
.ev-pgnum{color:#fff; font-size:14px; font-variant-numeric:tabular-nums; min-width:64px; text-align:center}
.ev-pgbar .ev-fsbtn{position:absolute; right:10px; display:flex; align-items:center; justify-content:center}
.ev-pgbar .ev-fsbtn .ic{width:22px; height:22px}
/* 유출 억제 워터마크 - 열람자 이름을 옅게 반복(캔버스 위·조작 통과) */
.ev-wm{position:absolute; inset:-30%; display:flex; flex-wrap:wrap; gap:80px 100px; align-items:center; justify-content:center;
  transform:rotate(-24deg); pointer-events:none; z-index:2}
.ev-wm span{color:#000; opacity:.06; font-size:15px; white-space:nowrap}
/* 총괄 작성현황 - 기업 수와 무관한 진행바(2026-07-23) */
.sum-track{flex:1; height:10px; border-radius:999px; background:var(--soft); overflow:hidden}
.sum-fill{display:block; height:100%; border-radius:999px; background:var(--primary-bg)}
/* 작성현황·메시지 메신저 패널(2026-07-23) - 좌 위원 목록 / 우 스레드 */
.mchat{display:flex; padding:0; overflow:hidden; min-height:480px}
.mc-side{width:300px; flex:none; border-right:1px solid var(--border); display:flex; flex-direction:column}
.mc-side-head{padding:0 16px; height:64px; border-bottom:1px solid var(--border); font-size:14px; color:var(--muted);
  display:flex; justify-content:space-between; align-items:center}  /* 우측 머리줄과 같은 높이 - 경계선 어긋남 방지(2026-07-23) */
.mc-list{flex:1; overflow-y:auto}
.mc-row{width:100%; text-align:left; background:none; border:0; border-bottom:1px solid var(--border);
  border-left:3px solid transparent; padding:13px 14px; display:flex; gap:11px; align-items:center;
  cursor:pointer; font:inherit; color:inherit}
.mc-row:hover{background:var(--soft)}
.mc-row.on{background:var(--info-bg); border-left-color:var(--primary)}
.mc-avatar{width:38px; height:38px; flex:none; border-radius:50%; background:var(--soft); color:var(--muted);
  display:flex; align-items:center; justify-content:center; font-size:15px; font-weight:700}
.mc-notice .mc-avatar{background:var(--info-bg); color:var(--primary)}
.mc-avatar .ic{width:19px; height:19px}
.mc-main{flex:1; min-width:0; display:flex; flex-direction:column; gap:4px}
.mc-name{font-size:16px; font-weight:700; display:flex; align-items:center; gap:6px; flex-wrap:wrap}
.mc-unread{font-size:14px; font-weight:700; background:var(--no-fg); color:#fff; min-width:21px; height:21px;
  padding:0 6px; border-radius:999px; display:inline-flex; align-items:center; justify-content:center}
.mc-meta{display:flex; align-items:center; gap:8px; font-size:14px; color:var(--muted); font-variant-numeric:tabular-nums}
.mc-meta .sum-track{flex:1}
.mc-thread{flex:1; min-width:0; display:flex; flex-direction:column}
.mc-head{padding:0 18px; height:64px; border-bottom:1px solid var(--border); display:flex; justify-content:space-between;
  align-items:center; gap:12px}
.mc-title{font-size:16px; font-weight:700}
.mc-log{flex:1; padding:18px; overflow-y:auto; display:flex; flex-direction:column; gap:12px;
  background:var(--soft); max-height:480px}
.mc-day{align-self:center; font-size:14px; color:var(--muted); background:var(--card);
  border:1px solid var(--border); padding:2px 12px; border-radius:999px}
.mc-msg{max-width:72%; display:flex; flex-direction:column}
.mc-msg.me{align-self:flex-end}
.mc-msg.you{align-self:flex-start}
.mc-bubble{padding:10px 14px; border-radius:14px; font-size:16px; white-space:pre-wrap}
.mc-msg.me .mc-bubble{background:var(--primary-bg); color:#fff; border-bottom-right-radius:4px}
.mc-msg.me .mc-stamp{text-align:right}
.mc-msg.you .mc-bubble{background:var(--card); border:1px solid var(--border); border-bottom-left-radius:4px}
.mc-msg-notice{max-width:100%; align-self:stretch}
.mc-msg-notice .mc-bubble{background:var(--wait-bg); border:1px solid var(--border); border-radius:10px}
.mc-stamp{margin-top:4px}
.mc-empty{margin:auto; text-align:center}
.mc-composer{padding:12px 14px 4px; border-top:1px solid var(--border); display:flex; gap:10px; align-items:flex-end}
.mc-composer textarea{flex:1; resize:none; min-height:44px; max-height:120px; margin:0}
.mc-hint{padding:6px 16px 12px}
@media (max-width:900px){
  .mchat{flex-direction:column; min-height:0}
  .mc-side{width:100%; border-right:0; border-bottom:1px solid var(--border)}
  .mc-list{max-height:240px}
  .mc-log{min-height:300px}
  .mc-msg{max-width:88%}
}
/* 평가표 그룹 = 박스(항목 빌더와 같은 구분감) - 헤더 옅은 채움 + 안에 점수 행 */
.ev-crit-box{border:1px solid var(--border); border-radius:10px; background:var(--card); overflow:hidden; margin-bottom:12px}
.ev-crit-head{display:flex; justify-content:space-between; align-items:center; gap:10px; padding:8px 13px;
  background:var(--soft); border-bottom:1px solid var(--border); font-weight:700; font-size:14px}
.ev-crit-sum{color:var(--muted); font-weight:600}
.ev-score-row{display:flex; align-items:center; gap:10px; padding:8px 13px; border-top:1px dashed var(--border)}
.ev-crit-head + .ev-score-row{border-top:0}   /* 헤더 밑선과 겹치지 않게 */
.ev-score-row label{flex:1; margin:0; font-size:16px; font-weight:400}
.ev-score-row .mx{color:var(--muted); font-size:14px; white-space:nowrap}
.ev-score-row input[type=number]{width:78px; margin:0; padding:8px 6px; text-align:center; font-weight:700}
.ev-total-row{display:flex; align-items:center; justify-content:space-between; padding:11px 14px; margin-top:2px;
  background:var(--primary-bg); color:#fff; border-radius:10px; font-size:16px; font-weight:700}
.ev-total{font-size:22px; font-weight:800; color:var(--gold)}
.ev-pick{display:flex; align-items:center; gap:8px; margin:14px 0 0; flex-wrap:wrap}
.ev-pick b{font-size:16px; margin-right:2px}
.ev-chip{border:1px solid var(--field-bd); background:var(--card); border-radius:999px; padding:8px 17px;
  cursor:pointer; font-weight:600; font-size:16px; color:var(--fg)}
.ev-chip:hover{background:var(--soft)}
.ev-chip.on{background:var(--primary-bg); border-color:var(--primary-bg); color:#fff}
.ev-foot{padding:13px 15px; border-top:1px solid var(--border); flex:0 0 auto; display:flex; gap:10px; align-items:center}
.ev-foot .btn{margin-top:0}
.ev-foot .ev-state{flex:1; font-size:14px; color:var(--muted)}
.ev-chair{margin-top:12px; flex:0 0 auto; max-height:210px}
.ev-chair-row{display:flex; justify-content:space-between; padding:4px 0; font-size:16px}

/* 진행 메시지 - 평가표 아래 고정 카드(2026-07-23, 구 떠있는 메시지함·안읽음 배지 대체)
   로그 높이 = 말풍선 3개가 보이는 216px 고정(나쿤 지시) - 부족분은 평가표 카드 안쪽 스크롤이 감당 */
.ev-chatcard{margin-top:12px; flex:0 0 auto; display:flex; flex-direction:column}
/* 채팅 로그: 고정 216px는 3번째 메시지가 애매하게 잘렸음(2026-07-24 나쿤) → 내용만큼 늘고(잘림 없음) 많아지면 스크롤 */
#evChatLog{flex:none; overflow-y:auto; padding:12px; display:flex; flex-direction:column; gap:7px; min-height:150px; max-height:340px}
.ev-body-pad{padding:14px 16px}
/* 별도 창 - 여백·의견칸을 압축해 항목이 한눈에 */
body.ev-popup .ev-body-pad{padding:10px 12px}
body.ev-popup .ev-score-row{padding:6px 12px}
body.ev-popup #evOpinion{height:88px}
#evChatBar{display:flex; gap:7px; padding:11px; border-top:1px solid var(--border)}
#evChatBar input{flex:1; margin:0; padding:9px 12px; font-size:16px}
#evChatBar .btn{margin-top:0}
.ev-msg{font-size:16px; line-height:1.5; padding:8px 12px; border-radius:10px; background:var(--soft); max-width:92%}
.ev-msg .ev-msg-meta{font-size:14px; color:var(--muted)}
.ev-msg.staff{background:var(--info-bg)}
.ev-msg.mine{align-self:flex-end; background:var(--ok-bg)}
/* 알림 배너 - 자료 카드 안(헤더 아래)에 띄워 헤더 버튼과 구조적으로 겹치지 않게 한다 */
.ev-mid .ev-card{position:relative}
#evBanner{position:absolute; top:60px; left:50%; transform:translateX(-50%); z-index:40;
  background:var(--primary-bg); color:#fff; padding:10px 24px; border-radius:999px; font-weight:700; font-size:16px;
  box-shadow:0 8px 24px rgba(0,0,0,.32); display:none; max-width:calc(100% - 32px); white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis}
body.ev-popup .ev-wrap{grid-template-columns:1fr; height:calc(100vh - 20px); padding:10px}
body.ev-popup .ev-left, body.ev-popup .ev-mid, body.ev-popup .topbar{display:none !important}
@media (max-width:1100px){
  .ev-wrap{grid-template-columns:1fr; height:auto}
  .ev-pdf{height:60vh}
  .ev-pdfbox{flex:none; height:60vh}
  .ev-pgbar button{width:48px; height:44px}
}
/* ===== 폰에서도 평가할 수 있게(2026-07-28 나쿤) =====
   순서: 발표자료 → 평가 점수 입력 → 진행 메시지. 기업 목록은 맨 아래(위쪽 「지금 기업」 셀렉트로도 이동 가능).
   ⚠️ 집중모드(ev-focus)·별도창(ev-popped)은 PC 전용 상태인데, 그 규칙의 `height:100vh`와 `display:none`이
      폰에서도 그대로 걸려 세 칸이 한 화면에 눌리고 평가표가 통째로 사라졌다
      (발표평가는 집중모드가 기본 ON이라 특히 심함). 폰에선 두 상태를 무효로 만든다. */
@media (max-width:900px){
  .ev-wrap{display:flex !important; flex-direction:column; height:auto !important;
           padding:12px 14px; gap:12px}
  .ev-mid{order:1} .ev-right{order:2} .ev-left{order:3}
  .ev-col > .ev-card:not(.ev-chair):not(.ev-chatcard){flex:none}   /* 세로 쌓기라 「남은 높이 채우기」는 끈다 */
  body.ev-focus .ev-wrap, body.ev-popped .ev-wrap{height:auto !important; padding:12px 14px}
  body.ev-focus .ev-left{display:flex !important}
  body.ev-popped .ev-right{display:flex !important}
  body.ev-focus .sidebar, body.ev-focus .topbar{display:revert}    /* 상단바·서랍은 폰에서 늘 필요 */
  /* 자료는 가로를 가득 채우고 세로는 비율대로 - 고정 높이면 세로형 자료에 좌우 여백이 남는다.
     ⚠️ display를 block으로 바꿔야 한다 - flex로 두면 sticky 페이지바가 「flex 항목」이 되어 자료 옆에 붙는다. */
  .ev-pdfbox{display:block; height:auto; min-height:200px; max-height:78vh; overflow-y:auto}
  .ev-pdfbox canvas{display:block; width:100%; height:auto; box-shadow:none; margin:0 auto}
  .ev-pdf{height:70vh}                                             /* 비상용 내장 뷰어(iframe)는 고정 높이 유지 */
  .ev-pgbar{position:sticky; bottom:0; z-index:2}                  /* 자료가 길어도 페이지 넘김 버튼은 항상 손 닿는 곳 */
  .ev-left .ev-body{max-height:40vh; overflow-y:auto}              /* 기업이 많아도 페이지가 끝없이 길어지지 않게 */
  /* 자료가 여러 개일 때 - 파일명이 잘리거나 숨지 않게 줄바꿈 허용(가로 스크롤은 뒤 파일이 안 보인다).
     이름이 길면 한 탭이 한 줄을 차지해도 되게 폭을 열어 둔다. */
  .ev-mid .ev-ftabs{flex-wrap:wrap; padding:8px 10px 10px}
  .ev-mid .ev-ftabs button{min-height:44px; max-width:100%; text-align:left;
                           overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
}
/* 공용 유틸(평가 화면에서 도입 - 인라인 style 대체) */
.nowrap{white-space:nowrap}
.mb0{margin:0}
/* 평가의견 - 합계와 간격·줄간격·여백(붙어 보임 수정, 구 인라인 18px이 CSS를 눌러 반영 안 됐던 것) + 최소 글자수 안내(2026-07-23) */
.ev-op{display:block; margin-top:28px}
#evOpinion{line-height:1.7; padding:12px 14px; margin-top:6px}
#evOpCnt{display:block; margin-top:4px; text-align:right; font-variant-numeric:tabular-nums}
/* 상담회 - 투자사별 장소·시간·건수 입력 열 */
.judge-head .jr-name{flex:1; min-width:0; padding-left:29px}
/* 상담회 시간표·기업별 안내 */
.plan-chip{display:inline-block; background:var(--soft); border:1px solid var(--border); border-radius:999px;
  padding:4px 12px; margin:2px 5px 2px 0; font-size:14px; white-space:nowrap}

/* ===== 평가 「자료 크게」(집중) 모드 =====
   발표평가는 16:9 슬라이드라 가로폭이 곧 크기 - 사이드바·기업목록을 접어 자료에 폭을 몰아준다. */
body.ev-focus .sidebar{display:none}
body.ev-focus .topbar{display:none}
body.ev-focus .ev-wrap{grid-template-columns:1fr 400px; height:100vh; padding:8px 10px; gap:8px}
:fullscreen .ev-wrap{padding:0; gap:6px}          /* 진짜 전체화면이면 여백까지 걷어냄 */
:fullscreen .ev-card{border-radius:0; border:0}
body.ev-focus .ev-left{display:none}

@media (max-width:1100px){ body.ev-focus .ev-wrap{grid-template-columns:1fr} }
/* 집중 모드 헤더 - 기업명(굵게) / 사업아이템(작게) 두 줄 + 좌우 이동 화살표 */
.ev-now{display:flex; flex-direction:column; justify-content:center; min-width:0; line-height:1.25}
.ev-now-name{position:relative; display:inline-flex; align-items:center; gap:5px;
  font-size:17px; font-weight:700; color:var(--fg); white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; max-width:44vw}
.ev-now-name::after{content:'▾'; font-size:12px; color:var(--muted); flex:0 0 auto}
.ev-now-item{font-size:14px; color:var(--muted); white-space:nowrap;
  overflow:hidden; text-overflow:ellipsis; max-width:38vw}
.ev-now-item:empty{display:none}
/* 이름 위에 겹쳐 둔 투명 select - 눌러서 다른 기업으로 바로 이동 */
.ev-jump-hidden{position:absolute; inset:0; width:100%; height:100%; opacity:0; cursor:pointer;
  margin:0; padding:0; border:0; min-height:0}
/* 평가표를 별도 창으로 뺀 동안에는 본 창의 우측 칸을 회수해 자료를 더 크게 */
body.ev-popped .ev-right{display:none}
body.ev-popped .ev-wrap{grid-template-columns:262px 1fr}
body.ev-popped.ev-focus .ev-wrap{grid-template-columns:1fr}
/* 집중 모드 기업 이동(이전·셀렉트·다음·위치) */
/* 앞뒤 이동은 한 덩어리(페이저)로 묶어 「지금 보는 기업」 표시와 확실히 분리 */
.ev-pager{display:inline-flex; align-items:center; border:1px solid var(--field-bd);
  border-radius:10px; overflow:hidden; background:var(--card); flex:0 0 auto}
.ev-pager button{border:0; background:none; color:var(--fg); font:inherit; font-size:15px;
  cursor:pointer; min-height:36px; min-width:40px; padding:6px 10px}
.ev-pager button:hover{background:var(--soft)}
.ev-pager button:disabled{color:var(--muted); cursor:not-allowed; background:none}
.ev-pos{font-variant-numeric:tabular-nums; white-space:nowrap; font-size:14px; color:var(--muted);
  padding:0 10px; border-left:1px solid var(--border); border-right:1px solid var(--border);
  align-self:stretch; display:flex; align-items:center}
/* 나에게 온 개별 메시지 배너 - 전체 공지(파랑)와 구분되게 주황 */
#evBanner{cursor:pointer}
#evBanner.personal{background:#b06a00}

/* 평가항목 빌더 - 그룹 단위 목록(박스 중첩 없이 표처럼 정렬) */
/* 항목명 칸이 화면 끝까지 늘어지면 배점이 멀어져 읽기 나쁨 → 적당히 제한하고 왼쪽 정렬 */
.crit-ghead, .crit-row{display:grid; grid-template-columns:minmax(200px,1fr) 88px 88px 34px;
  gap:12px; align-items:center}   /* 항목 열이 남는 폭을 다 써서 오른쪽 빈 공간 없음 */
/* 그룹 = 박스 - 헤더(옅은 채움)에 배점·최소점 열 머리까지 통합(2026-07-22 나쿤 요청) */
.crit-group{border:1px solid var(--border); border-radius:10px; background:var(--card); margin-bottom:14px; overflow:hidden}
.crit-ghead{padding:8px 14px; background:var(--soft); border-bottom:1px solid var(--border)}
.cg-title{display:flex; align-items:center; gap:10px; min-width:0}
.cg-col{text-align:center; font-size:14px; color:var(--muted); font-weight:600}
.crit-ghead .cg-name{width:auto; min-width:120px; max-width:260px; margin:0; padding:4px 2px;
  font-size:17px; font-weight:700; border:0; border-bottom:2px solid transparent; border-radius:0;
  background:transparent; color:var(--fg)}
.crit-ghead .cg-name:hover{border-bottom-color:var(--border)}
.crit-ghead .cg-name:focus{border-bottom-color:var(--primary); outline:none}
.crit-gsum{font-size:14px; color:var(--muted); font-weight:600; white-space:nowrap}
.crit-rows{display:flex; flex-direction:column}
.crit-row{padding:5px 14px; border-top:1px dashed var(--border)}   /* 헤더와 같은 그리드 - 배점 열이 라벨과 정렬 */
.crit-rows .crit-row:first-child{border-top:0}   /* 헤더 밑선과 겹치지 않게 */
.crit-row input[name=cn]{margin:0; border-color:transparent; background:transparent; padding-left:6px}
.crit-row:hover input[name=cn], .crit-row input[name=cn]:focus{border-color:var(--field-bd); background:var(--field)}
.crit-row input[name=cx], .crit-row input[name=cm]{margin:0; text-align:center; padding:9px 4px}
.crit-del, .crit-gdel{border:0; background:none; color:var(--muted); font-size:16px; cursor:pointer;
  padding:6px; border-radius:8px; line-height:1}
.crit-del:hover, .crit-gdel:hover{background:var(--no-bg); color:var(--no-fg)}
/* + 항목 = 알약 버튼(2026-07-23 나쿤 - 맨글자 링크는 구분이 안 됨) */
.crit-add{border:1.5px solid var(--border); background:var(--card); color:var(--primary); font:inherit;
  font-size:14px; font-weight:600; cursor:pointer; padding:7px 16px; border-radius:999px; margin:8px 12px 12px}
.crit-add:hover{border-color:var(--primary); background:var(--soft)}
.co-add-grid{display:grid; gap:14px; align-items:end;   /* 기업 추가: 기업명·아이템 넓게, 발표자·직책 좁게 */
  grid-template-columns:1.2fr 1.6fr .8fr .6fr 1.1fr}
.co-add-grid label{margin:0}
.co-add-grid.has-panel{grid-template-columns:1.2fr 1.6fr .8fr .6fr .8fr 1.1fr}   /* 분과 있는 평가회 = 6칸 */
@media (max-width:1100px){ .co-add-grid, .co-add-grid.has-panel{grid-template-columns:1fr 1fr} }
.co-actions{display:inline-flex; gap:6px; align-items:center}   /* 대상 기업 행: ▲▼(순번 이동)+삭제 한 줄 */
.co-actions .btn[disabled]{opacity:.35; cursor:default; pointer-events:none}
/* 평가 상세 - 진행 상태(좌 상태·우 액션) / 로고 자동업로드 행 / 업로드 진행바 */
.ev-status{display:flex; justify-content:space-between; align-items:center; gap:16px; flex-wrap:wrap}
.ev-status-info{min-width:260px}
.ev-status-actions{display:flex; align-items:center; gap:12px}
.ev-status-start{display:flex; align-items:center; gap:12px; margin:0}
.logo-row{display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-top:6px}
.dz-mini{display:inline-flex; align-items:center; gap:12px; padding:10px 14px; margin-top:0; text-align:left}   /* 로고용 소형 드롭존 */
/* 상담회 - 전문가별 상담 기업 트리(전문가 그룹 카드 + 하위 기업 행) */
.mt-group{border:1px solid var(--border); border-radius:10px; margin-bottom:14px; overflow:hidden}
.mt-ghead{display:flex; align-items:center; gap:8px; padding:11px 14px; background:var(--subtle); border-bottom:1px solid var(--border)}
.mt-row{display:flex; align-items:center; gap:9px; padding:9px 14px; border-bottom:1px solid var(--border); flex-wrap:wrap}
.mt-no{color:var(--muted); min-width:20px}
.mt-item{max-width:320px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.mt-files{display:flex; gap:4px; flex-wrap:wrap}
.mt-files .co-fchip{text-decoration:none}
.mt-addwrap{padding:12px 14px 14px}
.mt-drop{padding:16px 14px; margin:14px 0 0; text-align:center}
.mt-add{display:grid; grid-template-columns:1.1fr 1.4fr 1.3fr auto; gap:0 14px; align-items:end; margin:0}
.mt-add label{margin:0}
.mt-add input{margin-bottom:0}
.mt-add button{margin-bottom:0}
@media (max-width:900px){ .mt-add{grid-template-columns:1fr; gap:10px} .mt-add button{margin-bottom:0} }

/* 경보 표식 - 이모지(🔴) 대신 쓰는 빨간 점(2026-07-22 이모지 정리) */
.warn-dot{display:inline-block; width:10px; height:10px; border-radius:50%; background:var(--danger); vertical-align:middle; margin-left:4px}

/* 위원 화면 - 자료가 여러 개일 때 파일 전환 탭(뷰어 위) */
.ev-ftabs{display:flex; gap:6px; flex-wrap:wrap; padding:8px 10px 10px}  /* 아래 0이면 탭이 뷰어에 붙음(2026-07-23) */
.ev-ftabs button{border:1.5px solid var(--border); border-radius:999px; background:var(--card); color:var(--fg);
                 font:inherit; font-size:14px; padding:5px 13px; cursor:pointer}
.ev-ftabs button.is-cur{background:var(--primary-bg); border-color:var(--primary-bg); color:#fff; font-weight:700}

/* 관리자 기업 목록 - 자료 알약(파일별 열람·삭제) */
.co-fchip{display:inline-flex; align-items:center; gap:5px; border:1px solid var(--border); border-radius:999px;
          padding:2px 9px; font-size:14px; margin:2px 3px 2px 0; background:var(--subtle)}
.co-fchip a{color:var(--primary); text-decoration:none; max-width:130px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
.co-fchip .fx{border:0; background:none; color:var(--muted); cursor:pointer; font-size:14px; padding:0 2px}
.co-fchip .fx:hover{color:var(--danger)}

/* 4분할 격자의 4번째 칸 채움(평가 기본설정) - 로고는 라벨 위·칸 아래 구조로 */
.logo-cell .logo-lab{display:block; font-weight:500; margin:0}
.logo-cell .dz-mini{display:flex; width:100%; margin-top:7px; justify-content:center; box-sizing:border-box}
.logo-cell .logo-acts{display:flex; gap:8px; align-items:center; margin-top:8px; min-height:0}
.dz-mini .dz-msg{font-size:14px}
.dz-mini .logo-prev{margin:0}
.logo-lab{font-weight:600}
.logo-prev{max-height:44px; max-width:170px; border:1px solid var(--border); border-radius:8px; padding:3px 6px; background:#fff}
.up-bar{position:relative; height:26px; border-radius:999px; background:var(--soft); overflow:hidden; margin-top:12px}
.up-fill{height:100%; width:0; background:var(--primary-bg); transition:width .2s}
.up-txt{position:absolute; inset:0; display:flex; align-items:center; justify-content:center;
        font-size:14px; font-weight:700; color:#fff; text-shadow:0 1px 3px rgba(0,0,0,.6)}
        /* 흰 글자 고정 + 어두운 그림자 - difference 반전은 노랗게 보여 제거(2026-07-23 나쿤) */
.co-row.dragging{opacity:.45}
.co-no{white-space:nowrap; cursor:grab}                         /* 번호 칸이 드래그 손잡이 */
.co-grip{width:16px; height:16px; color:var(--muted); opacity:.55; vertical-align:-3px; margin-right:4px}
.co-edit{margin:0; width:100%; min-width:110px; padding:8px 7px; border-color:transparent; background:transparent}
.co-name{font-weight:700}
.co-row:hover .co-edit, .co-edit:focus{border-color:var(--field-bd); background:var(--field)}
.co-edit.saved, .co-filecell.saved{box-shadow:0 0 0 2px var(--ok-fg); border-radius:8px; transition:box-shadow .5s}
.co-replace{border:0; background:none; font:inherit; font-size:14px; cursor:pointer; margin-left:6px}
@media (max-width:700px){
  .crit-ghead, .crit-row{grid-template-columns:minmax(120px,1fr) 66px 66px 30px; gap:8px}
  .crit-ghead{padding:8px 10px} .crit-row{padding:5px 10px} .crit-add{padding-left:10px}
  .crit-ghead .cg-name{font-size:16px}
}


/* ===== 접근성·터치 (ui-ux-pro-max 체크리스트 대응 · 2026-07-22) =====
   50대 이상 사용자가 많아 모바일에서는 모든 조작 대상을 손가락 기준 44px 이상으로 키운다.
   데스크탑은 마우스라 기존 밀도를 유지(표가 불필요하게 길어지지 않게). */
@media (max-width:900px){
  .btn, .btn-sm, button, select, summary, a.btn, .chip, .tab, .ev-chip{ min-height:44px }
  .btn-sm{ padding:10px 14px }
  .tb-logout, .side-theme button{ min-height:44px; padding:10px 12px }
  .pw-toggle{ min-height:44px; padding:10px 12px }   /* 모바일에선 손가락 기준 확보 */
  /* 잠금 알약은 「상태 표시」라 배지와 같은 크기를 유지한다(위 button 규칙의 44px를 되돌림).
     대신 ::after로 보이지 않는 44px 손가락 영역을 덮어 터치 규격을 지킨다(체크박스 .tap-cell과 같은 방식) */
  .lock-pill{ min-height:0; height:auto; padding:4px 11px; position:relative }
  .lock-pill::after{ content:''; position:absolute; left:0; right:0; top:50%; height:44px; transform:translateY(-50%) }
  input[type=text], input[type=email], input[type=password], input[type=number],
  input[type=date], input[type=file], textarea{ min-height:44px }
  input[type=checkbox], input[type=radio]{ width:24px; height:24px }
  /* 체크박스가 든 라벨·칸은 탭 영역을 44px로 확보 */
  label.chk, .judge-row > label{ min-height:44px }
  td:has(> input[type=checkbox]), td:has(> input[type=radio]),
  td:has(> form > button), td:has(> .btn){ padding-top:12px; padding-bottom:12px }
  .crit-del, .crit-gdel, .crit-add{ min-height:44px; min-width:44px }
  /* 배정표 액션 버튼은 데스크탑에서만 조밀하게(위 전용 규칙이 더 구체적이라 같은 구체도로 되돌림) */
  .tbl.tbl-assign .row-actions .btn-sm{ min-height:44px; padding:10px 12px }
  /* 표 안 체크박스 - 28px + 칸 여백으로 오조작 방지(표를 무너뜨리지 않는 선에서 최대) */
  input.co-chk, input.rv-chk, .tbl input[type=checkbox], .tbl input[type=radio]{ width:28px; height:28px }
  .tbl td.td-c:has(input[type=checkbox]), .tbl td.td-c:has(input[type=radio]){ padding:8px 6px }
}

/* 움직임에 민감한 사용자 존중 - 전환·애니메이션 제거(스킬: reduced-motion, High) */
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration:.01ms !important; animation-iteration-count:1 !important;
    transition-duration:.01ms !important; scroll-behavior:auto !important;
  }
}

/* 누를 수 있는 것은 손 모양으로(스킬: cursor-pointer) */
button, summary, label[for], .btn, .chip, .tab, .ev-chip, .crit-add, .crit-del, .crit-gdel{ cursor:pointer }
button:disabled, .btn:disabled{ cursor:not-allowed }

/* 선(stroke) 아이콘 - 이모지 대체. 글자색을 그대로 물려받아 라이트/다크·활성 상태에 자동 대응 */
.ic{ width:20px; height:20px; flex:0 0 auto; vertical-align:-4px; color:inherit }
/* 인라인 경고 아이콘(배너 안 ⚠️ 이모지 대체, 2026-07-24) - 글자에 맞춰 크기·정렬, 경고색 */
.ic-warn{ width:1.15em; height:1.15em; vertical-align:-3px; color:var(--warn-fg); flex:none; display:inline-block }
.side-nav a{ display:flex; align-items:center; gap:11px }
.side-nav a .ic{ opacity:.85 }
.side-nav a.active .ic{ opacity:1 }
/* 브라우저 기본 버튼 글꼴(13.33px)이 규격을 벗어나므로 기준선을 맞춤(.btn 계열은 각자 값으로 덮어씀) */
button{ font-family:inherit; font-size:16px }
/* 표 안 체크박스 - 칸 전체를 눌러 켜지게(손가락 44px 확보). 체크박스 자체는 표를 해치지 않는 크기 유지 */
.tap-cell{display:flex; align-items:center; justify-content:center; min-height:44px; min-width:44px; margin:0; cursor:pointer}
@media (min-width:901px){ .tap-cell{min-height:0; min-width:0} }
/* 작성현황 표의 상태 아이콘 - 색으로만 구분하지 않도록 title(툴팁) 병행 */

/* ===== 모바일 실측 보정 (2026-07-22 모바일 전수감사) ===== */
@media (max-width:900px){
  /* 상단바 워드마크도 홈으로 가는 조작 대상 → 44px 확보 */
  .side-nav a.nav-pc{ display:none }        /* PC 전용 메뉴(디자인 도구) - 폰에선 감춤(2026-07-28 나쿤) */
  .mb-title{ display:inline-flex; align-items:center; min-height:44px }
  /* 표 안의 기업명·멘토명 링크는 셀 높이만큼 눌리게(행 높이는 그대로) */
  td > a.link{ display:flex; align-items:center; min-height:44px }
  /* 아이콘 링크(대리작성 등) - 보이는 아이콘은 이름 바로 옆에 붙여두고, 누르는 범위만 44px로 넓힌다.
     ⚠️ 예전엔 링크 자체를 44×44로 키워 아이콘이 상자 한가운데로 밀렸다
        (이름과의 간격 PC 5px → 모바일 17px, 세로도 4px 뜸. 2026-07-28 나쿤 지적)
     잠금 알약(.lock-pill)과 같은 방식 - 크기는 그대로, ::after로 손가락 영역만 덮는다. */
  a.proxy-ic{ display:inline-flex; align-items:center; justify-content:center;
              min-height:0; min-width:0; position:relative; vertical-align:-4px }
  /* ⚠️ vertical-align은 「middle」이 아니라 -4px - `.ic`의 기본값과 같은 기준.
     inline-flex로 감싸면 안쪽 svg의 vertical-align이 무시돼 링크에 직접 줘야 한다.
     middle은 글자 x-높이 절반에 맞추는데 한글은 그보다 위가 중심이라 아이콘이 2.4px 내려간다
     (실측: middle +2.38px → -4px +0.38px, PC는 +0.33px. 2026-07-28 나쿤 지적) */
  a.proxy-ic::after{ content:''; position:absolute; left:50%; top:50%; width:44px; height:44px;
                     transform:translate(-50%,-50%) }
}
@media (max-width:900px){
  /* 대시보드 주간표: 좁은 화면에서 「분야」를 숨겨 날짜 뱃지가 잘리지 않게 */
  .wk-tbl th:nth-child(3), .wk-tbl td:nth-child(3){ display:none }
}

/* 모바일 감사 2차 보정 */
@media (max-width:900px){
  /* 주간표 날짜 뱃지가 좁은 칸에 안 들어가 잘리던 것 - 여백만 줄여 글자는 그대로 */
  .wk-tbl .wk-date .badge{ padding:4px 5px }
}
@media (max-width:900px){
  /* 태블릿까지: 고정폭 표는 자동폭+가로스크롤로(버튼이 커지며 칸을 넘던 문제) */
  table.tbl-progress, table.tbl-confirmed{ table-layout:auto }
  table.tbl-progress colgroup, table.tbl-confirmed colgroup{ display:none }
  table.tbl-progress th, table.tbl-progress td,
  table.tbl-confirmed th, table.tbl-confirmed td{ white-space:nowrap }
  /* 표 안 버튼은 높이만 44px, 가로 여백은 원래대로(칸 넘침 방지) */
  .tbl .btn-sm{ padding:10px 12px }
}

/* 사용자표는 열이 7개라 1300px 아래에선 고정폭이 무리 → 기업표·검토표와 같은 방식(자동폭+가로스크롤) */
@media (max-width:1300px){
  table.tbl-users{table-layout:auto}
  table.tbl-users colgroup{display:none}
  table.tbl-users th, table.tbl-users td{white-space:nowrap; word-break:normal}
  table.tbl-users td:nth-child(2){white-space:normal; word-break:break-all}   /* 긴 이메일만 접기 */
}


/* ===== 페이지 간 일관성 보정 (2026-07-22 일관성 감사) =====
   규칙 한 줄: **누를 수 있는 것은 10px, 담는 것(카드)은 14px, 작은 컨트롤은 8px.** */

/* 숫자 입력칸 - 크롬 기본 증감 화살표(스피너)는 평소 숨어 있으면서도 오른쪽 자리를 차지해
   가운데 정렬한 숫자가 왼쪽으로 치우쳐 보인다. 스피너를 없애 진짜 가운데로.
   (증감이 필요하면 키보드 ↑↓ 는 그대로 동작한다) */
input[type=number]{ appearance:textfield; -moz-appearance:textfield }
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button{ -webkit-appearance:none; margin:0 }

/* 공용 업로드 진행 오버레이 - 상단에 떠서 표시(레이아웃 안 밀림) */
.up-overlay{position:fixed; top:66px; left:230px; right:0; z-index:1300; display:flex; justify-content:center; pointer-events:none}
.up-overlay .up-card{display:flex; align-items:center; gap:12px; background:var(--card); border:1px solid var(--border);
  border-radius:12px; padding:12px 18px; box-shadow:0 10px 30px rgba(0,0,0,.22); min-width:340px; max-width:90%}
.up-overlay .up-bar{flex:1; height:10px; border-radius:999px; background:var(--soft); overflow:hidden; margin:0}
.up-overlay .up-fill{height:100%; background:var(--primary-bg); border-radius:999px; transition:width .15s}
.up-overlay .up-fill.ind{animation:up-ind 1.1s linear infinite; opacity:.75}
@keyframes up-ind{0%{margin-left:-100%}100%{margin-left:100%}}
.up-overlay .up-pct{min-width:44px; text-align:right; font-weight:700; color:var(--primary)}
@media (max-width:900px){ .up-overlay{left:0} }

/* ===== 모바일 표 카드형(tbl-cards) - nara 방식(2026-07-25) =====
   ≤640px에서 넓은 표를 세로 카드로 전환(가로 스크롤 0). 각 <td>에 data-label="항목"을 주면 라벨이 앞에 붙는다.
   card-title=제목칸(라벨 없음·크게) · card-actions=버튼 묶음(가로 배열) · card-hide=카드에선 감출 칸(선택 체크박스 등). */
@media (max-width:900px){
  table.tbl-cards{ min-width:0 !important; width:100%; table-layout:auto }
  table.tbl-cards colgroup{ display:none }
  table.tbl-cards thead{ display:none }
  table.tbl-cards tbody, table.tbl-cards td{ display:block; width:auto }
  table.tbl-cards tr{ display:flex; flex-direction:column; background:var(--card); border:1px solid var(--border) !important;
                      border-radius:12px; padding:12px 14px; margin:0 0 10px }
  table.tbl-cards td{ display:block !important; border:0 !important; padding:3px 0 !important;
                      white-space:normal !important; word-break:keep-all; overflow-wrap:anywhere;
                      text-align:left !important; min-height:0 !important }
  table.tbl-cards td[data-label]::before{ content:attr(data-label) "  "; color:var(--muted); font-weight:600; font-size:14px }   /* 최소 14px 규칙 */
  /* (표 행 전체 클릭 규칙은 아래 공용 블록으로 옮김 - PC·모바일 동일하게 적용) */
  table.tbl-cards td.card-title{ order:-2; font-size:16px; font-weight:700; padding-bottom:6px !important }   /* 제목: 카드 맨 위 */
  table.tbl-cards td.card-title a, table.tbl-cards td.card-title b{ font-size:16px }
  /* 버튼: 카드 맨 아래 · 폭을 똑같이 나눠 한 줄 가득(2026-07-28 나쿤 「3분할로 한 줄 가득」).
     예전엔 flex라 <form> 안 버튼이 글자폭대로만 커서 재발송 62 / 관리 108 / 삭제 50처럼 제각각이었다. */
  table.tbl-cards td.card-actions{ order:10; padding-top:10px !important;
      display:grid !important; grid-auto-flow:column; grid-auto-columns:1fr; gap:8px; align-items:stretch }
  table.tbl-cards td.card-actions > *{ min-width:0; width:100% }
  /* ⚠️ data-label의 ::before도 grid 칸을 하나 먹어 버튼이 절반만 채운다 - 버튼 칸에선 라벨을 뺀다
     (「잠금」 라벨 + 「해제」 알약처럼 뜻이 겹치기도 한다) */
  table.tbl-cards td.card-actions[data-label]::before{ display:none }
  table.tbl-cards td.card-actions form{ margin:0 }
  table.tbl-cards td.card-actions .btn, table.tbl-cards td.card-actions .btn-sm,
  table.tbl-cards td.card-actions .lock-pill{ width:100% !important; flex:none; margin:0; min-width:0 }
  table.tbl-cards td.card-actions .lock-pill{ min-height:44px }   /* 손가락 기준 */
  /* 알약 하나뿐인 칸은 늘리지 않는다 - 잠금은 「버튼」이 아니라 상태 표시라 꽉 찬 버튼처럼 보이면 안 된다 */
  table.tbl-cards td.card-actions > .lock-pill:only-child{ width:auto !important; justify-self:start }
  /* 버튼을 감싼 <div>(사용자 관리 등 - 인라인 display:flex라 버튼이 글자폭대로만 커진다)도 같은 규칙으로 */
  table.tbl-cards td.card-actions > div{ display:grid !important; grid-auto-flow:column; grid-auto-columns:1fr;
      gap:8px; width:100%; justify-content:stretch !important }
  table.tbl-cards td.card-actions > div > *{ min-width:0; width:100% }
  table.tbl-cards td.card-actions > div .btn, table.tbl-cards td.card-actions > div .btn-sm{ width:100% !important }
  table.tbl-cards td:empty{ display:none !important }
  table.tbl-cards td.card-hide{ display:none !important }
}

/* 폰보다 넓은 모바일 구간(가로모드·태블릿)은 카드를 2열로 - 한 줄에 하나면 오른쪽이 텅 빈다(2026-07-28 나쿤 「가득 차게」) */
@media (min-width:641px) and (max-width:900px){
  table.tbl-cards tbody{ display:grid; grid-template-columns:1fr 1fr; gap:10px; align-items:start }
  table.tbl-cards tr{ margin:0 }
  table.tbl-cards-flat tbody{ display:block }   /* 카드 안 납작 표(주간 진행 등)는 그대로 한 줄씩 */
}

/* ===== 모바일 카드형 보강(2026-07-26) ===== */
@media (max-width:900px){
  /* 카드 안에 든 작은 표(주간 진행·내 멘토링 미팅)는 테두리 없는 납작 카드로 - 이중 테두리 방지 */
  table.tbl-cards-flat tr{ border:0 !important; background:transparent !important; border-radius:0;
      padding:9px 0 !important; margin:0; border-bottom:1px solid var(--border) !important }
  table.tbl-cards-flat tr:last-child{ border-bottom:0 !important }
  table.tbl-cards-flat td.card-title{ font-size:16px }   /* 다른 표와 같은 16px(2026-07-27 통일) */
  /* 카드 제목 링크는 인라인(전역 td>a.link의 44px flex가 제목을 늘려 2줄로 깨는 것 방지) */
  table.tbl-cards td.card-title > a.link{ display:inline; min-height:0 }
  /* 설정 탭바: 내용폭(inline-flex)이라 오른쪽 여백이 남던 것 → 폭 가득 채움 */
  .settings-tabs{ display:flex; width:100%; box-sizing:border-box }
}

/* 모바일 1열 폼에서 자식의 grid-column:span N(인라인)이 암묵적 2열을 만들어 칸이 쪼그라드는 것 방지(2026-07-26 지급정보 연락처 잘림) */
@media (max-width:900px){
  .form-grid > *, .form-row-4 > *, .form-row-3 > *, .co-reg-grid > *{ grid-column:auto !important }
}

/* 모바일 카드형 표를 감싼 바깥 카드(.table-wrap.card)의 테두리·여백 제거 - '박스 안 박스'(나뉜듯 붙은 박스) 방지(2026-07-26) */
@media (max-width:900px){
  .card:has(> table.tbl-cards:not(.tbl-cards-flat)){ border:0 !important; padding:0 !important; background:transparent !important;
      box-shadow:none !important; overflow:visible; margin-top:12px }   /* 납작표(내 멘토링·주간)는 카드 안에 두므로 제외 */
}

/* ── 나라장터 목록(2026-07-29) ─────────────────────────────────────────────
   공고명이 길어 표가 옆으로 넘치므로 고정 폭 격자로 두고 제목만 접는다(기업표와 같은 방식). */
.nara-tbl{table-layout:fixed}
.nara-tbl .card-title{white-space:normal; overflow-wrap:anywhere}   /* 공용 표 제목은 한 줄 고정이라 여기선 풀어 준다 */
/*
   마감임박 색은 나라장터 화면과 같은 기준(3일↓ 붉은 · 5일↓ 노란 · 마감·결과 회색·푸른).
   멘브릿지 표 규격은 그대로 두고 줄 배경만 얹는다. */
.nara-tbl tbody tr.n-urgent3{background:var(--no-bg)}
.nara-tbl tbody tr.n-urgent5{background:var(--warn-bg)}
.nara-tbl tbody tr.n-done{background:var(--info-bg)}
.nara-tbl tbody tr.n-fail, .nara-tbl tbody tr.n-cancel{background:var(--soft)}
.nara-tbl tbody tr.n-closed{color:var(--muted)}
.nara-tbl tbody td.card-title{text-align:left}   /* 공고명·수요기관만 왼쪽 - 나머지는 가운데, 추정가격만 오른쪽(2026-07-29 나쿤) */
.nara-tbl .card-title a{color:var(--fg); text-decoration:none; font-weight:700}
.nara-tbl .card-title a:hover{color:var(--primary); text-decoration:underline}
/* 관심 별 - 크기는 글자만큼, 누르는 범위만 44px(아이콘 링크와 같은 방식) */
.starbtn{border:0; background:none; cursor:pointer; font-size:19px; line-height:1; padding:4px 6px;
  color:var(--muted); border-radius:8px; position:relative}
.starbtn:hover{background:var(--soft); color:var(--gold-ink)}
.starbtn.on{color:var(--gold-ink)}
@media (max-width:900px){ .starbtn::after{content:''; position:absolute; left:50%; top:50%; width:44px; height:44px; transform:translate(-50%,-50%)} }

/* 나라장터 모바일 카드 - 기존 나라장터 사이트와 같은 모양(2026-07-29 나쿤).
   단계 알약이 맨 위 · 제목 · 라벨+값 · 관심(★)은 카드 오른쪽 위 모서리. */
@media (max-width:900px){
  table.nara-tbl tbody tr{ position:relative }
  table.nara-tbl td[data-label="단계"]{ order:-3; padding-bottom:2px !important }
  table.nara-tbl td[data-label="단계"]::before{ display:none }
  table.nara-tbl td.card-title{ padding-right:46px !important }        /* 별 자리 확보 */
  table.nara-tbl td[data-label="관심"]{ position:absolute; top:8px; right:10px; padding:0 !important; width:auto }
  table.nara-tbl td[data-label="관심"]::before{ display:none }
  /* 검색칸은 줄을 가득 채운다(2026-07-29 나쿤 - 폰에서 짧게 남던 것) */
  .co-toolbar .co-tb-search{ flex:1 1 100%; width:100%; min-width:0 }
  /* 관리 버튼 3개는 폭을 똑같이 나눠 한 줄 가득 */
  .nara-adm{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; width:100% }
  .nara-adm > *{ width:100%; min-width:0; margin:0 }
  .nara-adm .btn{ width:100%; min-width:0 }
  /* 나라장터 필터 칩만 폭을 똑같이 나눠 가득(다른 화면 칩은 그대로 둔다).
     「전체」가 첫 줄을 혼자 쓰고, 나머지 6개가 3개씩 두 줄(2026-07-29 나쿤 지정). */
  .nara-chips{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; width:100% }
  .nara-chips .chip{ width:100%; min-height:44px; padding:6px 4px;
    display:flex; align-items:center; justify-content:center }   /* 글자가 위로 쏠리던 것 - 세로 가운데 */
  .nara-chips .chip:first-child{ grid-column:span 3 }
}

/* ── 스테이지 발표 타이머 설정(2026-07-29) ─────────────────────────────────
   옵션 줄과 안내 문구 3장을 한눈에 보이게 정리한다. */
.tmr-opts{display:grid; grid-template-columns:auto 1fr; align-items:center; gap:12px 18px; margin-top:12px}
.tmr-opt-h{font-size:14px; font-weight:700; color:var(--muted)}
.tmr-chks{display:flex; gap:18px; flex-wrap:wrap}
.tmr-chks .chk{margin:0}
/* 소·중·대 고르기(라디오를 알약 버튼처럼) */
.seg{display:inline-flex; background:var(--soft); border-radius:999px; padding:3px; justify-self:start}
.seg-i{position:relative; margin:0}
.seg-i input{position:absolute; opacity:0; width:0; height:0}
.seg-i span{display:block; min-width:56px; min-height:44px; padding:11px 16px; border-radius:999px;
  text-align:center; font-size:16px; font-weight:600; color:var(--muted); cursor:pointer}
.seg-i input:checked + span{background:var(--card); color:var(--primary); box-shadow:0 1px 3px rgba(0,0,0,.12)}
/* 안내 문구 3장 - 한 줄에 나란히 */
.msg-row{display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:14px}
.msg-card{border:1px solid var(--border); border-radius:12px; padding:12px 12px 10px; background:var(--subtle)}
.msg-card .msg-on{margin:0 0 8px}
.msg-card textarea{margin:0; background:var(--card)}
@media (max-width:900px){
  .tmr-opts{grid-template-columns:1fr; gap:8px}
  .msg-row{grid-template-columns:1fr}
}
