/* ============================================================
   결과지 템플릿 8종 — 각자 완전히 다른 레이아웃.
   접두사: ex2(EXECUTIVE) ed(EDITORIAL) dl(DATA LAB) sw(SWISS)
          bk(BOOKLET) in(INSIGHT) vi(VISUAL) ac(ACADEMIC)
   과목 잉크(--rp-primary 등)는 data-theme 토큰을 그대로 상속한다.
   ============================================================ */
.rtdot { display: inline-block; border-radius: 2px; vertical-align: -1px; margin-right: 6px; }
.rt-miss { color: var(--rp-critical); font-weight: 800; }
.rt-sim { color: var(--rp-warn); font-weight: 800; }
.ex-report[data-rt2] .rp-doc, .ex-report[data-rt2] .rp-head, .ex-report[data-rt2] .rp-nav { all: revert; }

/* ═══════════ 1. EXECUTIVE — 좌측 세로 밴드 + 본문 ═══════════ */
.ex2 { display: grid; grid-template-columns: 128px 1fr; min-height: 600px;
  font-family: var(--sans); color: var(--ink-700); font-variant-numeric: tabular-nums; }
.ex2-band { background: var(--rp-primary); color: #fff; padding: 28px 18px;
  display: flex; flex-direction: column; border-radius: 6px 0 0 6px; }
.ex2-band .bn { display: flex; flex-direction: column; gap: 8px; }
.ex2-band .bn img { width: 44px; background: #fff; border-radius: 4px; padding: 3px; }
.ex2-band .bn b { font-size: 13px; font-weight: 800; line-height: 1.4; word-break: keep-all; }
.ex2-band .bt { margin: 48px 0 auto; font-size: 26px; font-weight: 800; letter-spacing: .14em;
  writing-mode: vertical-rl; opacity: .85; }
.ex2-band .bf { font-size: 11px; line-height: 1.6; opacity: .75; }
.ex2-main { padding: 36px 44px 28px; min-width: 0; }
.ex2-cover .k { font-size: 12.5px; font-weight: 700; color: var(--ink-500); margin: 0 0 10px; }
.ex2-cover h2 { font-size: 27px; font-weight: 800; line-height: 1.5; color: var(--ink-900);
  margin: 0 0 24px; word-break: keep-all; }
.ex2-cover h2 .mk { color: var(--rp-secondary); }
.ex2-kpis { display: grid; grid-template-columns: repeat(4, 1fr); border: 2px solid var(--ink-900); }
.ex2-kpis > div { padding: 12px 16px; border-left: 1px solid var(--line-300); }
.ex2-kpis > div:first-child { border-left: 0; }
.ex2-kpis .l { display: block; font-size: 11px; font-weight: 700; color: var(--ink-500); }
.ex2-kpis .v { display: block; font-size: 26px; font-weight: 800; color: var(--ink-900); margin-top: 2px; }
.ex2-kpis .s { display: block; font-size: 11px; color: var(--ink-500); }
.ex2-findings { margin: 26px 0 8px; }
.ex2-findings .cap { font-size: 11.5px; font-weight: 800; letter-spacing: .18em; color: var(--rp-secondary); }
.ex2-finding { display: grid; grid-template-columns: 44px 1fr; gap: 14px; align-items: baseline;
  padding: 12px 0; border-bottom: 1px solid var(--line-300); }
.ex2-finding b { font-size: 20px; font-weight: 800; color: var(--rp-primary); }
.ex2-finding p { margin: 0; font-size: 16.5px; font-weight: 600; line-height: 1.6; color: var(--ink-900); word-break: keep-all; }
.ex2-nav { display: flex; flex-wrap: wrap; gap: 0; margin: 26px 0 0; border: 1px solid var(--ink-900); }
.ex2-nav button { flex: 1; border: 0; border-left: 1px solid var(--line-300); background: none;
  font: 700 12.5px var(--sans); color: var(--ink-500); padding: 10px 6px; cursor: pointer; white-space: nowrap; }
.ex2-nav button:first-child { border-left: 0; }
.ex2-nav button.on { background: var(--ink-900); color: #fff; }
.ex2-sec { padding-top: 26px; }
.ex2-sec h3 { font-size: 18px; font-weight: 800; color: var(--ink-900); margin: 0 0 14px;
  padding-bottom: 8px; border-bottom: 2px solid var(--ink-900); }
.ex2-meta { display: grid; grid-template-columns: 1fr 1fr; gap: 0 32px; }
.ex2-meta > div { display: grid; grid-template-columns: 92px 1fr; padding: 7px 0; border-bottom: 1px solid var(--line-300); }
.ex2-meta dt { font-size: 12px; font-weight: 700; color: var(--ink-500); }
.ex2-meta dd { margin: 0; font-size: 14px; font-weight: 600; color: var(--ink-900); }
.ex2-review { margin-top: 18px; border: 1px solid var(--line-300); padding: 14px 18px; }
.ex2-review span { font-size: 11.5px; font-weight: 800; color: var(--rp-primary); letter-spacing: .06em; }
.ex2-review p { margin: 6px 0 0; font-size: 14.5px; line-height: 1.7; word-break: keep-all; }
.ex2-stack { display: flex; }
.ex2-stack i { display: block; }
.ex2-leg { display: flex; gap: 16px; flex-wrap: wrap; margin-top: 10px; font-size: 13px; }
.ex2-so { margin: 14px 0 0; font-size: 14.5px; font-weight: 700; color: var(--rp-secondary); word-break: keep-all; }
.ex2-table { width: 100%; border-collapse: collapse; }
.ex2-table th { font-size: 12px; font-weight: 800; color: #fff; background: var(--ink-900);
  padding: 7px 12px; text-align: left; }
.ex2-table td { font-size: 13.5px; padding: 8px 12px; border-bottom: 1px solid var(--line-table);
  border-left: 1px solid var(--line-300); }
.ex2-table td:first-child { border-left: 0; }
.ex2-table .n { text-align: right; }
.ex2-table .s { font-size: 12.5px; color: var(--ink-500); }
.ex2-table td.no { font-weight: 800; color: var(--ink-900); }
.ex2-table tr.hard td.no { color: var(--rp-secondary); }
.ex2-briefs { margin-top: 20px; column-count: 2; column-gap: 28px; }
.ex2-brief { break-inside: avoid; display: grid; grid-template-columns: 52px 1fr; gap: 10px;
  padding: 10px 0; border-top: 1px solid var(--line-300); }
.ex2-brief > b { font-size: 15px; font-weight: 800; color: var(--ink-900); }
.ex2-brief .s1 { margin: 0 0 4px; font-size: 13.5px; font-weight: 700; color: var(--ink-900); word-break: keep-all; }
.ex2-brief .s2 { margin: 0 0 3px; font-size: 12.5px; line-height: 1.55; word-break: keep-all; }
.ex2-brief .s2 span { font-weight: 800; color: var(--ink-500); margin-right: 6px; font-size: 11px; }
.ex2-risk { border: 1px solid var(--ink-900); padding: 14px 18px; margin-bottom: 12px; }
.ex2-risk .rh { display: flex; gap: 12px; align-items: baseline; }
.ex2-risk .rh b { font-size: 18px; font-weight: 800; color: var(--rp-secondary); }
.ex2-risk .rh em { margin-left: auto; font-style: normal; font-weight: 800; }
.ex2-risk p { margin: 8px 0 0; font-size: 14px; line-height: 1.6; word-break: keep-all; }
.ex2-risk .sub span { font-weight: 800; color: var(--ink-500); font-size: 12px; margin-right: 8px; }
.ex2-rec { display: grid; grid-template-columns: 74px 1fr; gap: 16px; padding: 14px 0; border-bottom: 1px solid var(--line-300); }
.ex2-rec > b { font-size: 13px; font-weight: 800; color: #fff; background: var(--rp-primary);
  align-self: start; text-align: center; padding: 6px 0; }
.ex2-rec h4 { margin: 0 0 6px; font-size: 16px; font-weight: 800; color: var(--ink-900); }
.ex2-rec p { margin: 0; font-size: 14.5px; line-height: 1.65; word-break: keep-all; }
.ex2-rec small { display: block; margin-top: 5px; font-size: 12px; color: var(--ink-500); }
.ex2-foot { margin-top: 30px; padding-top: 12px; border-top: 2px solid var(--ink-900); font-size: 11.5px; color: var(--ink-500); }

/* ═══════════ 2. EDITORIAL — 저널 2단 조판 ═══════════ */
.ed { padding: 44px 52px; font-family: var(--serif); color: var(--ink-700); }
.ed-mast { display: flex; justify-content: space-between; border-top: 4px double var(--ink-900);
  border-bottom: 1px solid var(--ink-900); padding: 8px 2px; font-family: var(--sans);
  font-size: 12px; font-weight: 700; color: var(--ink-500); letter-spacing: .08em; }
.ed-title { font-size: 44px; font-weight: 900; line-height: 1.25; color: var(--ink-900);
  margin: 30px 0 10px; letter-spacing: -0.01em; text-align: center; }
.ed-sub { text-align: center; font-family: var(--sans); font-size: 13px; color: var(--ink-500); margin: 0 0 18px; }
.ed-deck { text-align: center; font-size: 18px; line-height: 1.7; color: var(--ink-900);
  max-width: 560px; margin: 0 auto 22px; word-break: keep-all; }
.ed-deck .mk { color: var(--rp-secondary); }
.ed-rule { border-top: 1px solid var(--ink-900); margin: 14px 0 26px; }
.ed-cols { column-count: 2; column-gap: 40px; column-rule: 1px solid var(--line-300); }
.ed-lead, .ed-p { font-size: 15px; line-height: 1.85; margin: 0 0 14px; text-align: justify; word-break: keep-all; }
.ed-lead .dc { float: left; font-size: 54px; line-height: .9; font-weight: 900; color: var(--rp-primary);
  padding: 4px 8px 0 0; }
.ed-p .num { font-family: var(--sans); font-weight: 800; color: var(--ink-900); }
.ed-p .why { font-size: 12.5px; color: var(--ink-500); }
.ed-h { font-family: var(--sans); font-size: 14px; font-weight: 800; color: var(--ink-900);
  letter-spacing: .04em; margin: 20px 0 10px; border-top: 2px solid var(--ink-900); padding-top: 8px; }
.ed-h.center { column-span: all; text-align: center; border-top: 0; }
.ed-pull { break-inside: avoid; border-top: 3px solid var(--rp-secondary); border-bottom: 1px solid var(--line-300);
  margin: 18px 0; padding: 16px 6px; font-size: 19px; line-height: 1.65; color: var(--ink-900); word-break: keep-all; }
.ed-pull.sm { font-size: 15.5px; }
.ed-pull cite { display: block; margin-top: 8px; font-style: normal; font-family: var(--sans);
  font-size: 12px; color: var(--ink-500); text-align: right; }
.ed-figure { break-inside: avoid; margin: 14px 0 18px; font-family: var(--sans); }
.ed-figure .cap { font-size: 11.5px; font-weight: 800; color: var(--ink-500); letter-spacing: .04em; margin-bottom: 8px; }
.ed-figure .bar { display: flex; }
.ed-figure .leg { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 8px; font-size: 12px; }
.ed-figure table { width: 100%; border-collapse: collapse; }
.ed-figure td { font-size: 13px; padding: 6px 8px; border-bottom: 1px solid var(--line-table); }
.ed-figure td.n { text-align: right; font-variant-numeric: tabular-nums; }
.ed-qtable { font-family: var(--sans); margin-top: 14px; }
.ed-qtable table { width: 100%; border-collapse: collapse; }
.ed-qtable th { font-size: 11.5px; font-weight: 800; border-top: 2px solid var(--ink-900);
  border-bottom: 1px solid var(--ink-900); padding: 6px 10px; text-align: left; }
.ed-qtable td { font-size: 13px; padding: 6px 10px; border-bottom: 1px solid var(--line-table);
  border-left: 1px solid var(--line-300); }
.ed-qtable td:first-child { border-left: 0; }
.ed-qtable .no { font-weight: 800; color: var(--ink-900); }
.ed-qtable .n { text-align: right; } .ed-qtable .s { font-size: 12px; color: var(--ink-500); }
.ed-sheets { column-count: 2; column-gap: 40px; column-rule: 1px solid var(--line-300); margin-top: 22px; }
.ed-sheet { break-inside: avoid; margin-bottom: 18px; padding-top: 10px; border-top: 1px solid var(--line-300); }
.ed-sheet .qn { font-family: var(--sans); font-size: 16px; font-weight: 800; color: var(--ink-900); margin-right: 10px; }
.ed-sheet .qm { font-family: var(--sans); font-size: 11.5px; color: var(--ink-500); }
.ed-sheet .qs { margin: 8px 0 6px; font-size: 14px; font-weight: 700; line-height: 1.6; color: var(--ink-900); word-break: keep-all; }
.ed-sheet .qd { margin: 0 0 5px; font-size: 13.5px; line-height: 1.7; word-break: keep-all; }
.ed-sheet .qd b { font-family: var(--sans); font-size: 11.5px; color: var(--rp-primary); }
.ed-foot { margin-top: 26px; border-top: 4px double var(--ink-900); padding-top: 10px;
  font-family: var(--sans); font-size: 11.5px; color: var(--ink-500); text-align: center; }

/* ═══════════ 3. DATA LAB — 계기판 · 좌측 레일 ═══════════ */
.dl { font-family: var(--sans); color: var(--ink-700); font-variant-numeric: tabular-nums; }
.dl-top { display: flex; justify-content: space-between; align-items: flex-start; gap: 20px;
  background: var(--ink-900); color: #fff; padding: 18px 28px; border-radius: 6px 6px 0 0; }
.dl-top .id b { display: block; font-size: 16px; font-weight: 800; }
.dl-top .id span { font-size: 10.5px; letter-spacing: .2em; color: var(--d-jung, #8fb3ff); font-weight: 700; }
.dl-top .meta { font-family: "Consolas", monospace; font-size: 11px; line-height: 1.7; text-align: right; opacity: .85; }
.dl-kpis { display: grid; grid-template-columns: repeat(5, 1fr); background: var(--ink-900);
  border-top: 1px solid rgba(255,255,255,.2); }
.dl-kpis > div { padding: 10px 16px 14px; border-left: 1px solid rgba(255,255,255,.15); }
.dl-kpis > div:first-child { border-left: 0; }
.dl-kpis span { display: block; font-family: "Consolas", monospace; font-size: 9.5px; letter-spacing: .12em; color: #9aa7bd; }
.dl-kpis b { font-size: 21px; font-weight: 800; color: #fff; }
.dl-wrap { display: grid; grid-template-columns: 108px 1fr; }
.dl-nav { display: flex; flex-direction: column; border-right: 2px solid var(--ink-900); padding: 18px 0; }
.dl-nav button { border: 0; background: none; text-align: left; padding: 9px 12px; cursor: pointer;
  font: 700 11px "Consolas", monospace; letter-spacing: .06em; color: var(--ink-500);
  display: flex; align-items: center; gap: 8px; }
.dl-nav button i { width: 8px; height: 8px; background: var(--line-300); }
.dl-nav button.on { color: var(--ink-900); }
.dl-nav button.on i { background: var(--rp-secondary); }
.dl-body { padding: 20px 26px 26px; min-width: 0; }
.dl-sec h3 { display: flex; align-items: baseline; gap: 10px; margin: 0 0 14px;
  font-family: "Consolas", monospace; font-size: 14px; letter-spacing: .12em; color: var(--ink-900); }
.dl-sec h3 span { color: var(--rp-secondary); }
.dl-grid2 { display: grid; grid-template-columns: 1fr 1.4fr; gap: 16px; }
.dl-panel { border: 1px solid var(--ink-900); padding: 12px 14px; }
.dl-panel .pt { font-family: "Consolas", monospace; font-size: 10px; letter-spacing: .1em; color: var(--ink-500); }
.dl-hist { display: flex; align-items: flex-end; gap: 10px; height: 120px; margin-top: 10px;
  border-bottom: 2px solid var(--ink-900); padding: 0 6px; }
.dl-hist .col { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; align-items: center; height: 100%; }
.dl-hist .col i { width: 70%; display: block; }
.dl-hist .col span { font-size: 11px; margin-top: 4px; }
.dl-hist .col b { font-size: 12px; }
.dl-flow { display: flex; align-items: flex-end; gap: 3px; height: 110px; margin-top: 10px; border-bottom: 2px solid var(--ink-900); }
.dl-flow i { flex: 1; background: rgba(28,53,95,.35); display: block; }
.dl-flow i.h1 { background: var(--d-jungsang); } .dl-flow i.h2 { background: var(--d-sang); }
.dl-flowlab { display: flex; gap: 3px; margin-top: 3px; }
.dl-flowlab span { flex: 1; min-width: 0; font-size: 8px; color: var(--ink-500); text-align: center; overflow: hidden; }
.dl-note { margin-top: 16px; border-left: 0; border: 1px dashed var(--ink-500); padding: 12px 16px; }
.dl-note b { font-family: "Consolas", monospace; font-size: 10.5px; letter-spacing: .08em; color: var(--ink-500); }
.dl-note p { margin: 6px 0 0; font-size: 13.5px; line-height: 1.7; word-break: keep-all; }
.dl-heat { width: 100%; border-collapse: collapse; }
.dl-heat th { font-size: 11.5px; font-weight: 800; padding: 6px 8px; border: 1px solid var(--line-table); background: var(--fill-100); }
.dl-heat td { position: relative; border: 1px solid var(--line-table); height: 40px; text-align: center; min-width: 52px; }
.dl-heat td i { position: absolute; inset: 0; display: block; }
.dl-heat td b { position: relative; font-size: 14px; color: var(--ink-900); }
.dl-heat td.tot { font-weight: 800; background: var(--fill-100); }
.dl-heat tbody th { text-align: left; background: none; }
.dl-cap { margin: 10px 0 0; font-size: 12.5px; color: var(--ink-500); line-height: 1.6; word-break: keep-all; }
.dl-comp { width: 100%; border-collapse: collapse; }
.dl-comp th { font-size: 11px; font-family: "Consolas", monospace; letter-spacing: .04em;
  border-top: 2px solid var(--ink-900); border-bottom: 1px solid var(--ink-900); padding: 7px 10px; text-align: right; }
.dl-comp th:first-child { text-align: left; }
.dl-comp td { font-size: 13px; padding: 7px 10px; border-bottom: 1px solid var(--line-table); }
.dl-comp .n { text-align: right; }
.dl-comp .hot { color: var(--rp-secondary); font-weight: 800; }
.dl-rows { width: 100%; border-collapse: collapse; }
.dl-rows th { font-family: "Consolas", monospace; font-size: 10px; letter-spacing: .06em;
  background: var(--ink-900); color: #fff; padding: 6px 10px; text-align: left; }
.dl-rows td { font-size: 12.5px; padding: 5px 10px; border-bottom: 1px solid var(--line-table);
  border-left: 1px solid var(--line-300); }
.dl-rows td:first-child { border-left: 0; }
.dl-rows .no { font-weight: 800; } .dl-rows .n { text-align: right; }
.dl-rows .s { font-size: 11.5px; color: var(--ink-500); }
.dl-rows tr.hard .no { color: var(--rp-secondary); }
.dl-details { margin-top: 16px; columns: 2; column-gap: 24px; }
.dl-det { break-inside: avoid; display: grid; grid-template-columns: 56px 1fr; gap: 8px;
  border-top: 1px dashed var(--line-table); padding: 8px 0; }
.dl-det > b { font-size: 13px; font-weight: 800; }
.dl-det p { margin: 0 0 3px; font-size: 12px; line-height: 1.55; word-break: keep-all; }
.dl-det p span { font-family: "Consolas", monospace; font-size: 9.5px; color: var(--ink-500); margin-right: 5px; }
.dl-outs { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.dl-out { border: 2px solid var(--rp-secondary); padding: 12px 16px; }
.dl-out .oh { display: flex; gap: 10px; align-items: baseline; font-size: 15px; }
.dl-out .oh b { font-weight: 800; color: var(--rp-secondary); }
.dl-out .oh span { font-family: "Consolas", monospace; font-size: 11px; color: var(--ink-500); }
.dl-out .oh em { margin-left: auto; font-style: normal; font-weight: 800; }
.dl-out p { margin: 8px 0 0; font-size: 13px; line-height: 1.6; word-break: keep-all; }
.dl-out .why { color: var(--ink-500); font-size: 12.5px; }
.dl-act { display: grid; grid-template-columns: 44px 1fr; gap: 12px; padding: 12px 0; border-bottom: 1px solid var(--line-table); }
.dl-act > span { font-family: "Consolas", monospace; font-weight: 700; color: #fff; background: var(--ink-900);
  align-self: start; text-align: center; padding: 4px 0; font-size: 12px; }
.dl-act b { font-size: 15px; color: var(--ink-900); }
.dl-act p { margin: 4px 0 0; font-size: 13.5px; line-height: 1.6; word-break: keep-all; }
.dl-act small { display: block; margin-top: 4px; font-size: 11.5px; color: var(--ink-500); }
.dl-foot { border-top: 2px solid var(--ink-900); margin-top: 8px; padding: 10px 26px 16px;
  font-family: "Consolas", monospace; font-size: 10px; letter-spacing: .04em; color: var(--ink-500); }

/* ═══════════ 4. SWISS — 노출 그리드 · 거대 타이포 ═══════════ */
.sw { font-family: var(--sans); color: var(--ink-900); padding: 0 0 24px; font-variant-numeric: tabular-nums; }
.sw-cover { padding: 40px 48px 34px; border-bottom: 3px solid var(--ink-900); position: relative; }
.sw-coverline { display: flex; justify-content: space-between; font-size: 12px; font-weight: 700;
  border-bottom: 1px solid var(--ink-900); padding-bottom: 8px; }
.sw-cover h1 { font-size: 96px; font-weight: 900; line-height: .98; letter-spacing: -0.04em; margin: 26px 0 18px; }
.sw-cover h1 .dot { color: var(--rp-secondary); }
.sw-cover .cv { font-size: 15px; line-height: 1.65; font-weight: 600; margin: 0; }
.sw-covernum { position: absolute; right: 48px; bottom: 34px; text-align: right; }
.sw-covernum b { display: block; font-size: 64px; font-weight: 900; letter-spacing: -0.03em; line-height: 1; }
.sw-covernum span { font-size: 12px; font-weight: 700; color: var(--ink-500); }
.sw-nav { display: grid; grid-template-columns: repeat(5, 1fr); border-bottom: 1px solid var(--ink-900); }
.sw-nav button { border: 0; border-left: 1px solid var(--ink-900); background: none; cursor: pointer;
  text-align: left; padding: 12px 16px; font: 900 22px var(--sans); color: var(--line-300); }
.sw-nav button:first-child { border-left: 0; }
.sw-nav button span { display: block; font-size: 11px; font-weight: 700; color: var(--ink-500); margin-top: 2px; }
.sw-nav button.on { color: var(--rp-secondary); }
.sw-sec { padding: 0 48px; }
.sw-sechead { display: grid; grid-template-columns: 120px 1fr; border-bottom: 1px solid var(--ink-900);
  padding: 22px 0 12px; margin-bottom: 20px; }
.sw-sechead .idx { font-size: 40px; font-weight: 900; letter-spacing: -0.03em; color: var(--ink-500); }
.sw-sechead h3 { margin: 0; font-size: 22px; font-weight: 900; align-self: end; }
.sw-meta { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0; border-top: 1px solid var(--ink-900); }
.sw-meta > div { border-bottom: 1px solid var(--ink-900); border-left: 1px solid var(--line-300); padding: 10px 14px; }
.sw-meta > div:nth-child(3n+1) { border-left: 0; padding-left: 0; }
.sw-meta span { display: block; font-size: 10.5px; font-weight: 700; color: var(--ink-500); }
.sw-meta b { font-size: 14.5px; font-weight: 800; }
.sw-p { font-size: 14.5px; line-height: 1.75; color: var(--ink-700); margin: 16px 0 0; word-break: keep-all; }
.sw-big3 { display: grid; grid-template-columns: repeat(3, 1fr); }
.sw-big3 > div { border-left: 1px solid var(--ink-900); padding: 4px 20px 12px; }
.sw-big3 > div:first-child { border-left: 0; padding-left: 0; }
.sw-big3 b { font-size: 66px; font-weight: 900; letter-spacing: -0.04em; line-height: 1; }
.sw-big3 b i { font-style: normal; font-size: 26px; font-weight: 800; color: var(--ink-500); }
.sw-big3 span { display: block; margin-top: 6px; font-size: 12.5px; font-weight: 700; color: var(--ink-500); }
.sw-stack { display: flex; margin-top: 22px; }
.sw-leg { display: flex; gap: 14px; margin-top: 8px; font-size: 12px; font-weight: 700; color: var(--ink-700); }
.sw-units { margin-top: 22px; border-top: 1px solid var(--ink-900); }
.sw-units > div { display: grid; grid-template-columns: 200px 1fr 56px; align-items: center;
  border-bottom: 1px solid var(--line-300); padding: 8px 0; }
.sw-units .nm { font-size: 13.5px; font-weight: 700; }
.sw-units .ln { height: 12px; background: none; }
.sw-units .ln i { display: block; height: 100%; background: var(--ink-900); }
.sw-units > div.top .ln i { background: var(--rp-secondary); }
.sw-units .ct { text-align: right; font-size: 14px; font-weight: 800; }
.sw-qgrid { display: grid; grid-template-columns: repeat(4, 1fr); border-top: 1px solid var(--ink-900);
  border-left: 1px solid var(--ink-900); }
.sw-qgrid .cell { border-right: 1px solid var(--ink-900); border-bottom: 1px solid var(--ink-900); padding: 10px 12px; min-height: 86px; }
.sw-qgrid .cell b { font-size: 19px; font-weight: 900; }
.sw-qgrid .cell.hard b { color: var(--rp-secondary); }
.sw-qgrid .u { display: block; font-size: 11.5px; font-weight: 700; color: var(--ink-700); margin-top: 2px; }
.sw-qgrid .d { display: block; font-size: 11px; color: var(--ink-500); margin-top: 3px; }
.sw-qgrid .src { display: block; font-size: 10.5px; color: var(--ink-500); margin-top: 3px; line-height: 1.4; }
.sw-details { column-count: 2; column-gap: 32px; column-rule: 1px solid var(--line-300); }
.sw-det { break-inside: avoid; padding: 10px 0 6px; border-top: 1px solid var(--ink-900); }
.sw-det .dh b { font-size: 17px; font-weight: 900; margin-right: 10px; }
.sw-det .dh span { font-size: 11.5px; color: var(--ink-500); font-weight: 700; }
.sw-det .s { margin: 6px 0; font-size: 13px; font-weight: 700; line-height: 1.55; word-break: keep-all; }
.sw-det .dg div { display: grid; grid-template-columns: 88px 1fr; gap: 8px; padding: 4px 0; }
.sw-det .dg span { font-size: 10.5px; font-weight: 800; color: var(--ink-500); padding-top: 2px; }
.sw-det .dg p { margin: 0; font-size: 12.5px; line-height: 1.6; color: var(--ink-700); word-break: keep-all; }
.sw-prios > div { display: grid; grid-template-columns: 88px 1fr; border-top: 1px solid var(--ink-900); padding: 14px 0; }
.sw-prios .pn { font-size: 44px; font-weight: 900; color: var(--ink-500); line-height: 1; }
.sw-prios h4 { margin: 0 0 6px; font-size: 16px; font-weight: 900; }
.sw-prios p { margin: 0; font-size: 13.5px; line-height: 1.65; color: var(--ink-700); word-break: keep-all; }
.sw-prios span { display: block; margin-top: 5px; font-size: 11.5px; color: var(--ink-500); }
.sw-foot { display: flex; justify-content: space-between; margin: 26px 48px 0; border-top: 3px solid var(--ink-900);
  padding-top: 10px; font-size: 11.5px; font-weight: 700; color: var(--ink-500); }

/* ═══════════ 5. BOOKLET — 낱장 페이지 ═══════════ */
.bk { background: var(--canvas, #EDEFF3); padding: 26px 0 30px; display: flex; flex-direction: column;
  align-items: center; gap: 26px; border-radius: 6px; font-family: var(--sans); color: var(--ink-700); }
.bk-page { background: #fff; width: min(720px, 92%); aspect-ratio: auto; min-height: 640px;
  box-shadow: 0 2px 6px rgba(20,22,31,.12), 0 14px 34px rgba(20,22,31,.10);
  padding: 48px 56px 64px; box-sizing: border-box; position: relative; }
.bk-page.cover { display: flex; align-items: stretch; }
.bk-coverframe { flex: 1; border: 2px solid var(--rp-primary); outline: 1px solid var(--rp-primary);
  outline-offset: 5px; display: flex; flex-direction: column; align-items: center; text-align: center;
  justify-content: center; padding: 40px 30px; }
.bk-coverframe .pub { font-size: 13px; font-weight: 700; letter-spacing: .3em; color: var(--rp-primary); }
.bk-coverframe h1 { font-family: var(--serif); font-size: 34px; font-weight: 900; line-height: 1.5;
  color: var(--ink-900); margin: 26px 0 12px; }
.bk-coverframe p { font-size: 15px; color: var(--ink-500); margin: 0; }
.bk-coverframe .mark { margin: 40px 0 0; font-size: 22px; color: var(--rp-primary); }
.bk-coverframe .mark img { height: 52px; }
.bk-coverframe .date { margin-top: 34px; font-size: 12.5px; color: var(--ink-500); letter-spacing: .1em; }
.bk-run { display: flex; justify-content: space-between; font-size: 10.5px; color: var(--ink-500);
  border-bottom: 1px solid var(--line-300); padding-bottom: 6px; margin-bottom: 26px; letter-spacing: .04em; }
.bk-page h3 { font-family: var(--serif); font-size: 23px; font-weight: 900; color: var(--ink-900); margin: 0 0 20px; }
.bk-page.toc h3 { text-align: center; margin-bottom: 34px; }
.bk-tocline { display: flex; align-items: baseline; gap: 8px; padding: 11px 0; }
.bk-tocline button { border: 0; background: none; cursor: pointer; font: 700 15.5px var(--sans); color: var(--ink-900); padding: 0; }
.bk-tocline button:hover { color: var(--rp-primary); }
.bk-tocline i { flex: 1; border-bottom: 2px dotted var(--line-300); }
.bk-tocline span { font-size: 13px; font-weight: 700; color: var(--ink-500); }
.bk-meta > div { display: grid; grid-template-columns: 110px 1fr; padding: 8px 0; border-bottom: 1px solid var(--line-300); }
.bk-meta dt { font-size: 12px; font-weight: 700; color: var(--ink-500); }
.bk-meta dd { margin: 0; font-size: 14.5px; font-weight: 600; color: var(--ink-900); }
.bk-page h5 { font-size: 14.5px; font-weight: 800; color: var(--ink-900); margin: 20px 0 8px; }
.bk-page h5 small { font-weight: 400; color: var(--ink-500); font-size: 12px; }
.bk-p { font-size: 14px; line-height: 1.8; margin: 0 0 10px; word-break: keep-all; }
.bk-p.ind { padding-left: 14px; }
.bk-p.why { color: var(--ink-500); font-size: 12.5px; }
.bk-p .mk { color: var(--rp-secondary); }
.bk-fig { margin: 16px 0 20px; }
.bk-fig .bar { display: flex; }
.bk-fig .leg { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 8px; font-size: 12px; }
.bk-fig .cap { display: block; margin-top: 8px; font-size: 11.5px; color: var(--ink-500); text-align: center; }
.bk-table { width: 100%; border-collapse: collapse; margin: 10px 0 16px; }
.bk-table caption { caption-side: top; text-align: left; font-size: 11.5px; color: var(--ink-500); padding-bottom: 6px; }
.bk-table th { font-size: 12px; font-weight: 800; border-top: 2px solid var(--ink-900);
  border-bottom: 1px solid var(--ink-900); padding: 6px 10px; text-align: left; }
.bk-table td { font-size: 13px; padding: 6px 10px; border-bottom: 1px solid var(--line-table);
  border-left: 1px solid var(--line-300); }
.bk-table td:first-child { border-left: 0; }
.bk-table .n { text-align: right; } .bk-table .s { font-size: 12px; color: var(--ink-500); }
.bk-table .no { font-weight: 800; color: var(--ink-900); }
.bk-sheet, .bk-hard { border-top: 1px solid var(--line-300); padding-top: 6px; }
.bk-hard h5 { color: var(--rp-secondary); }
.bk-pageno { position: absolute; bottom: 24px; left: 0; right: 0; text-align: center;
  font-size: 11.5px; color: var(--ink-500); letter-spacing: .1em; }
.bk-page.back { display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center; min-height: 420px; }
.bk-backline { width: 60px; border-top: 3px solid var(--rp-primary); margin-bottom: 22px; }
.bk-page.back p { font-size: 15px; line-height: 1.8; margin: 0 0 12px; }
.bk-page.back small { font-size: 11.5px; color: var(--ink-500); }

/* ═══════════ 6. INSIGHT — 액션 타이틀 · Exhibit ═══════════ */
.in { font-family: var(--sans); color: var(--ink-700); padding: 0 0 26px; font-variant-numeric: tabular-nums; }
.in-top { display: flex; justify-content: space-between; align-items: baseline; padding: 18px 48px;
  border-bottom: 3px solid var(--rp-primary); }
.in-top b { font-size: 15px; font-weight: 800; color: var(--ink-900); }
.in-top span { font-size: 11.5px; color: var(--ink-500); }
.in-cover { padding: 34px 48px 26px; border-bottom: 1px solid var(--line-300); }
.in-cover .k { font-size: 11px; font-weight: 800; letter-spacing: .22em; color: var(--rp-secondary); }
.in-cover h2 { font-size: 30px; font-weight: 800; line-height: 1.45; color: var(--ink-900); margin: 12px 0 20px; word-break: keep-all; }
.in-cover h2 .mk { color: var(--rp-secondary); }
.in-summary { margin: 0; padding: 0 0 0 22px; }
.in-summary li { margin: 7px 0; }
.in-summary button { border: 0; background: none; padding: 0; cursor: pointer; text-align: left;
  font: 600 15px/1.6 var(--sans); color: var(--ink-700); word-break: keep-all; }
.in-summary button:hover { color: var(--rp-primary); text-decoration: underline; }
.in-sec { padding: 26px 48px 6px; }
.in-sec h3 { display: grid; grid-template-columns: 48px 1fr; gap: 14px; align-items: baseline;
  font-size: 21px; font-weight: 800; line-height: 1.5; color: var(--ink-900); margin: 0 0 16px; word-break: keep-all; }
.in-sec h3 span { font-size: 15px; color: #fff; background: var(--rp-primary); text-align: center; padding: 4px 0; }
.in-ex { margin: 0 0 12px 62px; border: 1px solid var(--line-300); padding: 14px 18px; }
.in-ex figcaption { font-size: 10.5px; font-weight: 800; letter-spacing: .1em; color: var(--ink-500); margin-bottom: 10px; }
.in-stack { display: flex; }
.in-leg { display: flex; gap: 14px; margin-top: 8px; font-size: 12.5px; }
.in-units > div { display: grid; grid-template-columns: 190px 1fr 44px; align-items: center; gap: 12px; padding: 5px 0; }
.in-units span { font-size: 13px; font-weight: 600; }
.in-units i { display: block; height: 13px; background: rgba(28,53,95,.4); }
.in-units > div.top i { background: var(--rp-primary); }
.in-units b { text-align: right; font-size: 13.5px; }
.in-table { width: 100%; border-collapse: collapse; }
.in-table th { font-size: 11.5px; font-weight: 800; border-bottom: 2px solid var(--ink-900); padding: 5px 8px; text-align: left; }
.in-table td { font-size: 12.5px; padding: 5px 8px; border-bottom: 1px solid var(--line-table); }
.in-table .no { font-weight: 800; } .in-table .n { text-align: right; }
.in-table .s { color: var(--ink-500); font-size: 12px; }
.in-so { margin: 4px 0 10px 62px; font-size: 14px; font-weight: 700; color: var(--rp-secondary); word-break: keep-all; }
.in-deep { margin-left: 62px; border: 2px solid var(--rp-secondary); padding: 14px 18px; }
.in-deep .dd { font-size: 10.5px; font-weight: 800; letter-spacing: .18em; color: var(--rp-secondary); }
.in-hard { display: grid; grid-template-columns: 84px 1fr; gap: 12px; border-top: 1px solid var(--line-300);
  margin-top: 10px; padding-top: 10px; }
.in-hard > b { font-size: 17px; font-weight: 800; color: var(--ink-900); }
.in-hard p { margin: 0 0 5px; font-size: 13.5px; line-height: 1.6; word-break: keep-all; }
.in-hard .sub span { font-weight: 800; font-size: 11.5px; color: var(--ink-500); margin-right: 6px; }
.in-qsheets { margin-left: 62px; column-count: 2; column-gap: 26px; }
.in-qs { break-inside: avoid; border-top: 1px solid var(--line-300); padding: 8px 0; }
.in-qs > b { font-size: 14px; font-weight: 800; color: var(--ink-900); margin-right: 8px; }
.in-qs .qm { font-size: 11px; color: var(--ink-500); }
.in-qs p { margin: 5px 0 0; font-size: 12.5px; line-height: 1.6; word-break: keep-all; }
.in-qs .sub span { font-weight: 800; font-size: 10.5px; color: var(--rp-primary); margin-right: 5px; }
.in-rec { display: grid; grid-template-columns: 44px 1fr; gap: 14px; margin-left: 62px; padding: 12px 0;
  border-bottom: 1px solid var(--line-300); }
.in-rec > span { font-size: 18px; font-weight: 800; color: #fff; background: var(--rp-secondary); text-align: center; padding: 5px 0; align-self: start; }
.in-rec b { font-size: 15.5px; color: var(--ink-900); }
.in-rec p { margin: 4px 0 0; font-size: 13.5px; line-height: 1.65; word-break: keep-all; }
.in-rec small { display: block; margin-top: 4px; font-size: 11.5px; color: var(--ink-500); }
.in-foot { margin: 22px 48px 0; border-top: 3px solid var(--rp-primary); padding-top: 10px; font-size: 11.5px; color: var(--ink-500); }

/* ═══════════ 7. VISUAL — 큰 숫자 인포그래픽 ═══════════ */
.vi { font-family: var(--sans); color: var(--ink-700); padding-bottom: 26px; font-variant-numeric: tabular-nums; }
.vi-top { display: flex; justify-content: space-between; align-items: center; padding: 20px 44px;
  background: var(--rp-primary); color: #fff; border-radius: 6px 6px 0 0; }
.vi-top b { font-size: 17px; font-weight: 800; }
.vi-top span { font-size: 11.5px; text-align: right; line-height: 1.5; opacity: .85; }
.vi-nav { display: flex; border-bottom: 2px solid var(--ink-900); }
.vi-nav button { flex: 1; border: 0; background: none; cursor: pointer; padding: 12px 4px 10px;
  font: 700 12.5px var(--sans); color: var(--ink-500); }
.vi-nav button b { display: block; font-size: 22px; font-weight: 900; color: var(--ink-500); }
.vi-nav button.on { color: var(--ink-900); }
.vi-nav button.on b { color: var(--rp-secondary); }
.vi-sec { padding: 26px 44px 6px; }
.vi-sec h3 { font-size: 20px; font-weight: 900; color: var(--ink-900); margin: 0 0 18px; }
.vi-heroes { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1fr; gap: 18px; align-items: end; }
.vi-hero b { font-size: 64px; font-weight: 900; letter-spacing: -0.03em; line-height: 1; color: var(--ink-900); }
.vi-hero.main b { font-size: 110px; color: var(--rp-secondary); }
.vi-hero b i { font-style: normal; font-size: .38em; font-weight: 800; color: var(--ink-500); }
.vi-hero span { display: block; margin-top: 8px; font-size: 12.5px; font-weight: 700; color: var(--ink-500); word-break: keep-all; }
.vi-bigstack { display: flex; margin-top: 30px; }
.vi-leg { display: flex; gap: 20px; margin-top: 10px; font-size: 14px; font-weight: 700; }
.vi-note { margin: 20px 0 0; font-size: 14.5px; line-height: 1.75; color: var(--ink-700); word-break: keep-all;
  border-top: 1px solid var(--line-300); padding-top: 14px; }
.vi-units { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
.vi-unit { border-top: 3px solid var(--ink-900); padding-top: 10px; position: relative; }
.vi-unit.top { border-top-color: var(--rp-secondary); }
.vi-unit b { font-size: 54px; font-weight: 900; line-height: 1; color: var(--ink-900); }
.vi-unit.top b { color: var(--rp-secondary); }
.vi-unit .nm { display: block; font-size: 14px; font-weight: 800; margin-top: 6px; }
.vi-unit .pc { display: block; font-size: 11.5px; color: var(--ink-500); margin: 2px 0 8px; }
.vi-unit i { display: block; height: 8px; background: rgba(28,53,95,.4); }
.vi-unit.top i { background: var(--rp-secondary); }
.vi-flow { display: flex; align-items: flex-end; gap: 4px; height: 150px; border-bottom: 3px solid var(--ink-900); }
.vi-flow .c { flex: 1; min-width: 0; display: flex; flex-direction: column; justify-content: flex-end; height: 100%; }
.vi-flow i { display: block; background: rgba(28,53,95,.35); }
.vi-flow i.h1 { background: var(--d-jungsang); } .vi-flow i.h2 { background: var(--d-sang); }
.vi-flow .c span { font-size: 9px; text-align: center; color: var(--ink-500); margin-top: 3px; overflow: hidden; }
.vi-cap { margin: 10px 0 16px; font-size: 12.5px; color: var(--ink-500); }
.vi-qtable { width: 100%; border-collapse: collapse; }
.vi-qtable th { font-size: 11.5px; font-weight: 800; background: var(--fill-100); padding: 6px 10px;
  border-top: 2px solid var(--ink-900); border-bottom: 1px solid var(--ink-900); text-align: left; }
.vi-qtable td { font-size: 12.5px; padding: 5px 10px; border-bottom: 1px solid var(--line-table); }
.vi-qtable .no { font-weight: 800; } .vi-qtable .n { text-align: right; }
.vi-qtable .s { font-size: 11.5px; color: var(--ink-500); }
.vi-hards { display: grid; gap: 16px; }
.vi-hard { display: grid; grid-template-columns: 120px 1fr; gap: 18px; align-items: start;
  border-top: 3px solid var(--rp-secondary); padding-top: 12px; }
.vi-hard .qn { font-size: 72px; font-weight: 900; line-height: 1; color: var(--rp-secondary); }
.vi-hard .qm { font-size: 12.5px; font-weight: 700; color: var(--ink-500); }
.vi-hard p { margin: 6px 0 0; font-size: 14.5px; line-height: 1.6; word-break: keep-all; }
.vi-hard .tip { color: var(--rp-primary); font-weight: 700; }
.vi-sheets { column-count: 2; column-gap: 28px; }
.vi-sheet { break-inside: avoid; border-top: 2px solid var(--ink-900); padding: 8px 0 10px; }
.vi-sheet .sh b { font-size: 16px; font-weight: 900; margin-right: 8px; }
.vi-sheet .sh span { font-size: 11.5px; color: var(--ink-500); }
.vi-sheet .s { margin: 6px 0; font-size: 13px; font-weight: 700; line-height: 1.55; word-break: keep-all; }
.vi-sheet .d { margin: 0 0 4px; font-size: 12.5px; line-height: 1.6; word-break: keep-all; }
.vi-sheet .d span { display: inline-block; font-size: 10.5px; font-weight: 800; color: var(--ink-500); margin-right: 6px; }
.vi-plan { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.vi-p b { font-size: 46px; font-weight: 900; color: var(--ink-500); line-height: 1; display: block; }
.vi-p h4 { margin: 8px 0 6px; font-size: 15.5px; font-weight: 900; color: var(--ink-900); }
.vi-p p { margin: 0; font-size: 13px; line-height: 1.6; word-break: keep-all; }
.vi-p small { display: block; margin-top: 5px; font-size: 11px; color: var(--ink-500); }
.vi-foot { margin: 24px 44px 0; border-top: 2px solid var(--ink-900); padding-top: 10px; font-size: 11.5px; color: var(--ink-500); }

/* ═══════════ 8. ACADEMIC — 논문 ═══════════ */
.ac { font-family: var(--serif); color: var(--ink-700); max-width: 660px; margin: 0 auto; padding: 46px 24px 30px; }
.ac-head { display: flex; justify-content: space-between; font-family: var(--sans); font-size: 11px;
  color: var(--ink-500); border-bottom: 1px solid var(--ink-900); padding-bottom: 6px; letter-spacing: .04em; }
.ac-title { font-size: 26px; font-weight: 900; line-height: 1.5; color: var(--ink-900);
  text-align: center; margin: 30px 0 10px; }
.ac-auth { text-align: center; font-family: var(--sans); font-size: 12.5px; color: var(--ink-500); margin: 0 0 24px; }
.ac-abs { border-top: 1px solid var(--ink-900); border-bottom: 1px solid var(--ink-900);
  padding: 14px 18px; margin-bottom: 26px; background: var(--fill-100); }
.ac-abs b { font-family: var(--sans); font-size: 12px; letter-spacing: .1em; }
.ac-abs p { margin: 6px 0 0; font-size: 13.5px; line-height: 1.85; text-align: justify; word-break: keep-all; }
.ac h4 { font-family: var(--sans); font-size: 15px; font-weight: 800; color: var(--ink-900); margin: 26px 0 10px; }
.ac-p { font-size: 14.5px; line-height: 1.95; margin: 0 0 10px; text-align: justify; word-break: keep-all; }
.ac-p i { font-style: normal; font-family: var(--sans); font-size: 12px; font-weight: 800; color: var(--ink-500); }
.ac-p .why { font-size: 12.5px; color: var(--ink-500); }
.ac-p .mk { color: var(--rp-secondary); }
.ac-fn { font-family: var(--sans); font-size: 10px; color: var(--rp-primary); font-weight: 800; }
.ac-fig { margin: 14px 0 18px; }
.ac-fig .bar { display: flex; }
.ac-fig figcaption { font-family: var(--sans); font-size: 11.5px; color: var(--ink-500); text-align: center; margin-top: 8px; }
.ac-table { width: 100%; border-collapse: collapse; font-family: var(--sans); margin: 8px 0 18px; }
.ac-table caption { caption-side: top; font-size: 11.5px; color: var(--ink-500); text-align: left; padding-bottom: 6px; }
.ac-table th { font-size: 12px; font-weight: 800; border-top: 2px solid var(--ink-900);
  border-bottom: 1px solid var(--ink-900); padding: 6px 10px; text-align: left; }
.ac-table td { font-size: 12.5px; padding: 5px 10px; border-bottom: 1px solid var(--line-table); }
.ac-table .n { text-align: right; font-variant-numeric: tabular-nums; }
.ac-table .s { font-size: 11.5px; color: var(--ink-500); }
.ac-table .no { font-weight: 800; color: var(--ink-900); }
.ac-table tbody tr:last-child td { border-bottom: 2px solid var(--ink-900); }
.ac-notes { border-top: 1px solid var(--ink-900); margin-top: 26px; padding-top: 8px; }
.ac-notes b { font-family: var(--sans); font-size: 11px; letter-spacing: .1em; color: var(--ink-500); }
.ac-notes p { font-family: var(--sans); font-size: 11.5px; color: var(--ink-500); margin: 4px 0 0; line-height: 1.6; }
.ac-footer { font-family: var(--sans); font-size: 11px; color: var(--ink-500); text-align: center;
  margin-top: 24px; border-top: 1px solid var(--line-300); padding-top: 10px; }

/* ═══════════ 템플릿 선택 UI — 구조 스케치 썸네일 ═══════════ */
.tt-bar { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; max-width: 900px; margin: 0 auto 14px; }
.tt-bar button { display: grid; grid-template-columns: 44px 1fr; gap: 3px 10px; align-items: center;
  text-align: left; background: #fff; border: 1px solid var(--line-300); border-radius: 8px;
  padding: 8px 10px; cursor: pointer; font-family: var(--sans); }
.tt-bar button.on { border-color: var(--ink-900); box-shadow: inset 0 0 0 1px var(--ink-900); }
.tt-nm { font-size: 11.5px; font-weight: 800; color: var(--ink-900); letter-spacing: .03em; }
.tt-ds { font-size: 10px; color: var(--ink-500); line-height: 1.3; }
.tt-th { grid-row: 1 / 3; width: 44px; height: 56px; border: 1px solid var(--line-300);
  position: relative; background: #fff; overflow: hidden; }
.tt-th i { position: absolute; background: var(--line-300); }
/* executive: 좌측 밴드 + 우측 줄 */
.tt-executive i:nth-child(1) { left: 0; top: 0; bottom: 0; width: 10px; background: #1C355F; }
.tt-executive i:nth-child(2) { left: 14px; right: 4px; top: 8px; height: 5px; background: #14161F; }
.tt-executive i:nth-child(3) { left: 14px; right: 4px; top: 18px; height: 2px; }
.tt-executive i:nth-child(4) { left: 14px; right: 4px; top: 24px; height: 2px; }
.tt-executive i:nth-child(5) { left: 14px; right: 16px; top: 36px; height: 10px; background: #C2452D; }
/* editorial: 중앙 제목 + 2단 */
.tt-editorial i:nth-child(1) { left: 8px; right: 8px; top: 6px; height: 6px; background: #14161F; }
.tt-editorial i:nth-child(2) { left: 4px; top: 18px; bottom: 4px; width: 17px;
  background: repeating-linear-gradient(180deg, #C9CFDA 0 2px, transparent 2px 5px); }
.tt-editorial i:nth-child(3) { right: 4px; top: 18px; bottom: 4px; width: 17px;
  background: repeating-linear-gradient(180deg, #C9CFDA 0 2px, transparent 2px 5px); }
.tt-editorial i:nth-child(4) { left: 21px; top: 18px; bottom: 4px; width: 1px; }
/* datalab: 상단 다크 + 히트맵 */
.tt-datalab i:nth-child(1) { left: 0; right: 0; top: 0; height: 12px; background: #14161F; }
.tt-datalab i:nth-child(2) { left: 6px; top: 18px; width: 8px; height: 8px; background: #F76707; }
.tt-datalab i:nth-child(3) { left: 17px; top: 18px; width: 8px; height: 8px; background: #E03131; }
.tt-datalab i:nth-child(4) { left: 28px; top: 18px; width: 8px; height: 8px; background: #E5A50A; }
.tt-datalab i:nth-child(5) { left: 6px; top: 29px; width: 8px; height: 8px; background: #1971C2; }
.tt-datalab i:nth-child(6) { left: 17px; top: 29px; width: 8px; height: 8px; background: #2F9E44; }
.tt-datalab i:nth-child(7) { left: 6px; right: 6px; bottom: 6px; height: 2px; }
/* swiss: 거대 숫자 + 그리드 */
.tt-swiss i:nth-child(1) { left: 4px; top: 4px; width: 22px; height: 22px; background: #14161F; }
.tt-swiss i:nth-child(2) { right: 6px; top: 8px; width: 6px; height: 6px; background: #C2452D; }
.tt-swiss i:nth-child(3) { left: 4px; right: 4px; top: 32px; height: 1px; background: #14161F; }
.tt-swiss i:nth-child(4) { left: 4px; right: 22px; top: 38px; height: 3px; }
.tt-swiss i:nth-child(5) { left: 4px; right: 12px; top: 45px; height: 3px; }
/* booklet: 낱장 쌓임 */
.tt-booklet { background: #EDEFF3; }
.tt-booklet i:nth-child(1) { left: 8px; right: 12px; top: 4px; height: 20px; background: #fff;
  border: 1px solid #C9CFDA; }
.tt-booklet i:nth-child(2) { left: 12px; right: 8px; top: 12px; height: 20px; background: #fff;
  border: 1px solid #C9CFDA; box-shadow: 0 2px 4px rgba(20,22,31,.2); }
.tt-booklet i:nth-child(3) { left: 16px; right: 4px; top: 22px; height: 26px; background: #fff;
  border: 1px solid #1C355F; }
/* insight: 결론 문장 + exhibit 들여쓰기 */
.tt-insight i:nth-child(1) { left: 4px; top: 6px; width: 8px; height: 8px; background: #1C355F; }
.tt-insight i:nth-child(2) { left: 16px; right: 4px; top: 7px; height: 5px; background: #14161F; }
.tt-insight i:nth-child(3) { left: 16px; right: 6px; top: 18px; height: 14px; border: 1px solid #C9CFDA; background: none; }
.tt-insight i:nth-child(4) { left: 16px; right: 14px; top: 38px; height: 4px; background: #C2452D; }
/* visual: 초대형 숫자 */
.tt-visual i:nth-child(1) { left: 4px; top: 4px; width: 26px; height: 24px; background: #C2452D; }
.tt-visual i:nth-child(2) { left: 34px; top: 10px; right: 4px; height: 12px; background: #14161F; }
.tt-visual i:nth-child(3) { left: 4px; right: 4px; top: 34px; height: 9px;
  background: linear-gradient(90deg, #1971C2 30%, #E5A50A 30% 60%, #F76707 60% 85%, #E03131 85%); }
/* academic: 좁은 본문 + 초록 박스 */
.tt-academic i:nth-child(1) { left: 10px; right: 10px; top: 5px; height: 4px; background: #14161F; }
.tt-academic i:nth-child(2) { left: 8px; right: 8px; top: 13px; height: 10px; background: #F4F5F8; border: 1px solid #14161F; }
.tt-academic i:nth-child(3) { left: 10px; right: 10px; top: 29px; height: 2px; }
.tt-academic i:nth-child(4) { left: 10px; right: 10px; top: 34px; height: 2px; }
.tt-academic i:nth-child(5) { left: 10px; right: 18px; top: 39px; height: 2px; }
body[data-w="xs"] .tt-bar { grid-template-columns: 1fr 1fr; }

/* ═══════════ 반응형 ═══════════ */
body[data-w="xs"] .ex2 { grid-template-columns: 1fr; }
body[data-w="xs"] .ex2-band { flex-direction: row; align-items: center; gap: 14px; border-radius: 6px 6px 0 0; padding: 14px 18px; }
body[data-w="xs"] .ex2-band .bt { margin: 0 auto; writing-mode: horizontal-tb; font-size: 14px; }
body[data-w="xs"] .ed-cols, body[data-w="xs"] .ed-sheets, body[data-w="xs"] .sw-details,
body[data-w="xs"] .in-qsheets, body[data-w="xs"] .vi-sheets, body[data-w="xs"] .ex2-briefs,
body[data-w="xs"] .dl-details { column-count: 1; }
body[data-w="xs"] .dl-wrap { grid-template-columns: 1fr; }
body[data-w="xs"] .dl-nav { flex-direction: row; flex-wrap: wrap; border-right: 0; border-bottom: 2px solid var(--ink-900); }
body[data-w="xs"] .sw-qgrid { grid-template-columns: 1fr 1fr; }
body[data-w="xs"] .vi-heroes, body[data-w="xs"] .vi-units, body[data-w="xs"] .vi-plan { grid-template-columns: 1fr 1fr; }
body[data-w="xs"] .sw-big3, body[data-w="xs"] .sw-meta { grid-template-columns: 1fr; }
body[data-w="xs"] .ex2-kpis { grid-template-columns: 1fr 1fr; }
body[data-w="xs"] .dl-kpis { grid-template-columns: 1fr 1fr; }

/* ═══════════ 인쇄 — 템플릿별 페이지 구성 ═══════════ */
@media print {
  body.printing-report .tt-bar { display: none !important; }
  body.printing-report .rt-nav, body.printing-report .dl-nav, body.printing-report .sw-nav,
  body.printing-report .vi-nav, body.printing-report .ex2-nav { display: none !important; }
  /* 공통: 숨긴 구역은 핸들러가 펼친다. 구역 = 새 페이지 */
  body.printing-report [data-sec] { break-before: page; }
  body.printing-report [data-sec]:first-of-type { break-before: auto; }
  /* EXECUTIVE: 밴드는 1쪽 표지 역할 → 본문과 함께 세로 인쇄 */
  body.printing-report .ex2 { grid-template-columns: 1fr; }
  body.printing-report .ex2-band { flex-direction: row; gap: 16px; align-items: center;
    border-radius: 0; padding: 12pt 16pt; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  body.printing-report .ex2-band .bt { writing-mode: horizontal-tb; margin: 0 auto; font-size: 13pt; }
  /* EDITORIAL: 2단 유지, 부록 표는 통째로 */
  body.printing-report .ed-cols { column-count: 2; }
  body.printing-report .ed-qtable, body.printing-report .ed-figure, body.printing-report .ed-pull { break-inside: avoid; }
  /* BOOKLET: 낱장 = 실제 페이지 1:1 */
  body.printing-report .bk { background: none; padding: 0; gap: 0; }
  body.printing-report .bk-page { box-shadow: none; width: 100%; min-height: auto; break-after: page; padding: 24pt 28pt 40pt; }
  body.printing-report .bk-page:last-child { break-after: auto; }
  /* DATA LAB: 다크 헤더 강제 출력 */
  body.printing-report .dl-top, body.printing-report .dl-kpis, body.printing-report .dl-rows th,
  body.printing-report .in-sec h3 span, body.printing-report .in-rec > span,
  body.printing-report .vi-top, body.printing-report .ex2-rec > b, body.printing-report .dl-act > span {
    -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  body.printing-report .dl-wrap { grid-template-columns: 1fr; }
  /* ACADEMIC: 본문 폭 그대로, 각주는 마지막 */
  body.printing-report .ac { max-width: none; padding: 0; }
  body.printing-report .ac-table, body.printing-report .ac-fig, body.printing-report .ac-abs { break-inside: avoid; }
  /* 공용 넘김 보호 */
  body.printing-report .ex2-risk, body.printing-report .ex2-rec, body.printing-report .ed-sheet,
  body.printing-report .dl-panel, body.printing-report .dl-out, body.printing-report .sw-det,
  body.printing-report .sw-qgrid .cell, body.printing-report .bk-sheet, body.printing-report .bk-hard,
  body.printing-report .in-ex, body.printing-report .in-hard, body.printing-report .in-rec,
  body.printing-report .vi-hard, body.printing-report .vi-sheet, body.printing-report .ac-item { break-inside: avoid; }
  body.printing-report .rtdot, body.printing-report .ex2-stack i, body.printing-report .ed-figure .bar i,
  body.printing-report .in-stack i, body.printing-report .vi-bigstack i, body.printing-report .sw-stack i,
  body.printing-report .ac-fig .bar i, body.printing-report .dl-hist i, body.printing-report .dl-flow i,
  body.printing-report .dl-heat td i, body.printing-report .vi-flow i {
    -webkit-print-color-adjust: exact; print-color-adjust: exact; }
}

/* ── 5단계 총평 항목 (템플릿 8종 공용) ──────────────────────────────────
   시험 한줄평·변별력 포인트처럼 항목별로 적은 총평을 제언 절 끝에 싣는다.
   조판은 문항 시트와 같은 dt/dd 2열 정의목록 — 새 스타일을 만들지 않는다. */
.rt-sumnotes { margin-top: 20px; border-top: 1px solid var(--line-300); padding-top: 4px; }
.rt-sumnotes > div {
  display: grid; grid-template-columns: 132px 1fr; gap: 16px;
  padding: 10px 0; border-bottom: 1px solid var(--line-table);
}
.rt-sumnotes > div:last-child { border-bottom: 0; }
.rt-sumnotes dt { font-weight: 700; color: var(--ink-700); }
.rt-sumnotes dd { color: var(--ink-900); line-height: 1.75; white-space: pre-wrap; }
@media (max-width: 720px) {
  .rt-sumnotes > div { grid-template-columns: 1fr; gap: 4px; }
}

/* ── 탭 내비 — 단추가 7개(문항별 풀이 포함)라 한 줄에 안 들어가면 고르게 접는다 (2026-10-01 원장님: 둘째 줄에 하나만 길게 떠 있던 문제) ── */
.ex2-nav button { flex: 1 1 110px; }
/* ── 휴대폰(≤640px) — 결과지 템플릿을 화면 폭에 맞춘다. 격자는 한 줄로, 표는 가로 스크롤, 글자는 조금 줄인다 ── */
.rt-tscroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.rt-tscroll > table { width: 100%; }
@media print { .rt-tscroll { overflow: visible; } }
@media (max-width: 640px) {
  .ex-report { border-radius: 0; font-size: 14px; }
  .ex-report [class$="-meta"], .ex-report [class$="-kpis"], .ex-report [class$="-kpi"], .ex-report [class$="-grid"],
  .ex-report [class$="-cols"], .ex-report [class$="-two"], .ex-report [class$="-bigs"], .ex-report [class$="-hero"],
  .ex-report .ex2-meta, .ex-report .ex2-kpis { grid-template-columns: 1fr !important; }
  .ex-report .ex2-meta > div { grid-template-columns: 84px 1fr; }
  /* 표 — 상자(.rt-tscroll) 안에서 가로로 민다. 열이 많은 「문항별 검토」는 최소 폭을 둬 글자가 세로로 쏟아지지 않게 */
  .ex-report .rt-tscroll { margin: 0 -4px; padding: 0 4px; }
  .ex-report table.qtab, .ex-report table[class*="-qtab"], .ex-report table[class$="-qt"] { min-width: 560px; }
  .ex-report table th { font-size: 12px; padding: 7px 8px; }
  .ex-report table td { font-size: 13px; padding: 7px 8px; }
  .ex-report h1, .ex-report h2 { font-size: 20px; line-height: 1.35; }
  .ex-report .rt-nav, .ex-report nav[class*="-nav"] { flex-wrap: wrap; }
  .ex-report .rt-nav button, .ex-report nav[class*="-nav"] button { flex: 1 1 45%; font-size: 12px; padding: 9px 4px; white-space: normal; }
  /* 여백 — 본문 상자(-main/-body)와 그 안의 절(-sec)이 여백을 겹쳐 쌓지 않게. 실측: 375px 화면에서 표 폭이 199px 까지 눌렸다 */
  .ex-report [class$="-main"], .ex-report [class$="-body"] { padding-left: 16px; padding-right: 16px; }
  .ex-report [class*="-sec"], .ex-report section { padding-left: 14px; padding-right: 14px; }
  .ex-report [class$="-main"] [class*="-sec"], .ex-report [class$="-body"] [class*="-sec"],
  .ex-report [class$="-main"] section, .ex-report [class$="-body"] section { padding-left: 0; padding-right: 0; }
}

/* 총평(학부모 안내용)·전략 글은 원장님이 문단을 나눠 쓴다 — 빈 줄을 그대로 살린다 (2026-10-02 원장님: "학부모님께 쓴 글이 결과지에 안 보이는 것 같다" — 실은 한 덩어리로 뭉쳐 있었다) */
.ex2-review p, .ed-lead, .ed-lead-more, .dl-note p, .sw-p, .bk-p, .in-so, .vi-note, .ac-p { white-space: pre-wrap; }
/* Editorial 머리글의 총평에 이름표 — 드롭캡 문단이 「학부모 안내용 총평」인 줄 모르셨다 */
.ed-lead-tag { display: block; font-family: var(--sans, Pretendard, sans-serif); font-size: 11.5px; font-weight: 800; letter-spacing: .08em; color: var(--ink-500, #6B7280); margin: 0 0 6px; }

/* 「선생님 총평」 공통 구역 (2026-10-02) — 9칸을 5단계 순서대로. 흐름형 템플릿에서는 본문 뒤에 이어진다 */
.rt-sum-sec { padding: 28px 24px 8px; }
.rt-sum-sec > h3 { font-family: var(--serif, "Noto Serif KR", serif); font-size: 20px; font-weight: 800; color: var(--ink-900, #111); margin: 0 0 14px; padding-bottom: 10px; border-bottom: 3px solid var(--ink-900, #111); }
.rt-sum-sec > h3 small { font-family: var(--sans, Pretendard, sans-serif); font-weight: 500; color: var(--ink-500, #6B6F7B); font-size: .7em; margin-left: 8px; }
.rt-sum-list { margin: 0; }
.rt-sum-list > div { display: grid; grid-template-columns: 160px minmax(0, 1fr); gap: 6px 18px; padding: 14px 0; border-bottom: 1px solid var(--line-200, #E3E6EC); }
.rt-sum-list > div:last-child { border-bottom: 0; }
.rt-sum-list dt { font-weight: 800; color: var(--ink-700, #2B2F3A); font-size: 14.5px; }
.rt-sum-list dd { margin: 0; color: var(--ink-900, #111); font-size: 15.5px; line-height: 1.8; white-space: pre-wrap; }
body[data-w="xs"] .rt-sum-list > div { grid-template-columns: 1fr; gap: 4px; }
body.printing-report .rt-sum-sec { break-before: page; }

/* 출제 범위 — 항목마다 한 줄, 「· 」 뒤로 들여쓰기 (2026-10-07, rtRangeHtml) */
.rt-range { display: block; }
.rt-range > span { display: block; padding-left: 0.9em; text-indent: -0.9em; }
.rt-range > span + span { margin-top: 2px; }
