/* โหมดอ่านแบบเลื่อน (webtoon) ของ Planet Tood (v2.18, ครบตอน 0–1 v2.19) โค้ดใน js/toon.js ใช้คลาส op-btn / op-holo / op-warn จาก css/player.css */
.tn{position:fixed;inset:0;z-index:10050;overflow-y:auto;overflow-x:hidden;background:#0E0B16;color:#F3EEFF;font-family:var(--body);-webkit-overflow-scrolling:touch;overscroll-behavior:contain;outline:none}
.tn-top{position:sticky;top:0;z-index:5;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:calc(10px + env(safe-area-inset-top)) 12px 10px;background:linear-gradient(rgba(10,8,18,.9),rgba(10,8,18,0))}
.tn-tr{display:flex;gap:6px;flex:none}
.tn-spd{padding:0 12px;font-variant-numeric:tabular-nums}
.tn-spd[hidden]{display:none}
@media (max-width:480px){.tn-tag{display:none}.tn-top .op-btn{padding:0 12px}}
.tn-tag{font:600 13px var(--display);opacity:.7;text-align:center;min-width:0}
.tn-col{max-width:680px;margin:-64px auto 0;padding-bottom:env(safe-area-inset-bottom)}
.tn-i{opacity:0;transform:translateY(14px);transition:opacity .8s ease,transform .8s ease}
.tn-i.on{opacity:1;transform:none}
.tn-gap{display:flex;align-items:center;justify-content:center;overflow:hidden}
/* คำเสียงในช่องว่าง (วาบ!! / ฟึ่บ… / ซ่าาา—) บอกเหตุการณ์ที่ไม่มีภาพ */
.tn-sfx{font:700 clamp(30px,10vw,58px)/1.5 var(--display);letter-spacing:.06em;color:#F3EEFF;transform:rotate(-6deg);text-align:center;padding:0 16px;text-shadow:0 0 18px rgba(200,180,255,.55)}
/* คำเสียงบนภาพ: ตัวเล็กกว่าในช่องว่าง ขอบเข้มให้อ่านออกบนทุกภาพ */
.tn-ui.tn-sfx{font-size:calc(clamp(26px,8.5vw,46px) * var(--fs,1));padding:0;white-space:nowrap;transform:translate(-50%,-50%) rotate(var(--r,-8deg));color:#FFF6D8;text-shadow:0 2px 0 #6E5FC4,2px 0 0 #6E5FC4,-2px 0 0 #6E5FC4,0 -2px 0 #6E5FC4,0 0 14px rgba(0,0,0,.4)}
.tn-gap.lt .tn-sfx{color:#6E5FC4;text-shadow:0 3px 0 #E9E2FF}
/* ภาพไม่ต่อกันจริง → เว้นระยะระหว่างช่องเสมอ */
.tn-pan+.tn-pan{margin-top:3vh}
/* ช่องภาพ: ขนาดตามสัดส่วนครอป ช่องแนวตั้งไม่สูงเกิน 88% ของจอ / กรอบคำพูดล้นขอบช่องได้ (แบบ webtoon) แต่ภาพถูกตัดใน .tn-clip */
.tn-pan{position:relative;margin:0 auto;width:min(100%,calc(88vh * var(--ar)));aspect-ratio:var(--ar)}
.tn-clip{position:absolute;inset:0;overflow:hidden;background:#000}
.tn-st{position:absolute;left:0;top:0;height:1080px;transform-origin:0 0}
.tn-pan.nr .tn-st{will-change:transform} /* v2.25.0 layer เฉพาะช่องใกล้จอ (มือถือค้างเมื่อทุกช่องเป็น layer) */
.tn-st>img{position:absolute;left:0;top:0;height:1080px;display:block;pointer-events:none;user-select:none}
.tn-pan.on .tn-shake{animation:tnShake .45s steps(3) infinite}
@keyframes tnShake{0%{transform:translate(0,0)}33%{transform:translate(var(--sh),calc(var(--sh) * -.6))}66%{transform:translate(calc(var(--sh) * -.8),calc(var(--sh) * .5))}}
.tn-ui{position:absolute;transform:translate(-50%,-50%);white-space:nowrap;z-index:2;font-size:calc(clamp(12px,3.4vw,20px) * var(--fs,1))}
.tn-ui.op-holo{font-size:calc(clamp(16px,4.6vw,30px) * var(--fs,1));white-space:normal;width:max-content;max-width:88%;text-align:center}
.tn-ui.op-year{animation:none;font-size:calc(clamp(20px,6vw,40px) * var(--fs,1));opacity:.92}
/* กรอบคำพูด: ความกว้างตามข้อความ ไม่ตายตัว ตำแหน่ง/หางคำนวณใน toon.js (--tx) */
.tn-say{position:absolute;z-index:3;width:max-content;white-space:pre-line;max-width:min(72%,30ch);box-sizing:border-box;padding:9px 15px;border-radius:20px;background:#FFFDF8;color:#2B2340;font:500 calc(clamp(14px,3.6vw,19px) * var(--fs,1))/1.45 var(--body);box-shadow:0 4px 0 rgba(0,0,0,.25);opacity:0;transform:scale(.85);transition:opacity .4s,transform .4s cubic-bezier(.3,1.5,.6,1)}
.tn-say .nm{display:block;font:700 11px var(--display);letter-spacing:.04em;color:#6E5FC4;margin-bottom:1px}
.tn-say::after{content:"";position:absolute;left:var(--tx,50%);width:14px;height:14px;margin-left:-7px;background:inherit;transform:rotate(45deg)}
.tn-say.tb::after{bottom:-6px}
.tn-say.tt::after{top:-6px}
.tn-say.tl::after,.tn-say.tr::after{left:auto;top:var(--ty,50%);margin:-7px 0 0}
.tn-say.tl::after{left:-6px}
.tn-say.tr::after{right:-6px}
.tn-say.big{font:700 calc(clamp(26px,8vw,40px) * var(--fs,1))/1.15 var(--display);color:#6E5FC4;padding:8px 20px}
.tn-say.wh{background:rgba(255,253,248,.82);border:2px dashed #A99CD6;font-size:calc(clamp(13px,3.3vw,17px) * var(--fs,1));box-shadow:none}
.tn-say.wh::after,.tn-say.nt::after{display:none} /* nt = ไม่มีหาง (v2.40 editor) */
.tn-say.cut{border-right:4px solid #FF5F7E;text-shadow:1.5px 0 rgba(255,79,122,.6),-1.5px 0 rgba(79,216,255,.6)}
.tn-pan.on .tn-say{opacity:1;transform:none}
.tn-hid{height:0;overflow:hidden} /* v2.41 กล่องที่ซ่อนจาก editor */
/* กล่องคั่นช่อง: log = บันทึกภาคสนาม (เรียบ ทางการ) / kid = ถึงลูก (อุ่น) / nar = บรรยาย / sys = ระบบยาน / obj = ภารกิจ / jot = สมุดจด / gtxt = ข้อความเสีย */
.tn-cap{margin:7vh auto;width:fit-content;max-width:min(88%,36ch);box-sizing:border-box;padding:14px 18px;border-radius:14px;position:relative}
.tn-cap p{margin:0;font-size:clamp(16px,3.9vw,20px);line-height:1.6;white-space:pre-line}
.tn-cap .nm{display:inline-block;margin-bottom:6px;font:600 12px var(--display);letter-spacing:.06em;opacity:.75}
.tn-cap.c-log{background:rgba(26,22,44,.9);border:1px solid rgba(200,190,255,.3);color:#E9FFF6}
.tn-cap.c-log p,.tn-cap.c-sys p,.tn-cap.c-obj p{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,var(--body);font-size:clamp(14px,3.5vw,18px)}
.tn-cap.c-kid{background:#FFF4E2;color:#5B3F0E;box-shadow:0 4px 0 #D9A94E}
.tn-cap.c-kid .nm{color:#9A6A18;opacity:1}
/* v2.97 กล่องความคิดของพิรุณ (think:) */
.tn-cap.c-think{background:rgba(255,255,255,.92);color:#3A3550;border:2px dashed rgba(150,140,200,.55);border-radius:22px}
.tn-cap.c-think p{font-style:italic}
.tn-cap.c-nar{background:none;font-style:italic;text-align:center;max-width:min(88%,32ch)}
.tn-cap.c-nar p{font-size:clamp(17px,4.2vw,22px)}
.tn-cap.c-sys{background:rgba(10,30,40,.85);border:1px solid rgba(140,240,255,.55);color:#DFFBFF;box-shadow:0 0 18px rgba(120,220,255,.25)}
.tn-cap.c-obj{background:rgba(18,16,34,.88);border:1px solid rgba(255,224,160,.6);color:#FFF4DA;text-align:left}
.tn-cap.c-jot{background:#FBF5E6;color:#3B3256;transform:rotate(-1.5deg);box-shadow:0 6px 14px rgba(0,0,0,.35);border-radius:6px;background-image:repeating-linear-gradient(transparent 0 calc(1.6em - 1px),rgba(110,95,196,.18) calc(1.6em - 1px) 1.6em)}
.tn-cap.c-jot.on{transform:rotate(-1.5deg)}
.tn-cap.c-gtxt{background:none;text-align:center}
.tn-cap.c-gtxt p{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.08em;text-shadow:2px 0 #ff4f7a,-2px 0 #4fd8ff;animation:opJit .12s steps(2) infinite}
.tn-title{white-space:pre-line;text-align:center;padding:6vh 16px;font:700 clamp(26px,7vw,44px)/1.25 var(--display);letter-spacing:.12em;color:#fff;text-shadow:0 0 22px rgba(255,220,240,.7);background:#000}
.tn-end{display:flex;flex-direction:column;gap:12px;align-items:stretch;max-width:420px;margin:0 auto;padding:8vh 16px 14vh;text-align:center}
/* v2.88.1 ปุ่มท้ายตอน: เดิมไม่มีสไตล์ (.pt-btn ไม่มีใน css ไหน) = ปุ่มเทาอ่อน ตัวอักษรขาว อ่านไม่ออก */
.tn-end .pt-btn{min-height:56px;padding:12px 24px;border:0;border-radius:999px;background:#6E5FC4;color:#fff;font:600 19px/1.3 var(--display);cursor:pointer;box-shadow:0 5px 0 #4E40A0;-webkit-tap-highlight-color:transparent}
.tn-end .pt-btn:active{transform:translateY(3px);box-shadow:0 2px 0 #4E40A0}
.tn-end .pt-btn:focus-visible{outline:3px solid #C9BDFF;outline-offset:3px}
.tn-end .pt-btn.ghost{background:none;color:#E8E0FF;border:2px solid rgba(232,224,255,.45);box-shadow:none;font-size:17px}
/* v2.88.1 ตอนอ่านอยู่ หน้าข้างหลังห้ามเลื่อน (เดิม boot.js ล้าง body overflow ทีหลัง = scrollbar ซ้อนสองอัน) / ห้ามซูมนิ้ว (มือถือซูมแล้ว layout ใหม่ทั้งตอน) */
html:has(>body>.tn),body:has(>.tn){overflow:hidden}
.tn{touch-action:pan-y}
@media (prefers-reduced-motion:reduce){.tn-i,.tn-say{transition:none}.tn-pan.on .tn-shake,.tn-cap.c-gtxt p{animation:none}}
/* v2.60.2 ป้ายชื่อบนป้ายไม้ในภาพ (E6-18 ซองเมล็ด) ตัวเขียนสีน้ำตาล ไม่มีกรอบ */
.tn-ui.op-sign{font-family:"Mali",var(--body);letter-spacing:0;font-weight:700;color:#4A3524;text-shadow:none;background:none;border:0;padding:0;animation:none;font-size:calc(clamp(7px,2.1vw,15px) * var(--fs,1));transform:translate(-50%,-50%) rotate(-3deg)}
