
.rl[data-v-09e6d328] { display: flex; flex-direction: column; gap: var(--pp-sp-4); min-width: 0;
}
.rl-grid[data-v-09e6d328] { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--pp-sp-4); align-items: start; min-width: 0;
}
.rl-main[data-v-09e6d328] { display: flex; flex-direction: column; gap: var(--pp-sp-4); min-width: 0;
}
.rl-input[data-v-09e6d328], .rl-result[data-v-09e6d328] { min-width: 0;
}
.rl-aside[data-v-09e6d328] { display: none; min-width: 0;
}

/* 액션 바: 입력 카드 바로 아래 붙는 막대(데스크톱·태블릿) */
.rl-actions[data-v-09e6d328] { margin-top: calc(-1 * var(--pp-sp-2)); min-width: 0;
}
.rl-actions-in[data-v-09e6d328] {
  display: flex;
  align-items: center;
  gap: var(--pp-sp-2);
  flex-wrap: wrap;
  padding: var(--pp-sp-3) var(--pp-sp-4);
  background: var(--pp-card);
  border: 1px solid var(--pp-line);
  border-radius: var(--pp-radius);
  box-shadow: var(--pp-shadow);
}

/* ≥ 1000 px: 오른쪽 옵션 패널(sticky; 길면 패널 안에서 스크롤) — 접기 막대는 숨김 */
@media (min-width: 1000px) {
.rl-options-bar[data-v-09e6d328] { display: none;
}
.rl-grid[data-v-09e6d328] { grid-template-columns: minmax(0, 1fr) var(--pp-options-w);
}
.rl-aside[data-v-09e6d328] { display: block; position: sticky; top: var(--pp-sp-3); max-height: calc(100vh - var(--pp-sp-5)); overflow: auto;
}
}

/* ≤ 720 px: 액션 바를 화면 아래에 고정(본문 끝이 고정 막대에 가리지 않게 그 높이만큼 여백) */
@media (max-width: 720px) {
.rl[data-v-09e6d328] { padding-bottom: var(--pp-action-bar-h);
}
.rl-actions[data-v-09e6d328] { margin-top: 0;
}
.rl-actions-in[data-v-09e6d328] {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 30;
    min-height: var(--pp-action-bar-h);
    padding: var(--pp-sp-2) max(var(--pp-gutter), env(safe-area-inset-right, 0px)) calc(var(--pp-sp-2) + env(safe-area-inset-bottom, 0px)) max(var(--pp-gutter), env(safe-area-inset-left, 0px));
    border-radius: 0;
    border-left: 0;
    border-right: 0;
    border-bottom: 0;
    box-shadow: 0 -2px 10px rgba(17, 24, 39, 0.06);
    flex-wrap: nowrap;
}
.rl-actions-in[data-v-09e6d328] .pp-btn.is-primary { flex: 1 1 auto;
}
}

.opts[data-v-0e099fa3] { display: flex; flex-direction: column; min-width: 0;
}
.opts-checks[data-v-0e099fa3] { display: flex; flex-direction: column;
}
.opts-inline[data-v-0e099fa3] { flex-direction: row; align-items: center; justify-content: space-between; gap: var(--pp-sp-2); min-height: 36px;
}
.opts-inline > .pp-label-text[data-v-0e099fa3] { font-weight: 500;
}
.opts-inline > .pp-select[data-v-0e099fa3] { width: auto; min-width: 0; max-width: 60%;
}
.is-off[data-v-0e099fa3] { opacity: 0.55;
}

.in-actions[data-v-2e32adb2] { display: flex; gap: var(--pp-sp-2); flex-wrap: wrap; align-items: center; min-width: 0;
}
.in-btn[data-v-2e32adb2] { flex: 0 1 auto;
}
.in-cam-hint[data-v-2e32adb2] { margin: 0;
}
/* 모바일: 큰 버튼이 한 줄씩 전체 폭 */
@media (max-width: 720px) {
.in-actions[data-v-2e32adb2] { flex-direction: column; align-items: stretch;
}
.in-btn[data-v-2e32adb2] { width: 100%;
}
}

.ab[data-v-e7e198ff] { display: flex; align-items: center; gap: var(--pp-sp-2); flex-wrap: wrap; width: 100%; min-width: 0;
}
.ab-read[data-v-e7e198ff] { min-width: 160px;
}
.ab-menu[data-v-e7e198ff] { position: relative;
}
.ab-pop[data-v-e7e198ff] {
  position: absolute;
  right: 0;
  bottom: calc(100% + 6px);
  min-width: 200px;
  padding: 4px;
  background: var(--pp-card);
  border: 1px solid var(--pp-line);
  border-radius: var(--pp-radius-sm);
  box-shadow: var(--pp-shadow-lg);
  z-index: 50;
}
.ab-pop-item[data-v-e7e198ff] { display: flex; align-items: center; gap: 8px; width: 100%; min-height: 40px; padding: 0 12px; border: 0; background: transparent; border-radius: 6px; text-align: left; font-size: var(--pp-fs-sm);
}
.ab-pop-item[data-v-e7e198ff]:hover { background: var(--pp-hover);
}
.ab-busy[data-v-e7e198ff] { display: inline-flex; align-items: center; gap: 6px;
}
.ab-curl[data-v-e7e198ff] { flex-basis: 100%; max-height: 120px;
}
.ab-curl-note[data-v-e7e198ff] { flex-basis: 100%; margin: 0; line-height: 1.5;
}
@media (max-width: 720px) {
.ab[data-v-e7e198ff] { flex-wrap: nowrap;
}
.ab-read[data-v-e7e198ff] { min-width: 0;
}
.ab-norm[data-v-e7e198ff] { flex: 0 0 auto;
}
.ab-busy[data-v-e7e198ff], .ab-curl[data-v-e7e198ff], .ab-curl-note[data-v-e7e198ff] { display: none;
}
}

.imgs[data-v-ffe45182] { min-width: 0;
}
.imgs-toggles[data-v-ffe45182] { gap: 4px;
}
.imgs-dl[data-v-ffe45182] { margin-left: auto;
}
.imgs-stage[data-v-ffe45182] { border: 1px solid var(--pp-line); border-radius: var(--pp-radius-sm); background: var(--pp-code-bg); padding: var(--pp-sp-2); overflow: auto; max-height: 80vh;
}
.imgs-stage img[data-v-ffe45182] { display: block; max-width: 100%; height: auto; margin: 0 auto;
}
.imgs-meta[data-v-ffe45182] { overflow-wrap: anywhere;
}

.rc-card[data-v-a652e578] { scroll-margin-top: calc(var(--pp-tabs-h) + var(--pp-sp-3));
}
/* 넓은 내용(탭 칩 줄·표·MRZ)은 각자(.pp-tabs/.table-wrap/.pp-mrz/.pp-code)의 가로 스크롤로 처리된다 — 카드 폭은 COMM Card 의 접기 격자(minmax(0,1fr))가 지킨다 */
.rc[data-v-a652e578] { min-width: 0;
}
.hero[data-v-a652e578] {
  display: flex;
  align-items: center;
  gap: var(--pp-sp-3);
  flex-wrap: wrap;
  padding: var(--pp-sp-3) var(--pp-sp-4);
  border-radius: var(--pp-radius-sm);
  background: var(--pp-info-soft);
  border: 1px solid var(--pp-line);
  min-width: 0;
}
.hero.is-success[data-v-a652e578] { background: var(--pp-success-soft); border-color: color-mix(in srgb, var(--pp-success) 25%, transparent);
}
.hero.is-partial[data-v-a652e578] { background: var(--pp-warn-soft); border-color: color-mix(in srgb, var(--pp-warn) 25%, transparent);
}
.hero.is-failed[data-v-a652e578] { background: var(--pp-danger-soft); border-color: color-mix(in srgb, var(--pp-danger) 25%, transparent);
}
.hero.is-stored[data-v-a652e578] { background: var(--pp-accent-soft); border-color: color-mix(in srgb, var(--pp-accent) 25%, transparent);
}
.hero-metrics[data-v-a652e578] { display: inline-flex; align-items: baseline; gap: var(--pp-sp-3); flex-wrap: wrap;
}
.hero-ms[data-v-a652e578] { font-size: var(--pp-fs-sm); font-weight: 600; white-space: nowrap;
}
.hero-rid[data-v-a652e578] { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 100%;
}
.hero-rid-val[data-v-a652e578] { overflow-wrap: anywhere;
}
.rc-overlay[data-v-a652e578] { margin: 0; min-width: 0;
}
.rc-overlay img[data-v-a652e578] { width: 100%; height: auto; display: block; border: 1px solid var(--pp-line); border-radius: var(--pp-radius-sm); background: var(--pp-code-bg);
}
.rc-overlay figcaption[data-v-a652e578] { margin-top: 6px;
}
@media (max-width: 720px) {
.hero[data-v-a652e578] { padding: var(--pp-sp-3);
}
.hero-rid[data-v-a652e578] { margin-left: 0;
}
}

.app[data-v-dc8fe67c] { min-height: 100vh; min-height: 100dvh; display: flex; flex-direction: column; --pp-toast-bottom: 24px;
}

/* ── 헤더 ── */
.hdr[data-v-dc8fe67c] { background: var(--pp-card); border-bottom: 1px solid var(--pp-line);
}
.hdr-in[data-v-dc8fe67c] { display: flex; align-items: center; gap: var(--pp-sp-3); min-height: var(--pp-header-h); flex-wrap: nowrap;
}
.hdr-brand[data-v-dc8fe67c] { display: flex; align-items: center; gap: var(--pp-sp-2); min-width: 0; flex: 0 1 auto;
}
.hdr-logo[data-v-dc8fe67c] { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 8px; background: var(--pp-accent); color: var(--pp-accent-fg); flex: 0 0 auto;
}
.hdr-title[data-v-dc8fe67c] { font-size: var(--pp-fs-xl); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.hdr-server[data-v-dc8fe67c] { display: inline-flex; align-items: center; gap: 6px; font-size: var(--pp-fs-sm); min-width: 0; flex: 0 1 auto; padding-left: var(--pp-sp-2); border-left: 1px solid var(--pp-line);
}
.hdr-server-text[data-v-dc8fe67c] { display: inline-flex; gap: 4px; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.hdr-dot[data-v-dc8fe67c] { width: 8px; height: 8px; border-radius: 50%; background: var(--pp-fg-subtle); flex: 0 0 auto; box-shadow: 0 0 0 3px color-mix(in srgb, var(--pp-fg-subtle) 20%, transparent);
}
.hdr-dot.is-on[data-v-dc8fe67c] { background: var(--pp-success); box-shadow: 0 0 0 3px color-mix(in srgb, var(--pp-success) 25%, transparent);
}
.hdr-dot.is-off[data-v-dc8fe67c] { background: var(--pp-danger); box-shadow: 0 0 0 3px color-mix(in srgb, var(--pp-danger) 25%, transparent);
}
.hdr-spacer[data-v-dc8fe67c] { flex: 1 1 auto;
}
.hdr-lang[data-v-dc8fe67c] { display: inline-flex; align-items: center; gap: 4px; color: var(--pp-fg-muted); flex: 0 0 auto;
}
.hdr-lang-sel[data-v-dc8fe67c] { width: auto; min-width: 0; max-width: 9em;
}
.hdr-user[data-v-dc8fe67c] { display: inline-flex; align-items: center; gap: 6px; min-width: 0; flex: 0 1 auto; max-width: 14em; font-size: var(--pp-fs-sm); color: var(--pp-success);
}
.hdr-who[data-v-dc8fe67c] { color: var(--pp-fg); font-weight: 500;
}
.hdr-logout[data-v-dc8fe67c] { flex: 0 0 auto; margin-right: calc(-1 * var(--pp-sp-2));
}

/* ── 상태 줄 ── */
.status[data-v-dc8fe67c] { background: var(--pp-info-soft); border-bottom: 1px solid var(--pp-line);
}
.status-in[data-v-dc8fe67c] { display: flex; align-items: center; gap: var(--pp-sp-3); min-height: var(--pp-status-h); font-size: var(--pp-fs-xs); color: var(--pp-fg-muted); flex-wrap: wrap; padding-top: 4px; padding-bottom: 4px;
}
.status-auth[data-v-dc8fe67c] { display: inline-flex; align-items: center; gap: 6px; min-width: 0; max-width: 100%;
}
.status-auth.is-ok[data-v-dc8fe67c] { color: var(--pp-success);
}
.status-usage[data-v-dc8fe67c] { margin-left: auto;
}

/* ── 본문·푸터 ── */
.main[data-v-dc8fe67c] { flex: 1 1 auto; padding-top: var(--pp-sp-4); padding-bottom: var(--pp-sp-6);
}
.foot[data-v-dc8fe67c] { display: flex; justify-content: space-between; gap: var(--pp-sp-3); flex-wrap: wrap; padding-bottom: var(--pp-sp-5);
}
@media (max-width: 720px) {
  /* 판독 액션 바가 화면 아래에 고정된다(ReadLayout) — 토스트·푸터를 그 위로 */
.app[data-v-dc8fe67c] { --pp-toast-bottom: calc(var(--pp-action-bar-h) + 16px);
}
.main[data-v-dc8fe67c] { padding-top: var(--pp-sp-3);
}
.foot[data-v-dc8fe67c] { padding-bottom: calc(var(--pp-action-bar-h) + env(safe-area-inset-bottom, 0px) + var(--pp-sp-3));
}
.hdr-in[data-v-dc8fe67c] { gap: var(--pp-sp-2);
}
.hdr-title[data-v-dc8fe67c] { font-size: var(--pp-fs-lg);
}
.hdr-server[data-v-dc8fe67c] { padding-left: 0; border-left: 0;
}
.hdr-server-text[data-v-dc8fe67c] { display: none;
}            /* 모바일: 연결 점만 남기고 버전 문자열은 숨긴다 */
.hdr-lang-sel[data-v-dc8fe67c] { max-width: 6em;
}
.hdr-lang[data-v-dc8fe67c] svg { display: none;
}       /* 모바일: 제목 폭 확보 — 언어 선택 상자만 */
.hdr-user[data-v-dc8fe67c] { display: none;
}                  /* 모바일: 사용자는 상태 줄에 같은 정보가 있다 */
.hdr-logout[data-v-dc8fe67c] .pp-btn-label { display: none;
}
.hdr-logout[data-v-dc8fe67c] { width: var(--pp-control-h-sm); padding: 0; margin-right: 0;
}
  /* 모바일 상태 줄: 인증 표시 한 줄 + 사용량 칩 한 줄(넘치면 가로로 밀어 보기) */
.status-in[data-v-dc8fe67c] { flex-wrap: wrap; row-gap: 4px;
}
.status-auth[data-v-dc8fe67c] { flex: 1 1 100%; min-width: 0;
}
.status-usage[data-v-dc8fe67c] { margin-left: 0; flex: 1 1 100%; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch;
}
.status-usage[data-v-dc8fe67c]::-webkit-scrollbar { display: none;
}
.status-usage[data-v-dc8fe67c] .pp-chip { flex: 0 0 auto; white-space: nowrap;
}
}
@media (max-width: 400px) {
.hdr-title[data-v-dc8fe67c] { max-width: 8em;
}
.hdr-lang-sel[data-v-dc8fe67c] { max-width: 5.5em;
}
}
