/* =============================================================
   빨간펜공문선생 — 화면

   🚨 **디자인을 새로 정하지 않는다** (기획서 §6).
   `doc.kupst.org`(공문 결재)와 **같은 얼굴**이어야 한다 — 같은 사람이 두 화면을
   오가며 쓴다. 값은 `kupst-doc` 의 `app.css`(바탕)와 `finish.css`(마감층,
   2026-08-26 · 업무 포털 `portal-ui.css` 와 같은 규칙)에서 가져왔다.

     본문 #222222 · 주색 #3074f0 · 보조 #309ff0 · 짙은 남색 #2a4886
     경계선 #d4d4d6 · 바탕 #f1f4fa

   ⚠ **어두운 벌을 만들지 않는다.** doc 이 일부러 밝은 쪽만 둔다 — 결재 화면이
     종이에 가까운 흰 바탕을 전제로 잡혀 있기 때문이다. 도우미도 한글 문서
     미리보기를 종이처럼 보여 주므로 같은 판단을 따른다. `layout.php` 의
     `color-scheme: light` 가 못박는다.

   🚨 **웹폰트를 불러오지 않는다.** CSP 가 바깥 출처를 막고 있고, 공문 한 건
   다듬자고 폰트 수백 KB 를 받게 할 이유가 없다.

   ⚠ 쓰는 사람이 316명이고 연령대가 넓다. 터치 영역은 doc 값을 그대로 쓴다
     (단추 min-height 50px · 입력 48px — 화면설계서 §6).
   ============================================================= */

:root {
  /* doc 의 app.css 와 같은 값 */
  --card: #ffffff;
  --line: #d4d4d6;
  --text: #222222;
  --muted: #666666;
  --accent: #3074f0;
  --accent-deep: #2a4886;
  --accent-weak: #eef4ff;
  --danger: #dc2626;
  --warn: #d97706;
  --ok: #059669;
  --radius: 10px;

  /* doc 의 finish.css 와 같은 값 */
  --f-line-soft: #eef2f9;
  --f-accent-2: #309ff0;
  --f-shadow: 0 1px 2px rgba(23,48,105,.06), 0 1px 3px rgba(23,48,105,.05);
  --f-shadow-md: 0 2px 4px rgba(23,48,105,.05), 0 8px 20px -10px rgba(23,48,105,.20);
  --f-ring: 0 0 0 3px rgba(48,116,240,.26);
  --f-dim: #5c6a84;

  /* 🚨 지적의 갈래 — 화면에서 반드시 갈라 보인다 (기획서 §6).
     🔴 규칙은 틀린 것이고, 🟡 제안은 의견이다. 섞어 놓으면 규칙 위반도
     「제안이니까」 하고 넘긴다. Phase 5 에서 쓴다. */
  --lint: #dc2626;
  --lint-bg: #fef2f2;
  --ai: #d97706;
  --ai-bg: #fffaf0;
}

* { box-sizing: border-box; }

/*
 * ⚠ `hidden` 속성은 어떤 display 지정보다 우선해야 한다.
 *
 * 브라우저 기본 스타일의 `[hidden] { display: none }` 은 **작성자 스타일에
 * 무조건 진다.** `.modal { display: grid }` 같은 규칙 하나가 `hidden` 을 통째로
 * 무력화한다. kupst-doc 이 2026-07-31 에 실제로 그렇게 되어, 결재 화면을 열자마자
 * 모달이 늘 떠 있었다. curl 검증은 HTML 에 `hidden` 이 있으니 통과했다.
 */
[hidden] { display: none !important; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  color: var(--text);
  font-family: "Pretendard Variable", Pretendard, "Noto Sans KR", system-ui, -apple-system,
               "Malgun Gothic", "Apple SD Gothic Neo", sans-serif;
  font-size: 16px;
  line-height: 1.55;
  letter-spacing: -.011em;
  padding-bottom: env(safe-area-inset-bottom);

  /* doc 의 finish.css 와 같은 바탕 */
  background-color: #f1f4fa;
  background-image:
    radial-gradient(1100px 340px at 50% -170px, rgba(48,116,240,.10), transparent 70%);
  background-repeat: no-repeat;
}

/* 건수·쪽수처럼 줄줄이 서는 숫자는 자리폭을 고정한다 */
.counter, table, .num { font-variant-numeric: tabular-nums; }

.wrap {
  width: 100%;
  /* ⚠ doc 과 같은 680px. Phase 5 의 다듬기 화면(좌 원문 / 우 지적)은 이보다
       넓어야 하는데, 그때 그 화면에만 넓은 자리를 준다 — 여기를 넓히면
       모든 화면이 함께 늘어나 doc 과 얼굴이 달라진다. */
  max-width: 680px;
  margin: 0 auto;
  padding: 0 16px;
}

/* ── 머리띠 ───────────────────────────────────────────────────
   ⚠ 어둡게 칠하지 않는다 — 로고 그림 안에 조합 이름이 들어 있어 남색 바탕에서
     글자가 사라질 수 있다. 대신 위에 가는 조합색 선을 얹는다 (doc finish.css). */
.site-head {
  position: sticky; top: 0; z-index: 20;
  padding: 0;
  border-bottom: 1px solid var(--f-line-soft);
  background: var(--card);
  background: color-mix(in srgb, var(--card) 88%, transparent);
  -webkit-backdrop-filter: saturate(1.6) blur(10px);
  backdrop-filter: saturate(1.6) blur(10px);
  box-shadow: 0 1px 0 rgba(23,48,105,.04), 0 6px 20px -18px rgba(23,48,105,.5);
}
.site-head::before {
  content: ''; display: block; height: 3px;
  background: linear-gradient(90deg, var(--accent-deep), var(--accent) 45%, var(--f-accent-2));
}
.site-head > .wrap {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding-top: 12px;
  padding-bottom: 12px;
}

/* 조합 로고 — kupst.org 머리글과 같은 가로형이다. **로고에 조합 이름이 들어 있어
   글자를 따로 찍으면 같은 문구가 두 번 나온다** (doc CLAUDE.md §화면 디자인). */
.brand {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
  text-decoration: none;
}
.brand-logo {
  display: block;
  height: 30px;
  width: auto;
  /* 이미지가 아직 안 왔을 때 줄이 튀지 않도록 자리를 잡아 둔다 (682:120). */
  aspect-ratio: 682 / 120;
}
.brand-service {
  padding: 3px 9px;
  border-radius: 999px;
  background: var(--accent-weak);
  color: var(--accent-deep);
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: .04em;
  white-space: nowrap;
}
@media (max-width: 380px) {
  .brand-logo { height: 24px; }
  .brand-service { display: none; }
}

.site-user { font-size: 13px; color: var(--muted); text-align: right; line-height: 1.3; }
.site-user b { display: block; font-size: 14px; font-weight: 600; color: var(--text); }

/* ── 메뉴띠 ─────────────────────────────────────────────── */
.site-nav {
  border-top: 1px solid var(--f-line-soft);
  overflow-x: auto;
}
.site-nav .wrap {
  display: flex;
  gap: 4px;
  padding-top: 4px;
}
.site-nav a {
  /* 연령대를 고려한 터치 영역 (doc 과 같은 값) */
  padding: 12px 14px;
  color: var(--muted);
  text-decoration: none;
  font-size: 14.5px;
  font-weight: 600;
  white-space: nowrap;
  border-bottom: 2px solid transparent;
}
/* ⚠ 지금 자리를 나타내는 클래스는 **`on`** 이다.
     doc 의 `layout.php` 는 `is-current` 를 쓰는데 그 이름은 어느 CSS 에도 없어
     **밑줄이 안 그려진다**(2026-09-03 실측). 같은 실수를 물려받지 않는다. */
.site-nav a.on { color: var(--accent); border-bottom-color: var(--accent); }

/* ── 본문 ─────────────────────────────────────────────── */
main { padding-top: 20px; padding-bottom: 8px; }

.page-title { font-size: 20px; font-weight: 700; margin: 0 0 8px; letter-spacing: -.02em; }
.lead { color: var(--muted); margin: 0 0 20px; }
.small { font-size: 14px; }
.muted { color: var(--muted); }
.sep { color: var(--line); margin: 0 6px; }

/* ── 카드 ─────────────────────────────────────────────────────
   1px 테두리만으로는 납작하다. 두 겹 그림자로 살짝 띄운다 (doc finish.css). */
.card {
  background: var(--card);
  border: 1px solid var(--f-line-soft);
  border-radius: 16px;
  padding: 18px 16px;
  margin-bottom: 16px;
  box-shadow: var(--f-shadow);
}
.card > h2 {
  font-size: 15.5px;
  font-weight: 800;
  letter-spacing: -.02em;
  margin: 0 0 14px;
}
/* 구역 제목 — 포털·doc 과 같이 왼쪽에 색 막대를 세운다 */
.card > h2::before {
  content: ''; display: inline-block; vertical-align: -1px;
  width: 3px; height: 13px; border-radius: 2px; margin-right: 8px;
  background: linear-gradient(180deg, var(--accent), var(--f-accent-2));
}
/* 🚨 여백을 인라인 `style=` 으로 잡지 않는다 — CSP 가 `style-src 'self'` 라
     **조용히 막힌다.** 끝 여백은 여기서 없앤다. */
.card > p:first-child { margin-top: 0; }
.card > p:last-child  { margin-bottom: 0; }

/* ── 알림 띠 ──────────────────────────────────────────────────
   ⚠ 색만으로 말하지 않는다 — 왼쪽 굵은 선이 종류를 한 번 더 말한다 (doc finish.css). */
.note {
  padding: 12px 14px;
  border: 1px solid;
  border-left-width: 4px;
  border-radius: 12px;
  font-size: 14px;
  margin-bottom: 16px;
  box-shadow: var(--f-shadow);
}
.note-info  { background: var(--accent-weak); border-color: #b9d2fb; border-left-color: var(--accent); }
.note-warn  { background: #fffbeb; border-color: #fde68a; border-left-color: #d97706; }
.note-error { background: #fef2f2; border-color: #fecaca; border-left-color: #dc2626; color: #991b1b; }
.note p:first-child { margin-top: 0; }
.note p:last-child { margin-bottom: 0; }
.note h2 { font-size: 15px; margin: 0 0 6px; }

/* ── 목록 ─────────────────────────────────────────────── */
.doc-list { list-style: none; margin: 0; padding: 0; }
.doc-list li {
  background: var(--card);
  border: 1px solid var(--f-line-soft);
  border-radius: 16px;
  padding: 14px 16px;
  margin-bottom: 10px;
  box-shadow: var(--f-shadow);
}
.doc-list li:hover { background: color-mix(in srgb, var(--accent-weak) 45%, transparent); }
.doc-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.doc-title { font-weight: 600; }
.doc-sub { font-size: 13px; color: var(--muted); margin-top: 4px; }

/* ── 표시(뱃지) ────────────────────────────────────────── */
.badge {
  display: inline-block;
  padding: 3px 10px;
  border: 1px solid transparent;
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: -.01em;
  white-space: nowrap;
}
/* doc 의 tone-* 과 같은 값 */
.badge.tone-ok   { background: #ecfdf5; color: #047857; border-color: #a7f3d0; }
.badge.tone-run  { background: #eff6ff; color: #1d4ed8; border-color: #bfdbfe; }
.badge.tone-warn { background: #fffbeb; color: #92400e; border-color: #fde68a; }
.badge.tone-bad  { background: #fef2f2; color: #b91c1c; border-color: #fecaca; }
.badge.tone-idle { background: #f3f4f6; color: var(--muted); border-color: var(--line); }

/* ── 빈 자리 ───────────────────────────────────────────── */
.empty {
  background: var(--card);
  border: 1px dashed var(--line);
  border-radius: 16px;
  padding: 40px 20px;
  text-align: center;
  box-shadow: var(--f-shadow);
}
.empty-code { font-size: 32px; font-weight: 800; color: var(--line); margin: 0 0 8px; }
.empty-title { font-weight: 700; margin: 0 0 12px; }

/* ── 단추 ─────────────────────────────────────────────────────
   ⚠ 터치 크기(min-height 50px)를 건드리지 않는다 — 연령대를 고려한 값이다
     (doc 화면설계서 §6). 색과 그림자만 doc 의 마감층을 따른다. */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  min-height: 50px;
  min-width: 44px;
  padding: 12px 20px;
  border: 1px solid transparent;
  border-radius: 12px;
  font-size: 16px;
  font-weight: 700;
  font-family: inherit;
  text-decoration: none;
  cursor: pointer;
}
.btn-primary {
  color: #fff;
  background: linear-gradient(180deg, var(--accent), color-mix(in srgb, var(--accent) 82%, #000));
  box-shadow: 0 1px 2px rgba(23,48,105,.2), 0 8px 18px -10px var(--accent);
  transition: filter .14s ease, box-shadow .14s ease, transform .14s ease;
}
.btn-primary:hover {
  background: linear-gradient(180deg, var(--accent), var(--accent-deep));
  box-shadow: 0 2px 4px rgba(23,48,105,.22), 0 12px 24px -12px var(--accent);
}
.btn-primary:active { transform: translateY(1px); }
.btn-ghost {
  background: #fff; color: var(--text); border-color: var(--line);
  box-shadow: var(--f-shadow);
  transition: border-color .14s ease, box-shadow .14s ease;
}
.btn-ghost:hover {
  border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
  box-shadow: var(--f-shadow-md);
}
.btn-sm { min-height: 40px; padding: 8px 14px; font-size: 14px; }
.btn:disabled { opacity: .5; cursor: not-allowed; }

/* 손이 닿는 자리는 눈에도 보이게 (doc finish.css) */
a:focus-visible, button:focus-visible, summary:focus-visible,
input:focus-visible, select:focus-visible, textarea:focus-visible {
  outline: none; box-shadow: var(--f-ring); border-radius: 10px;
}

/* ── 로그인 안내 ──────────────────────────────────────── */
.split { display: grid; gap: 16px; margin-bottom: 16px; }
@media (min-width: 640px) { .split { grid-template-columns: 1.4fr 1fr; align-items: start; } }
.split-b {
  background: var(--card);
  border: 1px solid var(--f-line-soft);
  border-radius: 16px;
  padding: 16px;
  box-shadow: var(--f-shadow);
}
.split-b .row { display: flex; gap: 12px; padding: 6px 0; font-size: 14px; }
.split-b .k { color: var(--f-dim); min-width: 44px; font-weight: 700; font-size: 12.5px; letter-spacing: .03em; }
.split-b .v { flex: 1; }

/* ── 발 ───────────────────────────────────────────────── */
.site-foot {
  margin-top: 40px;
  padding: 20px 0 32px;
  color: var(--muted);
  font-size: 13px;
}
.site-foot p { margin: 0; }

/*
 * ⚠ 움직임을 싫다고 한 사람에게는 움직이지 않는다. 접근성 설정이다 (doc finish.css).
 */
@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; }
}

/* ── 편집기 (Phase 2) ───────────────────────────────────── */
.edit-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; flex-wrap: wrap; margin-bottom: 12px;
}
.save-state { font-size: 13px; color: var(--muted); }
/* 🚨 저장 실패는 눈에 띄어야 한다 — 모르면 글을 잃는다. */
.save-state.warn { color: var(--danger); font-weight: 600; }

.lbl { display: block; font-size: 13px; font-weight: 600; color: var(--f-dim); margin: 0 0 6px; }
/* ⚠ 입력 높이 48px — 연령대가 넓다 (doc 화면설계서 §6). */
.inp {
  width: 100%; min-height: 48px; padding: 10px 12px;
  border: 1px solid var(--line); border-radius: 10px;
  background: var(--card); color: var(--text);
  font-family: inherit; font-size: 16px;
}
.inp:focus { outline: none; border-color: var(--accent); box-shadow: var(--f-ring); }
.inp-title { font-size: 18px; font-weight: 600; margin-bottom: 12px; }

/* 종류 고르기 */
.pick {
  display: block; padding: 12px 14px; margin-bottom: 8px;
  border: 1px solid var(--line); border-radius: 12px; cursor: pointer;
}
.pick:has(input:checked) { border-color: var(--accent); background: var(--accent-weak); }
.pick input { margin-right: 8px; }
.pick-name { font-weight: 700; }
.pick-why { display: block; font-size: 13px; color: var(--muted); margin-top: 4px; margin-left: 22px; }

/* 도구 막대 */
.toolbar {
  display: flex; align-items: center; gap: 4px; flex-wrap: wrap;
  padding: 6px; margin-bottom: 10px;
  background: var(--card); border: 1px solid var(--f-line-soft);
  border-radius: 12px; box-shadow: var(--f-shadow);
}
/* ⚠ 터치 영역 44×44 이상 */
.tb {
  min-width: 44px; min-height: 44px; padding: 0 10px;
  border: 1px solid transparent; border-radius: 8px;
  background: transparent; color: var(--text);
  font-family: inherit; font-size: 15px; cursor: pointer;
}
.tb:hover { background: var(--accent-weak); }
.tb-w { min-width: 64px; font-size: 13px; }
.tb-sep { width: 1px; height: 24px; background: var(--line); margin: 0 4px; }

.actions { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-top: 20px; }
.actions .grow { flex: 1; }

/* 🚨 목록 줄 전체가 문서로 가는 길이다 (2026-09-03 — 「작업하던 문서를 볼 수가
   없어」). 제목만 걸면 손가락으로 누르기 어렵다. */
.doc-link { display: block; color: inherit; text-decoration: none; }
.doc-link:hover .doc-title { color: var(--accent); text-decoration: underline; }
.doc-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* 🚨 판정 근거 띠 (2026-09-03 사용자 지시).
   ⚠ **조용해야 한다.** 24시간 파기 알림과 다투면 둘 다 안 읽힌다 —
     이건 「늘 거기 있는 사실」이지 경고가 아니다. */
.basis {
  background: var(--accent-weak);
  border-bottom: 1px solid var(--f-line-soft);
  font-size: 12.5px;
  color: var(--f-dim);
}
.basis .wrap { padding-top: 7px; padding-bottom: 7px; }
.basis strong { color: var(--accent-deep); font-weight: 700; }
.basis a { color: var(--accent); }

/* ── ✨ AI도움 (2026-09-03) ──────────────────────────────────
   🚨 **바로 적용하지 않는다.** 제안을 보이고 사람이 고른다. */
.tb-ai-wrap { position: relative; display: inline-block; }
.tb-ai { color: var(--accent-deep); font-weight: 700; }
.tb-ai-menu {
  position: absolute; z-index: 30; top: calc(100% + 6px); left: 0;
  width: min(340px, 88vw);
  background: var(--card); border: 1px solid var(--line);
  border-radius: 12px; box-shadow: var(--f-shadow-md); padding: 6px;
}
.tb-ai-opt {
  display: block; width: 100%; text-align: left;
  padding: 10px 12px; border: 0; border-radius: 9px;
  background: transparent; font-family: inherit; font-size: 14px; cursor: pointer;
}
.tb-ai-opt:hover { background: var(--accent-weak); }
.tb-ai-opt strong { display: block; margin-bottom: 2px; }
.tb-ai-opt span { display: block; font-size: 12.5px; color: var(--muted); line-height: 1.45; }
/* ⚠ 기본값을 화면에 적는다 — 코드에만 있으면 아무도 모른다. */
.tb-ai-def {
  margin-left: 4px; padding: 1px 6px; border-radius: 999px;
  background: var(--accent-weak); color: var(--accent-deep);
  font-size: 11px; font-weight: 700;
}

.tidy-panel {
  background: var(--card); border: 1px solid var(--f-line-soft);
  border-radius: 16px; box-shadow: var(--f-shadow-md);
  margin-bottom: 16px; overflow: hidden;
}
.tidy-head {
  display: flex; align-items: center; gap: 10px;
  padding: 12px 14px; border-bottom: 1px solid var(--f-line-soft);
}
.tidy-head h2 { font-size: 14.5px; margin: 0; flex: 1; font-weight: 700; }
.tidy-list { max-height: 44vh; overflow-y: auto; }
.tidy-item {
  display: flex; gap: 10px; align-items: flex-start;
  padding: 11px 14px; border-bottom: 1px solid var(--f-line-soft); cursor: pointer;
}
.tidy-item:hover { background: color-mix(in srgb, var(--accent-weak) 45%, transparent); }
.tidy-cb { margin-top: 3px; }
.tidy-body { flex: 1; min-width: 0; }
.tidy-diff { display: block; font-size: 14px; }
.tidy-diff del { color: var(--danger); text-decoration: line-through; }
.tidy-diff ins { color: var(--ok); text-decoration: none; font-weight: 600; }
/* 🚨 근거를 못 대는 고침은 받아들일 이유가 없다 — 조항을 함께 보인다. */
.tidy-why { display: block; font-size: 12.5px; color: var(--muted); margin-top: 3px; }
.tidy-foot {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 14px; background: var(--accent-weak); flex-wrap: wrap;
}
.tidy-all { font-size: 13.5px; font-weight: 600; }
.tidy-grow { flex: 1; }

/* ── 변경 전/후 좌·우 (2026-09-03 사용자 지시) ───────────────
   🚨 **나란히 놓고 바뀐 곳을 하이라이트한다.** 목록만으로는 「문서가 어떻게
     되나」가 안 보인다. */
.tidy-sbs {
  display: grid; gap: 10px; padding: 12px 14px;
  border-bottom: 1px solid var(--f-line-soft);
}
@media (min-width: 900px) { .tidy-sbs { grid-template-columns: 1fr 1fr; } }
.tidy-side { min-width: 0; }
.tidy-side-h { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.tidy-tag { padding: 2px 9px; border-radius: 999px; font-size: 12px; font-weight: 700; }
.tidy-tag-b { background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }
.tidy-tag-a { background: #ecfdf5; color: #047857; border: 1px solid #a7f3d0; }
/* ⚠ 견주는 자리는 좁다 — 종이 폭을 풀고 글자를 조금 줄인다. 규칙은 그대로다. */
.paper-sm { width: auto; padding: 8mm 0; max-height: 38vh; overflow-y: auto; }
.paper-sm .lt-body { font-size: 10.5pt; padding: 0 6mm; }

/* 🚨 바뀐 곳 — 좌는 지운 쪽, 우는 넣은 쪽. 색만으로 말하지 않고 왼쪽에 굵은 선을 세운다. */
.tidy-hit-b { background: #fef2f2; box-shadow: -3px 0 0 #dc2626; }
.tidy-hit-a { background: #ecfdf5; box-shadow: -3px 0 0 #059669; }

.tidy-kind {
  display: inline-block; margin-right: 6px; padding: 1px 7px;
  border-radius: 4px; background: var(--accent-weak); color: var(--accent-deep);
  font-size: 11.5px; font-weight: 700; vertical-align: 1px;
}

/* ── 메일로 받기 ────────────────────────────────────────────
   🚨 CSP 가 `style-src 'self'` 다 — 인라인 `style=` 은 **조용히** 안 먹는다.
      여백은 반드시 여기서 잡는다 (`CLAUDE.md` §화면 디자인). */
.card-sm { margin-top: 18px; padding: 14px 16px; }
.card-sm > summary { cursor: pointer; font-weight: 600; }

.mail-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 10px 0; }
/* ⚠ 터치 크기를 줄이지 않는다 — 입력 48px (쓰는 사람이 309명이고 연령대가 넓다). */
.mail-row input { flex: 1 1 240px; min-height: 48px; padding: 10px 12px;
                  border: 1px solid var(--line); border-radius: 10px; font-size: 15px; }

/* 눈에는 안 보이고 읽어 주는 기계에는 남는다 — 입력 칸에 이름이 없으면 안 된다. */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
           overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* ── ✨ AI도움: 도는 동안 (모래시계) ─────────────────────────
   🚨 `doc.kupst.org` 에서 가져왔다 (2026-09-04 사용자 지시). 같은 사람이 두 화면을
      오가며 쓰므로 **기다리는 모습도 같아야** 한다.
   ⚠ 도는 그림은 CSS 로만 만든다 — CSP 가 바깥 출처를 막고, 이것 하나 보자고
      파일을 받게 할 이유가 없다. */

/* 도는 동안은 도구 막대도 눌리지 않아야 한다 — 눌러도 아무 일 없는 것이 가장 나쁘다 */
.toolbar.is-busy { opacity: .5; pointer-events: none; }

.tidy-wait {
  position: fixed; inset: 0; z-index: 70;
  display: flex; align-items: center; justify-content: center;
  background: rgba(255, 255, 255, .65);
  /* ⚠ 뒤에서 글을 못 치게 한다 — 손을 묶는 것이 이 화면의 목적이다 */
  cursor: progress;
}
.tidy-wait-box {
  display: flex; flex-direction: column; gap: 8px; align-items: center;
  padding: 22px 30px; border: 2px solid var(--accent); border-radius: 16px;
  background: #ffffff; box-shadow: 0 10px 30px rgba(0, 0, 0, .18);
  text-align: center;
}
.tidy-wait-box strong { font-size: 14.5px; }
.tidy-wait-sec {
  font-size: 20px; font-weight: 700; color: var(--accent);
  font-variant-numeric: tabular-nums;   /* 자릿수가 흔들리지 않게 */
}
.tidy-wait-tip { font-size: 12.5px; color: var(--muted); }

.tidy-wait-spin {
  width: 30px; height: 30px; border-radius: 50%;
  border: 3px solid var(--accent-weak); border-top-color: var(--accent);
  animation: tidy-spin .8s linear infinite;
}
@keyframes tidy-spin { to { transform: rotate(360deg); } }
/* ⚠ 어지럼을 겪는 사람이 있다. 끄겠다고 한 판에서는 돌리지 않는다. */
@media (prefers-reduced-motion: reduce) {
  .tidy-wait-spin { animation-duration: 3s; }
}

/* ══════════════════════════════════════════════════════════
   환경설정 (2026-09-04)
   ══════════════════════════════════════════════════════════ */

/* 미리보기 종이는 카드 사이에서 눈에 띄어야 한다 — 화면의 주인공이다. */
.paper-preview { margin: 0 0 20px; }

/* ── 입력칸 ───────────────────────────────────────────────
   ⚠ 터치 크기를 줄이지 않는다 — 입력 48px (doc 화면설계서 §6).
     쓰는 사람이 309명이고 연령대가 넓다. */
.field { display: block; margin: 0 0 14px; }

.field-label {
    display: block;
    margin: 0 0 5px;
    font-size: 13px;
    font-weight: 600;
    color: var(--f-dim);
}

.field input[type="text"],
.slot-table input[type="text"] {
    width: 100%;
    min-height: 48px;
    box-sizing: border-box;
    padding: 10px 12px;
    border: 1px solid var(--line);
    border-radius: 8px;
    background: #fff;
    color: var(--text);
    font: inherit;
    font-size: 15px;
}

.field input[type="text"]:focus,
.slot-table input[type="text"]:focus {
    outline: none;
    border-color: var(--accent);
    box-shadow: var(--f-ring);
}

/* ── 결재 칸 표 ───────────────────────────────────────────
   ⚠ 좁은 화면에서 옆으로 넘치지 않게 — 칸 번호는 좁고 나머지는 늘어난다. */
.slot-table { width: 100%; border-collapse: collapse; margin: 0 0 8px; }

.slot-table th,
.slot-table td { padding: 5px 6px 5px 0; text-align: left; vertical-align: middle; }

.slot-table thead th {
    font-size: 12px;
    font-weight: 600;
    color: var(--f-dim);
    border-bottom: 1px solid var(--f-line-soft);
    padding-bottom: 7px;
}

.slot-table .slot-n {
    width: 28px;
    padding-right: 10px;
    color: var(--muted);
    font-size: 13px;
    text-align: center;
}

/* ── 파일 올리는 줄 ───────────────────────────────────────
   ⚠ 인라인 `style=` 을 못 쓴다 (CSP) — 간격은 여기서 잡는다. */
.row-form {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px;
    margin: 10px 0 0;
}

.row-form input[type="file"] {
    flex: 1 1 220px;
    min-width: 0;
    font-size: 14px;
}

.logo-now { margin: 10px 0 4px; }

.logo-thumb {
    max-height: 60px;
    max-width: 100%;
    width: auto;
    background: #fff;
    border: 1px solid var(--f-line-soft);
    border-radius: 6px;
    padding: 6px 10px;
}

/* ── 목록의 지우기 단추 ───────────────────────────────────
   🚨 24시간 파기를 폐지하고 사람이 지우게 바꿨다 (2026-09-04).
   ⚠ **주된 단추처럼 보이지 않게 한다.** 되돌릴 수 없는 일이다. */
.doc-del { margin: 0; }

.doc-del button {
    border: 0;
    background: none;
    padding: 4px 6px;
    color: var(--muted);
    font: inherit;
    font-size: 13px;
    cursor: pointer;
    border-radius: 6px;
}

.doc-del button:hover { color: var(--danger); background: #fef2f2; }
