:root{
  --bg:#10181b;--panel:#182429;--panel2:#202f35;--panel3:#0f171a;--line:#385059;--text:#f2eee3;--muted:#a9b7ba;
  --gold:#d3b16c;--gold2:#f0d79c;--sea:#2d6874;--danger:#bd625a;--good:#78a184;--warning:#b68a54;
  --shadow:0 12px 30px rgba(0,0,0,.2);--radius:18px
}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%;background:var(--bg);color:var(--text);font-family:ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans TC",sans-serif}
button,select,input{font:inherit} button{cursor:pointer} button:disabled{cursor:not-allowed;opacity:.45}
.app-shell{min-height:100vh;padding-bottom:78px;background:radial-gradient(circle at 18% 0%,#203a42 0,transparent 34%),var(--bg)}
.topbar{height:64px;display:flex;align-items:center;justify-content:space-between;padding:0 18px;border-bottom:1px solid var(--line);background:rgba(16,24,27,.94);position:sticky;top:0;z-index:30;backdrop-filter:blur(10px)}
.brand{display:flex;align-items:center;gap:10px;border:0;background:transparent;color:var(--text);text-align:left;padding:0}.brand-mark{width:38px;height:38px;border:1px solid var(--gold);border-radius:50%;display:grid;place-items:center;color:var(--gold2);font-family:Georgia,serif;font-weight:700}.brand strong,.brand small{display:block}.brand strong{font-family:Georgia,"Noto Serif TC",serif;font-size:17px}.brand small{color:var(--muted);font-size:11px;margin-top:2px}.top-actions{display:flex;gap:8px}
.icon-btn,.ghost-btn,.primary-btn,.choice-btn,.combat-btn,.mini-btn{border:1px solid var(--line);background:var(--panel);color:var(--text);border-radius:12px;padding:9px 12px}.mini-btn{padding:6px 9px;font-size:12px}.primary-btn{background:var(--gold);color:#1b211f;border-color:var(--gold);font-weight:700}.danger-btn{background:var(--danger);border-color:var(--danger);color:white}.good-btn{background:var(--good);border-color:var(--good);color:#101613}.ghost-btn:hover,.choice-btn:hover,.combat-btn:hover,.icon-btn:hover{border-color:var(--gold)}
.status-strip{display:grid;grid-template-columns:auto minmax(110px,1fr) auto auto auto;gap:16px;align-items:center;padding:10px 18px;border-bottom:1px solid var(--line);background:#142024}.status-strip>div{min-width:0}.status-strip span{display:block;color:var(--muted);font-size:11px}.status-strip strong{font-size:14px;white-space:nowrap}.status-strip .grow{min-width:120px}.bar{height:7px;background:#0d1417;border-radius:999px;overflow:hidden;margin-top:3px}.bar i{display:block;height:100%;width:0;background:var(--gold)}.status-strip small{font-size:10px;color:var(--muted)}
.main-view{max-width:1200px;margin:0 auto;padding:18px}.hero{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(270px,.65fr);gap:18px;align-items:start}.panel{background:rgba(24,36,41,.94);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.panel-pad{padding:18px}.section-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.section-title h1,.section-title h2,.section-title h3{font-family:Georgia,"Noto Serif TC",serif;margin:0}.section-title h1{font-size:24px}.section-title h2{font-size:19px}.section-title h3{font-size:16px}.muted{color:var(--muted)}
.map-toolbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-bottom:10px}.map-toolbar label{font-size:12px;color:var(--muted)}.map-toolbar select,.form-control{border:1px solid var(--line);background:var(--panel2);color:var(--text);border-radius:10px;padding:8px 10px}.map-frame{position:relative;border-radius:14px;overflow:hidden;background:#091013;border:1px solid #263b43;touch-action:manipulation}.map-frame img{display:block;width:100%;height:auto;user-select:none}.map-hotspot{position:absolute;transform:translate(-50%,-50%);min-width:30px;height:30px;padding:0 5px;border-radius:50%;border:2px solid rgba(255,244,212,.92);background:rgba(171,67,42,.88);color:white;font-size:10px;font-weight:800;display:grid;place-items:center;box-shadow:0 2px 10px rgba(0,0,0,.5)}.map-hotspot.visited{background:rgba(65,105,111,.9)}.map-hotspot.current{min-width:40px;height:40px;background:rgba(211,177,108,.96);color:#1d211f;animation:pulse 1.6s infinite}.map-hotspot:hover{filter:brightness(1.15);z-index:5}@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(211,177,108,.5)}50%{box-shadow:0 0 0 10px rgba(211,177,108,0)}}
.edge-link{position:absolute;z-index:8;border:1px solid rgba(240,215,156,.85);background:rgba(10,20,23,.84);color:var(--gold2);border-radius:999px;padding:6px 9px;font-weight:800;font-size:11px;backdrop-filter:blur(4px)}.edge-link.north{top:8px;left:50%;transform:translateX(-50%)}.edge-link.south{bottom:8px;left:50%;transform:translateX(-50%)}.edge-link.west{left:8px;top:50%;transform:translateY(-50%)}.edge-link.east{right:8px;top:50%;transform:translateY(-50%)}.map-caption{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px 2px 0;color:var(--muted);font-size:12px}.map-caption b{color:var(--gold2)}
.side-stack{display:grid;gap:14px}.crew-mini{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.crew-card{padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}.crew-card strong{display:block;font-size:13px}.crew-card small{color:var(--muted)}.hpbar{height:6px;background:#11191c;border-radius:999px;overflow:hidden;margin-top:7px}.hpbar i{display:block;height:100%;background:var(--good)}.quick-settings{display:grid;gap:10px}.switch-row{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:9px 0;border-bottom:1px solid rgba(56,80,89,.65)}.switch-row:last-child{border:0}.switch-row label{font-size:13px}.switch-row small{display:block;color:var(--muted);margin-top:2px}.switch-row input{width:20px;height:20px;accent-color:var(--gold)}
.story-layout{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:18px}.story-card{padding:20px}.story-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:14px}.story-key,.badge{display:inline-flex;padding:5px 9px;border-radius:999px;background:#283d44;color:var(--gold2);font-weight:800;font-size:12px}.badge.good{background:#274037;color:#bfe2c8}.badge.bad{background:#482d2b;color:#f1beb8}.badge.warn{background:#493d2c;color:#ead4a8}.story-card h1{font-family:Georgia,"Noto Serif TC",serif;margin:8px 0 0;font-size:25px}.story-text{white-space:pre-wrap;line-height:1.85;color:#e8e6dd}.story-actions{display:grid;gap:9px;margin-top:18px}.choice-btn{text-align:left;padding:12px 14px;background:#1d2b30}.choice-btn b{color:var(--gold2)}.choice-btn .req{display:block;color:var(--muted);font-size:11px;margin-top:4px}.choice-btn.locked{border-color:#634742;background:#2b2424}.story-ref{font-size:11px;color:var(--muted);float:right}.tts-row{display:grid;grid-template-columns:1fr;gap:9px}.tts-row select,.tts-row input[type=range]{width:100%}.tts-buttons{display:flex;gap:8px;flex-wrap:wrap}.inline-note{padding:10px 12px;border:1px solid #4d5b47;background:#273329;border-radius:12px;font-size:12px;color:#d9e6d9}.battle-alert{padding:12px;border:1px solid #714b47;background:#392826;border-radius:12px;margin-top:14px}.battle-alert strong{color:#f0c0b9}.battle-alert button{margin-top:8px}.effect-note{padding:10px 12px;background:#17282d;border:1px solid #31535c;border-radius:12px;margin-top:12px;font-size:12px}.redirect-note{padding:10px 12px;background:#2e2b21;border:1px solid #655b3d;border-radius:12px;color:#ead8ad}
.party-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.party-card{padding:16px}.avatar{width:48px;height:48px;border:1px solid var(--gold);border-radius:50%;display:grid;place-items:center;font-family:Georgia,serif;color:var(--gold2);font-size:18px}.party-head{display:flex;gap:12px;align-items:center}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:14px}.stat{background:var(--panel2);border-radius:10px;padding:8px;text-align:center}.stat span{display:block;color:var(--muted);font-size:10px}.stat b{font-size:14px}.attr-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-top:12px}.attr{padding:7px 4px;text-align:center;background:#142126;border:1px solid #2f464e;border-radius:9px}.attr small{display:block;color:var(--muted);font-size:9px}.skill-list{display:grid;gap:7px;margin-top:12px}.skill-row{display:flex;gap:8px;align-items:center;justify-content:space-between;padding:8px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}.equipment-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:12px}.equipment-grid label{font-size:10px;color:var(--muted)}.equipment-grid select{width:100%;margin-top:4px;border:1px solid var(--line);background:var(--panel3);color:var(--text);border-radius:8px;padding:6px}
.resource-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.resource-card{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}.resource-card span{display:block;color:var(--muted);font-size:11px}.resource-card strong{font-size:20px;color:var(--gold2)}.gear-list{display:grid;gap:8px}.gear-item{display:grid;grid-template-columns:1fr auto;gap:10px;padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}.gear-item small{display:block;color:var(--muted);margin-top:3px}
.combat-stage{display:grid;gap:16px}.enemy-box,.player-box{padding:18px}.enemy-name{font-family:Georgia,"Noto Serif TC",serif;font-size:23px}.health-row{display:flex;align-items:center;gap:10px}.health-track{height:12px;background:#0f1517;border-radius:99px;overflow:hidden;flex:1}.health-track i{display:block;height:100%;background:var(--danger)}.player-box .health-track i{background:var(--good)}.combat-party{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.combat-member{padding:9px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}.combat-member.active{border-color:var(--gold);box-shadow:inset 0 0 0 1px var(--gold)}.combat-member.down{opacity:.45}.combat-actions{display:flex;gap:8px;flex-wrap:wrap}.combat-log{min-height:120px;max-height:260px;overflow:auto;white-space:pre-wrap;padding:12px;background:#10181b;border:1px solid var(--line);border-radius:12px;color:#d7dedc;font-size:13px;line-height:1.55}.boss-phase{color:#f0b7ad;font-weight:700}
.journal-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}.journal-list{display:grid;gap:10px}.journal-item{padding:13px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}.journal-item strong{display:block}.journal-item small{color:var(--muted)}.keyword-toolbar{display:grid;grid-template-columns:1fr auto;gap:8px;margin-bottom:10px}.keyword-chips{display:flex;flex-wrap:wrap;gap:7px}.keyword-chip{border:1px solid var(--line);background:#21343b;color:var(--gold2);border-radius:999px;padding:6px 9px;font-size:12px}.keyword-chip button{border:0;background:transparent;color:inherit;margin-left:5px;padding:0}.quest-columns{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.quest-col{padding:12px;border:1px solid var(--line);border-radius:12px;background:var(--panel2)}.quest-col h3{margin:0 0 8px;font-size:14px}
.settings-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.setting-card{padding:16px}.setting-card h3{margin:0 0 10px;font-family:Georgia,"Noto Serif TC",serif}.setting-card select,.setting-card input[type=range]{width:100%;margin-top:7px}.save-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.slot-list{display:grid;gap:8px}.slot-row{display:grid;grid-template-columns:1fr auto auto auto;gap:6px;align-items:center;padding:8px;border:1px solid var(--line);border-radius:10px;background:var(--panel2)}.voice-grid{display:grid;gap:8px}.voice-row{display:grid;grid-template-columns:100px 1fr;gap:8px;align-items:center}.voice-row label{font-size:12px;color:var(--muted)}
.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.66);z-index:100;display:grid;place-items:center;padding:18px}.modal{width:min(620px,100%);max-height:85vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:18px;padding:18px;box-shadow:0 20px 70px rgba(0,0,0,.5)}.check-crew{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-top:12px}.check-crew button{text-align:left}
.bottom-nav{position:fixed;z-index:40;bottom:0;left:0;right:0;height:68px;background:rgba(16,24,27,.97);border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(6,1fr);backdrop-filter:blur(10px);padding-bottom:env(safe-area-inset-bottom)}.bottom-nav button{border:0;background:transparent;color:var(--muted);font-size:12px}.bottom-nav button.active{color:var(--gold2);font-weight:700}.toast{position:fixed;left:50%;bottom:88px;transform:translate(-50%,15px);opacity:0;pointer-events:none;background:#10181b;border:1px solid var(--line);border-radius:999px;padding:9px 14px;color:var(--text);font-size:12px;transition:.2s;z-index:140}.toast.show{opacity:1;transform:translate(-50%,0)}.empty{padding:30px;text-align:center;color:var(--muted)}
@media(max-width:900px){.hero,.story-layout{grid-template-columns:1fr}.status-strip{grid-template-columns:auto 1fr auto auto}.status-strip>div:last-child{display:none}.side-stack{grid-template-columns:1fr 1fr}.story-side{order:-1}.party-grid,.settings-grid{grid-template-columns:1fr}.quest-columns{grid-template-columns:1fr}.combat-party{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.topbar{padding:0 12px}.brand small{display:none}.top-actions .icon-btn:not(#quickSave){display:none}.status-strip{gap:9px;padding:9px 12px}.status-strip>div:nth-child(4){display:none}.main-view{padding:10px}.side-stack{grid-template-columns:1fr}.map-hotspot{min-width:27px;height:27px}.map-hotspot.current{min-width:36px;height:36px}.story-card{padding:15px}.story-card h1{font-size:21px}.bottom-nav{height:64px}.bottom-nav button{font-size:11px}.resource-grid{grid-template-columns:repeat(2,1fr)}.attr-grid{grid-template-columns:repeat(5,1fr)}.equipment-grid{grid-template-columns:1fr}.voice-row{grid-template-columns:80px 1fr}.slot-row{grid-template-columns:1fr auto auto}.slot-row .slot-delete{grid-column:2/4}.check-crew{grid-template-columns:1fr}}


/* ===== Build 0.6 Dynamic JRPG World ===== */
.world-layout{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:16px;align-items:start}
.world-panel{overflow:hidden}.world-toolbar{display:flex;justify-content:space-between;gap:14px;align-items:center;padding:14px 16px;border-bottom:1px solid var(--line);background:rgba(15,23,26,.92)}
.world-toolbar h1{font-family:Georgia,"Noto Serif TC",serif;margin:0;font-size:22px}.world-toolbar-actions{display:flex;align-items:end;gap:8px;flex-wrap:wrap}.world-toolbar-actions label{font-size:11px;color:var(--muted)}.world-toolbar-actions select{display:block;margin-top:3px;border:1px solid var(--line);background:var(--panel2);color:var(--text);border-radius:9px;padding:7px 9px}
.world-viewport{height:min(72vh,720px);min-height:500px;position:relative;overflow:hidden;background:#123a45;touch-action:none;isolation:isolate}
.world-sea{position:absolute;inset:0;background:radial-gradient(circle at 30% 20%,rgba(74,137,151,.42),transparent 38%),linear-gradient(160deg,#164957,#0e2d37 65%,#071f29);z-index:-2}.world-sea:after{content:"";position:absolute;inset:0;opacity:.2;background-image:repeating-radial-gradient(ellipse at 40% 50%,transparent 0 28px,rgba(255,255,255,.09) 30px 31px,transparent 33px 58px)}
.world-stage{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform;transition:transform .05s linear}.world-tile{position:absolute;overflow:hidden;background:#102d34;border:1px solid rgba(180,220,226,.08)}.world-tile img{position:absolute;width:108%;height:108%;left:-4%;top:-4%;object-fit:cover;filter:saturate(.94) contrast(1.02)}.world-tile:not(.current-tile) img{filter:saturate(.78) brightness(.72)}.world-tile:after{content:"";position:absolute;inset:0;box-shadow:inset 0 0 55px rgba(3,13,16,.42);pointer-events:none}.world-tile.current-tile:after{box-shadow:inset 0 0 22px rgba(226,201,142,.16)}
.world-page-tag{position:absolute;right:12px;bottom:10px;border:1px solid rgba(255,255,255,.28);background:rgba(6,19,23,.7);border-radius:7px;padding:3px 7px;font:700 12px Georgia,serif;color:#f2dfad}
.world-hotspot{position:absolute;z-index:7;transform:translate(-50%,-50%);width:25px;height:25px;padding:0;border:2px solid rgba(255,231,177,.86);border-radius:50%;background:rgba(153,57,39,.9);color:white;box-shadow:0 2px 8px rgba(0,0,0,.55);animation:hotspotGlow 2.2s infinite}.world-hotspot span{font-size:8px;font-weight:800;white-space:nowrap}.world-hotspot.visited{background:rgba(41,83,91,.82);opacity:.72}.world-hotspot:hover{z-index:15;transform:translate(-50%,-50%) scale(1.2)}@keyframes hotspotGlow{50%{box-shadow:0 0 0 7px rgba(211,177,108,.08),0 2px 8px rgba(0,0,0,.55)}}
.world-player{position:absolute;z-index:30;transform:translate(-50%,-72%);width:52px;text-align:center;pointer-events:none;filter:drop-shadow(0 5px 4px rgba(0,0,0,.55))}.world-player span{display:inline-block;margin-top:-4px;background:rgba(4,16,20,.78);border:1px solid rgba(240,215,156,.55);border-radius:99px;padding:2px 5px;font-size:8px;color:#fff3d0;white-space:nowrap}.world-sprite{width:40px;height:60px;margin:auto;background-repeat:no-repeat;background-size:300% 400%;image-rendering:pixelated}
.world-top-hud{position:absolute;top:10px;left:50%;z-index:40;transform:translateX(-50%);display:flex;gap:7px}.world-top-hud span{background:rgba(6,19,23,.78);border:1px solid rgba(240,215,156,.5);border-radius:99px;padding:5px 9px;color:#f7e5b8;font-size:11px;backdrop-filter:blur(5px)}
.nearby-prompt{position:absolute;z-index:42;left:50%;bottom:74px;transform:translateX(-50%);min-width:210px;padding:9px 13px;border-radius:12px;border:1px solid var(--gold);background:rgba(18,29,33,.94);text-align:center;box-shadow:var(--shadow)}.nearby-prompt b,.nearby-prompt span{display:block}.nearby-prompt span{font-size:11px;color:var(--muted);margin-top:2px}
.dpad{position:absolute;left:14px;bottom:14px;z-index:45;width:126px;height:126px;display:grid;grid-template-columns:repeat(3,42px);grid-template-rows:repeat(3,42px);opacity:.86}.dpad button{border:1px solid rgba(240,215,156,.5);background:rgba(9,26,31,.78);color:#f4e7c2;font-weight:900;border-radius:12px;display:flex;align-items:center;justify-content:center}.dpad button[data-move=up]{grid-column:2;grid-row:1}.dpad button[data-move=left]{grid-column:1;grid-row:2}.dpad button[data-move=down]{grid-column:2;grid-row:3}.dpad button[data-move=right]{grid-column:3;grid-row:2}.dpad button:active{background:var(--gold);color:#192023}
.world-action-btn{position:absolute;right:18px;bottom:26px;z-index:45;width:88px;height:88px;border-radius:50%;border:2px solid rgba(240,215,156,.55);background:rgba(11,28,33,.8);color:#f7e8bd;font-weight:800;box-shadow:var(--shadow)}.world-action-btn.ready{background:var(--gold);color:#182022;animation:actionReady 1s infinite alternate}@keyframes actionReady{to{transform:scale(1.06)}}
.world-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 14px;border-top:1px solid var(--line);background:#121e22;font-size:12px}.world-footer-actions{display:flex;gap:8px}.world-side{position:sticky;top:148px}.world-party-mini{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.world-party-mini>div{padding:8px;border:1px solid var(--line);border-radius:10px;background:var(--panel2);text-align:center}.world-party-mini span,.world-party-mini small{display:block}.world-party-mini span{font-size:11px}.world-party-mini small{font-size:9px;color:var(--muted)}.mini-pixel{width:30px;height:42px;margin:auto;background-repeat:no-repeat;background-size:300% 400%;background-position:50% 33.333%;image-rendering:pixelated}.world-resource-row{display:grid;grid-template-columns:1fr 1fr;gap:7px;margin-top:12px}.world-resource-row span{padding:8px;border:1px solid var(--line);border-radius:9px;background:#132126;font-size:11px}.world-help{margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:11px;color:var(--muted);line-height:1.55}.world-help b{color:var(--text)}
.encounter-flash{position:absolute;z-index:100;inset:0;display:grid;place-items:center;background:rgba(245,236,212,.94);animation:encounterFlash .65s both}.encounter-flash:before{content:"";position:absolute;inset:-20%;background:repeating-conic-gradient(from 0deg,rgba(15,37,43,.92) 0 8deg,transparent 8deg 16deg);animation:encounterSpin .7s ease-in}.encounter-flash span{position:relative;z-index:2;font:800 36px Georgia,"Noto Serif TC",serif;color:#17252a;letter-spacing:.12em}@keyframes encounterFlash{0%{opacity:0}30%{opacity:1}100%{opacity:1}}@keyframes encounterSpin{from{transform:scale(.1) rotate(0)}to{transform:scale(1.3) rotate(120deg)}}

/* JRPG battle scene */
.jrpg-battle{display:grid;gap:12px}.battle-scene{height:min(56vh,520px);min-height:390px;position:relative;overflow:hidden;border:1px solid var(--line);border-radius:18px;background-image:linear-gradient(to bottom,rgba(5,13,17,.18),rgba(4,12,15,.52)),var(--battle-bg);background-size:cover;background-position:center;box-shadow:var(--shadow)}.battle-scene:after{content:"";position:absolute;left:0;right:0;bottom:0;height:37%;background:linear-gradient(to top,rgba(5,14,17,.83),rgba(10,29,34,.12));pointer-events:none}.battle-vignette{position:absolute;inset:0;box-shadow:inset 0 0 90px rgba(0,0,0,.66);z-index:2;pointer-events:none}.enemy-side{position:absolute;z-index:6;left:8%;bottom:16%;width:40%;height:62%;display:flex;align-items:center;justify-content:center;transition:transform .18s}.enemy-sprite{max-width:70%;max-height:78%;image-rendering:pixelated;filter:drop-shadow(0 18px 10px rgba(0,0,0,.55))}.enemy-shadow{position:absolute;bottom:7%;width:58%;height:9%;border-radius:50%;background:rgba(0,0,0,.38);filter:blur(5px)}.enemy-label{position:absolute;left:0;bottom:-7%;width:min(310px,90%);background:rgba(10,20,24,.9);border:1px solid rgba(240,215,156,.55);border-radius:12px;padding:8px 10px}.enemy-label>span{display:block;color:var(--gold2);font-size:9px}.enemy-label>b{display:block;font-family:Georgia,"Noto Serif TC",serif;font-size:18px}.enemy-label i,.jrpg-nameplate i{display:block;height:6px;margin-top:5px;border-radius:99px;overflow:hidden;background:#101719}.enemy-label i em{display:block;height:100%;background:var(--danger)}.enemy-label small{color:var(--muted);font-size:9px}.boss-phase-badge{position:absolute;top:3%;left:4%;padding:5px 8px;border:1px solid #e4aaa1;border-radius:99px;background:rgba(91,37,34,.86);color:#ffd6cf;font-weight:800;font-size:10px;animation:pulseBoss .7s infinite alternate}@keyframes pulseBoss{to{transform:scale(1.08)}}
.party-side{position:absolute;z-index:8;right:5%;top:9%;bottom:8%;width:42%;display:flex;flex-direction:column;justify-content:space-around;align-items:flex-end}.jrpg-party-unit{position:relative;width:78%;height:22%;display:flex;align-items:center;justify-content:flex-end;gap:9px;transition:all .2s}.jrpg-party-unit.active{transform:translateX(-22px)}.jrpg-party-unit.down{filter:grayscale(1);opacity:.42}.battle-pixel-sprite{width:54px;height:78px;flex:0 0 54px;background-size:300% 400%;background-repeat:no-repeat;image-rendering:pixelated;filter:drop-shadow(0 7px 4px rgba(0,0,0,.55))}.jrpg-nameplate{width:128px;padding:5px 7px;background:rgba(7,19,23,.78);border:1px solid rgba(255,255,255,.18);border-radius:9px}.jrpg-nameplate b,.jrpg-nameplate span{display:block}.jrpg-nameplate b{font-size:11px}.jrpg-nameplate span{font-size:9px;color:var(--muted)}.jrpg-nameplate i em{display:block;height:100%;background:var(--good)}.battle-round{position:absolute;z-index:12;top:11px;left:50%;transform:translateX(-50%);padding:4px 9px;border-radius:99px;background:rgba(5,16,20,.72);border:1px solid rgba(255,255,255,.22);font:700 10px Georgia,serif;color:#f2dfad}
.battle-console{display:grid;grid-template-columns:210px minmax(0,1fr) 300px;gap:10px;padding:12px;border:1px solid var(--line);border-radius:16px;background:#111c20}.active-status{padding:10px;border-right:1px solid var(--line)}.active-status span,.active-status small,.active-status b{display:block}.active-status span{font-size:9px;color:var(--muted)}.active-status b{margin:3px 0;font-family:Georgia,"Noto Serif TC",serif}.active-status small{font-size:9px;color:#bac5c6}.command-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.jrpg-command{text-align:left;border:1px solid var(--line);background:#1b2a30;color:var(--text);border-radius:10px;padding:8px 9px;min-height:54px}.jrpg-command.primary{border-color:var(--gold);background:#3a3425}.jrpg-command b,.jrpg-command small{display:block}.jrpg-command b{font-size:12px;color:#f1dfb5}.jrpg-command small{font-size:8px;color:var(--muted);margin-top:2px;line-height:1.3}.jrpg-command:hover{border-color:var(--gold)}.battle-message{white-space:pre-wrap;min-height:92px;max-height:150px;overflow:auto;padding:9px;border-left:1px solid var(--line);font-size:10px;line-height:1.5;color:#d7dfde}.damage-pop{position:absolute;z-index:30;color:#fff7df;font:900 26px Georgia,serif;text-shadow:0 2px 0 #6f1919,0 0 9px #ff5d4e;animation:damagePop .5s both}.enemy-dmg{top:26%;left:58%}.party-dmg{top:0;right:22px}@keyframes damagePop{0%{opacity:0;transform:translateY(15px) scale(.6)}25%{opacity:1;transform:translateY(0) scale(1.2)}100%{opacity:0;transform:translateY(-35px) scale(.9)}}.attack-lunge{animation:partyLunge .42s}.enemy-lunge{animation:enemyLunge .42s}.hit-shake{animation:hitShake .35s}@keyframes partyLunge{45%{transform:translateX(-80px)}}@keyframes enemyLunge{45%{transform:translateX(70px)}}@keyframes hitShake{20%{filter:brightness(2)}30%{transform:translateX(-9px)}60%{transform:translateX(8px)}90%{transform:translateX(-3px)}}
@media(max-width:1050px){.world-layout{grid-template-columns:1fr}.world-side{position:static;display:none}.world-viewport{height:66vh}.battle-console{grid-template-columns:170px 1fr}.battle-message{grid-column:1/-1;border-left:0;border-top:1px solid var(--line)}.command-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:700px){.world-toolbar{align-items:flex-start;flex-direction:column}.world-toolbar-actions{width:100%}.world-toolbar-actions label{flex:1}.world-toolbar-actions select{width:100%}.world-viewport{height:66vh;min-height:440px}.world-footer{align-items:flex-start;flex-direction:column}.world-footer-actions{width:100%}.world-footer-actions button{flex:1}.dpad{transform:scale(.9);transform-origin:left bottom}.world-action-btn{width:76px;height:76px}.battle-scene{min-height:420px}.enemy-side{left:2%;width:46%;bottom:20%}.enemy-sprite{max-width:88%}.party-side{right:2%;width:52%}.jrpg-party-unit{width:100%;gap:4px}.battle-pixel-sprite{width:42px;height:62px;flex-basis:42px}.jrpg-nameplate{width:98px}.enemy-label{bottom:-10%}.battle-console{grid-template-columns:1fr}.active-status{border-right:0;border-bottom:1px solid var(--line)}.command-grid{grid-template-columns:repeat(2,1fr)}.battle-message{grid-column:auto}.jrpg-command small{display:none}}

/* v0.7 World RPG Engine --------------------------------------------------- */
.world-hotspot.port-hotspot{background:rgba(111,75,32,.94);border-color:#f5d68b}
.world-hotspot.port-hotspot i{position:absolute;right:-7px;top:-8px;font-style:normal;font-size:10px;filter:drop-shadow(0 1px 1px #000)}
.world-player.ship{width:74px;transform:translate(-50%,-50%);filter:drop-shadow(0 8px 5px rgba(0,0,0,.58))}
.world-player.ship>span{margin-top:-1px}.ship-sprite{position:relative;width:62px;height:48px;margin:auto;transition:transform .13s linear;transform-origin:center center}
.world-player.ship.dir-right .ship-sprite{transform:rotate(0deg)}.world-player.ship.dir-down .ship-sprite{transform:rotate(90deg)}.world-player.ship.dir-left .ship-sprite{transform:rotate(180deg)}.world-player.ship.dir-up .ship-sprite{transform:rotate(-90deg)}
.ship-hull{position:absolute;left:9px;top:22px;width:44px;height:16px;border-radius:55% 55% 70% 70%;background:linear-gradient(#6f3c24,#3e2319);border:2px solid #1f1613;clip-path:polygon(0 12%,100% 12%,82% 100%,18% 100%)}
.ship-hull:after{content:"";position:absolute;left:6px;right:6px;top:5px;height:2px;background:#c38d4c;box-shadow:0 4px 0 #8f6034}
.ship-cabin{position:absolute;left:22px;top:14px;width:18px;height:12px;border:2px solid #2a1b14;background:#8d5d32;border-radius:2px}.ship-mast{position:absolute;left:31px;top:3px;width:3px;height:27px;background:#2c1b13;border-radius:2px}.ship-sail{position:absolute;left:34px;top:4px;width:20px;height:18px;background:#e6d5a6;border:1px solid #5b4931;clip-path:polygon(0 0,100% 45%,0 100%)}
.ship-wake{position:absolute;left:-6px;top:20px;width:18px;height:22px;border-left:3px solid rgba(224,249,250,.82);border-radius:50%;filter:blur(.6px);animation:shipWake .8s infinite alternate}@keyframes shipWake{to{transform:translateX(-6px) scaleY(1.2);opacity:.35}}
.ship-status-card{display:flex;align-items:center;gap:10px;padding:9px 10px;margin-bottom:10px;border:1px solid var(--line);border-radius:12px;background:#132126}.ship-status-card .ship-mini{font-size:28px}.ship-status-card b,.ship-status-card small{display:block}.ship-status-card small{color:var(--muted);font-size:10px}

/* Town / landing scene */
.town-layout{display:grid;grid-template-columns:minmax(0,1fr) 285px;gap:14px;align-items:start}.town-panel{overflow:hidden}.town-toolbar{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:12px 14px;border-bottom:1px solid var(--line);background:#132126}.town-toolbar h1{margin:0}.town-scene{position:relative;height:min(68vh,650px);min-height:520px;overflow:hidden;background:#314533}.town-water{position:absolute;left:0;right:0;bottom:0;height:22%;background:linear-gradient(#22697a,#153f50);border-top:4px solid rgba(216,233,199,.45)}.town-water:after{content:"";position:absolute;inset:8px 0;background:repeating-linear-gradient(0deg,transparent 0 11px,rgba(218,246,244,.13) 12px 14px)}.town-ground{position:absolute;inset:0 0 18%;background:radial-gradient(circle at 50% 70%,rgba(211,184,120,.22),transparent 38%),linear-gradient(#465b38,#2c3d2e)}
.town-scene.region-ice .town-ground{background:linear-gradient(#657574,#384c4f)}.town-scene.region-tides .town-ground,.town-scene.region-abyss .town-ground{background:linear-gradient(#4a4038,#2b3031)}.town-scene.region-south .town-ground{background:linear-gradient(#486a38,#29462c)}
.town-building{position:absolute;border:3px solid #211a16;background:linear-gradient(#8a6744,#59402d);box-shadow:0 9px 0 rgba(0,0,0,.18),inset 0 0 0 3px rgba(236,203,141,.15);display:grid;place-items:center;color:#f3ddb0;text-shadow:0 2px #211a16;font-family:Georgia,"Noto Serif TC",serif}.town-building.hall{left:34%;top:5%;width:32%;height:24%;clip-path:polygon(10% 18%,50% 0,90% 18%,100% 100%,0 100%)}.town-building.shop{left:5%;top:26%;width:22%;height:25%;clip-path:polygon(8% 18%,50% 0,92% 18%,100% 100%,0 100%)}.town-building.inn{right:5%;top:26%;width:22%;height:25%;clip-path:polygon(8% 18%,50% 0,92% 18%,100% 100%,0 100%)}
.town-node{position:absolute;z-index:15;transform:translate(-50%,-50%);text-align:center;pointer-events:none}.town-node>span{display:grid;place-items:center;width:34px;height:34px;margin:auto;border:2px solid #f2d795;border-radius:50%;background:rgba(24,38,41,.88);color:#f7e4af;font-weight:900;box-shadow:0 5px 12px rgba(0,0,0,.36)}.town-node small{display:block;margin-top:3px;padding:2px 5px;border-radius:99px;background:rgba(7,18,22,.78);color:#f4e4c1;font-size:9px;white-space:nowrap}.town-player{position:absolute;z-index:20;transform:translate(-50%,-72%);width:60px;text-align:center;filter:drop-shadow(0 5px 4px rgba(0,0,0,.5))}.town-sprite{width:42px;height:62px;margin:auto;background-size:300% 400%;background-repeat:no-repeat;image-rendering:pixelated}.town-player>span{display:inline-block;margin-top:-6px;padding:2px 5px;border-radius:99px;background:rgba(4,16,20,.8);border:1px solid rgba(240,215,156,.45);font-size:8px;color:#fff3d0}.town-dpad{bottom:18px}.town-help-list{display:grid;gap:8px}.town-help-list>div{display:grid;grid-template-columns:25px 1fr;gap:0 8px;padding:8px;border:1px solid var(--line);border-radius:10px;background:#132126}.town-help-list b{font-size:11px}.town-help-list small{grid-column:2;color:var(--muted);font-size:9px}

/* Multi enemy JRPG battle */
.enemy-side.enemy-group{left:3%;bottom:13%;width:49%;height:72%;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));gap:4px;align-items:end;justify-items:center}
.enemy-unit{position:relative;width:100%;height:100%;border:1px solid transparent;background:transparent;color:inherit;padding:0;display:flex;align-items:center;justify-content:center;transition:.18s}.enemy-unit.selected{border-color:rgba(247,218,145,.8);background:rgba(238,210,140,.07);border-radius:14px}.enemy-unit.selected:before{content:"TARGET";position:absolute;z-index:20;top:2px;left:50%;transform:translateX(-50%);padding:2px 5px;border-radius:99px;background:#d3b36b;color:#202326;font-size:7px;font-weight:900}.enemy-unit.down{opacity:.2;filter:grayscale(1)}.enemy-unit .enemy-sprite{max-width:58%;max-height:58%}.enemy-unit .enemy-shadow{bottom:20%;width:54%;height:8%}.enemy-unit .enemy-label{left:5%;bottom:0;width:90%;padding:5px 6px}.enemy-unit .enemy-label b{font-size:11px}.enemy-unit .enemy-label span,.enemy-unit .enemy-label small{font-size:7px}.enemy-unit .enemy-label i{height:4px;margin-top:2px}.enemy-unit .boss-phase-badge{top:1%;left:3%}.status-chips{display:flex;gap:3px;flex-wrap:wrap;margin-top:3px}.status-chips span{display:inline-block!important;padding:1px 4px;border-radius:99px;background:rgba(207,170,92,.22);border:1px solid rgba(224,192,121,.35);color:#f5deb0!important;font-size:6px!important}
.skill-effect{position:absolute;z-index:25;left:47%;top:44%;transform:translate(-50%,-50%);width:130px;height:130px;border-radius:50%;display:grid;place-items:center;pointer-events:none;animation:skillBurst .62s both}.skill-effect span{padding:4px 8px;border-radius:99px;background:rgba(6,17,21,.82);border:1px solid rgba(255,236,179,.6);color:#fff1bd;font-weight:800}.skill-effect.fx-shot:before{content:"➤";font-size:58px;transform:rotate(180deg)}.skill-effect.fx-smash:before{content:"✦";font-size:72px}.skill-effect.fx-break:before{content:"✹";font-size:72px}.skill-effect.fx-dash:before{content:"≋";font-size:72px}.skill-effect.fx-heal:before{content:"✚";font-size:72px}.skill-effect.fx-guard:before{content:"◈";font-size:72px}.skill-effect.fx-smoke:before{content:"☁";font-size:72px}.skill-effect.fx-command:before{content:"⚔";font-size:62px}.skill-effect.fx-mark:before{content:"◎";font-size:72px}.skill-effect.fx-slash:before{content:"╱";font-size:88px}.skill-effect.fx-enemy-hit:before,.skill-effect.fx-enemy-wave:before{content:"✹";font-size:72px;color:#f1b4a9}@keyframes skillBurst{0%{opacity:0;transform:translate(-50%,-50%) scale(.2) rotate(-30deg)}35%{opacity:1;transform:translate(-50%,-50%) scale(1.15) rotate(5deg)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.6) rotate(20deg)}}

@media(max-width:1050px){.town-layout{grid-template-columns:1fr}.town-layout>.world-side{display:none}}
@media(max-width:700px){.town-scene{min-height:500px;height:66vh}.town-building{font-size:10px}.enemy-side.enemy-group{left:1%;width:51%;height:68%}.enemy-unit .enemy-label b{font-size:9px}.enemy-unit .enemy-label span,.enemy-unit .enemy-label small{font-size:6px}.world-top-hud{width:94%;justify-content:center;flex-wrap:wrap}.world-top-hud span{font-size:9px}}

.skill-effect.fx-summon:before{content:"✧";font-size:104px;color:#bceeff;text-shadow:0 0 24px #63cfe5}

/* High-readability town shop ------------------------------------------------ */
.shop-modal{width:min(940px,100%);max-height:min(88vh,760px);padding:0;overflow:auto;background:#10202a;border:2px solid #d8c284;border-radius:16px}.shop-close{position:absolute;z-index:3;right:14px;top:12px;width:38px;height:38px;border:1px solid #fff0bc;border-radius:50%;background:rgba(7,15,20,.9);color:#fff8dc;font-size:25px;line-height:1}.shop-art{height:220px;background:linear-gradient(90deg,rgba(5,17,23,.86) 0,rgba(5,17,23,.3) 48%,rgba(5,17,23,.04)),url('../sprites/harbor-market-illustration.png') center/cover no-repeat;border-bottom:2px solid rgba(224,199,130,.55)}.shop-content{padding:22px}.shop-heading span{font-size:14px;letter-spacing:.14em;color:#f5d98e;font-weight:800}.shop-heading h2{font:700 32px Georgia,"Noto Serif TC",serif;margin:5px 0 7px;color:#fff7d8}.shop-heading p{font-size:17px;line-height:1.55;margin:0 0 18px;color:#e5edf3}.shop-heading p b{color:#ffe094}.shop-items{display:grid;gap:12px}.shop-item{display:grid;grid-template-columns:62px 1fr auto;align-items:center;gap:14px;padding:15px 16px;border:1px solid #617b88;border-radius:13px;background:linear-gradient(105deg,#1b3540,#12262f)}.shop-icon{width:54px;height:54px;display:grid;place-items:center;border:1px solid #efd99b;border-radius:12px;background:#284651;color:#fff0bb;font-size:29px}.shop-item h3{margin:0 0 5px;font-size:20px;color:#fff8e0}.shop-item p{margin:0;font-size:15px;line-height:1.45;color:#d6e2e8}.shop-buy{min-width:92px;font-size:16px;line-height:1.15}.shop-buy small{font-size:12px}.shop-story{margin-top:16px;font-size:15px}@media(max-width:600px){.shop-art{height:155px}.shop-content{padding:15px}.shop-heading h2{font-size:26px}.shop-heading p{font-size:15px}.shop-item{grid-template-columns:48px 1fr;gap:10px;padding:12px}.shop-icon{width:44px;height:44px;font-size:23px}.shop-item h3{font-size:17px}.shop-item p{font-size:13px}.shop-buy{grid-column:1/-1;width:100%}}

/* v0.8 Phaser RPG Engine -------------------------------------------------- */
.phaser-viewport{position:relative;background:#0b2029;overflow:hidden}
.phaser-canvas-host{position:absolute;inset:0;z-index:2;overflow:hidden}
.phaser-canvas-host canvas,.phaser-battle-canvas canvas{display:block;width:100%!important;height:100%!important;touch-action:none;object-fit:contain}
.phaser-engine-badge{position:absolute;z-index:40;right:12px;top:12px;padding:4px 7px;border:1px solid rgba(244,220,160,.45);border-radius:999px;background:rgba(4,16,20,.76);color:#f4dda2;font-size:9px;font-weight:800;letter-spacing:.08em;pointer-events:none}
.phaser-world-layout .world-top-hud,.phaser-world-layout .nearby-prompt,.phaser-world-layout .dpad,.phaser-world-layout .world-action-btn{z-index:50}
.phaser-dpad{z-index:55}
.phaser-town-scene{position:relative;background:#263c34}
.phaser-town-scene>.phaser-canvas-host{z-index:2}
.phaser-town-scene>.nearby-prompt,.phaser-town-scene>.dpad,.phaser-town-scene>.world-action-btn,.phaser-town-scene>.phaser-engine-badge{z-index:50}
.phaser-battle-wrap{background:#081318;border:1px solid var(--line);border-radius:16px;overflow:hidden}
.phaser-battle-canvas{position:relative;width:100%;height:clamp(390px,56vw,560px);min-height:0;background:#081318;overflow:hidden}
.phaser-battle-canvas canvas{position:absolute;inset:0}
.battle-target-strip{display:flex;gap:7px;flex-wrap:wrap;padding:8px 10px;border-top:1px solid var(--line);background:#101d22}
.battle-target-chip{min-width:120px;display:grid;grid-template-columns:1fr auto;gap:2px 8px;align-items:center;padding:7px 9px;border:1px solid var(--line);border-radius:9px;background:#132126;color:var(--text);text-align:left}
.battle-target-chip b{font-size:11px}.battle-target-chip span{font-size:10px;color:#f4dca7}.battle-target-chip small{grid-column:1/-1;font-size:8px;color:var(--muted)}
.battle-target-chip.selected{border-color:#e9cc82;box-shadow:inset 0 0 0 1px rgba(233,204,130,.24)}
.battle-target-chip:disabled{opacity:.35}
.phaser-encounter{z-index:80}
.phaser-load-note{padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:#132126;color:var(--muted);font-size:11px}
@media(max-width:700px){.phaser-battle-canvas{height:clamp(340px,58svh,480px)}.battle-target-strip{gap:5px}.battle-target-chip{min-width:calc(50% - 3px);padding:6px}.phaser-engine-badge{font-size:8px}}

/* v0.9 Living World ------------------------------------------------------- */
.music-btn{min-width:76px}
.autopilot-hud{position:absolute;z-index:56;left:50%;top:58px;transform:translateX(-50%);display:grid;grid-template-columns:auto auto auto;align-items:center;gap:8px;max-width:88%;padding:7px 10px;border:1px solid rgba(245,218,146,.62);border-radius:999px;background:rgba(5,18,23,.88);color:#fff1bd;box-shadow:0 6px 18px rgba(0,0,0,.25)}
.autopilot-hud[hidden]{display:none}.autopilot-hud b{font-size:10px}.autopilot-hud span{font-size:9px;color:#d8cba7}.autopilot-hud .mini-btn{padding:4px 7px}
.section-title.compact{margin-top:14px;margin-bottom:7px}.section-title.compact h3{margin:0;font-size:12px}
.destination-list{display:grid;gap:5px;max-height:255px;overflow:auto;padding-right:2px}
.destination-row{display:grid;grid-template-columns:22px 1fr auto;align-items:center;gap:7px;width:100%;padding:7px 8px;border:1px solid var(--line);border-radius:9px;background:#132126;color:var(--text);text-align:left;transition:.15s}
.destination-row:hover{border-color:rgba(235,204,127,.7);background:#182a30;transform:translateX(2px)}.destination-row>span{color:#e7c86f}.destination-row b{font-size:10px}.destination-row small{font-size:8px;color:var(--muted)}
.volume-row{display:grid;grid-template-columns:1fr auto;gap:5px 10px;margin-top:12px;color:var(--text)}.volume-row input{grid-column:1/-1;width:100%}
.phaser-town-scene canvas{filter:saturate(1.08) contrast(1.03)}
.phaser-world-layout canvas{filter:saturate(1.05) contrast(1.02)}
.phaser-battle-canvas canvas{filter:saturate(1.12) contrast(1.06)}
@media(max-width:700px){.autopilot-hud{top:52px;grid-template-columns:auto 1fr}.autopilot-hud .mini-btn{grid-column:1/-1;justify-self:center}.destination-list{max-height:190px}.music-btn{min-width:auto}}

/* ============================================================================
   地點鎖／賞狀態標示 + 圖例
   ==========================================================================*/
@keyframes hotspotGlowGold{0%,100%{box-shadow:0 0 0 3px rgba(255,215,94,.45),0 2px 8px rgba(0,0,0,.55)}50%{box-shadow:0 0 0 6px rgba(255,215,94,.15),0 2px 8px rgba(0,0,0,.55)}}
@keyframes hotspotGlowLock{0%,100%{box-shadow:0 0 0 3px rgba(255,107,92,.5),0 2px 8px rgba(0,0,0,.55)}50%{box-shadow:0 0 0 6px rgba(255,107,92,.18),0 2px 8px rgba(0,0,0,.55)}}
.world-hotspot.reward{border-color:#ffd75e;animation:hotspotGlowGold 1.7s infinite}
.world-hotspot.locked{border-color:#ff6b5c;animation:hotspotGlowLock 1.7s infinite}
.world-hotspot.locked.reward{border-color:#ffd75e}
.hotspot-badge{position:absolute;font-size:11px;line-height:1;filter:drop-shadow(0 1px 1px #000)}
.hotspot-badge.dock{right:-7px;top:-8px}
.hotspot-badge.lock{left:-8px;top:-8px}
.hotspot-badge.star{left:-8px;top:-8px;color:#ffe27a}

.destination-row.reward{border-color:rgba(255,215,94,.55)}
.destination-row.reward>span{color:#ffe27a}
.destination-row.locked{border-color:rgba(255,107,92,.5)}
.destination-row.locked>span{color:#ff8a7d}

.map-legend-wrap{position:relative}
.map-legend{
  position:absolute;z-index:60;top:calc(100% + 8px);right:0;width:240px;
  background:#101c20;border:1px solid var(--line);border-radius:10px;
  padding:10px 12px;box-shadow:0 10px 26px rgba(0,0,0,.5);
}
.map-legend-row{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text);padding:4px 0;line-height:1.4}
.map-legend-row b{color:#f0dba0}
.legend-dot{flex:0 0 14px;width:14px;height:14px;border-radius:50%;background:rgba(153,57,39,.9);border:2px solid rgba(255,231,177,.86)}
.legend-dot.reward{background:rgba(153,57,39,.9);border-color:#ffd75e;box-shadow:0 0 0 2px rgba(255,215,94,.35)}
.legend-dot.locked{background:rgba(153,57,39,.9);border-color:#ff6b5c;box-shadow:0 0 0 2px rgba(255,107,92,.3)}
.legend-dot.visited{background:rgba(41,83,91,.7);border-color:rgba(200,220,220,.5)}
.legend-dot.port{background:rgba(111,75,32,.94);border-color:#f5d68b}

/* ============================================================================
   防止手機快速點擊方向鍵等控制項時觸發文字選取／長按選單
   ==========================================================================*/
.dpad button,.world-action-btn,.icon-btn,.ghost-btn,.primary-btn,.mini-btn,
.jrpg-command,.battle-target-chip,.choice-btn,.world-hotspot,.destination-row,
.bottom-nav button,.ff-pad button{
  -webkit-user-select:none;user-select:none;
  -webkit-touch-callout:none;
  touch-action:manipulation;
}
.dpad button svg{display:block;pointer-events:none}

/* ============================================================================
   角色檔案：職業徽章、可展開的角色故事、故事旅伴圖鑑
   ==========================================================================*/
.char-emblem{
  font-size:22px;background:radial-gradient(circle at 35% 30%,color-mix(in srgb,var(--accent,#c9a24a) 55%,#1a2a2f),#0c161a);
  border-color:var(--accent,var(--gold));box-shadow:0 0 0 2px color-mix(in srgb,var(--accent,#c9a24a) 35%,transparent);
}
.char-bio-toggle{
  margin-top:10px;width:100%;text-align:left;background:none;border:1px solid var(--line);border-radius:8px;
  padding:7px 10px;color:var(--muted);font-size:12px;
}
.char-bio-toggle:hover{border-color:rgba(235,204,127,.6);color:var(--text)}
.char-bio{margin-top:8px;padding:10px 12px;border:1px solid var(--line);border-radius:8px;background:#101c20}
.char-bio-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px}
.char-bio-head b{color:#f0dba0;font-size:13px}
.char-bio p{font-size:12px;line-height:1.7;color:var(--text);margin:0}

.codex-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.codex-card{display:flex;gap:12px;padding:12px;border:1px solid var(--line);border-radius:10px;background:#101c20}
.codex-card .avatar{flex:0 0 auto}
.codex-card b{display:block;color:#f0dba0;font-size:13px}
.codex-card .muted{font-size:11px}
.codex-card p{font-size:11.5px;line-height:1.65;color:var(--text);margin:6px 0 0}
@media(max-width:900px){.codex-grid{grid-template-columns:1fr}}
