/* ===== 페이퍼로지 (Paperlogy) — 눈누, SIL 오픈폰트라이선스(OFL)
   외부 CDN을 링크하지 않고 같은 폴더의 파일을 씁니다. 학교 방화벽에서도 뜹니다. ===== */
@font-face{
  font-family:"Paperlogy";
  src:url("../fonts/Paperlogy-4Regular.woff2") format("woff2");
  font-weight:400; font-style:normal; font-display:swap;
}
@font-face{
  font-family:"Paperlogy";
  src:url("../fonts/Paperlogy-7Bold.woff2") format("woff2");
  font-weight:700; font-style:normal; font-display:swap;
}
@font-face{
  font-family:"Paperlogy";
  src:url("../fonts/Paperlogy-9Black.woff2") format("woff2");
  font-weight:900; font-style:normal; font-display:swap;
}

/* ===== 파셜산스 (PartialSans KR) — 눈누, 박준영(@typejjun__) 상업용 무료
   굵기가 Regular 하나뿐입니다. 억지로 굵히면 뭉개지므로 font-weight는 400으로 고정하고
   크기로만 위계를 만듭니다. 제목처럼 큰 글씨에만 씁니다. ===== */
@font-face{
  font-family:"PartialSans";
  src:url("../fonts/PartialSansKR-Regular.woff2") format("woff2");
  font-weight:400; font-style:normal; font-display:swap;
}

/* ===== 색 — 두클래스 전자도서관과 같은 값 ===== */
:root{
  --bg:#FBF7EE; --ink:#221F1A; --dim:#6B6558; --line:#E1D9C8; --card:#FFFDF8;
  --accent:#1E5F86; --accentSoft:#E6EFF5;
  --shadow:0 2px 10px rgba(60,50,30,.10);
  --edge:#16150F;            /* 테두리·그림자 색 */
  --grid:rgba(22,21,15,.07); /* 격자 선 */
  --pill:#B5DFF5;            /* 하늘 파스텔 — 강조 단추·단계 표시 */
  --yellow:#FAECA6;          /* 레몬 파스텔 — 기본 단추 */
  --mint:#A8E6C4;            /* 민트 파스텔 — 진행·완성 */
  --coral:#FF9B85;           /* 코랄 — 녹음. 화면에서 가장 눈에 띄어야 합니다 */
  --hl:#FBF3D8;              /* 옅은 강조 바탕 */
  --r:16px;
  --brandH:clamp(38px,4.3vw,56px);
  --base:clamp(1.02rem,.78rem + .66vw,1.36rem);
  --lbl:clamp(.9rem,.82rem + .28vw,1.08rem);
  --big:clamp(1.45rem,1.05rem + 1.8vw,2.4rem);
}

/* ===== 기본값 ===== */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
html,body{margin:0;min-height:100%}
body{
  font-family:"Paperlogy","Pretendard","Apple SD Gothic Neo","Malgun Gothic",sans-serif;
  font-size:var(--base); line-height:1.8;
  word-break:keep-all; overflow-wrap:break-word; line-break:strict;
  -webkit-font-smoothing:antialiased; -moz-osx-font-smoothing:grayscale;
  color:var(--ink);
  background-color:var(--bg);
  background-image:
    linear-gradient(var(--grid) 1px, transparent 1px),
    linear-gradient(90deg, var(--grid) 1px, transparent 1px);
  background-size:24px 24px;
  -webkit-tap-highlight-color:transparent;
}
p,li,span,label,button,textarea,input,h1,h2,h3,h4{word-break:keep-all;overflow-wrap:break-word}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
textarea,input,select{font-family:inherit}
h1,h2,h3{text-wrap:balance;line-height:1.35;margin:0}
p{text-wrap:pretty}
[hidden]{display:none!important}
:focus-visible{outline:3px solid var(--accent);outline-offset:2px;border-radius:6px}

/* 공통 블록 — 굵은 테두리 + 번지지 않는 오프셋 그림자 */
.blk,.card,.stage-card,.player,.book,.work,.role,.script,.sheet .in{
  background:var(--card);
  border:3px solid var(--edge);
  border-radius:var(--r);
  box-shadow:6px 6px 0 0 var(--edge);
}
.press{transition:transform .12s cubic-bezier(.2,0,0,1), box-shadow .12s cubic-bezier(.2,0,0,1)}
.press:hover{transform:translate(3px,3px);box-shadow:3px 3px 0 0 var(--edge)}
.press:active{transform:translate(6px,6px);box-shadow:0 0 0 0 var(--edge)}

/* ── 틀 ─────────────────────────────────────────── */
#app{min-height:100dvh;display:flex;flex-direction:column}

header.top{
  display:flex;align-items:center;gap:clamp(8px,1.6vw,14px);
  padding:clamp(10px,1.6vw,16px) clamp(12px,2.4vw,22px);
  position:sticky;top:0;z-index:40;
  background:var(--bg);
  border-bottom:3px solid var(--edge);
}
/* 제목 알약 — 서재의 이름표와 같은 모양 */
header.top .ttl{
  background:#FFFFFF;color:#16150F;
  border:3px solid #16150F;border-radius:99px;
  box-shadow:5px 5px 0 0 #16150F;
  height:var(--brandH);
  display:inline-flex;align-items:center;gap:.3em;flex:none;
  padding:0 clamp(14px,2vw,26px);
  font-size:clamp(.98rem,.72rem + .95vw,1.45rem);
  font-weight:700;letter-spacing:.01em;line-height:1;white-space:nowrap;
  cursor:pointer;
  transition:transform .12s cubic-bezier(.2,0,0,1), box-shadow .12s cubic-bezier(.2,0,0,1);
}
header.top .ttl:hover{transform:translate(2px,2px);box-shadow:3px 3px 0 0 #16150F}
header.top .ttl:active{transform:translate(5px,5px);box-shadow:0 0 0 0 #16150F}
header.top .ttl b{color:#12A98D;font-weight:inherit}
header.top img{height:var(--brandH);width:auto;flex:none;order:9}
header.top .sp{flex:1}

.crumb{display:flex;gap:.32rem;align-items:center}
.crumb .cr{
  display:grid;place-items:center;width:1.85em;height:1.85em;border-radius:50%;
  border:2.5px solid var(--edge);background:var(--card);color:var(--dim);
  font-size:.82rem;font-weight:700;line-height:1;padding:0;
}
.crumb .cr[disabled]{cursor:default}
/* 지금 단계 — 노란색으로 한 뼘 크게 */
.crumb .cr.on{
  background:var(--yellow);color:#16150F;
  width:2.25em;height:2.25em;font-size:.92rem;
  box-shadow:2px 2px 0 0 var(--edge);
}
/* 지나온 단계 — 눌러서 되돌아갈 수 있습니다 */
.crumb .cr.done{
  background:var(--mint);color:#16150F;cursor:pointer;
  transition:transform .12s cubic-bezier(.2,0,0,1), box-shadow .12s cubic-bezier(.2,0,0,1);
}
.crumb .cr.done:hover{transform:translate(-1px,-1px);box-shadow:2px 2px 0 0 var(--edge)}
.crumb .cr.done:active{transform:translate(1px,1px);box-shadow:none}
/* 좁은 화면에서는 제목 알약과 로고를 한 줄, 단계 표시를 그 아래 줄로 내립니다 */
@media(max-width:720px){
  header.top{flex-wrap:wrap;row-gap:10px}
  header.top .ttl{
    height:40px;padding:0 14px;font-size:.95rem;
    box-shadow:3px 3px 0 0 #16150F;order:0}
  header.top .sp{order:1}
  header.top img{height:40px;order:2}
  .crumb{order:3;width:100%;justify-content:center}
  .crumb .cr{width:1.7em;height:1.7em;font-size:.76rem}
  .crumb .cr.on{width:2.1em;height:2.1em;font-size:.86rem}
}

main{flex:1;display:flex;flex-direction:column}
.stage{display:none;flex:1;flex-direction:column;
  padding:clamp(1.1rem,3.2vw,2.2rem) clamp(1rem,3.4vw,2rem) clamp(1.4rem,3vw,2.4rem);
  max-width:1080px;width:100%;margin:0 auto}
.stage.on{display:flex}
.stage>*{min-width:0}
.stage.wide{max-width:1240px}

.eyebrow{
  display:inline-flex;align-self:flex-start;align-items:center;
  background:var(--pill);color:#16150F;
  border:2.5px solid var(--edge);border-radius:99px;
  box-shadow:3px 3px 0 0 var(--edge);
  padding:.1rem .85rem;margin:0 0 .75rem;
  font-size:.86rem;font-weight:700;line-height:1.7;letter-spacing:.01em;
}
.stage h2{font-size:var(--big);font-weight:700;letter-spacing:-.02em;margin-bottom:.45rem}
.sub{color:var(--dim);font-size:var(--lbl);margin:.1rem 0 1.3rem;line-height:1.75}

/* 제목 덩이 — 흰 블록에 담아 가운데로 모읍니다 */
.titleblk{
  background:#FFFFFF;
  border:3px solid var(--edge);border-radius:var(--r);
  box-shadow:6px 6px 0 0 var(--edge);
  padding:clamp(1.1rem,3vw,1.9rem) clamp(1.1rem,3.4vw,2.2rem);
  margin-bottom:clamp(18px,2.6vw,26px);
  display:flex;flex-direction:column;align-items:center;gap:.6rem;text-align:center;
}
.titleblk .eyebrow{align-self:center;margin:0}
.titleblk h2{
  font-family:"PartialSans","Paperlogy",sans-serif;
  font-weight:400;                 /* 굵기가 하나뿐인 글꼴입니다 */
  font-size:clamp(1.65rem,1.1rem + 2.2vw,2.9rem);
  letter-spacing:-.01em;line-height:1.35;margin:0;
}
.titleblk .sub{
  font-weight:700;                 /* 페이퍼로지를 굵게 */
  color:var(--dim);margin:0;max-width:62ch;line-height:1.8;
}

/* ── 단추 ───────────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:11px 20px;border-radius:12px;min-height:52px;
  background:var(--yellow);color:#16150F;
  border:2.5px solid var(--edge);
  box-shadow:4px 4px 0 0 var(--edge);
  font-size:1rem;font-weight:700;
  transition:transform .12s cubic-bezier(.2,0,0,1), box-shadow .12s cubic-bezier(.2,0,0,1);
}
.btn:hover{transform:translate(2px,2px);box-shadow:2px 2px 0 0 var(--edge)}
.btn:active{transform:translate(4px,4px);box-shadow:0 0 0 0 var(--edge)}
.btn[disabled]{opacity:.4;pointer-events:none;box-shadow:4px 4px 0 0 var(--edge)}
.btn.ghost{background:var(--card);color:var(--ink)}
.btn.primary{background:var(--pill);color:#16150F}
.btn.rec{background:var(--coral);color:#16150F}
.btn.go{background:var(--mint);color:#16150F}
.btn.sm{padding:9px 15px;font-size:.94rem;min-height:44px}
.btn.xl{padding:16px 30px;font-size:1.12rem;min-height:68px;border-radius:14px}
.row{display:flex;gap:.75rem;flex-wrap:wrap;align-items:center}
.row.end{justify-content:flex-end}
.row.mid{justify-content:center}
.spacer{flex:1}

/* ── 카드 ───────────────────────────────────────── */
.card{padding:clamp(1.2rem,3.2vw,1.8rem);display:flex;flex-direction:column}
/* 카드 제목은 흰 블록에 담습니다 */
.card h3{
  align-self:flex-start;
  background:#FFFFFF;color:#16150F;
  border:2.5px solid var(--edge);border-radius:12px;
  box-shadow:4px 4px 0 0 var(--edge);
  padding:.34rem 1.05rem;
  font-size:1.16em;font-weight:900;letter-spacing:-.02em;
  margin:0 0 1.15rem;
}
.card p{font-size:1.02rem;line-height:1.9;margin:0 0 .85rem;color:var(--ink)}
.card p:last-child{margin-bottom:0}
/* 밑줄식 강조 — 낱말 사이가 벌어지지 않습니다 */
.card p b,.steps b{background:linear-gradient(transparent 56%, var(--hl) 56%)}

/* 정해 둔 자리에서 줄을 나눕니다. 좁은 화면에서는 그냥 이어 흐르게 두어야
   어색하게 끊기지 않으므로, 자리가 넉넉할 때만 줄을 나눕니다.
   </span>과 <span> 사이의 공백을 지우면 좁은 화면에서 낱말이 붙어 버립니다. */
.brk{display:inline}
@media(min-width:900px){ .brk{display:block} }

/* 녹음 방법 고르기 카드 */
.card.way{cursor:pointer;text-align:left;
  transition:transform .12s cubic-bezier(.2,0,0,1), box-shadow .12s cubic-bezier(.2,0,0,1)}
.card.way:hover{transform:translate(3px,3px);box-shadow:3px 3px 0 0 var(--edge)}
.card.way:active{transform:translate(6px,6px);box-shadow:0 0 0 0 var(--edge)}
.way p.good,.way p.care{
  font-size:.95rem;line-height:1.75;margin:.15rem 0 .5rem;
  padding-left:.85rem;border-left:4px solid var(--mint);color:var(--dim)}
.way p.care{border-left-color:var(--coral)}
.way p.care:last-child{margin-bottom:0}

/* 번호를 붙인 차례 목록 — 숫자를 동그라미로 떼어 내 읽기 쉽게 */
.steps{margin:0;padding:0;list-style:none;counter-reset:s;
  display:flex;flex-direction:column;gap:.65rem}
.steps li{display:flex;gap:.75rem;align-items:flex-start;
  font-size:1.02rem;line-height:1.7;counter-increment:s}
/* 글은 반드시 span 하나로 감쌉니다. 그러지 않으면 <b>가 따로 떨어져
   낱말 사이에 gap 만큼 빈틈이 생깁니다. */
.steps li > span{flex:1;min-width:0}
.steps li::before{
  content:counter(s);flex:0 0 auto;
  display:grid;place-items:center;width:1.75em;height:1.75em;border-radius:50%;
  border:2.5px solid var(--edge);background:var(--pill);color:#16150F;
  font-size:.9rem;font-weight:700;line-height:1;margin-top:.1em;
}
.grid{display:grid;gap:clamp(18px,2.4vw,24px)}
@media(min-width:760px){ .grid.c3{grid-template-columns:repeat(3,1fr)} .grid.c2{grid-template-columns:repeat(2,1fr)} }
@media(min-width:1060px){ .grid.c3{grid-template-columns:repeat(3,1fr)} }

/* 이야기 고르기 — 서재의 책 카드와 같은 모양 */
.book{
  cursor:pointer;text-align:left;padding:0;overflow:hidden;
  display:flex;flex-direction:column;
  transition:transform .12s cubic-bezier(.2,0,0,1), box-shadow .12s cubic-bezier(.2,0,0,1);
}
.book:hover{transform:translate(3px,3px);box-shadow:3px 3px 0 0 var(--edge)}
.book:active{transform:translate(6px,6px);box-shadow:0 0 0 0 var(--edge)}
.book .cover{
  container-type:inline-size;
  display:flex;flex-direction:column;justify-content:flex-end;gap:10px;
  padding:22px 20px 20px;min-height:168px;
  color:#16150F;background:var(--cv,#C9E3F7);border-bottom:3px solid var(--edge);
}
.book .bg{
  align-self:flex-start;
  background:#FFFFFF;color:#16150F;border:2px solid var(--edge);border-radius:99px;
  padding:.02rem .65rem;font-size:.82rem;font-weight:700;line-height:1.75;
}
/* 책 제목은 언제나 한 줄이고, 세 권이 모두 같은 크기입니다.
   --tl 은 app.js가 #book-list에 넣어 주는 '가장 긴 제목의 길이'입니다.
   화면이 좁아지면 세 권이 함께 작아지므로 크기는 늘 같습니다. */
.book .bt{
  font-family:"Paperlogy",sans-serif;font-weight:900;
  white-space:nowrap;
  font-size:clamp(1.15rem, calc(100cqw / var(--tl,8)), 2.15rem);
  letter-spacing:-.01em;line-height:1.3;
}
.book .body{display:flex;flex-direction:column;gap:9px;padding:16px 20px 18px}
.book .bb{font-size:var(--lbl);color:var(--dim);line-height:1.7}
/* 소개 글은 stories.js에 적어 둔 칸마다 한 줄씩 내려갑니다 */
.book .bb > span{display:block}
.book .bl{font-size:.84rem;color:var(--dim)}
/* 고른 책은 커지고 테두리가 붙습니다. 고르지 않은 책은 옅어집니다. */
.book{position:relative}
#book-list.picked .book:not(.sel){opacity:.38;filter:saturate(.45)}
.book.sel{
  box-shadow:6px 6px 0 0 var(--edge), 0 0 0 5px var(--coral);
  transform:scale(1.04);
}
.book.sel:hover,.book.sel:active{transform:scale(1.04);box-shadow:6px 6px 0 0 var(--edge), 0 0 0 5px var(--coral)}
.book.sel::after{
  content:'고른 이야기';position:absolute;top:12px;right:12px;
  background:var(--coral);color:#16150F;
  border:2.5px solid var(--edge);border-radius:99px;
  box-shadow:3px 3px 0 0 var(--edge);
  padding:.04rem .7rem;font-size:.82rem;font-weight:700;line-height:1.8;
}

/* 지금 눌러야 할 단추 */
.btn.hot{animation:pulse 1.5s ease-in-out infinite}
@keyframes pulse{
  0%,100%{box-shadow:4px 4px 0 0 var(--edge)}
  50%{box-shadow:4px 4px 0 0 var(--edge), 0 0 0 8px rgba(255,155,133,.42)}
}
@media(prefers-reduced-motion:reduce){
  .btn.hot{animation:none;box-shadow:4px 4px 0 0 var(--edge), 0 0 0 5px var(--coral)}
  .book.sel{transform:none}
}

/* ── 역할 ───────────────────────────────────────── */
.role{display:flex;gap:.8rem;align-items:flex-start;padding:1rem 1.1rem}
.chip{
  display:inline-flex;align-items:center;gap:.35em;
  border:2.5px solid var(--edge);border-radius:99px;
  padding:.08rem .8rem;font-weight:700;font-size:var(--lbl);line-height:1.7;
  color:#16150F;white-space:nowrap;box-shadow:2px 2px 0 0 var(--edge);
}
.role .body{flex:1;min-width:0}
.role .vo{font-size:.9rem;color:var(--dim);margin:.5rem 0 .7rem;line-height:1.7}
.role .cnt{font-size:.86rem;color:var(--dim);font-weight:700}
input[type=text]{
  width:100%;min-height:52px;padding:.5rem .9rem;font:inherit;font-weight:700;
  border:2.5px solid var(--edge);border-radius:12px;background:#FFFFFF;color:var(--ink)}
input[type=text]::placeholder{font-weight:400;color:#B7AE9C}
input[type=text]:focus{outline:none;box-shadow:3px 3px 0 0 var(--edge)}
label.fl{display:block;font-size:var(--lbl);font-weight:700;margin:0 0 .35rem}

/* ── 마이크 점검 ─────────────────────────────────── */
.meter{height:22px;border:2.5px solid var(--edge);border-radius:99px;background:var(--bg);overflow:hidden}
.meter i{display:block;height:100%;width:0%;
  background:linear-gradient(90deg,var(--mint),var(--yellow) 65%,var(--coral));
  transition:width .06s linear}
.mic-state{font-weight:700;margin:.7rem 0 0;font-size:var(--lbl)}

/* ── 대본 ───────────────────────────────────────── */
/* 대본과 대사 카드는 흰 바탕 — 글이 가장 또렷하게 읽힙니다 */
.script,.stage-card,.player{background:#FFFFFF}
.script{max-height:min(56vh,600px);overflow:auto;padding:.5rem}
.ln{display:flex;gap:.8rem;padding:.6rem .7rem;border-radius:10px;align-items:flex-start}
.ln+.ln{border-top:2px solid var(--line)}
.ln .who{flex:0 0 auto;width:7em}
.ln .tx{flex:1;min-width:0}
.ln .tip{display:block;font-size:.86rem;color:var(--dim);margin-top:.2rem}
.ln .as{font-size:.82rem;color:var(--dim);display:block;margin-top:.2rem}
.ln.mine{background:var(--hl)}

/* ── 이어서 녹음 ────────────────────────────────── */
.flow-now{display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;margin-bottom:.7rem}
.flow-now .turn{font-weight:700;font-size:var(--lbl);color:var(--dim)}
.line-tip.sm{font-size:.9rem;padding:.28rem .7rem;border-width:2px}

.flow-script{max-height:min(46vh,460px)}
.flow-script .ln{transition:background .15s, opacity .15s}
.flow-script .ln.past{opacity:.38}
/* 지금 읽을 줄 */
.flow-script .ln.now{
  background:var(--yellow);border-radius:10px;
  box-shadow:inset 0 0 0 3px var(--edge);
  opacity:1;
}
.flow-script .ln.now .tx{font-weight:700}

/* 다음 차례 미리보기 — 다음 사람이 미리 읽어 둘 수 있게 */
.peek{
  display:flex;align-items:center;gap:.7rem;flex-wrap:wrap;
  margin-top:.9rem;padding:.7rem .95rem;
  background:var(--hl);border:2.5px solid var(--edge);border-radius:12px;
  box-shadow:4px 4px 0 0 var(--edge);
}
.peek .lbl{
  flex:0 0 auto;font-size:.82rem;font-weight:700;color:#16150F;
  background:#FFFFFF;border:2px solid var(--edge);border-radius:99px;
  padding:.02rem .65rem;line-height:1.75;
}
.peek .tx{flex:1;min-width:0;font-size:var(--lbl);line-height:1.7}
.peek.last .tx{color:var(--dim)}
.peek.last .chip{display:none}

/* ── 녹음실 ─────────────────────────────────────── */
.bar{height:16px;border:2.5px solid var(--edge);border-radius:99px;background:var(--bg);overflow:hidden}
.bar i{display:block;height:100%;width:0%;background:var(--pill);transition:width .25s}
.studio-head{display:flex;align-items:center;gap:.85rem;flex-wrap:wrap;margin-bottom:1rem}
.studio-head .n{font-weight:700;font-size:var(--lbl);white-space:nowrap;font-variant-numeric:tabular-nums}

.stage-card{
  padding:clamp(1.1rem,3.4vw,1.9rem);
  display:flex;flex-direction:column;gap:.9rem;
  flex:0 0 auto;min-height:clamp(280px,44vh,440px);
}
.turn{font-size:var(--lbl);color:var(--dim);font-weight:700;margin:0}
.line-text{
  font-size:clamp(1.3rem,1rem + 1.4vw,1.95rem);line-height:1.7;font-weight:700;
  letter-spacing:-.02em;text-wrap:pretty;margin:0}
.line-tip{
  font-size:var(--lbl);font-weight:700;margin:0;
  background:var(--hl);border:2.5px solid var(--edge);border-radius:12px;padding:.5rem .85rem}
.saidas{font-size:var(--lbl);color:var(--dim);margin:0}
.recbar{display:flex;align-items:center;gap:.8rem;flex-wrap:wrap;margin-top:auto;padding-top:.7rem}
/* 아래 단추 줄은 크기를 서로 맞춥니다 */
.recbar .btn{min-height:58px;min-width:132px;padding:12px 22px;font-size:1.02rem}
.rectime{font-variant-numeric:tabular-nums;font-weight:700;min-width:4.6em}
.dot{width:.72em;height:.72em;border-radius:50%;background:#D93B4E;display:inline-block}
.blink{animation:bl 1s infinite}
@keyframes bl{50%{opacity:.2}}
.done-tag{font-weight:700;color:#16150F;background:var(--mint);
  border:2.5px solid var(--edge);border-radius:99px;padding:.02rem .7rem;font-size:.86rem;line-height:1.8}

/* 전체 보기 */
.sheet{position:fixed;inset:0;background:rgba(22,21,15,.5);z-index:60;
  display:none;align-items:flex-end;justify-content:center}
.sheet.on{display:flex}
.sheet .in{width:min(720px,100%);max-height:82vh;overflow:auto;padding:1.1rem;
  border-radius:var(--r) var(--r) 0 0;box-shadow:none;border-bottom:0}
.jump{display:flex;gap:.6rem;align-items:center;width:100%;text-align:left;
  border-bottom:2px solid var(--line);padding:.6rem .4rem}
.jump .no{font-variant-numeric:tabular-nums;color:var(--dim);font-size:.86rem;width:2.2em;flex:0 0 auto}
.jump .t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--lbl)}
.jump .st{flex:0 0 auto;width:15px;height:15px;border-radius:50%;
  border:2.5px solid var(--edge);background:var(--card)}
.jump .st.ok{background:var(--mint)}
.jump.cur{background:var(--hl);border-radius:10px}

/* ── 감상실 ─────────────────────────────────────── */
.player{padding:clamp(1.1rem,3.4vw,1.9rem);
  flex:0 0 auto;min-height:clamp(260px,40vh,400px);
  display:flex;flex-direction:column;gap:1rem}
.now{font-size:clamp(1.25rem,.95rem + 1.4vw,1.85rem);line-height:1.7;font-weight:700;
  letter-spacing:-.02em;flex:1;display:flex;align-items:center;text-wrap:pretty;margin:0}
.works{display:grid;gap:clamp(14px,2vw,20px)}
.work{display:flex;gap:.9rem;align-items:center;padding:.95rem 1.1rem;text-align:left}
.work .swatch{flex:0 0 auto;width:38px;height:38px;border-radius:10px;
  border:2.5px solid var(--edge);background:var(--cv,#C9E3F7)}
.work .m{flex:1;min-width:0}
.work .m b{display:block;font-size:1.04em}
.work .m span{font-size:var(--lbl);color:var(--dim)}

.note{background:var(--hl);border:2.5px solid var(--edge);border-radius:12px;
  box-shadow:4px 4px 0 0 var(--edge);padding:.9rem 1.1rem;font-size:var(--lbl);line-height:1.75}
.note.err{background:#FFE0E0}

/* ── 푸터 — 두클래스 전자도서관과 같은 모양 ───────── */
.credit{
  display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.4rem;
  margin-top:clamp(18px,2.6vw,26px);padding:10px 8px clamp(18px,2.4vw,26px);
  font-size:.86rem;color:var(--dim);
}
.credit .dot{width:3px;height:3px;border-radius:50%;background:var(--dim);opacity:.55;flex:none}
.credit a{font-weight:700;text-decoration:none}
.credit a:hover{text-decoration:underline}
.credit a.c-dou{color:#159C79}
.credit a.c-gga{color:#2E6DB4}

/* ── 안내 팝업 ──────────────────────────────────── */
.modal{
  position:fixed;inset:0;z-index:90;background:rgba(22,21,15,.5);
  display:flex;align-items:center;justify-content:center;padding:1.2rem;
}
.modal-box{
  background:#FFFFFF;border:3px solid var(--edge);border-radius:var(--r);
  box-shadow:8px 8px 0 0 var(--edge);
  padding:clamp(1.3rem,3.4vw,2rem);
  width:min(480px,100%);
  display:flex;flex-direction:column;gap:1rem;
}
.modal-box h3{font-size:1.3em;font-weight:900;letter-spacing:-.02em;margin:0}
.modal-box p{margin:0;font-size:1.02rem;line-height:1.8;color:var(--ink)}
.modal-box .row{margin-top:.2rem}
.btn.danger{background:var(--coral);color:#16150F}

.toast{position:fixed;left:50%;bottom:1.4rem;transform:translateX(-50%) translateY(140%);
  background:var(--edge);color:#FFFDF8;padding:.8rem 1.4rem;border-radius:99px;
  border:2.5px solid var(--edge);
  font-weight:700;font-size:var(--lbl);z-index:80;max-width:90vw;text-align:center;
  opacity:0;pointer-events:none;transition:transform .25s,opacity .2s}
.toast.on{transform:translateX(-50%) translateY(0);opacity:1}

@media(max-width:520px){
  .ln .who{width:5.4em}
  .btn{padding:10px 16px}
  .btn.xl{padding:14px 22px;min-height:60px}
  header.top{gap:8px}
}
@media print{
  body{background:#fff;background-image:none}
  /* 화면에서만 쓰는 것들은 인쇄하지 않습니다 — 안내 쪽지·팝업·단추 */
  header.top,.credit,.row,.btn,.toast,.modal,.sheet,.eyebrow{display:none!important}
  .titleblk{box-shadow:none;border-width:2px;page-break-after:avoid}
  .script{max-height:none;border:none;box-shadow:none;overflow:visible}
  .ln{page-break-inside:avoid}
}
