/* 옹고집 이야기 정비소 — 이 앱에서 새로 쓰는 구성요소 (바탕 디자인은 style.css) */
.pgn{font-size:22px;background:var(--ink);color:#fff;padding:2px 14px;border-radius:99px;margin-left:10px;font-weight:800}

/* 1 사건 파일 */
.read.r1{display:flex;flex-direction:column;gap:14px;flex:1 1 0;min-height:0;margin-bottom:-6px}
.read.r1 img.sc{width:100%;flex:1 1 0;min-height:0;height:auto;aspect-ratio:auto;object-fit:cover;object-position:center 40%}
.read.r1 .rtext{flex:none;align-self:auto;padding:14px 26px 16px;gap:8px}
.read.r1 .rtext p{font-size:29px;line-height:1.75}
.vw{display:inline;padding:0 8px;border-radius:8px;background:var(--hi);border-bottom:4px solid var(--org);font-weight:800;font-size:inherit;line-height:inherit;color:var(--ink);transition:.12s}
.vw:hover{background:#ffd55a;transform:translateY(-2px)}
.vw.on{background:var(--okl);border-bottom-color:var(--ok)}
.vw.cur{box-shadow:0 0 0 4px rgba(232,104,58,.45)}
.wdhelp{min-height:96px;display:flex;align-items:center}
.wcard{display:grid;grid-template-columns:230px 1fr;gap:4px 22px;align-items:center;width:100%;background:#fff3d4;border:3px solid var(--ink);border-radius:16px;padding:12px 22px;animation:up .35s both}
.wcard b{grid-row:span 2;font-size:38px;color:var(--org2);text-align:center}
.wcard span{font-size:26px;font-weight:800;line-height:1.4}.wcard em{font-style:normal;font-size:22px;font-weight:600;color:var(--ink2);line-height:1.4}
.wtip{font-size:23px;font-weight:700;color:var(--ink2)}
.trial{display:flex;flex-direction:column;gap:14px}
.tq{display:grid;grid-template-columns:150px 1fr;gap:18px;align-items:center;background:#fff;border:3px solid var(--ink);border-radius:18px;padding:10px 24px 10px 14px;box-shadow:0 6px 0 var(--org)}
.tq img.sato{height:130px;width:auto;justify-self:center}.tq p{font-size:32px;font-weight:800;line-height:1.5}
.tpair{display:grid;grid-template-columns:1fr 1fr;gap:34px}
.tside{display:flex;flex-direction:column;align-items:center;gap:8px;padding:14px;border-radius:20px;border:3px solid transparent}
.tside.real{border-color:var(--ok);background:rgba(220,241,230,.7)}
.tbub{position:relative;width:100%;min-height:118px;background:#fff;border:3px solid var(--ink);border-radius:20px;padding:14px 20px;font-size:25px;font-weight:700;line-height:1.5;display:flex;align-items:center;justify-content:center;text-align:center}
.tbub::after{content:'';position:absolute;left:50%;bottom:-17px;margin-left:-14px;width:24px;height:24px;background:#fff;border-right:3px solid var(--ink);border-bottom:3px solid var(--ink);transform:rotate(45deg)}
.tpor{height:230px;width:auto;object-fit:contain;margin-top:10px}.tpor.flip{transform:scaleX(-1)}

/* 2 현장 복원 */
.relmap{display:flex;flex-direction:column;align-items:center;gap:0}
.relc{display:flex;flex-direction:column;align-items:center;gap:2px;position:relative;padding-bottom:20px}
.relc img{height:150px;width:auto}.relc b{font-size:28px;background:var(--org);color:#fff;border:3px solid var(--ink);border-radius:99px;padding:2px 24px}
.relc::after{content:'';position:absolute;left:50%;bottom:0;width:4px;height:20px;background:var(--ink);margin-left:-2px}
.rels{position:relative;display:grid;grid-template-columns:repeat(5,1fr);gap:12px;padding-top:22px;width:100%}
.rels::before{content:'';position:absolute;top:0;left:10%;right:10%;height:4px;background:var(--ink)}
.rslot{position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;min-height:228px;padding:12px 10px;border-radius:18px;background:#fff;border:3px solid var(--ink);text-align:center;transition:.12s}
.rslot::before{content:'';position:absolute;top:-22px;left:50%;width:4px;height:22px;background:var(--ink);margin-left:-2px}
.rslot i{font-style:normal;font-size:60px;font-weight:800;color:#c9b688;line-height:1.1}
.rslot span{font-size:19px;font-weight:700;line-height:1.4;color:var(--ink2)}
.rslot img{height:110px;width:auto}.rslot b{font-size:26px;color:var(--cave)}
.rslot:not([disabled]):hover{background:#fff3d4;transform:translateY(-3px)}
.rslot.act{border-color:var(--org);box-shadow:0 0 0 4px rgba(232,104,58,.4)}
.rslot.ok{background:var(--okl);border-color:var(--ok);animation:pop .4s both}
.relcards{display:flex;gap:14px;justify-content:center;margin-top:16px}
.rcard{display:flex;flex-direction:column;align-items:center;gap:4px;width:170px;padding:10px 8px 12px;border-radius:18px;background:#fff;border:3px solid var(--ink);box-shadow:0 6px 0 var(--mus);transition:.12s}
.rcard img{height:120px;width:auto}.rcard b{font-size:25px}
.rcard:hover{transform:translateY(-4px)}.rcard.sel{background:var(--hi);box-shadow:0 6px 0 var(--org);transform:translateY(-6px)}.rcard.off{opacity:.3;pointer-events:none}
.tl{position:relative;display:grid;grid-template-columns:repeat(6,1fr);gap:10px;padding-top:30px;margin-bottom:16px}
.tl::before{content:'';position:absolute;left:0;right:0;top:12px;height:5px;background:var(--ink);border-radius:3px}
.tls{display:flex;flex-direction:column;align-items:center;gap:6px;position:relative}
.tls::before{content:'';position:absolute;top:-24px;left:50%;width:12px;height:30px;margin-left:-6px;background:var(--mus);border:2.5px solid var(--ink);border-radius:4px;z-index:1}
.tb{background:var(--cave);color:#fff;border-radius:10px;padding:2px 14px;font-size:20px;font-weight:800;margin-top:10px}
.tcard{width:100%;min-height:196px;background:#f0e3c4;border:3px solid var(--ink);border-radius:14px;padding:10px;font-size:20px;font-weight:700;line-height:1.45;display:flex;align-items:center;justify-content:center;text-align:center}
.tcard i{font-style:normal;font-size:50px;font-weight:800;color:#c9b688}
.tls.on .tcard{background:#fff;animation:pop .45s both}
.tls.next .tcard{border-color:var(--org);box-shadow:0 0 0 4px rgba(232,104,58,.4)}
.evcards{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.ecard{background:#fff;border:3px solid var(--ink);border-radius:16px;padding:14px 18px;font-size:23px;font-weight:700;line-height:1.5;text-align:left;box-shadow:0 5px 0 var(--teal);transition:.12s}
.ecard:hover{background:#fff3d4;transform:translateY(-3px)}.ecard.bad{animation:shake .4s;background:var(--nol)}

/* 3 성격 실험실 */
.dialrow.two{grid-template-columns:1fr 1fr}
.dial.here{box-shadow:0 0 0 4px var(--teal)}.dial.on.here{box-shadow:3px 3px 0 var(--ink),0 0 0 4px var(--teal)}
.cc small.was{display:block;margin-top:6px;font-size:18px;font-weight:600;color:var(--muted);line-height:1.4}
.cc p{font-size:23px}

/* 4 배경 워프 머신 */
.labw.w4{grid-template-columns:470px 1fr}
.wpv{position:relative;border:3px solid var(--ink);border-radius:18px;overflow:hidden;background:#222}
.wpv img.sc{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;border:0;border-radius:0;display:block}
.wplow{position:absolute;left:0;right:0;bottom:0;display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;padding:26px 14px 8px;background:linear-gradient(transparent,rgba(29,78,85,.92) 55%);color:#fff;font-size:20px}
.wplow .lt{background:var(--org);padding:0 10px;border-radius:6px;font-weight:800;font-size:17px}.wplow b{font-size:21px;margin-right:8px}
.maptb{background:#fff;border:3px solid var(--ink);border-radius:16px;overflow:hidden;box-shadow:0 6px 0 var(--teal)}
.maptb .mh{background:var(--teal);color:#fff;font-size:22px;font-weight:800;padding:6px 16px;border-bottom:3px solid var(--ink)}
.mrow{display:grid;grid-template-columns:92px 1fr;gap:0 12px;padding:8px 16px;border-bottom:2px solid var(--line)}.mrow:last-child{border-bottom:0}
.mrow b{grid-row:span 2;align-self:center;font-size:21px;color:var(--cave)}
.mrow .was{font-size:17px;font-weight:600;color:var(--muted)}.mrow .now{font-size:21px;font-weight:800;line-height:1.35}
.mrow i{display:none}.mrow:not(.chg) .was{display:none}.mrow:not(.chg) b{grid-row:auto}
.mrow.chg{animation:flipin .5s both}
.dgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.dst{position:relative;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 6px 8px;border-radius:14px;background:#fff;border:3px solid var(--ink);transition:.12s}
.dst img{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;border-radius:8px;border:2px solid var(--ink)}
.dst b{font-size:22px}.dst span{font-size:18px;font-weight:700;color:var(--ink2)}
.dst:hover{background:#fff3d4;transform:translateY(-2px)}.dst.on{background:var(--mus);box-shadow:3px 3px 0 var(--ink)}
.dst.here::after{content:'지금 여기';position:absolute;top:10px;left:10px;background:var(--teal);color:#fff;font-size:17px;font-weight:800;padding:1px 10px;border-radius:8px;border:2px solid var(--ink)}
.keeps.big{grid-template-columns:repeat(auto-fill,minmax(330px,1fr))}.keeps.big .kp img.sc{width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;border-radius:10px;border:2px solid var(--ink)}
.keeps.big .kp b{font-size:26px}

/* 워프 연출 */
#warp{position:absolute;inset:0;z-index:70;background:#000;overflow:hidden}
#warp [hidden]{display:none!important}
#warp .wp-layer{position:absolute;inset:0;overflow:hidden}
#warp .wp-layer img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform-origin:50% 50%;will-change:transform}
#warp .wp-streak{position:absolute;inset:-20%;background:repeating-conic-gradient(from 0deg at 50% 50%,rgba(255,255,255,.6) 0 1deg,transparent 1deg 7deg);-webkit-mask:radial-gradient(circle,transparent 14%,#000 62%);mask:radial-gradient(circle,transparent 14%,#000 62%);pointer-events:none;opacity:0}
#warp .wp-flash{position:absolute;inset:0;background:#fff;opacity:0;pointer-events:none}
#warp .wp-vig{position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 52%,rgba(0,0,0,.6) 100%);pointer-events:none}
#warp .wp-bar{position:absolute;left:0;right:0;height:9%;background:#000;z-index:5}#warp .wp-bar.t{top:0}#warp .wp-bar.b{bottom:0}
#warp .kw{display:inline-flex}#warp .kc{display:inline-block;will-change:transform}#warp .ks{display:inline-block;width:.35em}
#warp .wp-k1{position:absolute;inset:0;display:grid;place-items:center;font-size:250px;font-weight:900;color:#fff;-webkit-text-stroke:12px var(--ink);paint-order:stroke fill;text-shadow:14px 14px 0 var(--org);z-index:4;pointer-events:none}
#warp .wp-k2{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:56px;font-size:170px;font-weight:900;color:#fff;-webkit-text-stroke:11px var(--ink);paint-order:stroke fill;text-shadow:12px 12px 0 var(--teal);z-index:4;pointer-events:none;white-space:nowrap}
#warp .kto{color:var(--hi)}
#warp .wp-low{position:absolute;left:0;bottom:11%;z-index:6;max-width:1280px;padding:22px 80px 24px 96px;background:linear-gradient(90deg,rgba(29,78,85,.97),rgba(29,78,85,.88) 82%,rgba(29,78,85,0));color:#fff}
#warp .lt-tag{display:inline-block;background:var(--org);padding:2px 22px;font-size:28px;font-weight:800;border:3px solid #fff;border-radius:10px}
#warp .lt-name{font-size:104px;font-weight:900;line-height:1.15;color:var(--hi);text-shadow:5px 5px 0 rgba(0,0,0,.35)}
#warp .lt-sub{display:flex;gap:34px;font-size:36px;font-weight:700;margin-top:2px}
#warp .lt-chips{display:flex;gap:14px;flex-wrap:wrap;margin-top:18px}
#warp .lc{font-style:normal;background:#fff;color:var(--ink);border:3px solid var(--ink);border-radius:99px;padding:6px 22px;font-size:27px;font-weight:800;box-shadow:0 5px 0 var(--org)}#warp .lc em{font-style:normal;margin:0 10px;color:var(--org2)}
#warp .wp-skip{position:absolute;right:40px;top:11%;z-index:9;height:52px;font-size:22px}
#warp .wp-go{position:absolute;right:80px;bottom:14%;z-index:9;height:88px;font-size:36px;padding:0 54px;animation:pulse 1.2s ease-in-out infinite}
@media(prefers-reduced-motion:reduce){#warp .wp-streak,#warp .wp-flash{display:none}}

/* 5 이야기 지하철 */
.subw{position:relative;display:flex;flex-direction:column;gap:16px;padding:6px 0 6px 74px}
.subw .rail{position:absolute;left:30px;top:44px;bottom:44px;width:14px;background:var(--teal);border:3px solid var(--ink);border-radius:8px}
.subw.lit .rail{background:var(--org)}
.dot{display:grid;place-items:center;width:46px;height:46px;border-radius:50%;background:#fff;border:5px solid var(--ink);font-style:normal;font-size:23px;font-weight:800}
.stn{position:relative;display:grid;grid-template-columns:100px 1fr;gap:16px;align-items:center;padding:14px 22px;border-radius:16px;background:#fff;border:3px solid var(--ink);text-align:left;transition:.12s}
.stn .dot{position:absolute;left:-72px;top:50%;margin-top:-23px;width:58px;height:58px;margin-top:-29px;font-size:26px}
.stn .stnm{font-size:25px;font-weight:800;color:var(--cave)}.stn .tx{font-size:27px;font-weight:700;line-height:1.5}
.stn:not([disabled]):hover{background:#fff3d4;transform:translateX(4px)}
.stn.sel{background:var(--nol);border-color:var(--no);animation:pulse .9s ease-in-out 2}.stn.sel .dot{background:var(--no);color:#fff;border-color:var(--ink)}
.stn.healed{background:var(--okl);border-color:var(--ok);animation:pop .45s both}.stn.healed .dot{background:var(--ok);color:#fff}
.stn[disabled]{pointer-events:none}
.build{display:flex;flex-direction:column;gap:6px}
.brow{display:grid;grid-template-columns:150px 1fr;gap:14px;align-items:start}
.bst{display:flex;align-items:center;gap:10px;padding-top:12px}.bst b{font-size:26px;color:var(--cave)}.bst .dot{width:46px;height:46px}
.bwr .field{font-size:24px;padding:10px 14px}
.egs.sm{margin-top:6px}.egs.sm button{font-size:18px;padding:4px 12px}
.conn{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:2px 0 2px 164px}
.conn span{font-size:19px;font-weight:700;color:var(--ink2);margin-right:4px}
.cc2{padding:3px 16px;border-radius:99px;border:2.5px solid var(--ink);background:#fff;font-size:21px;font-weight:800;transition:.12s}
.cc2:hover{background:var(--hi)}.cc2.on{background:var(--org);color:#fff;box-shadow:2px 2px 0 var(--ink)}
.kvbox.kvs{margin-top:0;gap:8px}.kvs .kv{grid-template-columns:112px 1fr;padding:8px 14px;box-shadow:4px 4px 0 var(--teal)}.kvs .kv.o{box-shadow:4px 4px 0 var(--org)}
.kvs .k{height:36px;font-size:19px}.kvs .v{font-size:22px;line-height:1.4}
.route{display:flex;flex-direction:column;gap:6px;margin-top:20px}
.rt{display:grid;grid-template-columns:96px 1fr;gap:16px;align-items:center;background:#fff;border:3px solid var(--ink);border-radius:16px;padding:10px 20px}
.rtn{background:var(--cave);color:#fff;border-radius:10px;padding:4px 0;text-align:center;font-size:22px;font-weight:800}.rt p{font-size:24px;font-weight:700;line-height:1.45}
.rc{align-self:center;background:var(--org);color:#fff;border-radius:99px;padding:0 20px;font-size:21px;font-weight:800;border:2.5px solid var(--ink)}.rc::before{content:'↓ '}

/* 6 이야기 쓰기 스튜디오 */
.routebar{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:12px}
.rb{background:#fff;border:3px solid var(--ink);border-radius:14px;padding:8px 12px;box-shadow:0 4px 0 var(--teal)}
.rb b{display:block;color:var(--cave);font-size:20px}.rb span{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;font-size:19px;font-weight:600;line-height:1.4}
.field.story{font-size:27px;line-height:1.7;margin-top:10px;min-height:300px}
.count{text-align:right;font-size:20px;font-weight:700;color:var(--ink2);margin-top:6px}
.egs button.on{background:var(--hi)}
.ck6 .lv3{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.ck6 .lv3 button{height:50px;border-radius:12px;border:3px solid var(--ink);background:#fff;font-size:22px;font-weight:800;transition:.12s}
.ck6 .lv3 button:hover{background:#fff3d4}
.ck6 .lv3 button.on.l0{background:var(--mus)}.ck6 .lv3 button.on.l1{background:#bfe3df}.ck6 .lv3 button.on.l2{background:var(--ok);color:#fff}
.storyc{flex:1 1 0;min-height:0;display:flex;flex-direction:column;gap:6px}
.storyc h3{font-size:34px;margin:0}
.sbodyx{flex:1 1 0;min-height:0;overflow:hidden;font-size:30px;line-height:1.7;font-weight:600;background:#fff;border:3px solid var(--ink);border-radius:14px;padding:14px 18px}
.fin .card.learn{padding:14px 20px}

/* 표지: 그림 위 간판에 제목을 올림 (그림 비율을 유지한 상자 안에서 위치를 잡음) */
.cover{--cw:max(var(--sw,1920px),calc(var(--sh,1080px)*16/9))}
.cover .cvbox{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--cw);height:max(var(--sh,1080px),calc(var(--sw,1920px)*9/16))}
.cover .cvbox>img.full{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.cover .sign{position:absolute;left:38.9%;top:15.2%;width:32.6%;height:16.4%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.4em;color:#4a2a12;text-align:center;transform:rotate(-.6deg)}
.cover .sign small{font-size:calc(var(--cw)*.0145);font-weight:800;letter-spacing:.04em;color:#7a4a22}
.cover .sign b{font-size:calc(var(--cw)*.0292);font-weight:900;line-height:1.1;text-shadow:0 2px 0 rgba(255,240,205,.8),0 0 14px rgba(255,236,190,.7)}
.dialrow.two .dial img{height:86px}

/* 인물 관계도 연결선 다듬기: 굵은 관(파이프) 모양 + 연결 마디 + 완성한 칸은 초록으로 */
.relc{padding-bottom:34px}
.relc::after{width:12px;height:34px;margin-left:-6px;background:var(--mus);border:3px solid var(--ink);border-top:0;border-bottom:0;border-radius:0}
.rels{padding-top:40px}
.rels::before{top:0;left:calc((100% - 48px)/10);right:calc((100% - 48px)/10);height:12px;margin-top:-6px;background:var(--mus);border:3px solid var(--ink);border-radius:99px;box-shadow:0 3px 0 rgba(51,39,26,.25)}
.rels::after{content:'';position:absolute;top:-14px;left:50%;width:26px;height:26px;margin-left:-13px;border-radius:50%;background:var(--org);border:4px solid var(--ink);z-index:2}
.rslot::before{top:-34px;height:34px;width:12px;margin-left:-6px;background:var(--mus);border:3px solid var(--ink);border-top:0;border-bottom:0;border-radius:0;transition:background .3s}
.rslot::after{content:'';position:absolute;top:-11px;left:50%;width:22px;height:22px;margin-left:-11px;border-radius:50%;background:#fff;border:4px solid var(--ink);z-index:2;transition:background .3s}
.rslot.act::after{background:var(--org);animation:pulse .9s ease-in-out infinite}
.rslot.ok::before{background:#8fd3ae}.rslot.ok::after{background:var(--ok)}

/* 표지 제목 그림 (GPT CLI로 만든 타이틀을 간판 자리에 얹음) */
.cover .sign{display:none}
.cover .ttl{position:absolute;left:55.2%;top:25%;width:41%;height:auto;transform:translate(-50%,-50%);filter:drop-shadow(0 8px 0 rgba(51,39,26,.28));animation:ttlin .9s cubic-bezier(.2,1.5,.3,1) both .2s;pointer-events:none}
@keyframes ttlin{from{opacity:0;transform:translate(-50%,-50%) scale(.6) rotate(-4deg)}to{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(0)}}

/* 사또의 재판: 무대 위의 두 옹고집 */
.tpair{grid-template-columns:1fr 92px 1fr;gap:0;align-items:stretch}
.tside{position:relative;gap:0;padding:14px 18px 18px;border:3px solid var(--ink);border-radius:24px;background:radial-gradient(ellipse 80% 55% at 50% 78%,#ffe7a3 0,rgba(255,231,163,0) 72%),linear-gradient(#fffaf0,#fff1d6);box-shadow:0 8px 0 var(--teal);transition:.25s}
.tside .ttag{align-self:flex-start;background:var(--cave);color:#fff;border:2.5px solid var(--ink);border-radius:10px;padding:2px 16px;font-size:21px;font-weight:800}
.tside .tbub{margin-top:12px;min-height:128px;border-radius:22px;font-size:26px;box-shadow:0 5px 0 rgba(51,39,26,.2)}
.tfig{position:relative;display:flex;justify-content:center;align-items:flex-end;margin-top:20px;height:330px}
.tfig .tpor{height:316px;margin:0;position:relative;z-index:2;animation:bob 3.4s ease-in-out infinite}
.tfig .pod{position:absolute;bottom:-2px;left:12%;right:12%;height:30px;border:3px solid var(--ink);border-radius:50%/60%;background:linear-gradient(#c98a4a,#8a5a2a);z-index:1;box-shadow:0 5px 0 rgba(51,39,26,.3)}
.tside .btn{margin-top:20px;align-self:center;height:62px;font-size:25px}
.tvs{display:flex;align-items:center;justify-content:center}
.tvs b{display:grid;place-items:center;width:82px;height:82px;border-radius:50%;background:var(--org);color:#fff;border:4px solid var(--ink);box-shadow:0 5px 0 var(--ink);font-size:21px;font-weight:800;animation:pulse 1.6s ease-in-out infinite}
.tverdict{align-self:center;margin-top:20px;height:62px;padding:0 30px;display:flex;align-items:center;border-radius:16px;border:3px solid var(--ink);font-size:25px;font-weight:800;animation:pop .45s both}
.tverdict.r{background:var(--ok);color:#fff}.tverdict.f{background:#f3e0a8;color:var(--ink)}
.tside.real{border-color:var(--ok);background:radial-gradient(ellipse 80% 55% at 50% 78%,#bfe8d0 0,rgba(191,232,208,0) 72%),linear-gradient(#f4fff8,#e3f5ea);box-shadow:0 8px 0 var(--ok)}
.tside.fake{box-shadow:0 8px 0 var(--mus2)}
.tside.fake .tpor{filter:sepia(.55) saturate(.85);opacity:.8}
.tside .tdoll{position:absolute;right:6%;bottom:6px;height:170px;width:auto;z-index:3;animation:pop .6s both}

/* 아래 그림: 비율에 맞춘 그림을 쓰되, 아주 커지면 상한을 두고 아래에 붙임 */
.mfill{margin-top:auto;max-height:600px}
.mfill .mf{object-position:center 50%}

/* 관계도 선: 끊김 없는 굵은 한 줄 (테두리·애니메이션 없음) */
.relc::after{width:6px;margin-left:-3px;height:34px;background:var(--ink);border:0;border-radius:0}
.rels::before{height:6px;margin-top:-3px;background:var(--ink);border:0;border-radius:3px;box-shadow:none}
.rels::after{top:-14px;width:24px;height:24px;margin-left:-12px;background:var(--org);border:4px solid var(--ink)}
.rslot::before{top:-40px;height:40px;width:6px;margin-left:-3px;background:var(--ink);border:0;border-radius:0;transition:none}
.rslot::after{top:-12px;width:22px;height:22px;margin-left:-11px;background:#fff;border:4px solid var(--ink);transition:none;animation:none}
.rslot.act::after{background:var(--org);animation:none}
.rslot.ok{animation:none}.rslot.ok::before{background:var(--ok)}.rslot.ok::after{background:var(--ok);border-color:var(--ink)}
.rslot{transition:none}.rslot:not([disabled]):hover{transform:none;background:#fff3d4}
/* 관계도 설명 글자 키움 */
.rslot span{font-size:23px;line-height:1.42;color:var(--ink)}
.rslot b{font-size:28px}
.rslot{min-height:270px;padding:14px 8px}
/* 짧은 여러 줄 글은 줄 길이를 비슷하게 맞춰서 의미 단위로 끊어 보이게 */
.tcard,.ecard,.tbub,.cc p,.rb span,.mrow .now,.kv .v,.sc1 span,.opt span,.bubble,.wcard span,.stn .tx,.fx span,.dst b{text-wrap:balance}
.tcard{font-size:22px}

/* ───── GPT CLI로 만든 소품 그림 적용 (밧줄·빨래집게·이름표·구슬·화살표) ───── */
/* 사건 타임라인: 밧줄에 색색 집게로 이름표와 카드를 걺 */
.tl{padding-top:44px;margin-bottom:18px}
.tl::before{top:10px;height:22px;border-radius:0;background:url(../images/rope.webp) center/100% 100% no-repeat}
.tls::before{top:-40px;width:34px;height:60px;margin-left:-17px;border:0;border-radius:0;background:var(--pg) center/contain no-repeat;z-index:2;filter:drop-shadow(0 3px 0 rgba(51,39,26,.25))}
.tls.b1{--pg:url(../images/peg-1.webp);--tg:url(../images/tag-1.webp)}.tls.b2{--pg:url(../images/peg-2.webp);--tg:url(../images/tag-2.webp)}
.tls.b3{--pg:url(../images/peg-3.webp);--tg:url(../images/tag-3.webp)}.tls.b4{--pg:url(../images/peg-4.webp);--tg:url(../images/tag-4.webp)}
.tb{width:92px;height:112px;margin-top:22px;padding:42px 0 0;border-radius:0;background:var(--tg) center/contain no-repeat;color:var(--ink);font-size:26px;font-weight:800;text-align:center;display:block}
.tcard{margin-top:-8px}
/* 관계도 연결선: 밧줄 + 나무 구슬(맞히면 황동 톱니로 바뀜) */
.relc::after{width:14px;margin-left:-7px;background:url(../images/rope-v.webp) center/100% 100% no-repeat}
.rels::before{height:16px;margin-top:-8px;background:url(../images/rope.webp) center/100% 100% no-repeat;border:0;border-radius:0}
.rels::after{top:-18px;width:36px;height:36px;margin-left:-18px;border:0;border-radius:0;background:url(../images/knob.webp) center/contain no-repeat}
.rslot::before{width:14px;margin-left:-7px;background:url(../images/rope-v.webp) center/100% 100% no-repeat}
.rslot::after{top:-17px;width:34px;height:34px;margin-left:-17px;border:0;border-radius:0;background:url(../images/knob.webp) center/contain no-repeat}
.rslot.act::after{background:url(../images/knob.webp) center/contain no-repeat;filter:drop-shadow(0 0 8px var(--org)) brightness(1.1)}
.rslot.ok::before{background:url(../images/rope-v.webp) center/100% 100% no-repeat}
.rslot.ok::after{background:url(../images/knob2.webp) center/contain no-repeat;border:0}
/* 사건 줄(2단계 마무리): 구간 카드 4장 + 화살표 */
.flow{display:grid;grid-template-columns:1fr 58px 1fr 58px 1fr 58px 1fr;align-items:stretch;margin-top:22px}
.fcard{display:flex;flex-direction:column;background:#fff;border:3px solid var(--ink);border-radius:18px;overflow:hidden;box-shadow:0 6px 0 var(--c)}
.fcard.f1{--c:var(--org)}.fcard.f2{--c:var(--teal)}.fcard.f3{--c:var(--mus)}.fcard.f4{--c:var(--navy)}
.fh{height:54px;display:grid;place-items:center;background:var(--c);color:#fff;font-size:28px;font-weight:800;border-bottom:3px solid var(--ink)}
.fcard.f3 .fh{color:var(--ink)}
.fcard ul{list-style:none;display:flex;flex-direction:column;justify-content:center;gap:8px;flex:1;padding:12px 14px}
.fcard li{font-size:23px;font-weight:700;line-height:1.5;text-align:center;text-wrap:balance}
.fcard li+li{border-top:2px solid var(--line);padding-top:8px}
.farrow{width:48px;height:auto;align-self:center;justify-self:center}

/* 오른쪽 패널: 내용이 넘쳐도 잘리지 않게(스크롤) + 순간이동기 장소 고르기는 한 줄로 */
.sbody{overflow-y:auto;overflow-x:hidden}
.dgrid{grid-template-columns:repeat(4,1fr);gap:8px}
.dst{padding:5px 4px 7px}.dst b{font-size:20px;line-height:1.2;text-align:center;text-wrap:balance}.dst span{font-size:17px}
.dst.here::after{top:8px;left:8px;font-size:17px;padding:0 7px}

/* 아래 그림 영역: 자르지 않고 영역에 맞추고, 남는 양옆은 같은 그림을 흐리게 깔아 빈틈없이 채움 */
.mfill .mfbg{display:none;position:absolute;inset:-24px;width:calc(100% + 48px);height:calc(100% + 48px);object-fit:cover;filter:blur(16px) saturate(1.15) brightness(.92)}
.mfill.fit .mfbg{display:block}
.mfill.fit .mf{object-fit:contain;object-position:center center}
.mfill::after{display:none}

/* 노선 만들기: 예시 칩은 잘리지 않고 전체 글이 보이게(줄을 바꿔 가며) */
.egs.sm{gap:8px}
.egs.sm button{font-size:20px;line-height:1.4;padding:6px 16px;border-radius:14px;text-align:left;max-width:100%;white-space:normal}

/* 순간이동 연출의 글씨는 모두 GPT 그림 글씨 */
#warp .ki{position:relative;display:inline-block;line-height:0}
#warp .ki>img{display:block;width:auto;visibility:hidden}
#warp .ki i{position:absolute;top:0;bottom:0;background-repeat:no-repeat;will-change:transform}
#warp .wp-k1{inset:0;display:grid;place-items:center;font-size:0;text-shadow:none;-webkit-text-stroke:0;filter:drop-shadow(0 14px 0 rgba(0,0,0,.28))}
#warp .wp-k1 .ki>img{height:340px}
#warp .wp-k2{gap:30px;font-size:0;text-shadow:none;-webkit-text-stroke:0;filter:drop-shadow(0 12px 0 rgba(0,0,0,.3))}
#warp .kfrom .ki>img,#warp .kto .ki>img{height:250px}
#warp .karrow{width:150px;height:auto}
#warp .wp-low{left:0;bottom:11%;max-width:none;padding:30px 120px 30px 90px;background:linear-gradient(90deg,rgba(20,12,6,.8),rgba(20,12,6,.55) 55%,rgba(20,12,6,0));color:#fff;display:flex;flex-direction:column;align-items:flex-start;gap:0}
#warp .lt-tag{height:84px;width:auto;margin-left:6px;filter:drop-shadow(0 5px 0 rgba(0,0,0,.35))}
#warp .lt-name{margin-top:-6px;font-size:0;text-shadow:none;filter:drop-shadow(0 8px 0 rgba(0,0,0,.35))}
#warp .lt-name .ki>img{height:190px}
#warp .lt-time{display:flex;align-items:center;gap:18px;margin-top:2px;margin-left:8px}
#warp .lt-lbl{height:62px;width:auto}#warp .lt-tm{height:86px;width:auto;filter:drop-shadow(0 5px 0 rgba(0,0,0,.35))}

/* 줄바꿈: 짧은 글은 두 줄 안에서 끊김, 괄호 말은 붙여 읽음 */
.nw{white-space:nowrap}
.sc1 span{font-size:26px;text-wrap:balance}
.rslot span{font-size:22px;line-height:1.4}
/* 도움 낱말(스캐폴딩) */
.bank{display:flex;flex-direction:column;gap:6px}
.bank .lbl{font-size:23px}.bank .lbl small{font-size:17px;font-weight:600;color:var(--ink2)}
.bank .bg{display:grid;grid-template-columns:108px 1fr;gap:8px;align-items:center}
.bank .bg b{font-size:18px;line-height:1.3;color:var(--cave)}
.bank .egs{gap:6px}.bank .egs button{font-size:19px;padding:3px 12px;background:#e6f3f1}.bank .egs button:hover{background:var(--hi)}

/* 낮은 영역은 여백으로 둠: 흐린 배경 그림은 쓰지 않음 */
.mfill .mfbg{display:none!important}

/* 관계도 연결선: 밧줄이 꺾이는 모서리마다 구슬을 달아 끝이 잘려 보이지 않게, 구슬에서 구슬로 이어지게 */
.rslot::before{top:-57px;height:57px;width:34px;margin-left:-17px;z-index:2;
  background:url(../images/knob.webp) 50% 0/34px 34px no-repeat,url(../images/rope-v.webp) 50% 17px/14px calc(100% - 17px) no-repeat}
.rslot.ok::before{background:url(../images/knob2.webp) 50% 0/34px 34px no-repeat,url(../images/rope-v.webp) 50% 17px/14px calc(100% - 17px) no-repeat}
.rels::before{left:calc((100% - 48px)/10);right:calc((100% - 48px)/10)}
.rels::after{z-index:3}
.relc::after{height:34px;background:url(../images/rope-v.webp) 50% 0/14px 100% no-repeat}

/* 타임라인: 맞히면 카드가 집게 이름표에 걸려 이어짐(고리 + 줄), 아직 안 맞힌 칸의 집게·이름표는 흐리게 */
.tls.b1{--pc:#e8683a}.tls.b2{--pc:#1f8a8a}.tls.b3{--pc:#e3a11a}.tls.b4{--pc:#2f4a7a}
.tcard{position:relative;margin-top:-4px}
.tls:not(.on):not(.next)::before,.tls:not(.on):not(.next) .tb{opacity:.42;filter:grayscale(.55)}
.tls.on .tcard{border-color:var(--pc);box-shadow:0 5px 0 var(--pc);animation:none}
.tls.on .tcard::before{content:'';position:absolute;left:50%;top:-30px;width:34px;height:40px;margin-left:-17px;z-index:3;
  background:url(../images/knob.webp) 50% 100%/26px 26px no-repeat,url(../images/rope-v.webp) 50% 0/10px 22px no-repeat}
.tls.on .tcard{animation:none}

/* 단계 시작·완성 연출 */
#intro{position:absolute;inset:0;z-index:70;background:#000;overflow:hidden}
#intro .in-layer{position:absolute;inset:0;overflow:hidden}
#intro .in-layer img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform-origin:50% 50%;will-change:transform}
#intro .in-flash,.pf-flash{position:absolute;inset:0;background:#fff;opacity:0;pointer-events:none}
.pf-flash{z-index:80;position:absolute}
#intro .in-vig{position:absolute;inset:0;background:radial-gradient(ellipse at center,rgba(0,0,0,0) 45%,rgba(0,0,0,.62) 100%);pointer-events:none}
#intro .in-bar{position:absolute;left:0;right:0;height:9%;background:#000;z-index:5}#intro .in-bar.t{top:0}#intro .in-bar.b{bottom:0}
#intro .ki{position:relative;display:inline-block;line-height:0}
#intro .ki>img{display:block;width:auto;visibility:hidden}
#intro .ki i{position:absolute;top:0;bottom:0;background-repeat:no-repeat;will-change:transform}
#intro .in-n{position:absolute;left:0;right:0;top:20%;display:flex;justify-content:center;z-index:4;filter:drop-shadow(0 12px 0 rgba(0,0,0,.3))}
#intro .in-n .ki>img{height:200px}
#intro .in-t{position:absolute;left:0;right:0;top:41%;display:flex;justify-content:center;z-index:4;filter:drop-shadow(0 14px 0 rgba(0,0,0,.3))}
#intro .in-t .ki>img{height:250px;max-width:1500px}
#intro .in-t.big{top:24%}#intro .in-t.big .ki>img{height:310px}
#intro .fin-plate{position:absolute;left:50%;top:60%;margin-left:-420px;width:840px;padding:20px 40px 26px;background:#fffaf0;border:4px solid var(--ink);border-radius:26px;box-shadow:0 10px 0 var(--org);text-align:center;z-index:6}
#intro .fin-plate small{display:block;font-size:26px;font-weight:700;color:var(--ink2)}
#intro .fin-plate b{display:block;margin-top:4px;font-size:60px;font-weight:800;line-height:1.25;text-wrap:balance;word-break:keep-all}
#intro .in-gears{position:absolute;left:0;right:0;bottom:13%;display:flex;justify-content:center;gap:28px;z-index:6}
#intro .in-gears img{height:92px;width:auto;filter:grayscale(1) brightness(1.1);opacity:.4}
#intro .in-gears img.dn{filter:drop-shadow(0 5px 0 rgba(0,0,0,.35));opacity:1}
#intro .in-gears img.cur{filter:drop-shadow(0 0 18px #ffd36b) drop-shadow(0 5px 0 rgba(0,0,0,.35));opacity:1}
#intro .in-skip{position:absolute;right:40px;top:11%;z-index:9;height:52px;font-size:22px}
/* 완성 연출: 글씨는 장면을 가리지 않게 작게, 제목판은 아래쪽에 */
#intro .in-t.big{top:17%}#intro .in-t.big .ki>img{height:200px}
#intro .fin-plate{top:56%}

/* 그림 글씨 조각: 조각 전체가 그림 크기와 같음(띠는 clip-path로 자름) */
#warp .ki i,#intro .ki i{position:absolute;top:0;right:0;bottom:0;left:0;background-repeat:no-repeat;background-position:0 0}

/* 연출: 어두운 바탕·그림자를 쓰지 않고 밝은 크림색 띠로. 글씨 가장자리가 깎이지 않게 여백 확보 */
#warp .wp-low{background:linear-gradient(90deg,rgba(255,247,226,.93),rgba(255,247,226,.8) 62%,rgba(255,247,226,0));padding:26px 130px 28px 80px}
#warp .wp-low .lt-name,#warp .wp-low .lt-tag,#warp .wp-low .lt-tm{filter:drop-shadow(0 4px 0 rgba(120,80,30,.28))}
#warp .wp-low .lt-lbl{filter:drop-shadow(0 3px 0 rgba(120,80,30,.25))}
#warp .wp-vig,#intro .in-vig{background:radial-gradient(ellipse at center,rgba(0,0,0,0) 62%,rgba(60,35,10,.28) 100%)}
#warp .wp-bar,#intro .in-bar{background:#fff7e2}
#warp .wp-k1,#warp .wp-k2,#intro .in-n,#intro .in-t{filter:drop-shadow(0 8px 0 rgba(120,80,30,.3))}
#intro .ki,#warp .ki{padding:0}
#intro .ki>img,#warp .ki>img{margin:0}
/* 「도착!」 그림 글씨에 남아 있던 주황 상자 제거 */
#warp .lt-tag{background:none;border:0;border-radius:0;padding:0;display:block;font-size:0}

/* 도움 낱말 패널: 제목은 한 줄로 위에, 칩 6개가 한 줄에 맞게 */
.bank{gap:7px}
.bank .bg{display:flex;flex-direction:column;gap:3px}
.bank .bg b{font-size:19px;line-height:1.2;color:var(--cave);white-space:nowrap}
.bank .egs{display:grid;grid-template-columns:repeat(6,1fr);gap:5px}
.bank .egs button{font-size:18px;line-height:1.2;padding:5px 2px;border-radius:12px;text-align:center;white-space:nowrap;min-width:0}
.bank .bg{align-items:stretch}
.bank .bg b{text-align:left;padding-left:2px}
.bank .egs{justify-content:stretch}
.bank .egs button{width:100%;padding:5px 0;font-size:17.5px}

/* ───── 연출 글씨: 조각 없이 통째로, 서로 겹치지 않게 위에서 아래로 차곡차곡 ───── */
#warp .ki,#intro .ki{display:block;line-height:0;max-width:100%}
#warp .ki>img,#intro .ki>img{visibility:visible;display:block;width:auto;max-width:100%}
/* 가운데 「출발 → 도착」: 두 이름이 화면 폭을 나눠 가지고, 화살표 자리를 따로 둠 */
#warp .wp-k2{display:flex;align-items:center;justify-content:center;gap:24px;padding:0 60px}
#warp .wp-k2 .kfrom,#warp .wp-k2 .kto{flex:0 1 auto;min-width:0;max-width:calc((100% - 230px)/2);display:flex;justify-content:center}
#warp .wp-k2 .kfrom .ki>img,#warp .wp-k2 .kto .ki>img{height:auto;max-height:240px;width:auto;max-width:100%}
#warp .wp-k2 .karrow{flex:none;width:130px;height:auto}
/* 아래쪽 정보 띠: 「도착」 → 장소 이름 → 「시간 ○○」을 겹침 없이 세로로 쌓음 */
#warp .wp-low{display:flex;flex-direction:column;align-items:flex-start;gap:12px;max-width:min(1500px,92%);padding:24px 110px 26px 80px}
#warp .wp-low .lt-tag{height:78px;width:auto;margin:0}
#warp .wp-low .lt-name{margin:0;max-width:100%}
#warp .wp-low .lt-name .ki>img{height:170px;width:auto;max-width:100%}
#warp .wp-low .lt-time{margin:0;display:flex;align-items:center;gap:16px}
#warp .wp-low .lt-lbl{height:58px;width:auto}#warp .wp-low .lt-tm{height:76px;width:auto}
/* 단계 시작: 「N단계」 → 제목을 겹침 없이 */
#intro .in-n{top:17%}#intro .in-n .ki>img{height:190px;width:auto}
#intro .in-t{top:41%}#intro .in-t .ki>img{height:230px;width:auto;max-width:1500px}
#intro .in-t.big{top:15%}#intro .in-t.big .ki>img{height:190px}

#intro .in-flash,.pf-flash{display:none!important}
