@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard@v1.3.9/dist/web/variable/pretendardvariable-dynamic-subset.min.css');
@import url('https://cdn.jsdelivr.net/gh/sun-typeface/SUIT@v2.0.5/fonts/variable/woff2/SUIT-Variable.css'); /* 92차 — 제목 글꼴 SUIT(준호 결정) */  /* 92차 — @import 는 맨 위여야 함(@font-face 뒤에 있어 Pretendard 가 그동안 안 불려 왔음) */
/* ============================================================================
   stage2.css — 케이티처 2세대 무대 (2026-09-22 신설)
   원칙
   · TV 첫째: 슬라이드는 1600×900 고정 캔버스에 그리고 화면 크기에 맞춰 통째로 축소·확대한다.
     → 어떤 TV·노트북에서도 같은 자리에 같은 크기로 보인다. 넘침 없음.
   · 교사 도구(HUD)는 캔버스 밖에서 산다. 학생 화면에는 슬라이드만 보인다.
   · 1세대 엔진(teacher-engine.js / teacher-styles.css)은 한 글자도 건드리지 않는다.
   ============================================================================ */

@font-face{font-family:'Hakgyoansim Moheomga';src:url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2402_keris@main/TTHakgyoansimMoheomgaB.woff2') format('woff2');font-display:swap}

:root{
  --studio:#0f1319;
  --studio2:#1a2029;
  --ink:#1c2430;
  --ink-mut:#5f6b7a;
  --paper:#fbf9f4;
  --paper2:#f2eee4;
  --line:rgba(28,36,48,.10);
  --white:#fff;
  --acc:#4F8DF7;               /* 과목 악센트 (body.subj-* 로 바뀜) */
  --acc-ink:#1F4DA8;
  --acc-soft:#E4EEFF;
  --st:#FF8A3D;                /* 단계 색 (data-stage 로 바뀜) */
  --st-soft:#FFEBDC;
  --ok:#12B886; --ok-soft:#DDF7EE;
  --no:#F0506E; --no-soft:#FFE1E7;
  --warn:#F5B942; --warn-soft:#FFF3D6;
  --display:'SUIT Variable',SUIT,'Pretendard Variable',Pretendard,system-ui,sans-serif; /* 92차 — 학교안심 → SUIT */
  --body:'Pretendard Variable',Pretendard,-apple-system,'Apple SD Gothic Neo','Noto Sans KR',system-ui,sans-serif;
  --r:28px;
  --sh:0 30px 80px rgba(0,0,0,.45), 0 4px 14px rgba(0,0,0,.35);
}
body.subj-math{--acc:#4F8DF7;--acc-ink:#1F4DA8;--acc-soft:#E4EEFF}
body.subj-korean{--acc:#FF8A3D;--acc-ink:#B54C0E;--acc-soft:#FFEBDC}
body.subj-science{--acc:#22B573;--acc-ink:#0F6E48;--acc-soft:#DDF7EA}
body.subj-social{--acc:#9B72E8;--acc-ink:#5A33B2;--acc-soft:#EEE6FF}
body.subj-english{--acc:#F05C8A;--acc-ink:#A62A54;--acc-soft:#FFE3EC}

.kt2-paper[data-stage="도입"]{--st:#FF8A3D;--st-soft:#FFEBDC}
.kt2-paper[data-stage="전개"]{--st:var(--acc);--st-soft:var(--acc-soft)}
.kt2-paper[data-stage="기본문제"]{--st:#12B886;--st-soft:#DDF7EE}
.kt2-paper[data-stage="응용문제"]{--st:#7C5CFF;--st-soft:#EBE5FF}
.kt2-paper[data-stage="정리"]{--st:#2CB1D6;--st-soft:#DCF3F9}

*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{background:radial-gradient(120% 90% at 50% 110%,#232b37 0%,var(--studio2) 45%,var(--studio) 100%) fixed;color:#e8eef5;font-family:var(--body);overflow:hidden;-webkit-font-smoothing:antialiased}
button{font-family:inherit;cursor:pointer}
button:disabled{opacity:.4;cursor:default}
strong{font-weight:800;color:var(--acc-ink)}

/* ── 무대 = 캔버스 자리 ── */
#kt2-stage{position:fixed;inset:0;overflow:hidden}
/* 캔버스는 화면 정중앙에 절대 배치 — grid 로 두면 행이 1600×900 에 맞춰 커져 화면이 작을 때 아래로 밀린다(2026-09-22 준호 실검수) */
.kt2-canvas{width:1600px;height:900px;position:absolute;left:50%;top:50%;transform-origin:center center;transform:translate(-50%,-50%) scale(1);will-change:transform}
.kt2-paper{position:absolute;inset:0;border-radius:var(--r);background:var(--paper);color:var(--ink);box-shadow:var(--sh);overflow:hidden;
  display:flex;flex-direction:column;padding:56px 84px 48px}
.kt2-paper::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(70% 55% at 100% 0%,color-mix(in srgb,var(--st) 16%,transparent) 0%,transparent 60%),
             radial-gradient(60% 50% at 0% 100%,color-mix(in srgb,var(--acc) 9%,transparent) 0%,transparent 60%)}
.kt2-paper::after{content:"";position:absolute;left:0;right:0;top:0;height:14px;background:linear-gradient(90deg,var(--st),color-mix(in srgb,var(--st) 55%,var(--acc)))}
.kt2-paper.cover{justify-content:center;align-items:center;text-align:center;background:linear-gradient(160deg,color-mix(in srgb,var(--acc) 14%,var(--paper)),var(--paper) 55%,color-mix(in srgb,var(--st) 12%,var(--paper)))}
.kt2-paper.black{background:#000}
.kt2-paper.black > *{visibility:hidden}

.kt2-head{position:relative;z-index:1;display:flex;align-items:center;gap:16px;font-size:24px;color:var(--ink-mut);margin-bottom:22px;min-height:40px}
.kt2-chip{display:inline-flex;align-items:center;gap:8px;padding:6px 18px;border-radius:999px;background:var(--st-soft);color:color-mix(in srgb,var(--st) 75%,#000);font-weight:800;font-size:22px;letter-spacing:.02em}
.kt2-chip::before{content:"";width:12px;height:12px;border-radius:50%;background:var(--st)}
.kt2-kicker{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kt2-head .sp{flex:1}
.kt2-head .kt2-answered{font-size:20px;color:var(--ok);font-weight:800}

.kt2-title{position:relative;z-index:1;font-family:var(--display);font-weight:700;font-size:58px;line-height:1.18;letter-spacing:-.01em;margin:0 0 30px;color:var(--ink);text-wrap:balance}
.kt2-title.small{font-size:46px}
.kt2-title.xs{font-size:38px}
.kt2-title u{text-decoration:none;background:linear-gradient(transparent 62%,color-mix(in srgb,var(--st) 40%,transparent) 62%)}
.kt2-sub{font-size:28px;color:var(--ink-mut);margin:-16px 0 26px;position:relative;z-index:1}

.kt2-body{position:relative;z-index:1;flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:28px;font-size:32px;line-height:1.5;text-align:center}
.kt2-body.top{justify-content:flex-start}
.kt2-body.row{flex-direction:row;flex-wrap:wrap;align-items:stretch}
.kt2-body > *{max-width:100%}
.kt2-foot{position:relative;z-index:1;display:flex;align-items:center;gap:18px;color:var(--ink-mut);font-size:20px;margin-top:18px}
.kt2-foot .sp{flex:1}
.kt2-foot .brand{font-family:var(--display);font-size:20px;color:color-mix(in srgb,var(--acc) 70%,#000)}
.kt2-foot .pg b{color:var(--ink)}
.kt2-progress{height:6px;border-radius:6px;background:var(--line);width:280px;overflow:hidden}
.kt2-progress i{display:block;height:100%;background:var(--st);width:0}

/* fragments */
.frag{transition:opacity .38s ease,transform .38s cubic-bezier(.2,.8,.2,1)}
.frag.hidden{opacity:0;transform:translateY(18px);pointer-events:none}
.frag.just{animation:kt2-in .5s cubic-bezier(.2,.8,.2,1)}
@keyframes kt2-in{from{opacity:0;transform:translateY(22px) scale(.985)}to{opacity:1;transform:none}}
.kt2-paper.enter{animation:kt2-page .42s cubic-bezier(.2,.8,.2,1)}
@keyframes kt2-page{from{opacity:.2;transform:translateX(38px)}to{opacity:1;transform:none}}
.kt2-paper.enter.back{animation-name:kt2-page-b}
@keyframes kt2-page-b{from{opacity:.2;transform:translateX(-38px)}to{opacity:1;transform:none}}

/* ── 공통 조각 ── */
.big-text{font-size:44px;font-weight:700;line-height:1.35;max-width:1300px;text-wrap:balance}
.center-text{font-size:36px;line-height:1.5;max-width:1300px;text-wrap:pretty}
.small-text{font-size:24px;color:var(--ink-mut);max-width:1300px;line-height:1.5}
.card{background:var(--white);border:2px solid var(--line);border-radius:22px;padding:26px 36px;box-shadow:0 8px 24px rgba(28,36,48,.06)}
.big-q{font-size:40px;font-weight:800;line-height:1.4;background:var(--white);border-radius:24px;padding:26px 44px;border:3px solid var(--st);box-shadow:0 10px 30px color-mix(in srgb,var(--st) 18%,transparent);max-width:1360px;text-wrap:balance}
.big-q.soft{border-style:dashed;font-weight:700}
.objective-card{font-size:42px;font-weight:800;line-height:1.45;padding:44px 60px;border-radius:30px;background:linear-gradient(135deg,var(--acc-soft),#fff);border:3px solid var(--acc);max-width:1320px;text-wrap:balance;box-shadow:0 14px 40px color-mix(in srgb,var(--acc) 20%,transparent)}
.objective-card::before{content:"오늘의 목표";display:block;font-size:22px;font-weight:800;letter-spacing:.14em;color:var(--acc-ink);margin-bottom:14px}
.kt2-cover-unit{font-size:30px;font-weight:700;color:var(--acc-ink);letter-spacing:.08em;margin-bottom:22px}
.kt2-cover-title{font-family:var(--display);font-size:88px;line-height:1.16;font-weight:700;max-width:1300px;text-wrap:balance}
.kt2-cover-title .l2{display:block;font-size:.62em;color:var(--ink-mut);margin-top:14px;font-family:var(--body);font-weight:600}
.kt2-cover-emoji{font-size:150px;line-height:1;margin-bottom:26px;filter:drop-shadow(0 12px 24px rgba(0,0,0,.15))}
.kt2-cover-meta{margin-top:40px;display:flex;gap:16px;font-size:24px;color:var(--ink-mut)}
.kt2-cover-meta span{background:var(--white);border:2px solid var(--line);border-radius:999px;padding:8px 22px}

.img-frame{max-height:400px;border-radius:24px;overflow:hidden;box-shadow:0 14px 40px rgba(0,0,0,.18);background:var(--paper2)}
.img-frame img{display:block;max-height:400px;max-width:1200px;object-fit:cover}
.placeholder{width:900px;height:320px;border:4px dashed color-mix(in srgb,var(--acc) 45%,transparent);border-radius:26px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;font-size:32px;color:var(--ink-mut);background:repeating-linear-gradient(45deg,transparent 0 22px,color-mix(in srgb,var(--acc) 6%,transparent) 22px 44px)}
.placeholder small{font-size:22px}

.emoji-row{display:flex;gap:22px;flex-wrap:wrap;justify-content:center;max-width:1300px}
.emoji-row span{font-size:96px;line-height:1;transition:transform .2s}
.emoji-row.count span{font-size:72px}
.emoji-row.count.big span{font-size:100px}
.scene{display:flex;gap:40px;flex-wrap:wrap;justify-content:center}
.kid{display:flex;flex-direction:column;align-items:center;gap:10px;background:var(--white);border-radius:24px;padding:22px 32px;border:2px solid var(--line);min-width:200px}
.kid .face{font-size:88px;line-height:1}
.kid .lbl{font-size:26px;font-weight:700}
.kid .delta{font-size:30px;font-weight:900;color:var(--acc-ink)}
.number-panel{display:flex;gap:14px;flex-wrap:wrap;justify-content:center}
.number-panel span{width:92px;height:92px;display:grid;place-items:center;border-radius:20px;background:var(--white);border:3px solid var(--acc);font-size:44px;font-weight:900;color:var(--acc-ink)}
.teams{display:flex;gap:30px;flex-wrap:wrap;justify-content:center}
.team{background:var(--white);border-radius:22px;padding:20px 30px;border:2px solid var(--line)}
.team-name{font-size:28px;font-weight:800;margin-bottom:8px}

.bidirect{font-size:36px;line-height:1.7;font-weight:600;background:var(--white);border-radius:26px;padding:30px 56px;border:2px solid var(--line);max-width:1300px}
.bidirect .eq{display:block;font-size:52px;color:var(--acc);font-weight:900;line-height:1.1}
.examples{display:flex;flex-wrap:wrap;gap:18px;justify-content:center;max-width:1360px}
.examples .ex{background:var(--white);border:2px solid var(--line);border-radius:18px;padding:18px 30px;font-size:32px;font-weight:600}
.ordinals{display:flex;gap:16px;flex-wrap:wrap;justify-content:center}
.ord{background:var(--white);border:2px solid var(--line);border-radius:18px;padding:14px 22px;display:flex;flex-direction:column;align-items:center;gap:4px;min-width:130px}
.ord b{font-size:40px;color:var(--acc-ink)}
.ord span{font-size:24px;color:var(--ink-mut)}
.points{display:flex;flex-direction:column;gap:16px;align-items:stretch;max-width:1300px;width:100%}
.point{display:flex;gap:20px;align-items:flex-start;text-align:left;font-size:34px;line-height:1.45;background:var(--white);border-radius:20px;padding:18px 30px;border:2px solid var(--line)}
.point i{flex:0 0 auto;width:48px;height:48px;border-radius:50%;background:var(--st);color:#fff;font-style:normal;font-weight:900;display:grid;place-items:center;font-size:24px;margin-top:4px}
.steps{counter-reset:s;display:flex;flex-direction:column;gap:14px;max-width:1300px;width:100%;margin:0;padding:0;list-style:none}
.steps li{counter-increment:s;display:flex;gap:22px;align-items:center;text-align:left;font-size:32px;background:var(--white);border-radius:20px;padding:16px 28px;border:2px solid var(--line)}
.steps li::before{content:counter(s);flex:0 0 auto;width:52px;height:52px;border-radius:16px;background:var(--acc);color:#fff;font-weight:900;display:grid;place-items:center;font-size:28px}
.areas{display:flex;flex-wrap:wrap;gap:16px;justify-content:center}
.areas div{background:var(--acc-soft);color:var(--acc-ink);font-weight:700;border-radius:999px;padding:12px 28px;font-size:28px}
.legend{font-size:22px;color:var(--ink-mut)}

.seq{display:flex;gap:14px;align-items:center;flex-wrap:wrap;justify-content:center}
.seq .c{min-width:96px;height:96px;padding:0 18px;display:grid;place-items:center;border-radius:22px;background:var(--white);border:3px solid var(--line);font-size:46px;font-weight:900}
.seq .c.blank{border-style:dashed;border-color:var(--st);color:var(--st)}
.seq .c.hl{background:var(--st);color:#fff;border-color:var(--st);transform:scale(1.08)}
.seq .a{font-size:34px;color:var(--ink-mut)}
.seq-block{display:flex;flex-direction:column;gap:10px;align-items:center}
.seq-label{font-size:22px;font-weight:800;color:var(--ink-mut);letter-spacing:.06em}
.num-table{border-collapse:separate;border-spacing:0;font-size:32px;background:var(--white);border-radius:22px;overflow:hidden;border:2px solid var(--line)}
.num-table th{background:var(--acc-soft);color:var(--acc-ink);padding:14px 34px;font-size:24px;letter-spacing:.06em}
.num-table td{padding:14px 34px;border-top:1px solid var(--line)}
.num-table td:first-child{font-weight:900;color:var(--acc-ink);font-size:40px}
.tf-row{display:flex;gap:40px;flex-wrap:wrap;justify-content:center;align-items:flex-end}
.tf-item{display:flex;flex-direction:column;align-items:center;gap:12px;background:var(--white);border-radius:24px;padding:22px 30px;border:2px solid var(--line);min-width:200px}
.tf-item.anchor{border-color:var(--st);box-shadow:0 0 0 6px var(--st-soft)}
.tf-num{font-size:60px;font-weight:900;color:var(--acc-ink);line-height:1}
.tf-cap{font-size:26px;font-weight:700}
.tf-strip{display:flex;gap:18px;flex-wrap:wrap;justify-content:center}
.tfs{display:flex;flex-direction:column;align-items:center;gap:6px}
.tfs b{font-size:30px}
svg.tenframe .cell{fill:#fff;stroke:#7d8794;stroke-width:3}
svg.tenframe .cell.on{fill:var(--acc)}
svg.tenframe .cell.on.five{fill:var(--acc)}
svg.tenframe .div{stroke:#7d8794;stroke-width:5;stroke-dasharray:8 6}
.cubes{display:flex;gap:26px;align-items:flex-end;justify-content:center;flex-wrap:wrap}
.stack{display:flex;flex-direction:column-reverse;align-items:center;gap:0}
.stack .cube{width:38px;height:38px;border-radius:6px;background:linear-gradient(135deg,var(--acc),color-mix(in srgb,var(--acc) 70%,#000));border:2px solid #fff;margin-top:-2px;box-shadow:inset 0 -6px 0 rgba(0,0,0,.18)}
.stack .cube:nth-child(5n+1){background:linear-gradient(135deg,#FFB547,#E88A00)}
.stack .lbl{font-size:30px;font-weight:900;margin-top:10px;color:var(--ink)}
.stack.single .cube{width:54px;height:54px}
.dots{display:flex;gap:10px;flex-wrap:wrap;justify-content:center;max-width:600px}
.dots i{width:30px;height:30px;border-radius:50%;background:var(--acc)}
.numline{position:relative;width:1200px;height:150px;margin-top:20px}
.numline .ln{position:absolute;left:0;right:0;top:64px;height:6px;background:#7d8794;border-radius:6px}
.numline .dot{position:absolute;top:56px;width:22px;height:22px;border-radius:50%;background:#fff;border:4px solid #7d8794;transform:translateX(-50%)}
.numline .dot.anchor{background:var(--st);border-color:var(--st);width:32px;height:32px;top:51px}
.numline .dot.active{border-color:var(--acc);background:var(--acc-soft)}
.numline .dot.cur{background:var(--acc);border-color:var(--acc);width:32px;height:32px;top:51px}
.numline .lb{position:absolute;top:96px;transform:translateX(-50%);font-size:30px;font-weight:800}
.numline .ar{position:absolute;top:8px;transform:translateX(-50%);font-size:28px;font-weight:900;color:var(--acc-ink);background:var(--acc-soft);border-radius:999px;padding:2px 14px}
.trace-row{display:flex;gap:40px;flex-wrap:wrap;justify-content:center}
.trace{display:flex;flex-direction:column;align-items:center;gap:8px}
.trace .out{font-size:190px;line-height:1;font-weight:900;color:transparent;-webkit-text-stroke:5px var(--acc);font-family:var(--display)}
.trace .ar{font-size:36px;color:var(--st)}
.trace .lb{font-size:28px;font-weight:700}
.compare-cols{display:flex;gap:30px;align-items:center;justify-content:center}
.cmp{flex:1;max-width:520px;background:var(--white);border:3px solid var(--line);border-radius:24px;padding:36px;font-size:40px;font-weight:700}
.cmp-sep{font-size:38px;font-weight:900;color:var(--st);font-family:var(--display)}
.match-target{display:flex;flex-direction:column;align-items:center;background:var(--st-soft);border-radius:24px;padding:16px 40px}
.match-target span{font-size:22px;font-weight:800;color:var(--ink-mut);letter-spacing:.1em}
.match-target b{font-size:80px;line-height:1;color:color-mix(in srgb,var(--st) 80%,#000)}
.num-cards{display:flex;gap:22px;flex-wrap:wrap;justify-content:center}
.num-cards span,.num-card-big{width:140px;height:180px;display:grid;place-items:center;border-radius:22px;background:var(--white);border:4px solid var(--acc);font-size:80px;font-weight:900;color:var(--acc-ink);box-shadow:0 10px 26px rgba(0,0,0,.12)}
.num-card-big{width:200px;height:260px;font-size:120px}
.scenario{display:flex;gap:30px;align-items:center;text-align:left;background:var(--white);border-radius:26px;padding:30px 40px;border:2px solid var(--line);max-width:1320px;font-size:34px;line-height:1.5}
.scenario .ic{font-size:96px;line-height:1;flex:0 0 auto}
.context-text{font-size:32px;color:var(--ink-mut);max-width:1300px}
.q-list{display:flex;flex-direction:column;gap:18px;width:100%;align-items:center}
.q-list .big-q{font-size:34px;padding:18px 34px}

.answer{display:flex;align-items:center;gap:20px;font-size:30px;font-weight:800;color:var(--ink-mut)}
.answer .box{min-width:150px;height:110px;padding:0 30px;display:grid;place-items:center;border-radius:24px;border:4px dashed var(--st);font-size:60px;font-weight:900;color:var(--st);background:#fff;transition:all .3s}
.answer.on .box{border-style:solid;background:var(--ok-soft);border-color:var(--ok);color:var(--ok)}

.options{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px;width:100%;max-width:1320px}
.options.n1,.options.n3,.options.n5,.options.n6{grid-template-columns:repeat(3,minmax(0,1fr))}
.options.n1{grid-template-columns:minmax(0,640px);justify-content:center}
.opt{display:flex;align-items:center;gap:22px;background:var(--white);border:3px solid var(--line);border-radius:24px;padding:22px 30px;font-size:34px;font-weight:600;text-align:left;transition:all .3s;min-height:100px}
.opt .mk{flex:0 0 auto;width:60px;height:60px;border-radius:50%;background:var(--paper2);color:var(--ink-mut);font-weight:900;display:grid;place-items:center;font-size:30px}
.opt .em{font-size:52px;line-height:1.1}
.opt .nm{font-size:60px;font-weight:900;color:var(--acc-ink)}
.opt.ok{border-color:var(--ok);background:var(--ok-soft);transform:scale(1.02)}
.opt.ok .mk{background:var(--ok);color:#fff}
.options.revealed .opt:not(.ok){opacity:.45}
.multi-hint{font-size:26px;color:var(--ink-mut)}
.multi-hint b{background:var(--st-soft);border-radius:999px;padding:4px 16px;color:color-mix(in srgb,var(--st) 80%,#000)}

.pairs{display:grid;grid-template-columns:1fr auto 1fr;gap:18px 40px;align-items:center;max-width:1100px;width:100%}
.pairs .cell{background:var(--white);border:3px solid var(--line);border-radius:22px;padding:18px 26px;font-size:36px;font-weight:700;min-height:96px;display:grid;place-items:center}
.pairs .cell .em{font-size:60px}
.pairs .cell .nm{font-size:56px;font-weight:900;color:var(--acc-ink)}
.pairs .ar{font-size:36px;color:var(--ink-mut)}
.pairs.revealed .ar{color:var(--ok);font-weight:900}
.pairs .lbl{grid-column:span 3;display:grid;grid-template-columns:1fr auto 1fr;font-size:22px;color:var(--ink-mut);font-weight:800;letter-spacing:.1em;text-align:center}
.pairs.revealed .cell{border-color:var(--ok)}

.mis{display:grid;grid-template-columns:1fr 1fr;gap:30px;width:100%;max-width:1360px}
.mis > div{border-radius:26px;padding:30px 36px;font-size:34px;line-height:1.5;text-align:left;background:var(--white);border:3px solid var(--line)}
.mis .w{border-color:var(--no);background:var(--no-soft)}
.mis .r{border-color:var(--ok);background:var(--ok-soft)}
.mis .h{display:flex;align-items:center;gap:12px;font-size:24px;font-weight:900;letter-spacing:.06em;margin-bottom:12px}
.mis .w .h{color:var(--no)} .mis .r .h{color:var(--ok)}
.mis .h i{font-style:normal;font-size:34px}
.mis-hint{grid-column:span 2;text-align:center;font-size:26px;color:var(--ink-mut)}

.arrow-flow{display:flex;gap:16px;align-items:center;flex-wrap:wrap;justify-content:center;max-width:1400px}
.af{display:flex;flex-direction:column;align-items:center;gap:10px}
.af .n{width:110px;height:110px;border-radius:26px;background:var(--white);border:4px solid var(--acc);display:grid;place-items:center;font-size:54px;font-weight:900;color:var(--acc-ink)}
.af .n.anchor{background:var(--st);border-color:var(--st);color:#fff}
.af .n.up{border-color:var(--ok);color:var(--ok)}
.af .l{font-size:24px;font-weight:700;max-width:200px}
.af-ar{font-size:44px;color:var(--ink-mut)}
.af-pair{display:flex;gap:18px;align-items:center;font-size:34px;font-weight:700;background:var(--white);border-radius:20px;padding:14px 26px;border:2px solid var(--line)}
.af-pair .sd{font-size:46px;font-weight:900;color:var(--acc-ink);min-width:80px}
.af-pair .ar{color:var(--st);font-size:26px}

.sa{display:flex;flex-direction:column;gap:16px;width:100%;max-width:1200px}
.sa .row{display:flex;align-items:center;gap:24px;background:var(--white);border:2px solid var(--line);border-radius:22px;padding:18px 34px;text-align:left}
.sa .row .lb{flex:1;font-size:34px;font-weight:700}
.sa .row .st{display:flex;gap:6px}
.sa .row .st button{border:0;background:none;font-size:46px;line-height:1;color:#d5d8dd;padding:0 2px;transition:transform .15s}
.sa .row .st button.on{color:#F5B942;text-shadow:0 4px 12px rgba(245,185,66,.5)}
.sa .row .st button:active{transform:scale(1.25)}
.sa-prompts{display:flex;flex-direction:column;gap:10px;font-size:30px}

.flipgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px;width:100%;max-width:1380px}
.flipgrid.n2{grid-template-columns:repeat(2,minmax(0,1fr))}
.flipgrid.n4{grid-template-columns:repeat(4,minmax(0,1fr))}
.flip{background:var(--white);border:3px solid var(--line);border-radius:26px;padding:26px 28px;min-height:230px;display:flex;flex-direction:column;justify-content:center;gap:16px;cursor:pointer;transition:all .3s;text-align:center}
.flip .q{font-size:32px;font-weight:700;line-height:1.4}
.flip .a{font-size:30px;color:var(--ink-mut);border-top:2px dashed var(--line);padding-top:14px}
.flip.on{border-color:var(--ok);background:var(--ok-soft)}
.flip.on .a{color:var(--ok);font-weight:900;font-size:36px}
.flip:hover{transform:translateY(-4px);box-shadow:0 14px 30px rgba(0,0,0,.1)}
.signal{display:flex;gap:22px;justify-content:center;width:100%;max-width:1380px;margin-top:6px}
.light{flex:1;display:flex;align-items:center;gap:16px;background:var(--white);border:3px solid var(--line);border-radius:22px;padding:16px 24px;cursor:pointer;user-select:none;text-align:left}
.light .dot{font-size:44px;line-height:1}
.light .lb{flex:1;font-size:26px;font-weight:700;line-height:1.3}
.light .cnt{font-size:44px;font-weight:900;color:var(--acc-ink);min-width:60px;text-align:right}
.light:active{transform:scale(.98)}

.lv-tabs{display:flex;gap:12px;background:var(--paper2);border-radius:999px;padding:8px}
.lv-tabs button{border:0;border-radius:999px;padding:12px 34px;font-size:26px;font-weight:800;background:transparent;color:var(--ink-mut)}
.lv-tabs button.on{background:var(--white);color:var(--ink);box-shadow:0 4px 14px rgba(0,0,0,.12)}
.lv-tabs button.on.기본{color:var(--ok)} .lv-tabs button.on.도전{color:#E88A00} .lv-tabs button.on.심화{color:#7C5CFF}
.lv-body{width:100%;max-width:1560px;background:var(--white);border-radius:28px;padding:36px 46px;border:4px solid var(--line);display:flex;flex-direction:column;gap:22px;align-items:center}
.lv-body.기본{border-color:var(--ok)} .lv-body.도전{border-color:#E88A00} .lv-body.심화{border-color:#7C5CFF}
.lv-q{font-size:40px;font-weight:800;line-height:1.4;text-wrap:balance}
.lv-a{font-size:38px;font-weight:900;color:var(--ok);background:var(--ok-soft);border-radius:18px;padding:14px 34px}
.lv-a.open{color:var(--acc-ink);background:var(--acc-soft);font-weight:700;font-size:32px}
.lv-steps{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;font-size:26px;color:var(--ink-mut)}
.lv-steps span{background:var(--paper2);border-radius:999px;padding:8px 20px}
.lv-steps i{font-style:normal}

.cq-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:22px;width:100%;max-width:1380px;perspective:1600px}
.cq-grid.n3{grid-template-columns:repeat(3,minmax(0,1fr))}
.cq-grid.n2{grid-template-columns:repeat(2,minmax(0,1fr))}
.cq-grid.n6{grid-template-columns:repeat(3,minmax(0,1fr))}
.cq{height:240px;position:relative;cursor:pointer}
.cq .in{position:absolute;inset:0;transition:transform .6s cubic-bezier(.2,.8,.2,1);transform-style:preserve-3d}
.cq.on .in{transform:rotateY(180deg)}
.cq .f{position:absolute;inset:0;backface-visibility:hidden;border-radius:26px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:20px}
.cq .front{background:linear-gradient(145deg,var(--acc),color-mix(in srgb,var(--acc) 70%,#000));color:#fff}
.cq .front .qm{font-size:70px;font-weight:900;line-height:1}
.cq .front .cl{font-size:24px;opacity:.95;line-height:1.35}
.cq .back{background:var(--white);border:4px solid var(--ok);transform:rotateY(180deg)}
.cq .back .em{font-size:80px;line-height:1}
.cq .back .nm{font-size:30px;font-weight:800}
.outro{font-size:30px;color:var(--ink-mut)}

.counter{font-size:26px;color:var(--ink-mut);background:var(--paper2);border-radius:999px;padding:8px 28px}
.counter b{color:var(--ink);font-size:32px}
.cz{font-size:150px;font-weight:900;font-family:var(--display);letter-spacing:.08em;background:var(--white);border-radius:36px;padding:20px 80px;border:5px solid var(--acc);color:var(--acc-ink);min-width:600px;transition:all .3s;line-height:1.2}
.cz.on{border-color:var(--ok);color:var(--ok);background:var(--ok-soft);letter-spacing:.02em;font-size:120px}
.cz-hint{font-size:30px;color:var(--ink-mut)}
.ctrls{display:flex;gap:14px;flex-wrap:wrap;justify-content:center}
.btn{border:0;border-radius:999px;padding:16px 36px;font-size:26px;font-weight:800;background:var(--paper2);color:var(--ink);transition:transform .12s,box-shadow .2s}
.btn:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(0,0,0,.12)}
.btn.main{background:var(--st);color:#fff}
.btn.acc{background:var(--acc);color:#fff}
.btn.ghost{background:transparent;border:2px solid var(--line)}

.pr-card{width:760px;min-height:300px;border-radius:32px;background:var(--white);border:4px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;transition:all .3s}
.pr-card.on{border-color:var(--st);box-shadow:0 20px 50px color-mix(in srgb,var(--st) 25%,transparent)}
.pr-card .pl{font-size:26px;color:var(--ink-mut);font-weight:700;letter-spacing:.08em}
.pr-card .nm{font-size:110px;font-weight:900;font-family:var(--display);line-height:1.1;color:var(--ink)}
.pr-card .nm.pop{animation:kt2-pop .55s cubic-bezier(.2,.8,.2,1)}
@keyframes kt2-pop{0%{transform:scale(.4);opacity:0}70%{transform:scale(1.12)}100%{transform:scale(1);opacity:1}}
.pr-card .hint{font-size:24px;color:var(--ink-mut)}
.pr-end{font-size:60px;font-weight:900;font-family:var(--display)}

.ra-frame{width:1000px;height:360px}
.ra-frame .placeholder{width:100%;height:100%}
.ra-quote{font-size:36px;line-height:1.55;max-width:1200px;font-weight:600;background:var(--white);border-left:10px solid var(--st);padding:18px 34px;border-radius:0 22px 22px 0;text-align:left}
.dotsnav{display:flex;gap:10px;align-items:center}
.dotsnav i{width:14px;height:14px;border-radius:50%;background:var(--line)}
.dotsnav i.on{background:var(--st);transform:scale(1.3)}
.copyright{font-size:20px;color:var(--ink-mut)}

.i-tf{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;padding:14px;background:var(--white);border-radius:22px;border:3px solid var(--line)}
.i-tf div{width:92px;height:92px;border-radius:16px;border:3px solid #b6bec8;cursor:pointer;transition:all .15s;background:#fff}
.i-tf div.on{background:var(--acc);border-color:var(--acc);transform:scale(.96)}
.i-tf div:nth-child(5){margin-right:12px}.i-tf div:nth-child(10){margin-right:12px}
.i-num{font-size:100px;font-weight:900;color:var(--acc-ink);line-height:1;font-family:var(--display)}
.i-cube-area{min-height:300px;display:flex;align-items:flex-end}
.i-cube-area .stack .cube{width:64px;height:64px;cursor:pointer}
.i-cards{display:flex;gap:22px;flex-wrap:wrap;justify-content:center}
.i-card{width:150px;height:190px;display:grid;place-items:center;border-radius:24px;background:var(--white);border:4px solid var(--acc);font-size:84px;font-weight:900;color:var(--acc-ink);cursor:pointer;transition:transform .2s,box-shadow .2s;box-shadow:0 10px 26px rgba(0,0,0,.12);user-select:none}
.i-card.sel{transform:translateY(-16px) scale(1.06);border-color:var(--st);box-shadow:0 20px 40px color-mix(in srgb,var(--st) 35%,transparent)}
.i-card.ok{border-color:var(--ok);background:var(--ok-soft);color:var(--ok)}
.success{font-size:40px;font-weight:900;color:var(--ok);background:var(--ok-soft);border-radius:22px;padding:16px 40px;animation:kt2-pop .5s}

.offline{width:100%;max-width:1360px;background:var(--white);border-radius:30px;border:3px solid var(--line);padding:34px 46px;display:flex;flex-direction:column;gap:20px;text-align:left}
.offline .tag{display:inline-flex;align-self:flex-start;background:var(--st-soft);color:color-mix(in srgb,var(--st) 80%,#000);border-radius:999px;padding:8px 22px;font-size:24px;font-weight:800}
.offline .goal{font-size:32px;font-weight:800}
.offline .body{font-size:32px;line-height:1.5}
.offline .mats{display:flex;gap:10px;flex-wrap:wrap;align-items:center;font-size:24px;color:var(--ink-mut)}
.offline .mats span{background:var(--paper2);border-radius:999px;padding:6px 18px;color:var(--ink)}
.offline .mats .lb{font-weight:800}
/* 29차: 1인 대체 흐름 — 혼자서도 돌아가는 활동(방향 결정 ③) */
.offline .solo{display:flex;gap:8px;flex-wrap:wrap;align-items:center;font-size:22px;color:var(--ink);background:#EEF4FF;border:2px dashed #9DB7E8;border-radius:16px;padding:8px 14px}
.offline .solo .lb{font-weight:800;color:#2F5DA8;margin-right:4px}
.offline .solo i{font-style:normal;color:#9DB7E8;font-weight:800}
.offline .ic{position:absolute;right:50px;top:40px;font-size:90px;line-height:1;opacity:.9}
.offline{position:relative}
.offline .steps li{font-size:30px}

.klab-frame{width:100%;height:100%;min-height:560px;background:var(--white);border-radius:24px;border:3px solid var(--line);overflow:hidden}
.legacy{max-width:1100px;background:var(--white);border:3px dashed var(--acc);border-radius:26px;padding:40px;display:flex;flex-direction:column;gap:14px;align-items:center}
.legacy .t{font-size:34px;font-weight:800}
.legacy .d{font-size:26px;color:var(--ink-mut)}

/* ═══════════════ HUD (교사 도구) ═══════════════ */
#hud{position:fixed;left:50%;bottom:22px;transform:translateX(-50%);display:flex;align-items:center;gap:6px;padding:8px 10px;border-radius:999px;background:rgba(20,25,32,.86);backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.12);box-shadow:0 20px 50px rgba(0,0,0,.5);z-index:50;transition:opacity .35s,transform .35s;font-size:14px}
#hud.hide{opacity:0;transform:translate(-50%,24px);pointer-events:none}
#hud .sep{width:1px;height:26px;background:rgba(255,255,255,.14);margin:0 4px}
#hud button{border:0;background:transparent;color:#dfe6ef;border-radius:999px;padding:8px 12px;font-size:14px;font-weight:700;display:flex;align-items:center;gap:6px;white-space:nowrap;transition:background .15s}
#hud button:hover{background:rgba(255,255,255,.1)}
#hud button.on{background:var(--acc);color:#fff}
#hud button.nav{font-size:18px;padding:6px 14px}
#hud .pg{color:#9fb0c3;font-weight:700;padding:0 6px;font-variant-numeric:tabular-nums;min-width:74px;text-align:center}
#hud .pg b{color:#fff}
#hud .stg{display:flex;gap:3px;align-items:center;padding:0 6px}
#hud .stg i{display:block;height:8px;border-radius:4px;background:rgba(255,255,255,.14);position:relative;overflow:hidden;cursor:pointer}
#hud .stg i::after{content:"";position:absolute;left:0;top:0;bottom:0;width:var(--p,0%);background:var(--c)}
#hud .stg i.cur{outline:2px solid #fff;outline-offset:2px}
#hud .clock{color:#9fb0c3;font-weight:800;font-variant-numeric:tabular-nums;padding:0 8px;cursor:pointer}
#hud .clock.over{color:var(--no)}
#hud kbd{font:600 10px/1 var(--body);background:rgba(255,255,255,.12);border-radius:4px;padding:2px 4px;color:#b8c4d2}

#hud-top{position:fixed;top:16px;left:18px;right:18px;display:flex;align-items:center;gap:12px;z-index:50;transition:opacity .35s;font-size:14px;color:#b8c4d2;pointer-events:none}
#hud-top.hide{opacity:0}
#hud-top > *{pointer-events:auto}
#hud-top .home{border:1px solid rgba(255,255,255,.14);background:rgba(20,25,32,.7);color:#dfe6ef;border-radius:999px;padding:8px 16px;font-weight:700;backdrop-filter:blur(10px)}
#hud-top .home:hover{background:rgba(255,255,255,.12)}
#hud-top .ttl{font-weight:700;color:#e8eef5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:rgba(20,25,32,.55);border-radius:999px;padding:8px 16px;backdrop-filter:blur(10px)}
#hud-top .sp{flex:1}

/* 오버레이 공통 */
.ov{position:fixed;inset:0;z-index:60;display:none;align-items:center;justify-content:center;background:rgba(6,9,14,.72);backdrop-filter:blur(8px)}
.ov.on{display:flex}
.ov .panel{background:#151b24;border:1px solid rgba(255,255,255,.12);border-radius:24px;color:#e8eef5;box-shadow:0 40px 100px rgba(0,0,0,.6);max-width:min(1100px,92vw);max-height:88vh;overflow:auto;padding:26px 28px;animation:kt2-in .3s}
.ov h3{margin:0 0 16px;font-family:var(--display);font-weight:700;font-size:22px;display:flex;align-items:center;gap:12px}
.ov h3 .sp{flex:1}
.ov .x{border:0;background:rgba(255,255,255,.08);color:#fff;border-radius:999px;width:36px;height:36px;font-size:18px}
.ov .btn{font-size:15px;padding:10px 18px;background:rgba(255,255,255,.1);color:#fff}
.ov .btn.main{background:var(--acc)}

/* 목차 */
#ov-toc .panel{width:1000px}
.toc{display:flex;flex-direction:column;gap:6px}
.toc .stg-l{margin:14px 0 6px;font-size:12px;letter-spacing:.14em;color:#8fa3b8;font-weight:800;display:flex;align-items:center;gap:8px}
.toc .stg-l i{width:10px;height:10px;border-radius:50%;background:var(--c)}
.toc .it{display:grid;grid-template-columns:34px 44px 1fr auto;align-items:center;gap:12px;padding:8px 12px;border-radius:12px;cursor:pointer;color:#dfe6ef}
.toc .it:hover{background:rgba(255,255,255,.06)}
.toc .it.cur{background:rgba(79,141,247,.2);outline:1px solid var(--acc)}
.toc .it.skip{opacity:.4;text-decoration:line-through}
.toc .it .n{color:#8fa3b8;font-weight:800;font-variant-numeric:tabular-nums}
.toc .it .b{font-size:11px;background:rgba(255,255,255,.1);border-radius:6px;padding:3px 7px;font-weight:700;color:#b8c4d2}
.toc .it .t{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}
.toc .it .ck{width:22px;height:22px;border-radius:6px;border:2px solid rgba(255,255,255,.3);display:grid;place-items:center;font-size:13px}
.toc .it.on .ck{background:var(--ok);border-color:var(--ok)}

/* 자료 서랍 */
#ov-res{justify-content:flex-end;align-items:stretch;background:rgba(6,9,14,.35)}
#ov-res .panel{width:460px;max-width:92vw;max-height:none;border-radius:0;height:100%;animation:kt2-slide .3s}
@keyframes kt2-slide{from{transform:translateX(60px);opacity:0}to{transform:none;opacity:1}}
.res-filter{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.res-filter button{border:1px solid rgba(255,255,255,.14);background:transparent;color:#b8c4d2;border-radius:999px;padding:5px 12px;font-size:12px;font-weight:700}
.res-filter button.on{background:var(--acc);border-color:var(--acc);color:#fff}
.res-sec{font-size:11px;letter-spacing:.14em;color:#8fa3b8;font-weight:800;margin:14px 0 8px}
.res{display:flex;gap:12px;padding:12px;border-radius:14px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.03);margin-bottom:8px;cursor:pointer;transition:background .15s}
.res:hover{background:rgba(255,255,255,.08)}
.res .ic{font-size:24px;flex:0 0 auto}
.res .t{font-weight:700;font-size:14px;line-height:1.3;color:#fff}
.res .d{font-size:12px;color:#9fb0c3;line-height:1.4;margin-top:4px}
.res .m{font-size:11px;color:#8fa3b8;margin-top:6px;display:flex;gap:8px;flex-wrap:wrap}
.res .m span{background:rgba(255,255,255,.08);border-radius:5px;padding:2px 6px}
.res .m .no{color:var(--warn)}
.res .m .tch{color:#c7b3ff}
.res.fit{border-color:color-mix(in srgb,var(--acc) 60%,transparent)}

/* 영상·링크 오버레이 */
#ov-media .panel{width:min(1400px,94vw);padding:16px}
#ov-media .frame{width:100%;aspect-ratio:16/9;background:#000;border-radius:14px;overflow:hidden}
#ov-media iframe{width:100%;height:100%;border:0}
#ov-media .bar{display:flex;gap:10px;align-items:center;margin-top:12px;color:#b8c4d2;font-size:13px}
#ov-media .bar .sp{flex:1}
#ov-media .bar a{color:#fff;text-decoration:none;background:rgba(255,255,255,.1);padding:8px 14px;border-radius:999px;font-weight:700}

/* 타이머 */
#ov-timer{background:rgba(6,9,14,.6)}
#ov-timer .panel{width:560px;text-align:center;padding:30px}
.timer-ring{width:340px;height:340px;margin:0 auto 16px;position:relative}
.timer-ring svg{width:100%;height:100%;transform:rotate(-90deg)}
.timer-ring circle{fill:none;stroke-width:22}
.timer-ring .bg{stroke:rgba(255,255,255,.1)}
.timer-ring .fg{stroke:var(--acc);stroke-linecap:round;transition:stroke-dashoffset 1s linear,stroke .3s}
.timer-ring.warn .fg{stroke:var(--warn)} .timer-ring.done .fg{stroke:var(--no)}
.timer-ring .t{position:absolute;inset:0;display:grid;place-items:center;font-size:88px;font-weight:900;font-variant-numeric:tabular-nums;font-family:var(--display)}
.timer-ring.done .t{color:var(--no);animation:kt2-blink 1s infinite}
@keyframes kt2-blink{50%{opacity:.35}}
.timer-presets{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-bottom:12px}
.timer-ctl{display:flex;gap:8px;justify-content:center}
.timer-mini{position:fixed;top:64px;right:20px;z-index:55;background:rgba(20,25,32,.86);border:1px solid rgba(255,255,255,.12);border-radius:999px;padding:8px 18px;font-size:22px;font-weight:900;font-variant-numeric:tabular-nums;color:#fff;display:none;cursor:pointer;backdrop-filter:blur(10px)}
.timer-mini.on{display:block}
.timer-mini.warn{color:var(--warn)} .timer-mini.done{color:var(--no);animation:kt2-blink 1s infinite}

/* 뽑기 */
#ov-pick .panel{width:640px;text-align:center}
.pick-name{font-size:96px;font-weight:900;font-family:var(--display);min-height:140px;display:grid;place-items:center;color:#fff}
.pick-name.spin{color:#8fa3b8}
.pick-name.pop{animation:kt2-pop .55s}
.pick-left{color:#8fa3b8;font-size:14px;margin:8px 0 14px}
.pick-list{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;max-height:120px;overflow:auto;margin-bottom:12px}
.pick-list span{font-size:12px;background:rgba(255,255,255,.08);border-radius:6px;padding:3px 8px;color:#b8c4d2}
.pick-list span.done{opacity:.35;text-decoration:line-through}
.pick-set{display:flex;gap:8px;margin-top:12px}
.pick-set textarea{flex:1;height:70px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:10px;color:#fff;padding:8px;font:inherit;font-size:13px;resize:none}

/* 점수판 */
#ov-score .panel{width:820px}
.score-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.sc{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);border-radius:18px;padding:14px;text-align:center}
.sc input{width:100%;background:transparent;border:0;color:#fff;font:800 15px var(--body);text-align:center;border-bottom:1px dashed rgba(255,255,255,.2);padding:4px}
.sc .v{font-size:56px;font-weight:900;font-family:var(--display);margin:6px 0;color:#fff}
.sc .v.lead{color:#FFD166}
.sc .b{display:flex;gap:6px;justify-content:center}
.sc .b button{border:0;border-radius:999px;width:44px;height:36px;font-size:18px;font-weight:900;background:rgba(255,255,255,.1);color:#fff}
.sc .b button.p{background:var(--ok)}
.score-top{display:flex;gap:8px;margin-bottom:12px;align-items:center}
.score-top .sp{flex:1}
.score-mini{position:fixed;top:64px;left:20px;z-index:55;display:none;gap:6px;flex-wrap:wrap;max-width:60vw}
.score-mini.on{display:flex}
.score-mini span{background:rgba(20,25,32,.86);border:1px solid rgba(255,255,255,.12);border-radius:999px;padding:6px 14px;font-size:15px;font-weight:800;color:#fff;backdrop-filter:blur(10px)}
.score-mini span b{color:#FFD166;font-size:18px;margin-left:6px}

/* 펜 */
#pen{position:absolute;inset:0;z-index:5;display:none;cursor:crosshair;touch-action:none}
#pen.on{display:block}
#pen-bar{position:fixed;top:64px;left:50%;transform:translateX(-50%);z-index:55;display:none;gap:6px;background:rgba(20,25,32,.86);border:1px solid rgba(255,255,255,.12);border-radius:999px;padding:6px 10px;backdrop-filter:blur(10px)}
#pen-bar.on{display:flex}
#pen-bar button{border:0;background:transparent;color:#fff;border-radius:999px;padding:6px 10px;font-size:13px;font-weight:700}
#pen-bar button.c{width:30px;height:30px;padding:0;border:3px solid transparent}
#pen-bar button.c.on{border-color:#fff}
#pen-bar button.on:not(.c){background:rgba(255,255,255,.14)}

/* 스포트라이트 */
#spot{position:fixed;inset:0;z-index:40;display:none;pointer-events:none;background:radial-gradient(circle var(--r,220px) at var(--x,50%) var(--y,50%),transparent 0,transparent calc(var(--r,220px) - 2px),rgba(4,6,10,.86) calc(var(--r,220px) + 30px))}
#spot.on{display:block}

/* 발문 띠 */
#tnote{position:fixed;left:50%;bottom:86px;transform:translateX(-50%);z-index:45;display:none;max-width:min(1100px,90vw);background:rgba(20,25,32,.92);border:1px solid rgba(255,255,255,.14);border-radius:18px;padding:12px 18px;color:#fff;font-size:15px;line-height:1.5;backdrop-filter:blur(12px);gap:14px;align-items:flex-start}
#tnote.on{display:flex}
#tnote .lb{font-size:11px;letter-spacing:.14em;color:#8fa3b8;font-weight:800;white-space:nowrap;padding-top:4px}
#tnote .ask{font-weight:700}
#tnote .ask div::before{content:"❝ ";color:var(--acc)}
#tnote .watch{color:#c7d3e0;font-size:13px;margin-top:4px}
#tnote .min{color:#FFD166;font-weight:800;font-size:12px;white-space:nowrap;padding-top:4px}
#tnote .none{color:#8fa3b8}

/* 도움말 */
#ov-help .panel{width:720px}
.keys{display:grid;grid-template-columns:1fr 1fr;gap:6px 24px;font-size:14px}
.keys div{display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid rgba(255,255,255,.06);color:#c7d3e0}
.keys kbd{font:700 12px var(--body);background:rgba(255,255,255,.12);border-radius:5px;padding:3px 8px;color:#fff;min-width:40px;text-align:center}

/* 토스트 */
#toast{position:fixed;top:20px;left:50%;transform:translateX(-50%) translateY(-10px);z-index:70;background:rgba(20,25,32,.92);border:1px solid rgba(255,255,255,.14);color:#fff;border-radius:999px;padding:10px 20px;font-size:14px;font-weight:700;opacity:0;transition:all .25s;pointer-events:none}
#toast.on{opacity:1;transform:translateX(-50%)}

/* ═══════════════ 2차 — 움직임·연출 층 (2026-09-22) ═══════════════
   원칙: 데이터 무개변. 부품마다 「등장」 연출 하나, 정답에 「축하」 하나, 그 밖엔 정적.
   body.still 이면 전부 끈다(HUD 🎬 / 키 0). prefers-reduced-motion 도 끈다.       */
.kt2-paper .anim [style*="--i"]{animation-delay:calc(var(--i) * var(--stg,70ms))}
.anim svg.tenframe .cell.on{animation:kt2-cell .5s cubic-bezier(.2,.8,.2,1) both;transform-box:fill-box;transform-origin:center}
@keyframes kt2-cell{0%{transform:scale(0);opacity:0}60%{transform:scale(1.18)}100%{transform:scale(1);opacity:1}}
.anim .emoji-row span{animation:kt2-pop-in .55s cubic-bezier(.2,.9,.2,1.2) both;display:inline-block}
@keyframes kt2-pop-in{0%{transform:scale(0) rotate(-12deg);opacity:0}70%{transform:scale(1.15) rotate(3deg)}100%{transform:none;opacity:1}}
.anim .stack .cube{animation:kt2-drop .45s cubic-bezier(.2,.8,.2,1) both}
@keyframes kt2-drop{0%{transform:translateY(-60px) scale(.6);opacity:0}70%{transform:translateY(4px)}100%{transform:none;opacity:1}}
.anim .stack .lbl{animation:kt2-pop .5s both}
.anim .seq .c,.anim .num-cards span,.anim .number-panel span,.anim .num-card-big{animation:kt2-slide-up .5s cubic-bezier(.2,.8,.2,1) both}
.anim .seq .a{animation:kt2-fade .4s both}
@keyframes kt2-slide-up{0%{transform:translateY(28px);opacity:0}100%{transform:none;opacity:1}}
@keyframes kt2-fade{0%{opacity:0}100%{opacity:1}}
.seq .c.blank{animation:kt2-pulse 1.6s ease-in-out infinite}
@keyframes kt2-pulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb,var(--st) 45%,transparent)}50%{box-shadow:0 0 0 14px transparent}}
.anim .opt,.anim .point,.anim .steps li,.anim .ex,.anim .ord,.anim .tf-item,.anim .tfs,.anim .flip,.anim .cq,.anim .kid,.anim .af,.anim .pairs .cell,.anim .areas div,.anim .sa .row,.anim .light,.anim .team,.anim .trace{animation:kt2-slide-up .5s cubic-bezier(.2,.8,.2,1) both}
.anim .af-ar,.anim .pairs .ar{animation:kt2-fade .5s both}
.anim .big-q{animation:kt2-q .6s cubic-bezier(.2,.9,.2,1.1) both}
@keyframes kt2-q{0%{transform:scale(.92);opacity:0}100%{transform:none;opacity:1}}
.anim .objective-card{animation:kt2-q .7s cubic-bezier(.2,.9,.2,1.1) both}
.anim .scenario{animation:kt2-slide-up .5s both}
.anim .scenario .ic{animation:kt2-bob 2.4s ease-in-out .5s infinite}
@keyframes kt2-bob{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-8px) rotate(3deg)}}
.anim .numline .dot{animation:kt2-dot-in .4s both}
@keyframes kt2-dot-in{0%{transform:translateX(-50%) scale(0);opacity:0}70%{transform:translateX(-50%) scale(1.15)}100%{transform:translateX(-50%);opacity:1}}
.anim .numline .dot.anchor,.anim .numline .dot.cur{animation:kt2-bounce .8s .5s both}
@keyframes kt2-bounce{0%{transform:translate(-50%,0)}35%{transform:translate(-50%,-40px)}55%{transform:translate(-50%,0)}75%{transform:translate(-50%,-14px)}100%{transform:translate(-50%,0)}}
.numline .dot{transform:translateX(-50%)}
.anim .numline .ar{animation:kt2-slide-up .5s .7s both}
.anim .trace .out{animation:kt2-draw 1.4s ease both}
@keyframes kt2-draw{0%{-webkit-text-stroke-color:transparent;opacity:0}100%{opacity:1}}
.anim .num-table tr{animation:kt2-fade .4s both}
.anim .bidirect{animation:kt2-q .6s both}
.anim .cz{animation:kt2-q .5s both}
.anim .kt2-cover-emoji{animation:kt2-float 3s ease-in-out infinite}
@keyframes kt2-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-16px)}}
.anim .kt2-cover-title{animation:kt2-slide-up .7s .1s both}
.anim .kt2-cover-unit{animation:kt2-fade .6s both}
.anim .kt2-cover-meta{animation:kt2-fade .6s .5s both}
.kt2-title.anim{animation:kt2-title .55s cubic-bezier(.2,.8,.2,1) both}
@keyframes kt2-title{0%{transform:translateX(-20px);opacity:0}100%{transform:none;opacity:1}}
.anim .mis-card.w{animation:kt2-shake .7s .15s both}
@keyframes kt2-shake{0%,100%{transform:none}20%{transform:translateX(-10px) rotate(-1deg)}40%{transform:translateX(10px) rotate(1deg)}60%{transform:translateX(-6px)}80%{transform:translateX(6px)}}
.anim .mis-card.r{animation:kt2-pop .6s both}
.anim .mis-card .h i{display:inline-block;animation:kt2-pop .5s .3s both}

/* 인물 장면: 말풍선 */
.kid{position:relative}
.kid .bub{position:relative;background:var(--white);border:3px solid var(--acc);border-radius:22px;padding:14px 22px;font-size:28px;font-weight:700;line-height:1.35;max-width:460px;margin-bottom:12px;text-wrap:balance;word-break:keep-all;overflow-wrap:break-word}
.kid .bub::after{content:"";position:absolute;left:50%;bottom:-16px;width:26px;height:26px;background:var(--white);border-right:3px solid var(--acc);border-bottom:3px solid var(--acc);transform:translateX(-50%) rotate(45deg)}
.kid.talk{background:transparent;border:0;padding:6px 10px}
.kid.talk .face{animation:kt2-bob 3s ease-in-out infinite}
.kid.talk .who{font-size:22px;color:var(--ink-mut);font-weight:700}
.anim .kid .bub{animation:kt2-pop-in .5s cubic-bezier(.2,.9,.2,1.15) both;transform-origin:50% 100%}

/* 오개념 두 칸(조각) */
.mis-card{width:600px;border-radius:26px;padding:30px 36px;font-size:34px;line-height:1.5;text-align:left;background:var(--white);border:3px solid var(--line)}
.mis-card.w{border-color:var(--no);background:var(--no-soft)}
.mis-card.r{border-color:var(--ok);background:var(--ok-soft)}
.mis-card .h{display:flex;align-items:center;gap:12px;font-size:24px;font-weight:900;letter-spacing:.06em;margin-bottom:12px}
.mis-card.w .h{color:var(--no)} .mis-card.r .h{color:var(--ok)}
.mis-card .h i{font-style:normal;font-size:34px}
.mis-hint{width:100%;text-align:center;font-size:26px;color:var(--ink-mut)}

/* 정답 축하 */
.answer.on .box{animation:kt2-flip .6s cubic-bezier(.2,.8,.2,1) both}
@keyframes kt2-flip{0%{transform:rotateX(90deg);opacity:0}60%{transform:rotateX(-12deg)}100%{transform:none;opacity:1}}
.options.revealed .opt.ok{animation:kt2-win .7s cubic-bezier(.2,.9,.2,1.1) both}
@keyframes kt2-win{0%{transform:scale(1)}40%{transform:scale(1.08)}100%{transform:scale(1.02)}}
.options.revealed .opt.ok .mk{animation:kt2-pop .5s .2s both}
.pairs.revealed .ar{animation:kt2-pop .45s both}
.lv-a{animation:kt2-flip .55s both}
.flip.on .a{animation:kt2-flip .5s both}
.cz.on{animation:kt2-win .6s both}
.success{animation:kt2-pop .6s both}
#fx{position:absolute;inset:0;z-index:6;pointer-events:none}

/* 누르면 크게 보기(TV 강조) */
.kt2-body .zoomable{cursor:zoom-in;transition:transform .3s cubic-bezier(.2,.8,.2,1),box-shadow .3s}
.kt2-body .zoomed{transform:scale(1.22);z-index:3;box-shadow:0 24px 60px rgba(0,0,0,.25);cursor:zoom-out;position:relative}

/* 연출 끔 */
body.still .kt2-paper *,body.still .kt2-paper{animation:none!important;transition:none!important}
@media (prefers-reduced-motion:reduce){.kt2-paper *{animation:none!important}}

/* ═══════════════ 3차 — 편집 층(우리 반 판) · 학년 등급 · 7요소 (2026-09-22) ═══════════════ */
/* 디자인 헌법 학년별 3단계: 저(1~2)·중(3~4)·고(5~6) — 크기·둥글기·종이 온도 */
body.tier-low{--r:38px;--paper:#fffaf1;--paper2:#f6efdf}
body.tier-low .kt2-body{zoom:1.06}
body.tier-low .card,body.tier-low .big-q,body.tier-low .opt,body.tier-low .flip,body.tier-low .point,body.tier-low .steps li{border-radius:30px}
body.tier-mid{--r:28px}
body.tier-high{--r:20px;--paper:#f8f9fc;--paper2:#eef0f5}
body.tier-high .kt2-body{zoom:.95}
body.tier-high .kt2-title{letter-spacing:-.02em}
body.tier-high .card,body.tier-high .big-q,body.tier-high .opt,body.tier-high .flip,body.tier-high .point,body.tier-high .steps li{border-radius:16px}

/* 편집 모드 */
body.editing .kt2-paper{outline:6px dashed color-mix(in srgb,var(--acc) 55%,transparent);outline-offset:-6px}
body.editing .editable{outline:2px dashed color-mix(in srgb,var(--acc) 40%,transparent);outline-offset:4px;border-radius:8px;cursor:text;min-width:40px}
body.editing .editable:hover,body.editing .editable:focus{outline-color:var(--acc);background:color-mix(in srgb,var(--acc) 6%,transparent)}
body.editing .frag.hidden{opacity:.35;transform:none;pointer-events:auto}
body.editing .drop{cursor:pointer;outline:4px dashed var(--acc);outline-offset:6px}
.kt2-paper.dragover{box-shadow:0 0 0 12px color-mix(in srgb,var(--acc) 40%,transparent),var(--sh)}
.edit-bar{position:absolute;left:84px;right:84px;bottom:100px;z-index:4;display:flex;gap:10px;align-items:center;background:rgba(28,36,48,.92);color:#fff;border-radius:999px;padding:10px 14px 10px 18px;font-size:20px;backdrop-filter:blur(8px)}
.edit-bar button{border:0;border-radius:999px;background:var(--acc);color:#fff;font-weight:800;font-size:20px;padding:10px 20px}
.edit-bar .note{flex:1;text-align:right;font-size:17px;color:#b8c4d2}
.img-frame.user img{max-height:420px}
#tnote textarea{width:560px;height:84px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.16);border-radius:10px;color:#fff;padding:8px 10px;font:inherit;font-size:14px;resize:vertical}
#tnote .btn{font-size:14px;padding:8px 16px;background:var(--acc);color:#fff;align-self:flex-start}

/* 목차 확장: 7요소·이동·추가 */
#ov-toc .seven{display:flex;gap:6px;flex-wrap:wrap;margin:-6px 0 12px;align-items:center}
#ov-toc .seven span{font-size:11px;font-weight:800;border-radius:6px;padding:4px 8px;background:rgba(255,255,255,.06);color:#6f7f92;border:1px solid rgba(255,255,255,.08)}
#ov-toc .seven span.on{background:rgba(18,184,134,.18);color:#4ee0b0;border-color:rgba(18,184,134,.35)}
#ov-toc .seven .sum{margin-left:auto;background:transparent;border:0;color:#fff;font-size:13px}
#ov-toc .toc-tools{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-bottom:10px;padding-bottom:12px;border-bottom:1px solid rgba(255,255,255,.08)}
#ov-toc .toc-tools .sp{flex:1}
#ov-toc .toc-tools .btn{font-size:12px;padding:7px 12px}
.toc .it{grid-template-columns:34px 44px 1fr auto auto}
.toc .it .mv{display:flex;gap:2px;opacity:0;transition:opacity .15s}
.toc .it:hover .mv{opacity:1}
.toc .it .mv button{border:0;background:rgba(255,255,255,.1);color:#fff;border-radius:6px;width:26px;height:24px;font-size:11px}
.toc .it.added .t{color:#FFD166}
.toc .it .t em{font-style:normal;color:#FFD166;font-size:12px}

/* ═══════════════ 4차 — 그림 층 (2026-09-22) ═══════════════ */
/* 그림책 무대 위 인물 장면 */
.picture{position:relative;width:1300px;max-width:100%;border-radius:28px;overflow:hidden;box-shadow:0 18px 50px rgba(0,0,0,.16);background:#DFF3FF}
/* 17차 — 무대는 내용 높이만큼 자란다(말풍선이 무대 위로 잘리던 것). 그림은 뒤에 깔고(slice·바닥 기준) 인물 줄이 높이를 정한다. */
.picture{min-height:400px;display:flex;flex-direction:column;justify-content:flex-end}
.picture .bd{position:absolute;inset:0;display:block;width:100%;height:100%}
.picture .scene{position:relative;padding:34px 24px 22px;justify-content:space-evenly;gap:20px;align-items:flex-end}
.picture .kid{background:rgba(255,255,255,.55);backdrop-filter:blur(2px);border-color:rgba(255,255,255,.7)}
.picture .kid.talk{background:transparent;backdrop-filter:none;border:0}
.picture .kid .face{filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.picture .kid .bub{box-shadow:0 8px 24px rgba(0,0,0,.14)}
.picture .kid .who{background:rgba(255,255,255,.8);border-radius:999px;padding:2px 14px}
.picture.night .kid .who{background:rgba(255,255,255,.9)}
.picture .kid .lbl{background:rgba(255,255,255,.85);border-radius:14px;padding:4px 14px}
/* 사진이 없을 때 = 장면 무대 */
.img-frame.illus{width:1200px;max-width:100%;background:transparent;max-height:none}
.img-frame.illus .bd{display:block;width:100%;height:auto;max-height:400px}
.anim .img-frame.illus{animation:kt2-q .7s both}
/* 십 배열판 칩 */
svg.tenframe.chips .board{fill:var(--paper2);stroke:var(--line);stroke-width:2}
svg.tenframe.chips .cell{fill:#fff;stroke:#c9d0d8;stroke-width:2.5}
svg.tenframe.chips .chip .c{fill:var(--acc)}
svg.tenframe.chips .chip.b .c{fill:#FF9F43}
svg.tenframe.chips .chip .sh{fill:rgba(0,0,0,.22)}
svg.tenframe.chips .chip .hi{fill:rgba(255,255,255,.75)}
svg.tenframe.chips .div{stroke:#7d8794;stroke-width:5;stroke-dasharray:8 6}
.anim .tenframe .chip{animation:kt2-chip .5s cubic-bezier(.2,.9,.2,1.2) both;transform-box:fill-box;transform-origin:center}
@keyframes kt2-chip{0%{transform:scale(0) translateY(-20px);opacity:0}70%{transform:scale(1.15)}100%{transform:none;opacity:1}}
/* 연결 모형 = 입체 큐브 */
.stack .cube{position:relative;border:0;border-radius:4px;margin-top:0;box-shadow:inset 0 -5px 0 rgba(0,0,0,.18),inset 0 3px 0 rgba(255,255,255,.35)}
.stack .cube::before{content:"";position:absolute;left:0;right:0;top:-9px;height:9px;background:rgba(255,255,255,.55);transform:skewX(-45deg);transform-origin:bottom left;border-radius:3px 3px 0 0}
.stack .cube::after{content:"";position:absolute;top:-9px;bottom:0;right:-9px;width:9px;background:rgba(0,0,0,.28);transform:skewY(-45deg);transform-origin:bottom left;border-radius:0 3px 3px 0}
.stack .cube:nth-child(5n+1){background:linear-gradient(135deg,#FFB547,#E88A00)}
.stack .cube:not(:nth-child(5n+1)){background:linear-gradient(135deg,color-mix(in srgb,var(--acc) 85%,#fff),color-mix(in srgb,var(--acc) 80%,#000))}
.cubes .stack,.i-cube-area .stack{padding-right:10px}
/* 숫자 카드 = 종이 카드 */
.num-cards span,.num-card-big,.i-card{background:linear-gradient(160deg,#fff 0%,#fff 55%,#f1ede4 100%);box-shadow:0 12px 30px rgba(0,0,0,.14),inset 0 0 0 6px #fff,inset 0 0 0 8px color-mix(in srgb,var(--acc) 35%,#fff)}
.num-cards span:nth-child(odd){transform:rotate(-2.5deg)} .num-cards span:nth-child(even){transform:rotate(2deg)}
.num-cards span:hover{transform:translateY(-10px) rotate(0)}
/* 이모지 세기 = 쟁반 위, 5개씩 */
.emoji-row.count{background:var(--white);border:2px solid var(--line);border-radius:26px;padding:22px 36px;box-shadow:inset 0 -10px 0 var(--paper2)}
.emoji-row.count span{filter:drop-shadow(0 6px 6px rgba(0,0,0,.14))}
.emoji-row.count span:nth-child(5n){margin-right:26px}
.emoji-row.count span:last-child{margin-right:0}
/* 표지 */
.kt2-paper.cover::before{background:radial-gradient(70% 55% at 100% 0%,color-mix(in srgb,var(--st) 26%,transparent) 0%,transparent 60%),radial-gradient(60% 50% at 0% 100%,color-mix(in srgb,var(--acc) 22%,transparent) 0%,transparent 60%)}
.kt2-paper.cover .kt2-cover-title{text-shadow:0 10px 30px rgba(0,0,0,.08)}

/* 자료 연결 v2 */
.kt2-res-badge{border:0;background:var(--acc-soft);color:var(--acc-ink);border-radius:999px;padding:6px 16px;font-size:20px;font-weight:800;display:inline-flex;gap:6px;align-items:center;cursor:pointer}
.kt2-res-badge b{font-size:22px}
.res-attach{display:flex;flex-wrap:wrap;gap:6px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);border-radius:14px;padding:10px;margin-bottom:12px}
.res-attach input{flex:1;min-width:160px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);border-radius:8px;color:#fff;padding:8px 10px;font:inherit;font-size:13px}
.res-attach #res-title{flex:0 0 120px}
.res-attach .btn{font-size:12px;padding:8px 12px;text-decoration:none;color:#fff}
.res-attach .hint{width:100%;font-size:11px;color:#8fa3b8;line-height:1.4}
.res{align-items:flex-start}
.res .bd2{flex:1;cursor:pointer}
.res .ops{display:flex;flex-direction:column;gap:4px}
.res .ops button{border:0;background:rgba(255,255,255,.08);color:#b8c4d2;border-radius:6px;width:28px;height:26px;font-size:13px}
.res.broken{opacity:.45}
.res.broken .t{text-decoration:line-through}

/* 넘침 방지·뽑기 출처 */
.kt2-body{overflow:hidden;justify-content:safe center}
/* 17차 — 본문 조각이 몰래 눌려 속이 잘리지 않게(줄어들면 fitBody 가 통째로 축소한다) */
.kt2-body > *{flex-shrink:0}
.kt2-paper{overflow:hidden}
.pick-src{font-size:13px;color:#9fb0c3;margin:-6px 0 10px}
.pick-src a{color:#fff}

/* ═══════════════ 13차 — 인물 층 (2026-09-23) ═══════════════
   주인공 다섯(곰이·펭이·하나·두리·도토)은 코드로 그린 그림책 인물로 선다(stage2-art.js character).
   가만히 있을 때 = 숨쉬기·눈 깜빡임 · 말풍선이 뜰 때 = 입이 움직이고 고개를 끄덕인다(둘째 인물은 한 박자 늦게 = 주고받는 대화).
   둘째 인물은 좌우를 뒤집어 서로 마주 본다. body.still·prefers-reduced-motion 이면 전부 멈춘다(위 규칙).        */
.kid .face.chr{font-size:0;line-height:0;animation:none}
.kid .face.chr svg{display:block;width:150px;height:171px;overflow:visible}
.scene .kid:nth-child(even) .face.chr svg{transform:scaleX(-1)}
.chr .bodyg{transform-box:view-box;transform-origin:70px 150px;animation:kt2-breathe 3.4s ease-in-out infinite}
.chr .head{transform-box:view-box;transform-origin:70px 96px;animation:kt2-sway 5.2s ease-in-out infinite}
.chr .eyes{transform-box:fill-box;transform-origin:center;animation:kt2-blink 4.6s infinite}
.chr .m-open{opacity:0}
/* 16차 조연 — 벌·나비 날개 팔랑(정지 규칙은 위 body.still·reduced-motion 이 그대로 끈다) */
.chr .wing{transform-box:fill-box;animation:kt2-flap .9s ease-in-out infinite}
.chr .wing.wl{transform-origin:100% 55%}
.chr .wing.wr{transform-origin:0% 55%}
.scene .kid:nth-child(2) .chr .wing{animation-delay:-.4s}
@keyframes kt2-flap{0%,100%{transform:scaleX(1)}50%{transform:scaleX(.72)}}
.scene .kid:nth-child(2) .chr .bodyg{animation-delay:-1.3s}
.scene .kid:nth-child(2) .chr .head{animation-delay:-2.1s}
.scene .kid:nth-child(2) .chr .eyes{animation-delay:-1.7s}
.scene .kid:nth-child(3) .chr .eyes{animation-delay:-3.1s}
@keyframes kt2-breathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.025,.975)}}
@keyframes kt2-sway{0%,100%{transform:rotate(-2.5deg)}50%{transform:rotate(2.5deg)}}
@keyframes kt2-blink{0%,90%,97%,100%{transform:scaleY(1)}93.5%{transform:scaleY(.1)}}
/* 말할 때 — 말풍선이 뜬 직후 입이 몇 번 벌어졌다 닫힌다 */
.anim .kid.talk .chr .m-open{animation:kt2-talk-open .34s steps(1,end) .55s 7}
.anim .kid.talk .chr .m-closed{animation:kt2-talk-shut .34s steps(1,end) .55s 7}
.anim .kid.talk .chr .head{animation:kt2-nod .34s ease-in-out .55s 7,kt2-sway 5.2s ease-in-out 3s infinite}
.anim .scene .kid.talk:nth-child(2) .chr .m-open,.anim .scene .kid.talk:nth-child(2) .chr .m-closed{animation-delay:1.3s}
.anim .scene .kid.talk:nth-child(2) .chr .head{animation-delay:1.3s,3.8s}
.anim .scene .kid.talk:nth-child(2) .bub{animation-delay:.75s}
@keyframes kt2-talk-open{0%{opacity:1}50%{opacity:0}}
@keyframes kt2-talk-shut{0%{opacity:0}50%{opacity:1}}
@keyframes kt2-nod{0%,100%{transform:rotate(0) translateY(0)}50%{transform:rotate(-2deg) translateY(2px)}}
/* 크게 볼 때·검은 무대(밤)에서도 윤곽이 산다 */
.picture.night .kid .face.chr{filter:drop-shadow(0 0 10px rgba(255,255,255,.28)) drop-shadow(0 8px 10px rgba(0,0,0,.3))}

/* ═══════════════ 14차 — 수직선 = 징검다리 (2026-09-23) ═══════════════
   선은 개울, 점은 징검돌. 기준 수(anchor)·지금 수(cur)가 있으면 도토가 그 돌 위에 서고,
   움직일 때마다(다시 그릴 때) 폴짝 뛰어 내려앉는다. DOM(dot·lb·data-act)은 그대로라 조작은 1세대와 같다.   */
.numline .ln{top:50px;height:34px;border-radius:18px;background:linear-gradient(180deg,#9DD6F5,#5FB3E8);box-shadow:inset 0 -4px 0 rgba(0,0,0,.08)}
.numline .ln::after{content:"";position:absolute;inset:8px 14px auto;height:4px;border-radius:4px;background:repeating-linear-gradient(90deg,rgba(255,255,255,.7) 0 26px,transparent 26px 60px)}
.numline .dot{top:52px;width:42px;height:30px;border-radius:50%/60%;background:linear-gradient(180deg,#D8CCBE,#B3A393);border:3px solid #8A7A6A;box-shadow:0 5px 0 rgba(0,0,0,.14)}
.numline .dot.active{background:linear-gradient(180deg,#FFF1C9,#F5D78A);border-color:#C9A13E}
.numline .dot.anchor,.numline .dot.cur{top:49px;width:52px;height:36px;background:linear-gradient(180deg,#FFD166,#F5A623);border-color:#C47F0E}
.numline .lb{top:98px}
.numline.hero{margin-top:120px}
.nl-hero{position:absolute;top:-58px;width:96px;transform:translateX(-50%);pointer-events:none;z-index:2}
.nl-hero svg.chr{display:block;width:96px;height:110px;overflow:visible}
.nl-hero .chr .eyes{transform-box:fill-box;transform-origin:center;animation:kt2-blink 4.6s infinite}
.nl-hero .chr .bodyg{transform-box:view-box;transform-origin:70px 150px;animation:kt2-breathe 3.4s ease-in-out infinite}
.nl-hero .chr .m-open{opacity:0}
.nl-hero{animation:kt2-hop .55s cubic-bezier(.3,.7,.3,1) both}
@keyframes kt2-hop{0%{transform:translate(-50%,-46px) scale(.96,1.04)}60%{transform:translate(-50%,4px) scale(1.08,.9)}100%{transform:translate(-50%,0)}}
.anim .numline.hero .dot.anchor,.anim .numline.hero .dot.cur{animation:kt2-dot-in .4s both}

/* ═══════════════ 15차 — 안내 인물 · 빠진 내용 되살리기 · 큐브 계단 (2026-09-23) ═══════════════
   ① 개념 글(글만 있던 약 950장) = 그 차시의 그림 인물이 왼쪽에서 말해 준다(말풍선) · 문제 상황(약 560장) = 짝 인물이 오른쪽에서 마주 보며 들려준다.
   ② 1·2세대 모두 화면에 안 그리던 데이터 되살림: 목표 bullets(빈 목표 카드였음) · 개념 symbol_meanings(낱말 카드) · visual_demo sub_text · 십 배열판 prompt.
   ③ 큐브 계단·쌓기 = 풀밭 위, 가장 높은 탑 꼭대기에 도토.                                                                                     */
.guide-say{display:flex;align-items:flex-end;gap:22px;max-width:1440px;text-align:left}
.guide-say.r{flex-direction:row-reverse}
.guide-say .g-chr{flex:0 0 auto;width:140px;line-height:0}
.guide-say .g-chr svg{display:block;width:140px;height:160px;overflow:visible}
.guide-say.r .g-chr svg{transform:scaleX(-1)}
.guide-say .g-bub{position:relative;background:var(--white);border:3px solid var(--line);border-radius:34px;padding:28px 42px;margin-bottom:58px;box-shadow:0 14px 34px rgba(0,0,0,.08)}
.guide-say .g-bub{width:fit-content;word-break:keep-all;overflow-wrap:break-word}
.guide-say .g-bub::before{content:"";position:absolute;bottom:34px;left:-17px;width:28px;height:28px;background:var(--white);border-left:3px solid var(--line);border-bottom:3px solid var(--line);transform:rotate(45deg);border-radius:0 0 0 5px}
.guide-say.r .g-bub::before{left:auto;right:-17px;border-left:0;border-bottom:0;border-right:3px solid var(--line);border-top:3px solid var(--line);border-radius:0 5px 0 0}
.guide-say .g-bub .big-text{max-width:1150px;text-align:left}
.guide-say.q .g-bub{background:var(--acc-soft);border-color:color-mix(in srgb,var(--acc) 55%,#fff)}
.guide-say.q .g-bub::before{background:var(--acc-soft);border-color:color-mix(in srgb,var(--acc) 55%,#fff)}
.guide-say .g-bub .big-text{word-break:keep-all}
.guide-say .sc-body{font-size:34px;line-height:1.5;max-width:1150px}
.guide-say .sc-ic{display:inline-block;font-size:54px;line-height:1;vertical-align:-10px;margin-right:14px}
body.tier-mid .guide-say .g-chr,body.tier-high .guide-say .g-chr{width:112px}
body.tier-mid .guide-say .g-chr svg,body.tier-high .guide-say .g-chr svg{width:112px;height:128px}
body.tier-mid .guide-say .g-bub,body.tier-high .guide-say .g-bub{margin-bottom:44px;padding:24px 36px}
/* 말할 때 — 말풍선이 뜨면 입이 움직이고 고개를 끄덕인다(처음 그릴 때·조각으로 나타날 때 둘 다) */
.guide-say .chr .m-open{opacity:0}
.anim.guide-say .g-bub,.anim .guide-say .g-bub{animation:kt2-q .6s cubic-bezier(.2,.9,.2,1.1) .15s both}
.anim.guide-say .chr .m-open,.anim .guide-say .chr .m-open{animation:kt2-talk-open .34s steps(1,end) .5s 6}
.anim.guide-say .chr .m-closed,.anim .guide-say .chr .m-closed{animation:kt2-talk-shut .34s steps(1,end) .5s 6}
.anim.guide-say .chr .head,.anim .guide-say .chr .head{animation:kt2-nod .34s ease-in-out .5s 6,kt2-sway 5.2s ease-in-out 2.6s infinite}
/* 개념 낱말 카드(symbol_meanings) */
.sym-cards{display:flex;flex-wrap:wrap;gap:18px;justify-content:center;max-width:1400px}
.sym-cards .sym{display:flex;flex-direction:column;align-items:center;gap:8px;min-width:210px;padding:20px 28px;border-radius:22px;background:var(--white);border:2px solid var(--line);box-shadow:0 8px 0 color-mix(in srgb,var(--acc) 22%,transparent)}
.sym-cards .sym b{font-size:40px;font-weight:900;color:var(--acc-ink)}
.sym-cards .sym span{font-size:26px;font-weight:700;color:var(--ink);opacity:.82;text-align:center}
.anim .sym-cards .sym{animation:kt2-pop .45s both}
.anim .sym-cards .sym:nth-child(2){animation-delay:.08s}.anim .sym-cards .sym:nth-child(3){animation-delay:.16s}.anim .sym-cards .sym:nth-child(4){animation-delay:.24s}.anim .sym-cards .sym:nth-child(5){animation-delay:.32s}.anim .sym-cards .sym:nth-child(n+6){animation-delay:.4s}
/* 목표 bullets */
.objective-card .obj-list{margin:6px 0 0;padding:0;list-style:none;counter-reset:ob;font-size:38px;line-height:1.4;text-align:left}
.objective-card .obj-list li{counter-increment:ob;position:relative;padding-left:62px;margin:12px 0}
.objective-card .obj-list li::before{content:counter(ob);position:absolute;left:0;top:2px;width:44px;height:44px;border-radius:50%;background:var(--acc);color:#fff;font-size:26px;font-weight:900;display:flex;align-items:center;justify-content:center}
/* 큐브 계단 = 풀밭 위 · 꼭대기에 도토 */
.cubes.grass,.i-cube-area.grass{position:relative;padding:0 40px 18px;background:linear-gradient(180deg,transparent calc(100% - 18px),#7BC67E calc(100% - 18px),#5BAF5F)}
.cubes.grass{border-radius:0 0 18px 18px}
.i-cube-area.grass{border-radius:0 0 22px 22px;justify-content:center;min-width:420px}
.stack .cb-hero{width:96px;margin:0 0 -6px;line-height:0;pointer-events:none}
.anim .stack .cb-hero{animation:kt2-cbhop .55s cubic-bezier(.3,.7,.3,1) .7s both}
@keyframes kt2-cbhop{0%{transform:translateY(-46px) scale(.96,1.04);opacity:0}20%{opacity:1}60%{transform:translateY(4px) scale(1.08,.9)}100%{transform:none}}
.i-cube-area .stack .cb-hero{width:120px}
.stack .cb-hero svg.chr{display:block;width:100%;height:auto;overflow:visible}
.stack .cb-hero .chr .m-open{opacity:0}

/* 18차 수 모형(백 판·십 막대·낱개) · 분류형 카드 · 낱말 순서 카드 */
.base-ten{display:inline-flex;flex-direction:column;align-items:center;gap:8px}
.base-ten svg rect{fill:var(--bt);stroke:rgba(0,0,0,.28);stroke-width:1.2}
.base-ten svg .bt-o rect{stroke-width:1.6}
.base-ten .bt-cap{font-size:22px;color:var(--ink2,#5b6573);font-weight:600}
.base-ten .bt-cap b{color:var(--acc-ink);margin-left:6px}
.ca-tray{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;min-height:74px}
.ca-chip{font:inherit;font-size:30px;font-weight:700;padding:14px 26px;border-radius:18px;background:var(--white);border:3px solid var(--acc);color:var(--acc-ink);cursor:pointer;box-shadow:0 8px 18px rgba(0,0,0,.1);word-break:keep-all}
.ca-chip.sel{transform:translateY(-6px);box-shadow:0 0 0 5px color-mix(in srgb,var(--acc) 35%,#fff),0 12px 24px rgba(0,0,0,.16)}
.ca-chip.in{font-size:26px;padding:10px 18px}
.ca-chip.wrong{border-color:#E8590C;background:#FFF1E6}
.ca-bins{display:flex;gap:22px;justify-content:center;flex-wrap:wrap;width:100%}
.ca-bin{flex:1 1 0;min-width:240px;max-width:420px;min-height:190px;border-radius:26px;border:3px dashed color-mix(in srgb,var(--acc) 55%,#fff);background:var(--acc-soft);padding:16px;cursor:pointer;display:flex;flex-direction:column;gap:12px}
.ca-bin-h{font-size:32px;font-weight:800;color:var(--acc-ink)}
.ca-bin-in{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.i-cards.wordy .i-card{width:auto;min-width:150px;height:auto;min-height:120px;padding:20px 26px;font-size:40px;word-break:keep-all}
/* 18차-2 이모지 개수 = 열 칸 판처럼 5개씩 두 줄(10개 묶음) — 한 줄로 길게 늘어져 한 장이 작아지던 것 */
.emoji-row.count.grid{gap:30px;align-items:flex-end}
.emoji-row.count.grid .eg{display:grid;grid-template-columns:repeat(5,auto);gap:10px 12px}
.emoji-row.count.grid span{font-size:58px;margin:0!important}
.emoji-row.count.grid.big span{font-size:78px}
/* 할 일 다섯 개 넘는 교실 활동은 두 칸으로 */
.offline .steps:has(li:nth-child(5)){display:grid;grid-template-columns:1fr 1fr;grid-auto-flow:column;grid-template-rows:repeat(3,auto);gap:12px 16px}
.offline .steps:has(li:nth-child(7)){grid-template-rows:repeat(4,auto)}
.offline .steps:has(li:nth-child(9)){grid-template-rows:repeat(5,auto)}
.offline .steps:has(li:nth-child(5)) li{font-size:27px;padding:12px 20px}
.ra-frame{height:300px;width:900px;max-width:100%}
/* 나란한 개수 카드 안에서는 이모지를 한 크기로(줄바꿈으로 두 층이 되던 것) */
.tf-row .emoji-row.count{gap:12px;padding:18px 26px}
.tf-row .emoji-row.count span{font-size:58px}
.tf-row .tf-item{padding:18px 22px}

/* ── 21차 개념 그림 층(stage2-fig.js) — 주황 화살표 = 힘 ── */
.fig{display:flex;flex-direction:column;align-items:center;gap:12px;max-width:100%}
.fig-panels{display:flex;gap:22px;align-items:flex-end;justify-content:center;flex-wrap:nowrap}
.fig-panel{display:flex;flex-direction:column;align-items:center;gap:8px;background:#fff;border-radius:22px;padding:10px 10px 12px;box-shadow:0 10px 30px rgba(20,40,70,.10)}
.fig-svg{display:block;width:440px;height:auto;border-radius:14px;background:linear-gradient(#F4FAFF,#EAF5FF)}
.fig-panels.n1 .fig-svg{width:560px}
.fig-panels.n3 .fig-svg{width:350px}
.fig-cap{font-size:28px;font-weight:800;color:#2B3440;line-height:1.2}
.fig-vs{align-self:center;font-size:30px;font-weight:900;color:#9AA6B2}
.fig-key{display:inline-flex;align-items:center;gap:10px;font-size:20px;font-weight:700;color:#8A5A2B;background:#FFF1E6;border-radius:99px;padding:6px 16px}
.fig-key i{display:inline-block;width:44px;height:12px;border-radius:6px;background:#FF7A2F;position:relative}
.fig-key i::after{content:'';position:absolute;right:-8px;top:-6px;border-left:14px solid #FF7A2F;border-top:12px solid transparent;border-bottom:12px solid transparent}
.fig-cards{display:flex;gap:20px;justify-content:center;align-items:stretch;flex-wrap:nowrap}
.fig-card{display:flex;flex-direction:column;align-items:center;gap:4px;background:#fff;border-radius:22px;padding:14px 20px 12px;min-width:170px;box-shadow:0 10px 30px rgba(20,40,70,.10);border-top:8px solid #C9D2DC}
.fig-card.k-lever{border-top-color:#C98B52}.fig-card.k-slope{border-top-color:#86B25E}.fig-card.k-other{border-top-color:#5B8DEF}
.fig-ico{width:150px;height:125px}
.fig-emo{font-size:84px;line-height:125px;height:125px}
.fig-card b{font-size:30px;line-height:1.2}
.fig-card span{font-size:20px;font-weight:800;color:#6B7C93;background:#F1F4F8;border-radius:99px;padding:2px 12px}
.fig-chain-ar{align-self:center;font-size:44px;font-weight:900;color:#FF7A2F}
.fig .fig-chr{overflow:visible}

/* ── 22차 수학 부품 ── */
.fig-svg.fig-fracs{width:440px}
.fig-panels.n4 .fig-svg{width:290px}
.fig-panels.n4 .fig-cap{font-size:22px}
.fig-panels.n1 .fig-svg.fig-fracs{width:520px}
.fig-card.text{min-width:150px;padding:18px 24px}
.fig-card.text b{font-size:34px;color:#3E6FCF;white-space:nowrap}
.fig-vert{display:flex;flex-direction:column;align-items:center;gap:8px;background:#fff;border-radius:22px;padding:14px 26px 12px;box-shadow:0 10px 30px rgba(20,40,70,.10)}
.vt{display:grid;grid-template-columns:auto;font-family:'Pretendard',sans-serif;font-variant-numeric:tabular-nums;font-size:42px;font-weight:800;color:#2B3440;line-height:1.05}
.vt-row{display:grid;grid-template-columns:repeat(3,54px);position:relative;text-align:center}
.vt-row em{position:absolute;left:-44px;top:0;font-style:normal;color:#FF7A2F}
.vt-carry{font-size:22px;color:#FF7A2F;height:26px;line-height:26px}
.vt-carry span i{font-style:normal;color:#E0413C;text-decoration:none}
.vt-line{height:4px;background:#2B3440;margin:6px 0 6px -48px;border-radius:2px}
.vt-r{color:#3E6FCF}

/* ── 23차 길이·시간 부품 ── */
.fig-card.on{border-top-color:#FF7A2F;background:#FFF6EF}
.fig-card.on b{color:#D9531E}
.tv{display:grid;grid-template-columns:auto;font-family:'Pretendard',sans-serif;font-variant-numeric:tabular-nums;font-size:40px;font-weight:800;color:#2B3440;line-height:1.05}
.tv-row{display:grid;grid-template-columns:repeat(3,132px);position:relative;text-align:center}
.tv.n2 .tv-row{grid-template-columns:repeat(2,132px)}.tv.n1 .tv-row{grid-template-columns:repeat(1,150px)}
.tv-row span u{text-decoration:none;font-size:22px;font-weight:800;color:#6B7C93;margin-left:3px}
.tv-row em{position:absolute;left:-44px;top:0;font-style:normal;color:#FF7A2F}
.tv-carry{font-size:22px;color:#FF7A2F;height:28px;line-height:28px}
.tv-carry span i{font-style:normal;color:#E0413C}.tv-carry span b{color:#E0413C;font-weight:900}
.tv-line{height:4px;background:#2B3440;margin:6px 0 6px -48px;border-radius:2px}
.tv-r{color:#3E6FCF}
.fig-tvert{padding-left:62px}
.fig-panels.n3 .fig-tvert .tv{font-size:32px}.fig-panels.n3 .tv-row{grid-template-columns:repeat(3,104px)}.fig-panels.n3 .tv.n2 .tv-row{grid-template-columns:repeat(2,104px)}
.fig-svg.fig-clock{width:400px}.fig-panels.n1 .fig-svg.fig-clock{width:420px}.fig-panels.n3 .fig-svg.fig-clock{width:320px}
.fig-panels.n1 .fig-svg.fig-road,.fig-panels.n1 .fig-svg.fig-ruler,.fig-panels.n1 .fig-svg.fig-joins{width:520px}

/* ── 24차 국어 부품 — 파랑 = 누가/무엇이·사실·중심 문장 · 주황 = 뒷부분·의견·∨·강조 · 초록 = 뒷받침·어울림 · 빨강 = 어색·잘못된 표기 ── */
.fig-ko{display:flex;flex-direction:column;align-items:center;gap:12px;max-width:100%;font-family:'Pretendard',sans-serif;color:#2B3440}
.fig-ko b.hi{color:#D9531E;font-weight:900}
.ko-tag{display:inline-block;font-style:normal;font-size:19px;font-weight:800;color:#6B7C93;background:#F1F4F8;border-radius:99px;padding:2px 12px;white-space:nowrap}
.ko-tag.main,.ko-tag.fact{color:#fff;background:#3E6FCF}.ko-tag.opin{color:#fff;background:#FF7A2F}.ko-tag.sub{color:#fff;background:#2E9E63}.ko-tag.odd{color:#fff;background:#E0413C}
.ko-p1,.ko-p2{font-style:normal;font-weight:900;color:#FF7A2F;padding:0 4px;letter-spacing:-2px}.ko-p2{font-size:1.15em;background:#FFF1E6;border-radius:8px;padding:0 6px}
.ko-key{display:inline-flex;align-items:center;gap:6px;font-size:20px;font-weight:700;color:#8A5A2B;background:#FFF1E6;border-radius:99px;padding:6px 18px}
.ko-o{color:#2E9E63;font-weight:900}.ko-x{color:#E0413C;font-weight:900}
/* 문장의 짜임 */
.ko-sents{display:flex;flex-direction:column;gap:14px;align-items:flex-start}
.ko-sent{display:flex;align-items:flex-end;gap:12px;font-size:34px;font-weight:800}
.ko-sent em,.ko-tree em{font-style:normal;font-size:40px;font-weight:900;color:#9AA6B2;padding-bottom:6px}
.ko-a,.ko-b{display:flex;flex-direction:column;align-items:center;gap:6px;border-radius:18px;padding:10px 22px 12px;background:#fff;box-shadow:0 8px 24px rgba(20,40,70,.10);white-space:nowrap}
.ko-a{border-top:8px solid #3E6FCF}.ko-b{border-top:8px solid #FF7A2F}
.ko-a i,.ko-b i{display:flex;flex-direction:column;align-items:center;font-style:normal;font-size:19px;font-weight:800;color:#3E6FCF;line-height:1.1}.ko-b i{color:#D9531E}
.ko-a i u,.ko-b i u,.ko-b u{text-decoration:none;font-size:17px;font-weight:700;color:#6B7C93}
.ko-b.t-state{border-top-color:#F5A623}.ko-b.t-what{border-top-color:#C2612F}
.ko-sent.bad .ko-b{border-top-color:#E0413C;background:#FFF3F2}.ko-sent .ko-x,.ko-sent .ko-o{font-size:24px;padding-bottom:10px;white-space:nowrap}
.ko-tree{display:flex;align-items:center;gap:18px}
.ko-a.big{font-size:38px;font-weight:900;padding:18px 30px}
.ko-branches{display:flex;flex-direction:column;gap:10px}
.ko-branches .ko-b{flex-direction:row;align-items:center;gap:14px;font-size:30px;padding:8px 20px;border-top:0;border-left:10px solid #FF7A2F}
.ko-branches .ko-b.t-state{border-left-color:#F5A623}.ko-branches .ko-b.t-what{border-left-color:#C2612F}
.ko-branches .ko-b i{font-size:26px;color:#2B3440}.ko-branches .ko-b u{font-size:18px}
/* 띄어 읽기 */
.ko-pause{display:flex;flex-direction:column;align-items:center;gap:14px}
.ko-lines{display:flex;flex-direction:column;gap:10px;background:#fff;border-radius:22px;padding:16px 34px;box-shadow:0 10px 30px rgba(20,40,70,.10)}
.ko-line{font-size:34px;font-weight:800;line-height:1.35;white-space:nowrap}
.ko-rows{display:flex;flex-direction:column;gap:10px}
.ko-row{display:grid;grid-template-columns:70px 120px 80px auto;align-items:center;gap:14px;background:#fff;border-radius:18px;padding:8px 22px;box-shadow:0 8px 24px rgba(20,40,70,.10);font-size:28px;font-weight:800}
.ko-sym{font-size:44px;color:#3E6FCF;text-align:center}.ko-row u{text-decoration:none;color:#2B3440}.ko-row .ko-p1,.ko-row .ko-p2{text-align:center}.ko-up{font-style:normal;color:#FF7A2F;font-weight:900;text-align:center;font-size:34px}
/* 글 읽기 판 */
.ko-text{background:#FFFDF7;border:2px solid #EADFC6;border-radius:18px;padding:18px 30px 16px 26px;box-shadow:0 10px 30px rgba(20,40,70,.10);min-width:520px;max-width:1020px}
.ko-title{font-size:26px;font-weight:900;color:#8A5A2B;margin-bottom:8px}
.ko-ol{list-style:none;margin:0;padding:0;counter-reset:ln;display:flex;flex-direction:column;gap:8px}
.ko-ol li{display:flex;align-items:flex-start;gap:14px;font-size:30px;font-weight:700;line-height:1.4;padding:2px 0;border-bottom:2px dashed #EADFC6}
.ko-ol li:last-child{border-bottom:0}
.ko-ol li em{counter-increment:ln;font-style:normal;font-size:20px;font-weight:900;color:#fff;background:#8A5A2B;border-radius:99px;min-width:32px;height:32px;line-height:32px;text-align:center;margin-top:8px;flex:none}
.ko-ol li em::before{content:counter(ln)}
.ko-ol li span{flex:1}
.ko-ol li .ko-tag{margin-top:8px;flex:none}
.ko-ol li.fact span,.ko-ol li.main span{color:#2E56B8}.ko-ol li.opin span{color:#C2612F}.ko-ol li.sub span{color:#22794B}.ko-ol li.odd span{color:#B7312C;text-decoration:line-through;text-decoration-color:#E0413C;text-decoration-thickness:3px}
.ko-text.poem .ko-ol li{font-size:32px;border-bottom:0;gap:18px}.ko-text.poem .ko-ol li em{background:#C9D2DC;color:#2B3440}
/* 문단 짜임 */
.ko-para{display:flex;flex-direction:column;align-items:center;gap:0}
.ko-indent{font-size:19px;font-weight:800;color:#D9531E;align-self:flex-start;display:flex;align-items:center;gap:8px;margin-bottom:6px}.ko-indent i{display:inline-block;width:30px;height:24px;border:3px dashed #FF7A2F;border-radius:6px}
.ko-main{display:flex;align-items:center;gap:14px;font-size:30px;font-weight:800;background:#fff;border-left:12px solid #3E6FCF;border-radius:16px;padding:12px 26px;box-shadow:0 8px 24px rgba(20,40,70,.10);max-width:980px}
.ko-conn{width:6px;height:28px;background:#C9D2DC;border-radius:3px}
.ko-subs{display:flex;gap:16px;align-items:stretch;justify-content:center;flex-wrap:nowrap;max-width:1060px}
.ko-subs.n1{flex-direction:column}
.ko-sub{display:flex;flex-direction:column;align-items:flex-start;gap:8px;font-size:26px;font-weight:700;background:#fff;border-left:10px solid #2E9E63;border-radius:16px;padding:12px 20px;box-shadow:0 8px 24px rgba(20,40,70,.10);flex:1 1 0;line-height:1.35;position:relative}
.ko-subs.n3 .ko-sub{font-size:24px}.ko-subs.n4 .ko-sub{font-size:22px}
.ko-sub.odd{border-left-color:#E0413C;background:#FFF3F2}.ko-sub.odd .ko-x{position:absolute;right:12px;top:6px;font-size:34px}
.ko-pairs{display:flex;flex-direction:column;gap:12px}
.ko-pair{display:flex;align-items:center;gap:14px}
.ko-pair .ko-main,.ko-pair .ko-sub{font-size:26px;flex:1 1 0;flex-direction:row;align-items:center}
/* 두 갈래 통 */
.ko-sort2{display:flex;gap:26px;align-items:stretch;justify-content:center}
.ko-bin{display:flex;flex-direction:column;gap:10px;background:#fff;border-radius:22px;padding:0 20px 16px;box-shadow:0 10px 30px rgba(20,40,70,.10);min-width:360px;max-width:520px;overflow:hidden}
.ko-binh{margin:0 -20px 6px;padding:10px 20px;font-size:30px;font-weight:900;color:#fff;text-align:center}
.ko-bin.a .ko-binh{background:#3E6FCF}.ko-bin.b .ko-binh{background:#FF7A2F}
.ko-item{font-size:26px;font-weight:700;line-height:1.35;padding:8px 14px;border-radius:12px;background:#F6F8FB}
.ko-bin.b .ko-item{background:#FFF6EF}
.ko-hint{margin-top:auto;font-size:20px;font-weight:800;color:#6B7C93;text-align:center;padding-top:6px;border-top:2px dashed #E3E8EE}
/* 인물의 마음 */
.ko-moods{display:flex;gap:40px;justify-content:center;align-items:flex-end}
.ko-mood{display:flex;flex-direction:column;align-items:center;gap:6px;max-width:460px}
.ko-chr svg.chr{width:150px;height:171px;display:block}.ko-chr.emo{font-size:110px;line-height:1.3}
.ko-mood.mirror .ko-chr svg.chr{transform:scaleX(-1)}
.ko-bub{position:relative;font-size:28px;font-weight:800;line-height:1.35;background:#fff;border-radius:22px;padding:14px 24px;box-shadow:0 8px 24px rgba(20,40,70,.12);text-align:center;word-break:keep-all;max-width:440px}
.ko-bub::after{content:'';position:absolute;left:50%;bottom:-14px;margin-left:-12px;border-left:12px solid transparent;border-right:12px solid transparent;border-top:16px solid #fff}
.ko-name{font-size:24px;font-weight:900}
.ko-feel{font-size:24px;font-weight:800;color:#fff;background:#FF7A2F;border-radius:99px;padding:4px 18px;white-space:nowrap}
.ko-how{font-size:21px;font-weight:800;color:#6B7C93;background:#F1F4F8;border-radius:99px;padding:3px 14px;white-space:nowrap}
.ko-flow{display:flex;align-items:center;gap:14px;justify-content:center}
.ko-step{display:flex;flex-direction:column;align-items:center;gap:4px}
.ko-step b{font-size:28px;font-weight:900;white-space:nowrap}.ko-step u{text-decoration:none;font-size:20px;font-weight:700;color:#6B7C93;white-space:nowrap}
/* 소리·표기 */
.ko-sound{display:flex;flex-direction:column;align-items:center;gap:14px}
.ko-rule{font-size:26px;font-weight:800;color:#8A5A2B;background:#FFF1E6;border-radius:99px;padding:8px 24px}
.ko-snds{display:flex;gap:18px;justify-content:center;flex-wrap:wrap;max-width:1040px}
.ko-snd{display:flex;align-items:center;gap:12px;background:#fff;border-radius:18px;padding:12px 22px;box-shadow:0 8px 24px rgba(20,40,70,.10);font-size:34px;font-weight:900}
.ko-snd em{font-style:normal;color:#9AA6B2}.ko-snd .s{color:#D9531E}
.ko-prs{display:flex;flex-direction:column;gap:12px}
.ko-pr{display:flex;align-items:center;gap:18px;font-size:32px;font-weight:800}
.ko-pr em{font-style:normal;color:#9AA6B2;font-size:36px}
.ko-pr span{display:inline-flex;align-items:center;gap:0;background:#fff;border-radius:16px;padding:8px 14px;box-shadow:0 8px 24px rgba(20,40,70,.10)}
.ko-pr span i{font-style:normal;padding:2px 8px;border-radius:8px;background:#F1F4F8}
.ko-pr span s{display:inline-block;width:14px;height:22px;border-bottom:4px solid #FF7A2F;margin:0 3px 0;text-decoration:none}
.ko-prs.ox .l{border-top:8px solid #2E9E63}.ko-prs.ox .r{border-top:8px solid #E0413C}.ko-pr .ko-o,.ko-pr .ko-x{font-size:28px;margin-right:8px}
/* 편지지 */
.ko-letter{display:flex;flex-direction:column;gap:12px;background:#FFFDF7;border:2px solid #EADFC6;border-radius:18px;padding:22px 34px;box-shadow:0 10px 30px rgba(20,40,70,.10);min-width:520px;max-width:980px;background-image:repeating-linear-gradient(transparent 0 46px,#EFE7D3 46px 48px)}
.ko-to,.ko-from,.ko-ln{font-size:29px;font-weight:800;line-height:1.35;display:flex;align-items:center;gap:12px}
.ko-to{color:#2E56B8}.ko-from{align-self:flex-end;color:#2E56B8}.ko-ln{padding-left:26px;font-weight:700}.ko-ln.tagged{padding-left:0}
.ko-letter.parts{gap:14px}.ko-blank{display:flex;align-items:center;gap:12px}.ko-blank i{flex:1;height:30px;border-bottom:4px dashed #C9D2DC}
/* 메모지 */
.ko-note{background:#FFF7C2;border-radius:6px 6px 18px 6px;padding:20px 30px 22px;box-shadow:0 12px 30px rgba(120,90,20,.18);min-width:480px;max-width:900px;position:relative}
.ko-note::before{content:'';position:absolute;left:50%;top:-10px;width:90px;height:22px;margin-left:-45px;background:rgba(255,122,47,.55);border-radius:4px;transform:rotate(-2deg)}
.ko-ntitle{display:flex;align-items:center;gap:12px;font-size:30px;font-weight:900;margin-bottom:10px;padding-bottom:8px;border-bottom:3px solid #E8D98A}
.ko-note ol{margin:0;padding-left:44px;font-size:27px;font-weight:700;line-height:1.5}.ko-note ol li::marker{font-weight:900;color:#8A5A2B}
.ko-star{margin-left:8px}
/* 나란히 칸 안에 들어간 국어 부품은 조금 작게 */
.fig-panels .fig-panel .ko-text,.fig-panels .fig-panel .ko-letter{min-width:0}
.fig-panels.n2 .fig-panel .ko-ol li{font-size:26px}.fig-panels.n2 .fig-panel .ko-line{font-size:28px}

/* ── 26차 사회 부품 — 때 = 옛날·과거(갈색) · 오늘·현재(파랑) · 미래(초록) / 주황 = 시간의 흐름·길찾기 길·찾은 곳·강조 / 장소 = 자연(초록)·사람(파랑) ── */
.fig-so{--past:#A0703C;--past-bg:#FBF3E6;--now:#3E6FCF;--now-bg:#EEF3FD;--fut:#2E9E63;--fut-bg:#EAF7F0}
.so-chip{display:inline-flex;align-items:center;gap:8px;font-size:26px;font-weight:800;line-height:1.25;background:#fff;border-radius:14px;padding:8px 16px;box-shadow:0 6px 18px rgba(20,40,70,.09);white-space:nowrap}
.so-chip i{font-style:normal;font-size:30px}.so-chip.on{background:#FFF1E6;color:#D9531E;box-shadow:0 0 0 3px #FF7A2F inset}
.so-chip.x{color:#8A94A0;background:#F4F6F9}
/* 시간 띠 */
.so-tline{display:flex;flex-direction:column;align-items:stretch;gap:10px;max-width:1080px}
.so-arrow{position:relative;height:30px;margin:0 26px 0 0}
.so-arrow i{position:absolute;left:0;right:0;top:9px;height:12px;border-radius:6px;background:linear-gradient(90deg,#C9A06B,#5B8DEF 60%,#5CC08A)}
.so-arrow i::after{content:'';position:absolute;right:-24px;top:-12px;border-left:28px solid #FF7A2F;border-top:18px solid transparent;border-bottom:18px solid transparent}
.so-arrow b{position:absolute;right:10px;top:26px;font-size:20px;font-weight:900;color:#D9531E;white-space:nowrap}
.so-tline .so-arrow{margin-bottom:22px}
.so-evs{display:flex;gap:16px;justify-content:space-between;align-items:stretch}
.so-ev{flex:1 1 0;display:flex;flex-direction:column;align-items:center;gap:6px;background:#fff;border-radius:18px;padding:12px 12px 10px;box-shadow:0 8px 24px rgba(20,40,70,.10);border-bottom:8px solid #C9D2DC;min-width:0;position:relative}
.so-ev::after{content:'';position:absolute;left:50%;bottom:-30px;width:4px;height:22px;margin-left:-2px;background:#C9D2DC}
.so-ev.past{border-bottom-color:var(--past)}.so-ev.now{border-bottom-color:var(--now)}.so-ev.future{border-bottom-color:var(--fut)}
.so-ev.on{background:#FFF6EF;box-shadow:0 0 0 4px #FF7A2F inset,0 8px 24px rgba(20,40,70,.10)}
.so-ev.blank b{color:transparent;border-bottom:4px dashed #C9D2DC;min-width:120px}
.so-evemo{font-size:58px;line-height:1.1}
.so-ev b{font-size:26px;font-weight:900;line-height:1.25;text-align:center;word-break:keep-all}
.so-when{font-size:21px;font-weight:900;color:#fff;background:#6B7C93;border-radius:99px;padding:2px 14px;white-space:nowrap}
.so-ev.past .so-when{background:var(--past)}.so-ev.now .so-when{background:var(--now)}.so-ev.future .so-when{background:var(--fut)}
.so-when.n{background:#FF7A2F}
.so-tline.n5 .so-ev b,.so-tline.n6 .so-ev b{font-size:23px}.so-tline.n5 .so-evemo,.so-tline.n6 .so-evemo{font-size:48px}
.so-tnote{align-self:center;font-size:22px;font-weight:800;color:#6B7C93}
.so-zones{display:flex;gap:14px}
.so-zone{flex:1 1 0;display:flex;flex-direction:column;align-items:center;gap:8px;border-radius:20px;padding:0 14px 14px;overflow:hidden;background:#F6F8FB}
.so-zh{align-self:stretch;margin:0 -14px 4px;padding:8px;text-align:center;font-size:32px;font-weight:900;color:#fff;background:#6B7C93}
.so-zone.past{background:var(--past-bg)}.so-zone.past .so-zh{background:var(--past)}
.so-zone.now{background:var(--now-bg)}.so-zone.now .so-zh{background:var(--now)}
.so-zone.future{background:var(--fut-bg)}.so-zone.future .so-zh{background:var(--fut)}
.so-zone.on{box-shadow:0 0 0 4px #FF7A2F inset}
.so-zone u{text-decoration:none;font-size:21px;font-weight:800;color:#6B7C93;text-align:center}
.so-zw{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
/* 마을 지도 */
.so-map{display:flex;flex-direction:column;align-items:center;gap:10px}
.fig-svg.fig-map{width:560px;border-radius:18px;box-shadow:0 10px 30px rgba(20,40,70,.12);background:#EEF4E6}
.fig-panels .fig-svg.fig-map{width:440px}.fig-panels.n3 .fig-svg.fig-map{width:340px}
.so-legend{display:flex;gap:12px;flex-wrap:wrap;justify-content:center}
/* 짝 잇기 */
.so-link{display:flex;flex-direction:column;gap:10px;min-width:560px}
.so-lrow{display:grid;grid-template-columns:1fr 54px 1fr;align-items:center}
.so-lrow em{font-style:normal;text-align:center;font-size:36px;font-weight:900;color:#FF7A2F}
.so-lrow.head span{font-size:21px;font-weight:900;color:#6B7C93;text-align:center}
.so-lc{display:flex;align-items:center;gap:10px;font-size:28px;font-weight:800;line-height:1.25;background:#fff;border-radius:16px;padding:9px 18px;box-shadow:0 6px 18px rgba(20,40,70,.09);word-break:keep-all}
.so-lc i{font-style:normal;font-size:34px}
.so-lc.b{border-left:10px solid #9AA6B2}
.so-lrow.g0 .so-lc.b{border-left-color:#3E6FCF;background:#EEF3FD}.so-lrow.g1 .so-lc.b{border-left-color:#FF7A2F;background:#FFF6EF}.so-lrow.g2 .so-lc.b{border-left-color:#2E9E63;background:#EAF7F0}.so-lrow.g3 .so-lc.b{border-left-color:#8A6FB8;background:#F3EFFA}.so-lrow.g4 .so-lc.b{border-left-color:#C2612F;background:#FBF1EA}
.so-link.n5 .so-lc,.so-link.n6 .so-lc{font-size:25px;padding:7px 16px}.so-link.n5 .so-lc i,.so-link.n6 .so-lc i{font-size:28px}
.so-lnote{align-self:center;font-size:23px;font-weight:800;color:#8A5A2B;background:#FFF1E6;border-radius:99px;padding:6px 22px;margin-top:4px}
/* 옛날 ↔ 오늘 */
.so-then{display:flex;flex-direction:column;gap:10px}
.so-then.scene{flex-direction:row;align-items:center;gap:16px}
.so-tcol{display:flex;flex-direction:column;align-items:center;gap:8px;background:#fff;border-radius:22px;padding:0 10px 12px;overflow:hidden;box-shadow:0 10px 30px rgba(20,40,70,.10)}
.so-tcol .so-th{align-self:stretch;margin:0 -10px 4px}
.so-th{font-size:28px;font-weight:900;color:#fff;text-align:center;padding:6px 18px;border-radius:14px;background:#6B7C93}
.so-th.past,.so-tcol.past .so-th{background:var(--past)}.so-th.now,.so-tcol.now .so-th{background:var(--now)}
.so-tcol .so-th{border-radius:0}
.fig-svg.so-street{width:420px}
.so-tcap{font-size:24px;font-weight:800;text-align:center;max-width:420px;word-break:keep-all}
.so-tar{font-style:normal;font-size:42px;font-weight:900;color:#FF7A2F;text-align:center}
.so-trow{display:grid;grid-template-columns:1fr 60px 1fr;align-items:center}
.so-trow.head em{display:block}
.so-tc{display:flex;align-items:center;gap:12px;background:#fff;border-radius:16px;padding:10px 18px;box-shadow:0 6px 18px rgba(20,40,70,.09);min-width:300px}
.so-trow .past .so-tc{background:var(--past-bg);border-left:10px solid var(--past)}.so-trow .now .so-tc{background:var(--now-bg);border-left:10px solid var(--now)}
.so-tc i{font-style:normal;font-size:44px;line-height:1}
.so-tc b{font-size:28px;font-weight:900;line-height:1.2}
.so-tc u{text-decoration:none;font-size:21px;font-weight:700;color:#6B7C93;margin-left:auto;padding-left:10px;white-space:nowrap}
/* 여러 갈래 통 */
.so-groups{display:flex;gap:18px;align-items:stretch;justify-content:center;max-width:1100px}
.so-bin{flex:1 1 0;display:flex;flex-direction:column;gap:10px;background:#fff;border-radius:22px;padding:0 16px 14px;box-shadow:0 10px 30px rgba(20,40,70,.10);min-width:220px;overflow:hidden}
.so-binh{margin:0 -16px 4px;padding:9px 14px;font-size:27px;font-weight:900;color:#fff;text-align:center;background:#6B7C93;display:flex;align-items:center;justify-content:center;gap:8px;white-space:nowrap}
.so-binh i{font-style:normal;font-size:32px}
.so-bitems{display:flex;flex-direction:column;gap:8px;align-items:stretch}
.so-bitems .so-chip{box-shadow:none;background:#F6F8FB;justify-content:flex-start}
.so-hint{margin-top:auto;font-size:20px;font-weight:800;color:#6B7C93;text-align:center;padding-top:6px;border-top:2px dashed #E3E8EE}
.so-bin.t0 .so-binh{background:#3E6FCF}.so-bin.t1 .so-binh{background:#FF7A2F}.so-bin.t2 .so-binh{background:#2E9E63}.so-bin.t3 .so-binh{background:#8A6FB8}
.so-bin.nat .so-binh{background:#2E9E63}.so-bin.nat .so-chip{background:#EAF7F0}
.so-bin.man .so-binh{background:#3E6FCF}.so-bin.man .so-chip{background:#EEF3FD}
.so-bin.past .so-binh{background:var(--past)}.so-bin.past .so-chip{background:var(--past-bg)}
.so-bin.now .so-binh{background:var(--now)}.so-bin.now .so-chip{background:var(--now-bg)}
.so-bin.future .so-binh{background:var(--fut)}.so-bin.future .so-chip{background:var(--fut-bg)}
.so-bin.x .so-binh{background:#9AA6B2}.so-bin.x .so-chip{color:#6B7C93;background:#F4F6F9}
.so-groups.n4 .so-binh{font-size:24px}.so-groups.n4 .so-chip{font-size:23px;padding:7px 12px}.so-groups.n4 .so-bin{min-width:190px}
/* 장소 카드 · 그림일기 */
.so-pcard{position:relative;display:flex;flex-direction:column;gap:10px;background:#FFFDF7;border:3px solid #EADFC6;border-radius:22px;padding:14px 26px 18px;box-shadow:0 10px 30px rgba(20,40,70,.10);min-width:560px;max-width:880px}
.so-ptitle{align-self:center;font-size:24px;font-weight:900;color:#fff;background:#8A5A2B;border-radius:99px;padding:3px 22px}
.so-prows{display:flex;flex-direction:column;gap:8px}
.so-prow{display:grid;grid-template-columns:40px 120px 1fr;align-items:center;gap:12px;border-bottom:2px dashed #EADFC6;padding:4px 0 8px;min-height:50px}
.so-prow:last-child{border-bottom:0}
.so-prow>i{font-style:normal;font-size:28px;font-weight:900;color:#8A5A2B}
.so-plab{font-size:22px;font-weight:900;color:#fff;border-radius:99px;padding:3px 0;text-align:center}
.so-prow.p .so-plab{background:#3E6FCF}.so-prow.d .so-plab{background:#2E9E63}.so-prow.f .so-plab{background:#FF7A2F}
.so-prow b{font-size:29px;font-weight:800;line-height:1.3;word-break:keep-all}
.so-prow.f b{color:#D9531E}
.so-pcard.hasface{padding-right:140px}.so-pface.side{position:absolute;right:8px;bottom:6px}.so-pface svg.chr{width:120px;height:137px}
.so-pcard.diary{min-width:520px}
.so-ppic{display:flex;align-items:flex-end;justify-content:center;gap:10px;height:170px;border:3px solid #EADFC6;border-radius:14px;background:linear-gradient(#EAF5FF,#F4FAFF 70%,#E3F2D6 70%)}
.so-ppic>span{font-size:100px;line-height:1.3}.so-ppic .so-pface svg.chr{width:110px;height:125px}
/* 마을 신문 */
.so-news{background:#FBFAF6;border:3px solid #2B3440;border-radius:8px;padding:12px 20px 16px;box-shadow:0 10px 30px rgba(20,40,70,.12);min-width:600px;max-width:900px;display:flex;flex-direction:column;gap:10px}
.so-nhead{font-size:34px;font-weight:900;text-align:center;letter-spacing:4px;border-bottom:5px double #2B3440;padding-bottom:6px}
.so-nbody{display:flex;gap:18px;align-items:stretch}
.so-nphoto{position:relative;flex:none;width:210px;min-height:160px;border:3px solid #C9D2DC;background:#EEF3F8;display:flex;align-items:center;justify-content:center;font-size:92px}
.so-ntext{position:relative;flex:1;display:flex;flex-direction:column;gap:6px}
.so-ntext b{font-size:30px;font-weight:900;line-height:1.25}
.so-ntext p{margin:0;font-size:24px;font-weight:700;line-height:1.45;color:#3A4450}
.so-nitems{position:relative;display:flex;flex-wrap:wrap;gap:10px;border-top:2px solid #2B3440;padding-top:8px}
.so-nitems span{font-size:23px;font-weight:800;background:#FFF1E6;border-radius:10px;padding:4px 12px}
.so-ntag{font-style:normal;font-size:18px;font-weight:900;color:#fff;background:#FF7A2F;border-radius:99px;padding:2px 10px;white-space:nowrap}
.so-nphoto .so-ntag{position:absolute;left:6px;top:6px}.so-ntext .so-ntag{align-self:flex-start}.so-nitems .so-ntag{align-self:center}
/* 공유 앱 화면 */
.so-post{display:flex;gap:26px;align-items:center}
.so-phone{width:380px;background:#fff;border:10px solid #2B3440;border-radius:36px;padding:0 0 14px;overflow:hidden;box-shadow:0 12px 34px rgba(20,40,70,.18);display:flex;flex-direction:column;gap:8px}
.so-pbar{background:#3E6FCF;color:#fff;font-size:21px;font-weight:900;text-align:center;padding:10px}
.so-part{margin:0 14px;height:150px;border-radius:14px;background:linear-gradient(135deg,#FFF1E6,#EEF3FD);display:flex;align-items:center;justify-content:center;font-size:90px}
.so-pmeta{display:flex;align-items:center;gap:10px;padding:0 16px;flex-wrap:wrap}
.so-pmeta b{font-size:23px;font-weight:900}.so-pmeta span{font-size:18px;font-weight:800;color:#6B7C93}.so-heart{margin-left:auto;color:#E0413C!important}
.so-cm{display:flex;align-items:center;gap:8px;margin:0 12px;background:#F6F8FB;border-radius:14px;padding:6px 12px;font-size:20px;font-weight:700;line-height:1.3}
.so-cm i{font-style:normal;font-weight:900;color:#3E6FCF;white-space:nowrap}.so-cm span{flex:1}
.so-cm.ok{background:#EAF7F0}.so-cm.bad{background:#FFF3F2}.so-cm.bad span{text-decoration:line-through;text-decoration-color:#E0413C;color:#8A94A0}.so-cm b{font-size:24px}
.so-rules{display:flex;flex-direction:column;gap:10px}
.so-rule{display:flex;align-items:center;gap:10px;font-size:26px;font-weight:800;background:#fff;border-radius:16px;padding:10px 18px;border-left:10px solid #2E9E63;box-shadow:0 6px 18px rgba(20,40,70,.09)}
.so-rule i{font-style:normal;font-size:30px}.so-rule.x{border-left-color:#E0413C;background:#FFF3F2}
/* 전시관 */
.so-exh{display:flex;flex-direction:column;align-items:center;gap:12px}
.so-exht{display:flex;align-items:center;gap:12px;font-size:30px;font-weight:900}
.so-shelf{display:flex;gap:18px;align-items:flex-end;padding:0 22px 16px;border-bottom:16px solid #C98B52;border-radius:0 0 8px 8px;background:linear-gradient(transparent 70%,#F6EBD6 70%)}
.so-exi{display:flex;flex-direction:column;align-items:center;gap:6px}
.so-exemo{font-size:78px;line-height:1.1;background:#fff;border-radius:18px;padding:6px 16px;box-shadow:0 8px 22px rgba(20,40,70,.10)}
.so-plate{display:flex;flex-direction:column;align-items:center;gap:2px;background:#2B3440;color:#fff;border-radius:8px;padding:6px 14px;min-width:150px}
.so-plate i{font-style:normal;font-size:15px;font-weight:900;color:#FFB27A}.so-plate b{font-size:23px;font-weight:900}.so-plate u{text-decoration:none;font-size:18px;font-weight:700;color:#D6DEE8;white-space:nowrap}
.fig-panels .fig-panel .so-pcard,.fig-panels .fig-panel .so-news,.fig-panels .fig-panel .so-link{min-width:0}
.so-maptag{font-size:21px;font-weight:800;color:#8A5A2B;background:#FFF1E6;border-radius:99px;padding:4px 18px}.so-maptag.sat{color:#fff;background:#2B3440}

/* ── 27차 과학 생물 부품 — 그렇다·있음·같게 = 파랑 ○ / 아니다·없음 = 회색 ✗ / 주황 = 기준 질문·다르게 할 조건·지금 단계 / 초록 = 자람·결과 / 사는 곳마다 바탕색 ── */
.fig-sc{--yes:#3E6FCF;--yes-bg:#EEF3FD;--no:#8A94A0;--no-bg:#F4F6F9;--grow:#2E9E63;--grow-bg:#EAF7F0}
.sc-ic{width:36px;height:36px;flex:none}
.sc-chip{gap:10px}.sc-chip u{text-decoration:none;font-size:20px;font-weight:800;color:#6B7C93;margin-left:4px}
/* 기준 질문 갈래 */
.sc-ask{display:flex;flex-direction:column;align-items:center;gap:0;min-width:640px;max-width:1080px}
.sc-q{display:flex;align-items:center;gap:12px;font-size:30px;font-weight:900;color:#fff;background:#FF7A2F;border-radius:99px;padding:10px 30px 10px 12px;box-shadow:0 8px 22px rgba(255,122,47,.28)}
.sc-q i{font-style:normal;width:44px;height:44px;border-radius:50%;background:#fff;color:#FF7A2F;display:flex;align-items:center;justify-content:center;font-size:30px}
.sc-fork{position:relative;width:52%;height:40px}
.sc-fork i{position:absolute;left:0;right:0;top:18px;height:22px;border:5px solid #C9D2DC;border-bottom:0;border-radius:16px 16px 0 0}
.sc-fork::before{content:'';position:absolute;left:50%;top:0;width:5px;height:20px;margin-left:-2px;background:#C9D2DC}
.sc-brr{display:flex;gap:24px;align-items:stretch;width:100%}
.sc-br{flex:1 1 0;display:flex;flex-direction:column;gap:10px;border-radius:22px;padding:0 16px 14px;overflow:hidden;box-shadow:0 10px 30px rgba(20,40,70,.10);background:#fff;min-width:260px}
.sc-brh{margin:0 -16px 4px;padding:8px 14px;font-size:28px;font-weight:900;color:#fff;display:flex;align-items:center;justify-content:center;gap:10px}
.sc-brh b{font-size:28px}
.sc-br.y .sc-brh{background:var(--yes)}.sc-br.n .sc-brh{background:var(--no)}
.sc-brs{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.sc-br.y .sc-chip{background:var(--yes-bg);box-shadow:none}.sc-br.n .sc-chip{background:var(--no-bg);box-shadow:none}
.sc-brt{margin-top:auto;text-align:center;font-size:24px;font-weight:900;color:#D9531E;border-top:2px dashed #E3E8EE;padding-top:8px}
/* 사는 곳 판 */
.sc-hab{display:flex;gap:16px;align-items:stretch;justify-content:center;max-width:1120px}
.sc-hab.stack{flex-direction:column;min-width:640px}
.sc-zone{flex:1 1 0;display:flex;flex-direction:column;gap:10px;border-radius:22px;padding:0 14px 14px;overflow:hidden;box-shadow:0 10px 30px rgba(20,40,70,.10);min-width:200px;background:#F6F8FB}
.sc-zh{margin:0 -14px;padding:8px 14px;display:flex;align-items:center;justify-content:center;gap:8px;font-size:27px;font-weight:900;color:#fff;white-space:nowrap}
.sc-zh i{font-style:normal;font-size:30px}
.sc-zi{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;padding-top:6px}
.sc-zi .sc-chip{box-shadow:0 3px 10px rgba(20,40,70,.08)}
.sc-zn{margin-top:auto;text-align:center;font-size:21px;font-weight:800;color:#5A6472}
.sc-zone.land{background:linear-gradient(#EAF6E0,#F6FBF1)}.sc-zone.land .sc-zh{background:#6DAA45}
.sc-zone.under{background:repeating-radial-gradient(circle at 20% 30%,#E9D8C0 0 3px,#F3E7D6 3px 14px)}.sc-zone.under .sc-zh{background:#8A5A2B}
.sc-zone.sky{background:linear-gradient(#DDEEFC,#F2F8FE)}.sc-zone.sky .sc-zh{background:#4FA3E0}
.sc-zone.fresh,.sc-zone.lake,.sc-zone.water{background:linear-gradient(#E6F2FC,#D2E8FA)}.sc-zone.fresh .sc-zh,.sc-zone.lake .sc-zh,.sc-zone.water .sc-zh{background:#3E86CF}
.sc-zone.sea{background:linear-gradient(#D6E6F8,#BFD6F2)}.sc-zone.sea .sc-zh{background:#2E5AAF}
.sc-zone.desert{background:linear-gradient(#FBF0D8,#F6E2B8)}.sc-zone.desert .sc-zh{background:#D9A03A}
.sc-zone.polar{background:linear-gradient(#F4FAFE,#E2F0FA)}.sc-zone.polar .sc-zh{background:#6FA8C8}
.sc-zone.field{background:linear-gradient(#E6F4E0,#F4FAF0)}.sc-zone.field .sc-zh{background:#2E9E63}
.sc-zone.on{box-shadow:0 0 0 5px #FF7A2F inset,0 10px 30px rgba(20,40,70,.10)}
.sc-hab.stack .sc-zone{flex-direction:row;align-items:center;padding:0 16px 0 0;min-height:92px}
.sc-hab.stack .sc-zh{margin:0;align-self:stretch;min-width:170px;flex-direction:column;gap:2px}
.sc-hab.stack .sc-zi{padding:10px 0;justify-content:flex-start}.sc-hab.stack .sc-zn{margin:0 0 0 auto;padding-left:12px}
.sc-hab.n4 .sc-zh{font-size:24px}.sc-hab.n4 .sc-chip,.sc-hab.n5 .sc-chip{font-size:23px;padding:6px 12px}.sc-hab.n4 .sc-zone{min-width:180px}
/* 생김새 → 쓸모 */
.sc-traits{display:flex;gap:22px;align-items:stretch;justify-content:center}
.sc-trait{display:flex;align-items:center;gap:20px;background:#fff;border-radius:24px;padding:14px 22px;box-shadow:0 10px 30px rgba(20,40,70,.10)}
.sc-who{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:130px}
.sc-who>i{font-style:normal;font-size:84px;line-height:1.05}.sc-who .sc-ic{width:96px;height:96px}
.sc-who b{font-size:28px;font-weight:900}
.sc-env{font-size:19px;font-weight:900;color:#fff;background:#6B7C93;border-radius:99px;padding:2px 12px;white-space:nowrap}
.sc-env.desert{background:#D9A03A}.sc-env.polar{background:#6FA8C8}.sc-env.under{background:#8A5A2B}.sc-env.water{background:#3E86CF}
.sc-rows{display:flex;flex-direction:column;gap:10px}
.sc-row{display:grid;grid-template-columns:auto 44px 1fr;align-items:center}
.sc-part{font-size:27px;font-weight:900;color:#D9531E;background:#FFF1E6;border-radius:14px;padding:7px 16px;white-space:nowrap;text-align:center}
.sc-row em{font-style:normal;text-align:center;font-size:30px;font-weight:900;color:#FF7A2F}
.sc-use{font-size:27px;font-weight:800;line-height:1.25;background:#EAF7F0;border-left:8px solid #2E9E63;border-radius:12px;padding:7px 16px;word-break:keep-all}
.sc-traits.n2 .sc-trait{flex-direction:column;gap:10px}.sc-traits.n2 .sc-who>i{font-size:66px}.sc-traits.n2 .sc-part,.sc-traits.n2 .sc-use{font-size:24px}
/* 이름표 그림 */
.sc-anat{display:flex;flex-direction:column;align-items:center;gap:8px}
.fig-svg.fig-anat{width:560px;background:#fff;border-radius:22px;box-shadow:0 10px 30px rgba(20,40,70,.10)}
.fig-panels .fig-svg.fig-anat{width:440px;box-shadow:none}
/* 한살이 */
.sc-cycle{display:flex;flex-direction:column;align-items:center;gap:10px;max-width:1120px}
.sc-cwho{display:flex;align-items:center;gap:10px;font-size:26px;font-weight:900;background:#EAF7F0;color:#1E7A48;border-radius:99px;padding:4px 20px 4px 10px}
.sc-cwho i{font-style:normal;font-size:34px}.sc-cwho .sc-ic{width:38px;height:38px}
.sc-cwho span{font-size:19px;color:#fff;background:#2E9E63;border-radius:99px;padding:2px 12px}
.sc-sts{display:flex;align-items:stretch;gap:0}
.sc-st{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;background:#fff;border-radius:20px;padding:12px 16px 12px;min-width:150px;box-shadow:0 8px 24px rgba(20,40,70,.10);border-bottom:8px solid #5CC08A}
.sc-stic{height:82px;display:flex;align-items:center;justify-content:center}.sc-stic i{font-style:normal;font-size:66px;line-height:1}.sc-stic .sc-ic{width:80px;height:80px}
.sc-st b{font-size:27px;font-weight:900;white-space:nowrap}
.sc-st u{text-decoration:none;font-size:20px;font-weight:800;color:#6B7C93;text-align:center;max-width:170px;word-break:keep-all}
.sc-st.on{background:#FFF6EF;box-shadow:0 0 0 5px #FF7A2F inset,0 8px 24px rgba(20,40,70,.10);border-bottom-color:#FF7A2F}.sc-st.on b{color:#D9531E}
.sc-st.nx{box-shadow:0 0 0 4px #FF7A2F inset;border-style:dashed}
.sc-nxt{position:absolute;top:-16px;right:-8px;font-size:18px;font-weight:900;color:#fff;background:#FF7A2F;border-radius:99px;padding:2px 10px}
.sc-st.fade{opacity:.42}
.sc-st.skip{background:#F4F6F9;border:4px dashed #C9D2DC;border-bottom-width:8px;box-shadow:none}.sc-st.skip b{color:#8A94A0;text-decoration:line-through}
.sc-ar{font-style:normal;align-self:center;font-size:40px;font-weight:900;color:#FF7A2F;padding:0 8px}
.sc-cycle.n5 .sc-st,.sc-cycle.n6 .sc-st{min-width:124px;padding:10px 10px}.sc-cycle.n5 .sc-st b,.sc-cycle.n6 .sc-st b{font-size:24px}.sc-cycle.n5 .sc-stic i,.sc-cycle.n6 .sc-stic i{font-size:54px}.sc-cycle.n5 .sc-ar,.sc-cycle.n6 .sc-ar{font-size:32px;padding:0 4px}
.sc-loop{position:relative;align-self:stretch;height:44px;margin:0 60px}
.sc-loop i{position:absolute;left:0;right:0;top:0;height:26px;border:5px solid #FF7A2F;border-top:0;border-radius:0 0 22px 22px}
.sc-loop i::after{content:'';position:absolute;left:-15px;top:-20px;border-bottom:22px solid #FF7A2F;border-left:12px solid transparent;border-right:12px solid transparent}
.sc-loop b{position:absolute;left:50%;top:10px;transform:translateX(-50%);font-size:22px;font-weight:900;color:#D9531E;background:#FFF1E6;border-radius:99px;padding:2px 16px;white-space:nowrap}
/* 조건 실험 */
.sc-cond{display:flex;flex-direction:column;gap:8px;background:#fff;border-radius:24px;padding:14px 20px 16px;box-shadow:0 10px 30px rgba(20,40,70,.10);min-width:720px}
.sc-ctitle{align-self:center;font-size:24px;font-weight:900;color:#fff;background:#2E9E63;border-radius:99px;padding:3px 22px}
.sc-crow{display:grid;grid-template-columns:190px 1fr 1fr 110px;align-items:center;gap:12px}
.sc-cond.n3 .sc-crow{grid-template-columns:170px 1fr 1fr 1fr 100px}
.sc-crow.head span{display:flex;align-items:center;justify-content:center;gap:8px;font-size:26px;font-weight:900}
.sc-ccol i{font-style:normal;font-size:40px}.sc-ccol .sc-ic{width:44px;height:44px}
.sc-cname{display:flex;align-items:center;gap:8px;font-size:26px;font-weight:900}.sc-cname i{font-style:normal;font-size:30px}
.sc-cv{font-size:26px;font-weight:800;text-align:center;border-radius:14px;padding:8px 10px;background:#F6F8FB;line-height:1.25;word-break:keep-all}
.sc-ctag{font-size:20px;font-weight:900;color:#fff;border-radius:99px;padding:3px 0;text-align:center}
.sc-crow.diff .sc-cv{background:#FFF1E6;color:#D9531E;box-shadow:0 0 0 3px #FF7A2F inset}.sc-crow.diff .sc-ctag{background:#FF7A2F}
.sc-crow.same .sc-cv{background:var(--yes-bg);color:#2B3440}.sc-crow.same .sc-ctag{background:var(--yes)}
.sc-crow.res{border-top:3px dashed #E3E8EE;padding-top:8px}.sc-crow.res .sc-ctag{background:var(--grow)}
.sc-crow.res .sc-cv{background:var(--no-bg);color:#6B7C93}.sc-crow.res .sc-cv.win{background:var(--grow-bg);color:#1E7A48;box-shadow:0 0 0 3px #2E9E63 inset}
/* 필요한 조건 */
.sc-needs{display:flex;gap:22px;align-items:stretch;justify-content:center}
.sc-need{display:flex;flex-direction:column;gap:10px;background:#fff;border-radius:22px;padding:0 18px 16px;overflow:hidden;box-shadow:0 10px 30px rgba(20,40,70,.10);min-width:360px}
.sc-nh{margin:0 -18px 4px;padding:8px 14px;font-size:27px;font-weight:900;color:#fff;background:#2E9E63;text-align:center;white-space:nowrap}
.sc-ni{display:grid;grid-template-columns:44px 1fr auto;align-items:center;gap:10px;border-radius:14px;padding:6px 12px}
.sc-ni i{font-style:normal;font-size:32px}.sc-ni b{font-size:27px;font-weight:900}.sc-ni em{font-style:normal;font-size:21px;font-weight:900;white-space:nowrap}
.sc-ni.ok{background:var(--yes-bg)}.sc-ni.ok em{color:var(--yes)}
.sc-ni.no{background:var(--no-bg)}.sc-ni.no b{color:#8A94A0}.sc-ni.no em{color:#8A94A0}
/* 본뜨기 */
.sc-mimic{display:grid;grid-template-columns:auto 110px auto;align-items:center;gap:10px 6px;min-width:600px}.sc-mimic.tag{grid-template-columns:auto 110px auto auto}
.sc-mrow{display:contents}
.sc-mrow.head span{font-size:21px;font-weight:900;color:#6B7C93;text-align:center}
.sc-mc{display:flex;align-items:center;gap:10px;font-size:28px;font-weight:900;border-radius:16px;padding:8px 18px;box-shadow:0 6px 18px rgba(20,40,70,.09)}
.sc-mc i{font-style:normal;font-size:36px}.sc-mc .sc-ic{width:40px;height:40px}
.sc-mc.a{background:var(--grow-bg);border-left:10px solid #2E9E63}.sc-mc.b{background:var(--yes-bg);border-left:10px solid #3E6FCF}
.sc-mrow em{font-style:normal;display:flex;flex-direction:column;align-items:center;font-size:34px;font-weight:900;color:#FF7A2F;line-height:1}
.sc-mrow em i{font-style:normal;font-size:18px;color:#D9531E}
.sc-mrow u{justify-self:start;margin-left:8px;text-decoration:none;font-size:21px;font-weight:800;color:#8A5A2B;background:#FFF1E6;border-radius:99px;padding:4px 14px;white-space:nowrap}
.sc-mimic.n4 .sc-mc{font-size:25px;padding:6px 14px}
.sc-bins .so-chip .sc-ic{width:32px;height:32px}
.sc-traits.n3 .sc-trait{flex-direction:column;gap:10px;padding:12px 16px}.sc-traits.n3 .sc-who>i{font-size:60px}.sc-traits.n3 .sc-who .sc-ic{width:70px;height:70px}.sc-traits.n3 .sc-part,.sc-traits.n3 .sc-use{font-size:23px}.sc-traits.n3 .sc-row{grid-template-columns:auto 34px auto}
.sc-traits.n2 .sc-who .sc-ic{width:80px;height:80px}

/* 28차 3학년 2학기 곱셈 부품 — vmul(곱셈 세로셈) · grid(모눈 가르기) · range(어림 사이) */
.fig-vmul .vm-wrap{display:flex;align-items:center;gap:30px}
.vt.vm{padding-left:48px}
.vm-carry span{font-size:22px}
.vm-p{color:#2B3440}
.vm-p.vm-hi,.vt-r.vm-hi{color:#FF7A2F}
.vm-blank span{min-height:44px}
.vm-side{display:flex;flex-direction:column;gap:14px;font-size:26px;font-weight:800;color:#6B7C93;font-variant-numeric:tabular-nums}
.vm-side .vm-sl{background:#F4F7FB;border-radius:12px;padding:8px 14px;white-space:nowrap}
.vm-side .vm-sl.vm-hi{background:#FFE8CC;color:#C2551A}
.fig-panels.n1 .fig-svg.fig-grid,.fig-panels.n1 .fig-svg.fig-range{width:560px}
.fig-panels.n2 .fig-vmul .vt{font-size:34px}.fig-panels.n2 .fig-vmul .vt-row{grid-auto-columns:44px}
.fig-panels.n2 .fig-vmul .vm-side{display:none}
/* 30차 3학년 2학기 나눗셈 부품 — vdiv(나눗셈 세로셈) · brem(묶고 남기) */
.fig-vdiv .vd-wrap{display:flex;align-items:center;gap:30px}
.vd{display:grid;font-family:'Pretendard',sans-serif;font-variant-numeric:tabular-nums;font-size:40px;font-weight:800;color:#2B3440;line-height:1.08}
.vd-row{display:grid;text-align:center}
.vd-row .vd-l{text-align:right;padding-right:6px}
.vd-q{color:#3E6FCF}
.vd-q.vd-blank span:not(.vd-l){min-height:42px;border-bottom:3px dashed #C9D2DC;margin:0 6px}
.vd-a span:not(.vd-l){border-top:4px solid #2B3440}
.vd-a .vd-l{position:relative;border-right:4px solid #2B3440;border-top-right-radius:22px 44px;color:#FF7A2F}
.vd-a .vd-l b{font-weight:800}
.vd-p,.vd-w{font-size:34px;color:#4A5563}
.vd-ln{height:4px}.vd-ln span{height:3px}.vd-ln span.on{background:#2B3440;border-radius:2px}
.vd-r{font-size:34px;color:#E0413C}
.vd-hi,.vd-p.vd-hi,.vd-w.vd-hi,.vd-q.vd-hi,.vd-r.vd-hi{color:#FF7A2F}
.vd-side{display:flex;flex-direction:column;gap:12px;font-size:26px;font-weight:700;color:#6B7C93;font-variant-numeric:tabular-nums}
.vd-side .vd-sl{background:#F4F7FB;border-radius:12px;padding:8px 14px;white-space:nowrap}
.vd-side .vd-sl b{color:#2B3440;font-size:30px}
.vd-side .vd-sl.vd-hi{background:#FFE8CC;color:#C2551A}
.vd-side .vd-ck{background:#E8F6EC;color:#2E7D4F;font-weight:800}
.fig-panels.n2 .fig-vdiv .vd{font-size:32px}.fig-panels.n2 .fig-vdiv .vd-side{display:none}
.fig-panels.n1 .fig-svg.fig-brem{width:560px}
/* 31차 3학년 2학기 원 부품 — circ(원) · compass(컴퍼스) · cgrid(모눈 원 무늬) · crow(크기 견주기) */
.fig-panels.n1 .fig-svg.fig-circ,.fig-panels.n1 .fig-svg.fig-compass{width:520px}
.fig-panels.n1 .fig-svg.fig-cgrid,.fig-panels.n1 .fig-svg.fig-crow{width:600px}

/* 32차 3학년 2학기 분수와 소수 부품 — fgroup(묶어서 분수) · fmix(1보다 큰 분수·소수) · nline(1보다 큰 수직선) */
.fig-panels.n1 .fig-svg.fig-fgroup,.fig-panels.n1 .fig-svg.fig-fmix,.fig-panels.n1 .fig-svg.fig-nline{width:600px}

/* 33차 3학년 2학기 들이와 무게 부품 — beaker(눈금 비커) · dial(바늘 저울) · tilt(양팔저울) · cups(컵·수조) · tubs(통에 나누어 담기) · tvert base 1000(L·mL / kg·g 세로셈) */
.fig-panels.n1 .fig-svg.fig-beaker,.fig-panels.n1 .fig-svg.fig-tilt,.fig-panels.n1 .fig-svg.fig-cups,.fig-panels.n1 .fig-svg.fig-tubs{width:600px}
.fig-panels.n1 .fig-svg.fig-dial{width:430px}
.tv.wide .tv-row{grid-template-columns:repeat(3,176px)}.tv.wide.n2 .tv-row{grid-template-columns:repeat(2,176px)}
.fig-panels.n2 .tv.wide .tv-row,.fig-panels.n3 .tv.wide .tv-row{grid-template-columns:repeat(2,150px)}.fig-panels.n2 .tv.wide{font-size:34px}

/* 34차 3학년 2학기 그림그래프 부품 — ptable(자료 표) · ograph(◯ 그래프) · pgraph(그림그래프) · area2 */
.pg-title{font-size:24px;font-weight:900;color:#2B3440;text-align:center}
.pt{border-collapse:collapse;font-size:24px;font-weight:800;color:#2B3440}
.pt th,.pt td{border:2px solid #B9C4D2;padding:8px 14px;text-align:center;white-space:nowrap}
.pt th{background:#EEF2F7;font-size:21px}.pt td.n{font-variant-numeric:tabular-nums;font-size:28px}
.pt td.sum{background:#EEF4FD;color:#3E6FCF}.pt td.hi{background:#FFF1E6;color:#C2551A}.pt td.q{color:#FF7A2F;font-size:32px}
.og{display:grid;gap:2px 8px;align-items:center;justify-items:center;font-weight:800}
.og-y{font-size:17px;color:#8A93A0;justify-self:end}.og-y.u{font-size:15px}
.og-c{width:40px;height:34px;display:flex;align-items:center;justify-content:center;font-size:28px;color:#3E6FCF;border-bottom:1px dashed #D5DCE6}
.og-c.hi{color:#FF7A2F}.og-x{font-size:20px;color:#2B3440;border-top:3px solid #2B3440;padding-top:4px;width:100%;text-align:center}.og-x.hi{color:#C2551A}
.pg{border-collapse:collapse;font-weight:800;color:#2B3440}
.pg th,.pg td{border:2px solid #B9C4D2;padding:4px 12px}
.pg tr.pg-head th{background:#EEF2F7;font-size:20px;text-align:center}
.pg th{font-size:22px;white-space:nowrap;text-align:center;background:#F7F9FC}
.pg-pics{min-width:360px;text-align:left;line-height:1}
.pg-ic{font-style:normal;display:inline-block;vertical-align:middle;margin:1px 2px;line-height:1}
.pg-ic.l{font-size:44px}.pg-ic.m{font-size:31px}.pg-ic.s{font-size:22px}
.pg td.pg-n,.pg th.pg-n{font-size:24px;text-align:center;color:#3E6FCF;font-variant-numeric:tabular-nums;min-width:64px}
.pg td.pg-n.q{color:#FF7A2F;font-size:30px}
.pg tr.hi th,.pg tr.hi td{background:#FFF1E6}.pg tr.hi th{color:#C2551A}
.pg tr.bad td.pg-pics{box-shadow:inset 0 0 0 3px #F2545B}
.pg tr.blank td.pg-pics{background:repeating-linear-gradient(90deg,#fff 0 12px,#F3F5F9 12px 24px)}
.pg-blank{display:inline-block;height:44px}
.pg-leg{display:flex;gap:22px;font-size:20px;font-weight:800;color:#3B4252;align-items:center}
.fig-panels.n2 .pg-pics{min-width:220px}.fig-panels.n2 .pg-ic.l{font-size:34px}.fig-panels.n2 .pg-ic.m{font-size:24px}.fig-panels.n2 .pg-ic.s{font-size:17px}.fig-panels.n2 .pg th{font-size:19px}
.fig-panels.n1 .fig-svg.fig-area2{width:560px}

/* 45차 사회 3-2 부품 — sbars 막대그래프 · dots 백 명 마을 */
.so-bars{display:flex;flex-direction:column;align-items:center;gap:6px;width:100%;max-width:900px}
.so-bars .fig-svg{width:100%;max-width:860px;height:auto}
.so-bt{font-size:26px;font-weight:800;color:#2B4C8C}
.so-bcap{font-size:25px;font-weight:800;color:#D9591A;background:#FFF1E8;border-radius:14px;padding:6px 16px}
.so-dots{display:flex;flex-wrap:wrap;gap:22px;justify-content:center;align-items:flex-start;max-width:1100px}
.so-dot1{display:flex;flex-direction:column;align-items:center;gap:6px;background:#fff;border-radius:20px;padding:12px 14px;box-shadow:0 10px 30px rgba(20,40,70,.10)}
.so-dot1 .fig-svg{width:220px;height:auto}
.so-dh{font-size:25px;font-weight:800;color:#2B4C8C}
.so-dc{font-size:21px;color:#334}.so-dc b{color:#D9591A}
.so-dnote{flex-basis:100%;text-align:center;font-size:22px;color:#556}
/* 46차 갈래 통 긴 글 — 통 안 칩·머리는 줄바꿈(한 줄로 들어가던 칩은 그대로) · 네 갈래는 조금 작게 */
.so-bitems .so-chip{white-space:normal;word-break:keep-all;overflow-wrap:anywhere;min-width:0;text-align:left}
.so-binh{white-space:normal;word-break:keep-all;line-height:1.2}
.so-bin{min-width:0}
.so-groups.n4 .so-bitems .so-chip{font-size:21px;line-height:1.3}
/* 46차 sort2 wide — 긴 문장 설명(사회 l11 ○✗)은 통을 넓게 써 높이를 줄인다 */
.ko-sort2.wide{width:100%;max-width:1400px}
.ko-sort2.wide .ko-bin{flex:1 1 0;max-width:none;min-width:0}
.ko-sort2.wide .ko-bin.a{flex-grow:1.5}
.ko-sort2.wide .ko-item{font-size:24px;line-height:1.3;word-break:keep-all}

/* 53차: 사회 3-2 2단원 — 카드 꼬리표 낱말 가운데 줄바꿈 막기(keep 카드만) · 형광펜 두 색 통(hy 노랑 · hs 하늘색) */
.fig-card.keep span{word-break:keep-all}
.so-bin.hy .so-binh{background:#F5C518;color:#3D2E00}
.so-bin.hy .so-chip{background:#FEF3A7}
.so-bin.hs .so-binh{background:#38BDF8;color:#06324A}
.so-bin.hs .so-chip{background:#D6F0FD}

/* 54차: 사회 3-2 2단원 l07 전광판(led) — 어두운 판 위에 켠 칸만 빛나요(갈래마다 색) · 꺼진 칸은 흐리게 */
.so-led{display:flex;flex-direction:column;align-items:center;gap:12px;width:100%;max-width:1180px}
.so-ledg{display:grid;gap:7px;width:100%;background:#1E2530;padding:14px;border-radius:20px;box-shadow:inset 0 0 0 3px #39455A}
.so-ledg .so-lc{display:flex;align-items:center;justify-content:center;min-height:52px;padding:6px 4px;border-radius:11px;background:#2B3446;color:#6F7C93;font-size:19px;font-weight:800;line-height:1.2;text-align:center;word-break:keep-all}
.so-ledg .so-lc.on.k0{background:#FFD24A;color:#3A2A00;box-shadow:0 0 16px rgba(255,210,74,.75)}
.so-ledg .so-lc.on.k1{background:#FF8A3D;color:#fff;box-shadow:0 0 16px rgba(255,138,61,.75)}
.so-ledg .so-lc.on.k2{background:#5EC8FF;color:#07324A;box-shadow:0 0 16px rgba(94,200,255,.75)}
.so-ledk{display:flex;flex-wrap:wrap;gap:18px;justify-content:center;font-size:20px;font-weight:800;color:#3A4658}
.so-ledk i{display:inline-block;width:18px;height:18px;border-radius:5px;vertical-align:-3px;margin-right:6px;background:#2B3446}
.so-ledk i.k0{background:#FFD24A}.so-ledk i.k1{background:#FF8A3D}.so-ledk i.k2{background:#5EC8FF}

/* 57차 4학년 1학기 큰 수 부품 — pvt(자릿값판) · jump(뛰어 세기 띠) · notes(지폐·동전) */
.pv-wrap{max-width:100%;overflow-x:auto}
.pv{border-collapse:collapse;font-weight:800;color:#2B3440}
.pv th,.pv td{border:2px solid #B9C4D2;text-align:center;min-width:44px;padding:4px 6px}
.pv tr.pv-band th{font-size:20px;color:#fff;padding:3px 6px}
.pv tr.pv-band th.b0{background:#6B7C93}.pv tr.pv-band th.b1{background:#3E6FCF}.pv tr.pv-band th.b2{background:#7A52B3}.pv tr.pv-band th.b3{background:#2E7D4F}
.pv tr.pv-head th{font-size:19px;background:#F4F6FA}
.pv td{font-size:34px;font-variant-numeric:tabular-nums;height:52px;background:#fff}
.pv td.b1{background:#F3F7FE}.pv td.b2{background:#F7F3FD}.pv td.b3{background:#F1F8F4}
.pv .hi{background:#FFF1E6 !important;color:#C2551A;box-shadow:inset 0 0 0 3px #FF7A2F}
.pv .df{background:#E7F6EC !important;color:#2E7D4F;box-shadow:inset 0 0 0 3px #3BA55C}
.pv td.q{color:#FF7A2F;font-size:38px}
.pv .pv-lab{font-size:19px;background:#F7F9FC;white-space:nowrap;padding:4px 10px}
.pv-eq{font-size:26px;font-weight:900;color:#3E6FCF;text-align:center;font-variant-numeric:tabular-nums;word-break:break-all}
.pv-read{font-size:22px;font-weight:800;color:#3B4252;text-align:center}.pv-read b{color:#3E6FCF}
.jp{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:6px 4px;max-width:880px}
.jp-b{font-size:28px;font-weight:900;color:#2B3440;background:#fff;border:3px solid #B9C4D2;border-radius:14px;padding:6px 12px;font-variant-numeric:tabular-nums}
.jp-b i{font-style:normal;color:#C2551A;background:#FFF1E6;border-radius:6px;padding:0 2px}
.jp-b.q{color:#FF7A2F;border-color:#FF7A2F;min-width:70px;text-align:center}
.jp-a{display:flex;flex-direction:column;align-items:center;font-size:24px;color:#FF7A2F;font-weight:900;line-height:1}.jp-a em{font-style:normal;font-size:17px}
.jp-key{font-size:19px;font-weight:800;color:#6B7C93}.jp-key i{display:inline-block;width:16px;height:16px;border-radius:4px;background:#FFF1E6;box-shadow:inset 0 0 0 2px #FF7A2F;vertical-align:-2px;margin-right:6px}
.nt-row{display:flex;flex-wrap:wrap;align-items:center;gap:5px;justify-content:center;max-width:760px}
.nt-bill{font-size:15px;font-weight:900;color:#2E5E3A;background:#DDEFD9;border:2px solid #7FB47A;border-radius:6px;padding:9px 6px}
.nt-bill.v10000{background:#E6ECF8;border-color:#7D97CF;color:#2D4A8A}
.nt-coin{font-size:14px;font-weight:900;color:#5A6472;background:#E9EDF2;border:2px solid #A9B3BF;border-radius:50%;width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center}
.nt-n{font-size:20px;color:#6B7C93;margin-left:8px}
/* 60차 — 그림 붙은 문제 장: 좌 그림 · 우 글·물음·보기·답 (세로 넘침 → 가로 폭 쓰기) */
.prob-split{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:40px;width:100%;max-width:1440px}
.prob-split .ps-fig{flex:0 1 auto;min-width:0;display:flex;justify-content:center}
.prob-split .ps-main{flex:1 1 0;min-width:0;display:flex;flex-direction:column;align-items:center;gap:22px}
.prob-split .ps-main > *{max-width:100%}
.prob-split .fig-panels.n2 .fig-svg{width:300px}
.prob-split .fig-panels.n1 .fig-svg{width:460px}
.prob-split .fig-panels.n3 .fig-svg{width:220px}
.prob-split .fig-panels{gap:14px}
.prob-split .scenario{padding:20px 26px;font-size:30px;gap:18px}
.prob-split .scenario .ic{font-size:70px}
.prob-split .ps-fig{max-width:46%}
.prob-split .big-q{font-size:34px;padding:18px 30px}
.prob-split .options{gap:14px}
.prob-split .options.n3{grid-template-columns:repeat(3,minmax(0,1fr))}.prob-split .options.n3.long{grid-template-columns:minmax(0,1fr)}
.prob-split .opt{font-size:30px;padding:12px 22px;min-height:72px;gap:16px}
.prob-split .opt .mk{width:48px;height:48px;font-size:24px}
/* 63차 — 문제 장 두 칸: 막대그래프 둘은 세로로 쌓아 글 칸을 넓힘 · 긴 보기 넷은 한 단계 작게 */
.prob-split .fig-panels.n2:has(.fig-bar){flex-direction:column;align-items:center;gap:10px}
.prob-split .fig-panels.n2:has(.fig-bar) .fig-svg{width:380px}
.prob-split .options.n4.long .opt{font-size:27px;padding:10px 18px;min-height:64px;gap:12px;line-height:1.35}
.prob-split .options.n4.long .opt .mk{width:42px;height:42px;font-size:21px}
.prob-split .ps-main{gap:16px}
.prob-split .small-text{font-size:22px;line-height:1.4}
/* 63차 — 자료 그래프 개념 장: 말풍선 왼쪽 · 그래프 오른쪽 */
.concept-split{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:44px;width:100%;max-width:1440px}
.concept-split .cs-text{flex:1 1 0;min-width:0;display:flex;justify-content:center}
.concept-split .cs-text > *{max-width:100%}
.concept-split .cs-fig{flex:0 1 auto;min-width:0;max-width:56%;display:flex;justify-content:center}
.concept-split .cs-fig .fig-svg{width:560px}
.concept-split .cs-fig .fig-panels.n2 .fig-svg{width:380px}
.concept-split .cs-fig .fig-panels{flex-direction:column;align-items:center;gap:10px}
/* 64차 — 관계와 규칙 부품: ngrid(수 배열표) · eqs(계산식의 배열) · eqc(등호 카드) */
.fig-ngrid .ng-wrap{max-width:100%;overflow:hidden}
.ng{border-collapse:separate;border-spacing:6px;font-size:28px;font-weight:900;color:#2B3440;font-variant-numeric:tabular-nums}
.ng td{background:#fff;border:3px solid #B9C4D2;border-radius:12px;min-width:76px;height:56px;padding:4px 10px;text-align:center;white-space:nowrap}
.ng td.hd{background:#EEF2F7;color:#5B6B80}
.ng td.hl-teal{background:#E4F5F3;border-color:#2FB5AA}.ng td.hl-gold{background:#FFF6DF;border-color:#F6C445}.ng td.hl-emph{background:#FFF1E6;border-color:#FF7A2F}
.ng td.hl-fold{background:#E8F5E9;border-color:#2E9E5B;border-style:dashed;color:#1B7A43}.ng td.hl-mark{background:#FFE0E6;border-color:#F06292;color:#AD1457}
.ng td.q{color:#FF7A2F;border-color:#FF7A2F;border-style:dashed;font-size:32px}
.ng-ar{font-size:22px;font-weight:800;color:#168A80;text-align:center}
.fig-eqs{gap:10px;min-width:420px}
.eqs-row{display:flex;align-items:center;gap:18px;width:100%;background:#fff;border:3px solid #DCE3EC;border-radius:14px;padding:8px 18px}
.eqs-row .eo{font-size:20px;font-weight:800;color:#6B7C93;min-width:66px}
.eqs-row .ee{font-size:30px;font-weight:900;color:#2B3440;font-variant-numeric:tabular-nums;white-space:nowrap}
.eqs-row.hl{background:#FFF6DF;border-color:#F6C445}.eqs-row.blank .ee{color:#C2551A}
.fig-eqc{gap:12px}
.ec-row{display:flex;align-items:center;justify-content:center;gap:14px;flex-wrap:wrap}
.ec-b{background:#fff;border:3px solid #B9C4D2;border-radius:14px;padding:8px 18px;font-size:32px;font-weight:900;color:#2B3440;font-variant-numeric:tabular-nums;white-space:nowrap}
.ec-b.on{background:#FFF6DF;border-color:#F6C445}
.ec-eq{font-size:36px;font-weight:900;color:#168A80}
.ec-j{font-size:20px;font-weight:800;border-radius:999px;padding:5px 14px}.ec-j.ok{background:#E8F6EC;color:#2E8B57}.ec-j.no{background:#FDEDE8;color:#C2551A}
.prob-split .ng{font-size:24px}.prob-split .ng td{min-width:64px;height:50px;padding:2px 6px}
.prob-split .eqs-row .ee{font-size:26px}.prob-split .fig-eqs{min-width:0}
/* 65차 — 관계·규칙 개념 장도 두 칸(말풍선 왼쪽 · 그림 오른쪽) · 모양 배열 둘은 나란히(세로로 쌓으면 장이 높아짐) */
.concept-split .cs-fig .fig-panels:has(.fig-shapes){flex-direction:row;align-items:flex-end;gap:14px}
.concept-split .cs-fig .fig-panels:has(.fig-shapes) .fig-svg{width:auto;height:300px;max-width:340px}
.concept-split .cs-text{word-break:keep-all}

/* 76차(2026-10-06) 4-1 사회 u1 — 픽셀 지도(led colors) : 판 바탕을 밝은 모눈으로 · 칸은 정사각. 54차 전광판 칸 규칙(.so-lc)을 .so-ledg 안으로 좁힘 — 넓은 .so-lc 가 짝 잇기(link) 칸까지 어둡게 덮던 것 */
.so-led.px .so-ledg{background:#F4F7FB;box-shadow:inset 0 0 0 3px #C9D2DC;max-width:470px;gap:5px;padding:10px}
.so-led.px .so-ledg .so-lc{aspect-ratio:1/1;min-height:0;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:900}
.so-led.px .so-ledg .so-lc.off{background:#fff;box-shadow:inset 0 0 0 2px #E1E7EF;color:transparent}
.so-led.px .so-ledk i.off{background:#fff;box-shadow:inset 0 0 0 2px #C9D2DC}

/* 80차 4학년 2학기 분수의 덧셈과 뺄셈 부품 — fop(같은 분모 분수의 덧셈·뺄셈 띠) */
.fig-panels.n1 .fig-svg.fig-fop{width:620px}

/* 81차 — tools 카드가 많을 때(wrap) 두 줄로 */
.fig-cards.wrap{flex-wrap:wrap;max-width:1180px;margin-left:auto;margin-right:auto;row-gap:16px}
/* ── 83차(2026-10-06) 4학년 2학기 소수 부품 — dgrid · dline · dpv · dvert · rtab ── */
.fig-dpv .pv th{font-size:16px;line-height:1.1;padding:4px 4px}
.pv .dp{min-width:16px !important;width:16px;padding:0 !important;border-left:none !important;border-right:none !important;background:#fff;font-size:34px;font-weight:900}
.pv th.dp{background:#F4F6FA}
.pv td.pz{color:#B9C4D2}
.pv-shift{font-size:22px;font-weight:800;color:#C2551A}
.dv{display:flex;flex-direction:column;font-family:'Pretendard',sans-serif;font-variant-numeric:tabular-nums;font-size:42px;font-weight:800;color:#2B3440;line-height:1.05;padding-left:44px}
.dv-row{display:grid;position:relative;text-align:center}
.dv-row em{position:absolute;left:-44px;top:0;font-style:normal;color:#FF7A2F}
.dv-row .dp{font-weight:900}
.dv-row .pz{color:#B9C4D2}
.dv-carry{font-size:22px;color:#FF7A2F;height:26px;line-height:26px}
.dv-carry span i{font-style:normal;color:#E0413C}
.dv-line{height:4px;background:#2B3440;margin:6px 0 6px -48px;border-radius:2px}
.dv-r{color:#3E6FCF}
.dv.bad .dv-r{color:#E0413C}
.dv.bad .dv-row{grid-auto-flow:column}
.rtab th,.rtab td{font-size:24px}
.rtab td.n{font-variant-numeric:tabular-nums}
/* 83차 준호 「모든 것이 이것보다 커야 해」 — 활동 카드(s13)가 0.6배로 줄던 것: 순서 두 칸 · 여백 좁힘 */
.offline{max-width:1560px;padding:26px 40px;gap:14px}
.offline .steps{display:grid;grid-template-columns:1fr 1fr;grid-auto-flow:column;grid-template-rows:repeat(2,auto);gap:12px 16px}
.offline .steps li{font-size:30px;padding:12px 20px}
.offline .steps{max-width:none}
.offline .ctrls{position:absolute;right:40px;bottom:24px}
.offline .mats{margin-right:340px;min-height:52px}
.offline .steps li{padding:8px 18px;line-height:1.3;min-height:0}
.offline{gap:12px;padding:22px 40px}
/* 83차 — 동기 장(s03)도 줄지 않게: 그림 높이 조금 낮추고 물음 칸을 넓혀 줄 수를 줄임 */
.picture{min-height:330px}
.picture .scene{padding:24px 24px 16px}
.big-q{max-width:1560px}
.picture .kid .face.chr{width:112px;height:128px}
.picture .kid .face.chr svg{width:100%;height:100%}
.big-q{padding-top:16px;padding-bottom:16px}
.picture{min-height:280px}
.picture .scene{padding:14px 24px 10px}
.picture .kid.talk{padding:2px 10px}
/* 83차 — 요약 장(s17): 화살표 글이 200px 칸에 갇혀 세 줄로 꺾이던 것 · 요점 칸을 넓혀 한 줄로 */
.arrow-flow{max-width:1560px}
.af .l{font-size:28px;max-width:440px}
.points{max-width:1560px;gap:12px}
.point{padding:12px 28px}
/* 85차 준호 「모든 것이 이것보다 커야 해」 — 문제 장(기본·정답 펼침) 공통: 보기·말풍선·물음 칸을 1560 으로 넓혀 줄 수를 줄임 */
.options{max-width:1560px;gap:16px}
.opt{padding:14px 26px;min-height:84px;gap:18px;line-height:1.32}
.guide-say{max-width:1560px}
.guide-say .g-bub{padding:20px 36px;margin-bottom:46px}
.guide-say .g-bub .big-text{max-width:1300px}
.context-text{max-width:1560px}
/* 85차 — 말풍선 안 장면 이모지가 뒤의 .sc-ic{width:36px} 규칙에 눌려 첫 글자와 겹치던 것 */
.guide-say .sc-body .sc-ic{width:auto;height:auto}
/* 85차 — 넘칠 때만 붙는 fit-split: 말풍선과 바로 뒤 그림을 옆으로(그 밖의 것은 한 줄씩 아래로) */
.kt2-body.fit-split{flex-direction:row;flex-wrap:wrap;align-items:center;align-content:center;column-gap:36px}
.kt2-body.fit-split > *{flex:0 0 100%}
.kt2-body.fit-split > .guide-say{flex:1 1 0;min-width:0;max-width:none}
.kt2-body.fit-split > .guide-say .g-bub{margin-bottom:30px}
.kt2-body.fit-split > .guide-say .g-chr,.kt2-body.fit-split > .guide-say .g-chr svg{width:110px;height:126px}
.kt2-body.fit-split > .guide-say + *{flex:0 1 auto;max-width:56%;min-width:0}
/* 85차 — fit-side: 첫 덩이 왼쪽, 나머지는 오른쪽 칸에 차례로(넘칠 때만) */
.kt2-body.fit-side{display:grid;grid-template-columns:minmax(0,auto) minmax(0,1fr);grid-auto-rows:auto;row-gap:0;column-gap:40px;align-content:center;align-items:center;justify-items:center}
.kt2-body.fit-side > *{grid-column:2;margin:10px 0}
.kt2-body.fit-side > :first-child{grid-column:1;grid-row:1 / span 9;max-width:780px;align-self:center}
.kt2-body.fit-side > .guide-say:first-child .g-chr,.kt2-body.fit-side > .guide-say:first-child .g-chr svg{width:110px;height:126px}
.kt2-body.fit-side .options{grid-template-columns:repeat(2,minmax(0,1fr))}
.kt2-body.fit-split > .guide-say + .big-q{max-width:48%}
/* 87차 — fit-split 안의 그림은 제 칸(54%까지)에 맞춰 줄어든다: 고정 폭 그림(나란히 칸 440px×n)이 옆으로 넘쳐 장 전체가 통째 축소되던 것 · 글자는 그대로 · 작은 그림은 제 크기 */
.kt2-body.fit-split > .guide-say + .fig{flex:0 1 auto;max-width:54%;min-width:0}
.kt2-body.fit-split > .guide-say + .fig > .fig-panels{max-width:100%}
.kt2-body.fit-split > .guide-say + .fig .fig-panel{flex:0 1 auto;min-width:0}
.kt2-body.fit-split > .guide-say + .fig .fig-svg{max-width:100%}
/* 87차 — fit-tight(넘칠 때만): 종이 위아래 여백·머리·제목 아래·덩이 사이·말풍선 아래를 좁혀 본문 자리를 늘린다 · 글자 크기는 그대로 */
.kt2-paper:has(> .kt2-body.fit-tight){padding-top:40px;padding-bottom:30px}
.kt2-paper:has(> .kt2-body.fit-tight) > .kt2-head{margin-bottom:10px}
.kt2-paper:has(> .kt2-body.fit-tight) > .kt2-title{margin-bottom:14px}
.kt2-paper:has(> .kt2-body.fit-tight) > .kt2-sub{margin:-8px 0 12px}
.kt2-paper:has(> .kt2-body.fit-tight) > .kt2-foot{margin-top:8px}
.kt2-body.fit-tight{gap:16px}
.kt2-body.fit-tight .guide-say .g-bub{margin-bottom:22px}
.kt2-body.fit-tight .guide-say .g-chr,.kt2-body.fit-tight .guide-say .g-chr svg{width:104px;height:118px}
/* 88차 — 수준별 문제: 정답 펼침이 넘칠 때만 물음 왼쪽 · 정답과 풀이 차례 오른쪽 세로(글자 크기 그대로) */
.kt2-body.fit-lv .lv-body:has(> .lv-a){display:grid;grid-template-columns:fit-content(58%) minmax(0,1fr);column-gap:40px;row-gap:16px;align-items:center;align-content:center}
.kt2-body.fit-lv .lv-body > .lv-q{grid-column:1;grid-row:1 / span 2;text-align:left}
.kt2-body.fit-lv .lv-body > .lv-a{grid-column:2;grid-row:1;justify-self:center;align-self:end}
.kt2-body.fit-lv .lv-body > .lv-steps{grid-column:2;grid-row:2;flex-direction:column;flex-wrap:nowrap;align-items:center;gap:10px;align-self:start;counter-reset:lvs}
.kt2-body.fit-lv .lv-body > .lv-steps i{display:none}
.kt2-body.fit-lv .lv-body > .lv-steps span{counter-increment:lvs}
.kt2-body.fit-lv .lv-body > .lv-steps span::before{content:counter(lvs);display:inline-block;min-width:1.5em;margin-right:8px;font-weight:900;color:var(--ok)}
.kt2-body.fit-lv.fit-tight .lv-body{padding:26px 44px}
/* 88차 — 오개념 두 칸(넘칠 때만): 고정 600px 대신 1560 안에서 나눠 넓힘 · 바른 쪽(대개 긴 글) 조금 더 넓게 · 글자 크기 그대로 */
.kt2-body.row.fit-tight{column-gap:28px}
.kt2-body.row.fit-tight > .mis-card{width:auto;min-width:0;max-width:none;padding:24px 32px}
.kt2-body.row.fit-tight > .mis-card.w{flex:1 1 0}
.kt2-body.row.fit-tight > .mis-card.r{flex:1.35 1 0}
.kt2-body.row.fit-tight > .mis-hint{flex:0 0 100%}
/* 88차 — 읽어 주기(넘칠 때만): 그림책 자리 왼쪽 · 읽을 글 오른쪽 나란히 · 글자 크기 그대로 */
.kt2-body.fit-tight:has(> .ra-frame){display:grid;grid-template-columns:auto minmax(0,auto);justify-content:center;align-items:center;column-gap:36px;row-gap:16px}
.kt2-body.fit-tight:has(> .ra-frame) > *{grid-column:1 / -1;justify-self:center}
.kt2-body.fit-tight:has(> .ra-frame) > .ra-frame{grid-column:1;width:620px;height:320px}
.kt2-body.fit-tight:has(> .ra-frame) > .ra-quote{grid-column:2;max-width:820px;justify-self:start}
/* 88차 — fit-lv2(넘칠 때만): 물음은 위 한 줄 · 아래에 정답 왼쪽 · 풀이 차례 오른쪽 세로(정답 글이 긴 장) */
.kt2-body.fit-lv2 .lv-body:has(> .lv-a){display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);column-gap:32px;row-gap:14px;align-items:center}
.kt2-body.fit-lv2 .lv-body > .lv-q{grid-column:1 / -1}
.kt2-body.fit-lv2 .lv-body > .lv-a{grid-column:1;justify-self:stretch}
.kt2-body.fit-lv2 .lv-body > .lv-a:last-child{grid-column:1 / -1;justify-self:center}
.kt2-body.fit-lv2 .lv-body > .lv-steps{grid-column:2;flex-direction:column;flex-wrap:nowrap;align-items:flex-start;gap:10px;counter-reset:lvs}
.kt2-body.fit-lv2 .lv-body > .lv-steps i{display:none}
.kt2-body.fit-lv2 .lv-body > .lv-steps span{counter-increment:lvs;text-align:left}
.kt2-body.fit-lv2 .lv-body > .lv-steps span::before{content:counter(lvs);display:inline-block;min-width:1.5em;margin-right:8px;font-weight:900;color:var(--ok)}
.kt2-body.fit-lv2.fit-tight .lv-body{padding:22px 36px}
/* 88차 — 수준별 문제(넘칠 때만): 정답 보기 단추를 수준 탭 옆 같은 줄로 올림 */
.kt2-body.fit-tight:has(> .lv-body){display:grid;grid-template-columns:1fr auto auto 1fr;column-gap:24px;row-gap:16px;align-content:center;justify-items:center}
.kt2-body.fit-tight:has(> .lv-body) > *{grid-column:1 / -1}
.kt2-body.fit-tight:has(> .lv-body) > .lv-tabs{grid-column:2;grid-row:1}
.kt2-body.fit-tight:has(> .lv-body) > .ctrls{grid-column:3;grid-row:1;margin:0}
.kt2-body.fit-tight:has(> .lv-body) > .lv-body{grid-row:2}

/* 89차 — fit-wrap(넘칠 때만): 옆으로 이어진 카드(차례·도구·그다음)가 종이 폭을 넘으면 두 줄로 · 글자 크기 무변 */
.kt2-body.fit-wrap .fig-cards{flex-wrap:wrap;row-gap:16px;max-width:100%}
.kt2-body.fit-wrap .fig{max-width:100%}
/* 89차 — fit-cols(넘칠 때만): 말풍선 안 짧은 줄 목록을 두 단으로(위→아래 차례) · 앞뒤 긴 줄은 그대로 한 줄씩 */
.guide-say .g-bub .big-text .bt-cols{display:block}
.guide-say .g-bub .big-text .bt-ln{display:block;break-inside:avoid}
.kt2-body.fit-cols .guide-say .g-bub .big-text .bt-cols{columns:2;column-gap:56px}
/* 89차 — fit-pts(넘칠 때만): 요약 요점 다섯 줄 이상을 두 단으로(왼쪽 위→아래, 다음 오른쪽) */
.kt2-body.fit-pts > .points{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-flow:column;grid-template-rows:repeat(3,auto);column-gap:20px;align-items:start}
.kt2-body.fit-pts > .points:not(:has(> :nth-child(5))){grid-template-rows:repeat(2,auto)} /* 91차 — 넷이면 두 줄씩 */
.kt2-body.fit-pts > .points:has(> :nth-child(7)){grid-template-rows:repeat(4,auto)}
.kt2-body.fit-pts > .points:has(> :nth-child(9)){grid-template-rows:repeat(5,auto)}
.kt2-body.fit-pts > .points:has(> :nth-child(11)){grid-template-rows:repeat(6,auto)}
/* 89차 — 활동 장 큰 아이콘이 긴 목표 글 첫 줄을 덮던 것: 꼬리표 줄 높이 안으로 */
.offline .ic{font-size:56px;top:24px;right:40px}

/* 90차 — fit-head(넘칠 때만): 제목을 머리(단계 칩·차시 이름)와 한 줄에 놓아 제목 줄만큼 본문 자리를 늘린다 · 글자 크기 무변 · 차시 이름이 말줄임되면 fitZoom 이 안 고름 */
.kt2-paper:has(> .kt2-body.fit-head){display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto minmax(0,1fr) auto;column-gap:30px}
.kt2-paper:has(> .kt2-body.fit-head) > .kt2-title{grid-column:1;grid-row:1;margin:0;align-self:center;white-space:nowrap}
.kt2-paper:has(> .kt2-body.fit-head) > .kt2-head{grid-column:2;grid-row:1;margin:0;align-self:center;min-width:0}
.kt2-paper:has(> .kt2-body.fit-head) > .kt2-sub{grid-column:1 / -1;grid-row:2;margin:8px 0 6px}
.kt2-paper:has(> .kt2-body.fit-head) > .kt2-body{grid-column:1 / -1;grid-row:3;margin-top:14px}
.kt2-paper:has(> .kt2-body.fit-head) > .kt2-foot{grid-column:1 / -1;grid-row:4}
.kt2-body.fit-qh{display:grid;grid-template-columns:minmax(0,1fr) auto auto minmax(0,1fr);grid-auto-flow:row dense;align-content:safe center;justify-items:center;column-gap:24px}
.kt2-body.fit-qh > *{grid-column:1 / -1}
.kt2-body.fit-qh > .big-q{grid-column:2}
.kt2-body.fit-qh > .multi-hint{grid-column:3;align-self:center;justify-self:start}
.ans-key{display:none}
.kt2-body.fit-ans .ans-full{display:none}
.kt2-body.fit-ans .ans-key{display:inline}
.kt2-body.fit-side .options.n3.long{grid-template-columns:minmax(0,1fr)}
/* 91차 — fit-pts 때 위 흐름 칸은 한 줄로(칸 넓혀 꺾임 줄임 · 화살표가 줄 끝에 남지 않게) · 글자 크기 무변 */
.kt2-body.fit-pts > .arrow-flow{flex-wrap:nowrap;width:100%;max-width:1560px}
.kt2-body.fit-pts > .arrow-flow > .af{flex:1 1 0;min-width:0}
.kt2-body.fit-pts > .arrow-flow > .af .l{max-width:none}

/* 92차 — 새 문제 장 pv3(준호 「글도 많고 디자인도 낡았다」 → 재설계 첫 장): 읽을 글 왼쪽 띠(원문 그대로 장면 ①②③) · 큰 물음 · 세로 보기 · 테두리 대신 면 */
.kt2-body:has(> .pv3){padding:0;justify-content:stretch}
.pv3{display:grid;grid-template-columns:600px minmax(0,1fr);gap:56px;width:100%;flex:1;min-height:0;align-items:stretch;text-align:left}
.pv3-src{background:var(--acc-soft);border-radius:32px;padding:40px 40px;display:flex;flex-direction:column;gap:22px;align-self:start}
.pv3-lab{display:flex;align-items:center;gap:12px;font-family:var(--display);font-size:28px;font-weight:800;color:var(--acc-ink)}
.pv3-ic{font-size:34px}
.pv3-sc{display:grid;grid-template-columns:52px minmax(0,1fr);gap:18px;align-items:start}
.pv3-sc.one{grid-template-columns:minmax(0,1fr)}
.pv3-sc b{width:52px;height:52px;border-radius:50%;background:var(--acc-ink);color:#fff;font-family:var(--display);font-size:28px;font-weight:800;display:grid;place-items:center}
.pv3-sc span{font-size:32px;font-weight:600;line-height:1.5;color:var(--ink);word-break:keep-all}
.pv3-cut{border-top:3px dashed color-mix(in srgb,var(--acc) 45%,transparent)}
.pv3-main{display:flex;flex-direction:column;gap:30px;min-width:0}
.pv3-q{font-family:var(--display);font-size:64px;font-weight:800;line-height:1.25;letter-spacing:-.01em;color:var(--ink);word-break:keep-all}
.pv3 .options.pv3-opts{display:flex;flex-direction:column;gap:16px;max-width:none;width:100%}
.pv3 .pv3-opts .opt{background:var(--white);border:none;border-radius:24px;padding:20px 30px;min-height:0;gap:26px;font-size:38px;font-weight:600;line-height:1.35;box-shadow:0 2px 0 var(--line);word-break:keep-all}
.pv3 .pv3-opts .opt .mk{width:auto;height:auto;min-width:46px;background:none;border:none;font-family:var(--display);font-size:50px;font-weight:800;color:var(--acc-ink);flex:none}
.pv3 .pv3-opts.revealed .opt:not(.ok){opacity:.38}
.pv3 .pv3-opts .opt.ok{background:var(--ok-soft);box-shadow:inset 0 0 0 4px var(--ok);transform:none;color:var(--ink)}
.pv3 .pv3-opts .opt.ok > div{color:var(--ink)}
.pv3 .pv3-opts .opt.ok .mk{color:#0B7A5A;background:none;font-size:50px;width:auto;height:auto;animation:none;transform:none}
.pv3-note{font-size:30px;line-height:1.5;color:var(--ink);word-break:keep-all;background:var(--paper2);border-radius:20px;padding:16px 24px}
.pv3-note::before{content:'풀이';font-family:var(--display);font-weight:800;color:var(--acc-ink);margin-right:14px}
.pv3 .pv3-opts.revealed .opt:not(.ok) > div:last-child{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.pv3 .pv3-opts.revealed .opt.ok{animation:none}
.pv3.narrow{grid-template-columns:420px minmax(0,1fr)}
.pv3.many .options.pv3-opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
.pv3-side{display:flex;flex-direction:column;gap:20px;min-width:0}
.pv3-side .pv3-src{align-self:stretch}
.pv3-multi{font-size:28px;font-weight:700;color:var(--acc-ink);background:var(--acc-soft);border-radius:999px;padding:10px 24px;align-self:start}
.pv3-side .pv3-note{font-size:28px}
.pv3-lt::after{content:'상황'}
body.subj-korean .pv3-lt::after,body.subj-english .pv3-lt::after{content:'읽을 글'}
.pv3-L,.pv3-R{display:flex;flex-direction:column;gap:20px}
.pv3-L:empty,.pv3-R:empty{display:none}
.pv3:not(.nl) .pv3-L,.pv3.nl .pv3-R{display:none}
.kt2-body.fit-pvx .pv3:not(.nl) .pv3-L,.kt2-body.fit-pvx .pv3.nl .pv3-R{display:flex}
.kt2-body.fit-pvx .pv3:not(.nl) .pv3-R,.kt2-body.fit-pvx .pv3.nl .pv3-L{display:none}
.kt2-body.fit-tight .pv3{gap:44px}
.kt2-body.fit-tight .pv3-main{gap:22px}
.kt2-body.fit-tight .pv3 .options.pv3-opts{gap:12px}
.kt2-body.fit-tight .pv3 .pv3-opts .opt{padding:14px 24px}
.kt2-body.fit-tight .pv3-src{padding:32px 34px}
/* fit-pvq(넘칠 때만): 물음을 두 칸 위 한 줄로 걸쳐 놓기 */
.kt2-body.fit-pvq .pv3{grid-template-rows:auto auto;row-gap:24px;align-content:start}
.kt2-body.fit-pvq .pv3-main{display:contents}
.kt2-body.fit-pvq .pv3-q{grid-column:1/-1;grid-row:1}
.kt2-body.fit-pvq .pv3-side{grid-column:1;grid-row:2}
.kt2-body.fit-pvq .pv3-opts{grid-column:2;grid-row:2;align-self:start}
.kt2-body.fit-pvq .pv3-R{grid-column:2;grid-row:3}

/* 94차 — 새 개념 장 cv2: 말풍선·안내 인물 없이 한 문장(왼쪽 정렬) + 남는 자리를 채우는 큰 그림 · 카드 그림자·윗줄 없앰 */
.kt2-body.cv2{align-items:stretch;justify-content:flex-start;text-align:left;gap:24px}
.cv2-lead{font-size:42px;font-weight:600;line-height:1.45;color:#3A4150;max-width:1400px;word-break:keep-all;text-wrap:pretty}
.cv2-lead strong{color:var(--acc-ink);font-weight:800}
.cv2-fig{margin:auto 0;align-self:safe center;display:flex;justify-content:safe center}
.kt2-body.cv2 > :not(.cv2-lead):not(.cv2-fig){align-self:center;text-align:center}
.cv2 .fig-card{box-shadow:none;border-top:0;border-radius:28px;padding:22px 30px 18px;gap:8px}
.cv2 .fig-card.on{background:var(--acc-ink)}
.cv2 .fig-card.on b{color:#fff}
.cv2 .fig-card.on span{background:rgba(255,255,255,.18);color:#fff}
.cv2 .fig-chain-ar{color:#B4B2A9;font-weight:700}
.cv2-chain .fig-card{background:transparent;padding:0 10px}
.cv2-chain .fig-card .fig-emo,.cv2-chain .fig-card .fig-ico{background:#fff;border-radius:50%;width:150px;height:150px;display:grid;place-items:center;border:7px solid var(--acc-soft);height:150px;line-height:1;font-size:80px}
.cv2-chain .fig-card.on{background:transparent}
.cv2-chain .fig-card.on .fig-emo,.cv2-chain .fig-card.on .fig-ico{border-color:var(--acc-ink)}
.cv2-chain .fig-card.on b{color:var(--acc-ink)}
.kt2-body.cv2-side{display:grid;grid-template-columns:minmax(0,600px) minmax(0,1fr);column-gap:56px;align-content:center;align-items:center}
.cv2-side > .cv2-fig{margin:0}
.cv2-side > :not(.cv2-lead):not(.cv2-fig){grid-column:1 / -1}
.kt2-body.cv2-side.fit-cv2s{display:flex}
.kt2-body.cv2-side.fit-cv2s > .cv2-fig{margin:auto 0}

/* 95차 — 넓은 그림 두 줄로 꺾기(fit-cv2w): 진열대는 물건마다 받침 · 카드 줄은 가운데 맞춰 꺾음 */
.kt2-body.fit-cv2w .cv2-fig .so-shelf{flex-wrap:wrap;justify-content:center;row-gap:22px;column-gap:16px;max-width:1100px;border-bottom:0;background:none;padding:0}
.kt2-body.fit-cv2w .cv2-fig .so-exi{padding:0 8px 10px;border-bottom:14px solid #C98B52;border-radius:0 0 8px 8px;background:linear-gradient(transparent 62%,#F6EBD6 62%)}
.kt2-body.fit-cv2w .cv2-fig .fig-cards{flex-wrap:wrap;justify-content:center;row-gap:24px;max-width:1000px}
.cv2 .so-shelf{gap:20px}.cv2 .so-exemo{font-size:104px}
.cv2 .so-plate{width:250px;padding:10px 14px 12px}.cv2 .so-plate i{font-size:18px}.cv2 .so-plate b{font-size:28px;line-height:1.25;word-break:keep-all;text-align:center}.cv2 .so-plate u{white-space:normal;font-size:23px;line-height:1.35;word-break:keep-all;text-align:center}
/* 95차 — 새 개념 장 표기 짝: 짝을 가로로 늘어놓고(짝마다 위 ○ · 아래 ✗) 그림이 커질 자리를 만든다 */
.cv2 .ko-prs{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:22px 34px}
.cv2 .ko-pr{flex-direction:column;gap:6px}
.cv2 .ko-pr em{transform:rotate(90deg);line-height:1}
.cv2 .ko-pr span{min-width:100%;justify-content:center}

/* 95차 — 새 활동 장 av2: 상자·큰 아이콘 없이 갈래 칩 + 목표 한 줄 크게 + 큰 번호 동그라미 차례 길(넷까지 한 줄) + 아래 준비물·타이머 */
.kt2-body.av2{justify-content:flex-start;align-items:stretch}
.kt2-body.av2 > .offline{position:relative;max-width:none;width:100%;background:transparent;border:0;padding:0;gap:30px;flex:1 1 auto}
.kt2-body.av2 .offline .ic{display:none}
.kt2-body.av2 .offline .tag{font-size:26px;padding:8px 24px}
.kt2-body.av2 .offline .goal{font-size:46px;font-weight:800;line-height:1.35;color:#2A3140;word-break:keep-all;text-wrap:pretty}
.kt2-body.av2 .offline .body{font-size:36px;color:#3A4150}
.kt2-body.av2 .offline .steps{display:grid;grid-auto-flow:row;grid-template-rows:none;grid-template-columns:repeat(var(--n,4),minmax(0,1fr));gap:28px 34px;max-width:none;margin-top:6px}
.kt2-body.av2 .offline .steps:has(li:nth-child(3)):not(:has(li:nth-child(4))){--n:3}
.kt2-body.av2 .offline .steps:not(:has(li:nth-child(3))){--n:2}
.kt2-body.av2 .offline .steps:has(li:nth-child(5)):not(:has(li:nth-child(7))){--n:3}
.kt2-body.av2 .offline .steps li{flex-direction:column;align-items:flex-start;gap:16px;background:transparent;border:0;padding:0;font-size:32px;line-height:1.4;word-break:keep-all;min-height:0}
.kt2-body.av2 .offline .steps li::before{width:72px;height:72px;border-radius:50%;background:#fff;border:6px solid var(--acc-soft,#E6EEF8);color:var(--acc-ink);font-size:34px}
.kt2-body.av2 .offline .steps li:last-child::before{border-color:var(--acc-ink)}
.kt2-body.av2 .offline .solo{font-size:26px;padding:10px 18px;align-self:flex-start}
.kt2-body.av2 .offline .mats{margin-top:auto;margin-right:360px;font-size:26px}
.kt2-body.av2 .offline .mats span{background:#fff}
.kt2-body.av2 .offline .ctrls{position:absolute;right:0;bottom:0}
.kt2-body.av2 .offline .ctrls .btn{font-size:26px;padding:14px 26px}

/* 95차 — 새 요약 장 sv2: 흐름은 큰 알약(마지막 진한 색) · 요점은 상자 없이 큰 글씨 + 번호 동그라미 */
.kt2-body.sv2{justify-content:center;align-items:stretch;gap:44px}
.kt2-body.sv2 > .arrow-flow{max-width:none;gap:20px;justify-content:flex-start}
.kt2-body.sv2 > .arrow-flow .l{font-size:36px !important;font-weight:800;background:#fff;border:5px solid var(--acc-soft,#E6EEF8);border-radius:999px;padding:12px 34px;max-width:none;color:#2A3140}
.kt2-body.sv2 > .arrow-flow .af:last-of-type .l{background:var(--acc-ink);border-color:var(--acc-ink);color:#fff}
.kt2-body.sv2 > .arrow-flow .af-ar{font-size:44px;color:#B4B2A9;font-weight:700}
.kt2-body.sv2 > .points{max-width:none;gap:26px}
.kt2-body.sv2 .point{background:transparent;border:0;padding:0;font-size:40px;line-height:1.4;gap:26px;align-items:flex-start;word-break:keep-all;color:#2A3140}
.kt2-body.sv2 .point i{width:62px;height:62px;font-size:30px;margin-top:0;background:var(--acc-ink)}
.kt2-body.av2 > .offline{gap:24px}
.kt2-body.av2.fit-tight > .offline{gap:16px}
.kt2-body.av2.fit-tight .offline .goal{font-size:40px;line-height:1.3}
.kt2-body.av2.fit-tight .offline .steps{gap:18px 28px;margin-top:0}
.kt2-body.av2.fit-tight .offline .steps li{gap:10px;font-size:30px;line-height:1.35}
.kt2-body.av2.fit-tight .offline .steps li::before{width:58px;height:58px;font-size:28px;border-width:5px}
.kt2-body.av2.fit-tight .offline .tag{font-size:24px;padding:6px 20px}

/* 97차 — sv2 흐름: 줄 끝에 화살표가 남지 않게 한 줄로 · 알약 글이 길면 알약 안에서 두 줄(넷까지) */
.kt2-body.sv2 > .arrow-flow:not(:has(> .af:nth-child(9))){flex-wrap:nowrap;width:100%}
.kt2-body.sv2 > .arrow-flow:not(:has(> .af:nth-child(9))) > .af{flex:0 1 auto;min-width:0}
.kt2-body.sv2 > .arrow-flow:not(:has(> .af:nth-child(9))) > .af-ar{flex:0 0 auto}
.kt2-body.sv2 > .arrow-flow .l{white-space:normal;word-break:keep-all;text-align:center;line-height:1.3;border-radius:48px}

/* 97차 — 새 오개념 장 mv2 (준호 A 「둘로 가르기」) */
.kt2-body.mv2{justify-content:center;align-items:stretch;gap:30px;text-align:left}
.mv2 .mv2-k{display:flex;align-items:center;gap:12px;font-family:var(--display);font-size:30px;font-weight:800;margin-bottom:14px}
.mv2 .mv2-k i{font-style:normal;display:grid;place-items:center;width:52px;height:52px;border-radius:50%;color:#fff;font-size:30px}
.mv2 .mv2-w .mv2-k{color:var(--no)} .mv2 .mv2-w .mv2-k i{background:var(--no)}
.mv2 .mv2-r .mv2-k{color:#0B7A5A} .mv2 .mv2-r .mv2-k i{background:var(--ok)}
.mv2 .mv2-t{font-size:42px;line-height:1.45;font-weight:600;color:var(--ink);word-break:keep-all;white-space:pre-line}
.mv2 .mv2-h{font-size:28px;line-height:1.5;color:var(--ink-mut);word-break:keep-all;padding-left:4px}
.mv2 .mv2-h::before{content:'🧑‍🏫 ';}
/* a 둘로 가르기 */
.kt2-body.mv2-a{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);column-gap:64px;row-gap:26px;align-content:center}
.mv2-a .mv2-w{padding:10px 0;position:relative}
.mv2-a .mv2-w .mv2-t{color:#7A6F6A}
.mv2-a .mv2-r{background:var(--ok-soft);border-radius:36px;padding:40px 48px;position:relative}
.mv2-a .mv2-r::before{content:'→';position:absolute;left:-54px;top:50%;transform:translateY(-50%);font-size:52px;color:#B4B2A9;font-weight:700}
.mv2-a .mv2-h{grid-column:1 / -1}
.anim .mv2-w{animation:kt2-shake .7s .15s both}
.anim .mv2-r{animation:kt2-pop .6s .25s both}
.kt2-body.mv2-a.fit-tight{row-gap:18px}
.kt2-body.mv2-a.fit-tight .mv2-r{padding:30px 40px}

/* 97차 — 새 수준별 장 lv2 (준호 A 「세 계단」 · 교사 무대만) */
.kt2-body.lv2{--lvc:var(--ok);text-align:left;align-items:stretch;justify-content:center;gap:28px}
.lv2 .기본{--lvc:#12A36B;--lvs:#E2F6EC} .lv2 .도전{--lvc:#E88A00;--lvs:#FFF1DC} .lv2 .심화{--lvc:#7C5CFF;--lvs:#EEEAFF}
.lv2 .lv2-q{font-size:46px;font-weight:700;line-height:1.4;color:var(--ink);word-break:keep-all}
.lv2 .lv2-a{font-size:38px;font-weight:700;line-height:1.4;color:var(--ink);background:var(--ok-soft);border-radius:24px;padding:18px 30px;word-break:keep-all}
.lv2 .lv2-a b{font-family:var(--display);color:#0B7A5A;margin-right:16px}
.lv2 .lv2-a.open{background:var(--acc-soft)} .lv2 .lv2-a.open b{color:var(--acc-ink)}
.lv2 .lv2-st{margin:0;padding:0;list-style:none;counter-reset:s;display:flex;gap:28px}
.lv2 .lv2-st li{counter-increment:s;flex:1 1 0;font-size:30px;line-height:1.4;color:var(--ink);word-break:keep-all}
.lv2 .lv2-st li::before{content:counter(s);display:grid;place-items:center;width:52px;height:52px;border-radius:50%;background:#fff;border:4px solid var(--lvc);color:var(--lvc);font-family:var(--display);font-weight:800;font-size:28px;margin-bottom:10px}
.lv2 .ctrls{justify-content:flex-start}
/* a 세 계단 */
.kt2-body.lv2-a{display:grid;grid-template-columns:300px minmax(0,1fr);column-gap:56px;align-content:center}
.lv2-a .lv2-tabs{display:flex;flex-direction:column;gap:16px;grid-row:span 2}
.lv2-a .lv2-tabs button{display:flex;align-items:center;gap:16px;border:0;border-radius:28px;padding:20px 26px;font-family:var(--display);font-size:38px;font-weight:800;background:var(--paper2);color:#9A958C;text-align:left}
.lv2-a .lv2-tabs button i{font-style:normal;display:grid;place-items:center;width:52px;height:52px;border-radius:50%;background:#fff;font-size:28px}
.lv2-a .lv2-tabs button:nth-child(2){margin-left:30px} .lv2-a .lv2-tabs button:nth-child(3){margin-left:60px}
.lv2-a .lv2-tabs button.on{background:var(--lvc);color:#fff;box-shadow:0 6px 0 color-mix(in srgb,var(--lvc) 60%,#000)}
.lv2-a .lv2-tabs button.on i{color:var(--lvc)}
.lv2-a .lv2-main{display:flex;flex-direction:column;gap:26px;border-left:8px solid var(--lvc);padding-left:44px}
.lv2-a .lv2-q{font-size:52px}
.lv2-a .ctrls{grid-column:2}
.lv2-a .lv2-tabs{background:none;padding:0;border-radius:0}
.lv2-a .lv2-tabs button.on.기본,.lv2-a .lv2-tabs button.on.도전,.lv2-a .lv2-tabs button.on.심화{color:#fff}
.kt2-body.lv2-a.fit-tight{column-gap:40px}
.kt2-body.lv2-a.fit-tight .lv2-main{gap:18px;padding-left:34px}
.lv2 .lv2-a{animation:kt2-flip .55s both}
.kt2-body.lv2-a.fit-lvw{grid-template-columns:minmax(0,1fr);row-gap:22px}
.kt2-body.lv2-a.fit-lvw .lv2-tabs{flex-direction:row;grid-row:auto;gap:12px}
.kt2-body.lv2-a.fit-lvw .lv2-tabs button{margin-left:0 !important;padding:10px 24px;font-size:30px}
.kt2-body.lv2-a.fit-lvw .lv2-tabs button i{width:42px;height:42px;font-size:24px}
.kt2-body.lv2-a.fit-lvw .ctrls{grid-column:1}
.lv2 .lv2-ch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 20px}
.lv2 .lv2-ch span{background:#fff;border-radius:20px;padding:12px 24px;font-size:36px;font-weight:600;line-height:1.35;color:var(--ink);word-break:keep-all;box-shadow:0 2px 0 var(--line)}
.kt2-body.lv2-a.fit-lvs .lv2-st{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 28px}
.kt2-body.lv2-a.fit-lvs .lv2-st li{display:flex;align-items:flex-start;gap:14px;font-size:28px}
.kt2-body.lv2-a.fit-lvs .lv2-st li::before{flex:none;width:40px;height:40px;font-size:22px;border-width:3px;margin:0}

/* 98차 — 새 복습·확인 장 rv2 「칠판」(준호 C · 교사 무대만) */
.kt2-body.rv2{text-align:left;align-items:stretch;justify-content:center;gap:26px}
.rv2 .center-text{font-size:36px;max-width:none;text-align:left;color:var(--ink-mut)}
.rv2 .rv2-sig{display:flex;gap:18px}
.rv2 .rv2-sig .light{border-width:2px;padding:12px 22px}
.rv2 .rv2-sig .lb{font-size:28px}
.rv2 .rv2-board{background:#24453a;border:12px solid #8a6a46;border-radius:22px;padding:18px 44px;display:flex;flex-direction:column;gap:6px;box-shadow:inset 0 0 60px rgba(0,0,0,.35)}
.rv2 .rv2-it{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.62fr);align-items:center;gap:30px;padding:10px 0;border-bottom:2px dashed rgba(255,255,255,.18);cursor:pointer}
.rv2 .rv2-it:last-child{border-bottom:none}
.rv2 .rv2-it .q{font-size:40px;font-weight:700;line-height:1.35;color:#f4f1e8;word-break:keep-all}
.rv2 .rv2-it .q i{font-style:normal;color:#f7d774;margin-right:14px;font-family:var(--display)}
.rv2 .rv2-it .a{min-height:64px;border-bottom:4px solid rgba(255,255,255,.45);font-family:'Hakgyoansim Moheomga',var(--display);font-size:42px;color:#f7d774;line-height:1.3;word-break:keep-all}
.kt2-body.fit-rvw .rv2-it{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:26px}
.kt2-body.fit-rvs .rv2-board{padding:10px 40px;gap:0}
.kt2-body.fit-rvs .rv2-it{padding:6px 0}
.kt2-body.fit-rvs .rv2-it .q{font-size:36px}
.kt2-body.fit-rvs .rv2-it .a{font-size:36px;min-height:52px}
.kt2-body.fit-rvs.rv2 .center-text{font-size:32px}

/* 99차 — 새 동기 장 mo2 「큰 물음 + 그림 띠」 · 새 실생활 장 rw2 「큰 아이콘」(준호 A · 교사 무대만) */
.kt2-body.mo2,.kt2-body.rw2{gap:30px}
.mo2 .mo2-q{display:flex;align-items:center;justify-content:center;gap:28px;font-family:var(--display);font-weight:700;font-size:56px;line-height:1.3;word-break:keep-all;text-wrap:balance;max-width:1540px;text-align:center}
.mo2 .mo2-v{flex:none;font-size:96px;line-height:1}
.mo2 .mo2-talk{width:1560px;max-width:100%;min-height:340px;justify-content:flex-end}
.mo2 .mo2-cast{position:relative;display:flex;justify-content:space-around;align-items:flex-end;gap:40px;padding:40px 60px 24px}
.mo2 .mo2-k{display:flex;align-items:flex-end;gap:20px;min-width:0;flex:0 1 auto}
.mo2 .mo2-f{position:relative;font-size:96px;line-height:1;flex:none}
.mo2 .mo2-f.chr{font-size:0}
.mo2 .mo2-f.chr svg{display:block;width:180px;height:205px;overflow:visible;filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.mo2 .mo2-k.r .mo2-f.chr svg{transform:scaleX(-1)}
.mo2 .mo2-w{position:absolute;left:50%;bottom:-10px;transform:translateX(-50%);font-size:24px;font-weight:800;background:rgba(255,255,255,.9);border-radius:999px;padding:2px 14px;white-space:nowrap;color:var(--ink)}
.mo2 .mo2-bub{align-self:flex-start;font-size:36px;font-weight:700;line-height:1.35;word-break:keep-all;text-wrap:balance;background:var(--white);border:3px solid var(--acc);border-radius:26px;padding:16px 26px;box-shadow:0 8px 24px rgba(0,0,0,.14);max-width:520px;text-align:left}
.rw2 .rw2-row{display:flex;align-items:center;gap:50px;width:100%;max-width:1500px}
.rw2 .rw2-ic{flex:none;width:240px;height:240px;border-radius:50%;background:var(--acc-soft);display:flex;align-items:center;justify-content:center;font-size:130px;line-height:1}
.rw2 .rw2-sc{font-size:46px;font-weight:700;line-height:1.4;word-break:keep-all;text-wrap:pretty;text-align:left}
.rw2 .rw2-ct{font-size:38px;line-height:1.45;word-break:keep-all;text-wrap:pretty;max-width:1500px;width:100%;text-align:left;border-left:10px solid var(--acc);padding:8px 0 8px 34px;color:var(--ink-mut)}
.rw2 .rw2-q{font-family:var(--display);font-weight:700;font-size:48px;line-height:1.3;text-align:center;word-break:keep-all}
.kt2-body.fit-mo2 .mo2-talk{min-height:0}
.kt2-body.fit-mo2 .mo2-cast{padding:20px 50px 16px}
.kt2-body.fit-mo2 .mo2-f.chr svg{width:140px;height:160px}
.kt2-body.fit-rw2 .rw2-ic{width:170px;height:170px;font-size:92px}
.kt2-body.fit-rw2 .rw2-row{gap:36px}

/* 100차 — 자기 점검 장 sa2 「칠판」 · 다음 시간 장 nl2 「예고 그림 띠」 · 교사 무대만 */
.kt2-body.sa2,.kt2-body.nl2{gap:28px}
.kt2-body.sa2-c{gap:18px}
.sa2 .sa2-st{display:flex;gap:8px;flex:none}
.sa2 .sa2-st button{border:0;background:none;font-size:60px;line-height:1;color:#d5d8dd;padding:0 2px;cursor:pointer;transition:transform .15s}
.sa2 .sa2-st button.on{color:#F5B942;text-shadow:0 4px 14px rgba(245,185,66,.55)}
.sa2 .sa2-st button:active{transform:scale(1.25)}
.sa2 .sa2-bub{background:var(--white);border:3px solid var(--acc);border-radius:26px;padding:16px 26px;font-size:36px;font-weight:700;line-height:1.35;word-break:keep-all;text-wrap:balance;box-shadow:0 8px 24px rgba(0,0,0,.12)}
.sa2 .sa2-t{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;text-align:left;word-break:keep-all}
.sa2 .sa2-t b{font-family:var(--display);font-size:28px;color:var(--acc)}
.sa2 .sa2-t span{font-size:38px;font-weight:700;line-height:1.3}
/* C 칠판 */
.sa2-c .sa2-board{width:100%;max-width:1560px;background:#24453a;border:12px solid #8a6a46;border-radius:22px;padding:12px 44px;display:flex;flex-direction:column;gap:4px;box-shadow:inset 0 0 60px rgba(0,0,0,.35)}
.sa2-c .sa2-r{display:flex;align-items:center;gap:24px;padding:10px 0}
.sa2-c .sa2-r+.sa2-r{border-top:2px dashed rgba(255,255,255,.18)}
.sa2-c .sa2-ic{font-size:56px;line-height:1;flex:none}
.sa2-c .sa2-t b{color:#FFE38A}
.sa2-c .sa2-t span{color:#fff}
.sa2-c .sa2-st button{color:rgba(255,255,255,.25)}
.sa2-c .sa2-st button.on{color:#FFD86B}
.sa2-c .sa2-pr2{display:flex;align-items:center;gap:20px;align-self:flex-start;margin-left:40px}
.sa2-c .sa2-gm svg{display:block;width:104px;height:118px}

.nl2 .nl2-ch svg{display:block;width:180px;height:205px;filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.nl2 .nl2-ch.r svg{transform:scaleX(-1)}
/* B 예고 그림 띠 */
.nl2-b .nl2-band{width:1560px;max-width:100%;min-height:540px;justify-content:space-between}
.nl2-b .nl2-cast{position:relative;flex:1;display:flex;justify-content:space-around;align-items:flex-end;padding:40px 80px 20px}
.nl2-b .nl2-big{font-size:200px;line-height:1;align-self:center;filter:drop-shadow(0 10px 18px rgba(0,0,0,.2))}
.nl2-b .nl2-cap{position:relative;background:rgba(20,28,40,.84);color:#fff;font-family:var(--display);font-weight:700;font-size:46px;line-height:1.35;padding:26px 56px;text-align:center;word-break:keep-all;text-wrap:balance}
.nl2-b .nl2-cap strong,.nl2-b .nl2-cap b{color:#FFD86B}

/* 101차 — 새 표지 co2 「그림책 표지」 · 새 목표 장 ob2 · 교사 무대만 */
.co2{position:relative;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:60px;align-items:center;width:100%;max-width:1680px;padding:0 20px;text-align:left}
.co2 .co2-pic{width:100%;min-height:640px;border-radius:40px;justify-content:flex-end}
.co2 .co2-cast{position:relative;flex:1;display:flex;justify-content:space-between;align-items:flex-end;padding:40px 36px 44px;gap:10px}
.co2 .co2-em{font-size:200px;line-height:1;align-self:center;filter:drop-shadow(0 12px 22px rgba(0,0,0,.22))}
.co2 .co2-em:empty{display:none}
.co2 .co2-ch svg{display:block;width:150px;height:171px;filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.co2 .co2-ch.r svg{transform:scaleX(-1)}
.co2 .co2-txt{display:flex;flex-direction:column;gap:22px;min-width:0}
.co2 .co2-unit{align-self:flex-start;font-family:var(--display);font-weight:700;font-size:34px;color:#fff;background:var(--acc);border-radius:999px;padding:8px 30px}
.co2 .co2-unit:empty{display:none}
.co2 .co2-title{font-family:var(--display);font-weight:800;font-size:96px;line-height:1.14;word-break:keep-all;text-wrap:balance}
.co2 .co2-l2{font-size:46px;font-weight:700;line-height:1.35;color:var(--ink-mut);word-break:keep-all;text-wrap:balance}
.co2 .co2-meta{display:flex;flex-wrap:wrap;gap:14px;margin-top:10px;font-size:28px;color:var(--ink-mut)}
.co2 .co2-meta span{background:var(--white);border:2px solid var(--line);border-radius:999px;padding:8px 24px}
.anim .co2-pic{animation:kt2-fade .6s both}
.anim .co2-em{animation:kt2-float 3s ease-in-out infinite}
.anim .co2-title{animation:kt2-slide-up .7s .1s both}
.kt2-body.ob2{gap:0}
.ob2 .ob2-wrap{display:flex;align-items:center;gap:56px;width:100%;max-width:1600px}
.ob2 .ob2-g{flex:none;display:flex;flex-direction:column;align-items:center;gap:16px}
.ob2 .ob2-ch svg{display:block;width:210px;height:240px;filter:drop-shadow(0 8px 10px rgba(0,0,0,.2))}
.ob2 .ob2-say{background:var(--white);border:3px solid var(--acc);border-radius:26px;padding:14px 26px;font-family:var(--display);font-weight:700;font-size:34px;line-height:1.3;text-align:center}
.ob2 .ob2-card{flex:1;min-width:0;background:var(--white);border-radius:36px;border-left:16px solid var(--acc);padding:40px 56px;box-shadow:0 18px 44px rgba(0,0,0,.08);text-align:left;display:flex;flex-direction:column;gap:20px}
.ob2 .ob2-tag{font-family:var(--display);font-weight:800;font-size:32px;color:var(--acc-ink)}
.ob2 .ob2-c{font-size:46px;font-weight:800;line-height:1.4;word-break:keep-all;text-wrap:pretty}
.ob2 .ob2-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:18px}
.ob2 .ob2-list li{display:flex;align-items:center;gap:24px;font-size:44px;font-weight:800;line-height:1.35;word-break:keep-all}
.ob2 .ob2-list li b{flex:none;width:64px;height:64px;border-radius:50%;background:var(--acc);color:#fff;font-size:34px;display:flex;align-items:center;justify-content:center}
.anim .ob2-card{animation:kt2-q .7s cubic-bezier(.2,.9,.2,1.1) both}

/* 108차 — 새 물음 장 qv2 · 새 카드 퀴즈 cq2 · 교사 무대만 */
.kt2-body.qv2{gap:34px}
.qv2 .qv2-q{display:flex;align-items:center;justify-content:center;gap:24px;font-family:var(--display);font-weight:700;font-size:56px;line-height:1.3;word-break:keep-all;text-wrap:balance;max-width:1560px;text-align:center}
.qv2 .qv2-m{flex:none;font-size:80px;line-height:1}
.qv2 .qv2-row{display:flex;align-items:stretch;gap:40px;width:100%;max-width:1600px}
.qv2 .qv2-pic{flex:0 0 520px;width:520px;min-height:420px;border-radius:36px}
.qv2 .qv2-row.solo{justify-content:center}
.qv2 .qv2-row.solo .qv2-pic{flex:0 1 1300px;width:1300px;min-height:400px}
.qv2 .qv2-cast{position:relative;flex:1;display:flex;justify-content:space-around;align-items:flex-end;padding:30px 26px 30px}
.qv2 .qv2-ch svg{display:block;width:170px;height:194px;filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.qv2 .qv2-ch.r svg{transform:scaleX(-1)}
.qv2 .qv2-its{flex:1;min-width:0;list-style:none;margin:0;padding:0;display:flex;flex-direction:column;justify-content:center;gap:20px}
.qv2 .qv2-its li{display:flex;align-items:center;gap:24px;background:var(--white);border-radius:28px;border-left:14px solid var(--acc);padding:22px 32px;box-shadow:0 12px 30px rgba(0,0,0,.08);font-size:40px;font-weight:800;line-height:1.35;word-break:keep-all;text-wrap:pretty;text-align:left}
.qv2 .qv2-its li b{flex:none;width:60px;height:60px;border-radius:50%;background:var(--acc);color:#fff;font-size:32px;display:flex;align-items:center;justify-content:center}
.qv2 .qv2-note{font-size:32px;color:var(--ink-mut)}
.kt2-body.qv2.fit-tight .qv2-pic{min-height:320px}
.kt2-body.qv2.fit-tight .qv2-its li{padding:14px 26px}

.kt2-body.cq2{gap:30px}
.cq2 .cq-grid{gap:30px;max-width:1600px}
.cq2 .cq{height:380px}
.cq2 .cq-grid.n4 .cq,.cq2 .cq-grid.n5 .cq{height:350px}
.cq2 .cq-grid.n6 .cq{height:230px}
.cq2 .cq .f{border-radius:34px;padding:28px 30px;gap:16px}
.cq2 .cq .front{background:var(--white);color:var(--ink);border:4px solid color-mix(in srgb,var(--acc) 45%,#fff);box-shadow:0 16px 38px rgba(0,0,0,.09);justify-content:flex-start;padding-top:56px}
.cq2 .cq .front .no{position:absolute;left:22px;top:18px;width:56px;height:56px;border-radius:50%;background:var(--acc);color:#fff;font-family:var(--display);font-weight:800;font-size:30px;display:flex;align-items:center;justify-content:center}
.cq2 .cq .front .qm{width:96px;height:96px;flex:none;border-radius:50%;background:color-mix(in srgb,var(--acc) 16%,#fff);color:var(--acc-ink);font-family:var(--display);font-size:62px;display:flex;align-items:center;justify-content:center}
.cq2 .cq .front .cl{font-size:34px;font-weight:700;opacity:1;line-height:1.4;word-break:keep-all;text-wrap:balance;text-align:center}
.cq2 .cq .back{background:linear-gradient(150deg,var(--acc),color-mix(in srgb,var(--acc) 72%,#000));border:0;color:#fff;box-shadow:0 16px 38px rgba(0,0,0,.14)}
.cq2 .cq .back .em{font-size:120px;filter:drop-shadow(0 8px 14px rgba(0,0,0,.25))}
.cq2 .cq .back .nm{font-family:var(--display);font-size:56px;font-weight:800;line-height:1.2;word-break:keep-all;text-align:center}
.cq2 .cq-grid.n6 .cq .front{padding-top:20px;flex-direction:row;gap:18px}
.cq2 .cq-grid.n6 .cq .front .qm{width:70px;height:70px;font-size:44px}
.cq2 .cq-grid.n6 .cq .front .cl{font-size:30px}
.cq2 .cq-grid.n6 .cq .back .em{font-size:80px}
.cq2 .cq-grid.n6 .cq .back .nm{font-size:42px}
.cq2 .outro{font-family:var(--display);font-weight:700;font-size:36px;color:var(--ink);background:color-mix(in srgb,var(--acc) 12%,#fff);border-radius:999px;padding:14px 40px;text-wrap:balance}
.kt2-body.cq2.fit-tight .cq{height:300px}
.kt2-body.cq2.fit-tight .cq .front .cl{font-size:32px}
.cq2 .cq .back .nm{overflow-wrap:anywhere}
.cq2 .cq .back .nm.l{font-size:44px}
.cq2 .cq .back .nm.xl{font-size:36px;line-height:1.3}
.cq2 .cq-grid.n6 .cq .back .nm.l,.cq2 .cq-grid.n6 .cq .back .nm.xl{font-size:34px}
.kt2-body.qv2.fit-qv2{gap:22px}
.kt2-body.qv2.fit-qv2 .qv2-pic{min-height:260px}
.kt2-body.qv2.fit-qv2 .qv2-row.solo .qv2-pic{min-height:280px}
.kt2-body.qv2.fit-qv2 .qv2-ch svg{width:130px;height:148px}
.kt2-body.qv2.fit-qv2 .qv2-its{gap:12px}
.kt2-body.qv2.fit-qv2 .qv2-its li{padding:12px 26px}
.kt2-body.qv2.fit-qv2 .qv2-m{font-size:64px}

/* 109차 — 물음 장 긴 물음 + 카드 넷: 그림 판을 좁혀 카드 글이 한 줄에 들도록(글씨 그대로) */
.kt2-body.qv2.fit-qv2n .qv2-row{gap:28px}
.kt2-body.qv2.fit-qv2n .qv2-pic{flex:0 0 360px;width:360px}
.kt2-body.qv2.fit-qv2n .qv2-cast{padding:24px 10px}

/* ── 111차 — 답 쓰는 문제 장 pa2 ── */
.kt2-body.pa2{padding:0;justify-content:center;gap:0}
.pa2-row{display:grid;grid-template-columns:600px minmax(0,1fr);gap:56px;width:100%;flex:1;min-height:0;align-items:stretch;text-align:left}
.pa2-pic{position:relative;width:100%;max-width:none;border-radius:36px;overflow:hidden;min-height:0;display:flex;flex-direction:column;justify-content:flex-end;box-shadow:0 18px 50px rgba(0,0,0,.16);background:#DFF3FF}
.pa2-bub{position:absolute;left:26px;right:26px;top:26px;background:rgba(255,255,255,.96);border-radius:26px;padding:22px 28px;box-shadow:0 8px 24px rgba(0,0,0,.12)}
.pa2-bub::after{content:'';position:absolute;left:110px;bottom:-18px;border:18px solid transparent;border-top-color:#fff;border-bottom:0}
.pa2-say{font-size:34px;font-weight:700;line-height:1.4;color:var(--ink);word-break:keep-all;text-wrap:pretty}
.pa2-ic{position:absolute;right:30px;top:130px;font-size:84px;line-height:1;filter:drop-shadow(0 6px 8px rgba(0,0,0,.2))}
.pa2-cast{position:relative;display:flex;justify-content:space-around;align-items:flex-end;padding:0 26px 24px}
.pa2-ch svg{display:block;width:190px;height:217px;filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.pa2-ch.r svg{transform:scaleX(-1)}
.pa2-fig{display:flex;flex-direction:column;gap:22px;min-width:0;justify-content:center}
.pa2-fs{display:flex;align-items:flex-start;gap:14px;background:var(--acc-soft);border-radius:24px;padding:20px 26px}
.pa2-fs .pa2-say{font-size:30px}
.pa2-fic{flex:none;font-size:40px;line-height:1.1}
.pa2-fig > .fig{max-width:100%}
.pa2-main{display:flex;flex-direction:column;gap:30px;min-width:0;justify-content:center}
.pa2-q{font-family:var(--display);font-size:62px;font-weight:800;line-height:1.25;letter-spacing:-.01em;color:var(--ink);word-break:keep-all;text-wrap:pretty}
.pa2-ans{display:flex;align-items:center;gap:30px;background:var(--white);border-radius:30px;padding:24px 36px;box-shadow:0 2px 0 var(--line);min-height:150px}
.pa2-lab{flex:none;font-family:var(--display);font-size:34px;font-weight:800;color:var(--acc-ink);background:var(--acc-soft);border-radius:999px;padding:10px 26px}
.pa2-box{flex:1;min-height:100px;border-radius:22px;border:5px dashed var(--acc);display:flex;align-items:center;justify-content:center;font-family:var(--display);font-size:56px;font-weight:900;color:var(--acc);word-break:keep-all;text-align:center;padding:10px 24px;line-height:1.25;text-wrap:balance}
.pa2-box i{font-style:normal;color:var(--ink-mut);margin:0 6px}
.pa2-ans.on .pa2-box{border-style:solid;border-color:var(--ok);background:var(--ok-soft);color:#0B7A5A;animation:kt2-flip .6s cubic-bezier(.2,.8,.2,1) both}
.pa2-note{font-size:30px;line-height:1.5;color:var(--ink);word-break:keep-all;background:var(--paper2);border-radius:20px;padding:16px 24px}
.pa2-note::before{content:'풀이';font-family:var(--display);font-weight:800;color:var(--acc-ink);margin-right:14px}
.kt2-body.fit-pa2 .pa2-row{grid-template-columns:480px minmax(0,1fr);gap:40px}
.kt2-body.fit-pa2 .pa2-ch svg{width:140px;height:160px}
.kt2-body.fit-pa2 .pa2-ic{font-size:64px;top:110px}
.kt2-body.fit-tight .pa2-row{gap:36px}
.kt2-body.fit-tight .pa2-main{gap:20px}
.kt2-body.fit-tight .pa2-ans{padding:16px 28px;min-height:120px}
.pa2-side{display:flex;flex-direction:column;gap:20px;min-width:0;min-height:0}
.pa2-side > .pa2-pic{flex:1}
.pa2-L,.pa2-R{display:flex;flex-direction:column;gap:20px}
.pa2-L:empty,.pa2-R:empty{display:none}
.pa2-L{display:none}
.kt2-body.fit-pa2n .pa2-L{display:flex}
.kt2-body.fit-pa2n .pa2-R{display:none}
.kt2-body.fit-pa2n .pa2-side > .pa2-pic{min-height:300px}
.pa2-box.l{font-size:42px;font-weight:800}
.pa2-box.xl{font-size:34px;font-weight:700;text-align:left;justify-content:flex-start;line-height:1.4}
.pa2-ql{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.pa2-ql li{background:var(--white);border-radius:22px;border-left:12px solid var(--acc);padding:14px 26px;font-size:36px;font-weight:700;line-height:1.35;word-break:keep-all;text-wrap:pretty;box-shadow:0 2px 0 var(--line)}
.pa2-q.sm{font-size:50px}
.kt2-body.fit-tight .pa2-ql{gap:8px}
.kt2-body.fit-tight .pa2-ql li{padding:10px 22px}
.pa2-ql.sep li{border-left-color:color-mix(in srgb,var(--acc) 55%,#fff)}
.kt2-body.fit-pa2s .pa2-main{gap:16px}
.kt2-body.fit-pa2s .pa2-ans{min-height:0;padding:12px 24px}
.kt2-body.fit-pa2s .pa2-box{min-height:88px;padding:8px 20px}
.kt2-body.fit-pa2s .pa2-ql{gap:8px}
.kt2-body.fit-pa2s .pa2-ql li{padding:8px 22px;line-height:1.25}
.kt2-body.fit-pa2s .pa2-q.sm{line-height:1.1}

/* ── 112차 — 심화 문제 장 ch2 「생각을 넓혀요」 칠판 ── */
.kt2-body.ch2{padding:0;justify-content:center;gap:0}
.ch2-row{display:grid;grid-template-columns:minmax(0,1fr) 380px;gap:36px;width:100%;flex:1;min-height:0;align-items:stretch;text-align:left}
.ch2-board{position:relative;background:#24453a;border:16px solid #8a6a46;border-radius:28px;box-shadow:inset 0 0 60px rgba(0,0,0,.35),0 14px 30px rgba(0,0,0,.18);padding:34px 46px;display:flex;flex-direction:column;gap:20px;justify-content:center;min-width:0;color:#F4F1E6}
.ch2-board::after{content:'';position:absolute;left:30%;right:30%;bottom:-16px;height:12px;background:#6E4A2F;border-radius:0 0 8px 8px}
.ch2-k{font-family:'Hakgyoansim Moheomga',var(--display);font-size:34px;color:#f7d774}
.ch2-q{font-family:var(--display);font-size:54px;font-weight:800;line-height:1.3;letter-spacing:-.01em;color:#fff;word-break:keep-all;text-wrap:pretty}
.ch2-q.sm{font-size:46px}
.ch2-q strong{color:#f7d774}
.ch2-its{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:12px}
.ch2-its li{border:3px solid rgba(255,255,255,.55);border-radius:18px;padding:10px 22px;font-size:34px;font-weight:700;line-height:1.3;color:#fff;word-break:keep-all}
.ch2-line{border-top:4px dashed rgba(255,255,255,.35)}
.ch2-w{font-size:32px;font-weight:700;color:rgba(255,255,255,.6)}
.ch2-a{font-size:34px;font-weight:600;line-height:1.5;color:#F4F1E6;word-break:keep-all;text-wrap:pretty;animation:kt2-flip .6s cubic-bezier(.2,.8,.2,1) both}
.ch2-a strong{color:#f7d774}
.ch2-h{font-family:'Hakgyoansim Moheomga',var(--display);color:#9FE3C1;margin-right:14px}
.ch2-kid{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:16px;min-width:0}
.ch2-say{position:relative;width:100%;background:var(--acc-soft);border-radius:28px;padding:24px 26px;font-size:30px;font-weight:700;line-height:1.42;color:var(--ink);word-break:keep-all;text-wrap:pretty}
.ch2-say::after{content:'';position:absolute;left:50%;bottom:-20px;margin-left:-20px;border:20px solid transparent;border-top-color:var(--acc-soft);border-bottom:0}
.ch2-ch svg{display:block;width:220px;height:251px;filter:drop-shadow(0 8px 10px rgba(0,0,0,.2))}
.ch2-kid.solo{justify-content:center}
.kt2-body.fit-ch2 .ch2-row{grid-template-columns:minmax(0,1fr) 320px;gap:30px}
.kt2-body.fit-ch2 .ch2-ch svg{width:160px;height:183px}
.kt2-body.fit-ch2w .ch2-row{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr);gap:22px}
.kt2-body.fit-ch2w .ch2-kid{order:-1;flex-direction:row-reverse;justify-content:flex-end;align-items:center;gap:22px}
.kt2-body.fit-ch2w .ch2-say{width:auto;flex:1;padding:16px 24px}
.kt2-body.fit-ch2w .ch2-say::after{left:-18px;top:50%;bottom:auto;margin:-18px 0 0;border:18px solid transparent;border-right-color:var(--acc-soft);border-left:0}
.kt2-body.fit-ch2w .ch2-ch svg{width:100px;height:114px}
.kt2-body.fit-ch2w .ch2-kid.solo{display:none}
.kt2-body.fit-ch2s .ch2-board{padding:22px 40px;gap:14px}
.kt2-body.fit-ch2s .ch2-a{line-height:1.4}
.kt2-body.fit-tight .ch2-row{gap:24px}
.kt2-body.fit-tight .ch2-board{padding:26px 42px;gap:16px}

/* ── 113차 — 기호·뜻 개념 장 sm2(짝 줄 + 그림 판) ── */
.kt2-body.sm2{padding:0;justify-content:center;gap:0}
.sm2-row{display:grid;grid-template-columns:440px minmax(0,1fr);gap:48px;width:100%;flex:1;min-height:0;align-items:stretch;text-align:left}
.sm2-pic{position:relative;border-radius:36px;overflow:hidden;min-height:0;display:flex;flex-direction:column;justify-content:space-between;box-shadow:0 18px 50px rgba(0,0,0,.14);background:#DFF3FF}
.sm2-pic > svg{position:absolute;inset:0;width:100%;height:100%}
.sm2-bub{position:relative;margin:26px;background:rgba(255,255,255,.96);border-radius:26px;padding:22px 26px;font-size:30px;font-weight:700;line-height:1.42;color:var(--ink);word-break:keep-all;text-wrap:pretty;box-shadow:0 8px 24px rgba(0,0,0,.12)}
.sm2-bub strong{color:var(--acc-ink)}
.sm2-bub::after{content:'';position:absolute;left:90px;bottom:-18px;border:18px solid transparent;border-top-color:#fff;border-bottom:0}
.sm2-cast{position:relative;display:flex;justify-content:space-around;align-items:flex-end;padding:0 20px 22px}
.sm2-cast svg{display:block;width:160px;height:183px;filter:drop-shadow(0 8px 10px rgba(0,0,0,.22))}
.sm2-ch.r svg{transform:scaleX(-1)}
.sm2-rows{display:flex;flex-direction:column;gap:26px;justify-content:center;min-width:0}
.sm2-grp{display:flex;flex-direction:column;gap:12px}
.sm2-m{align-self:flex-start;font-family:var(--display);font-size:36px;font-weight:800;color:#fff;background:var(--acc);border-radius:999px;padding:8px 26px;word-break:keep-all}
.sm2-ss{display:flex;flex-wrap:wrap;gap:14px}
.sm2-r{display:flex;align-items:center;gap:22px}
.sm2-chip{display:inline-flex;align-items:center;gap:12px;flex:none;background:#fff;border-radius:22px;padding:8px 26px;font-family:var(--display);font-size:56px;font-weight:900;color:var(--acc-ink);box-shadow:0 6px 0 color-mix(in srgb,var(--acc) 25%,transparent);border:3px solid color-mix(in srgb,var(--acc) 22%,#fff);white-space:nowrap}
.sm2-chip .em{font-size:52px;line-height:1}
.sm2-chip .op{color:#9AA3B2;font-weight:700;margin:0 .18em}
.sm2-ar{font-size:40px;color:var(--acc);font-weight:900;flex:none}
.sm2-t{font-size:34px;font-weight:700;color:var(--ink);word-break:keep-all;line-height:1.35;min-width:0}
.anim .sm2-r,.anim .sm2-grp{animation:kt2-pop .45s both}
.anim .sm2-rows > :nth-child(2){animation-delay:.08s}.anim .sm2-rows > :nth-child(3){animation-delay:.16s}.anim .sm2-rows > :nth-child(4){animation-delay:.24s}.anim .sm2-rows > :nth-child(n+5){animation-delay:.32s}
.kt2-body.fit-sm2 .sm2-row{grid-template-columns:380px minmax(0,1fr);gap:36px}
.kt2-body.fit-sm2 .sm2-cast svg{width:130px;height:149px}
.kt2-body.fit-sm2 .sm2-bub{margin:20px;padding:18px 22px}
.kt2-body.fit-sm2s .sm2-rows{gap:16px}
.kt2-body.fit-sm2s .sm2-chip{padding:4px 20px}
.kt2-body.fit-sm2s .sm2-grp{gap:8px}
.sm2-rows:not(.grp){display:grid;grid-template-columns:auto auto minmax(0,1fr);align-content:center;column-gap:22px;row-gap:26px;align-items:center}
.sm2-rows:not(.grp) > .sm2-r{display:contents}
.sm2-rows:not(.grp) .sm2-chip{justify-self:stretch;justify-content:center}
.kt2-body.fit-sm2s .sm2-rows:not(.grp){row-gap:16px}
.sm2-row.l{grid-template-columns:540px minmax(0,1fr)}
.sm2-row.xl{grid-template-columns:600px minmax(0,1fr)}
.sm2-row.xl .sm2-bub{font-size:29px;padding:20px 24px;margin:22px}
.sm2-row.xl .sm2-cast svg{width:130px;height:149px}
.kt2-body.fit-sm2 .sm2-row.l,.kt2-body.fit-sm2 .sm2-row.xl{grid-template-columns:500px minmax(0,1fr)}
.sm2-rows.long .sm2-chip{font-size:44px}
.sm2-rows.long .sm2-chip .em{font-size:42px}

/* ── 114차 — 수학 묶음 개념 장 mg2(수 가지 · 부분·전체 색 가르기) ── */
.kt2-body.mg2{padding:0;justify-content:stretch;gap:22px;text-align:left;--mg-p1:#4F8DF7;--mg-p2:#F5902A;--mg-p1s:#E3EDFF;--mg-p2s:#FFEBD6;--mg-p2i:#D9741A}
.mg2-lead{font-size:40px;font-weight:600;line-height:1.45;color:#3A4150;word-break:keep-all;text-wrap:pretty;width:100%}
.mg2-lead strong{color:var(--acc-ink);font-weight:800}
.mg2-note{width:100%;font-size:34px;font-weight:700;color:var(--ink);background:color-mix(in srgb,var(--acc) 12%,#fff);border-left:10px solid var(--acc);border-radius:16px;padding:12px 26px;line-height:1.4;word-break:keep-all}
.mg2-note strong,.mg2-note b{color:var(--acc-ink)}.mg2-note .c1{color:var(--mg-p1)}.mg2-note .c2{color:var(--mg-p2i)}
.mg2-st{width:100%;flex:1;min-height:0;display:flex;align-items:center;justify-content:center;gap:26px}
.mg2-em{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;max-width:720px}
.mg2-em i{font-style:normal;font-size:42px;line-height:1;width:56px;height:56px;display:flex;align-items:center;justify-content:center;border-radius:50%;font-family:'Apple Color Emoji','Noto Color Emoji',sans-serif}
.mg2-em i.a{background:var(--mg-p1s);box-shadow:0 0 0 3px var(--mg-p1)}.mg2-em i.b{background:var(--mg-p2s);box-shadow:0 0 0 3px var(--mg-p2)}
.mg2-card{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:#fff;border-radius:30px;padding:22px 24px;box-shadow:0 12px 30px rgba(0,0,0,.10);border:4px solid #E3E6EC;position:relative;min-width:0}
.mg2-card.w{border-color:#B9C2D0}.mg2-card.p1{border-color:var(--mg-p1);background:var(--mg-p1s)}.mg2-card.p2{border-color:var(--mg-p2);background:var(--mg-p2s)}
.mg2-n{font-family:var(--display);font-size:64px;font-weight:900;color:var(--ink);line-height:1}
.mg2-card.p1 .mg2-n{color:var(--mg-p1)}.mg2-card.p2 .mg2-n{color:var(--mg-p2i)}
.mg2-lb{font-size:32px;font-weight:800;color:var(--ink);text-align:center;word-break:keep-all;line-height:1.3}
.mg2-lb strong{color:var(--acc-ink)}
.mg2-op{font-family:var(--display);font-size:72px;font-weight:900;color:#9AA3B2;flex:none}
/* 가르기·모으기 = 수 가지 */
.mg2-st.split,.mg2-st.join{display:grid;grid-template-columns:1fr auto 1fr;grid-template-rows:auto auto auto;column-gap:40px;row-gap:0;align-items:center;justify-items:center;align-content:center}
.mg2-st.split .mg2-card.w,.mg2-st.join .mg2-card.w{grid-column:1/4;min-width:560px;padding:14px 24px;gap:6px}
.mg2-br{grid-column:1/4;height:44px;width:420px}.mg2-br svg{display:block;width:100%;height:100%}
.mg2-st.split .mg2-card.p1,.mg2-st.join .mg2-card.p1{grid-column:1;justify-self:end}.mg2-st.split .mg2-card.p2,.mg2-st.join .mg2-card.p2{grid-column:3;justify-self:start}
.mg2-st.split .mg2-card.p1,.mg2-st.split .mg2-card.p2,.mg2-st.join .mg2-card.p1,.mg2-st.join .mg2-card.p2{flex-direction:row;gap:20px;padding:12px 26px}
.mg2-st.split .mg2-card.p1 .mg2-n,.mg2-st.split .mg2-card.p2 .mg2-n,.mg2-st.join .mg2-card.p1 .mg2-n,.mg2-st.join .mg2-card.p2 .mg2-n{font-size:56px}
.mg2-st.split .mg2-card.w{grid-row:1}.mg2-st.split .mg2-br{grid-row:2}.mg2-st.split .mg2-card.p1,.mg2-st.split .mg2-card.p2{grid-row:3}
.mg2-st.join .mg2-card.w{grid-row:3}.mg2-st.join .mg2-br{grid-row:2;transform:scaleY(-1)}.mg2-st.join .mg2-card.p1,.mg2-st.join .mg2-card.p2{grid-row:1}
/* 두 묶음 · 한 묶음 · 그림 카드 · 줄 */
.mg2-st.two .mg2-card,.mg2-st.row .mg2-card{flex:1;max-width:520px}
.mg2-st.one .mg2-card{min-width:560px;max-width:900px}
.mg2-st.icon .mg2-card{flex:1;max-width:400px;gap:16px;padding:26px 20px}
.mg2-big{font-size:110px;line-height:1;font-family:'Apple Color Emoji','Noto Color Emoji',sans-serif}
.mg2-st.icon.n5 .mg2-big,.mg2-st.icon.n6 .mg2-big{font-size:84px}.mg2-st.icon.n5 .mg2-lb,.mg2-st.icon.n6 .mg2-lb{font-size:28px}
.mg2-st.icon.n5,.mg2-st.icon.n6{gap:16px}
.anim .mg2-card{animation:kt2-pop .45s both}.anim .mg2-st > :nth-child(2){animation-delay:.1s}.anim .mg2-st > :nth-child(3){animation-delay:.2s}.anim .mg2-st > :nth-child(4){animation-delay:.3s}.anim .mg2-st > :nth-child(n+5){animation-delay:.4s}
.kt2-body.fit-mg2 .mg2-em i{width:46px;height:46px;font-size:34px}.kt2-body.fit-mg2 .mg2-em{gap:8px}
.kt2-body.fit-mg2 .mg2-big{font-size:84px}.kt2-body.fit-mg2 .mg2-n{font-size:52px}
.kt2-body.fit-mg2s{gap:14px}.kt2-body.fit-mg2s .mg2-card{padding:12px 18px;gap:8px}.kt2-body.fit-mg2s .mg2-st.split .mg2-card.w,.kt2-body.fit-mg2s .mg2-st.join .mg2-card.w{padding:10px 20px}
.kt2-body.fit-mg2s .mg2-note{padding:8px 22px}.kt2-body.fit-mg2s .mg2-br{height:32px}
.mg2-n .c1{color:var(--mg-p1)}.mg2-n .c2{color:var(--mg-p2i)}.mg2-n > i{font-style:normal;font-size:34px;color:#9AA3B2;margin:0 10px}

/* ── 115차 — 흐름 개념 장 bd2(계단 카드) ── */
.kt2-body.bd2{padding:0;justify-content:center;gap:0}
.bd2-st{width:100%;display:flex;flex-direction:column;align-items:center;text-align:left}
.bd2-nd{display:flex;align-items:center;gap:24px;width:min(1320px,100%);background:#fff;border:4px solid #E3E6EC;border-radius:28px;padding:14px 34px;box-shadow:0 10px 26px rgba(0,0,0,.08)}
.bd2-no{flex:none;width:62px;height:62px;border-radius:50%;background:var(--acc);color:#fff;font-family:var(--display);font-size:36px;font-weight:900;display:flex;align-items:center;justify-content:center}
.bd2-nd.end{background:var(--acc);border-color:var(--acc)}
.bd2-nd.end .bd2-no{background:#fff;color:var(--acc-ink)}
.bd2-nd.end .bd2-tx,.bd2-nd.end .bd2-tx strong{color:#fff}
.bd2-nd.end .bd2-chips span{background:rgba(255,255,255,.18);border-color:rgba(255,255,255,.6);color:#fff}
.bd2-nd.end .bd2-tiles b{background:#fff}
.bd2-ic{font-size:64px;line-height:1;flex:none}
.bd2-c{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;min-width:0}
.bd2-tx{font-size:44px;font-weight:700;line-height:1.3;color:var(--ink);word-break:keep-all;text-wrap:pretty}
.bd2-tx strong{color:var(--acc-ink);font-weight:900}
.bd2-hd{flex:none}
.bd2-chips{display:flex;flex-wrap:wrap;gap:10px 12px;align-items:center}
.bd2-chips span{font-size:36px;font-weight:700;background:#fff;border:3px solid #DCE1EA;border-radius:999px;padding:4px 22px;color:var(--ink);white-space:nowrap}
.bd2-chips span strong{color:var(--acc-ink)}
.bd2-tiles{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.bd2-tiles b{font-family:var(--display);font-size:52px;font-weight:900;min-width:76px;height:76px;padding:0 12px;border-radius:18px;background:#fff;border:4px solid var(--acc);color:var(--acc-ink);display:flex;align-items:center;justify-content:center}
.bd2-tiles b strong{color:inherit}
.bd2-tiles i{font-style:normal;font-size:40px;color:#9AA3B2;font-weight:900}
.bd2-ar{font-size:40px;line-height:1;color:var(--acc);height:48px;display:flex;align-items:center}
.bd2-op{font-family:var(--display);font-size:48px;font-weight:900;color:var(--acc-ink);height:56px;display:flex;align-items:center}
.bd2-gap{height:14px}
.kt2-body.fit-bd2 .bd2-nd{padding:8px 28px;gap:18px}
.kt2-body.fit-bd2 .bd2-ar{height:30px;font-size:30px}
.kt2-body.fit-bd2 .bd2-op{height:40px;font-size:40px}
.kt2-body.fit-bd2 .bd2-gap{height:8px}
.kt2-body.fit-bd2 .bd2-ic{font-size:52px}
.kt2-body.fit-bd2 .bd2-tiles b{height:64px;min-width:64px;font-size:46px}
.kt2-body.fit-bd2s .bd2-tx{font-size:40px}
.kt2-body.fit-bd2s .bd2-chips span{font-size:32px;padding:2px 18px}
.kt2-body.fit-bd2s .bd2-no{width:52px;height:52px;font-size:30px}

/* ── 118차 — pa2 상황 글 없는 장: 말풍선 대신 세는 그림·십 배열판을 흰 판에 · 둘 다 없으면 그림 판 + 인물만 ── */
.pa2-vis{position:absolute;left:26px;right:26px;top:26px;background:rgba(255,255,255,.96);border-radius:26px;padding:20px 22px;box-shadow:0 8px 24px rgba(0,0,0,.12);display:flex;justify-content:center;align-items:center}
.pa2-vis .tf-row{margin:0;gap:14px;flex-wrap:wrap;justify-content:center}
.pa2-vis.tf{padding:22px}
.pa2-nb .pa2-cast{padding-bottom:30px}
.pa2-nb:not(.has-vis) .pa2-ch svg{width:230px;height:263px}
.pa2-nb.has-vis{justify-content:flex-end}
.kt2-body.fit-pa2 .pa2-nb:not(.has-vis) .pa2-ch svg{width:170px;height:194px}
.pa2-nb.vis-big{justify-content:center}
.pa2-nb.vis-big .pa2-vis{position:relative;left:auto;right:auto;top:auto;margin:22px;flex:1;min-height:0}
.pa2-nb.vis-big .pa2-cast{display:none}
.pa2-nb.vis-big .pa2-vis .tf-row{flex-direction:column;align-items:stretch;gap:12px;width:100%}
.pa2-nb.vis-big .tf-item{flex-direction:row;justify-content:space-between;align-items:center;padding:10px 18px;min-width:0;gap:16px;border-radius:20px}
.pa2-nb.vis-big .emoji-row.count{padding:8px 12px;gap:6px;box-shadow:none;border:0;background:transparent;justify-content:flex-start}
.pa2-nb.vis-big .emoji-row.count span{font-size:54px}
.pa2-nb.vis-big .emoji-row.count span:nth-child(5n){margin-right:12px}
.pa2-nb.vis-big .emoji-row.count.grid .eg{gap:6px}
/* ── 118차 — 그림 + 보기 문제 장 pf2 (pa2 그림 판 + 보기) ── */
.pa2 .options.pa2-opts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;max-width:none;width:100%}
.kt2-body.pf2 .pa2-q{font-size:52px}
.kt2-body.pf2 .pa2-fig > .fig{flex:1;display:flex;align-items:center;justify-content:center;background:var(--white);border-radius:28px;padding:18px;box-shadow:0 2px 0 var(--line)}
.kt2-body.fit-tight .pa2 .options.pa2-opts,.kt2-body.fit-pa2s .options.pa2-opts{gap:10px}
.kt2-body.pf2 .pa2-fig{min-width:0}
.kt2-body.pf2 .pa2-fig > .fig{min-width:0}
.kt2-body.pf2 .fig-panels{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;width:100%;align-items:end}
.kt2-body.pf2 .fig-panels.n1{grid-template-columns:minmax(0,1fr)}
.kt2-body.pf2 .fig-panels.n3{grid-template-columns:repeat(3,minmax(0,1fr))}
.kt2-body.pf2 .fig-panels.vs{display:flex}
.kt2-body.pf2 .fig-panel{min-width:0;box-shadow:none;border:2px solid var(--line)}
.kt2-body.pf2 .fig-panels .fig-svg,.kt2-body.pf2 .fig > .fig-svg,.kt2-body.pf2 .fig-panels.n1 .fig-svg{width:100%;max-width:100%;height:auto}
/* pf2w — 표·그래프(자료 그림)는 넓어서 위 띠(상황 + 그림) · 아래 물음 + 보기 */
.kt2-body.pf2w .pa2-row{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);gap:24px}
.kt2-body.pf2w .pa2-fig{flex-direction:row;align-items:center;gap:24px}
.kt2-body.pf2w .pa2-fs{flex:0 0 380px;align-self:stretch}
.kt2-body.pf2w .pa2-fig > .fig{flex:1}
.kt2-body.pf2w .pa2-main{gap:20px}
.kt2-body.pf2w .pa2-q{font-size:46px}
.kt2-body.pf2w .options.pa2-opts{grid-template-columns:repeat(4,minmax(0,1fr))}
.kt2-body.pf2w.fit-pa2 .pa2-row{grid-template-columns:minmax(0,1fr)}
.kt2-body.pf2w .pa2-row.optl .options.pa2-opts{grid-template-columns:repeat(2,minmax(0,1fr))}
.kt2-body.pf2:not(.pf2w) .pa2-fig > .fig{overflow:hidden}

/* ── 119차 — pf2w 그림 높이 상한 (넓은 띠에서 svg 가 width 100% 로 커지지 않게) ── */
.kt2-body.pf2w .pa2-fig > .fig .fig-svg{max-height:300px;width:auto;max-width:100%}

/* ── 124차 — 1학년 2학기 「덧셈과 뺄셈(1)」 식 띠 eqt (번호 줄·「?」 자리·주황 결과) ── */
.fig-eqt{gap:12px;align-items:center}
.eqt-row{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:nowrap}
.eqt-n{min-width:64px;height:64px;padding:0 10px;display:inline-flex;align-items:center;justify-content:center;background:#fff;border:3px solid #C9D3E0;border-radius:14px;font-size:40px;font-weight:900;color:#2B3440;font-variant-numeric:tabular-nums}
.eqt-n.hi{background:#FFF1E6;border-color:#FF7A2F;color:#C2551A}
.eqt-n.q{border:3px dashed #FF7A2F;color:#FF7A2F;background:#FFFBF7}
.eqt-op{font-size:40px;font-weight:900;color:#4E5C70;min-width:26px;text-align:center}
.eqt-no{width:40px;height:40px;border-radius:50%;background:#2B3440;color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:22px;font-weight:900;margin-right:6px}
.fig-eqt.many{display:grid;grid-template-columns:repeat(2,auto);gap:10px 26px;justify-content:center}
.fig-eqt.many .eqt-n{min-width:50px;height:50px;font-size:30px}.fig-eqt.many .eqt-op{font-size:30px;min-width:18px}
.fig-panels .fig-eqt .eqt-n{min-width:52px;height:52px;font-size:32px}.fig-panels .fig-eqt .eqt-op{font-size:32px}
/* 126차 — 1-2 수학 3단원 문제 장: 정사각 시계·키 큰 모양 판이 장을 넘기지 않게 그림 높이만 묶음(글씨 1.0배 그대로 · 그림만 줄이기) */
.kt2-body.pa2 svg.fig-clk1{max-height:360px;width:auto;max-width:100%;margin:0 auto}
.kt2-body.pa2 svg.fig-mosaic1{max-height:380px;width:auto;max-width:100%;margin:0 auto}
.kt2-body.pa2 .fig-panels svg.fig-clk1{max-height:250px}
.kt2-body .ps-fig svg.fig-clk1{max-height:340px;width:auto;max-width:100%;margin:0 auto}
.kt2-body .ps-fig svg.fig-mosaic1{max-height:360px;width:auto;max-width:100%;margin:0 auto}
.kt2-body .ps-fig .fig-panels svg.fig-clk1{max-height:240px}
/* 128차 — 1-2 수학 5단원 「규칙 찾기」: 규칙 줄·수 줄(가로로 긴 띠)은 개념 장에서 넓게, 둘 이상이면 위아래로(col) · 수 배열표는 문제 장에서 그림 높이만 묶음(글씨 1.0배 그대로 · 그림만 줄이기) */
.fig-panels.col{flex-direction:column;align-items:center;gap:14px}
.kt2-body.cv2 .fig-panels.col .fig-svg.fig-pat1,.kt2-body.cv2 .fig-panels.col .fig-svg.fig-seq1{width:780px}
.kt2-body.cv2 .fig-panels.n1 .fig-svg.fig-pat1,.kt2-body.cv2 .fig-panels.n1 .fig-svg.fig-seq1{width:820px}
/* 130차 — 띠 셋(col.n3): 첫 띠(재료 모양)는 위 한 줄, 나머지 둘은 아래 나란히 — 셋 위아래면 그림이 0.70배로 줄었음(l04 s6) */
.fig-panels.col.n3{flex-direction:row;flex-wrap:wrap;justify-content:center}
.fig-panels.col.n3>.fig-panel:first-child{flex:0 0 620px;margin:0 calc(50% - 310px)}
.kt2-body.cv2 .fig-panels.col.n3>.fig-panel:first-child .fig-svg.fig-pat1{width:600px}
.kt2-body.cv2 .fig-panels.col.n3>.fig-panel:not(:first-child) .fig-svg.fig-pat1{width:560px}
.kt2-body.pa2 svg.fig-ntab1{max-height:340px;width:100%;height:auto;margin:0 auto}
.kt2-body .ps-fig svg.fig-ntab1{max-height:330px;width:100%;height:auto;margin:0 auto}
/* 130차(수학) — 1-2 수학 6단원 문제 장: 세로 셈 칸(vcalc1)이 키가 커 장이 0.83배로 줄었음 → 그림 높이만 묶음(글씨 1.0배 그대로 · 그림만 줄이기) */
.kt2-body.pa2 svg.fig-vcalc1{max-height:400px;width:100%;height:auto;max-width:100%;margin:0 auto}
.kt2-body .ps-fig svg.fig-vcalc1{max-height:390px;width:100%;height:auto;max-width:100%;margin:0 auto}
.kt2-body.pa2 svg.fig-board1{max-height:420px;width:100%;height:auto;max-width:100%;margin:0 auto}
.kt2-body .ps-fig svg.fig-board1{max-height:400px;width:100%;height:auto;max-width:100%;margin:0 auto}

/* 132차 — wide7 넓은 띠의 tally1(점 줄)은 svg 고유 크기가 없어 0 으로 접힘 → 띠 폭에 맞춘 고정 너비 */
.kt2-body.pf2w .pa2-fig > .fig .fig-svg.fig-tally1{width:960px;max-height:none;height:auto}
.tv-r span.tv-q b{display:inline-block;min-width:60px;border:3px dashed #FF7A2F;background:#FFF1E6;color:#C2551A;border-radius:10px;line-height:1.1}
/* 144차 — 2-2 수학 5단원 「표와 그래프」 자료 그림(tbl2·cg2·tly2·dc2·srt2·wcl2·nte2): svg 에 고유 크기(width·height = viewBox)가 있어 1:1 로 둔다 — 글씨가 줄지 않게, 넘칠 때만 넓이·높이에 맞춰 그림만 줄이기 */
.fig-svg.fig-dat2,.fig-panels .fig-svg.fig-dat2{width:auto;max-width:100%;height:auto;background:none}
.kt2-body.pa2 svg.fig-dat2{max-height:420px;width:auto;max-width:100%;margin:0 auto}
.kt2-body.pa2 .fig-panels svg.fig-dat2{max-height:360px}
.kt2-body .ps-fig svg.fig-dat2{max-height:400px;width:auto;max-width:100%;margin:0 auto}
.kt2-body .ps-fig .fig-panels svg.fig-dat2{max-height:340px}
/* 144차 — 표와 그래프가 넓은 띠(pf2w)로 갈 때 그림 높이만 묶음(글씨 1.0배 지키기) */
.kt2-body.pf2w .pa2-fig > .fig svg.fig-dat2{max-height:270px}
.kt2-body.pf2w .pa2-fig > .fig .fig-panels svg.fig-dat2{max-height:240px}
.kt2-body.pf2.pf2w .pa2-fig > .fig .fig-panels svg.fig-dat2{max-height:200px}
