/* ════════════════════════════════════════════════════════════════════════
   촬영 캘린더 · 소싱리스트 (2026-10-06 이식)
   오너가 준 목업 두 개의 UI 를 그대로 옮긴 것이다.

   ⚠️ **전부 .nxb 안으로 스코프했다.** 목업은 독립 HTML 이라 .panel · .nxb-btn ·
      .metric · .photo · .status · .nxb-empty · .detail · .day · .event · .search
      처럼 흔한 클래스를 전역으로 쓴다. 그대로 넣으면 styles.css(업무일지·
      프로젝트 화면)와 정면으로 부딪힌다 — 목업의 :root 변수도 앱 전체 색을
      덮어쓴다. 그래서 변수까지 .nxb 에 담았다.
   ⚠️ body 에 붙는 모달·라이트박스도 .nxb 를 함께 달아야 변수가 닿는다
      (렌더 쪽에서 class="nxb nxb-overlay" 로 만든다).
   ⚠️ 목업의 .app/.side/.top(자체 사이드바·상단바)은 가져오지 않았다 —
      업무보드에 이미 셸이 있다. .head 아래만 옮겼다.
   ════════════════════════════════════════════════════════════════════════ */
.nxb{
  --color-page:#edf1f7;--color-surface:#ffffff;--color-surface-soft:#f6f8fb;
  --color-ink:#101828;--color-ink-2:#344054;--color-ink-3:#667085;
  --color-line:#d7dee9;--color-line-strong:#bdc8d8;
  --color-accent:#3867f4;--color-accent-dark:#264bc7;--color-accent-soft:#eaf0ff;
  --color-shoot:#6844cc;--color-shoot-soft:#eee8ff;
  --color-sample:#bd6508;--color-sample-soft:#fff1df;
  --color-plan:#087c70;--color-plan-soft:#e2f6f2;
  --color-danger:#c73d52;--color-danger-soft:#ffeaee;
  --color-good:#07875f;--color-good-soft:#e4f7ef;
  --color-warn:#bd6508;--color-warn-soft:#fff1df;
  --color-purple:#6844cc;--color-purple-soft:#eee8ff;
  --color-nav-text:#c4ccda;
  --color-photo-mugwort:#76955f;--color-photo-black:#58505d;--color-photo-red:#a65c4d;
  --color-photo-sweet:#c08252;--color-photo-bean:#d4ad75;--color-photo-chestnut:#8a5b42;
  --radius-sm:8px;--radius-md:12px;--radius-lg:16px;
  --nxb-shadow:0 4px 16px rgba(16,24,40,.06);
  --ease-out:cubic-bezier(.2,.8,.2,1);--dur-fast:140ms;
  font-size:17px;color:var(--color-ink);
}
/* 다크 테마에서도 섬처럼 혼자 밝지 않게 변수만 바꿔 끼운다 */
body.dark .nxb{
  --color-page:#111726;--color-surface:#18203049;--color-surface-soft:#1b2335;
  --color-ink:#e8edf7;--color-ink-2:#b9c3d6;--color-ink-3:#8b96ab;
  --color-line:#2b3448;--color-line-strong:#3a4558;
  --color-accent-soft:#1d2744;--color-sample-soft:#2e2316;--color-shoot-soft:#241d3a;
  --color-plan-soft:#13302c;--color-danger-soft:#33181e;--color-good-soft:#12302a;
  --color-warn-soft:#2e2316;--color-purple-soft:#241d3a;
  --nxb-shadow:0 4px 16px rgba(0,0,0,.3);
}
body.dark .nxb .calculator{background:#0d1320}

.nxb *{box-sizing:border-box}
.nxb button,.nxb input,.nxb select,.nxb textarea{font:inherit}
.nxb button{cursor:pointer}
.nxb button:active{transform:translateY(1px)}
.nxb button:disabled,.nxb input:disabled,.nxb select:disabled,.nxb textarea:disabled{opacity:.55;cursor:not-allowed;background:var(--color-surface-soft)}
.nxb input:hover,.nxb select:hover,.nxb textarea:hover{border-color:var(--color-accent)}
.nxb button:focus-visible,.nxb input:focus-visible,.nxb select:focus-visible,.nxb textarea:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}
.nxb [hidden]{display:none!important}

/* ⚠️⚠️ **요소 선택자 되돌림** — 2026-10-06 실사고.
   styles.css 에는 클래스가 아니라 **태그를 직접 때리는 전역 규칙**이 있다:
     form{display:grid;grid-template-columns:1fr 1fr}  form label{display:grid}
     header{display:flex}  nav{display:grid}  h1{font-size:29px}  h2{...}
     select,input,textarea{border·padding·radius}  textarea{resize}
   클래스 이름을 아무리 고유하게 지어도 태그에는 그대로 닿는다. 실제로 "일정 추가"
   모달의 <form> 이 2단 그리드가 되어 제목이 왼쪽 칸에 박히고 입력칸이 오른쪽으로
   쏠렸다. .nxb 안에서는 기본값으로 되돌린 뒤, 아래 내 규칙이 다시 정한다.
   ⚠️ 여기 선택자는 전부 (0,1,1) 이라 내 .nxb .클래스 규칙(0,2,0)이 항상 이긴다. */
.nxb form{display:block;grid-template-columns:none;gap:0}
.nxb form label{display:block;gap:0;font-weight:inherit;font-size:inherit;color:inherit}
.nxb header{display:block;justify-content:normal;align-items:normal;margin-bottom:0}
.nxb nav{display:block;gap:0}
.nxb h1{font-size:inherit;letter-spacing:normal;margin:0}
.nxb h2,.nxb h3{margin:0;font-size:inherit;letter-spacing:normal}
.nxb input,.nxb select,.nxb textarea{border:1px solid var(--color-line-strong);background:var(--color-surface);border-radius:9px;padding:8px 12px;color:var(--color-ink);outline:none;box-shadow:none}
.nxb input:focus,.nxb select:focus,.nxb textarea:focus{border-color:var(--color-accent);box-shadow:none;outline:3px solid var(--color-accent);outline-offset:2px}
.nxb textarea{resize:vertical}
.nxb button{border-radius:9px}

/* ── 머리말 ─────────────────────────────────────────────────────────── */
.nxb .head{display:flex;align-items:flex-end;gap:18px;margin-bottom:16px}
.nxb .head-copy{min-width:0}
.nxb .nxb-eyebrow{display:block;margin-bottom:5px;color:var(--color-accent-dark);font-size:12px;font-weight:850}
.nxb .head h1{min-width:0;margin:0 0 5px;font-size:30px;line-height:1.15;letter-spacing:-.035em;overflow-wrap:anywhere;color:var(--color-ink)}
.nxb .head p{margin:0;color:var(--color-ink-2);font-size:15px}
.nxb .head-actions{margin-left:auto;display:flex;gap:8px}
.nxb .nxb-btn,.nxb .nxb-primary{min-height:42px;border-radius:9px;padding:8px 13px;font-size:14px;font-weight:750;white-space:nowrap}
.nxb .nxb-btn{border:1px solid var(--color-line);background:var(--color-surface);color:var(--color-ink-2)}
.nxb .nxb-btn:hover{border-color:var(--color-accent);color:var(--color-accent-dark)}
.nxb .nxb-primary{border:1px solid var(--color-accent);background:var(--color-accent);color:#fff}
.nxb .nxb-primary:hover{background:var(--color-accent-dark);border-color:var(--color-accent-dark)}
.nxb .nxb-notice{margin-bottom:12px;padding:10px 13px;border:1px solid color-mix(in srgb,var(--color-accent) 28%,var(--color-line));border-radius:10px;background:var(--color-accent-soft);color:var(--color-ink-2);font-size:13px}
.nxb .nxb-notice b{color:var(--color-accent-dark)}

/* ── 지표 카드 ──────────────────────────────────────────────────────── */
.nxb .metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;margin-bottom:12px}
.nxb .metric{min-height:94px;padding:14px 16px;border:1px solid var(--color-line);border-top:3px solid var(--color-accent);border-radius:var(--radius-md);background:var(--color-surface);box-shadow:var(--nxb-shadow)}
.nxb .metric.sample{border-top-color:var(--color-sample)}
.nxb .metric.shoot{border-top-color:var(--color-shoot)}
.nxb .metric.plan{border-top-color:var(--color-plan)}
.nxb .metric.alert{border-top-color:var(--color-danger)}
.nxb .metric span{display:block;color:var(--color-ink-2);font-size:13px;font-weight:700}
.nxb .metric b{display:block;margin-top:3px;font-size:27px;letter-spacing:-.04em;color:var(--color-ink)}
.nxb .metric small{color:var(--color-ink-3);font-size:12px}
.nxb button.metric{width:100%;text-align:left;color:var(--color-ink);cursor:pointer;transition:transform var(--dur-fast) var(--ease-out),border-color var(--dur-fast)}
.nxb button.metric:hover,.nxb button.metric.active{border-color:var(--color-accent);transform:translateY(-1px)}
.nxb .metric:nth-child(2).m2{border-top-color:var(--color-purple)}
.nxb .metric:nth-child(3).m3{border-top-color:var(--color-good)}
.nxb .metric:nth-child(4).m4{border-top-color:var(--color-warn)}

/* ── 도구 막대 ──────────────────────────────────────────────────────── */
/* ── 2단 카테고리 탭 · 보기 전환 · 목록 (2026-10-16 기획 요청) ──────────
   대카테고리는 단일 선택(채워진 탭), 소카테고리는 다중 선택(알약 칩)으로 모양을
   다르게 뒀다 — 같은 생김새면 둘 중 어느 쪽이 다중 선택인지 알 수 없다. */
.nxb .cat-tabs{display:flex;gap:7px;margin-bottom:8px;padding:5px;border:1px solid var(--color-line);border-radius:11px;background:var(--color-surface)}
.nxb .cat-tab{flex:1;min-height:46px;display:inline-flex;align-items:center;justify-content:center;gap:7px;border:0;border-radius:8px;background:transparent;color:var(--color-ink-2);font-size:14px;font-weight:850}
.nxb .cat-tab b{padding:2px 7px;border-radius:6px;background:var(--color-surface-soft);color:var(--color-ink-3);font-size:11px}
.nxb .cat-tab:hover{background:var(--color-surface-soft)}
.nxb .cat-tab.active{background:var(--color-accent);color:#fff}
.nxb .cat-tab.active b{background:rgba(255,255,255,.22);color:#fff}
.nxb .sub-tabs{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:12px;padding-left:4px}
.nxb .sub-tab{min-height:36px;padding:6px 11px;border:1px solid var(--color-line-strong);border-radius:999px;background:var(--color-surface);color:var(--color-ink-2);font-size:12.5px;font-weight:850}
.nxb .sub-tab b{margin-left:5px;color:var(--color-ink-3);font-size:11px;font-weight:800}
.nxb .sub-tab.active{border-color:transparent;background:var(--color-ink);color:#fff}
.nxb .sub-tab.active b{color:rgba(255,255,255,.74)}
.nxb .sub-tab.plan.active{background:var(--color-plan)}
.nxb .sub-tab.sample.active{background:var(--color-sample)}
.nxb .sub-tab.shoot.active{background:var(--color-shoot)}
.nxb .sub-hint{margin-left:4px;color:var(--color-ink-3);font-size:11px}
.nxb .view-switch{display:inline-flex;gap:4px;padding:4px;border:1px solid var(--color-line);border-radius:10px;background:var(--color-surface-soft)}
.nxb .view-pick{min-height:34px;padding:5px 12px;border:0;border-radius:7px;background:transparent;color:var(--color-ink-2);font-size:12.5px;font-weight:850}
.nxb .view-pick.active{background:var(--color-surface);color:var(--color-ink);box-shadow:var(--nxb-shadow)}
.nxb .list-scope{display:inline-flex;align-items:center;gap:6px;color:var(--color-ink-2);font-size:12px;font-weight:800}
.nxb .stage-tag{display:inline-flex;justify-content:center;padding:4px 7px;border-radius:7px;background:var(--color-surface-soft);color:var(--color-ink-2);font-size:11px;font-weight:850}
.nxb .stage-tag.launch{background:var(--color-accent-soft);color:var(--color-accent-dark)}
.nxb .shoot-list{display:flex;flex-direction:column}
.nxb .list-row{display:grid;grid-template-columns:104px 74px 72px minmax(0,1fr) 150px 64px;align-items:center;gap:10px;width:100%;padding:12px 16px;border:0;border-bottom:1px solid var(--color-line);background:transparent;color:var(--color-ink);text-align:left}
.nxb .list-row:last-child{border-bottom:0}
.nxb .list-row:hover{background:var(--color-surface-soft)}
.nxb .list-row time{display:flex;flex-direction:column;line-height:1.25}
.nxb .list-row time b{font-size:13px}
.nxb .list-row time span{color:var(--color-ink-3);font-size:11px}
.nxb .list-row .row-title{min-width:0;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nxb .list-row .row-people{min-width:0;color:var(--color-ink-3);font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nxb .list-row .row-status{justify-self:end;padding:4px 8px;border-radius:7px;background:var(--color-surface-soft);color:var(--color-ink-2);font-size:11px;font-weight:850;white-space:nowrap}
.nxb .list-row.done .row-title{color:var(--color-ink-3);text-decoration:line-through}
.nxb .list-row.done .row-status{background:var(--color-good-soft);color:var(--color-good)}

.nxb .nxb-toolbar{display:grid;grid-template-columns:minmax(230px,1fr) 150px 150px 150px auto;gap:7px;margin-bottom:12px}
.nxb .nxb-toolbar.cols4{grid-template-columns:minmax(260px,1fr) 160px 160px auto}
.nxb .search,.nxb .select{width:100%;min-width:0;min-height:42px;padding:8px 12px;border:1px solid var(--color-line-strong);border-radius:9px;background:var(--color-surface);color:var(--color-ink);font-size:14px}
.nxb .panel{border:1px solid var(--color-line);border-radius:var(--radius-lg);background:var(--color-surface);box-shadow:var(--nxb-shadow)}
.nxb .nxb-empty{padding:35px 18px;text-align:center;color:var(--color-ink-3);font-size:13px}
.nxb .nxb-section-title{margin:0 0 8px;color:var(--color-ink-2);font-size:13px}

/* ════════ 촬영 캘린더 ════════════════════════════════════════════════ */
.nxb .calendar-panel{overflow:hidden}
.nxb .calendar-top{display:flex;align-items:center;gap:8px;padding:14px 16px;border-bottom:1px solid var(--color-line)}
.nxb .month-title{font-size:20px;font-weight:900;letter-spacing:-.025em}
.nxb .calendar-top .spacer{flex:1}
.nxb .nxb-icon-btn{width:36px;height:36px;padding:0;border:1px solid var(--color-line);border-radius:9px;background:var(--color-surface);color:var(--color-ink);font-weight:850}
.nxb .nxb-icon-btn:hover{border-color:var(--color-accent);color:var(--color-accent-dark)}
.nxb .today-btn{height:36px;padding:0 11px;border:1px solid var(--color-line);border-radius:9px;background:var(--color-surface);color:var(--color-ink-2);font-size:12px;font-weight:800}
.nxb .nxb-legend{display:flex;gap:10px;flex-wrap:wrap}
.nxb .nxb-legend span{display:inline-flex;align-items:center;gap:5px;color:var(--color-ink-3);font-size:11px;font-weight:750}
.nxb .nxb-legend i{width:8px;height:8px;border-radius:50%}
.nxb .nxb-legend .sample{background:var(--color-sample)}
.nxb .nxb-legend .shoot{background:var(--color-shoot)}
.nxb .nxb-legend .plan{background:var(--color-plan)}
.nxb .weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));background:var(--color-surface-soft);border-bottom:1px solid var(--color-line)}
.nxb .weekdays span{padding:9px;text-align:center;color:var(--color-ink-3);font-size:11px;font-weight:850;border-right:1px solid var(--color-line)}
.nxb .weekdays span:last-child{border-right:0}
.nxb .calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}
.nxb .day{min-width:0;min-height:202px;padding:7px;border-right:1px solid var(--color-line);border-bottom:1px solid var(--color-line);background:var(--color-surface)}
.nxb .day:nth-child(7n){border-right:0}
.nxb .day.other{background:var(--color-surface-soft)}
.nxb .day.today{background:color-mix(in srgb,var(--color-accent-soft) 58%,var(--color-surface))}
.nxb .day.busy{background:color-mix(in srgb,var(--color-accent-soft) 24%,var(--color-surface))}
.nxb .day.crowded{box-shadow:inset 0 3px 0 var(--color-accent)}
.nxb .day.drop-on{outline:2px dashed var(--color-accent);outline-offset:-3px}
.nxb .day-head{display:flex;align-items:center;justify-content:space-between;gap:5px;margin-bottom:4px}
.nxb .date{display:grid;place-items:center;width:26px;height:26px;border-radius:8px;color:var(--color-ink-2);font-size:12px;font-weight:850}
.nxb .today .date{background:var(--color-accent);color:#fff}
.nxb .day-count{padding:2px 5px;border-radius:5px;background:var(--color-surface-soft);color:var(--color-ink-3);font-size:9px;font-weight:850}
.nxb .busy .day-count{background:var(--color-accent);color:#fff}
.nxb .events{display:flex;flex-direction:column;gap:3px}
.nxb .event{width:100%;min-width:0;min-height:31px;padding:4px 6px;border:0;border-left:3px solid;border-radius:6px;text-align:left;transition:transform var(--dur-fast) var(--ease-out)}
.nxb .event:hover{transform:translateY(-1px)}
/* 일정 칩은 <button> 안에 <button> 을 넣을 수 없어 div(role=button)로 바꿨다 — 손 모양·
   키보드 포커스를 직접 준다(2026-10-14 완료 토글). */
.nxb .event{cursor:pointer}
.nxb .event:focus-visible{outline:3px solid var(--color-accent);outline-offset:2px}
.nxb .event-check{flex:none;width:15px;height:15px;padding:0;border:1.5px solid currentColor;border-radius:50%;
  background:var(--color-surface);color:inherit;font-size:9px;font-weight:900;line-height:1;
  display:grid;place-items:center;opacity:.55;cursor:pointer}
.nxb .event-check:hover{opacity:1}
/* ⚠️ `background:currentColor` 와 `color:` 를 **같은 블록**에 쓰면 안 된다 —
   currentColor 는 그 블록이 정한 color 로 해석돼, 배경과 글자가 같은 색이 된다.
   실제로 완료 ✓ 가 흰 배경에 흰 글씨로 보이지 않았다(2026-10-14). 종류별로 못박는다. */
.nxb .event-check[aria-pressed="true"]{background:var(--color-ink);color:#fff;border-color:var(--color-ink);opacity:1}
.nxb .event.sample .event-check[aria-pressed="true"]{background:var(--color-sample);border-color:var(--color-sample)}
.nxb .event.shoot .event-check[aria-pressed="true"]{background:var(--color-shoot);border-color:var(--color-shoot)}
.nxb .event.plan .event-check[aria-pressed="true"]{background:var(--color-plan);border-color:var(--color-plan)}
/* 완료 칩은 흐리게 하되(.done{opacity:.6}) 체크 표시는 또렷하게 — 부모 opacity 는
   자식이 되돌릴 수 없으므로 흐려짐을 줄여 글자가 읽히게 한다. */
.nxb .event.done{opacity:.72}
.nxb .event.done .event-check{opacity:1}
.nxb .event.sample{border-color:var(--color-sample);background:var(--color-sample-soft);color:var(--color-sample)}
.nxb .event.shoot{border-color:var(--color-shoot);background:var(--color-shoot-soft);color:var(--color-shoot)}
.nxb .event.plan{border-color:var(--color-plan);background:var(--color-plan-soft);color:var(--color-plan)}
.nxb .event.done .event-title{text-decoration:line-through}
.nxb .event-top{display:flex;align-items:center;gap:4px;min-width:0}
.nxb .event-time{font-size:9px;font-weight:850}
.nxb .event-title{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-ink);font-size:10px;font-weight:800}
.nxb .event-person{margin-left:auto;width:17px;height:17px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,currentColor 14%,var(--color-surface));font-size:7px;font-weight:900;flex:none}
/* 공동 담당자 — 달력 칸이 좁아 두 명까지 머리글자, 나머지는 +N (2026-10-06) */
.nxb .event-person+.event-person{margin-left:2px}
.nxb .event-more{margin-left:2px;height:17px;padding:0 4px;border-radius:6px;display:grid;place-items:center;background:color-mix(in srgb,currentColor 14%,var(--color-surface));font-size:7px;font-weight:900;flex:none}
/* 상세·추가 폼의 담당자 체크 목록이 좁은 칸에서도 줄바꿈되게 */
.nxb .field .check-options{margin-top:2px}
.nxb .field .check-option{padding:5px 8px;font-size:11px}
.nxb .more-count{width:100%;min-height:25px;padding:4px 6px;border:1px dashed var(--color-line-strong);border-radius:6px;background:var(--color-surface);color:var(--color-accent-dark);text-align:left;font-size:9px;font-weight:850}
.nxb .more-count:hover{border-color:var(--color-accent);background:var(--color-accent-soft)}
.nxb .day-agenda-list{display:flex;flex-direction:column;gap:7px}
.nxb .agenda-event{display:grid;grid-template-columns:64px 82px minmax(0,1fr) auto;gap:8px;align-items:center;width:100%;padding:10px;border:1px solid var(--color-line);border-radius:9px;background:var(--color-surface);color:var(--color-ink);text-align:left}
.nxb .agenda-event:hover{border-color:var(--color-accent);background:var(--color-accent-soft)}
.nxb .agenda-event time{font-size:12px;font-weight:900}
.nxb .agenda-event .type-tag{justify-self:start}
.nxb .agenda-event b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.nxb .agenda-event small{color:var(--color-ink-3);font-size:10px}
.nxb .detail-head{padding:20px 22px 17px;border-bottom:1px solid var(--color-line)}
.nxb .detail-head-row{display:flex;align-items:center;gap:7px}
.nxb .detail-head h2{margin:9px 0 5px;font-size:24px;letter-spacing:-.025em}
.nxb .detail-head p{margin:0;color:var(--color-ink-3);font-size:13px}
.nxb .type-tag{display:inline-flex;padding:4px 7px;border-radius:7px;background:var(--color-surface-soft);color:var(--color-ink-2);font-size:11px;font-weight:850}
.nxb .type-tag.sample{background:var(--color-sample-soft);color:var(--color-sample)}
.nxb .type-tag.shoot{background:var(--color-shoot-soft);color:var(--color-shoot)}
.nxb .type-tag.plan{background:var(--color-plan-soft);color:var(--color-plan)}
.nxb .detail-body{padding:17px 22px 22px}
.nxb .field-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:14px}
.nxb .field{padding:10px 11px;border:1px solid var(--color-line);border-radius:9px;background:var(--color-surface-soft)}
.nxb .field.nxb-wide{grid-column:1/-1}
.nxb .field label{display:block;margin-bottom:3px;color:var(--color-ink-3);font-size:11px;font-weight:800}
.nxb .field b{display:block;font-size:14px}
.nxb .field select{width:100%;padding:0;border:0;background:transparent;color:var(--color-ink);font-size:14px;font-weight:800}
.nxb .info-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.nxb .info-card{padding:10px 11px;border:1px solid var(--color-line);border-radius:9px;background:var(--color-surface-soft)}
.nxb .info-card.nxb-wide{grid-column:1/-1}
.nxb .info-card span{display:block;margin-bottom:3px;color:var(--color-ink-3);font-size:10px;font-weight:800}
.nxb .info-card b{display:block;font-size:14px;line-height:1.45;white-space:pre-wrap}
.nxb .kind-list{display:flex;gap:6px;flex-wrap:wrap}
.nxb .kind-chip{padding:5px 8px;border-radius:7px;background:var(--color-shoot-soft);color:var(--color-shoot);font-size:11px;font-weight:850;font-style:normal}
.nxb .nxb-note{margin-top:11px;padding:10px;border-radius:9px;background:var(--color-accent-soft);color:var(--color-ink-2);font-size:12px;line-height:1.55;white-space:pre-wrap}
.nxb .detail-actions{display:flex;gap:7px;margin-top:14px;flex-wrap:wrap}
.nxb .detail-actions>*{flex:1;min-width:120px}
.nxb .plan-sheet{background:var(--color-surface)}
.nxb .plan-kicker{color:var(--color-plan);font-size:11px;font-weight:900;letter-spacing:.08em}
.nxb .plan-images{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px}
.nxb .plan-images.dense{grid-template-columns:repeat(5,minmax(0,1fr));gap:6px}
.nxb .plan-image{position:relative;aspect-ratio:4/3;overflow:hidden;border:1px solid var(--color-line);border-radius:10px;background:var(--color-surface-soft)}
.nxb .plan-image button.preview{width:100%;height:100%;padding:0;border:0;background:transparent}
.nxb .plan-image img{width:100%;height:100%;object-fit:cover;display:block}
.nxb .remove-image{position:absolute;right:5px;top:5px;width:26px;height:26px;border:0;border-radius:7px;background:rgba(16,24,40,.82);color:#fff;font-weight:900}
.nxb .image-upload{display:flex;align-items:center;gap:9px;margin-top:10px;padding:10px;border:1px dashed var(--color-line-strong);border-radius:10px}
.nxb .image-upload input{display:none}
.nxb .upload-label{padding:8px 11px;border-radius:8px;background:var(--color-plan);color:#fff;font-size:12px;font-weight:850;cursor:pointer}
.nxb .upload-note{color:var(--color-ink-3);font-size:11px}
/* 끌어다 놓기(2026-10-28) — 이미지 칸과 업로드 줄을 한 영역으로 묶는다.
   is-empty: 아직 한 장도 없으면 업로드 줄이 유일한 과녁이라 너무 얇다 → 높이를 준다.
   ⚠️ ::after 는 pointer-events:none — 안 그러면 안내 띠가 과녁을 가려 드롭이 안 먹는다. */
.nxb .plan-drop{position:relative;margin-top:12px;border-radius:12px}
.nxb .plan-drop>.plan-images{margin-top:0}
.nxb .plan-drop.is-empty>.image-upload{min-height:78px;padding:14px;flex-wrap:wrap}
.nxb .plan-drop.is-drag{outline:2px dashed var(--color-plan);outline-offset:3px}
.nxb .plan-drop.is-drag::after{content:'여기에 놓으면 참고 이미지로 추가됩니다';position:absolute;inset:0;display:grid;place-items:center;border-radius:12px;background:var(--color-plan-soft);color:var(--color-plan);font-size:13px;font-weight:900;pointer-events:none}

/* ════════ 소싱리스트 ════════════════════════════════════════════════ */
.nxb .view-tabs{display:flex;gap:7px;margin-bottom:12px;padding:5px;border:1px solid var(--color-line);border-radius:11px;background:var(--color-surface)}
.nxb .view-tab{flex:1;min-height:44px;border:0;border-radius:8px;background:transparent;color:var(--color-ink-2);font-size:13px;font-weight:850}
.nxb .view-tab.active{background:var(--color-accent);color:#fff}
.nxb .view-tab b{margin-left:6px;padding:2px 6px;border-radius:6px;background:color-mix(in srgb,currentColor 14%,transparent);font-size:10px}
.nxb .workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(360px,420px);gap:12px;align-items:start}
.nxb .view-area{min-width:0}
.nxb .photo{position:relative;width:88px;height:74px;border-radius:11px;overflow:hidden;background:var(--color-surface-soft);border:1px solid var(--color-line);isolation:isolate}
.nxb .photo:before{content:"";position:absolute;left:9px;right:9px;bottom:7px;height:28px;border-radius:50%;background:var(--color-surface);box-shadow:0 5px 12px color-mix(in srgb,var(--color-ink) 18%,transparent)}
.nxb .food{position:absolute;left:20px;bottom:25px;width:27px;height:27px;border-radius:7px;background:var(--food);box-shadow:26px 5px 0 var(--food-2),12px -8px 0 color-mix(in srgb,var(--food) 74%,var(--color-surface))}
.nxb .photo:after{content:"상품 이미지";position:absolute;right:5px;top:4px;padding:2px 5px;border-radius:5px;background:color-mix(in srgb,var(--color-surface) 88%,transparent);color:var(--color-ink-3);font-size:8px;font-weight:800}
.nxb .tone-mugwort{--food:var(--color-photo-mugwort);--food-2:color-mix(in srgb,var(--color-photo-mugwort) 78%,var(--color-surface))}
.nxb .tone-black{--food:var(--color-photo-black);--food-2:color-mix(in srgb,var(--color-photo-black) 72%,var(--color-surface))}
.nxb .tone-red{--food:var(--color-photo-red);--food-2:color-mix(in srgb,var(--color-photo-red) 72%,var(--color-surface))}
.nxb .tone-sweet{--food:var(--color-photo-sweet);--food-2:color-mix(in srgb,var(--color-photo-sweet) 72%,var(--color-surface))}
.nxb .tone-bean{--food:var(--color-photo-bean);--food-2:color-mix(in srgb,var(--color-photo-bean) 72%,var(--color-surface))}
.nxb .tone-chestnut{--food:var(--color-photo-chestnut);--food-2:color-mix(in srgb,var(--color-photo-chestnut) 72%,var(--color-surface))}
.nxb .photo.uploaded{padding:0;border:0;cursor:zoom-in}
.nxb .photo.uploaded:before,.nxb .photo.uploaded:after{display:none}
.nxb .photo.uploaded img{display:block;width:100%;height:100%;object-fit:cover}
.nxb .status{display:inline-flex;padding:4px 7px;border-radius:7px;background:var(--color-accent-soft);color:var(--color-accent-dark);font-size:11px;font-weight:850}
.nxb .status.good{background:var(--color-good-soft);color:var(--color-good)}
.nxb .status.warn{background:var(--color-warn-soft);color:var(--color-warn)}
.nxb .status.md{background:var(--color-purple-soft);color:var(--color-purple)}
.nxb .candidate-panel{overflow:hidden}
.nxb .candidate-toolbar{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--color-line);background:var(--color-surface-soft);flex-wrap:wrap}
.nxb .candidate-toolbar strong{font-size:14px}
.nxb .candidate-toolbar span{color:var(--color-ink-3);font-size:11px}
.nxb .candidate-toolbar .nxb-btn{margin-left:auto}
.nxb .quick-entry{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;padding:12px 14px;border-bottom:1px solid var(--color-line)}
.nxb .quick-entry>*:first-child,.nxb .quick-entry>*:last-child{grid-column:1/-1}
.nxb .quick-entry input,.nxb .quick-entry select{width:100%;min-width:0;min-height:40px;padding:8px 9px;border:1px solid var(--color-line-strong);border-radius:8px;background:var(--color-surface);color:var(--color-ink);font-size:12px}
.nxb .candidate-head,.nxb .candidate-row{display:grid;grid-template-columns:32px minmax(160px,1.3fr) 78px 92px 80px minmax(110px,1fr) 88px;gap:7px;align-items:center}
.nxb .candidate-head{padding:10px 12px;background:var(--color-surface-soft);border-bottom:1px solid var(--color-line);color:var(--color-ink-3);font-size:10px;font-weight:850}
.nxb .candidate-row{padding:10px 12px;border-bottom:1px solid var(--color-line)}
.nxb .candidate-row:last-child{border-bottom:0}
.nxb .candidate-row:hover{background:var(--color-accent-soft)}
.nxb .candidate-row input[type=checkbox],.nxb #selectAllCandidates{width:18px;height:18px;accent-color:var(--color-accent)}
.nxb .candidate-product{display:grid;grid-template-columns:54px minmax(0,1fr);gap:8px;align-items:center;min-width:0}
.nxb .candidate-product .photo{width:54px;height:48px}
.nxb .candidate-product b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}
.nxb .candidate-product small,.nxb .candidate-cell small{display:block;margin-top:2px;color:var(--color-ink-3);font-size:9px}
.nxb .candidate-cell b{display:block;overflow:hidden;text-overflow:ellipsis;font-size:11px}
.nxb .candidate-actions{display:flex;flex-direction:column;gap:5px}
.nxb .candidate-actions button{min-height:30px;padding:4px 6px;border-radius:7px;font-size:9px;font-weight:850}
.nxb .start-btn{border:0;background:var(--color-accent);color:#fff}
.nxb .detail-link{border:1px solid var(--color-line);background:var(--color-surface);color:var(--color-ink-2)}
.nxb .board-panel{padding:13px;overflow:hidden}
.nxb .sourcing-board{display:grid;grid-template-columns:repeat(4,minmax(235px,1fr));gap:10px;align-items:start;overflow-x:auto;padding-bottom:5px}
.nxb .board-column{min-width:0;padding:10px;border:1px solid var(--color-line);border-radius:12px;background:var(--color-surface-soft)}
.nxb .board-column.drop-on{outline:2px dashed var(--color-accent);outline-offset:-4px}
.nxb .column-head{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.nxb .column-head strong{font-size:14px}
.nxb .column-head span{margin-left:auto;display:grid;place-items:center;min-width:25px;height:25px;padding:0 6px;border-radius:7px;background:var(--color-surface);color:var(--color-ink-3);font-size:11px;font-weight:850}
.nxb .column-desc{margin:-4px 0 10px;color:var(--color-ink-3);font-size:10px}
.nxb .column-cards{display:flex;flex-direction:column;gap:9px;min-height:40px}
.nxb .column-empty{padding:25px 8px;text-align:center;color:var(--color-ink-3);font-size:11px}
.nxb .sourcing-card{padding:10px;border:1px solid var(--color-line);border-radius:11px;background:var(--color-surface);box-shadow:0 2px 8px rgba(16,24,40,.04)}
.nxb .sourcing-card:hover{border-color:var(--color-accent)}
.nxb .sourcing-card.dragging{opacity:.5}
.nxb .card-image-row{position:relative;margin-bottom:9px}
.nxb .sourcing-card .photo{width:100%;height:118px}
.nxb .card-status{position:absolute;left:7px;top:7px;z-index:2}
.nxb .card-drag{position:absolute;right:7px;top:7px;z-index:2;width:26px;height:26px;border:0;border-radius:7px;background:rgba(16,24,40,.72);color:#fff;font-size:12px;cursor:grab}
.nxb .card-title{display:flex;align-items:flex-start;gap:7px}
.nxb .card-title div{min-width:0;flex:1}
.nxb .card-title h3{margin:0;font-size:15px;line-height:1.35}
.nxb .card-title p{margin:3px 0 0;color:var(--color-ink-3);font-size:11px}
.nxb .requester{flex:none;padding:4px 6px;border-radius:6px;background:var(--color-purple-soft);color:var(--color-purple);font-size:10px;font-weight:850}
.nxb .card-kv{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:10px 0}
.nxb .card-kv div{padding:7px 8px;border-radius:8px;background:var(--color-surface-soft)}
.nxb .card-kv span{display:block;color:var(--color-ink-3);font-size:9px;font-weight:750}
.nxb .card-kv b{display:block;margin-top:2px;font-size:12px}
.nxb .entry-input{width:100%;height:38px;padding:6px 9px;border:1px solid var(--color-accent);border-radius:8px;background:var(--color-surface);color:var(--color-accent-dark);font-size:14px;font-weight:850}
.nxb .sourcing-card .entry-input{height:34px;font-size:12px}
.nxb .card-actions{display:flex;align-items:center;gap:7px}
.nxb .card-actions .profit-cell{flex:1}
.nxb .profit-cell b{display:block;font-size:15px}
.nxb .profit-cell small{color:var(--color-ink-3);font-size:11px}
.nxb .profit-cell.good b{color:var(--color-good)}
.nxb .profit-cell.warn b{color:var(--color-warn)}
.nxb .detail-btn{min-height:38px;border:1px solid var(--color-line-strong);border-radius:8px;background:var(--color-surface);color:var(--color-ink);font-size:12px;font-weight:800;padding:7px 10px}
.nxb .detail-btn:hover{border-color:var(--color-accent);color:var(--color-accent-dark)}
.nxb .persistent-detail{position:sticky;top:12px;max-height:calc(100vh - 40px);overflow:auto;border:1px solid var(--color-line);border-radius:10px;background:var(--color-surface);box-shadow:none}
.nxb .persistent-label{position:sticky;top:0;z-index:2;padding:10px 16px;border-bottom:1px solid var(--color-line);background:var(--color-surface-soft);color:var(--color-accent-dark);font-size:11px;font-weight:900;letter-spacing:.04em}
.nxb .detail-placeholder{padding:44px 24px;text-align:center}
.nxb .detail-placeholder b{display:block;font-size:18px}
.nxb .detail-placeholder p{margin:7px 0 0;color:var(--color-ink-3);font-size:12px;line-height:1.55}
.nxb .detail-top{padding:17px 18px 14px;border-bottom:1px solid var(--color-line)}
.nxb .detail-title{display:flex;align-items:flex-start;gap:11px}
.nxb .detail-title .photo{width:110px;height:88px;flex:none}
.nxb .detail-title-copy{min-width:0;flex:1}
.nxb .detail-title h2{margin:0 0 4px;font-size:21px;letter-spacing:-.025em}
.nxb .detail-title p{margin:0;color:var(--color-ink-3);font-size:12px}
.nxb .decision{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin-bottom:14px}
.nxb .decision-card{min-height:76px;padding:10px 11px;border:1px solid var(--color-line);border-radius:10px;background:var(--color-surface-soft)}
.nxb .decision-card span{display:block;color:var(--color-ink-3);font-size:11px;font-weight:750}
.nxb .decision-card b{display:block;margin-top:3px;font-size:19px;letter-spacing:-.03em}
.nxb .decision-card.accent{background:var(--color-accent-soft);border-color:color-mix(in srgb,var(--color-accent) 25%,var(--color-line))}
.nxb .decision-card.good{background:var(--color-good-soft);border-color:color-mix(in srgb,var(--color-good) 25%,var(--color-line))}
.nxb .decision-card.good b{color:var(--color-good)}
.nxb .edit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin:14px 0}
.nxb .edit-field label{display:block;margin-bottom:4px;color:var(--color-ink-2);font-size:11px;font-weight:850}
.nxb .edit-field input,.nxb .edit-field select,.nxb .edit-field textarea{width:100%;min-height:40px;padding:8px 9px;border:1px solid var(--color-line-strong);border-radius:8px;background:var(--color-surface);color:var(--color-ink);font-size:12px}
.nxb .edit-field textarea{min-height:82px;resize:vertical}
.nxb .edit-field.nxb-wide{grid-column:1/-1}
.nxb .image-gallery{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:9px}
.nxb .gallery-image{position:relative;aspect-ratio:4/3;overflow:hidden;border:1px solid var(--color-line);border-radius:9px;background:var(--color-surface-soft)}
.nxb .gallery-image .preview-image{width:100%;height:100%;padding:0;border:0;background:transparent}
.nxb .gallery-image img{display:block;width:100%;height:100%;object-fit:cover}
.nxb .calculator{padding:12px;border-radius:11px;background:var(--color-ink);color:#fff;margin-bottom:14px}
.nxb .calculator .nxb-section-title{color:#fff;margin-bottom:8px}
.nxb .calc-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.nxb .calc-field label{display:block;margin-bottom:4px;color:var(--color-nav-text);font-size:10px;font-weight:750}
.nxb .calc-field input{width:100%;height:38px;padding:7px 9px;border:1px solid var(--color-ink-2);border-radius:8px;background:var(--color-ink-2);color:#fff;font-weight:800}
.nxb .calc-result{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:9px}
.nxb .calc-result div{padding:8px 9px;border-radius:8px;background:rgba(255,255,255,.09)}
.nxb .calc-result span{display:block;color:var(--color-nav-text);font-size:10px}
.nxb .calc-result b{display:block;margin-top:2px;font-size:17px}
.nxb .calc-result .profit b{color:#5de0ad}
.nxb .breakdown{display:flex;flex-direction:column;gap:7px}
.nxb .breakdown-row{display:grid;grid-template-columns:1fr auto;gap:8px;color:var(--color-ink-2);font-size:12px}
.nxb .breakdown-row b{color:var(--color-ink)}
.nxb .memo-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px;padding-top:12px;border-top:1px solid var(--color-line)}
.nxb .memo-field label{display:block;margin-bottom:5px;color:var(--color-ink-2);font-size:12px;font-weight:850}
.nxb .memo-field textarea{width:100%;min-height:92px;resize:vertical;padding:9px 10px;border:1px solid var(--color-line-strong);border-radius:9px;background:var(--color-surface);color:var(--color-ink);font-size:12px;line-height:1.5}
.nxb .save-note{grid-column:1/-1;color:var(--color-good);font-size:11px;font-weight:750}
.nxb .detail-footer{display:flex;gap:8px;margin-top:15px;padding-top:13px;border-top:1px solid var(--color-line)}
.nxb .detail-footer>*{flex:1}

/* ════════ 모달·라이트박스 (body 직속 — 루트에 .nxb 를 함께 단다) ════ */
/* ── 간략 상세 Drawer (2026-10-16) ──────────────────────────────────
   오버레이(1200)보다 **아래**라 '전체 상세 보기'가 위에 덮인다.
   스크림을 깔지 않는다 — 달력을 가리지 않고 다음 일정을 바로 누를 수 있어야 한다. */
/* 서랍이 열리면 본문을 그만큼 좁혀 달력이 가려지지 않게 한다(넓은 화면에서만) */
.nxb.drawer-open{padding-right:404px;transition:padding-right var(--dur-fast) var(--ease-out)}
.nxb-drawer{position:fixed;right:0;top:0;bottom:0;z-index:1100;display:flex;flex-direction:column;width:min(392px,100%);background:var(--color-surface);border-left:1px solid var(--color-line);box-shadow:-18px 0 50px rgba(16,24,40,.18);transform:translateX(104%);visibility:hidden;pointer-events:none;transition:transform var(--dur-fast) var(--ease-out),visibility var(--dur-fast)}
.nxb-drawer.open{transform:none;visibility:visible;pointer-events:auto}
.nxb-drawer .quick-head{display:flex;align-items:center;gap:8px;padding:14px 14px 12px;border-bottom:1px solid var(--color-line)}
.nxb-drawer .quick-tags{display:flex;flex-wrap:wrap;gap:6px}
.nxb-drawer .quick-head .nxb-icon-btn{margin-left:auto}
.nxb-drawer .quick-body{flex:1;overflow:auto;padding:16px 16px 20px}
.nxb-drawer .quick-title{margin:4px 0 14px;font-size:19px;line-height:1.35}
.nxb-drawer .quick-list{display:flex;flex-direction:column;gap:10px;margin:0}
.nxb-drawer .quick-list>div{display:flex;flex-direction:column;gap:3px;padding:10px 12px;border:1px solid var(--color-line);border-radius:10px;background:var(--color-surface-soft)}
.nxb-drawer .quick-list dt{color:var(--color-ink-3);font-size:11px;font-weight:850}
.nxb-drawer .quick-list dd{margin:0;font-size:13.5px;font-weight:800;line-height:1.5;word-break:break-word}
.nxb-drawer .quick-list dd i{color:var(--color-ink-3);font-weight:700;font-style:normal}
.nxb-drawer .quick-list dd a{color:var(--color-accent-dark);text-decoration:underline}
.nxb-drawer .quick-actions{display:grid;grid-template-columns:1fr 1fr;gap:7px;padding:12px 14px;border-top:1px solid var(--color-line);background:var(--color-surface)}
.nxb-drawer .quick-actions .nxb-primary{grid-column:1/-1}

.nxb-overlay{position:fixed;inset:0;z-index:1200;display:none;place-items:center;padding:18px;background:color-mix(in srgb,#101828 42%,transparent)}
.nxb-overlay.open{display:grid}
.nxb-overlay .nxb-modal{width:min(600px,100%);max-height:calc(100vh - 36px);overflow:auto;padding:20px;border-radius:16px;background:var(--color-surface);box-shadow:0 24px 70px rgba(16,24,40,.28)}
.nxb-overlay .detail-dialog{position:relative;width:min(720px,100%);max-height:calc(100vh - 36px);overflow:auto;border-radius:16px;background:var(--color-surface);box-shadow:0 24px 70px rgba(16,24,40,.28)}
.nxb-overlay .detail-close{position:absolute;right:16px;top:16px;z-index:2}
.nxb-overlay .modal-head{display:flex;align-items:center;gap:10px;margin-bottom:16px}
.nxb-overlay .modal-head h2{margin:0;font-size:22px}
.nxb-overlay .modal-head button{margin-left:auto}
.nxb-overlay .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:11px}
.nxb-overlay .form-field{display:flex;flex-direction:column;gap:5px}
.nxb-overlay .form-field.nxb-wide{grid-column:1/-1}
.nxb-overlay .form-field label{color:var(--color-ink-2);font-size:12px;font-weight:800}
.nxb-overlay .form-field input,.nxb-overlay .form-field select,.nxb-overlay .form-field textarea{width:100%;min-height:42px;padding:9px 11px;border:1px solid var(--color-line-strong);border-radius:9px;background:var(--color-surface);color:var(--color-ink)}
.nxb-overlay .form-field textarea{min-height:86px;resize:vertical}
.nxb-overlay .modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}
.nxb-overlay .type-fields{display:none;grid-column:1/-1;padding:12px;border:1px solid var(--color-line);border-radius:11px;background:var(--color-surface-soft)}
.nxb-overlay .type-fields.show{display:block}
.nxb-overlay .subform-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.nxb-overlay .subform-grid .nxb-wide{grid-column:1/-1}
.nxb .check-options{display:flex;gap:7px;flex-wrap:wrap}
.nxb .check-option{display:inline-flex;align-items:center;gap:5px;padding:7px 9px;border:1px solid var(--color-line);border-radius:8px;background:var(--color-surface);font-size:12px;font-weight:750}
.nxb .check-option input{width:16px;height:16px;min-height:0;padding:0;accent-color:var(--color-shoot)}
.nxb-overlay.lightbox{z-index:1300;background:rgba(5,10,20,.86)}
.nxb-overlay.lightbox img{display:block;max-width:min(1100px,94vw);max-height:88vh;border-radius:12px;object-fit:contain}
.nxb-overlay .lightbox-close{position:fixed;right:24px;top:20px;width:38px;height:38px;border:1px solid rgba(255,255,255,.35);border-radius:9px;background:rgba(255,255,255,.12);color:#fff;font-size:20px}

/* ════════ 반응형 ════════════════════════════════════════════════════ */
@media(max-width:1100px){
  .nxb.drawer-open{padding-right:0}
  .nxb .workspace{grid-template-columns:minmax(0,1fr) 340px}
}
@media(max-width:980px){
  .nxb .metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .nxb .nxb-toolbar,.nxb .nxb-toolbar.cols4{grid-template-columns:1fr 1fr}
  .nxb .nxb-toolbar .search{grid-column:1/-1}
  .nxb .day{min-height:190px}
  .nxb .event-person{display:none}
}
@media(max-width:900px){
  .nxb .workspace{display:block}
  .nxb .persistent-detail{position:static;max-height:none;margin-top:12px}
  .nxb .candidate-head{display:none}
  .nxb .candidate-row{grid-template-columns:28px minmax(0,1fr) 105px}
  .nxb .candidate-row>.candidate-cell{display:none}
  .nxb .candidate-actions{grid-column:3;grid-row:1}
  .nxb .candidate-product{grid-column:2;grid-row:1}
  .nxb .list-row{grid-template-columns:92px 70px minmax(0,1fr) 62px;row-gap:4px}
  .nxb .list-row .row-people{grid-column:3/5;font-size:11px}
}
@media(max-width:760px){
  /* 좁은 화면에서는 아래에서 올라오는 시트 — 오른쪽 서랍은 화면을 다 덮는다 */
  .nxb-drawer{left:0;right:0;top:auto;bottom:0;width:100%;max-height:80vh;border-left:0;border-top:1px solid var(--color-line);border-radius:16px 16px 0 0;box-shadow:0 -18px 50px rgba(16,24,40,.22);transform:translateY(104%)}
  .nxb .cat-tab{font-size:13px}
  .nxb{font-size:16px}
  .nxb .head{align-items:flex-start;flex-direction:column}
  .nxb .head-actions{margin-left:0;width:100%}
  .nxb .head-actions>*{flex:1}
  .nxb .metrics{grid-template-columns:1fr 1fr}
  .nxb .nxb-toolbar,.nxb .nxb-toolbar.cols4{display:flex;flex-direction:column}
  .nxb .calendar-top{align-items:flex-start;flex-wrap:wrap}
  .nxb .calendar-top .spacer{display:none}
  .nxb .nxb-legend{flex-basis:100%;order:3}
  .nxb .weekdays{display:none}
  .nxb .calendar-grid{display:block;padding:8px}
  .nxb .day{display:none;min-height:0;margin-bottom:7px;border:1px solid var(--color-line)!important;border-radius:10px;padding:10px}
  .nxb .day.has-events{display:grid;grid-template-columns:62px minmax(0,1fr);gap:8px}
  .nxb .day-head{align-items:flex-start;justify-content:flex-start}
  .nxb .events{min-width:0}
  .nxb .event{padding:8px}
  .nxb .event-title{font-size:12px}
  .nxb .event-time{font-size:10px}
  .nxb .event-person{display:grid}
  .nxb .agenda-event{grid-template-columns:55px 75px minmax(0,1fr)}
  .nxb .agenda-event small{display:none}
  .nxb .field-grid,.nxb .info-grid{grid-template-columns:1fr}
  .nxb .field.nxb-wide,.nxb .info-card.nxb-wide{grid-column:auto}
  .nxb-overlay .form-grid,.nxb-overlay .subform-grid{grid-template-columns:1fr}
  .nxb-overlay .form-field.nxb-wide,.nxb-overlay .subform-grid .nxb-wide{grid-column:auto}
  .nxb .plan-images{grid-template-columns:1fr 1fr}
  .nxb .plan-images.dense{grid-template-columns:repeat(3,minmax(0,1fr))}
  .nxb .sourcing-board{grid-template-columns:1fr;overflow:visible}
  .nxb .edit-grid{grid-template-columns:1fr}
  .nxb .edit-field.nxb-wide{grid-column:auto}
  .nxb .image-gallery{grid-template-columns:1fr 1fr}
  .nxb .candidate-toolbar{align-items:flex-start}
  .nxb .candidate-toolbar .nxb-btn{width:100%;margin-left:0}
  .nxb .view-tabs{flex-direction:column}
  .nxb .quick-entry{grid-template-columns:1fr}
  .nxb .quick-entry>*{grid-column:auto!important}
}
@media(max-width:600px){
  .nxb .memo-grid{grid-template-columns:1fr}
  .nxb .save-note{grid-column:auto}
  .nxb .image-upload{align-items:flex-start;flex-direction:column}
}
@media(max-width:414px){
  .nxb .cat-tabs{flex-wrap:wrap}
  .nxb .cat-tab{flex:1 1 44%}
  .nxb .list-row{grid-template-columns:78px 62px minmax(0,1fr)}
  .nxb .list-row .row-status{grid-column:3;justify-self:start}
  .nxb .metrics{grid-template-columns:1fr}
  .nxb .month-title{width:100%;order:-1}
  .nxb .detail-actions{flex-direction:column}
  .nxb .plan-images,.nxb .image-gallery{grid-template-columns:1fr}
  .nxb .plan-images.dense{grid-template-columns:1fr 1fr}
  .nxb .decision,.nxb .calc-grid,.nxb .calc-result{grid-template-columns:1fr}
}
@media(prefers-reduced-motion:reduce){
  .nxb *{transition-duration:0ms!important}
  .nxb .event:hover,.nxb button:active,.nxb button.metric:hover{transform:none}
}
/* ── 촬영 기획서 A4 인쇄 (2026-10-14 보강) ───────────────────────────
   [A4 기획서 프린트] 를 누르면 body 에 .nxb-printing 이 붙고, 상세 다이얼로그 하나만
   남겨 찍는다. 요구사항 그대로:
     · UI 버튼·헤더·사이드바는 숨김   · 이미지는 A4 폭을 넘지 않음(max-width:100%)
     · 이미지·주요 단락이 페이지 경계에서 잘리지 않음(break-inside:avoid) */
@page{size:A4 portrait;margin:12mm}
@media print{
  body.nxb-printing{background:#fff!important}
  body.nxb-printing>*{display:none!important}
  body.nxb-printing #nxbDetailOverlay{display:block!important;position:static!important;
    padding:0!important;background:#fff!important;inset:auto!important;z-index:auto!important}
  body.nxb-printing #nxbDetailOverlay .detail-dialog{width:auto!important;max-width:none!important;
    max-height:none!important;overflow:visible!important;border-radius:0!important;box-shadow:none!important}
  /* 화면 전용 조작부는 전부 숨긴다 */
  body.nxb-printing #nxbDetailOverlay .detail-close,
  body.nxb-printing #nxbDetailOverlay .detail-actions,
  body.nxb-printing #nxbDetailOverlay .nxb-image-upload,
  body.nxb-printing #nxbDetailOverlay .image-upload,
  body.nxb-printing #nxbDetailOverlay .remove-image,
  body.nxb-printing #nxbDetailOverlay .field select,
  body.nxb-printing #nxbDetailOverlay .check-options{display:none!important}
  /* 담당자/상태는 값만 글자로 남도록 — select 를 숨긴 자리에 라벨만 남는다 */
  body.nxb-printing #nxbDetailOverlay .field{background:#fff!important;border-color:#bbb!important}
  /* 이미지가 A4 밖으로 삐져나가지 않게 */
  body.nxb-printing #nxbDetailOverlay img{max-width:100%!important;height:auto!important}
  body.nxb-printing #nxbDetailOverlay .plan-images{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:4mm!important}
  body.nxb-printing #nxbDetailOverlay .plan-image{aspect-ratio:auto!important;max-height:70mm!important}
  body.nxb-printing #nxbDetailOverlay .plan-images.dense{grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:3mm!important}
  body.nxb-printing #nxbDetailOverlay .plan-images.dense .plan-image{max-height:42mm!important}
  /* 페이지 넘김에서 끊기면 안 되는 덩어리 */
  body.nxb-printing #nxbDetailOverlay .plan-image,
  body.nxb-printing #nxbDetailOverlay .info-card,
  body.nxb-printing #nxbDetailOverlay .nxb-note,
  body.nxb-printing #nxbDetailOverlay .detail-head,
  body.nxb-printing #nxbDetailOverlay .kind-list{break-inside:avoid;page-break-inside:avoid}
  body.nxb-printing #nxbDetailOverlay .nxb-section-title{break-after:avoid;page-break-after:avoid}
  body.nxb-printing #nxbDetailOverlay .info-card b{white-space:pre-wrap!important}
}
