/* PPASS 워크플로우 바닐라 화면. 원본 콘텐츠 영역은 직각 표면을 기본으로 한다. */
.ppw-host {
  height: 100%;
  min-height: 0;
  overflow: hidden;
}
.ppw-host {
  --ppw-primary: #2970ff;
  --ppw-primary-deep: #1b58d4;
  --ppw-primary-weak: #eaf1ff;
  --ppw-line: #e1e5eb;
  --ppw-border: #d8dde5;
  --ppw-bg: #f7f8fa;
  --ppw-surface: #fff;
  --ppw-text: #1f2937;
  --ppw-muted: #64748b;
  color: var(--ppw-text);
  font-family: inherit;
}
.ppw-host *, .ppw-host *::before, .ppw-host *::after { box-sizing: border-box; }
/* font-family만 상속한다. `font` 단축은 font-size까지 상속(본문 16px)시켜 버튼 클래스의 12px를 덮어버리므로 쓰지 않는다. */
.ppw-host button, .ppw-host input, .ppw-host textarea { border-radius: 0 !important; font-family: inherit; }
.ppw-host button { touch-action: manipulation; }
.ppw-host button:focus-visible, .ppw-host input:focus-visible, .ppw-host textarea:focus-visible, .ppw-host [tabindex]:focus-visible {
  outline: 2px solid var(--ppw-primary);
  outline-offset: 1px;
}
.ppw-root, .ppw-view { height: 100%; min-height: 0; }
.ppw-view { display: flex; flex-direction: column; overflow: hidden; background: #f5f5f5; }
.ppw-list-scroll { height: 100%; overflow-y: scroll; background: #f5f5f5; }
.ppw-list-content { width: min(100%, 1720px); margin: 0 auto; padding: 32px 40px 64px; }   /* 라이브러리·대시보드와 같은 상자(최대 폭 1720px, 여백 32/40/64) — 2026-08-19 */
.ppw-page-head { margin-bottom: 24px; }
.ppw-page-head h1 { margin: 0; color: var(--ppw-text); font-size: 28px; font-weight: 700; letter-spacing: -.02em; line-height: 1.15; }
.ppw-page-head p { margin: 8px 0 0; max-width: 760px; color: var(--ppw-muted); font-size: 14px; line-height: 1.6; }

/* 과정 둘러보기는 목록 머리 단추 대신 제목 줄 오른쪽 끝 작은 [?] 단추로 연다 (2026-10-29 Benson) */
.ppw-page-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.ppw-host .ppw-tour-info { display: inline-flex; width: 26px; height: 26px; align-items: center; justify-content: center; border: 0; border-radius: 999px; background: transparent; color: #94a3b8; cursor: pointer; padding: 0; font: inherit; }
.ppw-host .ppw-tour-info:hover { background: #eef2f7; color: var(--ppw-primary); }

.ppw-btn {
  min-height: 34px;
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  justify-content: center;
  gap: 6px;
  border: 1px solid var(--ppw-border);
  background: #fff;
  padding: 7px 12px;
  color: #334155;
  font-size: 12px;
  font-weight: 650;
  line-height: 1;
  cursor: pointer;
  white-space: nowrap;
}
.ppw-btn:hover { border-color: #aab3c1; color: var(--ppw-text); }
.ppw-btn:disabled { cursor: not-allowed; opacity: .42; }
.ppw-btn-primary { border-color: var(--ppw-primary); background: var(--ppw-primary); color: #fff; }
.ppw-btn-primary:hover { border-color: var(--ppw-primary-deep); background: var(--ppw-primary-deep); color: #fff; }
.ppw-btn-danger { border-color: #fecaca; background: #fff; color: #b91c1c; }
.ppw-btn-danger:hover { border-color: #ef4444; background: #fff1f2; color: #991b1b; }
.ppw-icon-button {
  width: 32px;
  height: 32px;
  display: inline-grid;
  flex: 0 0 auto;
  place-items: center;
  border: 0;
  background: transparent;
  color: var(--ppw-muted);
  cursor: pointer;
}
.ppw-icon-button:hover, .ppw-icon-button[aria-expanded="true"] { background: #f1f5f9; color: var(--ppw-primary); }

.ppw-list-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 20px; }
.ppw-toolbar-spacer { flex: 1; }
.ppw-sort-label { color: var(--ppw-muted); font-size: 12px; }
.ppw-search { position: relative; display: block; }
.ppw-search > svg { position: absolute; z-index: 1; left: 10px; top: 50%; transform: translateY(-50%); color: #94a3b8; pointer-events: none; }
.ppw-search input {
  width: 288px;
  min-height: 36px;
  border: 1px solid var(--ppw-border);
  background: #fff;
  padding: 8px 10px 8px 34px;
  color: var(--ppw-text);
  font-size: 12px;
  outline: 0;
}
.ppw-search input:focus { border-color: var(--ppw-primary); }
.ppw-select { position: relative; min-width: 150px; }
.ppw-select-trigger {
  width: 100%;
  min-height: 36px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  border: 1px solid var(--ppw-border);
  background: #fff;
  padding: 8px 10px;
  color: #334155;
  font-size: 12px;
  text-align: left;
  cursor: pointer;
}
.ppw-select-trigger:hover, .ppw-select.is-open .ppw-select-trigger { border-color: var(--ppw-primary); }
.ppw-select-trigger > svg { flex: 0 0 auto; transition: transform .14s ease; }
.ppw-select.is-open .ppw-select-trigger > svg { transform: rotate(180deg); }
.ppw-select-menu {
  position: absolute;
  z-index: 90;
  top: calc(100% + 3px);
  left: 0;
  right: 0;
  max-height: 240px;
  overflow-y: auto;
  border: 1px solid #cbd5e1;
  background: #fff;
  padding: 3px 0;
  box-shadow: 0 12px 28px rgba(15,23,42,.14);
}
.ppw-select-option { width: 100%; min-height: 34px; display: flex; align-items: center; gap: 7px; border: 0; background: #fff; padding: 8px 10px; color: #334155; font-size: 12px; text-align: left; cursor: pointer; }
.ppw-select-check { width: 14px; height: 14px; display: grid; flex: 0 0 auto; place-items: center; color: var(--ppw-primary); }
.ppw-select-option:hover { background: #f1f5f9; }
.ppw-select-option.is-selected { background: var(--ppw-primary-weak); color: var(--ppw-primary-deep); font-weight: 700; }

.ppw-card-grid { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); gap: 16px; }
.ppw-card {
  position: relative;
  min-height: 180px;   /* 템플릿 관리 카드와 같은 규칙(2026-08-19). 고정 높이면 내용이 길 때 잘린다 */
  display: flex;
  min-width: 0;
  flex-direction: column;
  border: 1px solid var(--ppw-line);
  background: var(--ppw-surface);
  padding: 20px;
  cursor: pointer;
  transition: border-color .14s ease, box-shadow .14s ease;
}
.ppw-card:hover, .ppw-card:focus-within { border-color: rgba(41,112,255,.7); box-shadow: 0 8px 22px rgba(15,23,42,.07); }
.ppw-card-top { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-width: 0; }
.ppw-card .ppw-card-top > h2 { flex: 1; min-width: 0; margin: 0; }
.ppw-card-grid > .ppw-card { min-height: 0; padding: 16px 18px; }   /* 목록 카드 공통(2026-10-29), vlmops.css의 .vlmops-card와 같은 값 */
.ppw-card-icon { width: 36px; height: 36px; display: grid; place-items: center; background: var(--ppw-primary-weak); color: var(--ppw-primary); }
.ppw-card-actions { display: flex; align-items: center; gap: 1px; }
.ppw-card-action { width: 28px; height: 28px; display: grid; place-items: center; border: 0; background: transparent; color: #94a3b8; opacity: 0; cursor: pointer; }
.ppw-card:hover .ppw-card-action, .ppw-card:focus-within .ppw-card-action, .ppw-card-action.is-favorite, .ppw-card-action[aria-expanded="true"] { opacity: 1; }
.ppw-card-action:hover { background: #f1f5f9; color: #334155; }
/* 더보기(메뉴) 버튼은 늘 보인다 — 템플릿 관리 카드와 같은 규칙(2026-08-18 Benson). */
.ppw-card-action[data-ppw-action="card-menu-toggle"] { opacity: 1; }
.ppw-card-action[data-ppw-action="favorite-toggle"] { opacity: 1; }   /* 즐겨찾기 별은 항상 보인다(2026-08-19 Benson) */
.ppw-card-action.is-favorite { color: #f59e0b; }
.ppw-card-action.is-favorite svg { fill: currentColor; }
.ppw-card h2 { margin: 12px 0 0; overflow: hidden; color: #1f2937; font-size: 15px; font-weight: 750; text-overflow: ellipsis; white-space: nowrap; }
.ppw-card > p { margin: 4px 0 0; overflow: hidden; color: var(--ppw-muted); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-card-meta { display: flex; align-items: center; gap: 4px; margin-top: 10px; color: var(--ppw-muted); font-size: 12px; }
.ppw-card > time { margin-top: auto; padding-top: 8px; color: #94a3b8; font-size: 12px; }
.ppw-menu-anchor { position: relative; display: inline-flex; }
.ppw-context-menu {
  position: absolute;
  z-index: 100;
  top: calc(100% + 4px);
  right: 0;
  width: max-content;
  min-width: 184px;
  display: block;
  border: 1px solid var(--ppw-line);
  background: #fff;
  padding: 4px 0;
  box-shadow: 0 14px 34px rgba(15,23,42,.16);
}
.ppw-context-menu > button { width: 100%; min-height: 34px; display: flex; align-items: center; gap: 8px; border: 0; background: transparent; padding: 8px 12px; color: #334155; font-size: 12px; text-align: left; cursor: pointer; }
.ppw-context-menu > button:hover { background: var(--ppw-bg); color: var(--ppw-text); }
.ppw-context-menu > button.is-danger { color: #b91c1c; }
.ppw-context-menu > button:disabled { cursor: not-allowed; background: transparent; }
/* 블록 우클릭 메뉴(2026-11-04): 누른 자리에 띄운다 */
.ppw-host .ppw-node-menu { top: auto; right: auto; z-index: 30; min-width: 150px; }
.ppw-context-menu > button.is-danger:hover { background: #fff1f2; color: #991b1b; }
.ppw-context-menu > span { display: block; height: 1px; margin: 4px 0; background: var(--ppw-line); }
.ppw-empty { min-height: 220px; display: grid; place-items: center; border: 1px dashed #cbd5e1; background: #fff; padding: 32px; text-align: center; }
.ppw-empty svg { color: #94a3b8; }
.ppw-empty strong { display: block; margin-top: 12px; color: #1f2937; font-size: 13px; }
.ppw-empty p { margin: 5px 0 0; color: var(--ppw-muted); font-size: 11px; }
.ppw-inline-error { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 18px; border: 1px solid #fecaca; background: #fff1f2; padding: 11px 14px; color: #b91c1c; }
.ppw-inline-error > div { min-width: 0; flex: 1; }
.ppw-inline-error strong { font-size: 12px; }
.ppw-inline-error p { margin: 3px 0 0; overflow-wrap: anywhere; color: #64748b; font-size: 10px; }
.ppw-inline-error > button { border: 0; background: transparent; color: #94a3b8; cursor: pointer; }

.ppw-detail-bar { position: relative; z-index: 40; min-height: 49px; display: flex; flex: 0 0 auto; align-items: center; gap: 8px; border-bottom: 1px solid var(--ppw-line); background: #fff; padding: 8px 16px; }
.ppw-detail-bar > strong { flex: 0 0 auto; color: #1f2937; font-size: 14px; font-weight: 750; }
.ppw-detail-spacer { flex: 1; }
.ppw-detail-description { max-width: 38%; overflow: hidden; color: var(--ppw-muted); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-dirty-label { display: inline-flex; align-items: center; gap: 5px; color: #d97706; font-size: 11px; font-weight: 650; }
.ppw-dirty-label i { width: 6px; height: 6px; border-radius: 999px; background: currentColor; }   /* Hub 상태 칩과 같은 점(2026-11-04) */
.ppw-file-chip, .ppw-run-reason { max-width: 190px; display: inline-flex; align-items: center; gap: 5px; overflow: hidden; background: var(--ppw-primary-weak); padding: 5px 8px; color: var(--ppw-primary-deep); font-size: 11px; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
.ppw-inline-spinner { width: 12px; height: 12px; border: 2px solid #cbd5e1; border-top-color: var(--ppw-primary); border-radius: 50%; animation: ppw-spin .7s linear infinite; }
@keyframes ppw-spin { to { transform: rotate(360deg); } }

.ppw-run-workspace { min-height: 0; display: flex; flex: 1; align-items: stretch; overflow: hidden; }
.ppw-run-rail { width: 248px; display: flex; flex: 0 0 248px; flex-direction: column; overflow: hidden; border-right: 1px solid var(--ppw-line); background: #fff; }
.ppw-rail-upload { flex: 0 0 auto; border-bottom: 1px solid var(--ppw-line); padding: 10px; }
.ppw-rail-upload .ppw-btn { width: 100%; }
.ppw-rail-list { min-height: 0; flex: 1; overflow-y: auto; padding: 8px; }
.ppw-rail-row { position: relative; min-height: 50px; display: flex; align-items: center; gap: 9px; padding: 7px 8px; cursor: pointer; }
.ppw-rail-row:hover { background: var(--ppw-bg); }
.ppw-rail-row.is-active { background: rgba(234,241,255,.7); }
.ppw-file-thumb { width: 34px; height: 34px; display: grid; flex: 0 0 auto; place-items: center; border: 1px solid var(--ppw-line); background: var(--ppw-bg); color: var(--ppw-muted); }
img.ppw-file-thumb { display: block; object-fit: cover; object-position: top; }
.ppw-rail-row > span:nth-child(2) { min-width: 0; flex: 1; }
.ppw-rail-row strong { display: block; overflow: hidden; color: #1f2937; font-size: 12px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.ppw-rail-row small { display: block; margin-top: 3px; overflow: hidden; color: var(--ppw-muted); font-size: 10px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-rail-row small b { color: #e11d48; }
.ppw-rail-row small b.ppw-rail-type { color: var(--ppw-primary-deep); font-weight: 650; }
.ppw-rail-row small b.ppw-rail-reviewed { color: #047857; font-weight: 650; }
.ppw-history-reviewed { flex: 0 0 auto; background: #ecfdf5; padding: 2px 5px; color: #047857; font-size: 10px; font-style: normal; font-weight: 700; }
.ppw-rail-row em { background: var(--ppw-primary); padding: 1px 4px; color: #fff; font-size: 10px; font-style: normal; font-weight: 700; }
.ppw-rail-row > button { display: none; border: 0; background: transparent; color: #94a3b8; cursor: pointer; }
.ppw-rail-row:hover > button { display: grid; place-items: center; }
.ppw-rail-row > button:hover { color: #e11d48; }
.ppw-rail-group h3 { display: flex; align-items: center; gap: 7px; margin: 0; padding: 8px 4px 3px; color: var(--ppw-muted); font-size: 10px; font-weight: 650; }
.ppw-rail-group h3::after { height: 1px; flex: 1; background: var(--ppw-line); content: ''; }
.ppw-rail-empty { padding: 24px 8px; color: #94a3b8; font-size: 11px; line-height: 1.5; text-align: center; }
.ppw-run-split { min-width: 0; min-height: 0; display: grid; flex: 1; align-items: stretch; overflow: hidden; }
.ppw-document-pane { min-width: 0; min-height: 0; overflow: hidden; background: #fff; }
.ppw-document-viewer { height: 100%; min-height: 0; display: flex; flex-direction: column; overflow: hidden; }
.ppw-document-tools { min-height: 41px; display: flex; flex: 0 0 auto; align-items: center; gap: 6px; border-bottom: 1px solid var(--ppw-line); background: #fff; padding: 7px 11px; color: var(--ppw-muted); }
.ppw-document-tools > svg { color: var(--ppw-primary); }
.ppw-document-tools > strong { min-width: 0; flex: 1; overflow: hidden; color: #334155; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-document-tools > span { width: 40px; color: var(--ppw-muted); font-size: 11px; text-align: center; }
.ppw-document-tools > i { width: 1px; height: 17px; background: var(--ppw-line); }
.ppw-document-tools > button { width: 28px; height: 26px; display: grid; place-items: center; border: 0; background: transparent; color: var(--ppw-muted); font-size: 11px; cursor: pointer; }
.ppw-document-tools > button:hover { background: var(--ppw-bg); color: var(--ppw-primary); }
.ppw-document-tools > button:disabled { cursor: not-allowed; opacity: .3; }
.ppw-document-tools > button:disabled:hover { background: transparent; color: var(--ppw-muted); }
.ppw-document-preview { width: 100%; min-height: 0; flex: 1; overflow: auto; background: #eceff1; padding: 18px; }
.ppw-document-preview img { display: block; max-width: none; margin: 0 auto; border: 1px solid var(--ppw-border); background: #fff; box-shadow: 0 1px 4px rgba(15,23,42,.08); }
.ppw-document-preview iframe { height: 100%; min-height: 460px; display: block; margin: 0 auto; border: 1px solid var(--ppw-border); background: #fff; }
/* 과거·시드 실행 기록의 목업 문서 미리보기 — 문서 페이지 형태의 자리표시. */
.ppw-doc-mock { width: min(100%, 460px); aspect-ratio: 3 / 4; margin: 0 auto; display: flex; flex-direction: column; gap: 16px; border: 1px solid var(--ppw-border); background: #fff; padding: 30px 28px; box-shadow: 0 1px 6px rgba(15,23,42,.1); }
.ppw-doc-mock-head { padding-bottom: 12px; border-bottom: 2px solid var(--ppw-line); color: #334155; font-size: 15px; font-weight: 700; }
.ppw-doc-mock-lines { display: flex; flex-direction: column; gap: 12px; }
.ppw-doc-mock-lines span { display: block; height: 9px; background: #eef1f4; }
.ppw-doc-img { display: block; width: min(100%, 560px); height: auto; margin: 0 auto; border: 1px solid var(--ppw-border); background: #fff; box-shadow: 0 1px 6px rgba(15,23,42,.1); }
.ppw-document-loading { min-height: 0; display: flex; flex: 1; align-items: center; justify-content: center; flex-direction: column; gap: 10px; background: #eceff1; color: var(--ppw-muted); }
.ppw-document-loading p { margin: 0; font-size: 11px; }
.ppw-document-empty { height: 100%; min-height: 280px; display: flex; align-items: center; justify-content: center; flex-direction: column; padding: 28px; color: #94a3b8; text-align: center; }
.ppw-document-empty.is-upload-empty { height: calc(100% - 24px); min-height: 0; margin: 12px; border: 1px dashed var(--ppw-border); }
.ppw-document-empty.is-upload-empty > span { width: 48px; height: 48px; display: grid; place-items: center; background: var(--ppw-bg); color: var(--ppw-muted); }
.ppw-document-empty strong { margin-top: 12px; color: #334155; font-size: 14px; }
.ppw-document-empty p { max-width: 340px; margin: 8px 0 0; color: var(--ppw-muted); font-size: 11px; line-height: 1.55; }
.ppw-split-handle { width: 4px; min-width: 4px; border: 0; background: var(--ppw-line); cursor: col-resize; }
.ppw-split-handle:hover, .ppw-split-handle:focus-visible { background: rgba(41,112,255,.55); outline: 0; }
.ppw-result-pane { min-width: 0; min-height: 0; display: flex; flex-direction: column; overflow: hidden; background: #fff; }
.ppw-result-head { min-height: 49px; display: flex; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 10px; border-bottom: 1px solid var(--ppw-line); padding: 8px 14px; }
.ppw-result-head > span { min-width: 0; display: flex; align-items: center; gap: 8px; }
.ppw-result-head strong { color: #1f2937; font-size: 14px; }
.ppw-result-head small { overflow: hidden; color: var(--ppw-muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-run-status-failed { background: #fff1f2; padding: 2px 5px; color: #dc2626; font-size: 10px; font-style: normal; font-weight: 700; }
.ppw-result-scroll { min-height: 0; flex: 1; overflow-y: auto; padding: 16px; }
.ppw-result-empty-state { height: 100%; display: flex; align-items: center; justify-content: center; flex-direction: column; gap: 8px; padding: 24px; background: #fff; text-align: center; }
.ppw-result-empty-state strong { color: #1f2937; font-size: 14px; }
.ppw-result-empty-state p { margin: 0; color: #94a3b8; font-size: 11px; line-height: 1.55; }
.ppw-result-empty-state b { color: #334155; }
.ppw-result-empty { height: 100%; display: grid; place-items: center; padding: 24px; color: #94a3b8; font-size: 10px; line-height: 1.5; text-align: center; }
.ppw-result-empty strong { color: #334155; }
.ppw-final-stack { display: grid; gap: 16px; }
.ppw-final-result h3, .ppw-block-outputs h3 { margin: 0 0 8px; color: #1f2937; font-size: 14px; }
.ppw-label-result + .ppw-label-result { margin-top: 12px; }
.ppw-label-result > b { display: inline-block; margin-bottom: 6px; background: var(--ppw-primary-weak); padding: 3px 7px; color: var(--ppw-primary-deep); font-size: 11px; }
.ppw-kv-table { border: 1px solid var(--ppw-line); background: #fff; }
.ppw-kv-head, .ppw-kv-table p { display: grid; grid-template-columns: minmax(120px,32%) minmax(0,1fr); margin: 0; font-size: 13px; }
.ppw-kv-head { font-size: 12px; }
.ppw-kv-head { border-bottom: 1px solid var(--ppw-line); background: #f8fafc; color: var(--ppw-muted); font-weight: 650; }
.ppw-kv-head span, .ppw-kv-table p span, .ppw-kv-table p strong { padding: 8px 10px; }
.ppw-kv-head span:first-child, .ppw-kv-table p span { border-right: 1px solid var(--ppw-line); }
.ppw-kv-table p + p { border-top: 1px solid #edf0f3; }
.ppw-kv-table p span { background: #f3f4f6; color: var(--ppw-muted); }
.ppw-kv-table p strong { overflow: hidden; color: #1f2937; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
.ppw-kv-empty { padding: 8px 10px; color: #94a3b8; font-size: 12px; }
.ppw-block-outputs > div { margin-top: 8px; }
.ppw-block-outputs > div > b { color: var(--ppw-muted); font-size: 11px; }
.ppw-block-outputs > div > p { margin: 4px 0 0; overflow-wrap: anywhere; background: var(--ppw-bg); padding: 8px 10px; color: #334155; font-size: 12px; white-space: pre-wrap; }
.ppw-result-note { margin: 0 0 12px; border: 1px solid var(--ppw-line); background: var(--ppw-bg); padding: 9px 11px; color: var(--ppw-muted); font-size: 12px; }
.ppw-step-details { margin-top: 14px; }
.ppw-step-details summary { color: var(--ppw-muted); font-size: 12px; font-weight: 650; cursor: pointer; }
.ppw-step-details ol, .ppw-live-steps { margin: 8px 0 0; padding: 0; list-style: none; }
.ppw-step { min-height: 55px; margin-top: 7px; border: 1px solid var(--ppw-line); background: #fff; padding: 9px; }
.ppw-step-main { display: flex; align-items: center; gap: 8px; }
.ppw-step.is-running { border-color: var(--ppw-primary); box-shadow: 0 0 0 2px rgba(41,112,255,.12); }
.ppw-step.is-failed { border-color: #fca5a5; }
.ppw-step.is-skipped { opacity: .58; }
.ppw-step-index { width: 18px; flex: 0 0 auto; color: #94a3b8; font-size: 11px; text-align: center; }
.ppw-step-icon { width: 30px; height: 30px; display: grid; flex: 0 0 auto; place-items: center; }
.ppw-step-main > span:nth-child(3) { min-width: 0; flex: 1; }
.ppw-step strong { display: block; color: #1f2937; font-size: 14px; }
.ppw-step small { display: block; margin-top: 3px; overflow: hidden; color: var(--ppw-muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-step time { color: #94a3b8; font-size: 11px; }
.ppw-step-main > em { color: #94a3b8; font-size: 11px; font-style: normal; }
.ppw-step-main > svg { flex: 0 0 auto; color: #dc2626; }
.ppw-step.is-skipped .ppw-step-main > svg { color: #94a3b8; }
.ppw-step-done { display: inline-grid; flex: 0 0 auto; place-items: center; color: #059669; }
.ppw-step-error { margin: 8px 0 0; overflow-wrap: anywhere; background: #fff1f2; padding: 6px 8px; color: #b91c1c; font-size: 11px; }
.ppw-step-output { max-height: 180px; margin-top: 8px; overflow: auto; background: var(--ppw-bg); padding: 7px 8px; }
.ppw-output-rows p { display: grid; grid-template-columns: minmax(90px,34%) minmax(0,1fr); gap: 8px; margin: 0; font-size: 11px; }
.ppw-output-rows p + p { margin-top: 4px; }
.ppw-output-rows span { color: var(--ppw-muted); }
.ppw-output-rows strong { overflow-wrap: anywhere; color: #334155; font-weight: 500; }
.ppw-step-output details { margin-top: 6px; }
.ppw-step-output summary { color: #94a3b8; font-size: 10px; cursor: pointer; }
.ppw-step-output pre { margin: 5px 0 0; overflow: auto; color: var(--ppw-muted); font: 11px/1.45 ui-monospace, monospace; white-space: pre-wrap; }
.ppw-fail-label, .ppw-skip-label { color: #dc2626; font-size: 9px; }
.ppw-skip-label { color: var(--ppw-muted); }
.ppw-run-error { margin-bottom: 10px; border: 1px solid #fecaca; background: #fff1f2; padding: 10px; color: #b91c1c; }
.ppw-run-error strong { font-size: 11px; }
.ppw-run-error p { margin: 3px 0 0; font-size: 10px; }

.ppw-editor-error { margin: 0; border-width: 0 0 1px; }
.ppw-editor-grid { min-height: 0; display: grid; flex: 1; grid-template-columns: 248px minmax(0,1fr) 336px; overflow: hidden; }
.ppw-palette { min-height: 0; overflow-y: auto; border-right: 1px solid var(--ppw-line); background: #fff; padding: 12px; }
.ppw-palette > h2 { margin: 0 4px; color: var(--ppw-muted); font-size: 11px; font-weight: 750; letter-spacing: .08em; text-transform: uppercase; }
.ppw-palette > p { margin: 4px 4px 12px; color: #94a3b8; font-size: 10px; }
.ppw-palette section { margin-bottom: 13px; }
.ppw-palette section h3 { margin: 0 4px 6px; color: var(--ppw-muted); font-size: 11px; font-weight: 650; }
.ppw-palette-item { width: 100%; min-height: 53px; display: grid; grid-template-columns: 34px minmax(0,1fr); align-items: center; gap: 9px; margin-top: 6px; border: 1px solid var(--ppw-line); background: #fff; padding: 8px; text-align: left; cursor: grab; }
.ppw-palette-item:hover { border-color: rgba(41,112,255,.45); background: rgba(234,241,255,.4); }
.ppw-palette-item:active { cursor: grabbing; }
/* 잠긴 블록(생성 묶음, 2026-11-04): 끌거나 추가할 수 없다 */
.ppw-host .ppw-palette-item.is-disabled, .ppw-host .ppw-palette-item.is-disabled:hover { opacity: .45; cursor: not-allowed; border-color: var(--ppw-line); background: transparent; }
.ppw-host .ppw-card-meta .ppw-preset-flow { margin: 0; padding: 0; }
/* 카드 플로우 구성(2026-11-04): 이름표와 조금 큰 블록 아이콘 */
/* 아래 .ppw-card-meta > span:first-child(gap 4px)보다 앞서도록 명시도를 올린다 */
.ppw-host .ppw-card-meta > .ppw-card-flow { display: inline-flex; align-items: center; gap: 14px; }
.ppw-host .ppw-card-flow-label { font-size: 12px; font-weight: 600; color: #667085; }
.ppw-host .ppw-card-meta .ppw-preset-flow i { width: 22px; height: 22px; }
.ppw-host .ppw-card-meta .ppw-preset-flow i + i { margin-left: 11px; }
.ppw-host .ppw-card-meta .ppw-preset-flow i + i::before { left: -9px; }
.ppw-host .vlmops-card-foot .vlmops-attn { display: inline-flex; align-items: center; gap: 6px; }
.ppw-palette-item > span:first-child { width: 34px; height: 34px; display: grid; place-items: center; }
.ppw-palette-item strong, .ppw-palette-item small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ppw-palette-item strong { color: #1f2937; font-size: 13px; font-weight: 750; }
.ppw-palette-item small { margin-top: 3px; color: var(--ppw-muted); font-size: 11px; }
.ppw-canvas-pane { position: relative; min-width: 0; min-height: 0; overflow: hidden; background-color: #f8fafc; background-image: radial-gradient(#d8dde5 1px,transparent 1px); background-size: 22px 22px; cursor: grab; }
.ppw-canvas-pane.is-panning { cursor: grabbing; }
.ppw-canvas-scroll { position: absolute; inset: 0; overflow: hidden; }
.ppw-canvas-viewport { position: absolute; top: 0; left: 0; transform-origin: 0 0; will-change: transform; }
.ppw-canvas-surface {
  position: relative;
  background: transparent;
}
/* 실행 취소와 다시 실행은 캔버스 왼쪽 위(2026-11-04 Benson). 보기 조절과 같은 모양 */
.ppw-canvas-history { position: absolute; z-index: 25; top: 14px; left: 14px; display: flex; border: 1px solid var(--ppw-border); background: #fff; box-shadow: 0 3px 12px rgba(15,23,42,.1); }
.ppw-host .ppw-canvas-history button { width: 32px; height: 32px; display: grid; place-items: center; border: 0; background: #fff; color: #475569; cursor: pointer; }
.ppw-host .ppw-canvas-history button + button { border-left: 1px solid var(--ppw-line); }
.ppw-host .ppw-canvas-history button:hover:not(:disabled) { background: var(--ppw-bg); color: var(--ppw-primary); }
.ppw-host .ppw-canvas-history button:disabled { opacity: .35; cursor: default; }
.ppw-canvas-controls { position: absolute; z-index: 25; bottom: 14px; left: 14px; display: grid; grid-template-columns: 32px; border: 1px solid var(--ppw-border); background: #fff; box-shadow: 0 3px 12px rgba(15,23,42,.1); }
.ppw-canvas-controls button { width: 32px; height: 32px; display: grid; place-items: center; border: 0; border-bottom: 1px solid var(--ppw-line); background: #fff; color: #475569; cursor: pointer; }
.ppw-canvas-controls button:hover { background: var(--ppw-bg); color: var(--ppw-primary); }
.ppw-canvas-controls span { width: 32px; padding: 5px 1px; color: var(--ppw-muted); font-size: 8px; text-align: center; }
.ppw-canvas-minimap { position: absolute; z-index: 24; right: 14px; bottom: 14px; width: 154px; height: 96px; border: 1px solid var(--ppw-border); background: rgba(255,255,255,.94); box-shadow: 0 3px 12px rgba(15,23,42,.1); cursor: crosshair; }
.ppw-canvas-minimap svg { width: 100%; height: 100%; display: block; }
.ppw-canvas-minimap line { stroke: #cbd5e1; stroke-width: 4; }
.ppw-canvas-minimap rect:not(.ppw-minimap-viewport) { opacity: .55; }
.ppw-canvas-minimap .ppw-minimap-viewport { fill: rgba(41,112,255,.08); stroke: var(--ppw-primary); stroke-width: 5; vector-effect: non-scaling-stroke; }
/* 드롭 안내와 테두리는 화면에 보이는 캔버스 칸 기준이다(2026-11-04). 캔버스 판 안에 두면 판이 크거나 옮겨졌을 때 오른쪽으로 밀려 잘린다 */
.ppw-canvas-pane.is-drop-target::after { content: ''; position: absolute; inset: 0; z-index: 19; box-shadow: inset 0 0 0 2px rgba(41,112,255,.4); pointer-events: none; }
.ppw-drop-hint { position: absolute; z-index: 20; top: 12px; left: 50%; transform: translateX(-50%); width: max-content; background: var(--ppw-primary); padding: 5px 10px; color: #fff; font-size: 11px; font-weight: 650; pointer-events: none; }
.ppw-edge-layer { position: absolute; z-index: 1; inset: 0; overflow: visible; pointer-events: none; }
.ppw-edge { pointer-events: stroke; cursor: pointer; }
.ppw-edge-hit { fill: none; stroke: transparent; stroke-width: 14; }
.ppw-edge-line { fill: none; stroke-width: 2; stroke-dasharray: 7 5; animation: ppw-edge-flow .8s linear infinite; }
.ppw-edge.is-selected .ppw-edge-line { stroke-width: 4; }
.ppw-edge text { font-size: 10px; font-weight: 700; paint-order: stroke; stroke: #fff; stroke-width: 4px; stroke-linejoin: round; pointer-events: none; }
.ppw-edge-preview { fill: none; stroke: var(--ppw-primary); stroke-width: 2; stroke-dasharray: 5 4; pointer-events: none; }
@keyframes ppw-edge-flow { to { stroke-dashoffset: -12; } }
.ppw-canvas-node { position: absolute; z-index: 2; width: 184px; min-height: 56px; border: 1px solid var(--ppw-line); background: #fff; box-shadow: 0 3px 10px rgba(15,23,42,.06); cursor: pointer; }
.ppw-canvas-node.is-selected { border-color: var(--ppw-primary); box-shadow: 0 0 0 2px rgba(41,112,255,.22); }
.ppw-canvas-node.is-connecting { box-shadow: 0 0 0 3px rgba(41,112,255,.2); }
.ppw-node-content { display: grid; grid-template-columns: 34px minmax(0,1fr); align-items: center; gap: 8px; padding: 10px; cursor: move; }
.ppw-node-content > span:first-child { width: 34px; height: 34px; display: grid; flex: 0 0 auto; place-items: center; }
.ppw-node-content > span:last-child { min-width: 0; }
.ppw-node-content strong, .ppw-node-content small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ppw-node-content strong { color: #1f2937; font-size: 13px; font-weight: 800; }
.ppw-node-content small { margin-top: 2px; color: var(--ppw-muted); font-size: 11px; }
.ppw-canvas-node footer { min-height: 25px; display: flex; justify-content: flex-start; border-top: 1px solid var(--ppw-line); padding: 5px 10px; }
.ppw-canvas-node footer time { color: #16a34a; font-size: 10px; font-weight: 600; }
.ppw-canvas-node footer b { color: #dc2626; font-size: 10px; }
.ppw-canvas-node footer b.is-skipped { color: var(--ppw-muted); }
.ppw-canvas-node footer span { color: #9ca3af; font-size: 10px; }
.ppw-node-handle { position: absolute; z-index: 4; top: 27px; width: 10px; height: 10px; border: 0; border-radius: 50%; background: #94a3b8; box-shadow: 0 0 0 2px #fff; cursor: crosshair; }
/* 클릭 영역 확대 — 시각 점은 작게 두되 잡기 쉽게 넉넉한 히트 영역(연결 시작 실패 방지) */
.ppw-node-handle::after { content: ''; position: absolute; inset: -9px; border-radius: 50%; }
.ppw-node-handle.is-target { left: -5px; }
.ppw-node-handle.is-source { right: -5px; }
.ppw-node-handle:hover, .ppw-node-handle:focus-visible { transform: scale(1.25); }
.ppw-node-handle.is-connect-valid { box-shadow: 0 0 0 2px #16a34a; }
.ppw-node-handle.is-connect-valid.is-connect-hover { transform: scale(1.45); background: #16a34a; }
.ppw-node-handle.is-connect-invalid { opacity: .2; cursor: not-allowed; }
.ppw-inspector { min-height: 0; overflow-y: auto; border-left: 1px solid var(--ppw-line); background: #fff; padding: 16px; }
.ppw-inspector-title { display: flex; align-items: center; gap: 9px; margin-bottom: 16px; }
.ppw-inspector-title > span:first-child { width: 36px; height: 36px; display: grid; flex: 0 0 auto; place-items: center; }
.ppw-inspector-title > span:nth-child(2) { min-width: 0; flex: 1; }
.ppw-inspector-title strong, .ppw-inspector-title small { display: block; }
.ppw-inspector-title strong { color: #1f2937; font-size: 14px; }
.ppw-inspector-title small { margin-top: 3px; overflow: hidden; color: var(--ppw-muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-inspector-title > button { border: 0; background: transparent; color: #94a3b8; cursor: pointer; }
.ppw-inspector-title > button:hover { color: #dc2626; }
.ppw-field { position: relative; display: block; margin-bottom: 13px; color: var(--ppw-muted); font-size: 12px; font-weight: 600; }
.ppw-field > input, .ppw-field > textarea { width: 100%; display: block; margin-top: 5px; border: 1px solid var(--ppw-border); background: #fff; padding: 8px 9px; color: #1f2937; font-size: 14px; outline: 0; }
.ppw-field > input { min-height: 34px; }
.ppw-field > textarea { resize: vertical; line-height: 1.45; }
.ppw-field > input:focus, .ppw-field > textarea:focus { border-color: var(--ppw-primary); }
.ppw-field > .ppw-select { margin-top: 5px; }
.ppw-combo { z-index: 2; }
.ppw-combo:focus-within { z-index: 12; }
.ppw-combo-menu { position: absolute; z-index: 80; top: calc(100% - 1px); left: 0; right: 0; max-height: 190px; display: none; overflow-y: auto; border: 1px solid var(--ppw-border); background: #fff; padding: 3px 0; box-shadow: 0 10px 24px rgba(15,23,42,.13); }
.ppw-combo:focus-within .ppw-combo-menu { display: block; }
.ppw-combo-menu button { width: 100%; min-height: 31px; display: block; border: 0; background: #fff; padding: 7px 9px; color: #334155; font-size: 12px; text-align: left; cursor: pointer; }
.ppw-combo-menu button:hover { background: var(--ppw-primary-weak); color: var(--ppw-primary-deep); }
.ppw-count { position: absolute; right: 0; color: #94a3b8; font-size: 9px; }
.ppw-help { margin: 0 0 13px; background: var(--ppw-bg); padding: 8px 9px; color: var(--ppw-muted); font-size: 11px; line-height: 1.5; }
.ppw-help b { color: #334155; }
.ppw-true-text { color: #16a34a; font-weight: 700; }
.ppw-false-text { color: #dc2626; font-weight: 700; }
.ppw-condition-preset { border: 1px solid rgba(41,112,255,.3); background: rgba(234,241,255,.45); padding: 9px; color: var(--ppw-primary); font-weight: 700; }
.ppw-condition-preset small { display: block; margin-top: 5px; color: var(--ppw-muted); font-size: 11px; font-weight: 400; line-height: 1.45; }
.ppw-calc-help { margin: -8px 0 13px; color: var(--ppw-muted); font-size: 11px; line-height: 1.5; }
.ppw-setting-warning { margin: 0 0 13px; border: 1px solid #fcd34d; background: #fffbeb; padding: 8px 9px; color: #a16207; font-size: 11px; line-height: 1.5; }
.ppw-chip-list { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0 13px; }
.ppw-chip-list > button { min-height: 25px; border: 1px solid var(--ppw-line); background: var(--ppw-bg); padding: 4px 8px; color: var(--ppw-muted); font-size: 12px; cursor: pointer; }
.ppw-chip-list > button:hover { border-color: rgba(41,112,255,.45); color: var(--ppw-primary); }
.ppw-chip-list > button.is-active { border-color: var(--ppw-primary); background: var(--ppw-primary); color: #fff; }
.ppw-chip-list > button.is-stale, .ppw-branch-warning, .ppw-stale-warning { border: 1px solid #fcd34d; background: #fffbeb; color: #a16207; }
.ppw-branch-warning, .ppw-stale-warning { margin: 0 0 13px; padding: 8px 9px; font-size: 11px; line-height: 1.5; }
.ppw-template-link { border: 0; background: transparent; padding: 0; color: var(--ppw-muted); font-size: 11px; text-align: left; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
.ppw-template-link:hover { color: var(--ppw-primary); }
.ppw-advanced { margin: 0 0 13px; border: 1px solid var(--ppw-line); }
.ppw-advanced > summary { padding: 8px 9px; color: var(--ppw-muted); font-size: 12px; font-weight: 600; cursor: pointer; }
.ppw-advanced > summary span { color: #94a3b8; font-weight: 400; }
.ppw-advanced > div { border-top: 1px solid var(--ppw-line); padding: 9px; }
.ppw-advanced > div > .ppw-field:last-child { margin-bottom: 0; }
.ppw-advanced-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 8px; }
.ppw-advanced-grid > p { grid-column: 1 / -1; margin: 0; color: var(--ppw-muted); font-size: 11px; line-height: 1.5; }
.ppw-field-picker { max-height: 118px; overflow-y: auto; border: 1px solid var(--ppw-line); padding: 6px; }
.ppw-uploaded-file { display: flex; align-items: center; gap: 7px; margin-top: 5px; border: 1px solid rgba(41,112,255,.35); background: rgba(234,241,255,.55); padding: 7px; color: var(--ppw-primary-deep); }
.ppw-uploaded-file > span { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ppw-uploaded-file .ppw-btn { min-height: 27px; padding: 4px 7px; }
.ppw-uploaded-file .ppw-btn { font-size: 11px; }
.ppw-guide { margin: 0; padding-left: 18px; color: var(--ppw-muted); font-size: 12px; line-height: 1.6; }
.ppw-guide li + li { margin-top: 5px; }
.ppw-inspector-results .ppw-step { margin-top: 7px; }
.ppw-editor-result-title { display: flex; align-items: center; gap: 7px; margin-bottom: 9px; color: var(--ppw-primary); }
.ppw-editor-result-title strong { color: #1f2937; font-size: 14px; }
.ppw-editor-result-summary { display: flex; align-items: center; gap: 10px; margin-bottom: 13px; border: 1px solid var(--ppw-line); background: var(--ppw-bg); padding: 7px 9px; color: var(--ppw-muted); font-size: 11px; font-variant-numeric: tabular-nums; }
.ppw-editor-result-summary b { color: #1f2937; }
.ppw-editor-result-summary .is-failed { color: #dc2626; font-weight: 700; }
.ppw-editor-result-summary time { margin-left: auto; }
.ppw-editor-doc-results { margin-bottom: 15px; }
.ppw-editor-doc-results > h3, .ppw-editor-flat-result > h3 { margin: 0 0 8px; color: #1f2937; font-size: 12px; }
.ppw-editor-doc-results > h3 span { color: var(--ppw-muted); font-weight: 400; }
.ppw-editor-doc-results details { border: 1px solid var(--ppw-line); }
.ppw-editor-doc-results details + details { margin-top: 8px; }
.ppw-editor-doc-results summary { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 8px 10px; cursor: pointer; }
.ppw-editor-doc-results summary strong { color: #1f2937; font-size: 13px; }
.ppw-editor-doc-results summary span { color: var(--ppw-muted); font-size: 11px; }
.ppw-editor-doc-results details > div { border-top: 1px solid var(--ppw-line); padding: 8px 10px; }
.ppw-editor-doc-results details p { display: flex; align-items: flex-start; gap: 8px; margin: 0; color: var(--ppw-muted); font-size: 11px; }
.ppw-editor-doc-results details p + p { margin-top: 5px; }
.ppw-editor-doc-results details p span { flex: 0 0 auto; font-weight: 600; }
.ppw-editor-doc-results details p b { min-width: 0; overflow: hidden; color: #1f2937; font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
.ppw-editor-result-steps { display: grid; gap: 8px; }
.ppw-editor-result-step { border: 1px solid var(--ppw-line); padding: 9px; }
.ppw-editor-result-step > header { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.ppw-editor-result-step > header strong { color: #1f2937; font-size: 12px; }
.ppw-editor-result-step em, .ppw-selected-run-result em { background: #f1f5f9; padding: 2px 5px; color: var(--ppw-muted); font-size: 9px; font-style: normal; }
.ppw-editor-result-step em.is-failed, .ppw-selected-run-result em.is-failed { background: #fff1f2; color: #dc2626; }
.ppw-editor-result-step > div, .ppw-editor-flat-result > div, .ppw-selected-run-result > div { max-height: 170px; margin-top: 7px; overflow: auto; background: var(--ppw-bg); padding: 8px; }
.ppw-editor-result-step > p { margin: 7px 0 0; background: #fff1f2; padding: 6px 8px; color: #dc2626; font-size: 10px; }
.ppw-editor-result-step details, .ppw-editor-flat-result details, .ppw-selected-run-result details { margin-top: 6px; }
.ppw-editor-result-step summary, .ppw-editor-flat-result summary, .ppw-selected-run-result summary { color: #94a3b8; font-size: 9px; cursor: pointer; }
.ppw-editor-result-step pre, .ppw-editor-flat-result pre, .ppw-selected-run-result pre { margin: 5px 0 0; overflow: auto; color: var(--ppw-muted); font: 10px/1.45 ui-monospace,monospace; white-space: pre-wrap; }
.ppw-editor-flat-result { margin-top: 15px; }
.ppw-selected-run-result { margin-top: 16px; border: 1px solid var(--ppw-line); }
.ppw-selected-run-result.is-stale { opacity: .72; }
.ppw-selected-run-result > header { display: flex; align-items: center; justify-content: space-between; gap: 8px; border-bottom: 1px solid var(--ppw-line); padding: 7px 9px; }
.ppw-selected-run-result > header strong { color: #1f2937; font-size: 11px; }
.ppw-selected-run-result > header span { display: flex; align-items: center; gap: 6px; }
.ppw-selected-run-result time { color: var(--ppw-muted); font-size: 9px; }
.ppw-selected-run-result .ppw-stale-warning { margin: 0; border-width: 0 0 1px; }
.ppw-selected-run-result .ppw-step-error { margin: 0; }
.ppw-no-output { margin: 0; padding: 8px 9px; color: #94a3b8; font-size: 10px; }

.ppw-modal { position: fixed; z-index: 220; inset: 0; display: grid; place-items: center; padding: 24px; }
.ppw-modal-backdrop { position: absolute; inset: 0; background: rgba(15,23,42,.5); }
.ppw-modal-card { position: relative; width: min(92vw,520px); max-height: 88vh; display: flex; flex-direction: column; overflow: hidden; border: 1px solid #cbd5e1; background: #fff; box-shadow: 0 22px 55px rgba(15,23,42,.28); }
.ppw-modal-card.is-wide { width: min(94vw,980px); }
.ppw-modal-card > header { min-height: 58px; display: flex; flex: 0 0 auto; align-items: flex-start; justify-content: space-between; gap: 14px; border-bottom: 1px solid var(--ppw-line); padding: 14px 18px; }
.ppw-modal-card > header h2 { margin: 0; color: #1f2937; font-size: 18px; font-weight: 700; letter-spacing: -.015em; line-height: 1.4; }   /* DEEP Ops 팝업 제목과 같게(2026-10-28) */
.ppw-modal-card > header p { margin: 4px 0 0; color: var(--ppw-muted); font-size: 13px; line-height: 1.5; }
.ppw-modal-card > header button { border: 0; background: transparent; color: #94a3b8; cursor: pointer; }
.ppw-modal-body { min-height: 0; overflow-y: auto; padding: 16px; }
.ppw-modal-card > footer { min-height: 58px; display: flex; flex: 0 0 auto; align-items: center; justify-content: flex-end; gap: 8px; border-top: 1px solid var(--ppw-line); padding: 11px 18px; }
.ppw-preset-card { width: 100%; display: flex; align-items: center; gap: 11px; border: 1px solid var(--ppw-line); background: #fff; padding: 12px; text-align: left; cursor: pointer; }
.ppw-preset-card + .ppw-preset-card { margin-top: 8px; }
.ppw-preset-card:hover { border-color: var(--ppw-primary); }
.ppw-preset-card > span:first-child { width: 36px; height: 36px; display: grid; flex: 0 0 auto; place-items: center; background: var(--ppw-primary-weak); color: var(--ppw-primary); }
.ppw-preset-card > span:last-child { min-width: 0; }
.ppw-preset-card strong, .ppw-preset-card small, .ppw-preset-card em { display: block; }
.ppw-preset-card strong { color: #1f2937; font-size: 11px; }
.ppw-preset-card small { margin-top: 3px; color: var(--ppw-muted); font-size: 9px; }
.ppw-preset-card em { margin-top: 3px; color: #94a3b8; font-size: 9px; font-style: normal; }
.ppw-preset-label { margin: 15px 2px 7px; color: #94a3b8; font-size: 9px; letter-spacing: .08em; text-transform: uppercase; }
.ppw-confirm-copy { margin: 0; color: var(--ppw-muted); font-size: 11px; line-height: 1.6; }
.ppw-modal-error { margin: 0; background: #fff1f2; padding: 8px 10px; color: #b91c1c; font-size: 10px; }

.ppw-modal-card.is-history { width: min(94vw,1152px); height: min(82vh,760px); }
.ppw-modal-card.is-history .ppw-modal-body { display: flex; flex-direction: column; overflow: hidden; padding: 0; }
.ppw-modal-card.is-history > header { align-items: flex-start; }
.ppw-history-title { min-width: 0; flex: 1; }
.ppw-history-title h2 { display: flex; align-items: center; gap: 7px; }
.ppw-history-title h2 svg { color: var(--ppw-primary); }
.ppw-history-tools { display: flex; flex: 0 0 auto; align-items: center; justify-content: flex-end; gap: 7px; }
.ppw-history-tools .ppw-search input { width: 180px; min-height: 32px; font-size: 12px; }
.ppw-filter-chip { min-height: 28px; border: 1px solid var(--ppw-border); background: #fff; padding: 5px 10px; color: var(--ppw-muted); font-size: 12px; font-weight: 600; cursor: pointer; }
.ppw-filter-chip.is-active { border-color: #1f2937; background: #1f2937; color: #fff; }
.ppw-modal-card > header .ppw-filter-chip { border: 1px solid var(--ppw-border); background: #fff; padding: 5px 10px; }
.ppw-modal-card > header .ppw-filter-chip.is-active { border-color: #1f2937; background: #1f2937; color: #fff; }
.ppw-history-table { min-height: 0; display: flex; flex: 1; flex-direction: column; overflow: hidden; }
.ppw-history-head, .ppw-history-row { display: grid; grid-template-columns: 38px minmax(220px,1fr) 180px 170px 55px; align-items: center; }
.ppw-history-head { min-height: 38px; flex: 0 0 auto; border-bottom: 1px solid var(--ppw-line); background: var(--ppw-bg); color: var(--ppw-muted); font-size: 11px; font-weight: 650; }
.ppw-history-head > span { padding: 0 9px; }
.ppw-history-head label, .ppw-history-row > label { display: grid; place-items: center; }
.ppw-history-head input, .ppw-history-row input { width: 15px; height: 15px; accent-color: var(--ppw-primary); }
.ppw-history-rows { min-height: 0; flex: 1; overflow-y: auto; }
.ppw-history-row { min-height: 56px; border-bottom: 1px solid #edf0f3; color: var(--ppw-muted); font-size: 12px; cursor: pointer; }
.ppw-history-row:hover { background: var(--ppw-bg); }
.ppw-history-row.is-selected { background: rgba(234,241,255,.55); }
.ppw-history-row > span { min-width: 0; padding: 8px 9px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ppw-history-file { display: flex; align-items: center; gap: 8px; }
.ppw-history-file > .ppw-file-thumb { width: 34px; height: 34px; }
.ppw-history-file strong { overflow: hidden; color: #1f2937; font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-history-file em { background: #fff1f2; padding: 2px 5px; color: #dc2626; font-size: 10px; font-style: normal; font-weight: 700; }
.ppw-history-row time, .ppw-history-row small { display: block; }
.ppw-history-row small { margin-top: 3px; color: #94a3b8; font-size: 10px; }
.ppw-history-row > button { border: 0; background: transparent; color: var(--ppw-primary); font-size: 11px; opacity: 0; cursor: pointer; }
.ppw-history-row:hover > button { opacity: 1; }
.ppw-history-empty { padding: 50px 20px; color: #94a3b8; font-size: 10px; text-align: center; }
.ppw-bulk-bar { min-height: 56px; display: flex; align-items: center; gap: 8px; border-top: 1px solid var(--ppw-line); background: #1f2937; padding: 10px 16px; color: #fff; }
.ppw-bulk-bar strong { margin-right: auto; font-size: 14px; }
.ppw-notice { position: fixed; z-index: 300; right: 24px; bottom: 24px; max-width: 360px; border: 1px solid #cbd5e1; background: #1f2937; padding: 10px 14px; color: #fff; font-size: 11px; box-shadow: 0 12px 32px rgba(15,23,42,.2); }
.ppw-notice[data-kind="error"] { background: #991b1b; }

@media (max-width: 1180px) {
  .ppw-card-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .ppw-editor-grid { grid-template-columns: 220px minmax(0,1fr) 300px; }
}
@media (max-width: 900px) {
  .ppw-card-grid { grid-template-columns: 1fr; }
  .ppw-editor-grid { grid-template-columns: 200px minmax(640px,1fr) 300px; overflow-x: auto; }
  .ppw-run-rail { width: 220px; flex-basis: 220px; }
  .ppw-history-head, .ppw-history-row { grid-template-columns: 36px minmax(200px,1fr) 140px 145px 45px; }
}
@media (max-width: 720px) {
  .ppw-list-content { padding: 18px 18px 32px; }
  .ppw-card-grid { grid-template-columns: 1fr; }
  .ppw-toolbar-spacer { display: none; }
  .ppw-list-toolbar > * { flex: 1 1 auto; }
  .ppw-list-toolbar .ppw-search, .ppw-list-toolbar .ppw-search input { width: 100%; }
  .ppw-detail-description, .ppw-run-reason { display: none; }
  .ppw-run-workspace { overflow-x: auto; }
  .ppw-run-rail { min-width: 210px; }
  .ppw-run-split { min-width: 720px; }
}
@media (prefers-reduced-motion: reduce) {
  .ppw-host *, .ppw-host *::before, .ppw-host *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
}

/* ── 템플릿 바로가기 — 상세바에서 이 워크플로우가 참조하는 템플릿 목록 (정책 1.6) ── */

/* ── 검수(review) — 블록별 검수 버튼 + 인퍼런스 종합 배지 + 검수 모달 (0728 회의) ── */
/* .ppw-host 접두사로 명시도를 (0,2,0)까지 올려 `.ppw-host button{font:inherit}`(0,1,1) 리셋을 이긴다. */
.ppw-host .ppw-btn-sm { min-height: 28px; padding: 4px 9px; font-size: 12px; gap: 4px; }
.ppw-btn-review { border-color: var(--ppw-primary); color: var(--ppw-primary); }
.ppw-btn-review:hover { border-color: var(--ppw-primary-deep); background: var(--ppw-primary-weak); color: var(--ppw-primary-deep); }
.ppw-review-badge { display: inline-flex; align-items: center; gap: 4px; flex: 0 0 auto; padding: 2px 7px; font-size: 11px; font-style: normal; font-weight: 700; }
.ppw-review-badge.is-complete { background: #ecfdf5; color: #047857; }
.ppw-review-badge.is-pending { background: #fff7ed; color: #c2410c; }
.ppw-step.is-reviewed { border-color: #a7f3d0; }
.ppw-step.is-reviewed .ppw-step-output { background: #f0fdf4; }
/* 검수 버튼은 헤더 행에서 시간·체크 왼쪽에 붙는다(라벨 span flex:1 뒤). */
.ppw-step-main .ppw-btn-sm { flex: 0 0 auto; }
.ppw-step-reviewed { display: inline-flex; flex: 0 0 auto; align-items: center; gap: 4px; color: #047857; font-size: 11px; font-weight: 700; white-space: nowrap; }

.ppw-modal-note { margin: 0; color: var(--ppw-muted); font-size: 13px; }
.ppw-review { display: grid; grid-template-columns: minmax(0,1fr) minmax(0,1fr); gap: 16px; }
.ppw-review-doc { display: flex; flex-direction: column; border: 1px solid var(--ppw-line); background: #fff; }
.ppw-review-doc-head { display: flex; align-items: center; gap: 6px; border-bottom: 1px solid var(--ppw-line); padding: 9px 11px; color: #1f2937; font-size: 12px; }
.ppw-review-doc-head strong { overflow: hidden; font-weight: 650; text-overflow: ellipsis; white-space: nowrap; }
.ppw-review-doc-body { min-height: 320px; display: grid; place-items: center; padding: 20px; background: var(--ppw-bg); }
.ppw-review-doc-placeholder { display: grid; justify-items: center; gap: 6px; max-width: 260px; color: #94a3b8; text-align: center; }
.ppw-review-doc-placeholder p { margin: 4px 0 0; color: var(--ppw-muted); font-size: 13px; font-weight: 650; }
.ppw-review-doc-placeholder small { color: #94a3b8; font-size: 11px; line-height: 1.55; }
.ppw-review-panel { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.ppw-review-panel-head { display: flex; flex-direction: column; gap: 5px; }
.ppw-review-panel-head small { color: var(--ppw-muted); font-size: 11px; }
.ppw-review-block { display: inline-flex; align-items: center; gap: 5px; align-self: flex-start; padding: 3px 8px; font-size: 12px; font-weight: 700; }
.ppw-review-fields { display: flex; flex-direction: column; gap: 8px; max-height: 340px; overflow-y: auto; }
.ppw-rv-field { display: grid; grid-template-columns: minmax(90px,34%) minmax(0,1fr); align-items: center; gap: 8px; }
.ppw-rv-key { overflow: hidden; color: var(--ppw-muted); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-host .ppw-rv-value { border: 1px solid var(--ppw-border); padding: 6px 8px; color: #1f2937; font-size: 13px; }
.ppw-rv-value:focus { border-color: var(--ppw-primary); outline: none; }
.ppw-rv-empty { padding: 12px; background: var(--ppw-bg); color: var(--ppw-muted); font-size: 12px; text-align: center; }
@media (max-width: 720px) {
  .ppw-review { grid-template-columns: minmax(0,1fr); }
  .ppw-review-doc-body { min-height: 180px; }
}

/* 3.3 KIE 블록 안 문서유형별 검수 단위 */
.ppw-steps-head { margin: 4px 0 10px; color: var(--ppw-muted, #64748b); font-size: 12px; }
.ppw-steps-head b { color: var(--ppw-text, #1f2937); }
.ppw-type-list { display: flex; flex-direction: column; gap: 20px; margin-top: 8px; }
/* 결과 묶음은 상자가 아니라 제목과 표다(2026-11-03 Benson): 회색 머리 띠와 바깥 테두리를 두지 않고, 표는 칸 전체 너비, 단추는 표 아래 오른쪽 */
.ppw-type-block { border: 0; background: transparent; }
.ppw-type-head { display: flex; align-items: center; gap: 8px; padding: 0 0 8px; }
.ppw-type-name { display: inline-flex; flex: 1; align-items: center; gap: 6px; min-width: 0; color: var(--ppw-text, #1f2937); font-size: 13px; font-weight: 700; }
.ppw-type-reviewed { display: inline-flex; align-items: center; gap: 3px; color: #047857; font-size: 11px; font-weight: 650; }
.ppw-btn-xs { min-height: 26px; padding: 3px 9px; font-size: 11px; }
.ppw-type-block .ppw-output-rows { padding: 0; }
.ppw-type-empty { padding: 8px 10px; color: #94a3b8; font-size: 12px; }

/* 문서 대조 블록(2026-10-13) — 실행 결과 요약과 블록 설정 안내. 이 모듈은 글씨 리셋이 강해 .ppw-host 접두사로 명시도를 올린다. */
.ppw-host .ppw-cmp-sum { display: flex; flex-direction: column; gap: 8px; padding: 10px 12px 12px; }
.ppw-host .ppw-cmp-base { margin: 0; font-size: 12px; color: #64748b; }
.ppw-host .ppw-cmp-base b { color: #1f2937; font-weight: 600; }
.ppw-host .ppw-cmp-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.ppw-host .ppw-cmp-chip { display: inline-flex; align-items: center; gap: 5px; height: 24px; padding: 0 8px; border: 1px solid #e5e7eb; background: #fff; font-size: 11.5px; color: #475569; white-space: nowrap; }
.ppw-host .ppw-cmp-chip i { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
.ppw-host .ppw-cmp-chip b { color: #1f2937; font-variant-numeric: tabular-nums; }
.ppw-host .ppw-cmp-chip.is-green i { background: #22c55e; } .ppw-host .ppw-cmp-chip.is-red i { background: #ef4444; }
.ppw-host .ppw-cmp-chip.is-amber i { background: #f59e0b; } .ppw-host .ppw-cmp-chip.is-violet i { background: #8b5cf6; }
.ppw-host .ppw-cmp-chip.is-red b { color: #dc2626; } .ppw-host .ppw-cmp-chip.is-amber b { color: #b45309; }
.ppw-host .ppw-compare-info { display: flex; flex-direction: column; gap: 4px; margin: 8px 0 4px; padding: 10px 12px; border: 1px solid #e5e7eb; background: #fafbfc; }
.ppw-host .ppw-compare-info p { margin: 0; display: flex; gap: 8px; font-size: 12px; }
.ppw-host .ppw-compare-info span { width: 64px; flex: 0 0 auto; color: #64748b; }
.ppw-host .ppw-compare-info strong { color: #1f2937; font-weight: 600; }

/* 판단 블록 지식베이스 결과(2026-10-26). 판정, 근거 번호가 달린 사유, 근거 청크와 원문 보기 */
.ppw-host .ppw-judge-verdict { display: flex; align-items: baseline; gap: 8px; margin: 0; border: 1px solid; padding: 8px 12px; font-size: 12px; }
.ppw-host .ppw-judge-verdict span { color: inherit; opacity: .8; }
.ppw-host .ppw-judge-verdict b { font-size: 14px; font-weight: 800; }
.ppw-host .ppw-judge-verdict small { margin-left: auto; font-size: 11px; opacity: .85; }
.ppw-host .ppw-judge-verdict.is-green { border-color: #a7f3d0; background: #ecfdf5; color: #047857; }
.ppw-host .ppw-judge-verdict.is-red { border-color: #fecaca; background: #fef2f2; color: #b91c1c; }
.ppw-host .ppw-judge-verdict.is-amber { border-color: #fde68a; background: #fffbeb; color: #b45309; }
.ppw-host .ppw-judge-verdict.is-gray { border-color: #e4e7ec; background: #f8fafc; color: #475467; }
.ppw-host .ppw-judge-reason { margin: 8px 12px 0; color: #1f2937; font-size: 13px; line-height: 1.65; }
.ppw-host .ppw-cite { display: inline-grid; min-width: 16px; height: 16px; place-items: center; margin: 0 2px; background: #eaf1ff; color: #1b58d4; font-size: 10px; font-weight: 700; vertical-align: 2px; }
.ppw-host .ppw-judge-query { display: grid; grid-template-columns: auto 1fr; gap: 3px 10px; margin: 10px 0 0; color: #64748b; font-size: 11.5px; }
.ppw-host .ppw-judge-query b { color: #334155; font-weight: 600; }
.ppw-host .ppw-judge-evidence { display: grid; gap: 6px; margin: 10px 0 0; padding: 0; list-style: none; }
.ppw-host .ppw-judge-evidence li { border: 1px solid #e5e7eb; padding: 8px 10px; }
.ppw-host .ppw-judge-evidence header { display: flex; align-items: center; gap: 6px; font-size: 11.5px; }
.ppw-host .ppw-judge-evidence strong { min-width: 0; overflow: hidden; color: #1f2937; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.ppw-host .ppw-judge-evidence header span { color: #94a3b8; white-space: nowrap; }
/* 지식베이스에서 파싱 결과를 고친 근거(2026-11-01 [나]). 미리보기와 검색 결과의 수정됨 표시와 같은 색 */
.ppw-host .ppw-judge-evidence header span.ppw-ev-edited { padding: 0 4px; border: 1px solid #fde68a; border-radius: 4px; background: #fffbeb; color: #b45309; font-size: 9.5px; font-weight: 700; }
.ppw-host .ppw-judge-evidence em { margin-left: auto; color: #334155; font-style: normal; font-variant-numeric: tabular-nums; }
.ppw-host .ppw-judge-evidence p { margin: 6px 0 0; color: #475569; font-size: 12px; line-height: 1.6; }

/* ── 실행 상세 개편(2026-10-26): 단계 바, 문서유형 트리, 결과 탭, 블록별 결과, 하단 Job ID ── */
.ppw-host .ppw-detail-bar.is-run { flex-wrap: wrap; row-gap: 6px; }
.ppw-host .ppw-stepbar-slot { display: flex; flex: 1 1 auto; justify-content: center; min-width: 0; order: 0; }
.ppw-host .ppw-stepbar { display: inline-flex; max-width: 100%; align-items: center; gap: 2px; overflow-x: auto; border-radius: 999px; background: #f1f5f9; padding: 2px 4px; }
.ppw-host .ppw-stepbar-item { position: relative; display: inline-flex; flex: 0 0 auto; align-items: center; gap: 6px; border: 1px solid transparent; border-radius: 999px !important; background: transparent; padding: 4px 12px 4px 6px; color: #64748b; font-size: 12.5px; font-weight: 600; cursor: pointer; white-space: nowrap; }
.ppw-host .ppw-stepbar-item i { display: inline-grid; width: 20px; height: 20px; place-items: center; border-radius: 50%; background: color-mix(in srgb, var(--step-color, #64748b) 14%, #fff); color: var(--step-color, #64748b); font-style: normal; }
.ppw-host .ppw-stepbar-item + .ppw-stepbar-item { margin-left: 14px; }
.ppw-host .ppw-stepbar-item + .ppw-stepbar-item::before { content: '›'; position: absolute; left: -11px; color: #94a3b8; font-weight: 400; }
.ppw-host .ppw-stepbar-item:hover { color: #1f2937; }
.ppw-host .ppw-stepbar-item.is-on { border-color: var(--step-color, #2970ff); background: #fff; color: var(--step-color, #2970ff); }
.ppw-host .ppw-stepbar-item.is-on i { background: var(--step-color, #2970ff); color: #fff; }
.ppw-host .ppw-stepbar-item.is-failed i { background: #dc2626; color: #fff; }
.ppw-host .ppw-stepbar-item.is-failed.is-on { border-color: #dc2626; color: #b91c1c; }
.ppw-host .ppw-stepbar-item.is-pending { opacity: .55; cursor: default; }
/* 검수가 남은 블록: 아이콘 오른쪽 위 주황 점(검수 필요 칩과 같은 색) */
.ppw-host .ppw-stepbar-item.is-todo::after { content: ''; position: absolute; top: 3px; left: 21px; width: 7px; height: 7px; border-radius: 50%; background: #f59e0b; box-shadow: 0 0 0 2px #fff; }
.ppw-host .ppw-stepbar-item .ppw-inline-spinner { width: 14px; height: 14px; }
@media (max-width: 1180px) { .ppw-host .ppw-stepbar-slot { order: 10; flex-basis: 100%; justify-content: flex-start; } }

.ppw-host .ppw-rail-tree { margin: 0 0 6px 18px; border-left: 1px solid var(--ppw-line); padding-left: 6px; }
.ppw-host .ppw-rail-leaf { display: flex; width: 100%; align-items: center; gap: 8px; border: 1px solid transparent; background: transparent; padding: 5px 8px; color: #334155; font-size: 12.5px; text-align: left; cursor: pointer; }
.ppw-host .ppw-rail-leaf i { display: inline-grid; width: 20px; height: 20px; flex: 0 0 auto; place-items: center; border-radius: 50%; background: #eaf1ff; color: #1b58d4; font-size: 10px; font-style: normal; font-weight: 700; }
.ppw-host .ppw-rail-leaf span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ppw-host .ppw-rail-leaf:hover { background: #f5f5f5; }
.ppw-host .ppw-rail-leaf.is-on { border-color: #c9d9ff; background: #eff6ff; color: #1b58d4; font-weight: 600; }

.ppw-host .ppw-result-head { gap: 8px; }
.ppw-host .ppw-res-tools { display: inline-flex; flex: 0 0 auto; gap: 2px; }
.ppw-host .ppw-res-tools .ppw-icon-button:disabled { opacity: .4; cursor: default; }
.ppw-host .ppw-res-stephead { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.ppw-host .ppw-res-stephead:empty { display: none; }
.ppw-host .ppw-res-stephead > span:nth-child(2) { display: flex; flex-direction: column; min-width: 0; }
.ppw-host .ppw-res-stephead strong { color: #1f2937; font-size: 14px; }
.ppw-host .ppw-res-stephead small { color: var(--ppw-muted); font-size: 11px; }
.ppw-host .ppw-res-stephead time { margin-left: auto; color: #94a3b8; font-size: 11px; font-variant-numeric: tabular-nums; }
.ppw-host .ppw-res-failed { display: inline-flex; align-items: center; gap: 4px; color: #b91c1c; font-size: 11.5px; font-style: normal; font-weight: 700; }
.ppw-host .ppw-json { margin: 0; overflow: auto; border: 1px solid var(--ppw-line); background: #fafafa; padding: 12px; color: #334155; font-size: 11.5px; line-height: 1.55; }
.ppw-host .ppw-md { margin: 0; overflow: auto; border-top: 1px solid var(--ppw-line); background: #fafafa; padding: 12px; color: #334155; font-size: 12px; line-height: 1.6; white-space: pre-wrap; }
.ppw-host .ppw-result-foot { display: flex; flex: 0 0 auto; align-items: center; justify-content: space-between; gap: 12px; min-height: 40px; border-top: 1px solid var(--ppw-line); padding: 6px 14px; font-size: 11.5px; color: var(--ppw-muted); white-space: nowrap; }
.ppw-host .ppw-jobid b { overflow: hidden; max-width: 220px; text-overflow: ellipsis; }
.ppw-host .ppw-fields thead th { white-space: nowrap; }
.ppw-host .ppw-jobid { display: inline-flex; align-items: center; gap: 4px; font-variant-numeric: tabular-nums; }
.ppw-host .ppw-jobid b { color: #475569; font-weight: 500; }
.ppw-host .ppw-switch { display: inline-flex; align-items: center; gap: 8px; cursor: pointer; }
.ppw-host .ppw-switch input { position: absolute; opacity: 0; width: 0; height: 0; }
.ppw-host .ppw-switch i { position: relative; width: 34px; height: 20px; border-radius: 999px; background: #cbd5e1; transition: background-color .15s; }
.ppw-host .ppw-switch i::after { content: ''; position: absolute; top: 3px; left: 3px; width: 14px; height: 14px; border-radius: 50%; background: #fff; transition: transform .15s; }
.ppw-host .ppw-switch input:checked + i { background: var(--ppw-primary, #2970ff); }
.ppw-host .ppw-switch input:checked + i::after { transform: translateX(14px); }
.ppw-host .ppw-switch input:focus-visible + i { outline: 2px solid var(--ppw-primary, #2970ff); outline-offset: 2px; }

.ppw-host .ppw-fields { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.ppw-host .ppw-fields th, .ppw-host .ppw-fields td { border-top: 1px solid var(--ppw-line); padding: 9px 12px; text-align: left; vertical-align: top; }
.ppw-host .ppw-fields thead th { border-top: 0; background: #f8fafc; color: #64748b; font-size: 11.5px; font-weight: 600; }
.ppw-host .ppw-fields tbody th { width: 34%; background: #fafbfc; color: #64748b; font-weight: 500; }
.ppw-host .ppw-fields td { color: #1f2937; }
.ppw-host .ppw-fields tr.is-low td { background: #fffbeb; }
.ppw-host .ppw-low { display: inline-grid; place-items: center; margin-right: 6px; color: #d97706; vertical-align: -2px; }
.ppw-host .ppw-low-count { display: inline-flex; align-items: center; gap: 3px; margin-left: 8px; color: #b45309; font-size: 11px; font-style: normal; font-weight: 600; }
.ppw-host .ppw-dash { color: #94a3b8; }
.ppw-host .ppw-subtable { width: 100%; border: 1px solid var(--ppw-line); border-collapse: collapse; font-size: 11.5px; }
.ppw-host .ppw-subtable th, .ppw-host .ppw-subtable td { border: 1px solid var(--ppw-line); padding: 5px 8px; }
.ppw-host .ppw-subtable th { background: #f8fafc; color: #64748b; font-weight: 600; }
.ppw-host .ppw-subrows p { display: grid; grid-template-columns: minmax(80px, 30%) 1fr; gap: 6px; margin: 0 0 3px; font-size: 11.5px; }
.ppw-host .ppw-subrows span { color: #64748b; }
.ppw-host .ppw-step-error-card { display: flex; gap: 10px; border: 1px solid #fecaca; background: #fef2f2; padding: 12px 14px; color: #991b1b; }
.ppw-host .ppw-step-error-card p { margin: 4px 0 0; color: #b91c1c; font-size: 12.5px; line-height: 1.5; }
.ppw-host .ppw-result-empty-state.is-sm { min-height: 160px; }
.ppw-host .ppw-classify-list { display: grid; gap: 4px; padding: 6px 8px 10px; }
.ppw-host .ppw-classify-row { display: grid; grid-template-columns: 24px 1fr auto 14px; align-items: center; gap: 10px; border: 1px solid var(--ppw-line); background: #fff; padding: 8px 10px; text-align: left; cursor: pointer; }
.ppw-host .ppw-classify-row i { display: inline-grid; width: 24px; height: 24px; place-items: center; border-radius: 50%; background: #eaf1ff; color: #1b58d4; font-size: 11px; font-style: normal; font-weight: 700; }
.ppw-host .ppw-classify-row strong { color: #1f2937; font-size: 12.5px; }
.ppw-host .ppw-classify-row small { color: var(--ppw-muted); font-size: 11px; }
.ppw-host .ppw-classify-row:hover, .ppw-host .ppw-classify-row.is-on { border-color: #c9d9ff; background: #f5f8ff; }
.ppw-host .ppw-chip-row { display: inline-flex; gap: 4px; }
.ppw-host .ppw-fmt { border: 1px solid var(--ppw-line); padding: 1px 7px; color: #94a3b8; font-size: 10.5px; font-weight: 600; }
.ppw-host .ppw-fmt.is-on { border-color: #c9d9ff; background: #eaf1ff; color: #1b58d4; }
.ppw-host .ppw-cmp-sum.is-flat { padding: 0 0 4px; }
.ppw-host .ppw-rules { display: grid; gap: 6px; }
.ppw-host .ppw-rule { border: 1px solid var(--ppw-line); background: #fff; padding: 9px 12px; }
.ppw-host .ppw-rule.is-fail { border-color: #fecaca; background: #fff7f7; }
.ppw-host .ppw-rule header { display: flex; align-items: center; gap: 8px; font-size: 12.5px; }
.ppw-host .ppw-rule header strong { color: #1f2937; }
.ppw-host .ppw-rule header em { display: inline-flex; align-items: center; gap: 3px; margin-left: auto; color: #15803d; font-size: 11.5px; font-style: normal; font-weight: 700; }
.ppw-host .ppw-rule.is-fail header em { color: #dc2626; }
.ppw-host .ppw-rule p { margin: 4px 0 0; color: #475569; font-size: 12px; }
.ppw-host .ppw-rule-then { display: inline-block; border: 1px solid transparent; padding: 1px 7px; font-size: 10.5px; font-weight: 600; white-space: nowrap; }
.ppw-host .ppw-rule-then.is-green { background: #ecfdf5; color: #047857; }
.ppw-host .ppw-rule-then.is-red { background: #fef2f2; color: #b91c1c; }
.ppw-host .ppw-rule-then.is-amber { background: #fffbeb; color: #b45309; }
.ppw-host .ppw-cmp-rows td { font-size: 12px; }
.ppw-host .ppw-cmp-rows td:nth-child(-n+4) { white-space: nowrap; }   /* 키, 매칭, 판정, 규칙은 짧은 값이라 한 줄로. 차이만 줄을 바꾼다 */
.ppw-host .ppw-judge-text { display: grid; gap: 6px; margin: 10px 0 0; color: #1f2937; font-size: 13px; line-height: 1.65; }
.ppw-host .ppw-judge-text p { margin: 0; }
.ppw-host .ppw-judge-text b { font-weight: 700; }
.ppw-host sup.ppw-cite[data-ppw-action] { cursor: pointer; }
.ppw-host .ppw-judge-evidence li.is-flash { background: #fffbeb; }
.ppw-host .ppw-dl-row { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; padding: 12px 0 0; }
.ppw-host .ppw-check-group { display: grid; gap: 6px; margin: 2px 0 10px; }
.ppw-host .ppw-check-group.is-row { grid-auto-flow: column; justify-content: start; gap: 14px; margin: 6px 0 0; }
.ppw-host .ppw-check { display: inline-flex; align-items: center; gap: 7px; color: #334155; font-size: 12px; cursor: pointer; }
.ppw-host .ppw-check input { width: 14px; height: 14px; accent-color: var(--ppw-primary, #2970ff); cursor: pointer; }
.ppw-host .ppw-palette-later { margin-top: 4px; border-top: 1px solid var(--ppw-line); padding-top: 8px; }
.ppw-host .ppw-palette-later summary { display: flex; align-items: center; gap: 6px; margin: 0 4px; color: var(--ppw-muted); font-size: 11px; font-weight: 650; cursor: pointer; list-style: none; }
.ppw-host .ppw-palette-later summary::before { content: '›'; display: inline-block; transition: transform .12s; }
.ppw-host .ppw-palette-later[open] summary::before { transform: rotate(90deg); }
.ppw-host .ppw-palette-later summary small { color: #94a3b8; font-weight: 500; }
.ppw-host .ppw-palette-later .ppw-palette-item { opacity: .8; }
.ppw-host .ppw-preset-card.is-prompt { border-color: #c9d9ff; background: #f5f8ff; }
.ppw-host .ppw-preset-card.is-prompt > span:first-child { color: #1b58d4; }
.ppw-host .ppw-draft-chain { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 8px 0; }
.ppw-host .ppw-draft-node { display: grid; grid-template-columns: 24px 1fr; align-items: center; gap: 2px 8px; border: 1px solid var(--ppw-line); border-left: 3px solid var(--c, #94a3b8); background: #fff; padding: 6px 10px 6px 8px; }
.ppw-host .ppw-draft-node b { grid-row: span 2; display: grid; place-items: center; color: var(--c, #94a3b8); }
.ppw-host .ppw-draft-node strong { color: #1f2937; font-size: 12px; }
.ppw-host .ppw-draft-node small { color: var(--ppw-muted); font-size: 10.5px; }
.ppw-host .ppw-draft-arrow { width: 14px; height: 1px; background: #94a3b8; }
.ppw-host .ppw-draft-notes { margin: 6px 0 0; padding: 0; list-style: none; display: grid; gap: 4px; }
.ppw-host .ppw-draft-notes li { display: flex; align-items: flex-start; gap: 6px; color: #b45309; font-size: 12px; line-height: 1.5; }
.ppw-host .ppw-preset-label small { margin-left: 6px; color: var(--ppw-muted); font-size: 11px; font-weight: 500; }

/* 버전과 운영 반영, 일괄 입력(2026-10-26) */
.ppw-host .ppw-ver-chips { display: inline-flex; flex: 0 0 auto; gap: 4px; }
.ppw-host .ppw-ver { display: inline-flex; align-items: center; border: 1px solid transparent; padding: 1px 7px; font-size: 10.5px; font-style: normal; font-weight: 700; white-space: nowrap; }
.ppw-host .ppw-ver.is-pub { border-color: #a7f3d0; background: #ecfdf5; color: #047857; }
.ppw-host .ppw-ver.is-draft { border-color: #fde68a; background: #fffbeb; color: #b45309; }
.ppw-host .ppw-ver.is-retired { border-color: var(--ppw-line); background: #f8fafc; color: #64748b; }
.ppw-host .ppw-versions { display: grid; gap: 8px; }
.ppw-host .ppw-version { display: grid; grid-template-columns: 1fr auto; gap: 2px 12px; border: 1px solid var(--ppw-line); background: #fff; padding: 10px 12px; }
.ppw-host .ppw-version.is-pub { border-color: #a7f3d0; background: #f6fef9; }
.ppw-host .ppw-version > div { grid-column: 1; display: flex; align-items: center; gap: 8px; }
.ppw-host .ppw-version strong { color: #1f2937; font-size: 13px; }
.ppw-host .ppw-version small { color: var(--ppw-muted); font-size: 11px; }
.ppw-host .ppw-version p { grid-column: 1; margin: 0; color: #475569; font-size: 12px; }
.ppw-host .ppw-version > span { grid-column: 2; grid-row: 1 / span 2; display: flex; align-items: center; gap: 6px; }
.ppw-host .ppw-rail-batch { display: flex; align-items: center; gap: 8px; margin: 6px 0 2px; padding: 6px 8px; border: 1px dashed var(--ppw-border); color: #334155; font-size: 11.5px; font-weight: 600; }
.ppw-host .ppw-rail-batch small { color: var(--ppw-muted); font-weight: 500; }
.ppw-host .ppw-rail-batch button { margin-left: auto; border: 0; background: transparent; color: #b91c1c; font-size: 11px; font-weight: 600; cursor: pointer; }
.ppw-host .ppw-rail-batch button:disabled { color: #cbd5e1; cursor: default; }
.ppw-host .ppw-rail-row.is-queued { opacity: .65; cursor: default; }

/* 빈 상태 아이콘(DEEP OCR 작업공간과 같은 둥근 회색 원), 편집기 구성 경고 */
.ppw-host .ppw-empty-icon { display: grid; width: 56px; height: 56px; place-items: center; border-radius: 50%; background: #f1f5f9; color: #64748b; margin-bottom: 4px; }
.ppw-host .ppw-editor-warn { display: flex; flex: 0 0 auto; align-items: flex-start; gap: 8px; border-bottom: 1px solid #fde68a; background: #fffbeb; padding: 8px 16px; color: #92400e; font-size: 12px; line-height: 1.5; }
.ppw-host .ppw-editor-warn svg { flex: 0 0 auto; margin-top: 2px; }

/* 상단 일괄 실행 표시 */
.ppw-host .ppw-batch-chip { display: inline-flex; align-items: center; gap: 6px; margin-left: 10px; border: 1px solid #c9d9ff; background: #eaf1ff; padding: 3px 10px; color: #1b58d4; font-size: 12px; font-weight: 700; white-space: nowrap; }
.ppw-host .ppw-batch-chip .ppw-inline-spinner { width: 12px; height: 12px; }

/* 실행 상세 상단 바: 넓은 화면에서는 한 줄을 지킨다. 양옆 칸을 같은 폭으로 두어 단계 바가 화면 가운데에 온다. 이름은 줄여 말줄임 */
@media (min-width: 1181px) {
  .ppw-host .ppw-detail-bar.is-run { flex-wrap: nowrap; }
  .ppw-host .ppw-detail-bar.is-run { display: grid; grid-template-columns: minmax(220px,1fr) minmax(0,max-content) minmax(32px,1fr); column-gap: 12px; }
  .ppw-host .ppw-stepbar-slot { min-width: 0; justify-content: center; overflow: hidden; }
  .ppw-host .ppw-detail-bar.is-run .ppw-btn, .ppw-host .ppw-detail-bar.is-run .ppw-menu-anchor { flex: 0 0 auto; }
}

/* 단계 바 좁을 때: 고른 단계만 이름, 나머지는 블록 아이콘 */
.ppw-host .ppw-stepbar.is-compact .ppw-stepbar-item:not(.is-on) > span { display: none; }
.ppw-host .ppw-stepbar.is-compact .ppw-stepbar-item:not(.is-on) { padding-right: 6px; }
/* PDF 원문과 영수증 원문 */
.ppw-doc-pdf { display: block; width: min(100%, 640px); height: calc(100vh - 170px); min-height: 480px; margin: 0 auto; border: 1px solid var(--ppw-border); background: #fff; }
.ppw-receipt { width: min(100%, 340px); margin: 0 auto; display: flex; flex-direction: column; gap: 10px; border: 1px solid var(--ppw-border); background: #fff; padding: 26px 24px; box-shadow: 0 1px 6px rgba(15,23,42,.1); font-family: ui-monospace, Menlo, monospace; color: #1f2937; }
.ppw-receipt h4 { margin: 0; text-align: center; font-size: 16px; font-weight: 700; }
.ppw-receipt > p { margin: 0; text-align: center; color: #64748b; font-size: 12px; }
.ppw-receipt-rows { display: flex; flex-direction: column; gap: 6px; border-top: 1px dashed #cbd5e1; border-bottom: 1px dashed #cbd5e1; padding: 10px 0; font-size: 12.5px; }
.ppw-receipt-rows div, .ppw-receipt-total { display: flex; justify-content: space-between; gap: 12px; }
.ppw-receipt-total { font-size: 15px; font-weight: 700; }
.ppw-receipt .ppw-receipt-foot { margin-top: 6px; }
/* 결과 머리글: 좁은 결과 칸에서 제목과 배지가 겹치지 않게 한다. 요약(블록 수, 시간)은 먼저 숨긴다 */
.ppw-host .ppw-result-head > span { overflow: hidden; }
.ppw-host .ppw-result-head strong { flex: 0 0 auto; white-space: nowrap; }
.ppw-host .ppw-result-head .ppw-review-badge { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 1365px) { .ppw-host .ppw-result-head > span > small { display: none; } }
@media (max-width: 1180px) { .ppw-host .ppw-result-head .ppw-rb-word, .ppw-host .ppw-result-head > span > strong { display: none; } }

/* 실행 막힘 안내는 눌러서 입력 블록 설정을 연다. 미니맵 상자는 얇은 선 */
.ppw-host button.ppw-run-reason { border: 0; cursor: pointer; font-family: inherit; }
.ppw-host button.ppw-run-reason:hover { text-decoration: underline; }
.ppw-canvas-minimap .ppw-minimap-viewport { stroke-width: 1.5; }
.ppw-host input[type="file"][hidden] { display: none !important; }

/* 왼쪽 목록 업로드: DEEP OCR, DEEP Parser와 같은 자리와 모양. 일괄 입력 메뉴는 버튼 아래로 */
.ppw-host .ppw-rail-upload { position: relative; flex: 0 0 auto; }
.ppw-host .ppw-rail-upload .ppw-context-menu { top: calc(100% - 4px); left: 12px; right: 12px; min-width: 0; }

/* 결과 칸 머리: DEEP OCR, DEEP Parser와 같은 탭 줄과 동작 줄(2026-10-27) */
.ppw-host .ppw-result-pane > .ppw-res-tabs { display: flex; flex: 0 0 auto; }
.ppw-host .ppw-res-actions { flex: 0 0 auto; min-height: 53px; }
.ppw-host .ppw-res-actions .ppw-stage-scope { font-size: 12px; font-weight: 600; color: var(--ppw-muted); white-space: nowrap; margin-right: 2px; }   /* 블록 검수 상태 앞 블록 이름(2026-11-08) */
.ppw-host .ppw-res-summary { color: var(--ppw-muted); font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
.ppw-host .ppw-ocr-fields { display: grid; gap: 28px; padding: 4px 2px 16px; }
.ppw-host .ppw-ocr-fields table td { font-family: inherit; }
.ppw-host .ppw-parse-pane { padding: 0 2px 16px; }

.ppw-host .ppw-result-pane > .ppw-rtabs { display: flex; flex: 0 0 auto; }
.ppw-host .ppw-rtabs .tab-btn { border-radius: 0; background: transparent; border-left: 0; border-right: 0; border-top: 0; font-family: inherit; cursor: pointer; }
.ppw-host .ppw-rtabs .tab-btn.tab-active { border-bottom-color: rgb(var(--k-primary)); color: rgb(var(--k-text1)); }

/* 블록에 맞춘 가운데 화면: 문서 대조 나란히 보기, 판단 근거 원문 */
.ppw-host .ppw-cmp-split { display: grid; grid-template-columns: 1fr 1fr; height: 100%; min-height: 0; }
.ppw-host .ppw-cmp-col { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
.ppw-host .ppw-cmp-col + .ppw-cmp-col { border-left: 1px solid var(--ppw-line); }
.ppw-host .ppw-cmp-colhead { display: flex; align-items: center; gap: 8px; min-height: 40px; border-bottom: 1px solid var(--ppw-line); background: #fff; padding: 0 12px; font-size: 12px; }
.ppw-host .ppw-cmp-colhead b { background: var(--ppw-primary-weak); color: var(--ppw-primary-deep); padding: 2px 6px; font-size: 11px; }
.ppw-host .ppw-cmp-colhead small { margin-left: auto; overflow: hidden; color: var(--ppw-muted); font-size: 11px; text-overflow: ellipsis; white-space: nowrap; }
.ppw-host .ppw-cmp-colbody { flex: 1; min-height: 0; overflow: auto; }
.ppw-host .ppw-cmp-colbody .ppw-document-viewer { height: 100%; }
.ppw-host .ppw-cmp-colbody.is-table { background: #fff; padding: 10px; }
.ppw-host .ppw-base-table { width: 100%; border-collapse: collapse; font-size: 11.5px; }
.ppw-host .ppw-base-table th { position: sticky; top: -10px; background: #f3f4f6; color: #64748b; font-weight: 600; text-align: left; }
.ppw-host .ppw-base-table th, .ppw-host .ppw-base-table td { border: 1px solid var(--ppw-line); padding: 5px 7px; white-space: nowrap; }
.ppw-host .ppw-base-table tr.is-bad td { background: #fef2f2; color: #b91c1c; }
.ppw-host .ppw-ev-view { display: flex; flex-direction: column; height: 100%; min-height: 0; }
.ppw-host .ppw-ev-body { flex: 1; min-height: 0; overflow: auto; background: #f5f5f5; padding: 24px; }
.ppw-host .ppw-ev-paper { position: relative; width: min(100%, 640px); min-height: 420px; margin: 0 auto; border: 1px solid var(--ppw-line); background: #fff; padding: 40px 44px; }
.ppw-host .ppw-ev-paper .kb-paper-no { position: absolute; top: 12px; right: 14px; color: #94a3b8; font-size: 10.5px; }
.ppw-host .ppw-ev-paper .kb-pchunk { margin: 0 0 14px; color: #334155; font-size: 13px; line-height: 1.75; }
.ppw-host .ppw-ev-paper .kb-pchunk.is-on { background: rgba(41,112,255,.08); outline: 2px solid #2970ff; outline-offset: 4px; }
.ppw-host .ppw-judge-evidence li.is-picked { border-color: #2970ff; }
.ppw-host .ppw-judge-evidence sup.ppw-cite[data-ppw-action] { cursor: pointer; }
.ppw-host .ppw-cmp-colhead b { flex: 0 0 auto; white-space: nowrap; }
.ppw-host .ppw-cmp-colhead span { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ppw-host .ppw-cmp-colhead small { flex: 0 1 auto; min-width: 0; }

/* 실행 상세를 DEEP OCR 치수에 맞춤: 상단 바 48px, 원문 도구 줄, 동작 줄의 스위치와 Job ID (2026-10-27) */
@media (min-width: 1181px) { .ppw-host .ppw-detail-bar.is-run { min-height: 48px; height: 48px; padding-top: 0; padding-bottom: 0; } }
.ppw-host .ppw-viewer-tools button { border: 0; background: transparent; cursor: pointer; }
.ppw-host .ppw-document-viewer { display: flex; flex-direction: column; height: 100%; min-height: 0; }
.ppw-host .ppw-document-viewer > .ppw-document-preview { flex: 1; min-height: 0; overflow: auto; }
.ppw-host .ppw-res-actions .ppw-switch { margin-right: 4px; font-size: 11.5px; white-space: nowrap; }
.ppw-host .ppw-res-actions .ppw-jobid { display: inline-flex; align-items: center; gap: 4px; max-width: 170px; border: 1px solid var(--ppw-border); background: #fff; padding: 0 8px; height: 36px; color: var(--ppw-muted); font-size: 11px; white-space: nowrap; cursor: pointer; font-family: inherit; }
.ppw-host .ppw-res-actions .ppw-jobid b { color: #334155; font-weight: 600; overflow: hidden; text-overflow: ellipsis; }
.ppw-host .ppw-res-actions .ppw-jobid:hover { border-color: var(--ppw-primary); color: var(--ppw-primary); }
.ppw-host .ppw-result-foot button { font-family: inherit; cursor: pointer; }
.ppw-host .ppw-result-foot { min-height: 0; padding: 12px 16px; }
/* 왼쪽 목록 썸네일: DEEP OCR 목록처럼 세로 문서 모양 */
.ppw-host .ppw-run-rail .ppw-file-thumb { width: 40px !important; height: 50px !important; background: #fff; }
/* 좁은 결과 칸: 동작 줄은 두 줄로 내려가고, Job ID는 아이콘만 남긴다 */
.ppw-host .ppw-res-actions { flex-wrap: wrap; row-gap: 6px; }
.ppw-host .ppw-res-actions > .ml-auto { flex-wrap: nowrap; min-width: 0; }
@media (max-width: 1440px) { .ppw-host .ppw-res-actions .ppw-jobid b { display: none; } }
/* 문서 대조 대상 칸처럼 좁은 뷰어: 도구가 줄바꿈하지 않고 가로로 넘긴다 */
.ppw-host .ppw-viewer-tools { flex-wrap: nowrap; overflow-x: auto; white-space: nowrap; }
.ppw-host .ppw-cmp-colbody .ppw-viewer-tools { justify-content: flex-start; padding: 0 8px; }
.ppw-host .ppw-cmp-colbody .ppw-viewer-tools .w-8 { width: 28px; }

/* 블록 결과의 항목 표를 DEEP OCR 필드 표와 같게(회색 항목 칸, 굵은 회색 글씨, 값 13px) */
.ppw-host .ppw-output-rows, .ppw-host .ppw-kv-table { display: block; border: 1px solid var(--ppw-line); background: #fff; }
.ppw-host .ppw-output-rows > p, .ppw-host .ppw-kv-table > p { display: grid; grid-template-columns: 32% minmax(0,1fr); margin: 0; border-top: 1px solid rgba(229,231,235,.8); }
.ppw-host .ppw-output-rows > p:first-child, .ppw-host .ppw-kv-table > .ppw-kv-head + p { border-top: 0; }
.ppw-host .ppw-output-rows > p > span, .ppw-host .ppw-kv-table > p > span { background: #f3f4f6; border-right: 1px solid rgba(229,231,235,.8); padding: 8px 12px; color: #64748b; font-size: 12px; font-weight: 600; line-height: 1.3; }
.ppw-host .ppw-output-rows > p > strong, .ppw-host .ppw-kv-table > p > strong { padding: 8px 12px; color: rgb(var(--k-text1)); font-size: 13px; font-weight: 500; line-height: 1.4; overflow-wrap: anywhere; }
.ppw-host .ppw-kv-table > .ppw-kv-head { display: none; }
.ppw-host .ppw-final-result h3 { margin: 18px 0 10px; color: rgb(var(--k-text1)); font-size: 17px; font-weight: 600; }
.ppw-host .ppw-label-result > b { display: inline-block; margin-bottom: 8px; color: rgb(var(--k-text1)); font-size: 14px; font-weight: 700; }
/* 표만 담은 블록 상자는 테두리를 걷어 표가 두 겹으로 보이지 않게 한다. 머리가 있는 상자 안의 표는 위아래 선만 남긴다 */
.ppw-host .ppw-type-block:has(> .ppw-output-rows:only-child) { border: 0; padding: 0; background: transparent; box-shadow: none; }

/* 목록 카드: 문서 대조 카드와 같은 실행 결과 집계 줄(2026-10-27) */
.ppw-card-meta > span:first-child { display: inline-flex; align-items: center; gap: 4px; }
.ppw-card-meta { gap: 8px; }
.ppw-card-stats { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 12px; color: #64748b; font-size: 12px; }
.ppw-card-stats span { display: inline-flex; align-items: center; gap: 5px; }
.ppw-card-stats b { color: #1f2937; font-variant-numeric: tabular-nums; }
.ppw-card-stats i { display: inline-block; width: 7px; height: 7px; border-radius: 50%; }
.ppw-card-stats .is-green i { background: #22c55e; } .ppw-card-stats .is-amber i { background: #f59e0b; } .ppw-card-stats .is-red i { background: #ef4444; }
.ppw-card-stats .is-muted { color: #94a3b8; }

/* 왼쪽 목록 행: DEEP OCR 목록 행과 같은 상태 표시와 늘 보이는 삭제 단추(2026-10-27) */
.ppw-host .ppw-rail-row.is-active { background: #f3f4f6; }
.ppw-host .ppw-rail-row small.ppw-rail-state { display: flex; align-items: center; gap: 6px; margin-top: 3px; color: var(--ppw-muted); font-size: 10px; }
.ppw-host .ppw-rail-row small.ppw-rail-state.is-active { margin-top: 4px; }
.ppw-host .ppw-rail-row small.ppw-rail-state > i { width: 6px; height: 6px; flex: 0 0 auto; border-radius: 50%; }
.ppw-host .ppw-rail-row small.ppw-rail-state > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ppw-host .ppw-state-chip { display: inline-flex; align-items: center; gap: 4px; padding: 2px 6px; border-radius: 999px; font-size: 10px; font-style: normal; font-weight: 500; white-space: nowrap; }
.ppw-host .ppw-state-chip > i { width: 4px; height: 4px; border-radius: 50%; }
.ppw-host .ppw-rail-row > button { display: grid; place-items: center; width: 28px; height: 28px; flex: 0 0 auto; color: rgba(107,114,128,.7); }
.ppw-host .ppw-rail-row > button:hover { background: #fff; color: #e11d48; }
/* 실행 전 단계 바: 블록 순서만 보인다 */
.ppw-host .ppw-stepbar.is-idle .ppw-stepbar-item, .ppw-host .ppw-stepbar.is-idle .ppw-stepbar-item.is-pending { opacity: .85; cursor: default; }
/* 빈 상태: DEEP OCR처럼 원문 칸은 도구 줄과 회색 바탕, 결과 칸은 아래 이동 줄(2026-10-27) */
.ppw-host .ppw-document-viewer.is-empty .ppw-viewer-tools button { pointer-events: none; opacity: .45; }
.ppw-host .ppw-document-empty.is-upload-empty { flex: 1; height: auto; margin: 0; border: 0; background: var(--ppw-bg); color: #94a3b8; }
.ppw-host .ppw-document-empty.is-upload-empty > svg { color: #94a3b8; }
.ppw-host .ppw-result-empty-wrap { height: 100%; display: flex; flex-direction: column; }
.ppw-host .ppw-result-empty-wrap > .ppw-result-empty-state { flex: 1; }
/* 편집기 상단 줄: 설명이 먼저 줄어들고 실행 막힘 안내는 잘리지 않는다(2026-10-27) */
.ppw-host .ppw-editor .ppw-detail-bar .ppw-detail-description { min-width: 0; flex: 0 1 auto; }
.ppw-host .ppw-editor .ppw-detail-bar > strong { min-width: 0; flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ppw-host .ppw-editor .ppw-detail-bar .ppw-run-reason, .ppw-host .ppw-editor .ppw-detail-bar .ppw-file-chip { flex: 0 0 auto; max-width: none; }
.ppw-host .ppw-editor .ppw-detail-bar .vlmops-btn, .ppw-host .ppw-editor .ppw-detail-bar .ppw-btn { flex: 0 0 auto; }
.ppw-host .ppw-inspector-empty { height: 100%; }
/* 블록 설정: 템플릿 링크 아래 다음 항목과 간격, 이름은 설명보다 먼저 줄어들지 않는다(2026-10-27) */
.ppw-host .ppw-template-link { margin: 6px 0 12px; }
.ppw-host .ppw-editor .ppw-detail-bar > strong { flex: 0 0 auto; max-width: 40%; }
/* 버전 칩: 템플릿 관리 카드의 버전 칩과 같은 파란 칩(2026-10-27 운영 반영 제거) */
.ppw-host .ppw-ver.is-cur { min-height: 20px; border-color: #c9d9ff; background: #eaf1ff; color: #1d4ed8; font-size: 10px; font-weight: 750; }
/* 원문 위 문서 유형 줄: 유형이 여럿이면 골라 결과를 좁힌다(왼쪽 기록 아래 트리를 합침, 2026-10-27) */
.ppw-host .ppw-type-pick { border: 1px solid var(--ppw-line); background: #fff; padding: 4px 9px; color: #374151; font-size: 12px; font-weight: 600; cursor: pointer; }
.ppw-host .ppw-type-pick:hover { border-color: #c9d9ff; }
.ppw-host .ppw-type-pick.is-on { border-color: #c9d9ff; background: #eff6ff; color: #1b58d4; }

/* 실행 상세 상단 줄: 왼쪽 이름과 버전, 가운데 단계 바, 오른쪽 메뉴(2026-10-28 단계 바 가운데 정렬) */
.ppw-host .ppw-run-head-l { display: flex; align-items: center; gap: 8px; min-width: 0; }
.ppw-host .ppw-run-head-l > strong { min-width: 0; max-width: 240px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #1f2937; font-size: 14px; font-weight: 750; }
.ppw-host .ppw-run-head-r { display: flex; align-items: center; justify-content: flex-end; gap: 8px; margin-left: auto; }

/* 원문 위치 박스와 실시간 추출(2026-10-28): DEEP OCR의 .ocr-bbox 모양을 그대로 쓰고 무대와 층만 둔다 */
.ppw-host .ppw-doc-stage { position: relative; margin: 0 auto; }
.ppw-host .ppw-doc-stage > img { display: block; width: 100%; height: auto; margin: 0; border: 1px solid var(--ppw-border); background: #fff; box-shadow: 0 1px 4px rgba(15,23,42,.08); }
.ppw-host .ppw-bbox-layer { position: absolute; inset: 0; pointer-events: none; }
.ppw-host .ppw-bbox-layer .ocr-bbox { pointer-events: auto; }
.ppw-host .ppw-bbox-layer .ocr-bbox.is-stream { pointer-events: none; }
.ppw-host .result-row[data-ppw-action] { cursor: pointer; }
.ppw-host .result-row.is-active .kv-key, .ppw-host .result-row.is-active .kv-val { background: #eff6ff; }
.ppw-host .ppw-stream { display: flex; flex-direction: column; height: 100%; min-height: 360px; border: 1px solid var(--ppw-line); background: #fff; }
.ppw-host .ppw-stream-head { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--ppw-line); font-size: 11px; }
.ppw-host .ppw-stream-head b { color: #1f2937; }
.ppw-host .ppw-stream-count { color: var(--ppw-muted); font-variant-numeric: tabular-nums; }
.ppw-host .ppw-stream-head em { margin-left: auto; display: inline-flex; align-items: center; gap: 4px; color: #059669; font-style: normal; font-weight: 700; }
.ppw-host .ppw-stream-head em i { width: 6px; height: 6px; border-radius: 999px; background: #10b981; animation: ppwPulse 1s ease-in-out infinite; }
.ppw-host .ppw-stream-body { flex: 1; min-height: 0; display: grid; grid-template-columns: 1fr 1fr; }
.ppw-host .ppw-stream-kv { overflow-y: auto; padding: 8px; display: flex; flex-direction: column; gap: 4px; border-right: 1px solid var(--ppw-line); }
.ppw-host .ppw-stream-row { display: flex; align-items: flex-start; gap: 8px; padding: 6px 8px; border: 1px solid var(--ppw-line); border-radius: 6px; background: #f8fafc; animation: ppwFadeUp .2s ease-out both; }
.ppw-host .ppw-stream-row span { flex-shrink: 0; max-width: 42%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #64748b; font-size: 11px; font-weight: 600; }
.ppw-host .ppw-stream-row strong { flex: 1; min-width: 0; color: #1f2937; font-size: 12px; font-weight: 500; word-break: break-all; }
.ppw-host .ppw-stream-json { overflow: auto; background: #0f172a; padding: 12px; }
.ppw-host .ppw-stream-json pre { margin: 0; color: #6ee7b7; font: 11px/1.6 ui-monospace, SFMono-Regular, Menlo, monospace; white-space: pre; }
.ppw-host .ppw-stream-caret { display: inline-block; width: 6px; height: 12px; background: #6ee7b7; vertical-align: middle; animation: ppwPulse 1s steps(2) infinite; }
@keyframes ppwFadeUp { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }
@keyframes ppwPulse { 50% { opacity: .3; } }

/* DEEP OCR 추출 블록 설정: DEEP OCR 업로드 창 추출 옵션과 같은 묶음(2026-10-28) */
.ppw-host .ppw-ocr-opt { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--ppw-line); }
.ppw-host .ppw-ocr-opt-title { margin: 0 0 2px; color: #1f2937; font-size: 13px; font-weight: 700; }
.ppw-host .ppw-ocr-pages { display: grid; grid-template-columns: repeat(10, 1fr); gap: 4px; margin-top: 8px; }
.ppw-host .ppw-ocr-pages button { height: 28px; border: 1px solid var(--ppw-border); background: #fff; color: var(--ppw-muted); font: inherit; font-size: 11.5px; font-weight: 600; cursor: pointer; }
.ppw-host .ppw-ocr-pages button.is-on { border-color: var(--ppw-primary); background: var(--ppw-primary); color: #fff; }

/* 단계 바 끝 편집 단추(2026-10-28) */
/* 단계 바 바로 옆의 원형 편집 단추(2026-10-28) */
.ppw-host .ppw-stepbar-wrap { display: inline-flex; align-items: center; gap: 6px; max-width: 100%; min-width: 0; }
.ppw-host .ppw-step-edit { flex: 0 0 auto; display: inline-grid; place-items: center; width: 34px; height: 34px; border: 0; border-radius: 999px !important; background: #f1f5f9; color: #64748b; cursor: pointer; font: inherit; }
.ppw-host .ppw-step-edit:hover { background: #e8effd; color: #1b58d4; }
.ppw-host .ppw-step-edit:focus-visible { outline: 2px solid #2970ff; outline-offset: 1px; }
/* 휴지통 진입 단추: 글자를 보여 워크플로우 삭제와 헷갈리지 않게 한다 */

/* 디자인 일관성 정리(2026-10-28): 옵션 설명은 DEEP OCR 업로드 창처럼 흐린 글씨 한 줄, 근거 카드 머리는 좁으면 줄바꿈 */
.ppw-host .ppw-ocr-opt-desc { margin: 2px 0 8px; color: var(--ppw-muted, #64748b); font-size: 11.5px; line-height: 1.5; }
.ppw-host .ppw-judge-evidence header { flex-wrap: wrap; row-gap: 4px; }
.ppw-host .ppw-judge-evidence strong { flex: 1 1 120px; }
.ppw-host .ppw-judge-evidence header .ppw-btn { flex: 0 0 auto; }

/* 예약 문서 탭: 공용 예약 판(data-hub-pane)이 원문 칸과 결과 칸을 덮는다 */
.ppw-host .ppw-document-pane, .ppw-host .ppw-result-pane { position: relative; }

/* 분류 컨피던스 경고: 추출 값 경고(review-warn)와 같은 빨간 아이콘과 % */
.ppw-host .ppw-cls-warn { display: inline-flex; align-items: center; gap: 2px; margin-left: 6px; white-space: nowrap; flex-shrink: 0; color: #ef4444; font-size: 11px; font-weight: 700; vertical-align: middle; }

/* 문서 유형 줄 오른쪽 끝의 [문서 유형 변경](2026-10-28) */
.ppw-host .ppw-reclass { margin-left: auto; }
.ppw-host .ppw-reclass .ppw-select-trigger { height: 28px; font-size: 12px; }

/* 워크플로우 추가 팝업: 한 단계 작은 팝업(2026-10-29), 템플릿 관리 새 템플릿 만들기와 같은 폭 */
.ppw-host .ppw-node-setup { position: absolute; top: -10px; right: 10px; padding: 1px 6px; border: 1px solid #f59e0b; background: #fffbeb; color: #b45309; font-size: 10.5px; font-style: normal; font-weight: 700; white-space: nowrap; }

/* 계산, 번역, 요약, 값 대조 결과 화면(2026-10-28) */
.ppw-host .ppw-judge-verdict.is-blue { border-color: #c7d7fe; background: #f5f8ff; color: #1b58d4; }
.ppw-host .ppw-judge-verdict small { margin-left: auto; color: #64748b; font-size: 11.5px; font-weight: 500; }
.ppw-host .ppw-res-table { width: 100%; margin: 10px 0 0; border-collapse: collapse; font-size: 12.5px; }
.ppw-host .ppw-res-table th { padding: 7px 10px; border-bottom: 1px solid #e5e7eb; background: #f8fafc; color: #64748b; font-size: 11.5px; font-weight: 600; text-align: left; }
.ppw-host .ppw-res-table td { padding: 7px 10px; border-bottom: 1px solid #f1f5f9; color: #1f2937; vertical-align: top; overflow-wrap: anywhere; }
.ppw-host .ppw-res-table .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ppw-host .ppw-res-table tr.is-total td { border-top: 1px solid #cbd5e1; font-weight: 700; }
.ppw-host .ppw-res-table tr.is-check td { color: #047857; font-weight: 700; }
.ppw-host .ppw-res-table tr.is-check.is-bad td { color: #b91c1c; background: #fef2f2; }
.ppw-host .ppw-res-table small { margin-left: 4px; color: #94a3b8; font-size: 11px; font-weight: 500; }
.ppw-host .ppw-res-table td.is-kept { color: #64748b; }
.ppw-host .ppw-keep { margin-left: 4px; padding: 0 5px; border: 1px solid #e2e8f0; background: #f8fafc; color: #64748b; font-size: 10.5px; font-style: normal; white-space: nowrap; }
.ppw-host .ppw-res-key { border: 0; background: none; padding: 0; color: inherit; font: inherit; text-align: left; cursor: pointer; white-space: nowrap; }
.ppw-host .ppw-res-key:hover, .ppw-host .ppw-res-key.is-on { color: #1b58d4; text-decoration: underline; }
.ppw-host .ppw-res-key.is-chip { padding: 1px 7px; border: 1px solid #e2e8f0; background: #fff; color: #475569; font-size: 11px; text-decoration: none; }
.ppw-host .ppw-res-key.is-chip:hover, .ppw-host .ppw-res-key.is-chip.is-on { border-color: #1b58d4; color: #1b58d4; text-decoration: none; }
.ppw-host .ppw-res-more { margin: 8px 12px 0; }
.ppw-host .ppw-res-more summary { cursor: pointer; color: #64748b; font-size: 12px; }
.ppw-host .ppw-res-more .ppw-res-table { width: 100%; margin: 6px 0 0; }
.ppw-host .ppw-sum-list { margin: 10px 12px 0; padding-left: 20px; display: grid; gap: 10px; color: #1f2937; font-size: 13px; line-height: 1.6; }
.ppw-host .ppw-sum-list p { margin: 0; }
.ppw-host .ppw-sum-keys { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.ppw-host .ppw-cross-val { font-family: inherit; }
.ppw-host .ppw-cross-val mark { background: #fee2e2; color: #b91c1c; padding: 0 1px; }

.ppw-recheck-notice { margin:12px 16px; padding:12px; border:1px solid #e2e8f0; background:#f8fafc; font-size:12px; color:#475569; }
.ppw-recheck-notice p { margin:6px 0 10px; }
.ppw-editor-error ul { margin:6px 0; padding-left:16px; }
.ppw-editor-error li button { text-align:left; text-decoration:underline; }

.ppw-host .ppw-run-head-l > small { white-space:nowrap; flex-shrink:0; }

.ppw-editor-error { max-height:180px; overflow-y:auto; flex-shrink:0; }

/* Historical snapshots: independent version cards and read-only graph. */
.ppw-modal-card.is-versions { width:min(94vw,1160px); height:min(84vh,760px); }
.ppw-modal-card.is-versions > .ppw-modal-body { flex:1; padding:0; overflow:hidden; }
.ppw-version-layout { display:grid; grid-template-columns:260px minmax(0,1fr); height:100%; min-height:0; }
.ppw-version-list { overflow-y:auto; padding:16px; background:#f8fafc; border-right:1px solid var(--ppw-line); }
.ppw-host .ppw-version-card { display:block; width:100%; text-align:left; padding:14px; margin-bottom:10px; border:1px solid var(--ppw-line); border-radius:6px; background:white; cursor:pointer; }
.ppw-host .ppw-version-card.is-selected { border-color:var(--ppw-primary); background:#eff6ff; box-shadow:0 0 0 1px var(--ppw-primary); }
.ppw-version-card > span { display:flex; align-items:center; gap:10px; }
.ppw-version-card strong { font-size:15px; color:#1f2937; }
.ppw-version-card em { font-size:10px; font-style:normal; color:var(--ppw-primary); }
.ppw-version-card time,.ppw-version-card small { display:block; margin-top:7px; font-size:11px; color:#64748b; }
.ppw-version-card p { margin:8px 0 0; font-size:12px; color:#475569; overflow-wrap:anywhere; }
.ppw-version-preview { min-width:0; min-height:0; display:flex; flex-direction:column; }
.ppw-version-preview > header { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:10px; padding:14px 16px; border-bottom:1px solid var(--ppw-line); }
.ppw-version-preview strong { display:block; font-size:14px; }
.ppw-version-preview small { display:block; margin-top:3px; color:#64748b; font-size:11px; }
.ppw-version-tools { display:flex; align-items:center; gap:7px; font-size:11px; }
.ppw-version-graph { flex:1; min-height:0; overflow:auto; background-color:#f8fafc; background-image:radial-gradient(#cbd5e1 1px,transparent 1px); background-size:18px 18px; }
.ppw-version-svg { display:block; }
@media(max-width:700px){.ppw-version-layout{grid-template-columns:180px minmax(0,1fr)}.ppw-version-list{padding:10px}.ppw-modal-card.is-versions{width:96vw}.ppw-version-tools{flex-wrap:wrap}}
/* Automation Anywhere 내보내기(출력 블록, 2026-10-29) */
.ppw-host .ppw-aa-switch { font-size: 12.5px; font-weight: 600; color: var(--ppw-text, #1f2937); }
.ppw-host .ppw-aa-state { margin-left: auto; font-style: normal; font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: 999px; white-space: nowrap; }
.ppw-host .ppw-aa-state.is-sent { color: #067647; background: #ecfdf3; }
.ppw-host .ppw-aa-state.is-wait { color: #b54708; background: #fffaeb; }
/* 결과 칸 바로 검수(DEEP OCR과 같은 방식, 2026-10-29) */
.ppw-host button.review-warn, .ppw-host button.review-done { background: none; border: 0; padding: 0; cursor: pointer; display: inline-grid; place-items: center; }
.ppw-host button.review-warn:hover { color: #b42318; }
/* 문서 분류 결과와 문서 유형 줄(DEEP OCR과 같은 모양, 2026-10-29) */
.ppw-host .ppw-cls-badge { flex-shrink: 0; display: inline-flex; align-items: center; padding: 2px 6px; font-size: 10.5px; font-weight: 600; border: 1px solid rgba(41,112,255,.4); color: #1d4ed8; background: #eaf1ff; }
.ppw-host .ppw-cls-block .cls-page, .ppw-host .ppw-cls-block .cls-chip { font: inherit; }
.ppw-host .ppw-cls-block button.cls-page { font-size: 11px; font-weight: 700; }
.ppw-host .ppw-cls-block .cls-chip { font-size: 12px; }
.ppw-host .ppw-type-select { width: 300px; max-width: 46%; }
.ppw-host .ppw-type-select .ppw-select, .ppw-host .ppw-type-select > * { width: 100%; }
.ppw-host .ppw-cls-status { flex-shrink: 0; display: inline-flex; align-items: center; gap: 4px; font-size: 11px; font-weight: 600; }
.ppw-host .ppw-cls-status.is-done { color: #059669; }
.ppw-host .ppw-cls-status.is-none { padding: 2px 8px; border-radius: 999px; color: #64748b; background: #f8fafc; border: 1px solid #e2e8f0; }
/* 출력 블록 내보내기 두 항목(2026-10-29) */
.ppw-host .ppw-export-item { display: grid; gap: 8px; padding: 10px 0; border-top: 1px solid var(--ppw-line, #eef1f4); }
.ppw-host .ppw-export-item:first-of-type { border-top: 0; padding-top: 4px; }
/* DEEP OCR 추출 블록 설정: DEEP OCR [파일 업로드] 추출 옵션과 같은 줄 구성(2026-10-29) */
.ppw-host .ppw-oo { display: grid; }
.ppw-host .ppw-oo-row { padding: 14px 0; border-top: 1px solid var(--ppw-line, #eef1f4); display: grid; gap: 10px; }
.ppw-host .ppw-oo-row:first-child { border-top: 0; padding-top: 4px; }
.ppw-host .ppw-oo-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.ppw-host .ppw-oo-title { margin: 0; font-size: 13px; font-weight: 600; color: var(--ppw-text, #111827); }
.ppw-host .ppw-oo-desc { margin: 2px 0 0; font-size: 11.5px; line-height: 1.45; color: #64748b; }
.ppw-host .ppw-oo-ctl { flex-shrink: 0; }
.ppw-host .ppw-oo-seg { display: inline-flex; border: 1px solid var(--ppw-border, #d0d5dd); overflow: hidden; }
.ppw-host .ppw-oo-seg button { font: inherit; font-size: 12.5px; font-weight: 600; padding: 6px 12px; background: #fff; color: #475467; border: 0; border-left: 1px solid var(--ppw-border, #d0d5dd); cursor: pointer; }
.ppw-host .ppw-oo-seg button:first-child { border-left: 0; }
.ppw-host .ppw-oo-seg button.is-on { background: var(--ppw-primary, #2970ff); color: #fff; }
.ppw-host .ppw-oo-seg button:disabled { opacity: .45; cursor: not-allowed; }
.ppw-host .ppw-oo-select { display: block; width: 140px; }
.ppw-host .ppw-oo-select.is-wide { width: 100%; }
.ppw-host .ppw-oo-row:has(.ppw-oo-select.is-wide) > .ppw-oo-head { flex-wrap: wrap; }
.ppw-host .ppw-oo-row:has(.ppw-oo-select.is-wide) .ppw-oo-ctl { flex-basis: 100%; }
.ppw-host .ppw-oo-sub { display: grid; gap: 8px; }
.ppw-host .ppw-oo-box { padding: 10px 12px; background: #f8fafc; border: 1px solid var(--ppw-line, #eef1f4); }
.ppw-host .ppw-oo-box .ppw-oo-head { flex-wrap: wrap; }
.ppw-host .ppw-oo-box .ppw-oo-ctl { flex-basis: 100%; }
.ppw-host .ppw-oo-box .ppw-oo-select { width: 100%; }
.ppw-host .ppw-oo-check span { display: grid; gap: 2px; }
.ppw-host .ppw-oo-check small { font-size: 11px; color: #64748b; font-weight: 400; }
.ppw-host .ppw-switch.is-disabled { opacity: .4; cursor: not-allowed; }
/* 결과 칸 '추출 옵션' 요약(DEEP OCR 상단바와 같은 내용, 2026-10-29) */
.ppw-host .ppw-optsum { position: relative; display: inline-flex; }
.ppw-host .ppw-optsum > .ppw-btn { display: inline-flex; align-items: center; gap: 4px; }
.ppw-host .ppw-optsum-pop { position: absolute; right: 0; top: calc(100% + 6px); width: 288px; padding: 14px; background: #fff; border: 1px solid var(--ppw-border, #d0d5dd); box-shadow: 0 12px 28px rgba(15,23,42,.16); z-index: 40; }
.ppw-host .ppw-optsum-title { margin: 0 0 8px; font-size: 13px; font-weight: 700; color: var(--ppw-text, #111827); }
.ppw-host .ppw-optsum-pop ul { margin: 0; padding: 0; list-style: none; }
.ppw-host .ppw-optsum-pop li { padding: 8px 0; border-top: 1px solid var(--ppw-line, #eef1f4); font-size: 12.5px; }
.ppw-host .ppw-optsum-pop li:first-child { border-top: 0; }
.ppw-host .ppw-optsum-pop li > div { display: flex; justify-content: space-between; gap: 16px; }
.ppw-host .ppw-optsum-pop li span { color: #64748b; }
.ppw-host .ppw-optsum-pop li b { font-weight: 600; color: var(--ppw-text, #111827); }
.ppw-host .ppw-optsum-pop li b.is-on { color: #1d4ed8; }
.ppw-host .ppw-optsum-pop li p { margin: 4px 0 0; font-size: 11.5px; color: #64748b; word-break: break-all; }
.ppw-host .ppw-optsum-foot { margin: 10px 0 0; padding-top: 10px; border-top: 1px solid var(--ppw-line, #eef1f4); font-size: 11px; color: #94a3b8; text-align: center; }
.ppw-host .ppw-oo-select { width: 120px; }
.ppw-host .ppw-oo-select .ppw-select, .ppw-host .ppw-oo-select .ppw-select-trigger { width: 100%; min-width: 0; box-sizing: border-box; }
.ppw-host .ppw-oo-select.is-wide, .ppw-host .ppw-oo-box .ppw-oo-select { width: 100%; }
/* 판단 점검 항목과 담당자 확정(2026-10-29) */
.ppw-host .ppw-jchk { display: grid; gap: 8px; padding: 10px 12px; margin-bottom: 8px; border: 1px solid var(--ppw-line, #e4e7ec); background: #fbfcfd; }
.ppw-host .ppw-jchk-head { display: flex; align-items: center; gap: 8px; }
.ppw-host .ppw-jchk-head > span { flex-shrink: 0; font-size: 11px; font-weight: 700; color: #64748b; }
.ppw-host .ppw-jchk-head input { flex: 1; min-width: 0; font: inherit; font-size: 13px; font-weight: 600; border: 0; border-bottom: 1px solid transparent; background: transparent; padding: 2px 0; }
.ppw-host .ppw-jchk-head input:focus { outline: none; border-bottom-color: var(--ppw-primary, #2970ff); }
.ppw-host .ppw-jchk-when { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.ppw-host .ppw-jrule .ppw-jchk-head > i { flex: 1; }
.ppw-host .ppw-jrule .ppw-jchk-when { grid-template-columns: minmax(0,1fr) minmax(0,1fr); }
.ppw-host .ppw-jrule .ppw-jchk-when > .ppw-field { min-width: 0; margin-bottom: 0; }
.ppw-host .ppw-jrule .ppw-jchk-when .ppw-select, .ppw-host .ppw-jrule .ppw-jchk-when .ppw-select-trigger { width: 100%; min-width: 0; box-sizing: border-box; }
.ppw-host .ppw-jrule .ppw-jchk-when > .ppw-field > input { box-sizing: border-box; height: 36px; min-height: 36px; font-size: 13px; }
.ppw-host .ppw-jchk-adv summary { font-size: 11.5px; color: #64748b; cursor: pointer; }
.ppw-host .ppw-jchk-adv input { margin-top: 6px; width: 100%; font: inherit; font-size: 12.5px; border: 1px solid var(--ppw-border, #d0d5dd); padding: 6px 8px; box-sizing: border-box; }
.ppw-host .ppw-jchk-sugg { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 10px; }
.ppw-host .ppw-jchk-sugg > span { flex-basis: 100%; font-size: 11.5px; color: #64748b; }
.ppw-host .ppw-jchk-sugg button { font: inherit; font-size: 12px; display: inline-flex; align-items: center; gap: 3px; padding: 3px 9px; border: 1px dashed #93c5fd; background: #f5f8ff; color: #1d4ed8; cursor: pointer; }
.ppw-host .ppw-judge-checks { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.ppw-host .ppw-judge-checks li { border: 1px solid var(--ppw-line, #e4e7ec); padding: 10px 12px; background: #fff; }
.ppw-host .ppw-judge-checks header { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 4px; font-size: 13px; }
.ppw-host .ppw-judge-checks p { margin: 0; font-size: 12.5px; line-height: 1.55; color: #344054; }
.ppw-host .ppw-judge-checks small { display: block; margin-top: 4px; font-size: 11.5px; color: #64748b; }
.ppw-host .ppw-jv { font-style: normal; font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 999px; }
.ppw-host .ppw-jv.is-green { color: #067647; background: #ecfdf3; }
.ppw-host .ppw-jv.is-red { color: #b42318; background: #fef3f2; }
.ppw-host .ppw-jv.is-amber { color: #b54708; background: #fffaeb; }
.ppw-host .ppw-jv.is-gray { color: #64748b; background: #f2f4f7; }
.ppw-host .ppw-judge-decide { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 10px 12px; border: 1px solid #fedf89; background: #fffcf5; font-size: 12.5px; color: #93370d; }
.ppw-host .ppw-judge-decide > span { flex: 1; min-width: 160px; }
.ppw-host .ppw-judge-decide.is-done { border-color: #abefc6; background: #f6fef9; color: #067647; }
/* 워크플로우 추가(2026-11-04): 위 이름과 설명, 아래 시작 방법 카드. 문장 초안을 고르면 카드 아래 업무 입력칸 */
.ppw-host .ppw-modal-card.is-create { width: min(calc(100vw - 48px), 860px); }
.ppw-host .ppw-create-stack { display: grid; gap: 14px; }
.ppw-host .ppw-create-fields { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.4fr); gap: 16px; align-items: start; }
.ppw-host .ppw-create-start { display: grid; gap: 8px; padding-top: 12px; border-top: 1px solid var(--ppw-line, #eef1f4); }
.ppw-host .ppw-create-label { margin: 0; font-size: 12.5px; font-weight: 600; color: #344054; }
.ppw-host .ppw-create-cards { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.ppw-host .ppw-create-opt { font: inherit; display: flex; flex-direction: column; align-items: flex-start; gap: 4px; min-height: 84px; text-align: left; padding: 9px 12px; border: 1px solid var(--ppw-line, #e4e7ec); background: #fff; cursor: pointer; }
.ppw-host .ppw-create-opt strong { font-size: 13.5px; font-weight: 700; color: #1f2937; }
.ppw-host .ppw-create-opt small { font-size: 12px; line-height: 1.5; color: #64748b; }
.ppw-host .ppw-create-opt:hover { border-color: #93c5fd; background: #f8fbff; }
.ppw-host .ppw-create-opt.is-on { border-color: var(--ppw-primary, #2970ff); background: #f0f5ff; outline: 1px solid var(--ppw-primary, #2970ff); outline-offset: -2px; }
.ppw-host .ppw-create-opt:focus-visible { outline: 2px solid var(--ppw-primary, #2970ff); outline-offset: 1px; }
/* 프리셋 블록 미리보기: 카드 맨 아래, 단계 바를 작게 줄인 아이콘 줄 */
.ppw-host .ppw-preset-flow { display: inline-flex; align-items: center; margin-top: auto; padding-top: 4px; }
.ppw-host .ppw-preset-flow i { position: relative; display: inline-grid; width: 16px; height: 16px; place-items: center; border-radius: 50%; background: color-mix(in srgb, var(--step-color, #64748b) 14%, #fff); color: var(--step-color, #64748b); font-style: normal; }
.ppw-host .ppw-preset-flow i + i { margin-left: 9px; }
.ppw-host .ppw-preset-flow i + i::before { content: '›'; position: absolute; left: -7px; color: #94a3b8; font-size: 11px; line-height: 1; }
.ppw-host .ppw-create-prompt { display: grid; gap: 6px; }
.ppw-host .ppw-create-prompt textarea { width: 100%; box-sizing: border-box; min-height: 84px; font: inherit; font-size: 14px; line-height: 1.6; padding: 10px 12px; border: 1px solid var(--ppw-border, #d0d5dd); background: #fff; resize: vertical; outline: 0; }
.ppw-host .ppw-create-prompt textarea:focus { border-color: var(--ppw-primary, #2970ff); }
@media (max-width: 760px) { .ppw-host .ppw-create-fields { grid-template-columns: 1fr; } .ppw-host .ppw-create-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 420px) { .ppw-host .ppw-create-cards { grid-template-columns: 1fr; } }
.ppw-host .ppw-sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
/* DEEP OCR 결과 화면과 통일(2026-10-30): 상단 추출 옵션, 아이콘 동작 단추, 낮은 문서 유형 줄, 쪽 번호 칸 */
.ppw-host .ppw-run-head-r { display: flex; align-items: center; gap: 8px; }
.ppw-host .ppw-optsum-btn { font: inherit; display: inline-flex; align-items: center; gap: 6px; height: 28px; padding: 0 10px 0 8px; border: 1px solid var(--ppw-border, #d0d5dd); border-radius: 6px; background: #fff; color: #475467; cursor: pointer; }
.ppw-host .ppw-optsum-btn span { font-size: 11.5px; font-weight: 600; line-height: 1; }
.ppw-host .ppw-optsum-btn:hover, .ppw-host .ppw-optsum-btn[aria-expanded="true"] { border-color: var(--ppw-primary, #2970ff); color: #1d4ed8; background: #f0f5ff; }
.ppw-host .ppw-viewer-type { min-height: 36px; padding-top: 4px !important; padding-bottom: 4px !important; }
.ppw-host .ppw-reclass { margin-left: 0; }
.ppw-host .ppw-type-select { width: 360px; max-width: 60%; }
.ppw-host .ppw-page-ind { display: inline-flex; align-items: center; gap: 6px; padding: 0 6px; font-size: 11px; font-weight: 600; color: #475467; font-variant-numeric: tabular-nums; }
.ppw-host .ppw-page-ind b { display: inline-grid; place-items: center; min-width: 34px; height: 28px; padding: 0 6px; border: 1px solid var(--ppw-border, #d0d5dd); border-radius: 6px; background: #fff; color: #111827; font-weight: 600; }
/* 연동 대상 고르개 묶음 제목, 저장 폴더 선택(2026-10-30) */
.ppw-host .ppw-select-group { display: block; padding: 8px 12px 4px; font-size: 10.5px; font-weight: 700; letter-spacing: .04em; color: #94a3b8; }
.ppw-host .ppw-select-menu { max-height: 360px; overflow: auto; }
.ppw-host .ppw-folder-row { display: flex; gap: 6px; margin-top: 5px; }
.ppw-host .ppw-folder-row input { flex: 1; min-width: 0; }
.ppw-host .ppw-folder-btn { flex-shrink: 0; width: 38px; display: grid; place-items: center; border: 1px solid var(--ppw-border, #d0d5dd); border-radius: 6px; background: #fff; color: #475467; cursor: pointer; }
.ppw-host .ppw-folder-btn:hover { border-color: var(--ppw-primary, #2970ff); color: #1d4ed8; background: #f0f5ff; }
.ppw-host .ppw-fp-crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; padding: 8px 10px; border: 1px solid var(--ppw-line, #e4e7ec); background: #f8fafc; font-size: 12.5px; color: #64748b; }
.ppw-host .ppw-fp-crumbs i { font-style: normal; color: #cbd5e1; }
.ppw-host .ppw-fp-crumbs button { font: inherit; border: 0; background: none; padding: 2px 4px; color: #475467; cursor: pointer; }
.ppw-host .ppw-fp-crumbs button:hover { color: #1d4ed8; text-decoration: underline; }
.ppw-host .ppw-fp-crumbs button[aria-current] { font-weight: 700; color: #111827; }
.ppw-host .ppw-fp-list { display: grid; gap: 2px; margin-top: 10px; max-height: 280px; overflow: auto; border: 1px solid var(--ppw-line, #e4e7ec); padding: 4px; }
.ppw-host .ppw-fp-item { font: inherit; display: flex; align-items: center; gap: 8px; padding: 8px 10px; border: 0; background: #fff; text-align: left; cursor: pointer; color: #344054; font-size: 13px; }
.ppw-host .ppw-fp-item span { flex: 1; }
.ppw-host .ppw-fp-item:hover { background: #f0f5ff; color: #1d4ed8; }
.ppw-host .ppw-fp-item.is-up { color: #64748b; }
.ppw-host .ppw-fp-new { display: flex; gap: 6px; margin-top: 10px; }
.ppw-host .ppw-fp-new input { flex: 1; min-width: 0; font: inherit; font-size: 13px; border: 1px solid var(--ppw-border, #d0d5dd); padding: 6px 10px; }
.ppw-host .ppw-folder-row input { border: 1px solid var(--ppw-border); background: #fff; padding: 8px 9px; min-height: 34px; color: #1f2937; font: inherit; font-size: 14px; outline: 0; box-sizing: border-box; }
.ppw-host .ppw-folder-row input:focus { border-color: var(--ppw-primary); }
/* 추가 팝업: 이름과 설명이 위, 시작 방법 카드가 아래. 초안 만들기 카드는 두 칸 너비(2026-10-30) */
.ppw-host .ppw-req { font-style: normal; color: #d92d20; margin-left: 2px; }
/* 실시간 추출 중 잠금(2026-10-30, DEEP OCR과 같음): 처리 중인 문서와 블록만 살리고 나머지 조작은 끝날 때까지 막는다 */
.ppw-host .is-run-locked .ppw-run-rail > :not(.ppw-rail-list),
.ppw-host .is-run-locked .ppw-rail-list > :not(.is-active),
.ppw-host .is-run-locked .ppw-run-head-l .ppw-icon-button,
.ppw-host .is-run-locked .ppw-run-head-r,
.ppw-host .is-run-locked .ppw-step-edit,
.ppw-host .is-run-locked .ppw-res-actions > div,
.ppw-host .is-run-locked .ppw-rtabs { opacity: .45; pointer-events: none; }
.ppw-host .ppw-stepbar-item.is-locked { opacity: .5; cursor: default; }
.ppw-host .ppw-stepbar-item.is-running { border-color: transparent; background: #fff; color: #1d4ed8; }
.ppw-host .ppw-stepbar-item.is-running i { background: #eaf1ff; color: #2970ff; }

/* 새 워크플로우를 만든 직후 상세 화면을 덮는 진행 표시(2026-10-30 Benson) */
.ppw-host .ppw-creating { position: fixed; z-index: 230; inset: 0; display: grid; place-items: center; padding: 24px; }
.ppw-host .ppw-creating-backdrop { position: absolute; inset: 0; background: rgba(15,23,42,.45); }
.ppw-host .ppw-creating-card { position: relative; width: min(90vw,400px); display: grid; gap: 8px; border: 1px solid #cbd5e1; border-radius: 10px; background: #fff; padding: 24px 24px 20px; box-shadow: 0 22px 55px rgba(15,23,42,.28); text-align: center; animation: ppwFadeUp .2s ease-out; }
.ppw-host .ppw-creating-title { margin: 0; color: #1f2937; font-size: 16px; font-weight: 700; }
.ppw-host .ppw-creating-name { margin: 0; overflow: hidden; color: #1d4ed8; font-size: 13px; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.ppw-host .ppw-creating-bar { height: 6px; margin-top: 8px; overflow: hidden; border-radius: 999px; background: #e2e8f0; }
.ppw-host .ppw-creating-bar > span { display: block; width: 100%; height: 100%; border-radius: inherit; background: linear-gradient(90deg,#93c5fd,#2970ff); transform: scaleX(0); transform-origin: left center; animation: ppw-creating-fill 1.9s cubic-bezier(.35,.1,.25,1) forwards; }
.ppw-host .ppw-creating-sub { margin: 4px 0 0; color: var(--ppw-muted); font-size: 12px; }
@keyframes ppw-creating-fill { 0% { transform: scaleX(0); } 60% { transform: scaleX(.72); } 100% { transform: scaleX(1); } }
@media (prefers-reduced-motion: reduce) { .ppw-host .ppw-creating-bar > span { animation: none; transform: scaleX(.6); } }

/* H1 결과 이력 전환, H2 근거 시점, H3 DEEP OCR 보내기 최신 아님(2026-10-30 Benson) */
.ppw-host .ppw-ocr-stale { border-radius: 999px; background: #fff7ed; padding: 2px 8px; color: #c2410c; font-size: 11px; font-style: normal; font-weight: 600; }

/* 대조 블록 결과 칸 세 구역(2026-10-31 Benson 결정 1, 4): 구역 순서가 처리 순서다 */
.ppw-flow { gap: 14px; }
.ppw-flow-sec > header { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }
.ppw-flow-sec > header > strong { font-size: 13px; font-weight: 700; color: rgb(var(--k-text1)); }
.ppw-flow-no { display: inline-grid; place-items: center; width: 20px; height: 20px; font-size: 11px; font-weight: 700; color: #fff; background: #2970ff; flex: 0 0 auto; }
.ppw-flow-diff { font-style: normal; font-size: 11px; font-weight: 600; color: #b45309; background: #fffbeb; border: 1px solid #fde68a; padding: 1px 6px; }
.ppw-host .ppw-flow-sec .ppw-output-rows > p > strong small { display: block; margin-top: 2px; font-size: 11px; color: #94a3b8; }
.ppw-host .ppw-base-table tr.is-hit td { background: #eaf1ff; box-shadow: inset 0 1px 0 #2970ff, inset 0 -1px 0 #2970ff; }
.ppw-flow-body { display: flex; flex-direction: column; gap: 10px; }
/* 판단 결과 칸(2026-11-01): 3 구역 안의 판정, 사유, 근거를 구역 표와 같은 폭으로 맞춘다 */
.ppw-host .ppw-flow-body > .ppw-judge-verdict,
.ppw-host .ppw-flow-body > .ppw-judge-text,
.ppw-host .ppw-flow-body .ppw-judge-evidence { margin: 0; }
.ppw-host .ppw-flow-body .ppw-ev-more { margin: 0; }
.ppw-host .ppw-flow-body .ppw-ev-more > .ppw-judge-evidence { margin-top: 6px; }
.ppw-host .ppw-judge-text .ppw-cite, .ppw-host .ppw-judge-checks .ppw-cite { margin: 0 1px 0 0; }
.ppw-host .ppw-fref { padding: 0 4px; background: #f2f4f7; color: #344054; font-weight: 600; }
.ppw-host .ppw-fref > b { margin-left: 4px; padding-left: 4px; border-left: 1px solid #d0d5dd; color: #101828; font-weight: 600; }
.ppw-host .ppw-fref > b.is-empty { color: #98a2b3; font-style: italic; font-weight: 500; }
.ppw-host button.ppw-review-badge { border: 0; font-family: inherit; cursor: pointer; }
.ppw-host button.ppw-review-badge:hover { text-decoration: underline; }
/* 원문 위치 박스 수정(2026-11-01): 박스 층은 클릭을 흘려보내므로 편집 층과 [위치 수정]만 받게 한다 */
.ppw-host .ppw-bbox-layer .bbe-layer, .ppw-host .ppw-bbox-layer .bbe-entry { pointer-events: auto; }

/* 문서 유형 지정 고르기(2026-11-02): DEEP OCR 추출 옵션과 같은 검색칸과 두 줄 항목 */
.ppw-host .ppw-type-menu { padding: 0; max-height: 320px; }
.ppw-host .ppw-type-search { position: sticky; top: 0; z-index: 1; padding: 8px; background: #fff; border-bottom: 1px solid var(--ppw-line, #eef1f4); }
.ppw-host .ppw-type-search input { width: 100%; font: inherit; font-size: 12px; padding: 6px 10px; border: 1px solid var(--ppw-border, #d0d5dd); background: #fff; outline: none; }
.ppw-host .ppw-type-search input:focus { border-color: var(--ppw-primary, #2970ff); }
.ppw-host .ppw-type-opt { font: inherit; display: flex; flex-direction: column; gap: 2px; width: 100%; text-align: left; padding: 8px 12px; border: 0; background: #fff; cursor: pointer; }
.ppw-host .ppw-type-opt span { font-size: 12.5px; color: #111827; }
.ppw-host .ppw-type-opt small { font-size: 10.5px; color: #64748b; }
.ppw-host .ppw-type-opt:hover { background: #f8fafc; }
.ppw-host .ppw-type-opt.is-selected span { color: #1d4ed8; font-weight: 600; }
.ppw-host .ppw-type-opt[hidden] { display: none; }
.ppw-host .ppw-type-empty-search { margin: 0; padding: 14px 12px; text-align: center; font-size: 11.5px; color: #64748b; }
.ppw-host .ppw-export-item > .ppw-oo-head { margin-bottom: 8px; }
/* 값 추출 결과 칸의 값 입력은 DEEP OCR과 같다(2026-11-02): 테두리 없는 칸 그대로 고치고 포커스 상자를 두지 않는다(#result-pane textarea와 같음) */
.ppw-host .ppw-ocr-fields textarea[data-review-value]:focus-visible { outline: none; }
/* 편집기 확인 알림 토스트(2026-11-02): 캔버스 아래 가운데, 블록 이름 단추로 그 블록에 포커스 */
.ppw-host .ppw-editor { position: relative; }
.ppw-host .ppw-editor-toast { position: absolute; left: 50%; bottom: 24px; transform: translateX(-50%); z-index: 40; display: flex; align-items: center; gap: 10px; max-width: min(760px, calc(100% - 48px)); padding: 10px 12px 10px 14px; background: #b91c1c; color: #fff; box-shadow: 0 8px 24px rgba(15,23,42,.18); }
.ppw-host .ppw-editor-toast > svg { flex: 0 0 auto; }
.ppw-host .ppw-etoast-body { min-width: 0; display: flex; flex-wrap: wrap; gap: 2px 8px; font-size: 12.5px; }
.ppw-host .ppw-etoast-body strong { font-weight: 700; }
.ppw-host .ppw-etoast-links { display: flex; flex-wrap: wrap; gap: 6px; }
.ppw-host .ppw-etoast-link { font: inherit; font-size: 12px; font-weight: 700; padding: 3px 8px; border: 1px solid rgba(255,255,255,.55); background: transparent; color: #fff; cursor: pointer; white-space: nowrap; }
.ppw-host .ppw-etoast-link:hover { background: rgba(255,255,255,.14); }
.ppw-host .ppw-etoast-close { flex: 0 0 auto; border: 0; background: transparent; color: rgba(255,255,255,.8); cursor: pointer; padding: 2px; }
/* 연결 중(2026-11-02): 이을 수 없는 블록은 흐리게 끄고, 이을 수 있는 블록은 올리면 초록 테두리 */
.ppw-canvas-node.is-connect-off { opacity: .32; filter: grayscale(.6); cursor: not-allowed; }
.ppw-canvas-node.is-connect-off .ppw-node-handle { pointer-events: none; }
.ppw-canvas-node.is-connect-on.is-connect-hover { box-shadow: 0 0 0 2px #16a34a; }

/* 편집기 실행 취소와 다시 실행(2026-11-04) */
.ppw-host .ppw-undo-group { display: inline-flex; align-items: center; gap: 2px; margin-right: 4px; }
.ppw-host .ppw-undo-group .ppw-icon-button:disabled { opacity: .35; cursor: default; }
/* 다시 확인 안내와 결과 이력 전환: 결과 칸 아래 고정(2026-11-04) */
.ppw-host .ppw-recheck-dock { flex: 0 0 auto; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 10px 16px; border-top: 1px solid var(--ppw-line); background: #f8fafc; }
.ppw-host .ppw-recheck-dock .ppw-recheck-notice { flex: 1 1 320px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 0; padding: 0; border: 0; background: transparent; }
.ppw-host .ppw-recheck-dock .ppw-recheck-notice p, .ppw-host .ppw-recheck-dock > .ppw-help { margin: 0; }
.ppw-host .ppw-recheck-dock .ppw-run-error { flex-basis: 100%; margin: 0; }
/* 판단 근거 원문: 가운데 문서 칸 위 팝업(2026-11-04) */
.ppw-host .ppw-document-pane { position: relative; }
.ppw-host .ppw-ev-pop { position: absolute; inset: 16px; z-index: 30; display: flex; flex-direction: column; border: 1px solid #cbd5e1; border-radius: 0; background: #fff; box-shadow: 0 18px 44px rgba(15,23,42,.2); overflow: hidden; }
.ppw-host .ppw-ev-pop > .ppw-cmp-col { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; border: 0; }
.ppw-host .ppw-ev-pop .ppw-cmp-colbody { flex: 1 1 auto; min-height: 0; overflow: auto; }
.ppw-host .ppw-ev-pop .ppw-ev-close { margin-left: auto; }
/* 실행 조건으로 생략한 판단(2026-11-04) */
.ppw-host .ppw-stepbar-item.is-skipped { opacity: .5; }
/* 다시 계산 필요(2026-11-11): 고친 블록 뒤의 블록. 점선 테두리와 다시 계산 표시 */
.ppw-host .ppw-stepbar-item.is-stale { border-style: dashed; border-color: #f59e0b; }
.ppw-host .ppw-stepbar-item .ppw-step-stale { display: inline-flex; color: #d97706; margin-left: -2px; }
/* 지금 버전에는 있지만 이 기록에는 결과가 없는 블록(WF-P86, 2026-11-05). 흐리게 두되 눌러서 재실행 안내를 연다 */
.ppw-host .ppw-stepbar-item.is-missing { opacity: .55; border: 1px dashed #cbd5e1; }
.ppw-host .ppw-stepbar-item.is-missing.is-on { opacity: 1; }
.ppw-host .ppw-result-empty-state .vlmops-btn, .ppw-host .ppw-result-empty-state button { margin-top: 12px; }
.ppw-host .ppw-judge-skip { display: flex; gap: 10px; align-items: flex-start; padding: 12px 14px; border: 1px solid var(--ppw-line); background: #f8fafc; color: #475569; font-size: 12.5px; }
.ppw-host .ppw-judge-skip strong { display: block; color: #1f2937; font-size: 13px; margin-bottom: 2px; }
.ppw-host .ppw-judge-skip p { margin: 0; }
.ppw-host .ppw-runif { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--ppw-line); }
/* 판단 결과 칸 아래 판단 기준 한 줄(2026-11-04) */
.ppw-host .ppw-judge-basis { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--ppw-line); font-size: 12.5px; color: #334155; }
.ppw-host .ppw-judge-basis header { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
.ppw-host .ppw-judge-basis header strong { font-size: 12px; color: #64748b; font-weight: 650; }
.ppw-host .ppw-judge-basis p { margin: 0 0 4px; }
.ppw-host .ppw-judge-basis small { color: #94a3b8; font-size: 11px; }
/* 판단 막대의 확정 단추(2026-11-04): 문서 대조 행 상세 제목 줄 오른쪽 단추와 같은 자리 */
.ppw-host .ppw-judge-verdict.has-acts { align-items: center; flex-wrap: wrap; }
.ppw-host .ppw-judge-verdict small { display: inline-flex; align-items: center; gap: 4px; }
.ppw-host .ppw-judge-verdict.has-acts small { margin-left: 4px; }
.ppw-host .ppw-jv-acts { margin-left: auto; display: inline-flex; gap: 6px; }
/* 판정 바꾸기(2026-11-04): 판단 막대 오른쪽 두 칸 전환. 검수 상태와 따로 */
.ppw-host .ppw-jv-acts { align-items: center; gap: 6px; }
.ppw-host .ppw-jv-label { font-size: 11px; opacity: .8; }
.ppw-host .ppw-jv-seg { display: inline-flex; gap: 2px; border-radius: 8px; background: #f1f5f9; padding: 3px; }
.ppw-host .ppw-jv-opt { border: 0; border-radius: 6px; background: transparent; padding: 4px 10px; color: var(--ppw-muted); font-size: 12px; font-weight: 600; cursor: pointer; }
.ppw-host .ppw-jv-opt:hover { color: #1f2937; }
.ppw-host .ppw-jv-opt.is-on { background: #fff; color: #1f2937; box-shadow: 0 1px 2px rgba(15,23,42,.12); }
/* 문서 대조 결과의 [검수 필요 항목만 보기] 토글(2026-11-09): 켜면 파란 테두리와 연한 바탕 */
.ppw-host .ppw-todo-toggle.is-on { border-color: var(--ppw-primary); background: var(--ppw-primary-weak); color: var(--ppw-primary-deep); }
/* 문서 대조 블록 설정 칸 요약(2026-11-09): 구역 제목, 비교 항목과 판정 규칙 목록(이름 왼쪽, 방식이나 판정 오른쪽), 판정 태그는 연한 바탕에 검은 글자 */
.ppw-host .ppw-oo-title.ppw-cmp-sub { margin: 14px 0 0; }
.ppw-host .ppw-compare-info.ppw-cmp-list p { justify-content: space-between; align-items: flex-start; gap: 10px; line-height: 1.45; }
.ppw-host .ppw-compare-info.ppw-cmp-list b { color: #1f2937; font-weight: 600; min-width: 0; }
.ppw-host .ppw-compare-info.ppw-cmp-list em { flex: 0 0 auto; font-style: normal; color: #64748b; white-space: nowrap; }
.ppw-host .ppw-compare-info.ppw-cmp-list em.ppw-vtag { padding: 0 6px; color: #1f2937; font-size: 11px; font-weight: 600; line-height: 20px; }
.ppw-host .ppw-vtag.is-green { background: #ecfdf5; }
.ppw-host .ppw-vtag.is-red { background: #fef2f2; }
.ppw-host .ppw-vtag.is-amber { background: #fffbeb; }
.ppw-host .ppw-vtag.is-gray { background: #f3f4f6; }
/* 문서 대조 블록 설정 칸의 [대조 설정 편집] 단추(2026-11-09): 칸 너비 단추 */
.ppw-host .ppw-cmp-manage { width: 100%; justify-content: center; gap: 6px; margin: 14px 0 4px; }
/* 값 추출 검수 필요 토글의 빈 상태(2026-11-09): 문서 대조 결과의 빈 표(.dc-empty)와 같은 크기와 색 */
.ppw-host .ppw-todo-empty { margin: 0; padding: 40px; text-align: center; color: #6b7280; font-size: 13px; }
/* 결과 칸 머리 검수 상태 칩(2026-11-09): 감싼 단추가 줄 높이 24px 블록이라 칩이 기준선에 붙어 약 3px 처졌다. 단추 안에서 세로 가운데로 맞춘다 */
.ppw-host .ppw-res-actions [data-ppw-action="block-stage"] { display: inline-flex; align-items: center; line-height: 1; padding: 0; border: 0; background: transparent; }
/* 출력 블록 내보내기(2026-11-09): 저장 폴더 칸의 입력칸 여백(13px)이 줄 간격과 겹쳐 하위 폴더 체크가 처졌다. 이 칸 안에서는 줄 간격 하나로 맞춘다 */
.ppw-host .ppw-export-item > .ppw-field { margin-bottom: 0; }
.ppw-host .ppw-export-item > .ppw-check-group { margin: 0; }
.ppw-host .ppw-folder-formats { min-width: 0; margin: 0 0 6px; padding: 0; border: 0; }
.ppw-host .ppw-folder-formats legend { padding: 0; margin-bottom: 6px; color: #64748b; font-size: 12px; font-weight: 650; }
.ppw-host .ppw-folder-format-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(112px, 1fr)); gap: 2px 8px; }
.ppw-host .ppw-folder-format-options .ppw-check { min-height: 30px; }
.ppw-host .ppw-folder-permission-note { margin: 0 0 4px; color: var(--ppw-muted, #64748b); font-size: 11px; line-height: 1.5; }
.ppw-host .ppw-folder-format-note { margin: 0 0 6px; color: #64748b; font-size: 12px; }
.ppw-host .ppw-export-item > .ppw-export-format { margin: -2px 0 0; }

/* 업로드 팝업 대조 문서 자리(2026-11-09): 옵션 칸은 공용 팝업 안(ppw-host 밖)이라 접두사 없이 쓴다 */
.ppw-up-slots { margin-bottom: 16px; padding-bottom: 14px; border-bottom: 1px solid #e5e7eb; font-size: 12.5px; }
.ppw-up-slots-title { margin: 0 0 8px; font-size: 13px; font-weight: 700; color: #1f2937; }
.ppw-up-slot { display: flex; align-items: center; gap: 8px; min-height: 30px; }
.ppw-up-slot-role { flex: 0 0 auto; max-width: 48%; color: #64748b; }
.ppw-up-slot-file { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #1f2937; font-weight: 600; }

/* 예약 팝업 오른쪽: 예약 시각은 스크롤해도 보인다 */
.ppw-sched-head { position: sticky; top: -20px; z-index: 2; margin-top: -20px; padding-top: 20px; background: #fff; }

/* 공통 항목 대조는 페이지 번호와 별개로 문서마다 카드 하나를 표시한다. */
.ppw-common-result .ppw-common-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 6px 12px; overflow-wrap: anywhere; }
.ppw-common-result .cls-rail { height: auto; flex-wrap: wrap; gap: 8px 4px; overflow: visible; padding-bottom: 4px; }
.ppw-common-result .cls-rail-wrap::after { display: none; }
.ppw-common-result .cls-chips { flex-wrap: wrap; }
.ppw-common-result .cls-chip { cursor: default; }
.ppw-common-result .cls-page[aria-pressed="true"] { outline: 2px solid var(--c); outline-offset: -3px; }
.ppw-common-result .cls-page:focus-visible { outline: 2px solid #0f172a; outline-offset: 2px; }
.ppw-common-result .cls-page:hover { transform: none; }
.ppw-common-result .ppw-type-name { overflow-wrap: anywhere; }

/* 판단 블록 설정(2026-11-10): 판단에 쓸 항목 추천 줄, 고급 설정 접기 */
.ppw-host .ppw-jrec { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 6px; color: var(--ppw-muted); font-size: 12px; }
.ppw-host .ppw-jrec:empty { display: none; }
.ppw-host .ppw-judge-adv { margin-top: 12px; }
.ppw-host .ppw-jchk .ppw-compare-info p, .ppw-host .ppw-inspector .ppw-compare-info p:has(> button) { display: flex; align-items: center; gap: 6px; }
.ppw-host .ppw-inspector .ppw-compare-info p:has(> button) > strong { flex: 1 1 auto; min-width: 0; }

.ppw-host .ppw-palette-item.is-disabled > span:first-child { opacity: .45; }
.ppw-host .ppw-palette-item.is-disabled strong { color: var(--ppw-muted); }

.ppw-output-scroll { display: flex; flex-direction: column; overflow: hidden; }
.ppw-output-scroll > :not([data-ppw-output-export]) { flex-shrink: 0; }
.ppw-output-scroll > [data-ppw-output-export] { display: flex; flex: 1; min-height: 0; }
.ppw-output-export { display: flex; flex-direction: column; flex: 1; min-width: 0; min-height: 0; }
.ppw-output-export > :first-child, .ppw-output-export > :last-child { flex-shrink: 0; }
.ppw-output-export [data-tab] { flex-shrink: 0; }
.ppw-output-export > :first-child { overflow-x: auto; }
