:root{
  --ui-bg:rgba(24,18,14,.88); --ui-fg:#f4ecd8; --ui-dim:#b5a88e; --ui-line:#4a3524;
  --accent:#f2c94c; --hp:#6cd86a; --hp-low:#ff5a4f; --exp:#59b7ff; --danger:#ff6b5e; --panel:#21180f; --cell:#2e2216;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;overflow:hidden;background:#120d09;color:var(--ui-fg);
  font-family:"Microsoft JhengHei","PingFang TC","Noto Sans TC",sans-serif;
  touch-action:none;user-select:none;-webkit-user-select:none}
#game{position:fixed;left:0;top:0;image-rendering:pixelated;image-rendering:crisp-edges;display:block}
#labels{position:fixed;left:0;top:0;pointer-events:none;display:block}
canvas.spr{image-rendering:pixelated;image-rendering:crisp-edges}
button{font:inherit;color:inherit}

/* HUD */
#hud{position:fixed;left:8px;top:8px;display:flex;flex-direction:column;gap:5px;pointer-events:none;max-width:calc(100vw - 16px)}
#topbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;background:var(--ui-bg);border:2px solid var(--ui-line);border-radius:8px;padding:5px 8px;font-size:13px;width:max-content;max-width:100%}
#topbar .stat{display:flex;align-items:center;gap:4px;white-space:nowrap}
#pHpBar{width:70px}
#party{display:flex;flex-direction:column;gap:4px}
.card{display:flex;align-items:center;gap:6px;background:var(--ui-bg);border:2px solid var(--ui-line);border-left:5px solid var(--tc,#888);border-radius:8px;padding:2px 8px 2px 4px;width:176px}
.card canvas{width:calc(var(--w)*2px);height:calc(var(--h)*2px);flex:none}
.card .info{flex:1;min-width:0}
.card .nm{display:flex;justify-content:space-between;align-items:baseline;font-size:12px;line-height:1.25;gap:4px}
.card .nm small{color:var(--ui-dim);font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}
.card .lv{color:var(--accent);white-space:nowrap}
.card.ko{opacity:.45}
.card.awake{border-color:#8a6a1f}
.bar{height:5px;background:#000a;border-radius:3px;overflow:hidden;margin-top:2px}
.bar i{display:block;height:100%;background:var(--hp);width:100%;transition:width .15s}
.bar i.low{background:var(--hp-low)}
.bar.ex i{background:var(--exp)}
#toasts{position:fixed;left:50%;top:10px;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;gap:4px;pointer-events:none;z-index:5;width:max-content;max-width:calc(100vw - 32px)}
.toast{background:var(--ui-bg);border:2px solid var(--accent);border-radius:8px;padding:5px 12px;font-size:14px;text-align:center;animation:pop .18s ease-out}
.toast.hero{border-color:#ff8a3d;font-size:15px}
@keyframes pop{from{transform:scale(.85);opacity:0}to{transform:none;opacity:1}}
#help{position:fixed;left:50%;bottom:10px;transform:translateX(-50%);background:var(--ui-bg);border-radius:8px;padding:4px 12px;font-size:12px;color:var(--ui-dim);pointer-events:none;white-space:nowrap}
#btns{position:fixed;right:12px;bottom:12px;display:flex;gap:10px;align-items:flex-end;z-index:4}
#btns button{background:var(--ui-bg);border:2px solid var(--ui-line);border-radius:50%;width:64px;height:64px;font-size:15px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;line-height:1.1}
#btns button small{font-size:10px;color:var(--ui-dim)}
#btnCatch{border-color:#d9a441!important;width:78px!important;height:78px!important;font-size:17px!important}
#btns #btnSet{width:44px;height:44px;font-size:20px}
#joy{position:fixed;width:96px;height:96px;margin:-48px 0 0 -48px;border-radius:50%;background:#ffffff18;border:2px solid #ffffff40;display:none;pointer-events:none;z-index:3}
#joyKnob{position:absolute;left:50%;top:50%;width:40px;height:40px;margin:-20px 0 0 -20px;border-radius:50%;background:#ffffff55}

/* 遮罩面板 */
.overlay{position:fixed;inset:0;background:rgba(10,7,4,.74);display:flex;align-items:center;justify-content:center;z-index:10;padding:16px}
.overlay.hidden{display:none}
.panel{background:var(--panel);border:3px solid var(--ui-line);border-radius:14px;padding:18px 20px;max-width:580px;width:100%;max-height:100%;overflow:auto}
.panel.wide{max-width:780px}
.panel h1{margin:0 0 6px;font-size:28px;color:var(--accent);letter-spacing:4px}
.panel h2{margin:14px 0 8px;font-size:17px}
.panel h2 small{color:var(--ui-dim);font-weight:normal;font-size:13px}
.panel p{margin:6px 0;line-height:1.7;font-size:14px}
.tip{color:var(--ui-dim);font-size:13px!important}
.pick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:14px 0}
.pick button,.grid button{background:var(--cell);border:2px solid var(--ui-line);border-radius:10px;padding:10px 6px;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center}
.pick button:hover,.grid button:hover{border-color:var(--accent)}
.pick button div{display:flex;flex-direction:column;align-items:center;gap:3px}
.pick canvas{width:calc(var(--w)*4px);height:calc(var(--h)*4px)}
.pick b{font-size:16px}
.pick span{font-size:12px;color:var(--ui-dim)}
.pick .duo{display:flex;flex-direction:row;align-items:flex-end;gap:2px}
.pick .duo canvas+canvas{width:calc(var(--w)*3px);height:calc(var(--h)*3px);opacity:.9}
.chip{display:inline-block;font-size:11px;padding:0 6px;border-radius:6px;color:#111;font-weight:bold}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px}
.grid canvas{width:calc(var(--w)*3px);height:calc(var(--h)*3px)}
.grid button{font-size:12px;padding:6px 4px}
.grid button.sel{border-color:var(--accent);background:#4a3a18}
.grid .evo{font-size:11px;color:var(--accent);margin-top:2px}
.grid .sk{font-size:12px;color:#ff9a5a;margin-top:3px;font-weight:bold}
.grid .skd{font-size:10px;color:var(--ui-dim);line-height:1.3}
.pick .skill{color:#ff9a5a!important;font-size:12px;line-height:1.4;max-width:180px}
.grid .empty{grid-column:1/-1;color:var(--ui-dim);font-size:13px;padding:8px 0}
.stele{display:grid;grid-template-columns:repeat(auto-fill,minmax(80px,1fr));gap:5px}
.stele div{background:#2a2a2a;border:2px solid #3d3d3d;border-radius:6px;padding:4px 2px;text-align:center;font-size:11px;line-height:1.3;color:#9a9a9a;min-height:66px;display:flex;flex-direction:column;align-items:center;justify-content:center}
.stele div.got{background:#3a2e14;border-color:#8a6a1f;color:var(--ui-fg)}
.stele div.seen canvas{filter:brightness(0)}
.stele canvas{width:32px;height:32px}
.stele b{color:var(--accent);font-weight:normal}
.row{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;margin-top:14px}
.row button{background:#3a2b1c;border:2px solid var(--ui-line);border-radius:8px;padding:7px 14px;cursor:pointer}
.row button.primary{background:#3d6a3a;border-color:#5ea85a}
.row button.danger{border-color:var(--danger);color:var(--danger)}
.row button:disabled{opacity:.4;cursor:default}
.tabs{display:flex;gap:6px;margin-bottom:6px}
.tabs button{background:#3a2b1c;border:2px solid var(--ui-line);border-radius:8px;padding:5px 14px;cursor:pointer}
.tabs button.on{border-color:var(--accent);color:var(--accent)}

@media (max-width:600px){
  .card{width:auto;padding-right:4px}
  .card .nm b,.card .nm small{display:none}
  .card .info{width:56px}
  #help{display:none}
  .pick{grid-template-columns:1fr}
  .pick button{flex-direction:row;justify-content:flex-start;gap:12px;text-align:left}
  .pick button div{align-items:flex-start}
}

/* 小地圖、所在地、BOSS 血條 */
#mapBox{position:fixed;right:8px;top:8px;background:var(--ui-bg);border:2px solid var(--ui-line);border-radius:8px;padding:4px;pointer-events:none;z-index:4}
#minimap{display:block;width:130px;height:130px;image-rendering:pixelated;border-radius:4px}
#whereAmI{font-size:12px;text-align:center;margin-top:3px;color:var(--ui-fg);white-space:nowrap;max-width:130px;overflow:hidden;text-overflow:ellipsis}
#bossBar{position:fixed;left:50%;top:54px;transform:translateX(-50%);background:var(--ui-bg);border:2px solid #c0392b;border-radius:8px;padding:4px 10px;display:flex;align-items:center;gap:8px;pointer-events:none;z-index:4;font-size:13px}
#bossBar.hidden{display:none}
#bossBar .bar{width:160px;height:7px}
#bossBar .bar i{background:#ff3a2a}
.toast.boss{border-color:#ff3a2a;font-size:15px}
.toast.town{border-color:#8ac0ff}
@media (max-width:600px){ #minimap{width:90px;height:90px} #whereAmI{max-width:90px} #bossBar .bar{width:90px} }
.toast.error{border-color:#ff6b5e;color:#ffd0c8}

/* 天下地圖（騰雲） */
#mapBox{pointer-events:auto;cursor:pointer}
#travelMap{position:relative;width:min(540px,64vh,100%);aspect-ratio:1;margin:8px auto 0}
#travelCanvas{width:100%;height:100%;image-rendering:pixelated;border-radius:8px;display:block;border:2px solid var(--ui-line)}
#travelMap .region{position:absolute;transform:translate(-50%,-50%);font-size:22px;font-weight:bold;color:#fff8;text-shadow:0 0 4px #000;pointer-events:none;letter-spacing:6px}
#travelPins .pin{position:absolute;transform:translate(-50%,-50%);font-size:11px;padding:1px 5px;border-radius:6px;border:2px solid #555;background:#2a2a2acc;color:#aaa;cursor:pointer;white-space:nowrap}
#travelPins .pin.visited{border-color:#c9a227;background:#4a3a18ee;color:#ffe9a8}
#travelPins .pin.home{border-color:#ffd34d}
#travelPins .pin.here{box-shadow:0 0 0 2px #59b7ff}
#travelPins .pin:hover{border-color:#fff}
#travelPins .me{position:absolute;width:10px;height:10px;margin:-5px 0 0 -5px;border-radius:50%;background:#59b7ff;border:2px solid #fff;pointer-events:none}
#abilN{letter-spacing:1px}
.grid .abil{font-size:10px;color:#8ac0ff;line-height:1.3}
.pick .abil{color:#8ac0ff!important;font-size:12px}
/* 存檔區 */
#saveBox{margin-top:10px;border-top:1px dashed var(--ui-line);padding-top:4px}
.row.left{justify-content:flex-start;margin-top:6px}
/* 手機：左上狀態列與隊伍卡片不要蓋到右上的小地圖 */
@media (max-width:600px){
  #hud{max-width:calc(100vw - 128px)}
  #topbar{gap:4px 8px;font-size:12px;padding:4px 6px}
  #pHpBar{width:48px}
  .card{width:max-content;max-width:100%}
  .card .info{width:64px;flex:none}
  #toasts{top:26vh;bottom:auto}   /* 手機：放在角色上方，不要蓋住左下快捷欄和右下按鈕 */
}
@media (max-width:600px){ #travelPins .pin{font-size:9px;padding:0 3px;border-width:1px} #travelMap .region{font-size:16px} }

/* ===== 背包、裝備、市集 ===== */
.whotabs{flex-wrap:wrap}
.whotabs button{display:flex;align-items:center;gap:4px;padding:3px 10px 3px 4px}
.whotabs canvas{width:24px;height:24px}
.bagwrap{display:flex;gap:14px;flex-wrap:wrap}
#equipPane{flex:0 0 250px}
#bagPane{flex:1;min-width:260px}
#equipPane h2,#bagPane h2{margin-top:6px}
.igrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(46px,1fr));gap:4px}
.eqgrid{grid-template-columns:repeat(3,1fr)}
.icell{position:relative;aspect-ratio:1;background:var(--cell);border:2px solid #4a3a2a;border-radius:6px;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0;min-width:0}
.icell.empty{background:#1a130c;cursor:default;border-style:dashed;border-color:#3a2c1e}
.icell.sel{outline:2px solid var(--accent);outline-offset:1px}
.icell canvas{image-rendering:pixelated}
.icell .plus{position:absolute;right:2px;top:0;font-size:10px;color:#ffd34d;text-shadow:0 0 2px #000}
.icell .cnt{position:absolute;right:3px;bottom:0;font-size:10px;text-shadow:0 0 2px #000,0 0 2px #000}
.icell .slotlbl{position:absolute;left:2px;top:0;font-size:9px;color:var(--ui-dim)}
.icell .qk{position:absolute;left:2px;bottom:0;font-size:9px;background:#3f6fc0;border-radius:3px;padding:0 2px}
.statbox{font-size:12px;line-height:1.6;margin-top:6px;color:var(--ui-fg)}
.statbox .aura{color:#ffd34d}
.statbox small{color:var(--ui-dim)}
.iteminfo{margin-top:10px;background:#1a130c;border:1px solid var(--ui-line);border-radius:8px;padding:8px 10px;min-height:56px;font-size:13px;line-height:1.6}
.iteminfo .ihead b{font-size:15px}
.iteminfo .ihead small{color:var(--ui-dim)}
.iteminfo .istat{color:#bfe8ff}
.iteminfo .icmp{font-size:12px;color:var(--ui-dim)}
.iteminfo .icmp .up{color:#6cd86a}
.iteminfo .icmp .down{color:#ff6b5e}
.iteminfo .iwarn{color:#ff9a8a;font-size:12px}
.iteminfo .idesc{color:var(--ui-dim);font-size:12px}
.iteminfo .row{margin-top:6px}
label.chk{display:flex;align-items:center;gap:6px;margin-right:auto;font-size:13px;cursor:pointer}
#shopList{max-height:46vh;overflow:auto;display:flex;flex-direction:column;gap:4px}
.srow{display:flex;align-items:center;gap:10px;background:var(--cell);border:2px solid #4a3a2a;border-radius:8px;padding:4px 8px;cursor:pointer}
.srow.sel{border-color:var(--accent)}
.srow canvas{width:28px;height:28px;image-rendering:pixelated;flex:none}
.srow .stxt{flex:1;min-width:0;display:flex;flex-direction:column}
.srow .stxt small{color:var(--ui-dim);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.srow .sprice{color:#f2c94c;white-space:nowrap;font-size:13px}
.money{margin-right:auto;align-self:center}
/* 快捷欄、市集按鈕（左下） */
#quickBar{position:fixed;left:12px;bottom:12px;display:flex;flex-direction:column;gap:8px;align-items:flex-start;z-index:4}
#quickBar .qrow{display:flex;gap:8px}
.qslot{position:relative;width:52px;height:52px;background:var(--ui-bg);border:2px solid var(--ui-line);border-radius:10px;display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
.qslot canvas{image-rendering:pixelated}
.qslot.none canvas{opacity:.35}
.qslot .cnt{position:absolute;right:3px;bottom:1px;font-size:11px;text-shadow:0 0 2px #000}
.qslot .qk{position:absolute;left:3px;top:1px;font-size:10px;color:var(--ui-dim)}
#btnShop{background:#3d6a3a;border:2px solid #5ea85a;border-radius:10px;padding:6px 12px;cursor:pointer;font-size:14px}
#btnShop small{font-size:10px;color:#d8f0d0;margin-left:4px}
#btnShop.hidden{display:none}
@media (max-width:600px){
  #btns{gap:6px;right:8px}
  #btns button{width:54px;height:54px;font-size:13px}
  #btns #btnSet{width:38px;height:38px}
  #quickBar{left:8px;bottom:72px}
  .qslot{width:46px;height:46px}
  #equipPane,#bagPane{flex:1 1 100%;min-width:0}
  .igrid{grid-template-columns:repeat(auto-fill,minmax(40px,1fr))}
  .eqgrid{grid-template-columns:repeat(6,1fr)}
}
/* 雲端存檔 */
.cloudbox{margin-top:10px;border-top:1px dashed var(--ui-line);padding-top:4px}
#gBtnMenu,#gBtnStarter{margin:6px 0;min-height:44px}
/* 觸控裝置：不顯示電腦按鍵字母，改顯示手機用的說明 */
.tch{display:none}
.touch .tch{display:block}
.touch .kbd{display:none!important}
.touch #help{display:none}
.qcap{font-size:11px;color:var(--ui-fg);background:var(--ui-bg);border-radius:6px;padding:1px 6px}
.qslot.pulse{animation:qpulse .6s ease-in-out infinite alternate;border-color:var(--accent)}
@keyframes qpulse{from{box-shadow:0 0 0 0 rgba(242,201,76,.0)}to{box-shadow:0 0 0 6px rgba(242,201,76,.55)}}
/* 暫停・設定 */
.setrow{display:flex;align-items:center;gap:10px;margin:10px 0;font-size:15px}
.setrow label{width:72px;flex:none}
.setrow input[type=range]{flex:1;accent-color:var(--accent);height:28px}
.setrow span{width:32px;text-align:right;color:var(--ui-dim)}
#settingsUI label.chk{margin:8px 0}
/* 從主畫面全螢幕打開時，避開瀏海與底部手勢列 */
#hud{top:calc(8px + env(safe-area-inset-top));left:calc(8px + env(safe-area-inset-left))}
#mapBox{top:calc(8px + env(safe-area-inset-top));right:calc(8px + env(safe-area-inset-right))}
#btns{bottom:calc(12px + env(safe-area-inset-bottom));right:calc(12px + env(safe-area-inset-right))}
#quickBar{bottom:calc(12px + env(safe-area-inset-bottom));left:calc(12px + env(safe-area-inset-left))}
@media (max-width:600px){
  #btns{bottom:calc(8px + env(safe-area-inset-bottom));right:calc(8px + env(safe-area-inset-right))}
  #quickBar{bottom:calc(72px + env(safe-area-inset-bottom));left:calc(8px + env(safe-area-inset-left))}
}
/* 羈絆 */
.bonds{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:8px}
.bond{background:var(--cell);border:2px solid #4a3a2a;border-radius:10px;padding:8px 10px;font-size:13px}
.bond.on{border-color:var(--accent);background:#3a2e14}
.bond .bhead{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.bond .bhead b{font-size:15px}
.bond.on .bhead b{color:var(--accent)}
.bond .bhead small{color:var(--ui-dim)}
.bond .bdesc{color:var(--ui-dim);font-size:12px;margin:2px 0 4px;line-height:1.5}
.bond .bmem{display:flex;flex-wrap:wrap;gap:4px 8px;margin:4px 0}
.bond .bmem span{display:flex;align-items:center;gap:2px;font-size:12px}
.bond .bmem span canvas{width:20px;height:20px}
.bond .bmem .in{color:#ffe9a8;font-weight:bold}
.bond .bmem .box{color:var(--ui-fg)}
.bond .bmem .no{color:#7a6e5e}
.bond .btier{font-size:12px;color:var(--ui-dim)}
.bond .btier.ok{color:#6cd86a}
.grid .bondtag{font-size:10px;color:#ffd34d;line-height:1.3}
