/* ============================================================
   Genffice KSP — 셸 디자인 시스템
   토큰 체계는 genffice-docs / genffice-slide 를 계승한다.
   액센트만 KDI 블루로 교체했다 (docs 인디고 / slide 주황과 같은 자리).

   :root 후반부의 legacy 별칭은 views.css · views.js · deckview.js 를
   ksp-mock 에서 그대로 가져오기 위한 것이다. 새 코드는 위쪽 토큰만 쓴다.
   ============================================================ */

:root {
  /* Surfaces */
  --bg-app: #fbfbfc;
  --bg-panel: #ffffff;
  --bg-sidebar: #f8f8fa;
  --bg-subtle: #f3f3f6;
  --bg-hover: #eeeef2;
  --bg-active: #e7e7ed;

  /* Text */
  --text-1: #18181b;
  --text-2: #5b5b66;
  --text-3: #8a8a95;
  --text-inv: #ffffff;

  /* Borders */
  --border-1: #ededf1;
  --border-2: #e0e0e6;
  --border-3: #c9c9d2;

  /* Accent — KDI 블루 */
  --accent: #1668b3;
  --accent-hover: #135b9d;
  --accent-press: #104e88;
  --accent-subtle: #eaf2fa;
  --accent-border: #c5ddf1;
  --accent-text: #135b9d;

  /* Semantic */
  --success: #167c3c;
  --success-subtle: #e9f6ed;
  --warning: #9a5700;
  --warning-subtle: #fdf2e4;
  --danger: #c22b2b;
  --danger-subtle: #fdecec;
  --danger-border: #f5c9c9;

  /* Type scale */
  --fs-10: 10px;
  --fs-11: 11px;
  --fs-12: 12px;
  --fs-13: 13px;
  --fs-14: 14px;
  --fs-15: 15px;
  --fs-17: 17px;

  /* Radius */
  --r-4: 4px;
  --r-6: 6px;
  --r-8: 8px;
  --r-10: 10px;
  --r-14: 14px;

  /* Elevation */
  --sh-1: 0 1px 2px rgba(20, 20, 35, .05);
  --sh-2: 0 4px 12px rgba(20, 20, 35, .07), 0 0 0 1px rgba(20, 20, 35, .04);
  --sh-3: 0 16px 48px rgba(20, 20, 35, .16), 0 0 0 1px rgba(20, 20, 35, .06);
  --ring: 0 0 0 3px rgba(22, 104, 179, .16);

  /* Layout — Genffice 표준 4열 (메뉴 | 목차·작업 | 대화 | 미리보기)
     3열은 대화 로그·작업 과정·입력창을 함께 담으므로 ksp-mock(404px)에 가깝게 둔다 */
  --menu-w: 208px;
  --work-w: 264px;
  --stream-w: 384px;
  --split-w: 1px;
  --hit: 9px;

  /* 성숙도 5단계 — views.js 의 LC 맵과 값이 같아야 한다 */
  --l1: #dc3545;
  --l2: #fd7e14;
  --l3: #f0ad00;
  --l4: #28a745;
  --l5: #0d9488;

  /* ---- legacy 별칭 (ksp-mock 에서 가져온 캔버스·슬라이드 코드용) ---- */
  --navy: #10314f;
  --navy2: #17456c;
  --navy3: #2a6396;
  --red: #1668b3;
  --red-soft: #eaf2fa;
  --gold: #b8894a;
  --ink: #18181b;
  --ink2: #4b4b55;
  --muted: #5b5b66;
  --muted2: #8a8a95;
  --line: #ededf1;
  --line2: #f3f3f6;
  --bg: #fbfbfc;
  --panel: #ffffff;
  --soft: #f8f8fa;
  --ok: #167c3c;
}

* { margin: 0; padding: 0; box-sizing: border-box; }
[hidden] { display: none !important; }
.hidden { display: none !important; }

html, body { height: 100%; overflow: hidden; }

body {
  font-family: "Pretendard Variable", Pretendard, "Apple SD Gothic Neo",
    "Malgun Gothic", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  font-size: var(--fs-13);
  line-height: 1.5;
  color: var(--text-1);
  background: var(--bg-app);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}
button { font-family: inherit; }
::selection { background: rgba(22, 104, 179, .18); }

* { scrollbar-width: thin; scrollbar-color: var(--border-3) transparent; }
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background: transparent; border: 3px solid transparent;
  border-radius: 8px; background-clip: padding-box;
}
*:hover::-webkit-scrollbar-thumb { background: var(--border-3); background-clip: padding-box; }

/* ============================================================
   셸 — Genffice 표준 4열 그리드 (메뉴 · 작업 · 대화 · 캔버스)
   genffice-docs 의 menu | toc | chat | preview 와 같은 골격이다.
   3열은 ksp-mock 과 같이 맨 아래 입력창을 가진 대화창이고,
   AI직원의 기능이 그 입력창에 있다.
   ============================================================ */

.app {
  display: grid;
  grid-template-columns:
    var(--menu-w) var(--split-w)
    var(--work-w) var(--split-w)
    var(--stream-w) var(--split-w)
    minmax(320px, 1fr);
  height: 100dvh;
  max-height: 100dvh;
  min-height: 0;
  overflow: hidden;
}
.app.resizing { cursor: col-resize; user-select: none; }

.splitter {
  position: relative; z-index: 20;
  width: var(--split-w);
  background: var(--border-1);
  cursor: col-resize; touch-action: none;
  border: 0; padding: 0;
}
.splitter::after {
  content: ""; position: absolute; top: 0; bottom: 0;
  left: calc(var(--hit) * -1); right: calc(var(--hit) * -1);
}
.splitter::before {
  content: ""; position: absolute; inset: 0;
  background: transparent; transition: background .12s ease;
}
.splitter:hover::before,
.splitter:focus-visible::before,
.app.resizing .splitter.active::before {
  background: var(--accent); box-shadow: 0 0 0 1px var(--accent);
}
.splitter:focus-visible { outline: none; }

/* ============================================================
   버튼
   ============================================================ */

.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  height: 28px; padding: 0 10px;
  border: 1px solid var(--border-2); border-radius: var(--r-6);
  background: var(--bg-panel); color: var(--text-1);
  font: inherit; font-size: var(--fs-12); font-weight: 500;
  white-space: nowrap; cursor: pointer;
  transition: background .12s ease, border-color .12s ease, color .12s ease;
}
.btn:hover:not(:disabled) { background: var(--bg-subtle); border-color: var(--border-3); }
.btn:active:not(:disabled) { background: var(--bg-active); }
.btn:focus-visible { outline: none; box-shadow: var(--ring); }
.btn:disabled { cursor: not-allowed; color: var(--text-3); }

.btn.primary {
  background: var(--accent); border-color: transparent;
  color: var(--text-inv); box-shadow: var(--sh-1);
}
.btn.primary:hover:not(:disabled) { background: var(--accent-hover); border-color: transparent; }
.btn.primary:active:not(:disabled) { background: var(--accent-press); }
.btn.primary:disabled { background: var(--bg-subtle); border-color: var(--border-2); color: var(--text-3); box-shadow: none; }

.btn.ghost { background: transparent; border-color: transparent; color: var(--text-2); }
.btn.ghost:hover:not(:disabled) { background: var(--bg-hover); color: var(--text-1); }

.btn.icon { width: 28px; padding: 0; }
.btn svg { width: 14px; height: 14px; flex-shrink: 0; }
.btn.sm { height: 24px; padding: 0 8px; font-size: var(--fs-11); }

/* ============================================================
   1열 · 메뉴 (genffice-docs / genffice-slide 와 같은 구조)
   ============================================================ */

.menu {
  display: flex; flex-direction: column; min-height: 0;
  padding: 12px 10px;
  background: var(--bg-sidebar);
  overflow: auto;
}

.brand { display: flex; align-items: center; gap: 9px; padding: 4px 6px 14px; }
.brand .logo {
  display: grid; place-items: center;
  width: 26px; height: 26px; flex-shrink: 0;
  border-radius: 7px;
  background: linear-gradient(150deg, var(--accent), #3f8fd4);
  color: #fff; font-size: var(--fs-11); font-weight: 700;
  letter-spacing: -.02em; box-shadow: var(--sh-1);
}
.brand .txt { min-width: 0; display: flex; flex-direction: column; }
.brand .mark {
  font-size: var(--fs-13); font-weight: 650; letter-spacing: -.01em;
  color: var(--text-1); line-height: 1.25;
}
.brand .sub {
  font-size: var(--fs-11); color: var(--text-3); line-height: 1.3;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

.nav-label {
  padding: 12px 8px 4px;
  font-size: var(--fs-11); font-weight: 600;
  letter-spacing: .03em; color: var(--text-3);
}

.nav-item {
  display: flex; align-items: center; gap: 9px;
  width: 100%; height: 30px; padding: 0 8px;
  border: 0; border-radius: var(--r-6);
  background: transparent; color: var(--text-2);
  font: inherit; font-size: var(--fs-13); font-weight: 500;
  text-align: left; cursor: pointer;
  transition: background .12s ease, color .12s ease;
}
.nav-item:hover:not(:disabled) { background: var(--bg-hover); color: var(--text-1); }
.nav-item.active { background: var(--accent-subtle); color: var(--accent-text); font-weight: 600; }
.nav-item:focus-visible { outline: none; box-shadow: var(--ring); }
.nav-item:disabled { color: var(--text-3); cursor: not-allowed; }
.nav-item .ico {
  display: grid; place-items: center;
  width: 16px; height: 16px; flex-shrink: 0;
  color: currentColor; opacity: .85;
}
.nav-item .ico svg { width: 16px; height: 16px; }
.nav-item .lbl { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

@keyframes stpulse { 0%, 100% { opacity: 1 } 50% { opacity: .25 } }

/* 항목 뒤 카운터 (genffice-docs 의 단축키 자리와 같은 위치) */
.nav-item .kb {
  font-size: var(--fs-10); font-weight: 700; color: var(--text-3);
  font-variant-numeric: tabular-nums; flex-shrink: 0;
}

.menu-foot { margin-top: auto; padding: 10px 8px 2px; border-top: 1px solid var(--border-1); }
.model-chip {
  display: flex; align-items: center; gap: 7px;
  padding: 7px 8px; border-radius: var(--r-6);
  background: var(--bg-panel); border: 1px solid var(--border-1);
}
.model-chip .dot {
  width: 6px; height: 6px; flex-shrink: 0; border-radius: 50%;
  background: var(--text-3); box-shadow: 0 0 0 3px var(--bg-subtle);
}
.model-chip[data-state="on"] .dot { background: var(--success); box-shadow: 0 0 0 3px var(--success-subtle); }
.model-chip[data-state="off"] .dot { background: var(--danger); box-shadow: 0 0 0 3px var(--danger-subtle); }
.model-chip strong {
  min-width: 0; font-size: var(--fs-11); font-weight: 600; color: var(--text-2);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* ============================================================
   2열 · 작업 패널 (docs 의 .toc · slide 의 .deck 과 같은 자리)
   ============================================================ */

.work {
  display: flex; flex-direction: column; min-height: 0; min-width: 0;
  background: var(--bg-panel); overflow: hidden;
}

.panel-head {
  flex: 0 0 auto; display: flex; align-items: center; gap: 8px;
  min-height: 44px; padding: 0 12px;
  border-bottom: 1px solid var(--border-1);
}
.panel-head h2 { font-size: var(--fs-13); font-weight: 650; letter-spacing: -.01em; }
.panel-head .badge {
  margin-left: auto; flex-shrink: 0;
  padding: 2px 7px; border-radius: 20px;
  background: var(--bg-subtle); border: 1px solid var(--border-1);
  font-size: var(--fs-11); font-weight: 600; color: var(--text-2);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.panel-head .badge.done { background: var(--success-subtle); border-color: transparent; color: var(--success); }

/* ------------------------------------------------------------
   4단계 프로세스 표시 — ksp-mock 2열 상단 .steps 를 그대로 이어받는다.
   1열 메뉴는 genffice-docs 처럼 과제 단위 네비게이션이고, 단계 이동은 여기다.
   ------------------------------------------------------------ */
.steps {
  flex: 0 0 auto; display: flex; gap: 3px;
  padding: 7px 8px;
  border-bottom: 1px solid var(--border-1); background: var(--bg-sidebar);
}
.step-b {
  flex: 1; min-width: 0;
  position: relative;
  display: flex; flex-direction: column; align-items: center; gap: 3px;
  padding: 6px 2px 5px;
  border: 1px solid transparent; border-radius: var(--r-6);
  background: transparent; color: var(--text-3);
  font: inherit; font-size: var(--fs-10); font-weight: 600;
  cursor: pointer; transition: background .12s ease, color .12s ease, border-color .12s ease;
}
.step-b .si { display: grid; place-items: center; width: 15px; height: 15px; }
.step-b .si svg { width: 15px; height: 15px; }
.step-b .sl { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.step-b .sd {
  position: absolute; top: 4px; right: 4px;
  width: 5px; height: 5px; border-radius: 50%; background: var(--border-3);
}
.step-b .sd[data-s="running"] { background: var(--warning); animation: stpulse 1.1s infinite; }
.step-b .sd[data-s="done"] { background: var(--success); }
.step-b .sd[data-s="pending"] { background: var(--accent); }
.step-b:hover:not(:disabled) { background: var(--bg-panel); color: var(--text-2); }
.step-b.ok { color: var(--success); }
.step-b.on {
  background: var(--bg-panel); border-color: var(--accent); color: var(--accent-text);
  box-shadow: var(--sh-1);
}
.step-b:disabled { opacity: .4; cursor: not-allowed; }

.work-progress { flex: 0 0 auto; height: 2px; background: var(--bg-subtle); }
.work-progress .bar { height: 100%; width: 0; background: var(--accent); transition: width .45s ease; }

.work-body { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; }

.work-foot {
  flex: 0 0 auto; display: flex; gap: 6px; padding: 9px 10px;
  border-top: 1px solid var(--border-1); background: var(--bg-sidebar);
}
.work-foot .btn { flex: 1; }

.panel-empty { padding: 40px 20px; text-align: center; color: var(--text-3); }
.panel-empty .pe-i { display: grid; place-items: center; margin: 0 auto 10px; width: 34px; height: 34px; opacity: .5 }
.panel-empty .pe-i svg { width: 26px; height: 26px }
.panel-empty b { display: block; font-size: var(--fs-12); font-weight: 600; color: var(--text-2); margin-bottom: 4px; }
.panel-empty span { font-size: var(--fs-11); line-height: 1.65; }

/* --- 새 기획 과제 · 요청사항 입력 체크리스트 ---
   4열 입력창 하나에 넣은 내용을 항목으로 쪼개 보여 준다. 사람이 칸을
   채우는 것이 아니라 AI직원이 읽어낸 결과라는 것을 드러내는 자리다. */
.ipn { padding: 4px 0 0; }
.ipn-r {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 9px 12px; border-bottom: 1px solid var(--border-1);
  opacity: .5; transition: opacity .2s;
}
.ipn-r.on { opacity: 1; }
.ipn-r .ck {
  flex: 0 0 auto; width: 15px; height: 15px; margin-top: 1px;
  display: grid; place-items: center; border-radius: 50%;
  border: 1px solid var(--border-2); background: var(--bg-app);
  font-size: var(--fs-10); color: var(--text-3);
}
.ipn-r.on .ck { border-color: transparent; background: var(--success-subtle); color: var(--success); font-weight: 700; }
.ipn-r .tx { flex: 1; min-width: 0; }
.ipn-r .tx b { display: block; font-size: var(--fs-12); font-weight: 650; }
.ipn-r .tx .d { display: block; font-size: var(--fs-10); color: var(--text-3); margin-top: 2px; line-height: 1.5; }
.ipn-r .vv { flex: 0 0 auto; font-size: var(--fs-11); font-weight: 600; color: var(--text-2); }
.ipn-r.on .vv { color: var(--accent-text); }
.ipn-n { padding: 12px; font-size: var(--fs-10); color: var(--text-3); line-height: 1.65; }

/* --- 수집 항목 트리 --- */
.cgrp { border-bottom: 1px solid var(--border-1); padding: 9px 12px; opacity: .34; transition: opacity .3s; }
.cgrp.on { opacity: 1; }
.cgrp-h { display: flex; align-items: center; gap: 7px; }
.cgrp-h .no { font-size: var(--fs-10); font-weight: 700; color: var(--text-3); font-variant-numeric: tabular-nums; }
.cgrp-h b { font-size: var(--fs-12); font-weight: 650; flex: 1; min-width: 0; }
.cgrp-h .st { width: 6px; height: 6px; border-radius: 50%; background: var(--border-3); flex: 0 0 auto }
.cgrp.on .cgrp-h .st { background: var(--success) }
.cgrp .src { font-size: var(--fs-10); color: var(--text-3); margin: 2px 0 0 22px; }
.cgrp ul { list-style: none; margin: 7px 0 0; padding: 0 0 0 22px; }
.cgrp li { display: flex; align-items: center; gap: 6px; font-size: var(--fs-11); color: var(--text-2); padding: 2.5px 0; }
.cgrp li .ck { flex: 0 0 auto; width: 9px; text-align: center; font-size: var(--fs-10); color: var(--success); }
.cgrp li .cn { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cgrp li .cc { font-size: var(--fs-10); font-weight: 600; color: var(--text-3); }
.cgrp li .srcpill {
  font-size: 9px; font-weight: 600; padding: 0 4px; border-radius: 3px;
  background: var(--bg-subtle); border: 1px solid var(--border-1); color: var(--text-3);
}

/* --- 진단 영역 리스트 --- */
.arow {
  width: 100%; text-align: left; display: block;
  border: 0; border-bottom: 1px solid var(--border-1);
  background: var(--bg-panel); padding: 10px 12px;
  cursor: pointer; opacity: .34; transition: opacity .3s, background .12s;
  font: inherit;
}
.arow.on { opacity: 1; }
.arow.on:hover { background: var(--bg-sidebar); }
.arow.sel { background: var(--accent-subtle); box-shadow: inset 2px 0 0 var(--accent); }
.arow.core { box-shadow: inset 2px 0 0 var(--accent); }
.arow-t { display: flex; align-items: center; gap: 7px; }
.arow-t .ic { font-size: var(--fs-11); flex: 0 0 auto; }
.arow-t b { font-size: var(--fs-12); font-weight: 650; flex: 1; min-width: 0; }
.arow .aq { display: block; font-size: var(--fs-10); color: var(--text-3); margin: 3px 0 0 18px; line-height: 1.45; }
.arow .abar { display: block; margin: 6px 0 0 18px; height: 3px; border-radius: 3px; background: var(--bg-subtle); overflow: hidden; }
.arow .abar i { display: block; height: 100%; border-radius: 3px; transition: width .4s; }
.arow .ameta { display: flex; gap: 8px; margin: 5px 0 0 18px; font-size: var(--fs-10); color: var(--text-3); }
.arow .lvb { font-size: 9.5px; font-weight: 700; color: #fff; border-radius: 4px; padding: 1px 5px; }
.arow .wait { font-size: var(--fs-10); color: var(--text-3); }

/* --- 문서 목차 2단 트리 (genffice-docs .toc-list 개념) --- */
.toc-list { list-style: none; padding: 6px 8px; }
.toc-item { margin-bottom: 1px; opacity: .38; transition: opacity .3s; }
.toc-item.on { opacity: 1; }
.toc-section-btn {
  display: flex; align-items: center; gap: 8px;
  width: 100%; padding: 6px 7px;
  border: 0; border-radius: var(--r-6); background: transparent;
  font: inherit; text-align: left; cursor: pointer; color: var(--text-1);
}
.toc-item.on .toc-section-btn:hover { background: var(--bg-hover); }
.toc-item.active > .toc-section-btn { background: var(--accent-subtle); color: var(--accent-text); }
.toc-section-btn .num {
  display: grid; place-items: center;
  width: 17px; height: 17px; flex-shrink: 0;
  border-radius: var(--r-4);
  background: var(--bg-subtle); border: 1px solid var(--border-1);
  font-size: var(--fs-10); font-weight: 700; color: var(--text-3);
}
.toc-item.on .toc-section-btn .num { background: var(--accent); border-color: transparent; color: #fff; }
.toc-section-btn .title { flex: 1; min-width: 0; font-size: var(--fs-12); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.toc-section-btn .status { width: 6px; height: 6px; flex-shrink: 0; border-radius: 50%; background: var(--border-3); }
.toc-item.on .toc-section-btn .status { background: var(--success); }
.toc-item.writing .toc-section-btn .status { background: var(--warning); animation: stpulse 1.1s infinite; }
.toc-children { list-style: none; padding: 1px 0 4px 25px; }
.toc-child-btn {
  display: block; width: 100%; padding: 3px 7px;
  border: 0; border-radius: var(--r-4); background: transparent;
  font: inherit; font-size: var(--fs-11); color: var(--text-2);
  text-align: left; cursor: pointer; line-height: 1.5;
}
.toc-child-btn:hover { background: var(--bg-hover); color: var(--text-1); }
.toc-child-btn.active { background: var(--accent-subtle); color: var(--accent-text); font-weight: 600; }

/* --- 슬라이드 썸네일 레일 (genffice-slide .deck-list 개념) --- */
.deck-list { padding: 10px; }
.deck-group {
  font-size: var(--fs-10); font-weight: 700; color: var(--text-3);
  letter-spacing: .03em; margin: 12px 2px 6px;
}
.deck-group:first-child { margin-top: 0; }
.slide-item {
  display: block; width: 100%; border: 0; background: transparent;
  padding: 0; margin-bottom: 10px; cursor: pointer; text-align: left; font: inherit;
}
.slide-item .tw {
  position: relative; display: block;
  border: 1px solid var(--border-2); border-radius: var(--r-6);
  overflow: hidden; background: #fff; transition: border-color .12s, box-shadow .12s;
}
.slide-item:hover .tw { border-color: var(--border-3); }
.slide-item.sel .tw { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-subtle); }
.slide-item .tno {
  position: absolute; top: 0; left: 0; z-index: 2;
  padding: 1px 5px; border-bottom-right-radius: 5px;
  background: rgba(255, 255, 255, .92);
  font-size: 9px; font-weight: 700; color: var(--text-1);
  font-variant-numeric: tabular-nums;
}
.slide-item .tdot { position: absolute; top: 4px; right: 4px; z-index: 2; width: 6px; height: 6px; border-radius: 50%; background: var(--success); }
.slide-item .tt {
  display: flex; gap: 5px; align-items: baseline; margin-top: 4px;
  font-size: var(--fs-10); font-weight: 600; color: var(--text-2); line-height: 1.4;
}
.slide-item .tt i { font-style: normal; font-weight: 700; color: var(--text-3); font-variant-numeric: tabular-nums; }
.slide-item.ghost .tw { background: var(--bg-subtle); border-style: dashed; }
.slide-item.ghost .tw .sfit { opacity: 0; }

/* ============================================================
   4열 · 캔버스
   ============================================================ */

.canvas { display: flex; flex-direction: column; min-width: 0; min-height: 0; overflow: hidden; background: var(--bg-app); }
.cv { display: flex; flex-direction: column; flex: 1; min-height: 0; }
.cv-head {
  flex: 0 0 auto; display: flex; align-items: center; gap: 10px;
  min-height: 44px; padding: 6px 14px;
  border-bottom: 1px solid var(--border-1); background: var(--bg-panel);
  flex-wrap: wrap;
}
.cv-body { flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; }

.cv-tabs { display: inline-flex; gap: 2px; padding: 2px; border-radius: var(--r-6); background: var(--bg-subtle); }
.cv-tab {
  border: 0; border-radius: var(--r-4); background: transparent;
  padding: 4px 10px; font: inherit; font-size: var(--fs-11); font-weight: 600;
  color: var(--text-2); cursor: pointer; white-space: nowrap;
}
.cv-tab:hover { color: var(--text-1); }
.cv-tab.on { background: var(--bg-panel); color: var(--accent-text); box-shadow: var(--sh-1); }

.cv-meta { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: var(--fs-11); color: var(--text-3); min-width: 0; }
.cv-meta b { font-size: var(--fs-12); font-weight: 650; color: var(--text-1); }
.cv-rt { margin-left: auto; display: flex; align-items: center; gap: 6px; flex-shrink: 0; }

.cv-empty { display: grid; place-items: center; height: 100%; padding: 40px 20px; text-align: center; color: var(--text-3); }
.cv-empty .ei { display: grid; place-items: center; margin: 0 auto 12px; opacity: .45 }
.cv-empty .ei svg { width: 34px; height: 34px }
.cv-empty b { display: block; font-size: var(--fs-14); font-weight: 650; color: var(--text-2); margin-bottom: 6px; }
.cv-empty span { font-size: var(--fs-12); line-height: 1.7; }

/* --- 워크스페이스 시작 화면 --- */
.ws-start { max-width: 720px; margin: 0 auto; padding: 46px 24px 40px; }
.ws-start h1 { font-size: 21px; font-weight: 650; letter-spacing: -.02em; margin-bottom: 8px; }
.ws-start .lead { font-size: var(--fs-13); color: var(--text-2); line-height: 1.75; margin-bottom: 24px; }
.ws-start .lead b { font-weight: 650; color: var(--text-1); }
.ws-flow { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 26px; }
.ws-flow .f {
  border: 1px solid var(--border-1); border-radius: var(--r-8);
  background: var(--bg-panel); padding: 11px 12px;
}
.ws-flow .f .k { font-size: var(--fs-10); font-weight: 700; color: var(--text-3); }
.ws-flow .f .t { font-size: var(--fs-12); font-weight: 650; margin: 3px 0 2px; }
.ws-flow .f .d { font-size: var(--fs-10); color: var(--text-3); line-height: 1.5; }
.ws-flow .f[data-s="done"] { border-color: var(--accent-border); background: var(--accent-subtle); }
.ws-flow .f[data-s="done"] .k { color: var(--accent-text); }

.ws-sec { font-size: var(--fs-11); font-weight: 600; color: var(--text-3); letter-spacing: .03em; margin-bottom: 8px; }
.ws-p {
  display: flex; gap: 10px; align-items: flex-start;
  width: 100%; margin-bottom: 7px; padding: 12px 14px;
  border: 1px solid var(--border-1); border-radius: var(--r-8);
  background: var(--bg-panel); color: var(--text-1);
  font: inherit; font-size: var(--fs-12); line-height: 1.65;
  text-align: left; cursor: pointer; transition: border-color .12s, background .12s;
}
.ws-p:hover { border-color: var(--accent-border); background: var(--accent-subtle); }
.ws-p .n { flex: 0 0 auto; font-weight: 700; color: var(--text-3); }
.ws-hint { margin-top: 18px; font-size: var(--fs-11); color: var(--text-3); line-height: 1.7; }
.ws-hint b { font-weight: 650; color: var(--text-2); }

/* --- 새 기획 과제 (genffice-docs 의 "새 문서" 자리) --- */
/* --- 과제 목록 (genffice-docs 의 "문서 목록" 자리) --- */
.pl-list { display: grid; gap: 7px; }
.pl-r {
  display: flex; align-items: center; gap: 14px;
  width: 100%; padding: 13px 15px;
  border: 1px solid var(--border-1); border-radius: var(--r-8);
  background: var(--bg-panel); color: var(--text-1);
  font: inherit; text-align: left; cursor: pointer;
  transition: border-color .12s, background .12s;
}
.pl-r:hover:not(:disabled) { border-color: var(--accent-border); background: var(--accent-subtle); }
.pl-r:disabled { cursor: not-allowed; background: var(--bg-sidebar); }
.pl-r:disabled .pl-m { opacity: .55; }
.pl-m { flex: 1; min-width: 0; }
.pl-t { display: flex; align-items: center; gap: 7px; }
.pl-t b { font-size: var(--fs-13); font-weight: 650; }
.pl-d { font-size: var(--fs-11); color: var(--text-2); margin-top: 3px; line-height: 1.55; }
/* views.css 의 .pill 은 배경 없는 흰 글자여서 셸 화면에서 쓸 수 없다 */
.pl-tag {
  flex-shrink: 0; padding: 1px 7px; border-radius: 20px;
  border: 1px solid var(--border-2); background: var(--bg-app);
  font-size: var(--fs-10); font-weight: 600; color: var(--text-2); white-space: nowrap;
}
.pl-tag[data-s="done"] { border-color: transparent; background: var(--success-subtle); color: var(--success); }
.pl-tag[data-s="run"] { border-color: transparent; background: var(--warning-subtle); color: var(--warning); }
/* 접수된 요청사항 요약 — 목록에서 "무엇을 요청받은 일인지" 가 보이게 한다 */
.pl-q { display: flex; flex-wrap: wrap; gap: 4px 10px; margin-top: 6px; font-size: var(--fs-10); color: var(--text-3); }
.pl-p { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 8px; }
.pl-p .pp {
  padding: 1px 7px; border-radius: 20px;
  border: 1px solid var(--border-2); background: var(--bg-app);
  font-size: var(--fs-10); font-weight: 600; color: var(--text-3);
}
.pl-p .pp[data-s="done"] { border-color: transparent; background: var(--success-subtle); color: var(--success); }
.pl-p .pp[data-s="run"] { border-color: transparent; background: var(--warning-subtle); color: var(--warning); }
.pl-n { flex: 0 0 auto; font-size: var(--fs-12); font-weight: 700; color: var(--text-3); font-variant-numeric: tabular-nums; }

/* ============================================================
   토스트 · 모달
   ============================================================ */

.toasts { position: fixed; left: 50%; bottom: 26px; transform: translateX(-50%); z-index: 400; display: flex; flex-direction: column; gap: 7px; align-items: center; pointer-events: none; }
.toast {
  padding: 8px 15px; border-radius: 20px;
  background: rgba(24, 24, 27, .92); color: #fff;
  font-size: var(--fs-12); font-weight: 500;
  box-shadow: var(--sh-2); animation: tin .18s ease;
}
@keyframes tin { from { opacity: 0; transform: translateY(6px) } }

#overlay:empty { display: none; }
.mask { position: fixed; inset: 0; z-index: 500; background: rgba(24, 24, 27, .44); display: grid; place-items: center; padding: 24px; }
.modal {
  width: min(880px, 100%); max-height: 88vh; display: flex; flex-direction: column;
  background: var(--bg-panel); border-radius: var(--r-14); box-shadow: var(--sh-3); overflow: hidden;
}
.modal-h { flex: 0 0 auto; display: flex; align-items: center; gap: 10px; padding: 14px 18px; border-bottom: 1px solid var(--border-1); }
.modal-h h3 { font-size: var(--fs-15); font-weight: 650; }
.modal-h .d { font-size: var(--fs-11); color: var(--text-3); min-width: 0; }
.modal-h .x { margin-left: auto; flex-shrink: 0; border: 0; background: transparent; color: var(--text-3); font: inherit; font-size: var(--fs-12); cursor: pointer; padding: 4px 6px; border-radius: var(--r-6); }
.modal-h .x:hover { background: var(--bg-hover); color: var(--text-1); }
.modal-b { flex: 1; min-height: 0; overflow-y: auto; padding: 16px 18px; }
.modal-f { flex: 0 0 auto; display: flex; justify-content: flex-end; gap: 7px; padding: 12px 18px; border-top: 1px solid var(--border-1); background: var(--bg-sidebar); }

.tgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; }
.tcell {
  display: block; border: 1px solid var(--border-2); border-radius: var(--r-8);
  background: var(--bg-panel); padding: 8px; cursor: pointer; text-align: left; font: inherit;
  transition: border-color .12s, box-shadow .12s;
}
.tcell:hover { border-color: var(--border-3); }
.tcell.sel { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-subtle); }
.tcell .tw { display: block; border-radius: var(--r-4); overflow: hidden; background: #fff; }
.tcell b { display: block; font-size: var(--fs-12); font-weight: 650; margin-top: 7px; }
.tcell span { display: block; font-size: var(--fs-10); color: var(--text-3); line-height: 1.5; margin-top: 1px; }

/* --- 팀 · AI직원 모달 (ksp-mock 1열 명단이 여기로 옮겨졌다) --- */
.team-grid { display: grid; grid-template-columns: 1fr 1.35fr; gap: 20px; }
.team-sec h4 { font-size: var(--fs-11); font-weight: 600; color: var(--text-3); letter-spacing: .03em; margin-bottom: 8px; }
.person { display: flex; align-items: center; gap: 9px; padding: 7px 6px; border-radius: var(--r-6); }
.person:hover { background: var(--bg-sidebar); }
.person .avatar { display: grid; place-items: center; width: 27px; height: 27px; flex-shrink: 0; border-radius: 50%; color: #fff; font-size: var(--fs-11); font-weight: 700; }
.person .pn { flex: 1; min-width: 0; }
.person .pn b { display: block; font-size: var(--fs-12); font-weight: 600; line-height: 1.35; }
.person .pn span { display: block; font-size: var(--fs-10); color: var(--text-3); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.person .dot { width: 6px; height: 6px; flex-shrink: 0; border-radius: 50%; background: var(--text-3); }
.person .dot.on { background: var(--success); }
.person .dot.away { background: var(--warning); }

.agent-card { border: 1px solid var(--border-1); border-radius: var(--r-8); background: var(--bg-panel); padding: 10px 11px; margin-bottom: 8px; }
.agent-card.primary { border-color: var(--accent-border); background: var(--accent-subtle); }
.agent-card .at { display: flex; align-items: center; gap: 8px; }
.agent-card .em { display: grid; place-items: center; width: 26px; height: 26px; flex-shrink: 0; border-radius: var(--r-6); background: var(--bg-panel); border: 1px solid var(--border-1); font-size: var(--fs-14); }
.agent-card .an { flex: 1; min-width: 0; }
.agent-card .an b { display: block; font-size: var(--fs-12); font-weight: 650; }
.agent-card .an span { display: block; font-size: var(--fs-10); color: var(--text-3); }
.agent-card .stat { flex-shrink: 0; font-size: 9.5px; font-weight: 700; padding: 2px 7px; border-radius: 20px; background: var(--bg-subtle); border: 1px solid var(--border-1); color: var(--text-3); white-space: nowrap; }
.agent-card .stat.run { background: var(--warning-subtle); border-color: transparent; color: var(--warning); }
.agent-card .stat.done { background: var(--success-subtle); border-color: transparent; color: var(--success); }
.agent-card .ad { font-size: var(--fs-11); color: var(--text-2); margin-top: 7px; line-height: 1.6; }
.agent-card .askills { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 7px; }
.askill { font-size: 9.5px; font-weight: 600; color: var(--accent-text); background: var(--bg-panel); border: 1px solid var(--accent-border); border-radius: var(--r-4); padding: 1px 6px; }

/* ============================================================
   반응형 — 4열을 좁은 화면에 접는 순서는 genffice-docs(1240)·genffice-slide(1320)
   와 같은 장치를 쓴다. ① 메뉴를 아이콘 레일로 ② 스트림을 캔버스 위로 쌓기.
   ============================================================ */

@media (max-width: 1400px) {
  .app {
    grid-template-columns:
      52px var(--split-w)
      minmax(200px, var(--work-w)) var(--split-w)
      minmax(0, 1fr);
    /* 3열에 입력창이 있으므로 접어 올릴 때도 최소 높이를 넉넉히 준다 */
    grid-template-rows: minmax(272px, 2fr) minmax(0, 3fr);
  }
  .menu { padding: 12px 8px; align-items: center; }
  .menu, .work { grid-row: 1 / -1; }
  .splitter[data-split="menu"], .splitter[data-split="work"] { grid-row: 1 / -1; }
  .splitter[data-split="stream"] { display: none; }
  .stream { grid-column: 5; grid-row: 1; }
  .canvas { grid-column: 5; grid-row: 2; border-top: 1px solid var(--border-2); }

  .brand { padding: 4px 0 14px; }
  .brand .txt, .nav-label, .menu-foot { display: none; }
  .nav-item { justify-content: center; padding: 0; }
  .nav-item .lbl, .nav-item .kb { display: none; }
  .splitter[data-split="menu"] { pointer-events: none; }
}

/* 더 좁아지면 2열을 접는다. 3열은 지시를 넣는 유일한 자리이므로 끝까지 남긴다.
   단계 이동은 워크스페이스·과제 목록 화면과 대화창 요청으로 대신한다. */
@media (max-width: 980px) {
  .app {
    grid-template-columns: 52px var(--split-w) minmax(0, 1fr);
    grid-template-rows: minmax(0, 1fr) minmax(0, 1fr);
  }
  .menu, .splitter[data-split="menu"] { grid-row: 1 / -1; }
  .work, .splitter[data-split="work"] { display: none; }
  .stream { grid-column: 3; grid-row: 1; }
  .canvas { grid-column: 3; grid-row: 2; border-top: 1px solid var(--border-2); }
}
