*{box-sizing:border-box}html,body{margin:0;width:100%;height:100%;overflow:hidden;background:#080e14;color:#fff5df;font-family:Georgia,'Noto Sans KR',system-ui,sans-serif}body{display:grid;place-items:center}button,input{font:inherit}button{min-width:44px;min-height:44px;color:#fff5df;border:0;background:transparent;cursor:pointer;touch-action:manipulation}button:hover,button:focus-visible{color:#ffe09b;background:#ffffff12;outline:2px solid #e4d6a1;outline-offset:-3px}button:disabled{opacity:.4;cursor:default}#game{position:relative;width:min(100vw,177.7778vh);height:min(56.25vw,100vh);overflow:hidden;background:#111b23;isolation:isolate}#scene{width:100%;height:100%;display:block;touch-action:none}#scene.soft{filter:blur(.22px)}#scene.sharp{filter:url(#softSharp)}#overlay{position:absolute;inset:0;pointer-events:none}#overlay>*{pointer-events:auto}#fade{position:absolute;inset:0;background:#080e14;opacity:0;pointer-events:none;transition:opacity .22s;z-index:10}#fade.on{opacity:1}.window{background:linear-gradient(145deg,#19385cf5,#0a1935fa);border:2px solid #a6b9c7;border-radius:4px;box-shadow:inset 0 0 0 2px #344e70,0 3px 10px #0008;padding:clamp(10px,1.6vw,24px)}.loading{position:absolute;inset:0;display:grid;place-content:center;text-align:center;letter-spacing:6px;background:#111e29;line-height:2}.loading small{font:15px system-ui;letter-spacing:1px}.title{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;background:linear-gradient(90deg,#091522b8,#09152230,#09152288)}.title h1{font-size:clamp(32px,5vw,68px);letter-spacing:.22em;text-shadow:0 3px 15px #000;margin:0}.title .subtitle{letter-spacing:.3em;font-size:clamp(14px,1.8vw,24px);margin:12px 0 30px}.title .window{min-width:250px;display:flex;flex-direction:column;text-align:center}.title small{margin-top:20px;font:12px system-ui;color:#cad1cf}.dialogue{position:absolute;left:4%;right:4%;bottom:4%;min-height:23%;display:grid;grid-template-columns:90px 1fr;gap:20px;align-items:center;font-family:system-ui,sans-serif}.dialogue .portrait{height:100px;overflow:hidden;align-self:end}.dialogue .portrait img{width:100%;image-rendering:auto}.dialogue .speaker{color:#ebcd8c;font-size:clamp(14px,1.7vw,22px);margin-bottom:8px}.dialogue .text{font-size:clamp(14px,1.6vw,22px);line-height:1.65;white-space:pre-line}.dialogue .next{position:absolute;right:10px;bottom:2px;font-size:14px;color:#ddc28b}.menu{position:absolute;inset:9% 15%;font:clamp(14px,1.7vw,22px) system-ui;overflow:auto}.menu h2{font-size:1.2em;font-weight:500;color:#ecd39a;margin:0 0 18px}.menu .menurow{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:8px 0;border-bottom:1px solid #a7b8c222}.menu .choices{display:flex;gap:8px;flex-wrap:wrap}.menu .choices button{border:1px solid #a7b8c244;padding:8px 14px}.menu .choices button.selected{border-color:#e5cd93;background:#a9b9ce22}.menu p{line-height:1.6;color:#cbd7df}.menu .close{float:right}.nameInput{background:#09172b;color:#fff1d4;border:1px solid #b7c8d6;padding:10px;max-width:240px;width:100%;min-height:44px}.title label{font:15px system-ui;margin:10px}.title input{margin:10px auto}#location{position:absolute;left:3%;top:4%;font-size:clamp(13px,1.6vw,22px);color:#fff4de;text-shadow:0 2px 4px #000;pointer-events:none;opacity:0;transition:opacity 1s}#location.show{opacity:1}#menuButton{position:absolute;right:2%;top:2%;font:24px system-ui;text-shadow:0 2px 3px #000;background:#0c1d2c77;border:1px solid #d7e0dd55;border-radius:4px}#controls{position:absolute;inset:0;pointer-events:none}#touchControl{position:absolute;left:max(3%,env(safe-area-inset-left));bottom:3%;display:flex;flex-direction:column;align-items:center;gap:6px}#swipePad{pointer-events:auto;position:relative;display:block;width:132px;height:132px;min-width:132px;min-height:132px;border-radius:50%;border:1px solid #dce9d770;background:radial-gradient(circle,#16304580 0 35%,#11273c66 36% 68%,#c3d9cd18 69%);box-shadow:inset 0 0 20px #08162555,0 2px 10px #0003;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;color:#e9e3c5}#swipePad.active{border-color:#ead19a;background-color:#1b3a5066}#padKnob{position:absolute;inset:43px;display:grid;place-items:center;border:1px solid #e4d5aa99;background:#b7cfca25;border-radius:50%;box-shadow:0 2px 6px #0004;will-change:transform;font:11px system-ui;pointer-events:none}.pad-mark{position:absolute;pointer-events:none;font:22px system-ui;color:#e5dfc299}.pad-mark.north{top:5px;left:57px}.pad-mark.south{bottom:5px;left:57px}.pad-mark.west{left:9px;top:49px}.pad-mark.east{right:9px;top:49px}#controlHint{font:11px system-ui;color:#e0e6d9cc;text-shadow:0 1px 3px #000;white-space:nowrap;pointer-events:none}#rotate{display:none;position:absolute;inset:0;background:#101d2cf5;z-index:30;align-content:center;text-align:center;font:24px system-ui;line-height:2}#rotate small{font-size:15px}@media(orientation:portrait) and (max-width:700px){#rotate{display:grid}}@media(max-height:500px){.dialogue{left:2%;right:2%;bottom:2%;grid-template-columns:55px 1fr;gap:10px;min-height:28%;padding:10px 14px}.dialogue .portrait{height:68px}.dialogue .text{font-size:14px;line-height:1.45}.dialogue .speaker{margin-bottom:4px}.menu{inset:3% 12%;padding:12px}.menu h2{margin-bottom:8px}.menu .menurow{padding:2px 0}.title .subtitle{margin:5px 0 12px}.title small{margin-top:8px}#touchControl{bottom:2%;gap:2px}}

.title .segment{font:clamp(12px,1.3vw,17px) system-ui;color:#e0d3b2;letter-spacing:.1em;margin:-15px 0 20px}@media(max-height:500px){.title .segment{margin:-3px 0 10px}}

/* Completion is a compact notice, not an empty full-height menu. */
.menu.ending{inset:auto 20%;top:50%;transform:translateY(-50%);height:auto;max-height:70%;overflow:auto}.menu.ending p{margin:12px 0;line-height:1.5}.menu.ending h2{margin-bottom:12px}.menu.ending button{padding:8px 14px;min-height:44px;margin-top:4px}@media(max-height:500px){.menu.ending{left:10%;right:10%;padding:12px 16px}.menu.ending p{margin:8px 0;font-size:14px}.menu.ending h2{margin-bottom:6px}}

#directionPad{display:grid;grid-template-columns:repeat(3,48px);grid-template-rows:repeat(2,48px);gap:3px;pointer-events:auto}#directionPad button{background:#142b44c9;border:1px solid #e5d3a477;border-radius:8px;touch-action:none;user-select:none}#directionPad [data-direction=up]{grid-column:2}#directionPad [data-direction=left]{grid-row:2;grid-column:1}#directionPad [data-direction=down]{grid-row:2;grid-column:2}#directionPad [data-direction=right]{grid-row:2;grid-column:3}#actionButton{position:absolute;right:max(4%,env(safe-area-inset-right));bottom:6%;pointer-events:auto;width:68px;height:68px;border-radius:50%;background:#142b44dd;border:1px solid #ead69e;font:16px system-ui}#saveNotice{position:absolute;top:12%;left:20%;right:20%;text-align:center;background:#602c20;color:#fff;z-index:12;font:14px system-ui}#saveNotice:empty{display:none}

#actionButton:disabled{opacity:.45}.town-map{width:min(90vw,780px);max-height:92vh;overflow:auto}.town-map-image{position:relative;margin:10px auto;width:min(100%,640px)}.town-map-image img,.town-map-image canvas{display:block;width:100%;border-radius:6px}.town-map-image button{position:absolute;transform:translate(-50%,-50%);font-size:13px;padding:6px 10px;white-space:nowrap;background:#172735ed;border:1px solid #e4c485;border-radius:5px;color:#fff}

.map-browser-link{display:block;color:#f0d69a;text-align:center;padding:12px 16px;min-height:44px;text-decoration:underline}.map-browser-link:focus-visible{outline:3px solid #ffdf8b}
/* Joined village map: current position marker (place buttons live in the list above). */
.town-map-image .here{position:absolute;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:#ffd76a;border:2px solid #fff;box-shadow:0 0 0 3px rgba(0,0,0,.45);pointer-events:none;animation:herePulse 1.2s ease-in-out infinite}
@keyframes herePulse{50%{transform:scale(1.35)}}

.shop{max-width:640px}.shop h2 small{margin-left:12px;color:#f0d48e;font-size:.8em}.shop-hint{opacity:.85;margin:4px 0 10px}.shop-list{display:grid;gap:6px;max-height:min(60vh,520px);overflow:auto}.shop-row{display:grid;grid-template-columns:44px 1fr auto auto;gap:10px;align-items:center;padding:6px 8px;border:1px solid #ffffff22;border-radius:8px}.shop-row img{width:44px;height:44px;object-fit:contain}.shop-name{display:grid;min-width:0}.shop-name small{opacity:.75}.shop-own{font-size:.85em;opacity:.8}.shop-row button{min-width:76px}

.dialogue .portrait.none{visibility:hidden;width:0;margin:0}
.menu.final-ending{top:auto;bottom:2%;transform:none;max-height:62%;background:rgba(10,16,30,.84)}
/* ===== UI theme v2 (UIX kit: navy + gold) ===== */
#overlay .window,.menu.window{background:none;border:0;border-radius:0;box-shadow:0 10px 30px #000a;border-image:url(assets/ui/panel_menu.png) 34 fill / 18px stretch;padding:clamp(14px,2vw,28px)}
#overlay button:not(.close):not(.next),.battle-ui button{background:none;border:0;border-radius:0;border-image:url(assets/ui/button_normal.png) 30 fill / 12px stretch;color:#fff6e0;font-weight:600;letter-spacing:.02em;text-shadow:0 1px 2px #000c;padding:9px 18px;margin:4px;transition:transform .08s,filter .12s}
#overlay button:not(.close):not(.next):hover,#overlay button:not(.close):not(.next):focus-visible,.battle-ui button:hover,.battle-ui button:focus-visible{border-image-source:url(assets/ui/button_pressed.png);filter:brightness(1.18) drop-shadow(0 0 6px #ffd98a88);outline:none}
#overlay button:not(.close):not(.next):active{transform:translateY(1px) scale(.98)}
#overlay button:disabled,.battle-ui button:disabled{border-image-source:url(assets/ui/button_disabled.png);color:#9aa6b2;filter:none}
#overlay button.selected{border-image-source:url(assets/ui/tab_selected.png);color:#ffe7a8}
#overlay h2{color:#ffe2a0;letter-spacing:.06em;text-shadow:0 2px 6px #000;font-weight:700}
/* title */
.title.v2{background:linear-gradient(180deg,#05101ccc 0%,#05101c33 35%,#05101c99 100%),url(art/cg/book.webp) center/cover no-repeat;justify-content:flex-end;padding-bottom:6%}
.title.v2 .logo{position:absolute;top:9%;left:0;right:0;text-align:center}
.title.v2 h1{font:900 clamp(40px,7vw,96px) 'Times New Roman',serif;letter-spacing:.28em;margin:0;background:linear-gradient(180deg,#fff6d6,#f1c35c 55%,#a8701e);-webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 4px 10px #000c)}
.title.v2 .subtitle{font:700 clamp(16px,2.2vw,30px) serif;letter-spacing:.5em;color:#fde9b8;text-shadow:0 2px 8px #000;margin:6px 0 0}
.title.v2 .segment{color:#d9e4ef;margin:10px 0 0;letter-spacing:.2em}
.title.v2 .titlemenu{display:flex;flex-direction:column;gap:2px;min-width:260px}
.title.v2 .titlemenu button{font-size:clamp(16px,1.8vw,22px);padding:12px 30px}
.title.v2 small{color:#c8d3dd;text-shadow:0 1px 3px #000}
/* tabbed field menu */
.menu.v2{inset:5% 8%;display:flex;flex-direction:column;text-align:left;gap:10px}
.menu.v2 .tabs{display:flex;gap:4px;flex-wrap:wrap}
.menu.v2 .tabs button{border-image-source:url(assets/ui/tab_normal.png)!important;min-width:96px}
.menu.v2 .tabs button.on{border-image-source:url(assets/ui/tab_selected.png)!important;color:#ffe7a8}
.menu.v2 .tabbody{flex:1;overflow:auto;padding:4px}
.menu.v2 .gold{margin-left:auto;align-self:center;color:#ffe2a0;font-weight:700}
.pcards{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px}
.pcard{display:grid;grid-template-columns:84px 1fr;gap:10px;align-items:center;padding:10px;border-image:url(assets/ui/panel_tooltip.png) 30 fill / 12px stretch}
.pcard canvas{width:84px;height:94px;border-radius:6px;background:#0b1a2e}
.pcard b{color:#ffe2a0;font-size:1.05em}.pcard .job{color:#bcd3ea;font-size:.85em}
.gauge{position:relative;height:12px;margin:5px 0 2px;border-image:url(assets/ui/gauge_track.png) 10 fill / 6px stretch}
.gauge i{position:absolute;left:3px;top:2px;bottom:2px;border-radius:6px;background:url(assets/ui/gauge_hp.png) left/100% 100%}
.gauge.mp i{background-image:url(assets/ui/gauge_mp.png)}
.gauge.xp i{background-image:url(assets/ui/gauge_special.png)}
.pcard small{color:#d5dde6}.pcard .gear{color:#a9c4dd;font-size:.8em;margin-top:3px}
.itemgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.itemrow{display:flex;align-items:center;gap:10px;padding:8px;border-image:url(assets/ui/panel_tooltip.png) 30 fill / 10px stretch}
.itemrow img{width:40px;height:40px}
.itemrow .n{flex:1}.itemrow .c{color:#ffe2a0;font-weight:700}
.sysrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 0;border-bottom:1px solid #ffffff14}
.sysrow>span{min-width:110px;color:#cfe0f0}
.objective{padding:14px;border-image:url(assets/ui/panel_tooltip.png) 30 fill / 12px stretch;color:#fff3d6;line-height:1.6}
.menu.v2 .close{position:absolute;right:14px;top:10px;width:40px;height:40px;font-size:22px;color:#ffe2a0}
.bgauge{display:block;position:relative;height:8px;margin-top:2px;border-image:url(assets/ui/gauge_track.png) 10 fill / 5px stretch;min-width:70px}
.bgauge>i{position:absolute;left:2px;top:1px;bottom:1px;max-width:calc(100% - 4px);border-radius:4px;background:url(assets/ui/gauge_hp.png) left/100% 100%}
.bgauge.mp>i{background-image:url(assets/ui/gauge_mp.png)}.bgauge.en{display:inline-block;width:90px;vertical-align:middle;margin-left:6px}
.battle-ui .battle-member,.battle-ui .battle-enemy-hp{align-items:center}
@media(min-height:501px){.dialogue{grid-template-columns:118px 1fr}.dialogue .portrait canvas{width:110px;height:122px}}
.dialogue .speaker{color:#ffe2a0;font-weight:700;font-size:1.08em;letter-spacing:.04em;text-shadow:0 1px 3px #000}
.dialogue .text{line-height:1.6;font-size:clamp(15px,1.5vw,20px)}
@media(min-height:501px){.dialogue .portrait{height:126px;width:114px;align-self:center;border-image:url(assets/ui/panel_tooltip.png) 30 fill / 8px stretch;padding:2px;box-sizing:border-box;overflow:hidden}.dialogue .portrait canvas{width:110px;height:122px;display:block}}
.dialogue .portrait.none{visibility:hidden}
.title.v2 .namebox{min-width:320px;gap:6px;color:#ffe2a0;font-weight:700}
.title.v2 .namebox input{font:600 20px system-ui;text-align:center;padding:10px 14px;color:#fff6e0;background:#06132599;border:2px solid #d9b46a;border-radius:8px;outline:none;width:80%}
.title.v2 .namebox input:focus{box-shadow:0 0 12px #ffd98a88}
/* shop v2 */
.menu.shop{inset:6% 14%;text-align:left}
.shop-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:8px;overflow:auto;max-height:62vh}
.shop-row{display:grid;grid-template-columns:48px 1fr auto auto;gap:10px;align-items:center;padding:8px 10px;border-image:url(assets/ui/panel_tooltip.png) 30 fill / 10px stretch}
.shop-row img{width:44px;height:44px}
.shop-name b{color:#fff3d6}.shop-name small{display:block;color:#a9c4dd}
.shop-own{color:#ffe2a0;font-size:.85em}
.menu.shop h2 small{float:right;color:#ffe2a0}
.shop-hint{color:#d5e3f0;margin:4px 0 10px}
/* touch d-pad */
#directionPad button{background:url(assets/ui/swipe_knob.png) center/contain no-repeat!important;border:0!important;color:#fff3d6;text-shadow:0 1px 3px #000;opacity:.85}
#actionButton{background:url(assets/ui/swipe_base.png) center/contain no-repeat!important;border:0!important;color:#ffe2a0;font-weight:700;text-shadow:0 1px 3px #000}
#menuButton{border-image:url(assets/ui/button_normal.png) 30 fill / 8px stretch;background:none!important;border-radius:0}
#location{color:#ffe2a0;text-shadow:0 2px 4px #000;font-weight:700;letter-spacing:.06em}
.sticon{width:22px;height:22px;vertical-align:middle;margin:0 2px 0 4px;filter:drop-shadow(0 1px 2px #000)}

/* Run toggle */
#runButton{position:absolute;right:calc(max(4%,env(safe-area-inset-right)) + 78px);bottom:calc(6% + 6px);pointer-events:auto;width:56px;height:56px;border-radius:50%;background:#142b44cc;border:1px solid #ead69e88;color:#ffe2a0;font:600 13px system-ui;text-shadow:0 1px 3px #000}#runButton.on{background:#8a5a14dd;border-color:#ffd98a;box-shadow:0 0 12px #ffcf6a88}
@media (pointer:fine){#runButton{opacity:.85}}

/* 직업 화면 */
.menu.v2 .jobs{display:flex;flex-direction:column;gap:10px;max-height:62vh;overflow:auto;padding-right:6px}
.jobs .jwho{display:flex;gap:6px;flex-wrap:wrap}.jobs .jwho button{min-width:84px}
.jobs .jcur{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.jobs .jcur b{font-size:20px;color:#ffe2a0}.jobs .jcur .gauge{flex:1;min-width:140px}
.jobs .jgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:6px}
.jobs .jt{display:flex;flex-direction:column;align-items:flex-start;text-align:left;padding:6px 8px;line-height:1.25}.jobs .jt small{opacity:.8;font-size:11px}
.jobs .jt.locked{opacity:.55;filter:grayscale(.6)}.jobs .jt.tier-advanced b{color:#9fd3ff}.jobs .jt.tier-legendary b{color:#ffcf6a}
.jobs h3{margin:6px 0 0;font-size:15px;color:#ffe2a0}.jobs h3 small{font-weight:400;opacity:.75;font-size:12px}
.jobs .jskills{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:6px}
.jobs .jsk{display:flex;gap:8px;align-items:flex-start;background:#0b182a88;border:1px solid #e5d3a433;border-radius:8px;padding:6px}.jobs .jsk.locked{opacity:.5}
.jobs .jdesc{font-size:12px;opacity:.85}.skico{width:30px;height:30px;border-radius:6px;flex:none;vertical-align:middle;margin-right:4px}
.jobs .jsup{display:flex;flex-wrap:wrap;gap:6px}.jobs .jsup button{display:flex;align-items:center;gap:2px}.jobs .jsup small{opacity:.7;margin-left:4px}
.jobs .jhint{opacity:.8;font-size:13px;margin:0}
.battle-commands button img.skico{width:22px;height:22px}
/* 장비 · 상점 */
.shop .tabs{display:flex;gap:6px;margin:4px 0}
.shop .tabs button.on{background:#f0d48e;color:#2a1d10}
.shop-name i.slot{font-style:normal;font-size:11px;opacity:.7;margin-left:4px;padding:1px 5px;border:1px solid #ffffff33;border-radius:6px}
.eqwhos{display:flex;flex-wrap:wrap;gap:4px;margin-top:3px}
.eqwho{font-size:11px;padding:1px 6px;border-radius:8px;background:#ffffff14}
.eqwho.up{color:#8ff0a0}.eqwho.down{color:#ff9b8f}.eqwho.same{opacity:.7}.eqwho.none{opacity:.55}
.eqnow{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin:0 0 8px}
.eqs .eqbest{margin-left:auto;background:#3c5a2e}
.eqstats{display:flex;flex-wrap:wrap;gap:6px 14px;margin:10px 0;padding:6px 10px;border-radius:8px;background:#ffffff0d}
.eqstats small{opacity:.65;margin-right:3px}
.eqslots{display:grid;gap:6px}
.eqslot{display:grid;grid-template-columns:64px 36px auto 1fr;align-items:center;gap:8px;text-align:left;padding:5px 8px}
.eqslot .sn{opacity:.7;font-size:12px}
.eqslot i{grid-column:2/5;opacity:.5}
.eqslot small{opacity:.75;font-size:11px;justify-self:end}
.eqico{width:34px;height:34px;object-fit:contain}
.eqlist{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:6px}
.eqcand{display:grid;grid-template-columns:36px 1fr auto;align-items:center;gap:2px 8px;text-align:left;padding:5px 8px}
.eqcand div{grid-column:2/4;font-size:11px}
.eqcand .up{color:#8ff0a0;margin-right:6px}.eqcand .down{color:#ff9b8f;margin-right:6px}.eqcand .same{opacity:.6}
@media (max-width:720px){.eqslot{grid-template-columns:52px 32px 1fr}.eqslot small{grid-column:2/4;justify-self:start}}
.menu.window.shop{width:min(900px,94vw);max-width:none}
.eqslots{grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}
.eqremove{align-self:start;padding:8px 14px}
.itemgrid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))!important}
.itemrow{display:grid!important;grid-template-columns:40px 1fr auto auto;align-items:center;gap:8px}
.itemrow .n{display:grid;line-height:1.25}
.itemrow .n small{opacity:.7;font-size:11px}
.itemrow img{width:40px;height:40px;object-fit:contain}
/* 의뢰 게시판 · 도감 · 업적 */
.qlist{display:grid;gap:6px}
.qrow{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;padding:8px 10px;border:1px solid #ffffff22;border-radius:8px;background:#0b1a2c55}
.qrow>div{display:grid;gap:2px}
.qrow small{opacity:.78;font-size:12px}
.qrow small.who{opacity:.9;font-style:italic}
.qrow.done{opacity:.6}
.qdone{color:#f0d48e;font-weight:700}
.dexgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:6px;max-height:40vh;overflow:auto;margin-bottom:10px}
.dexrow{display:grid;grid-template-columns:38px 1fr;gap:0 8px;padding:6px 8px;border-radius:8px;background:#ffffff0d}
.dexrow .no{grid-row:1/4;opacity:.55;font-size:12px;align-self:center}
.dexrow small{font-size:11px;opacity:.8}
.dexrow.unk{opacity:.4}
.dexrow.boss b{color:#ffcf6a}
.dexrow .up{color:#8ff0a0}.dexrow .down{color:#9fc0ff}
.dex h3 small{opacity:.7;font-weight:400;margin-left:6px}
.shop-row .qty{display:flex;gap:4px}
.shop-row .qty .x5{min-width:44px;padding-left:6px;padding-right:6px}
.sysrow .vol{display:inline-flex;align-items:center;gap:6px;margin-right:14px}
.sysrow .vol button{min-width:34px;padding:2px 8px}
.sysrow.slots button{display:inline-flex;flex-direction:column;align-items:flex-start;line-height:1.2}
.sysrow.slots button small{font-size:10px;opacity:.75}
.battle-window .autooff{margin-left:8px}
/* 타이틀 화면 v3 (GPT 18) */
.title.v3{background:linear-gradient(180deg,#05101c55 0%,#05101c00 30%,#05101c00 55%,#05101cbb 100%),url(assets/title/TITLE_bg.webp) center/cover no-repeat;padding-bottom:4%;animation:titlezoom 40s ease-in-out infinite alternate}
.title.v3.cleared{background-image:linear-gradient(180deg,#05101c55 0%,#05101c00 30%,#05101c00 55%,#05101cbb 100%),url(assets/title/TITLE_bg_cleared.webp)}
@keyframes titlezoom{from{background-size:auto,cover;background-position:center,center}to{background-size:auto,112%;background-position:center,52% 46%}}
.title.v3 .logo{top:3%}
.title.v3 .logoimg{width:min(58vw,700px);filter:drop-shadow(0 8px 18px #000a);animation:logofloat 6s ease-in-out infinite}
@keyframes logofloat{50%{transform:translateY(-6px);filter:drop-shadow(0 10px 24px #3fe0d466) drop-shadow(0 8px 18px #000a)}}
.title.v3 .segment{display:inline-flex;align-items:center;gap:8px;margin-top:-10px;color:#ffe9b0;text-shadow:0 2px 6px #000}
.title.v3 .segment img{width:34px;height:34px}
.title.v3 .titlemenu{gap:8px;min-width:0;align-items:center}
#overlay button.tbtn:not(.close):not(.next){filter:none;display:flex;align-items:center;justify-content:center;gap:12px;width:min(42vw,380px);height:clamp(56px,7.5vh,72px);padding:0 40px;font:700 clamp(17px,1.9vw,23px) system-ui;color:#fff3d2;text-shadow:0 2px 4px #000;background:none;border-style:solid;border-width:0 54px;border-image:url(assets/title/BTN_title_normal.webp) 0 120 fill / 0 54px stretch;cursor:pointer;transition:transform .12s}
#overlay button.tbtn:not(.close):not(.next) img{width:34px;height:34px;margin-left:-10px}
#overlay button.tbtn:not(.close):not(.next):hover,#overlay button.tbtn:not(.close):not(.next):focus-visible{border-image-source:url(assets/title/BTN_title_hover.webp);outline:none;transform:scale(1.03)}
#overlay button.tbtn:not(.close):not(.next):active{border-image-source:url(assets/title/BTN_title_pressed.webp);transform:scale(.98)}
#overlay button.tbtn:not(.close):not(.next):disabled{border-image-source:url(assets/title/BTN_title_disabled.webp);color:#bbb}
#overlay button.tbtn:not(.close):not(.next).small{width:min(28vw,230px);height:clamp(44px,6vh,54px);font-size:clamp(14px,1.5vw,17px);border-width:0 40px;border-image:url(assets/title/BTN_small_normal.webp) 0 90 fill / 0 40px stretch}
#overlay button.tbtn:not(.close):not(.next).small:hover,#overlay button.tbtn:not(.close):not(.next).small:focus-visible{border-image-source:url(assets/title/BTN_small_hover.webp)}
#overlay button.tbtn:not(.close):not(.next).small:active{border-image-source:url(assets/title/BTN_small_pressed.webp)}
#overlay button.tbtn:not(.close):not(.next).small img{width:26px;height:26px}
@media (max-aspect-ratio:1/1){.title.v3{background-image:linear-gradient(180deg,#05101c55,#05101c00 30%,#05101cbb),url(assets/title/TITLE_bg_mobile.webp)}}
.loading.v3{background:#0a1220 url(assets/title/LOADING_bg.webp) center/cover no-repeat;gap:12px;color:#ffe9b8;text-shadow:0 2px 6px #000}
.loading.v3 .mark{width:min(22vw,200px);margin:0 auto;filter:drop-shadow(0 0 18px #3fe0d455)}
.loading.v3 .spin{width:64px;height:64px;margin:0 auto;animation:spin 2.4s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.title.v3 .namebox{background:#06132bcc;border:2px solid #c9a35a;border-radius:12px;padding:16px 22px;align-items:center}
#overlay button.tbtn:not(.close):not(.next){white-space:nowrap;padding:0 14px}
#overlay button.tbtn:not(.close):not(.next).small{padding:0 6px}
.title.v3 .segment{display:flex;justify-content:center;width:fit-content;margin:-6px auto 0;padding:4px 14px;border-radius:20px;background:#06132b99}
.title.v3 .namebox .titlemenu{margin-top:8px}
.title.v3 .logoimg{width:min(58vw,700px,78vh)}
/* Keep the logo and start controls in separate rows, including narrow previews. */
.title.v3{padding:2% 2% 3%;gap:8px}
.title.v3 .logo{position:static;display:flex;flex:1 1 0;min-height:0;width:100%;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:9vh;pointer-events:none}
.title.v3 .logoimg{flex:0 1 auto;min-height:0;width:min(50vw,640px);height:auto;aspect-ratio:2/1;max-height:100%;object-fit:contain}
/* 낮은 화면(휴대폰 가로): 버튼을 낮춰 로고 자리를 남긴다 */
@media (max-height:480px){#overlay .title.v3 button.tbtn:not(.close):not(.next){height:40px;font-size:15px}#overlay .title.v3 button.tbtn:not(.close):not(.next).small{height:32px;font-size:13px}#overlay .title.v3 button.tbtn:not(.close):not(.next) img{width:24px;height:24px}.title.v3{gap:4px}.title.v3>.titlemenu{gap:4px}.title.v3 small{margin-top:2px}}
.title.v3 .segment{flex:none;margin:0 auto}
.title.v3>.titlemenu{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;justify-items:center;flex:none;width:min(88%,380px)}
#overlay .title.v3>.titlemenu>button{margin:0;grid-column:1/-1}
#overlay .title.v3>.titlemenu>button.tbtn{width:100%}
#overlay .title.v3>.titlemenu>button.tbtn.small{grid-column:auto;width:100%;gap:8px;border-width:0 22px;border-image-width:0 22px}
#overlay .title.v3>.titlemenu>button.tbtn.small img{width:22px;height:22px;margin-left:0}
.title.v3>small{flex:none;margin-top:0;text-align:center}
.title.v3 .namebox{flex:0 1 auto;min-height:0;min-width:0;width:min(94%,440px);max-height:100%;overflow-y:auto}
.kitmap{width:min(1180px,96vw);max-width:none}
.kitmap-body{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start}
.kitmap canvas{width:min(760px,62vw);height:auto;border-radius:10px;border:2px solid #c9a35a55;background:#0b1622}
.kitmap-list{display:grid;gap:4px;max-height:min(58vh,440px);overflow:auto}
#overlay .kitmap-list button{display:flex;align-items:center;gap:8px;text-align:left;padding:6px 10px;font-size:13px}
.kitmap-list i{display:inline-grid;place-items:center;min-width:22px;height:22px;border-radius:50%;color:#132;font-style:normal;font-weight:800;font-size:12px}
.menu.window.kitmap{inset:4% 3%;width:auto;max-width:none;transform:none}
.savecode textarea{width:100%;height:min(30vh,220px);font:12px ui-monospace,monospace;color:#e8f0ff;background:#06132b;border:1px solid #c9a35a77;border-radius:8px;padding:8px;word-break:break-all;resize:vertical}
.savecode input[type=file]{margin:8px 0;color:#dfe6ef}
.menu.window.tsettings{inset:8% 14%}
.diffrow{display:flex;gap:6px;justify-content:center}
.diffrow button{min-width:84px}
.title.v3 .namebox .diffhint{font-size:12px;opacity:.8;max-width:360px;text-align:center}
.title.v3 .namebox label{color:#ffe2a0}
.menu.window.helpv{inset:6% 10%}
.helpwrap{display:grid;grid-template-columns:200px 1fr;gap:14px;min-height:50vh}
.helptabs{display:grid;gap:4px;align-content:start}
#overlay .helptabs button{text-align:left;padding:8px 12px;font-size:14px}
.helpcard{background:#06132b88;border:1px solid #c9a35a55;border-radius:10px;padding:12px 20px}
.helpcard h3{color:#ffe2a0;margin:4px 0 8px}
.helpcard li{margin:8px 0;line-height:1.5}
.title.v3.bgonly{pointer-events:none}
.turnorder{position:absolute;top:64px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:4px;padding:3px 10px;border-radius:14px;background:#06132bb8;font-size:12px;white-space:nowrap;max-width:94%;overflow:hidden}
.turnorder small{opacity:.7;margin-right:4px}
.turnorder .to{padding:1px 8px;border-radius:10px}
.turnorder .ally{background:#2b5a8a;color:#e8f4ff}
.turnorder .enemy{background:#7a2e3a;color:#ffe3e3}
.turnorder i{opacity:.6;font-style:normal}
/* 엔딩 크레딧 */
.credits{position:absolute;inset:0;overflow:hidden;background:linear-gradient(180deg,#05101cee,#05101cbb 30%,#05101cbb 70%,#05101cee);color:#fdf3dc;text-align:center}
.credits .roll{position:absolute;left:0;right:0;top:100%;animation:roll 58s linear forwards;padding-bottom:20vh}
.credits .roll img{width:min(46vw,520px);margin-bottom:6vh}
.credits h3{color:#f0d48e;letter-spacing:.2em;margin:5vh 0 1vh;font-size:clamp(14px,1.6vw,20px);font-weight:600}
.credits p{margin:.6vh 0;font-size:clamp(16px,2vw,26px)}
.credits .cstats{display:grid;grid-template-columns:auto auto;gap:6px 24px;justify-content:center;font-size:clamp(14px,1.6vw,20px)}
.credits .cstats span{text-align:right;opacity:.8}.credits .cstats b{text-align:left;color:#ffe2a0}
.credits .thanks{margin-top:8vh;font-size:clamp(16px,2vw,24px)}
@keyframes roll{to{transform:translateY(calc(-100% - 100vh))}}
#overlay .credits .skipc{position:absolute;right:20px;bottom:18px;font-size:14px}
/* 대화 도구 · 글자 크기 */
.dialogue .dlgtools{position:absolute;top:-16px;right:70px;display:flex;gap:6px}
#overlay .dialogue .dlgtools button{font-size:12px;padding:3px 10px;min-width:0}
.talklog .loglist{max-height:58vh;overflow:auto;display:grid;gap:6px}
.talklog .loglist p{margin:0;line-height:1.5}.talklog .loglist b{color:#ffe2a0;margin-right:6px}
body[data-ts=s] .dialogue .text{font-size:.88em}
body[data-ts=l] .dialogue .text{font-size:1.22em;line-height:1.5}
body[data-ts=l] .menu{font-size:clamp(16px,1.95vw,25px)}
body[data-ts=s] .menu{font-size:clamp(13px,1.5vw,19px)}
/* 아카식 레코드: 기억 · 넥서스 · 공명 */
.nexusbox{padding:8px 12px;margin:4px 0 10px;border-radius:8px;background:linear-gradient(90deg,#3b5f9a40,#ffffff08);border:1px solid #9fc1ff55}
.nexusbox .up{font-size:1.15em}
.memgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px;max-height:34vh;overflow:auto;margin-bottom:10px}
.memcat{display:flex;flex-direction:column;gap:4px;padding:6px;border-radius:8px;background:#ffffff08}
.memcat>b{color:#e6ce91;font-size:13px}
.memrow{display:flex;flex-direction:column;padding:4px 8px;border-radius:6px;background:#ffffff0d}
.memrow small{font-size:11px;opacity:.85}
.memrow.unk{opacity:.4}
.jres{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:6px 0;padding:6px 8px;border-radius:8px;background:#9fc1ff1a;border:1px solid #9fc1ff55}
.jres button{border-color:#d5c286}
.shop-list .forgewrap{grid-column:1/-1;display:flex;flex-direction:column;gap:6px;margin-bottom:8px}
.shop-list .forgewrap h3{margin:6px 0 0}

/* GPT 14 가게 주인 얼굴 */
.menu.shop.with-owner h2{padding-left:78px;min-height:64px}.owner-face{position:absolute;left:18px;top:14px;width:64px;height:64px;border-radius:50%;object-fit:cover;border:2px solid #f0d48e;box-shadow:0 2px 8px #0008;background:#2a1d10}
.qrow.wanted{border-color:#d9534f88;background:linear-gradient(90deg,#4a1a1a55,transparent)}.qrow.wanted.done{opacity:.7}
/* 별빛 유랑단 놀이 */
.cgame .cgrid{display:grid;grid-template-columns:repeat(4,72px);gap:8px;justify-content:center;margin:10px auto}
.cgame .ccard{width:72px;height:72px;border-radius:10px;background:#2b2a4a;border:2px solid #6a5f9a;color:#d9c76a;font-size:26px;display:flex;align-items:center;justify-content:center;padding:0}
.cgame .ccard.up{background:#f3ecd8;border-color:#b89b4c}
.cgame .ccard.done{opacity:.45}
.cgame .ccard img{width:56px;height:56px;image-rendering:auto}
.cgame .hbar{position:relative;height:28px;margin:18px 10px;border-radius:14px;background:linear-gradient(90deg,#4a2f2f,#2f4a2f 42%,#9ad67a 48%,#ffe08a 50%,#9ad67a 52%,#2f4a2f 58%,#4a2f2f);border:2px solid #8a7a5a}
.cgame .hzone{position:absolute;left:47%;width:6%;top:-4px;bottom:-4px;border:2px solid #ffe08a;border-radius:6px}
.cgame .hneedle{position:absolute;top:-10px;width:4px;height:48px;background:#fff;box-shadow:0 0 6px #fff;transform:translateX(-2px)}
.cgame .hscore{text-align:center;min-height:1.4em}

.memico{width:22px;height:22px;vertical-align:-5px;margin-right:4px;border-radius:4px}
canvas.fx{display:block;margin:0 auto;pointer-events:none}
canvas.fx.inl{display:inline-block;vertical-align:middle;width:40px;height:40px;margin:0 6px 0 0}
.fxbox{position:absolute;left:50%;top:38%;transform:translate(-50%,-50%);pointer-events:none;z-index:3}
.menu.window{position:relative}
.qrow.wanted{display:flex;align-items:center;gap:10px}.qrow.wanted .poster{width:50px;height:70px;border-radius:3px;flex:none;object-fit:cover}

/* World gestures replace the visible movement/action buttons. */
#directionPad,#actionButton,#runButton{display:none!important}
#game{touch-action:none}
#walkStatus{position:absolute;right:76px;top:3%;pointer-events:none;padding:5px 9px;border-radius:5px;background:#102333b8;color:#f5ddb1;font:12px system-ui;text-shadow:0 1px 2px #000}
#walkStatus[hidden]{display:none}
#controlHint{font-size:clamp(9px,1.1vw,12px)}
.jtiers{display:flex;gap:6px;margin:6px 0;flex-wrap:wrap}.jtiers button{flex:0 0 auto;min-width:88px;padding:4px 14px}
.cdxgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:6px;margin-bottom:8px}.cdx{display:flex;flex-direction:column;align-items:center;gap:2px;padding:4px;border-radius:6px;background:rgba(255,255,255,.05);text-align:center}.cdx img{width:40px;height:40px}.cdx small{font-size:10px;line-height:1.15;opacity:.85}.cdx.unk{opacity:.45}.cdx.unk b{width:40px;height:40px;display:flex;align-items:center;justify-content:center;font-size:22px}
.cdxbar{height:8px;min-height:8px;flex:none;border-radius:4px;background:rgba(255,255,255,.12);margin:4px 0 8px;overflow:hidden}.cdxbar i{display:block;height:8px;background:#e8c46a}.cdxrws{display:flex;flex-direction:column;gap:4px;margin-bottom:8px}.cdxrw{display:flex;align-items:center;gap:10px;padding:4px 8px;border-radius:6px;background:rgba(255,255,255,.05)}.cdxrw b{min-width:44px}.cdxrw span:not(.qdone){flex:1;font-size:13px}.cdxrw button{padding:3px 12px}
