@import url('https://cdn.jsdelivr.net/npm/galmuri@latest/dist/galmuri.css');
:root{--bg:#171230;--panel:#2a2357;--panel2:#3a3178;--ink:#f6f2ff;--dim:#b2a9e0;--acc:#ffd23a;--acc2:#ff6b8b;--ok:#4ade80;--bad:#f87171;--line:#0e0a20;
  --notch:polygon(0 4px,4px 4px,4px 0,calc(100% - 4px) 0,calc(100% - 4px) 4px,100% 4px,100% calc(100% - 4px),calc(100% - 4px) calc(100% - 4px),calc(100% - 4px) 100%,4px 100%,4px calc(100% - 4px),0 calc(100% - 4px))}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;user-select:none}
html,body{margin:0;height:100%;overflow:hidden;background:var(--bg);color:var(--ink);font-family:Galmuri11,'Galmuri9','Malgun Gothic','Apple SD Gothic Neo','Noto Sans KR',sans-serif;touch-action:manipulation;font-size:14px}
canvas{display:block}
small{font-size:12px}
#world{position:fixed;inset:0;width:100%;height:100%;image-rendering:pixelated;touch-action:none;-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}
.hidden{display:none!important}
button{font:inherit;color:var(--ink);background:#4a3fa8;border:0;padding:8px 12px;cursor:pointer;font-weight:700;clip-path:var(--notch);
  box-shadow:inset 0 0 0 2px var(--line),inset 4px 4px 0 2px #7d72e8,inset -4px -4px 0 2px #2e2678}
button:active{filter:brightness(1.25);transform:translateY(1px)}
button:disabled{opacity:.4;cursor:default;filter:grayscale(.6)}
input{font:inherit;color:var(--ink);background:#120e28;border:3px solid var(--line);box-shadow:inset 0 0 0 2px #5a4fb0;padding:10px 12px;width:100%;user-select:text;outline:none}
.primary{background:#e89a1c;color:#3a2100;box-shadow:inset 0 0 0 2px var(--line),inset 4px 4px 0 2px #ffd56a,inset -4px -4px 0 2px #b8680c}

/* 로그인 */
#login{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:linear-gradient(#0d0a24,#2a2060 55%,#4a3a9a);z-index:50;overflow:hidden}
#login:before{content:"";position:absolute;inset:0;background-image:radial-gradient(#fff 1px,transparent 1.5px),radial-gradient(#cfe 1px,transparent 1.5px);background-size:90px 90px,140px 140px;background-position:0 0,45px 60px;opacity:.5}
#login .card{position:relative;width:min(380px,90vw);background:var(--panel);padding:26px;display:flex;flex-direction:column;gap:12px;text-align:center;clip-path:var(--notch);box-shadow:inset 0 0 0 3px var(--line),inset 0 0 0 6px #6a5fd0}
#login h1{margin:0;font-size:48px;letter-spacing:2px;color:var(--acc);text-shadow:3px 3px 0 #b8562a,0 0 18px #ffd23a66;font-weight:400}
.sub{margin:0 0 6px;color:var(--dim)}
#lgo{font-size:18px;padding:12px}
#lerr{color:var(--bad);min-height:20px;font-size:14px}
.tip{font-size:12px;color:var(--dim);margin:0;line-height:1.5}

/* HUD */
#hud{position:fixed;inset:0;pointer-events:none;z-index:10;--n:6;--mw:calc(var(--n) * 44px + (var(--n) - 1) * 6px + 8px)} /* --n: 오른쪽 위 메뉴 버튼 수 (내 방에서는 꾸미기가 더해져 7) */
#hud:has(#decorbtn:not(.hidden)){--n:7}
#hud>*{pointer-events:auto}
#topbar{position:absolute;top:calc(8px + env(safe-area-inset-top));left:8px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.chips{display:flex;gap:6px}
#wchip{background:#0009;padding:4px 10px;font-weight:700;color:#cfe6ff;clip-path:var(--notch)}
#wchip:empty{display:none}
#money,#duobadge{background:#0009;padding:4px 10px;font-weight:700;color:var(--acc);width:fit-content;clip-path:var(--notch)}
#duobadge{color:#ff9fc0}
#partybar{display:flex;gap:4px}
.pchip{width:40px;background:#0009;padding:2px;text-align:center;clip-path:var(--notch)}
.pchip canvas{width:34px;height:34px;image-rendering:pixelated}
.pchip .hb{height:4px;background:#333;overflow:hidden}.pchip .hb i{display:block;height:100%;background:var(--ok)}
#menubtns{position:absolute;top:calc(8px + env(safe-area-inset-top));right:8px;display:flex;gap:6px}
#menubtns button{width:44px;height:44px;padding:0;font-size:20px}
#chatlog{position:absolute;left:8px;bottom:calc(58px + env(safe-area-inset-bottom));max-width:min(420px,60vw);display:flex;flex-direction:column;gap:2px;pointer-events:none!important;font-size:14px}
#chatlog div{background:#000a;padding:3px 8px;animation:fade 14s forwards;width:fit-content;max-width:100%;word-break:break-all}
#chatlog .sys{color:var(--acc)}
@keyframes fade{0%,85%{opacity:1}100%{opacity:0}}
#chatbar{position:absolute;left:8px;bottom:calc(8px + env(safe-area-inset-bottom));display:flex;gap:4px;width:min(300px,50vw)}
#chatbar input{padding:8px 10px;background:#000b}
#chatbar button{padding:4px 10px}
#emojis{position:absolute;left:8px;bottom:calc(54px + env(safe-area-inset-bottom));background:#000d;padding:6px;display:flex;gap:4px;flex-wrap:wrap;width:min(280px,70vw)}
#emojis button{font-size:20px;padding:4px 8px}
#dpad{position:absolute;right:14px;bottom:calc(14px + env(safe-area-inset-bottom));width:150px;height:150px;display:none}
#dpad button{position:absolute;width:50px;height:50px;padding:0;font-size:20px;touch-action:none}
#dpad [data-d="3"]{left:50px;top:0}#dpad [data-d="0"]{left:50px;bottom:0}#dpad [data-d="1"]{left:0;top:50px}#dpad [data-d="2"]{right:0;top:50px}
#abtn{position:absolute;right:20px;bottom:calc(176px + env(safe-area-inset-bottom));width:60px;height:60px;padding:0;font-size:20px;background:#d8486a;display:none}
@media (pointer:coarse),(max-width:760px){#dpad,#abtn{display:block}#chatbar{width:min(200px,42vw)}}
#toast{position:absolute;top:calc(92px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);background:#000d;padding:8px 16px;font-weight:700;opacity:0;transition:opacity .25s;pointer-events:none!important;text-align:center;max-width:90vw;box-shadow:0 0 0 3px var(--acc)}
#toast.on{opacity:1}
#ask{position:absolute;top:calc(110px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);background:var(--panel);padding:14px 18px;text-align:center;display:flex;flex-direction:column;gap:8px;z-index:20;clip-path:var(--notch);box-shadow:inset 0 0 0 3px var(--acc2)}
#ask .row{display:flex;gap:8px;justify-content:center;background:none}

/* 목표 */
#objective{position:absolute;top:calc(8px + env(safe-area-inset-top));left:50%;transform:translateX(-50%);background:#000b;padding:6px 14px;max-width:min(460px,calc(100vw - 2 * (var(--mw) + 16px)));text-align:center;font-size:14px;line-height:1.35;cursor:pointer;clip-path:var(--notch);box-shadow:inset 0 0 0 2px var(--acc)}
#objective small{display:block;color:var(--acc);font-size:11px}
@media (max-width:760px){#objective{top:calc(98px + env(safe-area-inset-top));max-width:calc(100vw - 110px);left:auto;right:8px;transform:none;font-size:12px}}
/* 대화창 */
#dlg{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(12px + env(safe-area-inset-bottom));width:min(760px,calc(100vw - 16px));min-height:130px;background:#f8efd0;color:#2a1c10;display:flex;gap:12px;padding:14px 16px;z-index:25;clip-path:var(--notch);box-shadow:inset 0 0 0 4px #5a4a24,inset 0 0 0 7px #e8d8a8;cursor:pointer}
#dlgface{width:84px;height:84px;flex:none;image-rendering:pixelated;background:#e8dcb4;box-shadow:inset 0 0 0 2px #5a4a24;align-self:flex-start}
#dlg .body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
#dlgname{font-weight:700;color:#8a3a1a;font-size:14px}
#dlgtext{font-size:16px;line-height:1.55;white-space:pre-line;min-height:52px}
#dlgopts{display:flex;flex-wrap:wrap;gap:6px}
#dlgopts button{font-size:14px;padding:8px 12px}
#dlgopts input{background:#fff;color:#222;flex:1;min-width:140px;box-shadow:inset 0 0 0 2px #5a4a24}
#dlgmore{position:absolute;right:18px;bottom:10px;color:#8a3a1a;animation:blink .8s steps(2) infinite}
@keyframes blink{50%{opacity:0}}
@media (max-width:760px){#dlg{bottom:calc(170px + env(safe-area-inset-bottom))}#dlgface{width:64px;height:64px}#dlgface.pt{width:80px;height:80px}#dlgtext{font-size:14px}}
/* 모바일: 대화 중에는 패드·채팅을 숨기고 대화창을 화면 아래에 (대화창 어디를 눌러도 다음으로) */
@media (pointer:coarse),(max-width:760px){
  #hud:has(#dlg:not(.hidden)) :is(#dpad,#abtn,#chatbar,#emojis){display:none!important}
  #hud:has(#dlg:not(.hidden)) #dlg{bottom:calc(12px + env(safe-area-inset-bottom));min-height:150px}
  #dlgopts button{min-height:44px}
}
/* 엔딩 */
#ending{position:fixed;inset:0;z-index:60;background:linear-gradient(#0d0a24,#2a1a50);overflow:hidden;text-align:center}
#ending .roll{position:absolute;left:0;right:0;top:100%;animation:roll 34s linear forwards;display:flex;flex-direction:column;align-items:center;gap:24px;padding:40px 20px}
#ending h1{font-size:48px;color:var(--acc);margin:0;text-shadow:3px 3px 0 #b8562a;font-weight:400}
#ending h2{font-size:36px;color:#ff9fc0;margin:40px 0 0}
#ending p{font-size:18px;line-height:1.7;margin:0}#ending b{color:var(--acc);font-size:20px}
#ending .mons{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}#ending .mons canvas{width:72px;height:72px;image-rendering:pixelated}
@keyframes roll{to{top:0;transform:translateY(calc(-100% + 100vh))}}
.badges{display:flex;flex-wrap:wrap;gap:6px}
.badges span{background:var(--panel2);padding:6px 10px;font-size:14px;opacity:.35;filter:grayscale(1);clip-path:var(--notch)}
.badges span.on{opacity:1;filter:none;box-shadow:inset 0 0 0 2px var(--acc)}
/* 모험 일지 */
.chap{display:flex;flex-wrap:wrap;gap:6px}
.chap div{background:var(--panel2);padding:4px 10px;font-size:14px;clip-path:var(--notch)}
.chap .done{color:var(--ok)}.chap .now{color:var(--acc);box-shadow:inset 0 0 0 2px var(--acc)}.chap .lock{color:#777}

/* 배틀 */
#battle{position:fixed;inset:0;z-index:30;background:#000;display:flex;flex-direction:column}
#arena{position:relative;flex:1;min-height:0}
#bcv{width:100%;height:100%}
/* 배틀 상태 카드 */
#foeBar{position:absolute;top:8px;left:8px;right:8px;display:flex;gap:8px;pointer-events:none}
#foeBar .hpcard{flex:0 1 380px}
.hpcard{background:linear-gradient(#fffaea,#f3e5c0);color:#2a1c10;padding:8px 12px 9px;min-width:0;clip-path:var(--notch);box-shadow:inset 0 0 0 3px #4a3a1c,inset 0 -5px 0 3px rgba(90,60,20,.12);transition:opacity .3s}
.hpcard .r1{display:flex;align-items:center;gap:6px;font-size:16px;line-height:1.2}
.hpcard .r1 b{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hpcard .tp{font-size:11px;padding:1px 6px;color:#1a1410;font-weight:800;flex:none}
.hpcard .lv{font-weight:800;flex:none;font-size:14px}
.hprow{display:flex;align-items:center;gap:6px;margin-top:6px}
.hprow .lbl{font-size:11px;font-weight:800;background:#4a3a1c;color:#ffd23a;padding:1px 5px;flex:none}
.bar{height:12px;background:#3a3428;border:2px solid #2a1c10;overflow:hidden;flex:1}
.bar i{display:block;height:100%;width:100%;background:var(--ok);transition:width .6s steps(14),background .3s;box-shadow:inset 0 3px 0 rgba(255,255,255,.35)}
.hpcard .r3{display:flex;align-items:center;gap:8px;margin-top:5px}
.hpcard .hpnum{font-size:14px;font-weight:800;flex:none;min-width:70px;text-align:right}
.bar.exp{height:6px;border-width:1px}.bar.exp i{background:#4aa8ff;transition:width .8s;box-shadow:none}
.hpcard.foe .r3{display:none}
/* 아래 패널: 왼쪽(내 상태 + 메시지) / 오른쪽(명령) — 빈 곳 없이 꽉 */
#bbox{background:var(--panel);padding:10px;display:grid;grid-template-columns:minmax(280px,44%) 1fr;gap:12px;height:clamp(210px,36vh,300px);padding-bottom:calc(10px + env(safe-area-inset-bottom));box-shadow:inset 0 4px 0 var(--acc),inset 0 6px 0 var(--line)}
#bleft{display:flex;flex-direction:column;gap:8px;min-width:0;min-height:0}
#allyCards{display:flex;flex-direction:column;gap:6px}
#btext{flex:1;min-height:48px;font-size:16px;font-weight:700;line-height:1.45;padding:10px 12px;background:#17123a;clip-path:var(--notch);box-shadow:inset 0 0 0 2px #4a3f9a;overflow:auto}
#bmenu{display:grid;grid-template-columns:1fr 1fr;grid-auto-rows:minmax(0,1fr);gap:8px;min-height:0}
#bleft{grid-column:1;grid-row:1}#bmenu{grid-column:2;grid-row:1}
#bmenu:empty{display:none}#bmenu:empty + #bleft{grid-column:1/-1;flex-direction:row}#bmenu:empty + #bleft #allyCards{flex:0 0 calc(44% - 5px);justify-content:center}
#bmenu button{font-size:16px;padding:8px 12px;min-height:0}
#bmenu .mv{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:2px;border-left:8px solid}
#bmenu .mv small,#bmenu button small{font-weight:400;color:var(--dim)}
#bmenu .wide{grid-column:1/-1}
#bmenu .mon{display:flex;align-items:center;gap:8px;text-align:left}
#bmenu .mon canvas{width:40px;height:40px;flex:none;image-rendering:pixelated}
#bmenu > div{display:flex;align-items:center;justify-content:center;color:var(--dim)}
/* 세로 화면: 내 상태 카드는 가로로 나란히, 메시지·명령은 전체 폭 */
@media (max-aspect-ratio:1/1),(max-width:700px){
  #bbox{grid-template-columns:1fr;grid-template-rows:auto 1fr;height:clamp(320px,45vh,390px)}
  #bmenu:empty + #bleft{flex-direction:column}#bmenu:empty + #bleft #allyCards{flex:none}
  #bleft{grid-column:1;grid-row:1}#bmenu{grid-column:1;grid-row:2}
  #allyCards{flex-direction:row}#allyCards .hpcard{flex:1}
  .hpcard{padding:6px 9px 7px}.hpcard .r1{font-size:14px}.hpcard .hpnum{min-width:0;font-size:12px}
  #btext{font-size:14px;min-height:44px}
  #bmenu{grid-auto-rows:minmax(0,1fr)}#bmenu button{font-size:14px;padding:4px 10px}#bmenu .mv small{font-size:11px;line-height:1.2}
  #foeBar .hpcard{flex:1 1 0}
}
.shake{animation:shk .35s}
@keyframes shk{0%,100%{transform:translateX(0)}20%{transform:translateX(-8px)}40%{transform:translateX(8px)}60%{transform:translateX(-6px)}80%{transform:translateX(6px)}}

/* 모달 */
#modal{position:fixed;inset:0;background:#000b;z-index:40;display:flex;align-items:center;justify-content:center;padding:10px}
#mbox{background:var(--panel);padding:16px;width:min(580px,100%);max-height:92vh;overflow:auto;display:flex;flex-direction:column;gap:12px;-webkit-overflow-scrolling:touch;clip-path:var(--notch);box-shadow:inset 0 0 0 3px var(--line),inset 0 0 0 6px #6a5fd0}
#mbox h2{margin:0;font-size:18px;display:flex;justify-content:space-between;align-items:center;gap:8px}
#mbox h3{margin:6px 0 0;font-size:14px;color:var(--dim)}
.row{display:flex;align-items:center;gap:12px;background:var(--panel2);padding:8px;clip-path:var(--notch)}
.row canvas{width:56px;height:56px;flex:none;image-rendering:pixelated}
.row .info{flex:1;min-width:0}
.row .info b{display:block}
.row .info small{color:var(--dim);display:block}
.hbar{height:8px;background:#111;overflow:hidden;margin-top:3px}.hbar i{display:block;height:100%;background:var(--ok)}
.row .btns{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.row .btns button{padding:6px 10px;font-size:14px}
.tag{display:inline-block;font-size:11px;padding:1px 7px;color:#222;font-weight:800;margin-right:4px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(108px,1fr));gap:8px}
.cell{background:var(--panel2);padding:6px;text-align:center;font-size:14px;position:relative;clip-path:var(--notch)}
.cell canvas{width:100px;height:100px;image-rendering:pixelated;max-width:100%}
.cell.pick{box-shadow:inset 0 0 0 3px var(--acc)}
.cell .no{position:absolute;top:6px;left:10px;color:var(--dim);font-size:11px}
.close{padding:4px 10px}
.starters{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.starters .cell{cursor:pointer}.starters .cell canvas{width:100px;height:100px}
.looks{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.looks canvas{width:48px;height:64px;background:var(--panel2);cursor:pointer;image-rendering:pixelated}
.looks canvas.pick{outline:3px solid var(--acc)}
.evo{text-align:center}.evo canvas{width:min(300px,80vw);height:min(300px,80vw);image-rendering:pixelated}
.center{text-align:center}

/* 낚시 미니게임 */
#fishgame{position:absolute;left:50%;transform:translateX(-50%);bottom:calc(120px + env(safe-area-inset-bottom));width:min(520px,calc(100vw - 24px));background:var(--panel);padding:12px 14px 16px;z-index:26;clip-path:var(--notch);box-shadow:inset 0 0 0 3px var(--line),inset 0 0 0 6px #4ac0f0;cursor:pointer;touch-action:none}
#fishgame .ft{font-weight:700;text-align:center;margin-bottom:10px;font-size:16px}
#fishgame .fbar{position:relative;height:28px;background:#123a5a;box-shadow:inset 0 0 0 3px var(--line)}
#fishgame .fzone{position:absolute;top:3px;bottom:3px;background:#4ade80;box-shadow:inset 0 3px 0 rgba(255,255,255,.35)}
#fishgame .fzone i{position:absolute;left:32%;right:32%;top:0;bottom:0;background:#ffe066}
#fishgame .fneedle{position:absolute;top:-6px;bottom:-6px;width:6px;margin-left:-3px;background:#fff;box-shadow:0 0 0 2px var(--line)}
#fishgame.ok{box-shadow:inset 0 0 0 3px var(--line),inset 0 0 0 6px #4ade80}
#fishgame.bad{box-shadow:inset 0 0 0 3px var(--line),inset 0 0 0 6px #f87171}
@media (max-width:760px){#fishgame{bottom:calc(240px + env(safe-area-inset-bottom))}}
.row .info small.hearts{font-size:11px;letter-spacing:-1px}
/* 레이드 보스 카드 */
.hpcard.boss{background:linear-gradient(#ffe8f0,#f0c8d8);box-shadow:inset 0 0 0 3px #6a1a3a,inset 0 -5px 0 3px rgba(120,20,60,.15)}
.hpcard.boss .lbl{background:#8a1a3a;color:#fff}
.hpcard.boss .r1 b::before{content:'BOSS ';color:#c81a4a}
.hpcard.boss .bar.hp i{background:linear-gradient(90deg,#c81a4a,#ff5a8a)!important}
#fishgame .fmon{display:block;margin:0 auto 6px;width:200px;height:120px;image-rendering:pixelated;background:radial-gradient(ellipse at 50% 100%,#5a3a8a,#2a1d4a 70%);box-shadow:inset 0 0 0 2px #ffd23a}
#fishgame .fmon.hidden{display:none}
.row .info small.ribbons{color:var(--acc)}

/* 📅 출석 · 🏆 업적 · 💞 커플 · 배너 */
.tabs{display:flex;gap:6px;flex-wrap:wrap}
.tabs button{flex:1;min-width:76px;padding:7px 6px;font-size:14px;background:var(--panel2);position:relative}
.tabs button.on{background:#6a5fd0;box-shadow:inset 0 0 0 2px var(--acc)}
.tabs .dot{position:absolute;top:3px;right:5px;width:9px;height:9px;border-radius:50%;background:var(--acc2);box-shadow:0 0 0 2px var(--line);animation:blink 1s infinite alternate}
@keyframes blink{to{opacity:.35}}
.stamps{display:grid;grid-template-columns:repeat(auto-fit,minmax(70px,1fr));gap:6px}
.stamp{background:var(--panel2);padding:6px 4px;text-align:center;clip-path:var(--notch);min-height:92px;display:flex;flex-direction:column;justify-content:space-between;align-items:center;opacity:.8}
.stamp small{font-size:11px;color:var(--dim);line-height:1.25}
.stamp .si{font-size:24px;filter:grayscale(.6) opacity(.7)}
.stamp.on{opacity:1;box-shadow:inset 0 0 0 2px var(--ok)}.stamp.on .si{filter:none}
.stamp.next{opacity:1;box-shadow:inset 0 0 0 2px var(--acc);animation:blink .8s infinite alternate}
.stamp.pop .si{animation:stampPop .7s cubic-bezier(.2,1.6,.4,1)}
@keyframes stampPop{0%{transform:scale(3.2) rotate(-25deg);opacity:0}60%{transform:scale(.9) rotate(4deg);opacity:1}100%{transform:scale(1) rotate(0)}}
.bigbtn{width:100%;padding:14px;font-size:16px;background:#d8486a}
.bigbtn:disabled{background:#4a3fa8}
.row.achdone{box-shadow:inset 0 0 0 2px #ffd23a55}.row.achlock{opacity:.78}
.row .aic{font-size:24px;width:36px;text-align:center;flex:none}
.ttl{color:var(--acc);font-size:12px}
.cpl{display:flex;align-items:center;justify-content:center;gap:12px;background:linear-gradient(90deg,#4a2f7a,#7a2f5a);padding:14px;font-size:16px;font-weight:800;clip-path:var(--notch)}
.cpl i{font-style:normal;font-size:24px;animation:beat 1s infinite}
.cpl b{color:var(--acc);margin-left:6px}
@keyframes beat{50%{transform:scale(1.25)}}
#banner{position:fixed;width:max-content;top:calc(64px + env(safe-area-inset-top));left:50%;transform:translate(-50%,-26px);opacity:0;transition:opacity .3s,transform .3s;display:flex;align-items:center;gap:12px;background:linear-gradient(#3a2f80,#241c55);padding:10px 18px;z-index:70;pointer-events:none;max-width:92vw;clip-path:var(--notch)}
#banner.on{opacity:1;transform:translate(-50%,0)}
#banner .bi{font-size:28px}
#banner b{display:block;font-size:14px;color:var(--acc)}
#banner small{display:block;color:var(--ink);font-size:12px;margin-top:2px}
#banner.ach{box-shadow:inset 0 0 0 3px var(--acc)}
#banner.clv{box-shadow:inset 0 0 0 3px #ff8ab8}
/* 상태이상 표시 */
.hpcard .stt{display:none;font-size:11px;padding:1px 6px;color:#fff;font-weight:800;margin-left:2px;text-shadow:0 1px 0 #0006}

/* 🛋️ 방 꾸미기: 방이 보이도록 아래 시트로 */
#modal.sheet{background:transparent;align-items:flex-end;pointer-events:none}
#modal.sheet #mbox{pointer-events:auto;max-height:50dvh;box-shadow:inset 0 0 0 3px var(--line),inset 0 0 0 6px #6a5fd0,0 -6px 24px #000a}
body:has(#modal.sheet) :is(#topbar,#menubtns,#objective,#chatlog,#chatbar,#emojis,#dpad,#abtn,#wchip){display:none!important}
.dirpad{display:grid;grid-template-columns:repeat(3,44px);grid-template-rows:repeat(2,44px);gap:4px;flex:none}
.dirpad button{padding:0;font-size:18px;min-height:0}
.dirpad [data-i="3"]{grid-column:2;grid-row:1}.dirpad [data-i="1"]{grid-column:1;grid-row:2}.dirpad [data-i="0"]{grid-column:2;grid-row:2}.dirpad [data-i="2"]{grid-column:3;grid-row:2}

/* 📱 모바일 우선 보정 (폰 세로 390×844 기준) */
@media (pointer:coarse),(max-width:760px){
  #chatlog{max-width:calc(100vw - 190px)}
  .row .btns button,.tabs button,#mbox .close{min-height:44px}
  .row .btns button,#mbox .close{min-width:56px;font-size:14px}
  .row .btns.v{flex-direction:column;flex-wrap:nowrap;align-items:stretch}
  #mbox{max-height:calc(100dvh - 20px)}
  /* 긴 목록을 스크롤해도 제목줄(닫기 버튼)이 따라온다 */
  #mbox>h2:first-child{position:sticky;top:-16px;z-index:2;margin:-16px -16px 0;padding:14px 16px 8px;background:var(--panel)}
}
@media (max-width:520px){
  /* 위쪽 한 줄: 돈(왼쪽) | 메뉴 6개(오른쪽). 파티는 메뉴 줄 아래, 날씨는 오른쪽 아래, 목표는 그 밑 */
  #menubtns{gap:4px;right:6px}
  #menubtns button{width:clamp(32px,calc((100vw - 130px - (var(--n) - 1) * 4px) / var(--n)),40px)}
  .chips{flex-direction:column;gap:4px;align-items:flex-start}
  #money{font-size:14px;padding:3px 8px}
  #wchip{position:fixed;right:8px;top:calc(58px + env(safe-area-inset-top));font-size:12px;padding:3px 8px}
  #duobadge{font-size:12px;padding:3px 8px}
  #duobadge.hidden + #partybar{margin-top:22px}
  #objective{top:calc(116px + env(safe-area-inset-top))}
  #toast{top:calc(172px + env(safe-area-inset-top))}
  #chatlog div{font-size:12px;padding:2px 6px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  #chatlog div:nth-last-child(n+4){display:none}
}
@media (max-width:340px){#wchip{display:none}#money{font-size:12px;padding:3px 6px}}
@media (max-aspect-ratio:1/1),(max-width:700px),(max-height:480px){
  /* 가방·파티처럼 항목이 많으면 내용 높이대로 늘리고 스크롤, ← 뒤로 는 아래에 고정 */
  #bmenu:has(> button:nth-child(7)){grid-auto-rows:max-content;align-content:start;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}
  #bmenu:has(> button:nth-child(7)) button{min-height:44px}
  #bmenu:has(> button:nth-child(7)) .wide{position:sticky;bottom:0;z-index:1}
  #bmenu{grid-template-columns:repeat(2,minmax(0,1fr))}
  #bmenu button{line-height:1.25}
  #bmenu .it small{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}
/* 가로(낮은 화면): 설명은 접고 이름만, 채팅 로그도 2줄만 */
@media (max-height:480px){
  #bmenu .it small,#bmenu .it br{display:none}
  #chatlog div:nth-last-child(n+3){display:none}
}
/* 🔌 연결 끊김 안내 · 📸 번쩍 · 사진 · 🖐️ 왼손잡이 모드 */
#net{position:fixed;inset:0;z-index:90;background:#0d0a24e8;display:flex;align-items:center;justify-content:center;padding:24px}
#net .box{background:var(--panel);padding:24px 22px;width:min(340px,100%);text-align:center;display:flex;flex-direction:column;gap:12px;clip-path:var(--notch);box-shadow:inset 0 0 0 3px var(--line),inset 0 0 0 6px #6a5fd0}
#net .spin{font-size:40px;animation:beat 1.2s infinite}
#net p{margin:0;line-height:1.55}
#net button{min-height:44px}
#flash{position:fixed;inset:0;background:#fff;opacity:0;pointer-events:none;z-index:85}
img.photo{width:100%;max-height:56dvh;object-fit:contain;image-rendering:pixelated;background:#111;-webkit-touch-callout:default;user-select:auto;pointer-events:auto}
.row input[type=date]{flex:1;min-width:0;padding:8px 10px}
.mailform{display:flex;flex-direction:column;gap:8px}.mailform label{display:flex;gap:6px;align-items:center;flex-wrap:wrap;font-size:14px}.mailform select,.mailform textarea{flex:1;min-width:140px;min-height:40px;font:inherit}.mailform textarea{width:100%;box-sizing:border-box}.mailform input{min-height:40px;font:inherit}
/* 👆 터치 조작 모드: 방향 버튼·A 버튼 없이 화면을 탭해서 움직인다 → 아래쪽까지 게임 화면으로 쓴다 */
#chatbtn{display:none}
body.touchctl #dpad,body.touchctl #abtn{display:none!important}
body.touchctl #chatbtn{display:block;font-size:20px;padding:4px 10px}
body.touchctl #chatbar>button{min-width:46px;min-height:46px}
body.touchctl #chatbar{width:auto}
body.touchctl:not(.chatopen) #chatin{display:none}
body.touchctl.chatopen #chatbar{width:min(320px,calc(100vw - 16px))}
body.touchctl #chatlog{bottom:calc(56px + env(safe-area-inset-bottom))}
body.lefty #dpad{right:auto;left:14px}
body.lefty #abtn{right:auto;left:20px}
body.lefty #chatbar,body.lefty #chatlog{left:auto;right:8px}
body.lefty #emojis{left:auto;right:8px}
/* 가로 화면(낮은 화면): 목표 글씨는 왼쪽 칩들과 오른쪽 메뉴 사이에 */
@media (min-width:521px) and (max-height:480px){
  #objective{left:282px;right:calc(var(--mw) + 8px);transform:none;max-width:none}
}
textarea{font:inherit;color:var(--ink);background:#120e28;border:3px solid var(--line);box-shadow:inset 0 0 0 2px #5a4fb0;padding:10px 12px;width:100%;user-select:text;outline:none;resize:none;line-height:1.5}
details.help{background:var(--panel2);padding:4px 12px 10px;clip-path:var(--notch)}
details.help summary{font-weight:700;cursor:pointer;min-height:44px;display:flex;align-items:center;list-style:none}
details.help summary::-webkit-details-marker{display:none}
details.help summary::after{content:'▾';margin-left:auto;color:var(--dim)}
details.help[open] summary::after{content:'▴'}
details.help p{margin:2px 0 0;line-height:1.65;font-size:14px}
details.help b{color:var(--acc)}

/* =====================================================================
   ✨ UI 2.0 — 동화책 같은 크림 종이 + 나무 테두리로 통일 (2026-10)
   (배틀 HP 카드 · 대화창과 같은 톤. 위의 기존 규칙을 덮어쓴다)
   ===================================================================== */
:root{--cream:#fdf6e3;--cream2:#f5e8c6;--paper:#fffaf0;--pline:#e4d2a4;--wood:#8b5a2b;--woodd:#5a3818;--woodl:#c4894a;--brown:#3d2814;--brown2:#8a6644;--gold:#e8a92a;--leaf:#4fae55;--leafd:#2f7d36;--berry:#e0566e}
@keyframes uiPop{from{transform:scale(.94) translateY(8px);opacity:0}to{transform:none;opacity:1}}

/* --- 창(모달): 크림 종이 + 나무 액자 --- */
#modal{background:rgba(24,16,40,.62);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px)}
#modal:not(.hidden) #mbox{animation:uiPop .2s cubic-bezier(.2,1.2,.4,1)}
#mbox{--ink:var(--brown);--dim:var(--brown2);--panel2:var(--paper);--acc:#c0701a;--ok:var(--leaf);--line:var(--woodd);
  color:var(--brown);clip-path:none;border-radius:16px;padding:16px 14px;
  background:radial-gradient(circle at 20% 0%,#fffdf5 0,transparent 60%),repeating-linear-gradient(0deg,transparent 0 23px,rgba(180,140,80,.07) 23px 24px),var(--cream);
  box-shadow:0 0 0 3px var(--woodd),0 0 0 7px var(--woodl),0 0 0 10px var(--woodd),0 18px 40px rgba(0,0,0,.55)}
#modal{padding:16px}
#mbox h2{color:var(--brown);font-size:18px}
#mbox>h2:first-child{position:sticky;top:-16px;z-index:3;margin:-16px -14px 2px;padding:12px 14px 12px 16px;border-radius:12px 13px 0 0;
  background:linear-gradient(#b07a42,#8b5a2b 55%,#7a4c22);color:#fff4dc;text-shadow:0 2px 0 #4a2c10;box-shadow:inset 0 -3px 0 #5a3818,inset 0 2px 0 #d9a468}
#mbox h3{color:var(--wood);font-size:14px;margin:8px 2px 0;display:flex;align-items:center;gap:8px}
#mbox h3::after{content:"";flex:1;height:2px;background:linear-gradient(90deg,var(--pline),transparent)}
#mbox .row{clip-path:none;background:var(--paper);border-radius:12px;border:2px solid var(--pline);box-shadow:0 3px 0 #e2cd98;padding:10px}
#mbox .row .info small{color:var(--brown2);line-height:1.45}
#mbox .cell{clip-path:none;background:var(--paper);border-radius:12px;border:2px solid var(--pline);box-shadow:0 3px 0 #e2cd98;color:var(--brown)}
#mbox .cell.pick{border-color:var(--gold);box-shadow:0 0 0 3px #ffd77a,0 3px 0 #e2cd98}
#mbox .hbar,#mbox .xbar{height:9px;background:#eadfc4;border-radius:8px;box-shadow:inset 0 0 0 1px #cdb685;overflow:hidden}
#mbox .hbar i{border-radius:8px;background:linear-gradient(#7fdc6a,#43a84a)}
#mbox input,#mbox textarea,#mbox select{background:#fffdf7;color:var(--brown);border:2px solid var(--woodl);box-shadow:inset 0 2px 0 #f0e2c0;border-radius:12px}
/* 창 안의 버튼: 둥글고 통통하게, 누르면 쏙 */
#mbox button{clip-path:none;border-radius:12px;color:#4a2a08;font-weight:800;background:linear-gradient(#ffe39a,#f5b844);border:2px solid #a8681c;box-shadow:0 3px 0 #a8681c,inset 0 2px 0 rgba(255,255,255,.65);transition:transform .06s,box-shadow .06s}
#mbox button:active{transform:translateY(2px);box-shadow:0 1px 0 #a8681c,inset 0 2px 0 rgba(255,255,255,.65);filter:none}
#mbox button:disabled{background:#e6dcc6;border-color:#bfae8a;color:#9a8a6a;box-shadow:0 2px 0 #bfae8a;filter:none;opacity:1}
#mbox .close{background:linear-gradient(#a8703a,#7a4c22);color:#fff4dc;border-color:#4a2c10;box-shadow:0 3px 0 #4a2c10,inset 0 2px 0 #d9a468;text-shadow:0 1px 0 #4a2c10}
#mbox .primary,#mbox .bigbtn,#mbox button.go{background:linear-gradient(#8fe07a,#4fae55);border-color:#2f7d36;color:#fff;text-shadow:0 1px 0 #2f7d36;box-shadow:0 3px 0 #2f7d36,inset 0 2px 0 rgba(255,255,255,.5)}
#mbox .tabs button{background:#f1e2bd;border-color:#cfb57c;color:var(--brown2);box-shadow:0 2px 0 #cfb57c}
#mbox .tabs button.on{background:linear-gradient(#a8703a,#7a4c22);color:#fff4dc;border-color:#4a2c10;box-shadow:0 2px 0 #4a2c10,inset 0 2px 0 #d9a468}
#mbox details.help{clip-path:none;background:var(--paper);border-radius:12px;border:2px solid var(--pline)}
#mbox details.help b{color:#c0701a}
#mbox .chap div,#mbox .badges span,#mbox .stamp{clip-path:none;border-radius:12px;background:var(--paper);border:2px solid var(--pline);color:var(--brown)}
#mbox .stamp.on{border-color:var(--leaf)}#mbox .stamp.next{border-color:var(--gold)}
#mbox .cpl{clip-path:none;border-radius:12px;color:#fff;box-shadow:0 3px 0 #4a2050}
#mbox .tag{border-radius:8px;box-shadow:inset 0 -2px 0 rgba(0,0,0,.18)}

/* --- 가방: 아이콘 카드 · 분류 탭 --- */
.bagtabs{display:flex;gap:6px;overflow-x:auto;padding:2px 2px 6px;scrollbar-width:none}.bagtabs::-webkit-scrollbar{display:none}
.bagtabs button{flex:none;min-height:44px;padding:6px 12px;font-size:14px}
#mbox .bagtabs button{background:#f1e2bd;border-color:#cfb57c;color:var(--brown2);box-shadow:0 2px 0 #cfb57c}
#mbox .bagtabs button.on{background:linear-gradient(#a8703a,#7a4c22);color:#fff4dc;border-color:#4a2c10;box-shadow:0 2px 0 #4a2c10}
.bagtabs button em{font-style:normal;font-size:11px;opacity:.75;margin-left:3px}
.itrow .ic{width:52px;height:52px;flex:none;display:flex;align-items:center;justify-content:center;font-size:28px;border-radius:12px;background:radial-gradient(circle at 35% 30%,#fff,#f0e2bd);border:2px solid var(--pline);position:relative}
.itrow .ic.gold{background:radial-gradient(circle at 35% 30%,#fffbe0,#ffd560);border-color:#e8a92a;box-shadow:0 0 10px #ffd56088}
.itrow .ic b{position:absolute;right:-7px;bottom:-7px;min-width:24px;height:22px;padding:0 5px;border-radius:12px;background:var(--woodd);color:#fff4dc;font-size:12px;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 2px var(--cream)}
.itrow .info b{font-size:14px}
.itrow .info small{display:-webkit-box!important;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.itrow .btns small{color:var(--brown2);font-size:12px;text-align:right;max-width:84px;line-height:1.3}
.bagnote{background:#fff3c4;border:2px dashed #e8a92a;border-radius:12px;padding:8px 10px;font-size:14px;color:#8a4a10;text-align:center}

/* --- 내 몬스터: 카드 --- */
.moncard{display:flex;flex-direction:column;gap:8px;background:var(--paper);border-radius:12px;border:2px solid var(--pline);box-shadow:0 3px 0 #e2cd98;padding:10px;position:relative;overflow:hidden}
.moncard.faint{opacity:.75;filter:saturate(.6)}
.moncard .top{display:flex;gap:12px;align-items:center}
.moncard .pic{width:76px;height:76px;flex:none;border-radius:12px;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 70%,rgba(255,255,255,.9),transparent 70%),var(--tc,#ddd);box-shadow:inset 0 0 0 2px rgba(0,0,0,.12),inset 0 -6px 0 rgba(0,0,0,.08)}
.moncard .pic canvas{width:64px!important;height:64px!important}
.moncard .nm{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.moncard .nm b{font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.moncard .nm b small{font-size:12px;color:var(--brown2)}
.moncard .lv{font-size:14px;font-weight:800;color:var(--wood)}
.moncard .bars{display:grid;grid-template-columns:auto 1fr auto;gap:4px 6px;align-items:center;font-size:11px;font-weight:800;color:var(--brown2)}
.moncard .bars .hbar{margin:0}
.moncard .bars .xbar i{display:block;height:100%;background:linear-gradient(#8fc8ff,#4a98e8);border-radius:8px}
.moncard .mvs{display:grid;grid-template-columns:1fr 1fr;gap:4px}
.moncard .mvs span{font-size:12px;font-weight:800;padding:5px 8px;border-radius:8px;color:#fff;text-shadow:0 1px 0 rgba(0,0,0,.35);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;box-shadow:inset 0 -2px 0 rgba(0,0,0,.2)}
.moncard .chips2{display:flex;flex-wrap:wrap;gap:4px}
.moncard .chips2 span{font-size:11px;padding:3px 7px;border-radius:999px;background:#f3e6c4;color:var(--brown);border:1px solid #dcc58e}
.moncard details{font-size:12px;color:var(--brown2);line-height:1.55}
.moncard details summary{cursor:pointer;font-weight:800;color:var(--wood);min-height:30px;display:flex;align-items:center;list-style:none}
.moncard details summary::-webkit-details-marker{display:none}
.moncard details summary::after{content:" ▾"}.moncard details[open] summary::after{content:" ▴"}
.moncard .acts{display:flex;gap:6px;flex-wrap:wrap}
.moncard .acts button{flex:1;min-width:64px;min-height:44px;font-size:14px;padding:6px 8px}
.moncard .shinyb{position:absolute;top:8px;right:10px;font-size:18px;animation:beat 1.4s infinite}

/* --- HUD: 위쪽 --- */
#money,#duobadge,#wchip{clip-path:none;border-radius:999px;background:linear-gradient(#fffaf0,#f3e3bb);color:#7a4510;box-shadow:0 0 0 2px var(--woodd),0 3px 0 var(--woodd);padding:4px 12px}
#wchip{color:#2a5a8a}
#duobadge{color:#c0306a}
#menubtns button{clip-path:none;border-radius:12px;background:linear-gradient(#fffaf0,#f1deb0);color:var(--brown);border:2px solid var(--woodd);box-shadow:0 3px 0 var(--woodd),inset 0 2px 0 #fff;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;height:50px;line-height:1}
#menubtns button i{font-style:normal;font-size:20px;line-height:1}
#menubtns button span{font-size:11px;font-weight:800;letter-spacing:-.5px;white-space:nowrap}
#menubtns button:active{transform:translateY(2px);box-shadow:0 1px 0 var(--woodd),inset 0 2px 0 #fff;filter:none}
.pchip{clip-path:none;border-radius:12px;background:rgba(255,248,226,.92);box-shadow:0 0 0 2px var(--woodd),0 2px 0 var(--woodd);padding:2px 2px 3px}
.pchip .hb{height:5px;border-radius:4px;background:#d8c8a4;margin:1px 2px 0}.pchip .hb i{border-radius:4px}
#objective{clip-path:none;border-radius:12px;background:linear-gradient(#fffaf0,#f5e6c0);color:var(--brown);box-shadow:0 0 0 2px var(--woodd),0 3px 0 var(--woodd);padding:6px 12px}
#objective small{color:#b0601a;font-weight:800}
#toast{clip-path:none;border-radius:12px;background:linear-gradient(#fffaf0,#f5e6c0);color:var(--brown);box-shadow:0 0 0 2px var(--woodd),0 4px 0 var(--woodd),0 10px 24px rgba(0,0,0,.35);transition:opacity .25s,margin-top .25s;margin-top:-8px}
#toast.on{margin-top:0}
#banner{clip-path:none;border-radius:16px;background:linear-gradient(#fffaf0,#f7e3a8);color:var(--brown);box-shadow:0 0 0 3px var(--woodd),0 0 0 6px var(--gold),0 0 0 8px var(--woodd),0 12px 28px rgba(0,0,0,.45)}
#banner b{color:#b0601a}#banner small{color:var(--brown)}
#banner.ach{box-shadow:0 0 0 3px var(--woodd),0 0 0 6px var(--gold),0 0 0 8px var(--woodd),0 12px 28px rgba(0,0,0,.45)}
#banner.clv{box-shadow:0 0 0 3px var(--woodd),0 0 0 6px #ff8ab8,0 0 0 8px var(--woodd),0 12px 28px rgba(0,0,0,.45)}
#chatlog div{border-radius:12px;background:rgba(20,14,36,.58);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);padding:3px 9px}
#chatlog .sys{color:#ffe08a;background:rgba(60,36,10,.62)}
#ask{clip-path:none;border-radius:16px;background:var(--cream);color:var(--brown);box-shadow:0 0 0 3px var(--woodd),0 0 0 6px #ff8ab8,0 0 0 8px var(--woodd),0 12px 28px rgba(0,0,0,.45)}
#ask button{clip-path:none;border-radius:12px;color:#4a2a08;background:linear-gradient(#ffe39a,#f5b844);border:2px solid #a8681c;box-shadow:0 3px 0 #a8681c}
#dpad button,#abtn{clip-path:none;border-radius:12px;background:rgba(255,248,226,.85);color:var(--woodd);border:2px solid var(--woodd);box-shadow:0 3px 0 var(--woodd)}
#abtn{border-radius:50%;background:linear-gradient(#ff8aa0,#e0566e);color:#fff;border-color:#8a2238;box-shadow:0 4px 0 #8a2238}
#chatbar button,#chatbtn{clip-path:none;border-radius:12px;background:rgba(255,248,226,.92);color:var(--brown);border:2px solid var(--woodd);box-shadow:0 3px 0 var(--woodd)}
#chatbar input{border-radius:12px;background:rgba(20,14,36,.75);border:2px solid var(--woodd);box-shadow:none}
#emojis{border-radius:12px;background:rgba(255,248,226,.95);box-shadow:0 0 0 2px var(--woodd)}
#emojis button img{width:28px;height:26px;image-rendering:pixelated;display:block}
#emojis button{padding:6px 8px;clip-path:none;border-radius:12px;background:#fff;border:2px solid var(--pline);box-shadow:0 2px 0 var(--pline)}

/* --- 대화창: 이름표가 붙은 나무 액자 --- */
#dlg{clip-path:none;border-radius:16px;background:radial-gradient(circle at 15% 0,#fffdf5,transparent 55%),var(--cream);box-shadow:0 0 0 3px var(--woodd),0 0 0 7px var(--woodl),0 0 0 10px var(--woodd),0 14px 30px rgba(0,0,0,.45);padding:16px 16px 18px}
#dlgface{border-radius:12px;background:radial-gradient(circle at 50% 70%,#fff,#efe0b6);box-shadow:0 0 0 2px var(--woodd),0 3px 0 var(--woodd)}
#dlgname{align-self:flex-start;background:linear-gradient(#b07a42,#7a4c22);color:#fff4dc;padding:2px 12px;border-radius:999px;font-size:14px;box-shadow:0 2px 0 #4a2c10;text-shadow:0 1px 0 #4a2c10}
#dlgname:empty{display:none}
#dlgtext{color:var(--brown)}
#dlgopts button{clip-path:none;border-radius:12px;color:#4a2a08;background:linear-gradient(#ffe39a,#f5b844);border:2px solid #a8681c;box-shadow:0 3px 0 #a8681c,inset 0 2px 0 rgba(255,255,255,.65)}
#dlgopts button:active{transform:translateY(2px);box-shadow:0 1px 0 #a8681c}
#dlgopts input{border-radius:12px;border:2px solid var(--woodl);box-shadow:none}

/* --- 배틀 아래 패널: 나무 판 + 크림 메시지 --- */
#bbox{--dim:#8a6644;background:linear-gradient(#80532a,#5e3b1a);box-shadow:inset 0 4px 0 var(--gold),inset 0 7px 0 var(--woodd)}
#btext{clip-path:none;border-radius:12px;background:var(--cream);color:var(--brown);box-shadow:inset 0 0 0 2px var(--woodl),0 3px 0 var(--woodd)}
#bmenu button{clip-path:none;border-radius:12px;background:linear-gradient(#fffaf0,#f1deb0);color:var(--brown);border:2px solid var(--woodd);box-shadow:0 3px 0 var(--woodd),inset 0 2px 0 #fff}
#bmenu button:active{transform:translateY(2px);box-shadow:0 1px 0 var(--woodd);filter:none}
#bmenu button small{color:var(--brown2)}
#bmenu .mv{border-left-width:10px}
#bmenu > div{color:#f5e6c0}
.hpcard{clip-path:none;border-radius:12px}

/* --- 로그인 · 연결 끊김 · 낚시 --- */
#login .card,#net .box{clip-path:none;border-radius:16px;background:var(--cream);color:var(--brown);box-shadow:0 0 0 3px var(--woodd),0 0 0 7px var(--woodl),0 0 0 10px var(--woodd),0 20px 50px rgba(0,0,0,.6)}
#login .sub,#login .tip{color:var(--brown2)}
#login input{border-radius:12px;background:#fffdf7;color:var(--brown);border:2px solid var(--woodl);box-shadow:inset 0 2px 0 #f0e2c0}
#login button,#net button{clip-path:none;border-radius:12px;background:linear-gradient(#8fe07a,#4fae55);color:#fff;border:2px solid #2f7d36;box-shadow:0 4px 0 #2f7d36,inset 0 2px 0 rgba(255,255,255,.5);text-shadow:0 1px 0 #2f7d36}
#fishgame{clip-path:none;border-radius:16px;background:var(--cream);color:var(--brown)}
#fishgame .fbar{border-radius:12px;overflow:hidden}

/* UI 2.0 보정: 창 안 칸이 눌리지 않게 · 작은 폰 위쪽 줄 여유 · 채팅 줄 작게 */
#mbox>*{flex-shrink:0}
.pchip{width:38px}.pchip canvas{width:32px;height:32px}#partybar{gap:4px}
#money{padding:3px 10px}
#chatlog{max-width:min(300px,64vw)}
#chatlog div{font-size:12px;line-height:1.35}
@media (max-width:520px){#money{font-size:14px;padding:3px 9px}#wchip{padding:3px 9px}}
@media (max-width:380px){#money{font-size:14px;padding:2px 7px}.pchip{width:36px}.pchip canvas{width:30px;height:30px}}
#chatlog{max-width:min(300px,calc(100vw - 190px))}

/* 🎒 도트 아이템 아이콘 */
img.pix{image-rendering:pixelated;image-rendering:crisp-edges;display:block}
.itrow .ic img{width:40px;height:40px}
#bmenu .it{position:relative;padding-left:46px!important}
#bmenu .it img.bi{position:absolute;left:8px;top:50%;width:32px;height:32px;transform:translateY(-50%)}

/* 🔍 ui-lint 보정: 대비 · 탭 감싸기 */
.moncard .mvs span{text-shadow:none}
.bagtabs{flex-wrap:wrap;overflow:visible}
#mbox button:disabled{color:#6e5e40}
#mbox .primary,#mbox .bigbtn,#mbox button.go,#login button,#net button{background:linear-gradient(#3d9a42,#2a7a30);border-color:#1e5a22;box-shadow:0 3px 0 #1e5a22,inset 0 2px 0 rgba(255,255,255,.35);text-shadow:0 1px 0 #1e5a22}

/* 업적·시스템 알림 줄은 한 줄로 짧게 (자세한 건 금색 배너로) */
#chatlog .sys{display:-webkit-box!important;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden;font-size:11px;padding:2px 8px}
#chatlog .sys:nth-last-child(n+3){display:none!important}

/* 🎭 외모 꾸미기 */
.lookedit{display:flex;flex-direction:column;gap:8px}
.lookprev{display:flex;justify-content:center;gap:6px;background:radial-gradient(circle at 50% 80%,#e8f4d8,#cfe6b8);border-radius:12px;border:2px solid var(--pline);padding:6px}
.lookprev canvas{width:64px;height:88px;image-rendering:pixelated}
.lookrows{display:grid;grid-template-columns:1fr;gap:6px}
.lrow{display:grid;grid-template-columns:1fr 44px minmax(84px,auto) 44px;align-items:center;gap:6px;background:var(--paper);border:2px solid var(--pline);border-radius:12px;padding:4px 6px}
.lrow>span:first-child{font-size:14px;font-weight:800;color:var(--brown2)}
.lrow button{min-height:44px;padding:0}
.lrow .lv{text-align:center;font-size:14px;color:var(--brown)}
.lrow .sw{display:inline-block;width:28px;height:20px;border-radius:8px;box-shadow:inset 0 0 0 2px rgba(0,0,0,.25);vertical-align:middle}
.lookpre{display:grid;grid-template-columns:repeat(5,1fr);gap:6px}.lookpre button{min-height:44px;padding:4px 2px;font-size:12px}
@media (min-width:600px){.lookrows{grid-template-columns:1fr 1fr}}

/* 꾸미기: 아래 줄을 바꿀 때도 미리보기가 보이게 위에 고정 */
#mbox .lookprev{position:sticky;top:46px;z-index:2;box-shadow:0 6px 10px rgba(61,40,20,.18)}

/* ⏩ 배틀 배속 · 🤖 자동 */
#bctl{position:absolute;right:8px;top:calc(8px + 64px);display:flex;gap:6px;z-index:3}
#bctl button{min-width:64px;min-height:40px;padding:4px 8px;font-size:14px;border-radius:12px;background:rgba(255,248,232,.92);border:2px solid #5a3a22;color:#3a2410;font-weight:bold;box-shadow:0 2px 0 rgba(0,0,0,.25)}
#bctl button.on{background:#ffd84a;border-color:#7a4a10}
#bctl button:disabled{opacity:.45}
/* 💌 초대 */
#login .invite{margin:4px 0 8px;padding:8px 10px;border-radius:12px;background:#fff2d8;border:2px dashed #e0a050;font-size:14px;color:#6a3a10}
/* 👥 친구 목록: 이름이 버튼에 밀려 세로로 찌그러지지 않게 버튼은 아랫줄로 */
.row.prow{flex-wrap:wrap}
.row.prow .info{flex:1 1 100%}
.row.prow .btns{flex:1 1 100%;justify-content:flex-end}

/* 🗺️ 보물 지도 나침반 */
#tmapchip{position:fixed;left:8px;top:calc(env(safe-area-inset-top,0px) + 112px);z-index:6;padding:6px 10px;border-radius:12px;background:rgba(255,244,214,.95);border:2px solid #8a5a22;color:#5a2a08;font-weight:bold;font-size:14px;box-shadow:0 2px 0 rgba(0,0,0,.25);pointer-events:none}

/* 👥 파티원 카드 */
#partycard{position:fixed;left:8px;top:calc(env(safe-area-inset-top,0px) + 168px);z-index:6;width:156px;padding:6px 8px;border-radius:12px;background:rgba(255,248,232,.95);border:2px solid #c8507a;color:#4a1a2a;box-shadow:0 2px 0 rgba(0,0,0,.25)}
#partycard .pc-top{display:flex;align-items:center;gap:6px}
#partycard b{font-size:14px;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#partycard .pc-hp{display:block;width:44px;height:6px;border-radius:4px;background:#0002;overflow:hidden}
#partycard .pc-hp s{display:block;height:100%;background:#4ade80;text-decoration:none}
#partycard .pc-hp.low s{background:#f87171}
#partycard small{display:block;font-size:11px;margin:2px 0 4px;color:#7a3a4a}
#partycard .pc-btns{display:flex;gap:4px}
#partycard .pc-btns button{flex:1;min-height:40px;font-size:12px;padding:2px 4px;border-radius:12px;background:#ffd8e8;border:2px solid #c8507a;color:#5a1a2a;font-weight:bold}
#partycard .pc-btns button:disabled{opacity:.45}
#partycard .pc-btns button{line-height:1.15;font-size:11px;min-height:44px}
#partycard .pc-btns button.on{background:#ffd84a;border-color:#c88a00;color:#4a3000}
#partycard .pc-catch{display:block;width:100%;margin-top:4px;min-height:44px;height:auto;line-height:1.3;font-size:11px;padding:4px 4px;border-radius:12px;background:#fff1c8;border:2px solid #d8a020;color:#5a3a00;font-weight:bold}
#partycard .pc-catch.hidden{display:none}
#partycard .pc-catch small{display:block;font-size:11px;font-weight:normal;margin:1px 0 0;color:#7a5a20;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 💞 하트 싱크 */
#syncgame{position:fixed;inset:0;z-index:60;background:rgba(40,10,30,.55);display:flex;align-items:center;justify-content:center;touch-action:none}
#syncgame.hidden{display:none}
#syncgame .sg-box{width:min(92vw,360px);background:#fff4f8;border:4px solid #c8507a;border-radius:16px;padding:12px;text-align:center;box-shadow:0 6px 0 rgba(0,0,0,.25)}
#syncgame .sg-top{font-weight:bold;color:#7a1838;font-size:14px}
#syncgame canvas{width:100%;height:auto;display:block}
#syncgame .sg-msg{min-height:44px;font-size:14px;color:#5a1a2a;font-weight:bold}
#syncgame .sg-msg small{font-weight:normal}
#syncgame .sg-btns button{min-height:44px;min-width:120px;margin-top:6px}
#partycard .pc-dm{display:block;font-style:normal;font-size:11px;margin-top:4px;color:#a0305a;font-weight:bold}

/* 🏡 보금자리 */
.hmats span{display:inline-flex;align-items:center;gap:2px;margin-right:6px;font-size:12px}
.hmats span img.pix{width:16px;height:16px}
.hmats span.ok{color:#2f7d36}.hmats span.no{color:#c0505a}

/* 🚲 자전거 버튼 */
#bikebtn{position:fixed;left:calc(env(safe-area-inset-left,0px) + 120px);bottom:calc(env(safe-area-inset-bottom,0px) + 14px);width:52px;height:52px;border-radius:16px;font-size:24px;background:#fff8e8;border:3px solid #8a5a22;box-shadow:0 3px 0 rgba(0,0,0,.25);z-index:7}
#bikebtn.on{background:#ffd84a}

/* ================= 🎛️ UI 3.0 — 도톰한 도트 버튼 · 겹침 정리 (2026-10) ================= */
:root{--bf1:#fffaf0;--bf2:#f0dbab;--bedge:#4a2c14;--bdeep:#2e1a0a}
.uic{width:32px;height:32px;image-rendering:pixelated;display:block;pointer-events:none}
/* 공통 도톰 버튼: 테두리 + 아래 두께 + 위 하이라이트, 누르면 쑥 들어간다 */
#menubtns button,#chatbar button,#chatbtn,#actbtns button,#partycard .pc-btns button,#partycard .pc-catch,#bctl button{
  clip-path:none;border:2.5px solid var(--bedge);border-radius:12px;background:linear-gradient(180deg,var(--bf1) 0%,var(--bf1) 45%,var(--bf2) 100%);
  color:#3d2814;box-shadow:inset 0 2px 0 #fff,inset 0 -3px 0 rgba(150,100,40,.28),0 3.5px 0 var(--bdeep),0 5px 6px rgba(20,8,0,.25);
  transition:transform .06s,box-shadow .06s;-webkit-tap-highlight-color:transparent}
#menubtns button:active,#chatbar button:active,#chatbtn:active,#actbtns button:active,#partycard .pc-btns button:active,#partycard .pc-catch:active,#bctl button:active{
  transform:translateY(3px);box-shadow:inset 0 2px 0 #fff,inset 0 -2px 0 rgba(150,100,40,.28),0 .5px 0 var(--bdeep),0 1px 2px rgba(20,8,0,.2);filter:none}
/* 위쪽 메뉴: 아이콘 + 이름, 꾸미기는 아래로 옮겨서 언제나 6개 */
#hud,#hud:has(#decorbtn:not(.hidden)){--n:6}
#menubtns{gap:4px;right:6px}
#menubtns button{width:clamp(36px,calc((100vw - 112px - 25px) / 6),46px);height:54px;padding:3px 0 2px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px}
#menubtns button i{display:block;line-height:0}
#menubtns button i .uic{width:32px;height:32px}
#menubtns button span{font-size:11px;font-weight:800;letter-spacing:-.6px;color:#4a2c14;text-shadow:0 1px 0 #fff}
/* 날씨 칩은 메뉴 아래로 (설정 버튼과 겹치지 않게) */
#wchip{position:fixed;right:8px;top:calc(70px + env(safe-area-inset-top));font-size:12px;padding:3px 10px}
@media (max-width:520px){#objective{top:calc(104px + env(safe-area-inset-top));max-width:calc(100vw - 136px)}#toast{top:calc(172px + env(safe-area-inset-top))}}
/* 아래쪽: 왼쪽은 채팅·이모티콘, 오른쪽은 행동 버튼(자전거·꾸미기) — 채팅 기록과 겹치지 않게 */
#chatbar button,#chatbtn{width:52px;height:52px;padding:0;display:flex;align-items:center;justify-content:center}
#chatbar button .uic,#chatbtn .uic{width:32px;height:32px}
#actbtns{position:fixed;right:calc(8px + env(safe-area-inset-right,0px));bottom:calc(12px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column-reverse;gap:12px;pointer-events:none;z-index:6}
#actbtns button{pointer-events:auto;width:58px;height:58px;padding:2px 0 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;font-size:11px;font-weight:800}
#actbtns button.hidden{display:none}
#actbtns button i{display:block;line-height:0;font-style:normal}
#actbtns button span{font-size:11px;letter-spacing:-.5px;color:#4a2c14}
#actbtns #bikebtn{position:static;width:58px;height:58px;border-radius:12px;font-size:11px}
#actbtns #bikebtn.on{background:linear-gradient(180deg,#fff6c0,#ffd84a);border-color:#7a4a10}
body.lefty #actbtns{right:auto;left:calc(8px + env(safe-area-inset-left,0px))}
#hud:has(#dlg:not(.hidden)) #actbtns,body:has(#modal.sheet) #actbtns{display:none}
/* 👥 파티 카드: 작게 · 머리를 누르면 접힘 */
#partycard{width:150px;padding:6px 7px 7px;border-radius:12px;border:2.5px solid #b8406a;box-shadow:0 3px 0 #6a1a3a,0 5px 8px rgba(40,0,20,.25);background:linear-gradient(#fffaf4,#ffeef2)}
#partycard .pc-top{cursor:pointer}
#partycard .pc-fold{text-decoration:none;font-size:11px;color:#b8406a;transition:transform .15s}
#partycard.fold .pc-fold{transform:rotate(-90deg)}
#partycard.fold :is(.pc-btns,.pc-catch,.pc-dm){display:none!important}
#partycard small{margin:1px 0 5px;font-size:11px}
#partycard .pc-btns{gap:4px}
#partycard .pc-btns button{flex:1;min-height:0;height:50px;padding:2px 0 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:0;font-size:11px;border-color:#8a3050;background:linear-gradient(180deg,#fff 0%,#fff 40%,#ffd8e6 100%);box-shadow:inset 0 2px 0 #fff,0 3px 0 #5a1a32,0 4px 5px rgba(40,0,20,.2)}
#partycard .pc-btns button .uic{width:28px;height:28px}
#partycard .pc-btns button span{font-size:11px;font-weight:800;color:#6a1a3a;line-height:1.1}
#partycard .pc-btns button.on{background:linear-gradient(180deg,#fff8c8,#ffd84a);border-color:#8a5a00;box-shadow:inset 0 2px 0 #fff,0 3px 0 #5a3a00}
#partycard .pc-btns button:disabled{opacity:.42;filter:grayscale(.5)}
#partycard .pc-catch{display:flex;align-items:center;gap:4px;text-align:left;padding:4px 6px;margin-top:6px;min-height:46px;border-color:#a8701a;background:linear-gradient(180deg,#fffbe8,#ffe7a8);box-shadow:inset 0 2px 0 #fff,0 3px 0 #6a4200}
#partycard .pc-catch .uic{width:28px;height:28px;flex:none}
#partycard .pc-catch span{font-size:11px;font-weight:800;color:#5a3a00;line-height:1.2;min-width:0}
#partycard .pc-catch.hidden{display:none}
/* ⚔️ 배틀: 색깔 있는 큰 버튼 (싸운다 빨강 · 가방 노랑 · 몬스터 초록 · 도망 파랑) */
#bmenu .bm{display:flex;align-items:center;justify-content:center;gap:12px;border:3px solid var(--bm-e);border-radius:16px;color:#fff;
  background:linear-gradient(180deg,var(--bm-1) 0%,var(--bm-1) 42%,var(--bm-2) 100%);
  box-shadow:inset 0 3px 0 rgba(255,255,255,.55),inset 0 -5px 0 rgba(0,0,0,.16),0 5px 0 var(--bm-d),0 7px 8px rgba(20,8,0,.3);padding:6px 10px}
#bmenu .bm b{font-size:20px;letter-spacing:-.5px;text-shadow:-2px 0 0 var(--bm-d),2px 0 0 var(--bm-d),0 -2px 0 var(--bm-d),0 2px 0 var(--bm-d),2px 2px 0 var(--bm-d)}
#bmenu .bm .bic{width:40px;height:40px;image-rendering:pixelated;filter:drop-shadow(0 2px 0 rgba(0,0,0,.25))}
#bmenu .bm:active{transform:translateY(4px);box-shadow:inset 0 3px 0 rgba(255,255,255,.55),inset 0 -3px 0 rgba(0,0,0,.16),0 1px 0 var(--bm-d)}
#bmenu .bm:disabled{filter:grayscale(.85) brightness(.95);opacity:.6}
#bmenu .bm.red{--bm-1:#ff7a66;--bm-2:#e8433a;--bm-e:#7a1414;--bm-d:#5a0e0e}
#bmenu .bm.gold{--bm-1:#ffd970;--bm-2:#f0a92a;--bm-e:#7a4a06;--bm-d:#5a3404}
#bmenu .bm.green{--bm-1:#86dd6e;--bm-2:#3fae4b;--bm-e:#1a5a22;--bm-d:#0f3e16}
#bmenu .bm.blue{--bm-1:#86c0ff;--bm-2:#3f84ea;--bm-e:#173a7a;--bm-d:#0e2856}
#bctl{gap:8px}
#bctl button{min-width:0;min-height:40px;height:42px;padding:2px 10px 0 4px;display:flex;align-items:center;gap:2px;font-size:14px;font-weight:800;border-radius:12px}
#bctl button .uic{width:28px;height:28px}
#bctl button.on{background:linear-gradient(180deg,#fff8c8,#ffd84a);border-color:#7a4a10}
body:not(.touchctl) #actbtns{bottom:calc(262px + env(safe-area-inset-bottom,0px))}
/* 기술·몬스터·가방 고르기 버튼도 같은 도톰한 모양 */
#bmenu button:not(.bm){border:2.5px solid var(--bedge);border-radius:12px;background:linear-gradient(180deg,#fffdf6 0%,#fffaf0 45%,#f0dbab 100%);box-shadow:inset 0 2px 0 #fff,inset 0 -3px 0 rgba(150,100,40,.25),0 4px 0 var(--bdeep),0 6px 6px rgba(20,8,0,.25)}
#bmenu button:not(.bm):active{transform:translateY(3px);box-shadow:inset 0 2px 0 #fff,0 1px 0 var(--bdeep)}
#bmenu .mv{border-left-width:12px!important;font-size:16px}
/* ⚔️ 합동 토벌 칩 (오른쪽, 목표 아래) · 참가 버튼(빨강) */
#huntchip{position:fixed;right:8px;top:calc(env(safe-area-inset-top,0px) + 168px);z-index:6;width:172px;padding:5px 9px 6px;text-align:left;display:flex;flex-direction:column;gap:1px;clip-path:none;border-radius:12px;border:2.5px solid #7a1414;background:linear-gradient(180deg,#fff4ee,#ffd9cc);color:#5a0e0e;box-shadow:0 3px 0 #4a0a0a,0 5px 8px rgba(40,0,0,.3);pointer-events:auto;animation:huntpulse 2.4s ease-in-out infinite}
#huntchip.hidden{display:none}
#huntchip b{font-size:14px}
#huntchip span{font-size:11px;font-weight:700}
#huntchip i{display:block;height:7px;border-radius:4px;background:#5a1a1a;overflow:hidden;margin:2px 0}
#huntchip i s{display:block;height:100%;background:linear-gradient(90deg,#ff7a4a,#ff3a3a);text-decoration:none}
#huntchip small{font-size:11px;color:#8a3a2a}
@keyframes huntpulse{0%,100%{box-shadow:0 3px 0 #4a0a0a,0 5px 8px rgba(40,0,0,.3)}50%{box-shadow:0 3px 0 #4a0a0a,0 0 0 4px rgba(255,90,60,.35),0 5px 8px rgba(40,0,0,.3)}}
#actbtns #huntjoin{width:72px;height:72px;border-color:#7a1414;color:#fff;background:linear-gradient(180deg,#ff8a6a 0%,#ff7a66 40%,#e8433a 100%);box-shadow:inset 0 3px 0 rgba(255,255,255,.5),0 4px 0 #5a0e0e,0 6px 8px rgba(40,0,0,.3)}
#actbtns #huntjoin span{color:#fff;font-size:11px;text-shadow:0 1px 0 #5a0e0e,1px 0 0 #5a0e0e,-1px 0 0 #5a0e0e}
#hud:has(#partycard:not(.hidden)) #huntchip{top:calc(env(safe-area-inset-top,0px) + 168px)}
#chatlog,body.touchctl #chatlog{bottom:calc(72px + env(safe-area-inset-bottom))}
/* 겹침·대비 다듬기: 선두 몬스터 칸은 메뉴 아래로 · 배틀 버튼 글씨는 진한 색 + 흰 윤기 (글자 대비) */
@media (max-width:520px){#duobadge.hidden + #partybar,#partybar{margin-top:28px}#tmapchip{top:calc(env(safe-area-inset-top,0px) + 120px)}#partycard{top:calc(env(safe-area-inset-top,0px) + 172px)}}
#bmenu .bm b{color:var(--bm-d);text-shadow:0 2px 0 rgba(255,255,255,.5)}
@media (max-width:520px){#objective{top:calc(118px + env(safe-area-inset-top))}#huntchip{top:calc(env(safe-area-inset-top,0px) + 186px)}#toast{top:calc(186px + env(safe-area-inset-top))}}
/* 🌅 시작 이야기 · 🗺️ 마을 지도 */
.prologue{margin:4px 0 10px;padding:9px 12px;border-radius:12px;background:#fff6dc;border:2px dashed #e0b050;color:#5a3a10;font-size:14px;line-height:1.5}
.tmapbox{position:relative;margin:0 auto 8px;border-radius:12px;overflow:hidden;border:3px solid var(--woodd,#5a3818);box-shadow:0 3px 0 #3d2814;background:#6dbb4f}
.tmapbox canvas{display:block}
.maplegend{margin:0 0 6px;padding:6px 10px;border-radius:10px;background:rgba(61,40,20,.08);font-size:13px;line-height:1.55;word-break:keep-all}
.rumors{display:flex;flex-direction:column;gap:4px;margin:0 0 8px}
.rumor{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:10px;background:rgba(255,240,200,.55)}
.rumor span{flex:1;min-width:0;font-size:13px;line-height:1.5;word-break:keep-all;overflow-wrap:break-word}
.rumor button{flex:none;min-height:40px;white-space:nowrap}
.tmapbox .mk{position:absolute;transform:translate(-50%,-85%);display:flex;flex-direction:column;align-items:center;padding:0;background:none!important;border:0!important;box-shadow:none!important;clip-path:none;min-width:30px;min-height:30px;gap:0;z-index:1}
.tmapbox .mk i{font-style:normal;font-size:18px;line-height:1;filter:drop-shadow(0 1px 0 #fff) drop-shadow(0 0 1px #3d2814)}
.tmapbox .mk span{font-size:11px;font-weight:800;color:#3d2814;background:rgba(255,250,236,.92);border-radius:8px;padding:0 3px;white-space:nowrap;box-shadow:0 1px 0 rgba(0,0,0,.25)}
.tmapbox .mk.key{z-index:3}.tmapbox .mk.key span{background:#ffe48a}
.tmapbox .mk.goal{z-index:4}.tmapbox .mk.goal span{background:#ffd0a0;color:#7a2a00}
.tmapbox .mk.hot{z-index:4;animation:huntpulse 2.4s infinite}.tmapbox .mk.hot span{background:#ffccc0;color:#7a1414}
.tmapbox .mk.me{z-index:5}.tmapbox .mk.me span{background:#ffd8ec;color:#8a1a4a}
.tmapbox .mk.new span{background:#e0f0ff}
@media (max-height:500px){#huntchip{top:auto;bottom:calc(8px + env(safe-area-inset-bottom,0px));right:50%;transform:translateX(50%);width:200px;padding:3px 8px}#huntchip small{display:none}}

/* 🗺️ 명소 표시: 찾은 곳 · 아직 못 찾은 곳(❓) */
.tmapbox .mk.lm span{background:#e8f8d8;color:#2a5a1a}.tmapbox .mk.unk{opacity:.85}.tmapbox .mk.unk span{background:rgba(60,40,80,.75);color:#fff}

/* ⛵ 해도 · 항해 */
.row.seacard{align-items:center;gap:8px}.row.seacard.done{background:linear-gradient(90deg,#f4ffe8,#fffaf0)}
.voydots{font-size:20px;text-align:center;letter-spacing:2px;margin:6px 0 10px}
.voyev{background:#eef6ff;border:2px solid #9ac0e8;border-radius:12px;padding:12px;font-size:14px;line-height:1.55;color:#24406a;min-height:60px}
.voybtns{display:flex;flex-direction:column;gap:8px;margin:12px 0 6px}.voybtns button{min-height:46px;font-size:14px}

/* 📈 성장 탭 */
.gsec{margin:4px 0 12px}
.gsec h3{display:flex;justify-content:space-between;align-items:baseline;gap:8px}.gsec h3 span{font-size:12px;color:#8a5a20}
.row.grow{align-items:center;gap:8px}.row.grow .gic{font-size:20px;width:30px;text-align:center;flex:none}
.row.grow .glv{font-size:12px;color:#b0601a;margin-left:4px}
.gbar{display:block;height:8px;border-radius:4px;background:#e8dcc0;overflow:hidden;margin:3px 0 2px;box-shadow:inset 0 1px 0 rgba(0,0,0,.12)}.gbar s{display:block;height:100%;text-decoration:none;border-radius:4px}
.tparts{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}.tneed{font-size:11px;padding:2px 6px;border-radius:999px;background:#f3e6c4;border:1px solid #dcc58e}.tneed.ok{background:#d8f0c8;border-color:#8ac87a}.tneed em{font-style:normal;color:#8a6644}
.rsl{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}.rs{font-size:11px;padding:2px 7px;border-radius:999px;background:#eef4ff;border:1px solid #b8ccf0;color:#2a4a8a}

/* 📖 오늘의 마을 이야기 */
.row.tale{align-items:center;gap:8px;border:2px solid #e8a92a;background:linear-gradient(90deg,#fff8e0,#fffaf0)}

/* 🐾 선원 */
.row.crewrow{cursor:pointer;align-items:center;gap:8px}.row.crewrow.on{background:#eef8e8;border-color:#8ac87a}.crewchk{font-size:20px}
.voycrew{display:flex;flex-wrap:wrap;gap:4px;justify-content:center;margin:-4px 0 8px}.voycrew span{font-size:11px;padding:2px 7px;border-radius:999px;background:#fff3d8;border:1px solid #e0c080}

/* 🏛️ 유적 지도 · 🎁 아이템 획득 · 🏞️ 지역 이름 · 🛡️ 모험가 */
body.inruin #objective,body.inruin #tmapchip{display:none!important}
#ruinhud{position:fixed;right:8px;top:118px;z-index:6;display:flex;gap:6px;align-items:flex-start;padding:6px;border-radius:12px;background:rgba(20,14,30,.72);border:2px solid rgba(255,220,150,.45);box-shadow:0 4px 14px rgba(0,0,0,.35)}
#ruinmap{width:78px;height:78px;image-rendering:pixelated}
#ruinhud .rh-side{display:flex;flex-direction:column;gap:6px;color:#ffe8b0;font-size:12px;font-weight:bold;min-width:52px}
#ruinhud .rh-b{display:flex;gap:4px}
#ruinhud .rh-b button{width:40px;height:40px;font-size:20px;border-radius:12px;border:2px solid #e8c070;background:linear-gradient(#5a4030,#3a2820);color:#fff;padding:0}
#itemget{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 50% 46%,rgba(0,0,0,.15),rgba(0,0,0,.72) 62%);pointer-events:auto}
#itemget .ig-rays{position:absolute;left:50%;top:44%;width:520px;height:520px;margin:-260px 0 0 -260px;border-radius:50%;background:repeating-conic-gradient(from 0deg,color-mix(in srgb,var(--rc,#ffd23a) 55%,transparent) 0 8deg,transparent 8deg 22deg);mask:radial-gradient(circle,#000 18%,transparent 62%);-webkit-mask:radial-gradient(circle,#000 18%,transparent 62%);animation:igspin 9s linear infinite;opacity:.8}
#itemget .ig-card{position:relative;text-align:center;color:#fff;max-width:300px;padding:0 16px}
#itemget .ig-icon{font-size:72px;line-height:1;filter:drop-shadow(0 0 18px var(--rc,#ffd23a)) drop-shadow(0 4px 0 rgba(0,0,0,.4))}
#itemget .ig-name{margin-top:14px;font-size:20px;font-weight:bold;text-shadow:0 2px 0 #000,0 0 12px var(--rc,#ffd23a)}
#itemget .ig-desc{margin-top:8px;font-size:14px;line-height:1.5;color:#fff4d8;text-shadow:0 1px 0 #000}
#itemget .ig-tap{margin-top:16px;font-size:11px;opacity:.6}
#itemget.on .ig-icon{animation:igpop .7s cubic-bezier(.2,1.6,.4,1) both}
#itemget.on .ig-name,#itemget.on .ig-desc{animation:igfade .5s .35s both}
@keyframes igspin{to{transform:rotate(360deg)}}
@keyframes igpop{0%{transform:translateY(40px) scale(.2);opacity:0}100%{transform:none;opacity:1}}
@keyframes igfade{0%{opacity:0;transform:translateY(8px)}100%{opacity:1;transform:none}}
#titlecard{position:fixed;left:0;right:0;top:30%;z-index:40;display:flex;flex-direction:column;align-items:center;gap:6px;pointer-events:none;color:#fff8e8;text-align:center}
#titlecard b{font-size:28px;letter-spacing:2px;text-shadow:0 3px 0 rgba(0,0,0,.55),0 0 18px rgba(255,210,120,.65)}
#titlecard small{font-size:14px;letter-spacing:1px;opacity:.9;text-shadow:0 2px 0 rgba(0,0,0,.6)}
#titlecard i{display:block;width:220px;height:2px;background:linear-gradient(90deg,transparent,#ffe0a0,transparent)}
#titlecard.on{animation:tcard 3.6s ease both}
@keyframes tcard{0%{opacity:0;transform:translateY(10px) scale(.96)}14%{opacity:1;transform:none}80%{opacity:1}100%{opacity:0;transform:translateY(-6px)}}
.hearts{display:flex;flex-wrap:wrap;gap:2px;align-items:center;margin:4px 0}.hearts .hrt{font-size:18px}.hearts .hp4{margin-left:6px;font-size:12px;font-weight:bold;color:#c84a7a}
.ztools{display:flex;gap:6px;margin:4px 0}.ztool{flex:1;text-align:center;padding:6px 2px;border-radius:12px;border:2px dashed #c8b898;background:#f4ecd8;opacity:.75}.ztool.on{border:2px solid #d8a840;background:#fff4d0;opacity:1}.ztool b{display:block;font-size:24px}.ztool small{font-size:11px}
.gslots{display:flex;gap:6px;margin:4px 0}.gslot{flex:1;min-width:0;padding:6px;border-radius:12px;border:2px solid var(--rc);background:#fffaf0;box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--rc) 18%,transparent)}.gslot small{display:block;font-size:11px;opacity:.7}.gslot b{display:block;font-size:12px;color:var(--rc);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gslot i{display:block;font-size:11px;font-style:normal;line-height:1.3}
.gbonus{display:block;margin:4px 0;font-weight:bold}
.row.gearrow{border-left:5px solid var(--rc)}.row.gearrow .rar{color:var(--rc);font-size:11px}
.gslot.empty b{color:#6e6252}

/* 🃏 몬스터 카드 대결 */
#cardgame{position:fixed;inset:0;z-index:55;display:grid;grid-template-areas:"top" "opp" "board" "me" "bot";justify-items:center;align-content:center;gap:8px;padding:10px;color:#fff8e8;background:radial-gradient(circle at 50% 42%,#3c5c3a,#142218 78%);--cw:min(94px,26vw,12.5vh);--hw:min(64px,17.5vw,9vh);--ow:min(50px,14vw,7vh)}
body.incard #hud,body.incard #actbtns{visibility:hidden}
#cardgame .cg-top{grid-area:top}#cardgame .cg-hand.opp{grid-area:opp}#cardgame .cg-board{grid-area:board}#cardgame .cg-hand.me{grid-area:me}#cardgame .cg-bot{grid-area:bot}
#cardgame .cg-top,#cardgame .cg-bot{display:flex;align-items:center;justify-content:space-between;gap:8px;width:min(360px,94vw);font-weight:bold;font-size:14px}
.cg-turn{flex:1;text-align:center;font-size:14px;opacity:.8}.cg-turn.mine{opacity:1;color:#ffe680}
.cg-quit{padding:6px 10px;border-radius:12px;font-size:12px}
.cg-board{display:grid;grid-template-columns:repeat(3,var(--cw));gap:6px;padding:8px;border-radius:16px;background:linear-gradient(#2c3e2c,#223222);border:3px solid #b8945a;box-shadow:inset 0 0 0 2px #6a5634,0 8px 20px rgba(0,0,0,.5)}
.cg-board .slot{width:var(--cw);height:calc(var(--cw) * 1.24)}
.cg-board .cell{width:100%;height:100%;box-sizing:border-box;border-radius:8px;border:2px dashed rgba(255,240,200,.22);background:rgba(0,0,0,.18)}
.cg-board .cell.can{border-color:#ffe080;background:rgba(255,224,128,.12);animation:cgpulse 1s infinite}
.cg-hand{display:flex;gap:4px;justify-content:center;align-items:flex-end}
.cg-hand.me{--cw:var(--hw);min-height:calc(var(--hw) * 1.24 + 10px)}.cg-hand.opp{--cw:var(--ow);min-height:calc(var(--ow) * 1.24)}
.mcard{position:relative;box-sizing:border-box;width:var(--cw);height:calc(var(--cw) * 1.24);border-radius:8px;background:linear-gradient(160deg,#fffaf0,#e6d8b8);border:3px solid var(--tc);box-shadow:0 3px 0 rgba(0,0,0,.35);overflow:hidden;color:#2a1a10;flex:none;transition:transform .15s}
.mcard.blue{background:linear-gradient(160deg,#e2f0ff,#8cbaf2)}.mcard.red{background:linear-gradient(160deg,#ffe6e0,#f29c8c)}
/* 🖼️ 타입 배경 그림 카드: 소유 색은 위에 반투명으로 */
.mcard.art{background:var(--cbg) center/cover;image-rendering:pixelated}
.mcard.art::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 50% 52%,rgba(255,255,255,.28),rgba(255,255,255,0) 60%)}
.mcard.art.blue::before{background:radial-gradient(circle at 50% 52%,rgba(255,255,255,.25),rgba(255,255,255,0) 50%),linear-gradient(160deg,rgba(110,170,255,.45),rgba(30,80,220,.62));box-shadow:inset 0 0 0 3px #5a9cff}
.mcard.art.red::before{background:radial-gradient(circle at 50% 52%,rgba(255,255,255,.25),rgba(255,255,255,0) 50%),linear-gradient(160deg,rgba(255,140,120,.45),rgba(220,40,30,.62));box-shadow:inset 0 0 0 3px #ff6a5a}
.mcard.unk.back{background:#1a2450 url(cards/back.png) center/cover;image-rendering:pixelated}.mcard.unk.back .cst{color:#ffe066;text-shadow:0 1px 2px #000}.mcard.unk.back span{color:#ffe9b0;text-shadow:0 1px 2px #000}
.mcard .cimg{position:absolute;left:50%;top:52%;transform:translate(-50%,-50%);line-height:0}.mcard .cimg canvas{width:calc(var(--cw) * .6);height:calc(var(--cw) * .6)}
.mcard .cv{position:absolute;font-style:normal;font-weight:bold;font-size:calc(var(--cw) * .2);line-height:1;color:#1a1020;text-shadow:0 0 2px #fff,0 0 4px #fff,0 0 4px #fff}
.mcard .cv.u{top:2px;left:50%;transform:translateX(-50%)}.mcard .cv.d{bottom:2px;left:50%;transform:translateX(-50%)}.mcard .cv.l{left:3px;top:50%;transform:translateY(-50%)}.mcard .cv.r{right:3px;top:50%;transform:translateY(-50%)}
.mcard .cst{position:absolute;left:3px;top:2px;font-size:calc(var(--cw) * .1);color:#c88a10;letter-spacing:-1px;line-height:1}
.mcard.hand{cursor:pointer}.mcard.hand.sel{transform:translateY(-10px);box-shadow:0 0 0 3px #ffe060,0 8px 14px rgba(0,0,0,.45)}
.mcard.drop{animation:cgdrop .35s ease-out}.mcard.flip{animation:cgflip .55s ease}
.mcard.unk{background:repeating-linear-gradient(45deg,#4a3a5a,#4a3a5a 6px,#3a2c48 6px,#3a2c48 12px);border-color:#6a5a7a;display:flex;align-items:center;justify-content:center}.mcard.unk span{color:#a898c0;font-weight:bold;font-size:calc(var(--cw) * .36)}
@keyframes cgdrop{0%{transform:scale(1.4) translateY(-12px);opacity:.2}100%{transform:none;opacity:1}}
@keyframes cgflip{0%{transform:scaleX(1)}50%{transform:scaleX(0) scaleY(1.08)}100%{transform:scaleX(1)}}
@keyframes cgpulse{50%{background:rgba(255,224,128,.26)}}
.cg-pop{position:fixed;left:0;right:0;top:42%;text-align:center;font-size:32px;font-weight:bold;color:#ffe060;text-shadow:0 3px 0 #5a2a00,0 0 16px #ff9a30;pointer-events:none;z-index:2}
.cg-pop.on{animation:cgpop 1.1s ease both}@keyframes cgpop{0%{transform:scale(.4);opacity:0}25%{transform:scale(1.15);opacity:1}75%{opacity:1}100%{transform:translateY(-20px);opacity:0}}
.cg-end{position:fixed;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;background:rgba(8,12,8,.82);text-align:center;padding:20px;z-index:3;--cw:96px}
.cg-end p{margin:0;max-width:300px;line-height:1.5}.cg-res{font-size:32px;text-shadow:0 3px 0 rgba(0,0,0,.5)}.cg-res.win{color:#ffe060}.cg-res.lose{color:#a8c0ff}.cg-fin{font-size:18px;font-weight:bold}
.cg-get{display:flex;flex-direction:column;align-items:center;gap:4px;animation:cgdrop .5s .2s both}
@media (orientation:landscape) and (max-height:520px){#cardgame{grid-template-areas:"top top top" "opp board me" "bot bot bot";grid-template-columns:auto auto auto;column-gap:16px;--cw:min(78px,20vh);--hw:min(44px,10.5vh);--ow:min(38px,9vh);gap:4px}.cg-hand{flex-direction:column}#cardgame .cg-top,#cardgame .cg-bot{width:min(560px,94vw)}}
.cgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(54px,1fr));gap:6px;margin-top:6px;--cw:54px;justify-items:center}
.mcard.tiny{--cw:54px}.mcard.tiny.on{outline:3px solid #ffd23a;outline-offset:1px;opacity:.55}
.csel{display:flex;gap:6px;min-height:84px;align-items:center;justify-content:center;--cw:64px;margin:4px 0}
.cprev{display:flex;gap:4px;justify-content:center;--cw:48px}
.cpack{display:flex;gap:12px;justify-content:center;margin:10px 0;--cw:92px}.cpk{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;animation:cgdrop .5s both}.cpk em{position:absolute;top:-8px;right:-8px;background:#ff4a6a;color:#fff;font-style:normal;font-weight:bold;font-size:11px;padding:2px 6px;border-radius:999px;box-shadow:0 2px 0 rgba(0,0,0,.3)}
.mcard .cst{top:auto;bottom:2px;left:3px}

/* 🎖️ 트레이너 레벨 · 🌳 재능 · 🔨 강화 · ✨ 공명 · 🏡 발전 */
.tlvsec .gbar{height:12px}.tlvsec small.rest,.row small.rest{display:block;color:#b8501a;font-weight:bold}
.ttree{display:grid;grid-template-columns:1fr 1fr;gap:6px}.tbr{border:2px solid #e0d0a8;border-radius:12px;padding:5px;background:#fffaf0}.tbr>b{display:block;font-size:14px;margin-bottom:3px}
.tal{display:flex;align-items:center;gap:4px;padding:3px 0;border-top:1px dashed #e8dcc0}.tal .tinfo{flex:1;min-width:0}.tal .tinfo span{display:block;font-size:11px;font-weight:bold}.tal .tinfo small{display:block;font-size:11px;line-height:1.25;color:#6a5a48}
.tal .tpip{font-size:11px;font-weight:bold;color:#8a7a68;min-width:26px;text-align:right}.tal.on .tpip{color:#3a8a3a}.tal.max .tpip{color:#d88a10}
.tal button{min-width:30px;min-height:30px;padding:0;font-size:16px;border-radius:8px}
.tres{width:100%;margin-top:6px}
.gupc{display:block;font-size:11px;color:#8a6a48;margin-top:2px}
#bctl .resbtn{background:linear-gradient(#fff3b0,#ffc85a);border-color:#e8a020;color:#6a3a00;animation:respulse 1.2s infinite}
@keyframes respulse{50%{box-shadow:0 0 0 4px rgba(255,210,90,.55)}}
.museum{display:flex;flex-wrap:wrap;gap:4px;padding:6px;border-radius:12px;background:#f4ecd8}
.tlvsec small{display:block}

/* 🧭 원정대 · 🌦️ 날씨 모습 */
.expbtn { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 8px; margin: 2px 0 10px; padding: 12px 14px; min-height: 48px; border-radius: 12px; border: 2px solid #3a6ea8; background: #e6f2ff; color: #1d3a5c; font-weight: 700; font-size: 14px; }
.expbtn small { font-weight: 400; font-size: 12px; }
.expbtn.ready { background: #fff0a0 !important; border-color: #d9a320 !important; animation: exppulse 1.2s ease-in-out infinite; }
@keyframes exppulse { 50% { transform: scale(1.02); } }
.exphours { display: flex; gap: 8px; justify-content: center; margin: 8px 0; }
.exphours button { min-width: 76px; min-height: 44px; border-radius: 12px; }
.exphours button.on { background: #3a6ea8 !important; color: #fff !important; box-shadow: 0 0 0 3px #bfe0ff; }
.expdest { cursor: pointer; }
.expdest.lock { opacity: .55; cursor: default; }
.expjournal { background: #fffaf0; border: 2px solid #e2c48a; border-radius: 12px; padding: 10px 12px; margin: 8px 0; }
.expjournal p { margin: 4px 0; font-size: 14px; line-height: 1.5; }
.expjournal small { color: var(--dim); font-weight: 400; }
.expgot { margin-top: 6px; font-size: 12px; color: #6a4a10; }
.wforms { display: flex; flex-wrap: wrap; gap: 4px; margin: 4px 0; }
.wforms span { display: flex; flex-direction: column; align-items: center; width: 46px; padding: 2px; border-radius: 8px; background: #f2f2f6; font-size: 11px; }
.wforms span.on { background: #e8f6ff; }
.wforms span i { font-style: normal; font-size: 20px; height: 34px; line-height: 34px; color: var(--dim); }
.wforms span canvas { width: 34px; height: 34px; }
.wforms em { font-style: normal; white-space: nowrap; }

/* 🏛️ 박물관 */
.musintro { background: #f4ecd8; border-radius: 12px; padding: 10px 12px; font-size: 14px; line-height: 1.5; margin-bottom: 8px; color: #5a4020; }
.musrow .ic { width: 44px; height: 44px; display: flex; align-items: center; justify-content: center; }
.musrow .ic img { width: 36px; height: 36px; image-rendering: pixelated; }
.musrow .q { font-size: 20px; opacity: .5; }
.musrow.ex { background: #fffbea; }
.musok { font-size: 12px; color: #8a6a20; font-weight: 700; }

/* 🎲 둘이 놀이 */
.playtop { font-size: 14px; margin: 4px 0 8px; }
.memgrid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin: 6px 0; }
.memc { aspect-ratio: 1; min-height: 64px; border-radius: 12px; font-size: 24px; display: flex; align-items: center; justify-content: center; padding: 0; }
.memc.up { background: #fff6e0 !important; }
.memc canvas { width: 52px; height: 52px; }
.quizq { font-size: 16px; font-weight: 700; text-align: center; margin: 8px 0; }
.quizopts { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin: 4px 0 8px; }
.quizopts button { min-height: 48px; border-radius: 12px; font-size: 14px; }
.quizopts button.on { background: #ff8ab0 !important; color: #fff !important; }
.quizopts button.bad { background: #c8c0c8 !important; }
.quizrev { background: #fff4f8; border-radius: 12px; padding: 10px; font-size: 14px; line-height: 1.8; }
.quizrev .same { color: #e0407a; font-weight: 700; text-align: center; }
.playend { text-align: center; line-height: 1.8; }
.playend small { display: block; color: var(--dim); }
.shadowpic { display: flex; justify-content: center; }
.shadowpic canvas { width: 140px; height: 140px; }

.obline { background: #fff6d8; border-radius: 12px; padding: 6px 10px; margin: 4px 0; font-size: 14px; }

/* 🎀 꾸미기 · ☕ 카페 */
.accgrid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin-top: 8px; }
.accgrid button { display: flex; flex-direction: column; align-items: center; min-height: 72px; border-radius: 12px; padding: 4px; }
.accgrid button.on { background: #ffe0ee !important; box-shadow: 0 0 0 3px #ff8ab0; }
.accgrid canvas { width: 48px; height: 48px; }
.accgrid small { font-size: 11px; }
.cafelog { font-size: 14px; padding: 4px 2px; border-bottom: 1px dashed #e2d4b4; }
.cafelog small { color: var(--dim); }

.unlockrow { animation: unlockin .4s ease-out both; }
.unlockrow:nth-child(3) { animation-delay: .08s } .unlockrow:nth-child(4) { animation-delay: .16s } .unlockrow:nth-child(5) { animation-delay: .24s } .unlockrow:nth-child(6) { animation-delay: .32s }
@keyframes unlockin { from { opacity: 0; transform: translateY(8px) scale(.97); } }

/* ⚔️ 토벌 칩: 날씨 칩 바로 아래 한 줄 알약 (목표 · 파티 카드와 안 겹치게) */
#huntchip,#hud:has(#partycard:not(.hidden)) #huntchip{top:calc(env(safe-area-inset-top,0px) + 87px);right:8px;width:auto;max-width:168px;padding:3px 9px 4px;border-width:2px;border-radius:999px;gap:0;animation:none;box-shadow:0 2px 0 #4a0a0a}
#huntchip b{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#huntchip i{height:3px;margin:1px 0 0}
#huntchip span,#huntchip small{display:none}
@media (max-width:520px){#huntchip{top:calc(env(safe-area-inset-top,0px) + 87px)}}
@media (max-height:500px){#huntchip{top:auto;bottom:calc(8px + env(safe-area-inset-bottom,0px));right:50%;transform:translateX(50%)}}

/* 🌀 미궁 칩 */
#dunchip{position:fixed;right:8px;top:calc(env(safe-area-inset-top,0px) + 87px);z-index:6;padding:3px 10px;border-radius:999px;border:2px solid #3a2a6a;background:linear-gradient(180deg,#eee8ff,#d4c8ff);color:#2a1a5a;box-shadow:0 2px 0 #1a1040;display:flex;gap:6px;align-items:center;pointer-events:auto;min-height:28px}
#dunchip.hidden{display:none}
#dunchip b{font-size:12px;white-space:nowrap}
#dunchip small{font-size:11px}

/* 📸 추억 앨범 · 💌 봉인 편지 */
.album { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 8px; }
.polaroid { background: #fff; padding: 8px 8px 10px; border-radius: 8px; box-shadow: 0 2px 6px rgba(0,0,0,.18); transform: rotate(-1deg); display: flex; flex-direction: column; gap: 4px; }
.polaroid:nth-child(even) { transform: rotate(1.2deg); }
.polaroid .pic { background: linear-gradient(160deg, #fff6e0, #ffe0ec); height: 76px; display: flex; align-items: center; justify-content: center; border-radius: 4px; }
.polaroid .pic span { font-size: 36px; }
.polaroid .pic canvas { width: 64px; height: 64px; }
.polaroid b { font-size: 12px; line-height: 1.35; }
.polaroid small { font-size: 11px; color: var(--dim); }
.row.sealed { background: repeating-linear-gradient(45deg, #fff4e0, #fff4e0 10px, #ffe9c8 10px, #ffe9c8 20px); }

/* 🔥 오늘의 MVP */
.campfire{display:flex;justify-content:center;align-items:center;gap:12px;margin:4px 0 2px}
.campfire b{font-size:14px;padding:3px 10px;border-radius:999px;background:#fff3dc;border:2px solid #d89a40;color:#6a3a10;max-width:34%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.campfire .fire{font-size:32px;animation:fireflick .5s ease-in-out infinite alternate;filter:drop-shadow(0 0 8px #ffb04a)}
@keyframes fireflick{from{transform:scale(1) rotate(-3deg)}to{transform:scale(1.12) rotate(3deg)}}
.mvpgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:10px 0}
.mvpgrid button{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 4px;min-height:96px}
.mvpgrid button b{font-size:12px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mvpgrid button small{font-size:11px;color:var(--dim)}
/* 📅 달력 */
.cal{display:flex;flex-direction:column;gap:4px;margin:6px 0 10px}
.calrow{display:flex;gap:8px;align-items:center;padding:5px 8px;border-radius:12px;background:rgba(255,250,236,.7);border:1px solid #e0c890}
.calrow.today{background:#fff3c4;border:2px solid #d8a030}
.calrow.wkend .cald b{color:#c0392b}
.cald{width:40px;flex:none;text-align:center;line-height:1.1}
.cald b{display:block;font-size:14px}
.cald small{font-size:11px;color:var(--dim)}
.calev{display:flex;flex-wrap:wrap;gap:4px;min-width:0}
.calev span{font-size:11px;padding:2px 7px;border-radius:999px;background:#fff;border:1px solid #e6d3a8;white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.calev span.hot{background:#2a2a5a;color:#ffe9a8;border-color:#2a2a5a}
.calev span.dim{color:var(--dim);background:transparent;border-color:transparent}

/* 🧹 접힌 이벤트 표시: 동그란 심볼 */
.hfold{font-size:0!important;width:auto!important;min-width:36px;max-width:none!important;height:36px!important;padding:0 8px!important;display:flex!important;align-items:center;justify-content:center;border-radius:16px!important;overflow:hidden;gap:0!important;cursor:pointer;pointer-events:auto!important;animation:hfoldin .25s ease-out}
.hfold>*{display:none!important}
.hfold::before{content:attr(data-ico);font-size:18px;line-height:1;letter-spacing:-2px}
#objective.hfold{left:auto!important;right:8px!important;transform:none!important}
@keyframes hfoldin{from{transform:scale(.7);opacity:.4}}
#partycard.fold{width:auto;min-width:118px;max-width:150px}
/* ☰ 메뉴 */
#hud{--n:4}
#hud:has(#decorbtn:not(.hidden)){--n:5}
#morebtn .moreico{font-size:24px;line-height:1;font-style:normal;color:#5a3414}
#morebtn.on{filter:brightness(.92);transform:translateY(2px)}
#morebtn.hasdot::after{content:'';position:absolute;top:3px;right:3px;width:9px;height:9px;border-radius:50%;background:#e8383a;box-shadow:0 0 0 2px #fff}
#morebtn{position:relative}
#moremenu{position:fixed;right:8px;top:calc(env(safe-area-inset-top,0px) + 68px);z-index:30;display:flex;flex-direction:column;gap:6px;padding:8px;border-radius:12px;background:linear-gradient(#fff6e2,#f1deb0);border:2.5px solid var(--woodd);box-shadow:0 4px 0 var(--woodd),0 8px 16px rgba(0,0,0,.25);pointer-events:auto;animation:morein .15s ease-out}
#moremenu.hidden{display:none}
@keyframes morein{from{transform:translateY(-6px);opacity:0}}
#moremenu button{display:flex;align-items:center;gap:12px;width:138px;height:48px;padding:4px 12px;clip-path:none;border-radius:12px;background:linear-gradient(#fffaf0,#f1deb0);border:2px solid var(--woodd);box-shadow:0 3px 0 var(--woodd),inset 0 2px 0 #fff;color:#4a2c14;font-weight:800;position:relative}
#moremenu button i{font-style:normal;line-height:0}
#moremenu button i .uic{width:30px;height:30px}
#moremenu button span{font-size:14px;letter-spacing:-.4px}
#moremenu button:active{transform:translateY(2px);box-shadow:0 1px 0 var(--woodd)}
body:has(#modal.sheet) #moremenu{display:none!important}

/* 🎬 엔딩 */
#ending h1.small{font-size:28px;line-height:1.3}
#ending h3{font-size:20px;color:#ffd9ec;margin:30px 0 0;font-weight:400}
#ending .endmems{display:flex;flex-direction:column;gap:12px;width:min(360px,90vw)}
.endmem{display:flex;gap:12px;align-items:center;text-align:left;background:#ffffff14;border:1px solid #ffffff2a;border-radius:12px;padding:8px 10px}
.endmem canvas,.endmem>span{width:48px;height:48px;flex:none;font-size:28px;display:flex;align-items:center;justify-content:center;image-rendering:pixelated}
.endmem b{display:block;font-size:14px!important;color:#fff!important;line-height:1.4}
.endmem small{font-size:12px;color:#c8b8ff}
#ending .endstats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;width:min(360px,92vw)}
#ending .endstats div{background:#ffffff12;border-radius:12px;padding:10px 4px}
#ending .endstats b{display:block;font-size:24px}
#ending .endstats small{font-size:12px;color:#d8ccff}
#ending .wish{font-size:20px;color:#fff3b0}
#endskip{position:absolute;right:10px;top:calc(10px + env(safe-area-inset-top));z-index:2;font-size:14px;padding:6px 12px;border-radius:999px;background:#ffffff22;color:#fff;clip-path:none}
.finpre .info>div{font-size:14px;color:var(--dim)}
.finpre .info>div.done{color:var(--ink)}

.tlook{color:#2a7a3a!important;font-weight:700}

/* 💞 듀오 퓨전 */
.fusebar{position:relative;width:86px;height:14px;border-radius:8px;background:#3a1a2a;border:2px solid #fff;overflow:hidden;align-self:center}
.fusebar i{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,#ff7ab0,#ffb0d8);transition:width .4s}
.fusebar span{position:absolute;right:3px;top:-2px;font-size:11px}
.fusebar.full i{animation:fusepulse .8s ease-in-out infinite alternate}
@keyframes fusepulse{from{filter:brightness(1)}to{filter:brightness(1.35)}}
.fusebtn{background:linear-gradient(#ff8ac0,#e8508a)!important;color:#fff!important;font-weight:800;border-color:#8a1a4a!important}
.fusebtn.call{animation:fusecall .6s ease-in-out infinite alternate}
@keyframes fusecall{from{transform:scale(1)}to{transform:scale(1.08)}}
#fusefx{position:absolute;inset:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;background:radial-gradient(circle,rgba(255,180,220,.55),rgba(255,180,220,0) 70%);animation:fusein 2.3s ease-out forwards}
#fusefx .fz{position:relative;width:120px;height:110px}
#fusefx .fz span{position:absolute;top:0;left:12px}
#fusefx .fz canvas{width:96px;height:96px;image-rendering:pixelated}
#fusefx .fa{animation:fuseL 1.2s ease-in forwards}
#fusefx .fb{animation:fuseR 1.2s ease-in forwards;filter:hue-rotate(40deg) saturate(1.3);mix-blend-mode:screen}
#fusefx b{font-size:28px;color:#fff;text-shadow:0 0 10px #ff4a9a,0 2px 0 #8a1a4a;animation:fusename 2.3s ease-out forwards}
#fusefx small{color:#fff;font-weight:800;text-shadow:0 1px 0 #8a1a4a}
@keyframes fuseL{from{transform:translateX(-90px) rotate(-12deg);opacity:.6}to{transform:none;opacity:1}}
@keyframes fuseR{from{transform:translateX(90px) rotate(12deg);opacity:.6}to{transform:none;opacity:.85}}
@keyframes fusename{0%,45%{opacity:0;transform:scale(.6)}60%{opacity:1;transform:scale(1.15)}100%{opacity:1;transform:scale(1)}}
@keyframes fusein{0%{opacity:0}10%{opacity:1}85%{opacity:1}100%{opacity:0}}
.fdex{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:6px 0}
.fcell{background:#fff8ea;border:2px solid #e8c890;border-radius:12px;padding:6px;text-align:center}
.fpair{display:flex;align-items:center;justify-content:center;gap:2px}
.fpair canvas{width:40px;height:40px;image-rendering:pixelated}
.fpair i{font-style:normal;color:#e8508a;font-weight:800}
.fcell b{display:block;font-size:14px;color:#8a1a4a}
.fcell small{font-size:11px;color:var(--dim)}

/* 💥 큰 한 방 */
#bighit{position:absolute;left:50%;top:47%;transform:translateX(-50%);z-index:15;display:flex;flex-wrap:wrap;justify-content:center;gap:4px;max-width:92%;pointer-events:none}
#bighit span,#bighit b{opacity:0;animation:bhin .25s ease-out forwards;padding:3px 8px;border-radius:999px;font-size:12px;font-weight:800;background:#fff3d0;color:#7a3a08;border:2px solid #c8781a;white-space:nowrap}
#bighit b{font-size:16px;background:#ff6a3a;color:#fff;border-color:#8a2a08}
@keyframes bhin{from{opacity:0;transform:translateY(8px) scale(.8)}to{opacity:1;transform:none}}
#arena.shake{animation:ashake .28s ease-in-out}
@keyframes ashake{0%,100%{transform:none}25%{transform:translate(-3px,1px)}50%{transform:translate(3px,-1px)}75%{transform:translate(-2px,0)}}
.syndex{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:4px 0}
.syndex div{background:#f2eadc;border:2px dashed #c8b89a;border-radius:12px;padding:5px 7px}
.syndex div.on{background:#fff6e0;border:2px solid #e0a040}
.syndex b{display:block;font-size:12px}
.syndex small{font-size:11px;color:var(--dim)}

/* 🔁 환생 · 🎖️ 모험가 등급 */
.rbstar{display:inline-block;font-size:11px;font-weight:800;color:#8a5a00;background:#fff3c0;border:1.5px solid #e8b030;border-radius:999px;padding:0 6px;margin-left:3px;vertical-align:1px}
.rbstar.glow{background:linear-gradient(#fff6c8,#ffe080);box-shadow:0 0 6px #ffd23a}
.rbstar.crown{background:linear-gradient(#ffe9a8,#ffc84a);color:#6a3a00;box-shadow:0 0 8px #ffb84a}
.rbready{display:inline-block;font-size:11px;font-weight:800;color:#fff;background:#8a5ad8;border-radius:999px;padding:1px 6px;margin-left:3px;animation:fusepulse .9s ease-in-out infinite alternate}
.arsec .arparts{display:flex;flex-wrap:wrap;gap:4px;margin-top:6px}
.arsec .arparts span{font-size:11px;background:#fff8e6;border:1px solid #e8d0a0;border-radius:999px;padding:2px 7px}
.arsec .arparts b{color:#8a4a00}
.arsec .arparts i{font-style:normal;color:var(--dim);font-size:11px;margin-left:2px}

.calev span.fest{background:#b8285e;border-color:#7a1a3e;color:#fff}

/* ======================= 🎨 UI/UX 검수 (2026-10) ======================= */
/* 한글은 단어째로 줄바꿈 (긴 영문·숫자만 칸 안에서 끊기) */
body{word-break:keep-all;overflow-wrap:break-word}
#chatlog div{word-break:keep-all;overflow-wrap:anywhere}
/* 대비: 고르지 않은 탭 글자 · 재능 점수 */
#mbox .tabs button,#mbox .bagtabs button{color:#5e3c1c}
.tal .tpip{color:#6a5a46}
/* 위쪽 메뉴: 네 개뿐이라 손가락 폭(44px+)으로 · 이름표 11px */
#menubtns > button{width:48px}
#menubtns button span{font-size:11px}
/* 📱 일지 탭 11개: 세 줄 → 가로로 넘기는 한 줄 · 탭을 바꿔도 창 높이가 그대로 */
@media (max-width:760px){
  #mbox > .tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:2px 16px 6px;scroll-snap-type:x proximity;flex:none}
  #mbox > .tabs::-webkit-scrollbar{display:none}
  #mbox > .tabs button{flex:none;min-width:0;padding:7px 12px;white-space:nowrap;scroll-snap-align:center}
  #mbox:has(> .tabs){height:calc(100dvh - 20px)}
}
/* 도감 칸: 큰 몬스터가 칸 밖으로 넘치지 않게 */
.cell{overflow:hidden;position:relative}
.cell canvas{width:100px;height:100px;object-fit:contain}
/* ⚔️ 배틀 오른쪽 위: 단추 한 줄 + 합체 게이지는 그 아래 한 줄 */
#bctl{flex-wrap:wrap;justify-content:flex-end;max-width:min(260px,64%)}
#bctl .fusebar{order:10;width:100%;flex:none}
/* 재능 ＋ 단추: 폰에서 누르기 쉽게 */
@media (max-width:760px){.tal > button{min-width:40px;min-height:40px;font-size:18px}}
.cell .no{z-index:2;text-shadow:0 1px 0 #fff}
/* 메뉴 버튼 48px 에 맞춘 오른쪽 메뉴 폭 (목표 배너가 겹치지 않게) */
#hud{--mw:calc(var(--n) * 48px + (var(--n) - 1) * 6px + 12px)}

#wchip.hfold::before{font-size:14px;letter-spacing:0}
#wchip{pointer-events:auto;cursor:pointer}

/* 👆 모달 주 버튼은 손가락 크기 (CSS 단계 정리 뒤 38px 로 줄었던 것) */
#mbox .primary,#mbox .bigbtn{min-height:44px}

.calev span.bd{background:#fff0c8;border-color:#e8b040;color:#6a3a00}

/* 🦋 채집 도감 */
.crnow { display: inline-block; margin-left: 4px; padding: 0 6px; border-radius: 8px; background: #2e7d4f; color: #fff; font-size: 12px; font-weight: 700; }

/* 📰 마을 신문 */
.paper { background: #f6efdc; border: 2px solid #8a7450; border-radius: 8px; padding: 12px 14px; color: #2a2418; box-shadow: inset 0 0 0 4px #efe4c8; }
.pmast { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-weight: 800; font-size: 18px; border-bottom: 3px double #8a7450; padding-bottom: 6px; }
.pmast small { font-size: 12px; color: #6a5a3a; font-weight: 600; }
.phead { font-size: 20px; line-height: 1.35; margin: 10px 0; text-wrap: balance; color: #2a2418; }
.pitem { border-top: 1px solid #cdbb94; padding: 8px 0; }
.pitem b { font-size: 14px; color: #3a2a10; }
.pitem p { margin: 4px 0 0; font-size: 14px; line-height: 1.6; color: #3a3020; }

/* 🐾 몬스터의 마을 능력 */
.powers { display: flex; flex-wrap: wrap; gap: 6px; align-items: stretch; background: #fff6dc; border: 2px solid #e0b860; border-radius: 12px; padding: 8px 10px; margin: 6px 0; }
.powers b { width: 100%; font-size: 14px; color: #4a2a08; }
.pw { display: inline-flex; flex-direction: column; background: #fff; border: 1px solid #e0c890; border-radius: 8px; padding: 4px 8px; }
.pw i { font-style: normal; font-size: 14px; font-weight: 700; color: #4a2a08; }
.pw small { font-size: 12px; color: #6a4a20; }

/* 📔 생활 일기 */
.diary { position: relative; background: #fffdf4 repeating-linear-gradient(transparent 0 27px, #e8dcc0 27px 28px); border: 2px solid #c8b48a; border-radius: 8px; padding: 8px 12px 10px 18px; margin: 8px 0; color: #3a2a18; box-shadow: inset 6px 0 0 #f0a0a0; }
.dhead { font-weight: 800; font-size: 16px; line-height: 28px; }
.dhead span { font-size: 12px; background: #ff7a7a; color: #fff; border-radius: 8px; padding: 0 6px; margin-left: 4px; vertical-align: middle; }
.dline { font-size: 14px; line-height: 28px; }
.dline i { font-style: normal; margin-right: 6px; }
.dstamp { position: absolute; right: 10px; top: 6px; color: #d8402a; font-weight: 800; font-size: 13px; transform: rotate(-8deg); }

/* 📋 오늘의 마을 */
.today .tsec { background: #fffaf0; border: 2px solid #e6d2a8; border-radius: 12px; padding: 8px 10px; margin: 8px 0; }
.today .tsec > b { display: block; font-size: 14px; color: #4a2a08; margin-bottom: 4px; }
.today .trow { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 14px; line-height: 1.6; padding: 2px 0; }
.today .trow small { color: #6a4a20; font-size: 12px; }
.today .trow i, .today .tchip i { font-style: normal; color: #2e7d4f; font-weight: 800; }
.today .tchips { display: flex; flex-wrap: wrap; gap: 6px; }
.today .tchip { background: #fff; border: 1px solid #e0c890; border-radius: 999px; padding: 2px 8px; font-size: 13px; }
#mbox .tgo { margin-left: auto; min-height: 44px; padding: 4px 12px; font-size: 13px; }

/* 🌑 실내 · 밖 화면 전환 */
#mapfade { position: fixed; inset: 0; background: #0c0814; opacity: 0; pointer-events: none; z-index: 40; }
@media (prefers-reduced-motion: reduce) { #mapfade { display: none; } }
/* ⭐ 메인 이야기 · 📌 서브 의뢰 (2026-10) — 메인은 금색, 서브는 하늘색 */
.row.qmain{border:2px solid #e8a21a;background:linear-gradient(#fff8e0,#ffefc0)}
.row.qmain .aic,.row.qmate .aic{font-size:24px}
.row.qmate{border:2px dashed #ff9ac8;background:#fff6fa}
.row.qsubhead{border:2px solid #5ab8e8;background:linear-gradient(#f0faff,#e0f2ff)}
.qk{display:block;font-size:11px;font-weight:800;color:#b0601a}
.qk.sub{color:#1a6a9a}
.qwith{display:inline-block;font-size:11px;padding:1px 6px;border-radius:8px;background:#dff4ff;color:#1a5a8a;margin-left:4px;vertical-align:middle}
.qbtns{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.qbtns button{min-height:36px;padding:4px 10px;font-size:12px}
.qbtns button.on{background:#5ad0ff;color:#0a2a3a}
.row.qinv{border:2px solid #ff9ac8;background:#fff2f8}
h3.qdiv{margin-top:14px;padding-top:8px;border-top:2px dashed #c8a06088}
#objective .qsubline{margin-top:3px;padding-top:3px;border-top:1px dashed #c8a060;font-size:12px;color:#1a6a9a;font-weight:700;cursor:pointer}
/* 🚂 기차 안 장면 */
#trainride{position:fixed;inset:0;z-index:60;display:none;flex-direction:column;align-items:center;justify-content:center;gap:14px;background:#1a1210}
#trainride.on{display:flex}
#trainride canvas{width:min(92vw,520px);height:auto;image-rendering:pixelated;border-radius:10px;box-shadow:0 0 0 4px #3a2a1a,0 8px 0 #2a1a10}
#trainride .tr-label{color:#ffe8b0;font-weight:800;font-size:15px;text-align:center;padding:0 16px;word-break:keep-all}
@media (prefers-reduced-motion:reduce){#trainride canvas{transform:none!important}}
/* 🕹️ 오락실 번개 반응 게임 */
#arcadegame{position:fixed;inset:0;z-index:61;display:none;align-items:center;justify-content:center;background:rgba(10,6,24,.82)}
#arcadegame.on{display:flex}
#arcadegame .ag-box{display:flex;flex-direction:column;gap:10px;align-items:center;padding:16px;border-radius:14px;background:#221a40;box-shadow:0 0 0 3px #5ad0ff,0 0 24px #5ad0ff88}
#arcadegame canvas{width:min(86vw,360px);height:auto;image-rendering:pixelated;border-radius:8px}
#arcadegame .ag-top,#arcadegame .ag-msg{color:#e8f4ff;font-weight:800;font-size:15px;text-align:center;word-break:keep-all}
body.inruin #huntchip,body.inreg #huntchip{display:none!important} /* ⚔️ 토벌은 월드에서만 */
/* 🌙 첫 입장 로딩창 (#boot) — 로그인 화면과 같은 밤하늘, 통통 튀는 몬스터볼 */
#boot{position:fixed;inset:0;z-index:70;display:flex;align-items:center;justify-content:center;background:linear-gradient(#0d0a24,#2a2060 55%,#4a3a9a);transition:opacity .35s;overflow:hidden}
#boot:before{content:"";position:absolute;inset:0;background-image:radial-gradient(#fff 1px,transparent 1.5px),radial-gradient(#cfe 1px,transparent 1.5px);background-size:90px 90px,140px 140px;background-position:0 0,45px 60px;opacity:.5}
#boot.gone{opacity:0;pointer-events:none}
#boot.off{display:none}
#boot .bwrap{position:relative;width:min(320px,86vw);display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center}
#boot h1{margin:0;font-size:44px;letter-spacing:2px;color:var(--acc);text-shadow:3px 3px 0 #b8562a,0 0 18px #ffd23a66;font-weight:400}
#boot .bstage{position:relative;width:64px;height:84px}
#boot .bball{position:absolute;left:14px;top:0;width:36px;height:36px;border-radius:50%;box-sizing:border-box;border:3px solid var(--line);background:linear-gradient(#ff4d5e 0 44%,var(--line) 44% 56%,#f6f2ff 56%);animation:bhop .9s cubic-bezier(.3,0,.7,1) infinite alternate}
#boot .bball:after{content:"";position:absolute;left:50%;top:50%;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:#f6f2ff;box-shadow:0 0 0 3px var(--line)}
#boot .bshadow{position:absolute;left:16px;bottom:0;width:32px;height:6px;border-radius:50%;background:#0008;animation:bshade .9s cubic-bezier(.3,0,.7,1) infinite alternate}
@keyframes bhop{from{transform:translateY(0) rotate(-12deg)}to{transform:translateY(42px) rotate(12deg) scale(1.06,.94)}}
@keyframes bshade{from{transform:scaleX(.55);opacity:.5}to{transform:scaleX(1);opacity:1}}
#boot .bbar{width:100%;height:14px;background:#120e28;box-shadow:inset 0 0 0 2px var(--line),inset 0 0 0 4px #5a4fb0;clip-path:var(--notch);padding:4px;box-sizing:border-box}
#boot .bbar i{display:block;height:100%;background:var(--acc);transform-origin:left;transform:scaleX(var(--p,.12));transition:transform .5s}
#boot #bmsg{margin:0;color:var(--ink);font-size:15px;min-height:22px}
#boot #btip{margin:0;color:var(--dim);font-size:13px;line-height:1.6;min-height:42px;word-break:keep-all}
@media (prefers-reduced-motion:reduce){#boot .bball,#boot .bshadow{animation:none}#boot,#boot .bbar i{transition:none}}
@media (max-width:760px) and (min-height:501px){ /* 📐 오른쪽 위 칩 기본 자리 — 날씨 칩 · ⚔️ · ⭐ 차례로 */
  #huntchip,#hud:has(#partycard:not(.hidden)) #huntchip{top:calc(env(safe-area-inset-top,0px) + 111px)}
  #hud:has(#huntchip:not(.hidden)) #objective.hfold{top:calc(env(safe-area-inset-top,0px) + 152px)}
}
/* 📰 업데이트 소식 카드 */
#newscard{position:fixed;left:50%;top:calc(env(safe-area-inset-top,0px) + 38vh);transform:translateX(-50%);z-index:30;width:min(340px,calc(100vw - 24px));box-sizing:border-box;background:linear-gradient(#fffaf0,#f8ecd0);color:#3a2410;border-radius:16px;box-shadow:0 0 0 3px #7a4a28,0 5px 0 #4a2a14,0 12px 22px rgba(0,0,0,.4);padding:14px 16px 12px;pointer-events:auto;animation:newsin .35s ease-out;word-break:keep-all}
#newscard.hidden{display:none}
#newscard h3{margin:0 0 8px;font-size:16px;color:#b8481a;display:flex;align-items:baseline;gap:8px}
#newscard h3 small{font-size:12px;color:#8a6a4a;font-weight:400}
#newscard ul{margin:0;padding-left:4px;list-style:none;font-size:13px;line-height:1.6;display:flex;flex-direction:column;gap:4px}
#newscard .nb{display:flex;gap:8px;justify-content:flex-end;margin-top:12px}
#newscard .nb button{min-height:44px;padding:8px 16px;clip-path:none;border-radius:12px}
#mbox .newslist{margin:0 0 12px;padding-left:4px;list-style:none;line-height:1.7;display:flex;flex-direction:column;gap:4px;word-break:keep-all}
@keyframes newsin{from{transform:translate(-50%,-14px);opacity:0}}
@media (prefers-reduced-motion:reduce){#newscard{animation:none}}
@media (max-width:760px) and (min-height:501px){ /* 💬 채팅 줄을 오른쪽 버튼 줄 앞까지 넓게 · 알림 두 줄 */
  #chatlog{max-width:calc(100vw - 96px)!important}
  #chatlog div{-webkit-line-clamp:3}
  #chatlog .sys{-webkit-line-clamp:2!important}
}
#mbox .chathist{display:flex;flex-direction:column;gap:6px;font-size:14px;line-height:1.55;word-break:keep-all;overflow-wrap:anywhere}
#mbox .chathist div{padding:6px 10px;border-radius:10px;background:rgba(122,74,40,.08)}
#mbox .chathist .sys{background:rgba(232,154,28,.14)}
#mbox .chathist small{color:#8a6a4a;margin-right:4px}
/* 💬 답을 기다리는 동안: 대화창 자리에 점 셋 */
#talkwait{position:absolute;left:50%;bottom:calc(150px + env(safe-area-inset-bottom));transform:translateX(-50%);display:none;gap:6px;padding:10px 16px;border-radius:999px;background:rgba(248,239,208,.95);box-shadow:0 0 0 2px #7a4a28,0 4px 10px rgba(0,0,0,.3);pointer-events:none;z-index:12}
#talkwait.on{display:flex}
#talkwait i{width:8px;height:8px;border-radius:50%;background:#7a4a28;animation:twdot 1s infinite ease-in-out}
#talkwait i:nth-child(2){animation-delay:.15s}#talkwait i:nth-child(3){animation-delay:.3s}
@keyframes twdot{0%,60%,100%{transform:translateY(0);opacity:.4}30%{transform:translateY(-5px);opacity:1}}
@media (prefers-reduced-motion:reduce){#talkwait i{animation:none;opacity:.8}}
/* 🔔 알림 한 칸 */
#toast{pointer-events:auto!important;cursor:pointer}
#banner{cursor:pointer}
@media (max-width:760px) and (min-height:501px){
  #toast,#banner{top:calc(118px + env(safe-area-inset-top))!important;left:calc(50% - 22px)!important;max-width:calc(100vw - 116px)!important;box-sizing:border-box}
  #banner{width:max-content}
  #toast{word-break:keep-all;overflow-wrap:anywhere;line-height:1.45}
  body.notice #objective:not(.hfold){opacity:0!important;pointer-events:none!important;transition:opacity .2s}
}
/* 👋 어서 와요 카드: 위쪽부터, 길면 안에서 스크롤 */
#newscard{top:calc(env(safe-area-inset-top,0px) + 96px)!important;max-height:calc(100vh - 200px);max-height:calc(100dvh - 200px);overflow-y:auto;overscroll-behavior:contain}
#newscard h3.nh{margin-top:12px}
/* 👋 어서 와요 카드: 시계 칩 아래부터 · 버튼은 늘 카드 아래에 붙어 있게 */
#newscard{top:calc(env(safe-area-inset-top,0px) + 114px)!important;max-height:calc(100vh - 220px);max-height:calc(100dvh - 220px)}
#newscard .nb{position:sticky;bottom:-12px;margin:12px -16px -12px;padding:10px 16px 12px;background:linear-gradient(rgba(248,236,208,0),#f8ecd0 30%)}
/* 📍 따라가기: 목표 카드의 상태 · 방향 줄 · 문 앞 버튼 · 지도 반짝이 */
#objective .qguide{margin-top:3px;font-size:12px;line-height:1.45;color:#9a4a14;font-weight:700;word-break:keep-all}
#objective .qknock{pointer-events:auto;margin-left:4px;padding:3px 10px;min-height:30px;font-size:12px;border-radius:999px;clip-path:none}
#objective .qmainline{opacity:.8}
.tmapbox .mk.track{z-index:6}.tmapbox .mk.track i{display:inline-block;animation:trackpulse 1.1s ease-in-out infinite}.tmapbox .mk.track span{background:#ffe066;color:#5a3a00;font-weight:700;box-shadow:0 0 0 2px #c8901a}
@keyframes trackpulse{50%{transform:scale(1.35)}}
@media (prefers-reduced-motion:reduce){.tmapbox .mk.track i{animation:none}}
/* ⚔️ 타이밍 보너스 링 */
#btiming{position:absolute;inset:0;display:none;z-index:30;cursor:pointer;touch-action:manipulation}
#btiming.on{display:block}
#bbox.timing #bmenu{opacity:.5;transition:opacity .12s}
#btext.tm{display:flex;align-items:center;gap:12px}
#btext .tml{flex:none;white-space:nowrap}
#btgauge{position:relative;flex:1;min-width:0;height:14px;border-radius:7px;background:rgba(94,59,26,.14);box-shadow:inset 0 0 0 2px var(--woodl)}
#btgauge .gz{position:absolute;top:2px;bottom:2px;left:calc(var(--perf) - 16%);width:32%;background:rgba(240,169,42,.3)}
#btgauge .pz{position:absolute;top:2px;bottom:2px;left:calc(var(--perf) - 7%);width:14%;border-radius:3px;background:#f0a92a}
#btgauge .mk{position:absolute;top:-3px;bottom:-3px;left:0;width:4px;margin-left:-2px;border-radius:2px;background:var(--brown);animation:btmk var(--dur,1000ms) linear forwards}
@keyframes btmk{to{left:100%}}
#btgauge.hit .mk,#btgauge.good .mk,#btgauge.miss .mk{animation-play-state:paused}
#btgauge.hit .pz{background:#ffd23a;box-shadow:0 0 0 2px #fff6d0}
#btgauge.miss{opacity:.45}
@media (prefers-reduced-motion:reduce){#btgauge .mk{animation-timing-function:steps(12)}}
#mbox .polaroid.strip{cursor:pointer}#mbox .polaroid.strip .pic img{width:auto;height:100%;max-height:120px;image-rendering:auto;border-radius:4px}
