/* ============================================================
   고등학교 정보과 웹교과서 — **심화판** 공용 부품
   textbook.css 다음에 싣는다. 모든 규칙은 body[data-edition="adv"] 아래에서만 선다 —
   기초판(정보·데이터 과학·소프트웨어와 생활, 인공지능 기초 21차시본)은 이 파일을 싣지 않고,
   실어도 아무것도 바뀌지 않는다.

   담는 것
     1. 사진·그림 — **어떤 사진도 자르지 않는다.** 방향에 따라 배치만 바꾼다.
     2. 확인 문제 — 답 칸 + 제출. 제출해야 모범 답안이 열린다(advanced.js).
     3. 더 알아보기 — 그림(사진·도해)과 설명이 한 장씩 붙은 카드.
     4. 파이썬 실행기의 '정답 코드 넣기' 단추(pyrunner.js 가 만든다) 모양.

   ⚠️ 쪽마다 인라인 <style> 로 그림 크기·비율을 고치지 말 것.
      2026-09-21 사용자 검토에서 사진 145칸 중 96칸이 잘려 보였다(셰이키 40%, 펭귄 51%).
      공용 textbook.css 의 `aspect-ratio:16/9.5; object-fit:cover` 를 쪽마다 제각각 풀어 쓰다가
      같은 사진이 쪽마다 다르게 잘렸다. 여기 한 곳에서만 정한다.
   ============================================================ */

/* ---------- 1. 사진·그림 ---------- */
/* 공용 기본값(16/9.5 cover)을 끈다 — 원본 비율 그대로 */
body[data-edition="adv"] figure.img-figure img,
body[data-edition="adv"] .fig-row figure img {
  aspect-ratio: auto;
  object-fit: contain;
  width: 100%;
  height: auto;
}

/* 1-1. 가로 사진 — 본문 폭 그대로 */
body[data-edition="adv"] figure.img-figure.fig-l { margin: 34px 0; }

/* 1-2. 세로·정사각 사진 — 사진 옆에 설명을 둔다(양옆이 비지 않게) */
body[data-edition="adv"] figure.img-figure.fig-side {
  display: grid;
  grid-template-columns: minmax(0, var(--fw, 40%)) minmax(0, 1fr);
  gap: 30px;
  align-items: center;
  margin: 36px 0;
  padding: 22px;
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--radius);
  box-shadow: var(--c-shadow);
}
body[data-edition="adv"] figure.img-figure.fig-side img {
  border-radius: 12px;
  box-shadow: none;
  max-height: 560px;
  width: auto;
  max-width: 100%;
  justify-self: center;
}
body[data-edition="adv"] figure.img-figure.fig-side figcaption {
  margin: 0;
  text-align: left;
  font-size: .98rem;
  line-height: 1.8;
  color: var(--c-text);
  padding-left: 18px;
  border-left: 3px solid var(--c-primary);
}
body[data-edition="adv"] figure.img-figure.fig-side figcaption .src { margin-top: 10px; }
/* 정사각에 가까운 사진은 조금 더 넓게 */
body[data-edition="adv"] figure.img-figure.fig-side.fig-sq { --fw: 46%; }

/* 1-3. 도해(흰 바탕 그림·표·도표) — 흰 판 위에, 원본보다 크게 키우지 않는다 */
body[data-edition="adv"] figure.img-figure.fig-d {
  margin: 34px 0;
  padding: 22px;
  background: #fff;
  border: 1px solid var(--c-border);
  border-radius: var(--radius);
}
body[data-edition="adv"] figure.img-figure.fig-d img {
  box-shadow: none;
  border-radius: 6px;
  width: auto;
  max-width: min(100%, var(--nw, 100%));
  max-height: 620px;
  margin: 0 auto;
}

/* 1-4. 두세 장 나란히 — 높이를 맞추되 자르지 않는다(가로·세로 비율만큼 폭을 나눠 가진다) */
body[data-edition="adv"] .fig-row {
  display: flex;
  gap: 18px;
  align-items: flex-start;
  margin: 34px 0;
  grid-template-columns: none;
}
body[data-edition="adv"] .fig-row > figure.img-figure {
  flex: var(--ar, 1.333) 1 0;
  min-width: 0;
  margin: 0;
  display: block;
  padding: 0;
  background: none;
  border: 0;
  box-shadow: none;
}
body[data-edition="adv"] .fig-row > figure.img-figure img { max-height: none; }
body[data-edition="adv"] .fig-row > figure.img-figure figcaption {
  text-align: left; border: 0; padding: 0; margin-top: 10px; font-size: .88rem; color: var(--c-text-soft);
}

/* 캡션 공통 */
body[data-edition="adv"] figure.img-figure figcaption { line-height: 1.75; }
body[data-edition="adv"] figure.img-figure figcaption .src { font-size: .78rem; }

/* ---------- 2. 확인 문제 — 답 칸 + 제출 ---------- */
body[data-edition="adv"] .quiz .quiz-q { margin: 0 0 14px; }
body[data-edition="adv"] .qa { margin: 4px 0 0; }
body[data-edition="adv"] .qa textarea.qa-draft {
  display: block; width: 100%; min-height: 128px; resize: vertical;
  font: inherit; font-size: .96rem; line-height: 1.75; color: var(--c-text);
  background: #fbfcfe; border: 1.5px solid var(--c-border); border-radius: 12px;
  padding: 14px 16px; transition: border-color .15s, background .15s;
}
body[data-edition="adv"] .qa textarea.qa-draft:focus {
  outline: none; border-color: var(--c-primary); background: #fff;
  box-shadow: 0 0 0 4px var(--c-primary-soft);
}
body[data-edition="adv"] .qa textarea.qa-draft[readonly] {
  background: #f4f6fb; color: var(--c-text-soft); border-style: dashed; cursor: default; box-shadow: none;
}
body[data-edition="adv"] .qa textarea.qa-final { display: none !important; }
/* 문항 속 표 칸 — 제출할 때 표 값이 답과 함께 묶여 간다(advanced.js). <input> 을 쓰지 않는다:
   write.js 가 수집하지 않고, 서술형 채점 추출기가 카드를 넓히다 멈춰 모범 답안을 못 찾는다. */
body[data-edition="adv"] textarea.qa-cell {
  display: block; width: 100%; min-width: 64px; box-sizing: border-box; margin: 0;
  border: none; border-radius: 6px; background: #fffbeb; color: var(--c-text);
  padding: 6px 6px; font-family: var(--font-mono); font-size: .86rem; line-height: 1.45;
  text-align: center; resize: none; overflow: hidden; white-space: pre-wrap;
}
body[data-edition="adv"] textarea.qa-cell.wide { min-width: 9.5em; text-align: left; font-family: inherit; font-size: .84rem; }
body[data-edition="adv"] textarea.qa-cell:focus { outline: 2px solid var(--c-primary); background: #fff; }
body[data-edition="adv"] textarea.qa-cell[readonly] { background: #f4f6fb; color: var(--c-text-soft); cursor: default; outline: none; }
/* 폰 폭 — 표를 옆으로 밀지 않게 행마다 카드로 세운다. 열 이름은 칸 위에(td[data-col], advanced.js 가 단다). */
@media (max-width: 640px) {
  body[data-edition="adv"] table.qa-table, body[data-edition="adv"] table.qa-table tbody { display: block; width: 100%; overflow: visible; white-space: normal; border: 0; }
  body[data-edition="adv"] table.qa-table thead { display: none; }
  body[data-edition="adv"] table.qa-table tr { display: flex; flex-wrap: wrap; gap: 10px; margin: 0 0 10px; padding: 12px 14px;
    border: 1px solid var(--c-border); border-radius: 12px; background: #fff; }
  body[data-edition="adv"] table.qa-table td { border: 0; padding: 0; text-align: left; }
  body[data-edition="adv"] table.qa-table td.name { flex: 1 1 100%; white-space: normal; font-size: .9rem; }
  body[data-edition="adv"] table.qa-table td[data-col] { flex: 1 1 0; min-width: 0; }
  body[data-edition="adv"] table.qa-table td[data-col]::before { content: attr(data-col); display: block; margin: 0 0 4px;
    font-size: .74rem; font-weight: 700; color: var(--c-text-soft); white-space: nowrap; }
  body[data-edition="adv"] table.qa-table td.qa-wide { flex: 1 1 100%; display: grid; grid-template-columns: 6.5em 1fr; align-items: center; gap: 10px; }
  body[data-edition="adv"] table.qa-table td.qa-wide::before { margin: 0; white-space: normal; }
  body[data-edition="adv"] table.qa-table textarea.qa-cell { min-width: 0; }
}
body[data-edition="adv"] .qa-bar {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 10px;
}
body[data-edition="adv"] .qa-count { font-size: .8rem; color: var(--c-text-faint); font-variant-numeric: tabular-nums; }
body[data-edition="adv"] .qa-state { font-size: .84rem; color: var(--c-text-soft); font-weight: 700; }
body[data-edition="adv"] .qa-state.done { color: var(--ok); }
body[data-edition="adv"] .qa-state.warn { color: var(--warn); }
body[data-edition="adv"] .qa-bar .spacer { flex: 1 1 auto; }
body[data-edition="adv"] .qa-bar .btn { white-space: nowrap; }
body[data-edition="adv"] .qa-confirm {
  display: none; align-items: center; gap: 10px; flex-wrap: wrap;
  margin-top: 10px; padding: 12px 14px; border-radius: 12px;
  background: var(--warn-soft); border: 1px solid #f3d9ae; font-size: .88rem; font-weight: 700; color: #92400e;
}
body[data-edition="adv"] .qa-confirm.on { display: flex; }
body[data-edition="adv"] .qa-model {
  display: none; margin-top: 14px; padding: 18px 20px; border-radius: 14px;
  background: color-mix(in srgb, var(--c-primary-soft) 45%, white);
  border: 1px solid color-mix(in srgb, var(--c-primary) 22%, transparent);
  font-size: .94rem; line-height: 1.8;
}
body[data-edition="adv"] .qa-model.on { display: block; animation: fadeUp .35s ease; }
body[data-edition="adv"] .qa-model .qa-model-label {
  display: block; font-weight: 900; color: var(--c-primary-deep); margin-bottom: 8px; font-size: .9rem;
}
body[data-edition="adv"] .qa-model p { margin: 0 0 9px; }
body[data-edition="adv"] .qa-model p:last-child { margin-bottom: 0; }
body[data-edition="adv"] .qa-note {
  font-size: .86rem; color: var(--c-text-soft); margin: -4px 0 22px;
  padding: 12px 16px; background: var(--c-surface); border: 1px dashed var(--c-border); border-radius: 12px;
}

/* ---------- 3. 더 알아보기 — 그림 + 설명 카드 ---------- */
body[data-edition="adv"] .explore { display: grid; gap: 22px; margin-top: 6px; }
body[data-edition="adv"] .ex-card {
  display: grid;
  grid-template-columns: minmax(0, 38%) minmax(0, 1fr);
  background: var(--c-surface);
  border: 1px solid var(--c-border);
  border-radius: var(--radius);
  box-shadow: var(--c-shadow);
  overflow: hidden;
}
body[data-edition="adv"] .ex-visual {
  margin: 0; display: flex; align-items: center; justify-content: center;
  background: #f3f5fa; padding: 18px; min-height: 220px;
}
body[data-edition="adv"] .ex-visual img {
  width: auto; max-width: 100%; max-height: 360px; height: auto;
  object-fit: contain; border-radius: 10px;
}
/* 사진 카드 — 사진은 자르지 않고(contain), 남는 자리는 **같은 사진을 흐리게 깐 배경**으로 채운다.
   글이 길어 카드가 높아져도 회색 빈 띠가 생기지 않는다. --bg 는 advanced.js 가 img src 로 채운다. */
body[data-edition="adv"] .ex-visual.photo {
  position: relative; overflow: hidden; padding: 22px; background: #1f2937;
}
body[data-edition="adv"] .ex-visual.photo::before {
  content: ""; position: absolute; inset: -40px;
  background-image: var(--bg, none); background-size: cover; background-position: center;
  filter: blur(26px) saturate(1.15); opacity: .75; transform: scale(1.05);
}
body[data-edition="adv"] .ex-visual.photo img {
  position: relative; z-index: 1; border-radius: 10px; max-height: 440px;
  box-shadow: 0 10px 30px rgba(0,0,0,.35);
}
body[data-edition="adv"] .ex-visual svg { width: 100%; height: auto; max-height: 380px; display: block; }
/* 도해 카드는 그림 칸을 넓힌다 — 글씨가 든 도해가 38% 칸에서는 9px 로 줄어 못 읽는다(실측) */
body[data-edition="adv"] .ex-card:has(> .ex-visual:not(.photo)) { grid-template-columns: minmax(0, 47%) minmax(0, 1fr); }
body[data-edition="adv"] .ex-visual:not(.photo) { background: #f7f8fc; border-right: 1px solid var(--c-border); }
body[data-edition="adv"] .ex-body { padding: 24px 28px 22px; min-width: 0; }
body[data-edition="adv"] .ex-kind {
  display: inline-block; font-size: .74rem; font-weight: 800; letter-spacing: .02em;
  color: var(--c-primary-deep); background: var(--c-primary-soft);
  border-radius: 99px; padding: 3px 11px; margin-bottom: 8px;
}
body[data-edition="adv"] .ex-body h3 { margin: 0 0 10px; font-size: 1.12rem; line-height: 1.5; }
body[data-edition="adv"] .ex-body p { margin: 0 0 10px; font-size: .95rem; line-height: 1.8; }
body[data-edition="adv"] .ex-body p:last-child { margin-bottom: 0; }
body[data-edition="adv"] .ex-body .ex-src {
  margin-top: 12px; font-size: .76rem; color: var(--c-text-faint); line-height: 1.5;
}

/* ---------- 4. 파이썬 실행기 — 정답 코드 넣기 ---------- */
body[data-edition="adv"] .pyrun [data-solution-btn] { background: #3b2a6b; border-color: #5b46a0; color: #ede9fe; }
body[data-edition="adv"] .pyrun [data-solution-btn].on { background: #0f5132; border-color: #1f7a4d; color: #d1fae5; }
body[data-edition="adv"] .pyrun .py-sol-note {
  font-size: .8rem; color: #a7b4d4; margin: 8px 2px 0; line-height: 1.6;
}

/* ---------- 좁은 화면 ---------- */
@media (max-width: 760px) {
  body[data-edition="adv"] figure.img-figure.fig-side {
    grid-template-columns: minmax(0, 1fr); gap: 16px; padding: 16px;
  }
  body[data-edition="adv"] figure.img-figure.fig-side img { max-height: 460px; }
  body[data-edition="adv"] figure.img-figure.fig-side figcaption { font-size: .92rem; }
  body[data-edition="adv"] figure.img-figure.fig-d { padding: 14px; }
  body[data-edition="adv"] .fig-row { flex-direction: column; }
  body[data-edition="adv"] .fig-row > figure.img-figure { flex: none; width: 100%; }
  body[data-edition="adv"] .ex-card { grid-template-columns: minmax(0, 1fr); }
  body[data-edition="adv"] .ex-visual { min-height: 0; }
  body[data-edition="adv"] .ex-visual.photo img { max-height: 380px; }
  body[data-edition="adv"] .ex-body { padding: 18px 18px 18px; }
}

@media print {
  body[data-edition="adv"] .qa-bar, body[data-edition="adv"] .qa-confirm { display: none !important; }
}
