/* Free Market Room (/market-room): full-screen canvas map + game windows. Builds on world.css tokens. */
body.fm-page{padding-bottom:0;overflow:hidden;background:#1b2238;overscroll-behavior:none}
body.fm-in .hud,body.fm-page .livewin{display:none}
.fm-stage{position:fixed;inset:0;overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none}
.fm-cv{position:absolute;inset:0;width:100%;height:100%;display:block;outline:0}
.fm-vignette{position:absolute;inset:0;pointer-events:none;background:radial-gradient(120% 90% at 50% 45%,transparent 55%,rgba(20,14,30,.35))}
body.fm-lobby-on .fm-vignette{background:radial-gradient(90% 80% at 50% 50%,rgba(20,14,30,.15),rgba(20,14,30,.6))}
.fm-stage input,.fm-stage textarea,.fm-wins,.fm-log{user-select:text;-webkit-user-select:text}
.fm-stage :is(.fm-chat,.fm-win,.fm-lobby){touch-action:auto}

/* ---------------- lobby ---------------- */
.fm-lobby{position:absolute;inset:0;overflow:auto;display:grid;place-items:center;padding:84px 16px calc(var(--hud-h) + 24px)}
.fm-gate{width:min(1020px,100%);overflow:hidden}
.fm-gate>.bar{gap:10px}
.fm-online{margin-left:auto;display:inline-flex;align-items:center;gap:6px;font:700 13px var(--f-ui);background:rgba(20,16,40,.35);border-radius:20px;padding:2px 10px}
.fm-online>i{width:8px;height:8px;border-radius:50%;background:#7ee08e;box-shadow:0 0 0 3px rgba(126,224,142,.25);animation:fmPulse 1.6s ease-in-out infinite}
.fm-online.quiet>i{background:#ffd36b;box-shadow:0 0 0 3px rgba(255,211,107,.25);animation:none}
@keyframes fmPulse{50%{box-shadow:0 0 0 6px rgba(126,224,142,0)}}
.fm-gate-body{display:grid;grid-template-columns:1.05fr 1fr;gap:0}
.fm-hero{padding:26px 30px 22px;position:relative;background:linear-gradient(160deg,rgba(255,215,140,.35),transparent 60%)}
.fm-kicker{font:800 12px var(--f-game);letter-spacing:.16em;text-transform:uppercase;color:var(--maple)}
.fm-hero h1{font:800 clamp(38px,5vw,58px)/.95 var(--f-game);margin:6px 0 12px;color:var(--ink);letter-spacing:-.01em}
.fm-hero h1 em{font-style:normal;color:var(--maple);display:inline-block;transform:rotate(-2deg);text-shadow:0 3px 0 #ffd36b}
.fm-lede{margin:0 0 16px;color:var(--ink-2);font-size:16.5px;max-width:42ch}
.fm-points{list-style:none;margin:0 0 16px;padding:0;display:grid;gap:8px}
.fm-points li{display:grid;grid-template-columns:110px 1fr;gap:10px;align-items:baseline;padding:8px 12px;background:rgba(255,255,255,.55);border:1.5px solid var(--win-line);border-radius:10px 4px 10px 4px}
.fm-points b{font:800 16px var(--f-game);color:var(--bar-2)}
.fm-points span{font-size:14px;color:var(--ink-2)}
.fm-safe{margin:0;font-size:14px;color:var(--ink-2);background:#fff1e4;border-left:4px solid var(--maple);padding:8px 12px;border-radius:0 8px 8px 0}
.fm-link{background:none;border:0;padding:0;color:var(--bar-2);font-weight:700;text-decoration:underline;cursor:pointer}
.fm-join{padding:24px 26px;border-left:2px dashed var(--win-line);background:rgba(255,253,245,.7);display:grid;align-content:start}
.fm-join h2{font:800 24px var(--f-game);margin:0 0 6px}
.fm-join p{margin:0 0 14px;color:var(--ink-2);font-size:14.5px}
.fm-step{display:grid;gap:6px}
.fm-gbtn{justify-self:start;margin-top:6px}
.fm-gbtn .g{width:26px;height:26px;border-radius:50%;background:#fff;color:#4285f4;display:grid;place-items:center;font:800 16px/1 system-ui;text-shadow:none;border:1.5px solid var(--ink)}
.fm-load{display:flex;align-items:center;gap:10px;color:var(--ink-3)}
.fm-load i{width:18px;height:18px;border-radius:50%;border:3px solid var(--win-line);border-top-color:var(--maple);animation:fmSpin .8s linear infinite}
@keyframes fmSpin{to{transform:rotate(1turn)}}
.fm-avatars{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin-bottom:8px}
.fm-av{aspect-ratio:1;padding:0;border:2px solid var(--win-line);border-radius:10px;background:radial-gradient(circle at 50% 70%,#fff,#e9dcbc);cursor:pointer;overflow:hidden;transition:transform .15s}
.fm-av img{width:100%;height:100%;object-fit:contain;transform:scale(1.15) translateY(6%)}
.fm-av:hover{transform:translateY(-2px)}
.fm-av[aria-checked=true]{border-color:var(--maple);box-shadow:0 0 0 3px rgba(232,100,28,.3),0 3px 0 var(--ink);background:radial-gradient(circle at 50% 70%,#fff8d8,#ffd36b)}
.fm-lbl{display:block;font:800 13px var(--f-game);color:var(--ink-2);margin-top:6px;letter-spacing:.02em}
.fm-lbl small{font:400 12px var(--f-ui);color:var(--ink-3);margin-left:4px}
.fm-chans{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.fm-chan{display:grid;gap:4px;text-align:left;border:2px solid var(--ink);border-radius:10px;background:linear-gradient(#fffdf5,#efe3c5);padding:8px 10px 6px;cursor:pointer;box-shadow:0 3px 0 var(--ink)}
.fm-chan b{font:800 18px/1 var(--f-game)}
.fm-chan small{font:700 12px var(--f-ui);color:var(--ink-3)}
.fm-chan[aria-checked=true],.fm-chan.cur{background:linear-gradient(#8fb3ee,#5f82bf);color:#fff}
.fm-chan[aria-checked=true] small,.fm-chan.cur small{color:#eaf0ff}
.fm-chan:disabled{opacity:.55;cursor:default}
.fm-fill{height:6px;border-radius:4px;background:rgba(36,32,46,.18);overflow:hidden}
.fm-fill i{display:block;height:100%;background:linear-gradient(90deg,#7ee08e,#f2b81c 70%,#e0503a)}
.fm-enter{margin-top:14px;justify-self:stretch}
.fm-err{margin:4px 0 0;color:#b8321f;font-weight:700;font-size:13.5px}
.fm-err.shake{animation:fmShake .35s}
@keyframes fmShake{25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
.fm-foot{margin:0;padding:8px 18px;font-size:12px;color:var(--ink-3);border-top:1.5px solid var(--win-line);background:rgba(241,231,207,.8)}
.fm-foot a{color:var(--bar-2)}

/* ---------------- game HUD ---------------- */
.fm-game{position:absolute;inset:0;pointer-events:none}
.fm-game>*{pointer-events:auto}
.fm-top{position:absolute;top:66px;right:18px;display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.fm-chip{display:inline-flex;align-items:center;gap:8px;font:800 14px var(--f-game);color:#fff;background:rgba(28,22,40,.78);border:1.5px solid rgba(255,255,255,.25);border-radius:20px;padding:5px 12px 4px;white-space:nowrap}
button.fm-chip{cursor:pointer}button.fm-chip:hover{background:rgba(28,22,40,.92)}
.fm-ch b{color:var(--gold-ink)}.fm-ch span{font:700 12.5px var(--f-ui);opacity:.85}.fm-ch i{font-style:normal;opacity:.7}
.fm-face{width:26px;height:26px;border-radius:50%;background:#ffe9b8 center 20%/150% no-repeat;border:1.5px solid #fff;flex:none}
.fm-me{padding-left:4px}
.fm-mapbtn{display:none}
.fm-chpop{position:absolute;top:calc(100% + 8px);right:0;width:260px;z-index:5}
.fm-chpop .pad{display:grid;gap:8px;padding:12px}
.fm-mmhost{height:92px!important;padding:0!important;overflow:hidden}
.fm-mm{display:block;width:100%;height:100%}
.fm-mmwin{position:absolute;top:96px;left:8px;right:8px;height:84px;padding:3px;border-radius:8px}
.fm-mmwin .fm-mm{border-radius:6px}

.fm-chat{position:absolute;left:16px;bottom:16px;width:min(440px,calc(100vw - 32px));display:grid;grid-template-rows:auto 1fr auto auto;height:250px;background:linear-gradient(rgba(255,253,245,.94),rgba(241,231,207,.94))}
.fm-chat.fold{height:auto}.fm-chat.fold .fm-log{display:none}
.fm-ctabs{padding:6px 8px 0;align-items:end}
.fm-ctabs button{font-size:13px;padding:3px 10px 1px}
.fm-ctabs [aria-selected=true]{padding-top:5px}
.fm-cfold{margin-left:auto!important;border-radius:6px!important;border-bottom:2px solid var(--ink)!important;margin-bottom:4px!important;padding:0 8px!important;align-self:center}
.fm-log{list-style:none;margin:0;padding:6px 10px;overflow-y:auto;font-size:13.5px;line-height:1.35;min-height:0;overscroll-behavior:contain}
.fm-l{padding:1px 0;word-break:break-word}
.fm-l time{font-size:11px;color:var(--ink-3);margin-right:6px}
.fm-n{background:none;border:0;padding:0;font:800 13.5px var(--f-game);color:var(--bar-2);cursor:pointer}
.fm-n:hover{text-decoration:underline}
.fm-l-whisper .fm-c,.fm-l-whisper .fm-n{color:#8a3aa6}.fm-wd{font-size:12px;color:#8a3aa6;font-weight:700}
.fm-l-deal .fm-c{color:#8a5a06;font-weight:700}
.fm-l-system .fm-c{color:var(--ink-3);font-style:italic}
.fm-l-system .fm-c.warn{color:#b8321f;font-style:normal;font-weight:700}
.fm-l-system .fm-c.good{color:var(--down);font-style:normal;font-weight:700}
.fm-l[data-msg]{cursor:context-menu;border-radius:4px}.fm-l[data-msg]:hover{background:rgba(200,183,143,.25)}
.fm-say{display:flex;gap:6px;padding:6px 8px 8px;align-items:center}
.fm-say input{flex:1;min-width:0;border:2px solid var(--ink);border-radius:8px;padding:6px 10px;font-size:15px;background:#fff}
.fm-say input:focus{outline:none;border-color:var(--maple);box-shadow:0 0 0 3px rgba(232,100,28,.25)}
.fm-say input:disabled{background:#eee}
.fm-to{display:inline-flex;gap:4px;align-items:center;border:0;background:#f1dcf7;color:#8a3aa6;border-radius:14px;padding:3px 8px;font:700 12px var(--f-ui);cursor:pointer;max-width:140px}
.fm-to b{overflow:hidden;text-overflow:ellipsis}.fm-to i{font-style:normal}
.fm-mute{margin:0 8px 8px;font-size:12.5px;color:#b8321f;font-weight:700}

.fm-bar{position:absolute;right:16px;bottom:16px;display:flex;gap:6px}
.fm-bar button{position:relative;width:66px;height:66px;display:grid;justify-items:center;align-content:center;gap:1px;border:2px solid var(--ink);border-radius:12px;background:linear-gradient(#fffdf5,#e9dcbc);box-shadow:inset 0 0 0 2px #fff,0 4px 0 var(--ink);cursor:pointer;font:800 12px var(--f-game);color:var(--ink);padding:4px 0 2px}
.fm-bar button img{width:34px;height:34px;object-fit:contain}
.fm-bar button:hover{background:linear-gradient(#fff6d9,#ffd98a);transform:translateY(-2px)}
.fm-bar button:active{transform:translateY(2px);box-shadow:inset 0 0 0 2px #fff,0 1px 0 var(--ink)}
.fm-badge{position:absolute;top:-8px;right:-8px;min-width:22px;height:22px;border-radius:11px;background:var(--up);color:#fff;border:2px solid var(--ink);font:800 12px/18px var(--f-game);padding:0 5px;animation:fmBob 1.2s ease-in-out infinite}
@keyframes fmBob{50%{transform:translateY(-3px)}}
.fm-emotes{position:absolute;right:16px;bottom:96px;display:grid;grid-template-columns:repeat(4,48px);gap:4px;padding:8px}
.fm-emotes button{border:0;background:transparent;cursor:pointer;border-radius:8px;padding:4px}
.fm-emotes button:hover,.fm-emotes button:focus-visible{background:#ffe9b8;transform:scale(1.1)}
.fm-prompt{position:absolute;left:50%;top:118px;transform:translateX(-50%);display:inline-flex;align-items:center;gap:10px;font:800 17px var(--f-game);color:#fff;background:linear-gradient(#ffa24a,#e8641c 60%,#c94f10);border:2px solid var(--ink);border-radius:30px;padding:8px 18px 6px 8px;box-shadow:inset 0 2px 0 rgba(255,255,255,.45),0 4px 0 var(--ink),0 0 0 6px rgba(255,211,107,.35);cursor:pointer;text-shadow:0 1.5px 0 #8a330a;animation:fmPrompt .35s cubic-bezier(.2,1.6,.4,1)}
.fm-prompt kbd{display:grid;place-items:center;width:30px;height:30px;border-radius:50%;background:#fffdf5;color:var(--ink);font:800 15px var(--f-game);border:2px solid var(--ink);text-shadow:none}
@keyframes fmPrompt{from{transform:translateX(-50%) scale(.6);opacity:0}}
.fm-keys{position:absolute;left:50%;bottom:20px;transform:translateX(-50%);margin:0;font:700 12px var(--f-ui);color:#fff;background:rgba(28,22,40,.55);padding:4px 12px;border-radius:14px;white-space:nowrap;pointer-events:none}
.fm-keys kbd{font:800 11px var(--f-game);background:#fffdf5;color:var(--ink);border-radius:4px;padding:0 5px;margin:0 1px}
.fm-pad{display:none}

/* ---------------- windows ---------------- */
.fm-wins{position:absolute;inset:0;pointer-events:none;z-index:30}
.fm-win{position:absolute;right:18px;top:120px;width:min(440px,calc(100vw - 32px));max-height:calc(100vh - 150px);display:flex;flex-direction:column;pointer-events:auto;animation:fmWin .22s cubic-bezier(.2,1.3,.4,1)}
@keyframes fmWin{from{transform:translateY(12px) scale(.96);opacity:0}}
.fm-win.dragged{animation:none}
.fm-win>.bar{cursor:grab;user-select:none;flex:none}
.fm-wb{overflow:auto;padding:12px 16px 16px;overscroll-behavior:contain}
.fm-w-offers,.fm-w-offer{right:auto;left:calc(50% - 220px);top:90px}
.fm-w-auc{width:min(620px,calc(100vw - 32px));right:auto;left:calc(50% - 310px);top:80px}
.fm-w-shop{right:auto;left:calc(50% - 220px);top:80px}
.fm-w-deal{width:min(380px,calc(100vw - 32px));right:auto;left:calc(50% - 190px);top:12vh;z-index:90!important}
.fm-form{display:grid;gap:8px}
.fm-form .inp{font-size:15px;padding:7px 10px}
.fm-sub{margin:0;color:var(--ink-2);font-size:14px}
.fm-fine{font-size:12px;color:var(--ink-3);margin:8px 0 0}
.fm-empty{color:var(--ink-3);font-style:italic;margin:8px 0}
.fm-acts{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.fm-rows{display:grid;gap:10px}
.fm-row{border:1.5px solid var(--win-line);border-radius:10px;padding:8px 10px;background:rgba(255,255,255,.6);display:grid;gap:6px}
.fm-rowh{display:flex;align-items:center;gap:8px}.fm-rowh b{font:800 14px var(--f-game)}.fm-rowh .fm-tx{margin-left:auto}
.fm-pq{display:grid;grid-template-columns:1fr 90px;gap:8px}
.fm-pq label{display:grid;gap:2px;font:800 12px var(--f-game);color:var(--ink-2)}
.fm-qty{width:100%}
.fm-mi{display:grid;gap:1px}.fm-mh2{font:700 11px var(--f-ui);color:var(--ink-3);min-height:14px}
.fm-tx{border:0;background:transparent;font:800 18px/1 var(--f-game);color:var(--ink-3);cursor:pointer;padding:2px 6px;border-radius:6px}
.fm-tx:hover{background:rgba(0,0,0,.06);color:var(--ink)}
.fm-ip{position:relative}
.fm-ipl{list-style:none;margin:4px 0 0;padding:4px;position:absolute;left:0;right:0;top:100%;z-index:5;background:#fff;border:2px solid var(--ink);border-radius:10px;box-shadow:0 10px 24px rgba(0,0,0,.25);max-height:260px;overflow:auto}
.fm-ipl button{width:100%;display:grid;grid-template-columns:28px 1fr auto;gap:8px;align-items:center;border:0;background:none;padding:5px 6px;border-radius:6px;cursor:pointer;text-align:left;font-size:14px}
.fm-ipl button:hover,.fm-ipl button.on{background:#ffe9b8}
.fm-ipl b{font:800 14px var(--f-game)}.fm-ipl .none{padding:8px;color:var(--ink-3)}
.fm-ipc{display:grid;grid-template-columns:28px 1fr auto;gap:8px;align-items:center;background:#fff;border:2px solid var(--ink);border-radius:9px;padding:4px 6px}
.fm-ipc .n{font-weight:700;font-size:14px;line-height:1.2}.fm-ipc small{display:block;font-weight:400;color:var(--ink-3);font-size:12px}
.fm-ipc img,.fm-ipl img{object-fit:contain}
.fm-v{display:inline-flex;align-items:center;gap:2px;font:800 12px var(--f-game);border-radius:12px;padding:1px 8px 0;border:1.5px solid;white-space:nowrap;width:max-content}
.fm-v small{font:700 11px var(--f-ui);opacity:.8}
.fm-v-cheap{color:#1f6b33;background:#dff5e2;border-color:#7cc78a}
.fm-v-fair{color:#7a5806;background:#fff3cc;border-color:#e6c25a}
.fm-v-pricey{color:#9b2a18;background:#ffe2da;border-color:#ee9a86}
.fm-v-unknown{color:var(--ink-3);background:#eee;border-color:#ccc}
.fm-vprev{min-height:20px}
.fm-shopl{padding:0}
.fm-si{display:grid;grid-template-columns:42px minmax(0,1fr) auto auto;gap:10px;align-items:center;padding:8px 6px;border-radius:8px}
.fm-shopl li:nth-child(odd) .fm-si,.fm-dl li:nth-child(odd) .fm-si{background:rgba(200,183,143,.18)}
.fm-si .n{display:grid;gap:2px;font-weight:700;font-size:14px;line-height:1.2;min-width:0}.fm-si .n small{font-weight:400;color:var(--ink-3)}
.fm-si .pr{text-align:right;font:800 18px/1.05 var(--f-game)}.fm-si .pr small{display:block;font:700 11px var(--f-ui);color:var(--ink-3)}
.fm-dl .fm-si{grid-template-columns:42px minmax(0,1fr) auto}
.fm-shoph{display:flex;gap:10px;align-items:center;margin-bottom:8px}.fm-shoph .fm-face{width:44px;height:44px;border-color:var(--ink)}
.fm-shoph b{font:800 17px var(--f-game);display:block}.fm-shoph small{color:var(--ink-3)}

.fm-offer{border:2px solid var(--win-line);border-radius:12px;padding:10px;margin-bottom:10px;background:#fff;display:grid;gap:6px}
.fm-offer.turn{border-color:var(--maple);box-shadow:0 0 0 3px rgba(232,100,28,.18)}
.fm-offer.flash{animation:fmFlash 1s 2}
@keyframes fmFlash{50%{background:#fff3cc}}
.fm-oh{display:grid;grid-template-columns:42px 1fr auto;gap:8px;align-items:center}
.fm-oh b{font-size:14.5px}.fm-oh small{display:block;color:var(--ink-3);font-size:12.5px}
.fm-op{text-align:right}.fm-op b{font:800 22px/1 var(--f-game);color:var(--ink)}.fm-op small{display:block;font-size:11px}
.fm-om{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:13px}
.fm-om q{color:var(--ink-2);font-style:italic}
.fm-oc{margin-left:auto;color:var(--ink-3);font-size:12px}.fm-oc b.hot{color:var(--up)}
.fm-bar2{height:4px;border-radius:3px;background:rgba(0,0,0,.08);overflow:hidden}
.fm-bar2 i{display:block;height:100%;background:linear-gradient(90deg,var(--maple),var(--gold));transform-origin:left;animation:fmDrain linear forwards}
@keyframes fmDrain{to{transform:scaleX(0)}}
.fm-oa{display:flex;gap:6px;align-items:flex-start;flex-wrap:wrap}
.fm-cf{display:flex;gap:6px;align-items:flex-start;flex:1;min-width:180px}.fm-cf .fm-mi{flex:1}.fm-cf .inp{padding:4px 8px;font-size:14px}
.fm-wait{flex:1;display:flex;align-items:center;gap:8px;color:var(--ink-3);font-size:13px}
.fm-wait i{width:14px;height:14px;border-radius:50%;border:2.5px solid var(--win-line);border-top-color:var(--bar-1);animation:fmSpin 1s linear infinite}

.fm-auch{display:flex;gap:12px;align-items:center;margin-bottom:10px}.fm-auch p{margin:0;font-size:13.5px;color:var(--ink-2)}
.fm-w-auc .tabs{padding:0 4px;margin-bottom:10px}
.fm-auc{position:relative;display:grid;grid-template-columns:46px minmax(0,1fr) auto 70px;gap:4px 10px;align-items:center;padding:8px;border:1.5px solid var(--win-line);border-radius:10px;margin-bottom:8px;background:#fff}
.fm-auc .slot{width:46px;height:46px}
.fm-an{display:grid;gap:2px;min-width:0}.fm-an b{font-size:14.5px;line-height:1.2}.fm-an small{color:var(--ink-3);font-size:12px}
.fm-ap{text-align:right;display:grid}.fm-ap b{font:800 21px/1 var(--f-game)}.fm-ap small{font-size:11.5px;color:var(--ink-3)}.fm-ap .fm-you{color:var(--down);font-weight:700}
.fm-at{text-align:center;display:grid}.fm-at small{font-size:11px;color:var(--ink-3)}.fm-at b{font:800 17px var(--f-game)}
.fm-clock.hot{color:var(--up);animation:fmTick 1s infinite}
@keyframes fmTick{50%{transform:scale(1.12)}}
.fm-auc .fm-bid{grid-column:1/-1;display:flex;gap:6px;align-items:flex-start;flex-wrap:wrap}.fm-auc .fm-bid .fm-mi{flex:1;min-width:120px}.fm-auc .fm-bid .inp{padding:4px 8px;font-size:14px}
.fm-auc .fm-err{grid-column:1/-1}
.fm-auc.top{border-color:#7cc78a;background:#f3fbf3}.fm-auc.mine{border-style:dashed}.fm-auc.ended{opacity:.75}
.fm-auc.ext{animation:fmExt .9s ease 2}
@keyframes fmExt{40%{box-shadow:0 0 0 4px rgba(242,184,28,.7);background:#fff7d9}}
.fm-plus{position:absolute;right:10px;top:-10px;font:800 16px var(--f-game);color:#fff;background:var(--maple);border:2px solid var(--ink);border-radius:12px;padding:0 8px;animation:fmPlus 2.2s ease forwards}
@keyframes fmPlus{0%{transform:translateY(8px) scale(.6);opacity:0}15%{transform:none;opacity:1}80%{opacity:1}100%{transform:translateY(-14px);opacity:0}}

.fm-deal{text-align:center;display:grid;gap:6px;justify-items:center;position:relative;padding-top:4px}
.fm-burst{position:absolute;top:-6px;left:50%;width:160px;height:160px;margin-left:-80px;background:url(/img/fm/coin-burst-sheet.webp) 0 0/auto 160px no-repeat;animation:fmBurst .45s steps(5) 1 forwards;pointer-events:none}
@keyframes fmBurst{to{background-position-x:-800px}}
.fm-kick{font:800 13px var(--f-game);letter-spacing:.14em;text-transform:uppercase;color:#c48a12}
.fm-dslot{width:84px;height:84px;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle,#fff8d8,#ffd36b);border:2px solid var(--ink);box-shadow:0 0 0 6px rgba(242,184,28,.25);animation:fmPop .5s cubic-bezier(.2,1.6,.4,1)}
@keyframes fmPop{from{transform:scale(.3)}}
.fm-deal h3{margin:4px 0 0;font:800 20px/1.15 var(--f-game)}
.fm-dp{margin:0;font-size:14px;color:var(--ink-2)}.fm-dp b{font:800 30px var(--f-game);color:var(--ink)}
.fm-dwho{display:flex;gap:12px;align-items:center;background:var(--win-2);border-radius:10px;padding:6px 14px}
.fm-dwho span{display:grid}.fm-dwho small{font-size:11px;color:var(--ink-3)}.fm-dwho b{font:800 15px var(--f-game)}.fm-dwho i{font-style:normal;font-weight:800;color:var(--maple)}
.fm-dmeet{margin:4px 0 0;font-size:14px}
.fm-coin{position:fixed;z-index:200;width:18px;height:18px;background:url(/img/fm/coin.webp) 0 0/100%;pointer-events:none;animation:fmCoin 1.4s cubic-bezier(.2,.7,.4,1) both}
@keyframes fmCoin{0%{transform:translate(0,0) scale(.4);opacity:0}15%{opacity:1}100%{transform:translate(var(--dx),calc(var(--dy) + 160px)) rotate(540deg);opacity:0}}

.fm-rules{margin:0;padding-left:22px;display:grid;gap:8px;font-size:14.5px}
.fm-h4{font:800 16px var(--f-game);margin:16px 0 6px}
.fm-blk{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.fm-blk li{display:flex;gap:8px;align-items:center}.fm-blk small{color:var(--ink-3);flex:1}
.fm-reasons{display:flex;flex-wrap:wrap;gap:6px}
.fm-reasons label{display:inline-flex;gap:4px;align-items:center;border:1.5px solid var(--win-line);border-radius:16px;padding:3px 10px;font-weight:700;font-size:13.5px;cursor:pointer;background:#fff}
.fm-quote{margin:0;padding:6px 10px;border-left:3px solid var(--win-line);background:#fff;font-size:13.5px;color:var(--ink-2);word-break:break-word}

/* menu, toasts, overlay */
.fm-menu{position:fixed;z-index:150;min-width:190px;background:var(--tip);border:1.5px solid var(--tip-line);border-radius:9px;box-shadow:0 12px 28px rgba(0,0,0,.4);padding:4px;display:grid}
.fm-mh{font:800 14px var(--f-game);color:var(--gold-ink);padding:6px 10px 4px;border-bottom:1px dashed rgba(143,163,220,.4);margin-bottom:2px}
.fm-menu button{display:grid;text-align:left;border:0;background:transparent;color:#fff;font:700 14px var(--f-ui);padding:7px 10px;border-radius:6px;cursor:pointer}
.fm-menu button small{font-weight:400;font-size:11.5px;color:var(--tip-dim)}
.fm-menu button:hover,.fm-menu button:focus-visible{background:rgba(143,163,220,.22);outline:0}
.fm-menu button.warn{color:#ffb4a4}.fm-menu button:disabled{opacity:.45;cursor:default}
.fm-toasts{position:fixed;z-index:140;top:168px;left:18px;display:grid;gap:8px;width:min(380px,calc(100vw - 24px));pointer-events:none}
.fm-toast{pointer-events:auto;display:flex;gap:10px;align-items:center;background:var(--tip);color:#fff;border:1.5px solid var(--tip-line);border-radius:10px;padding:8px 8px 8px 12px;box-shadow:0 10px 24px rgba(0,0,0,.35);animation:fmToast .3s cubic-bezier(.2,1.4,.4,1);font-size:14px}
.fm-toast.out{opacity:0;transform:translateY(-8px);transition:.35s}
@keyframes fmToast{from{transform:translateY(-14px);opacity:0}}
.fm-toast img{width:30px;height:30px;object-fit:contain}
.fm-tt{flex:1;min-width:0;display:grid;word-break:break-word}.fm-tt b{font:800 15px var(--f-game);color:var(--gold-ink)}
.fm-toast.warn{border-color:#ee9a86}.fm-toast.warn b{color:#ffb4a4}.fm-toast.good{border-color:#7cc78a}.fm-toast.good b{color:#9be8a8}.fm-toast.whisper b{color:#e3b3f5}
.fm-toast .fm-tx{color:var(--tip-dim)}
.fm-overlay{position:fixed;inset:0;z-index:160;display:grid;place-items:center;background:rgba(20,14,30,.55);padding:16px;backdrop-filter:blur(2px)}
.fm-ovwin{width:min(400px,100%)}.fm-ovwin p{margin:0 0 12px}
.fm-ov-acts{display:flex;gap:8px;flex-wrap:wrap}

/* ---------------- touch / small screens ---------------- */
@media (pointer:coarse),(max-width:820px){
  .fm-pad{display:block;position:absolute;inset:auto 0 0 0;height:0}
  .fm-stick{position:absolute;left:18px;bottom:calc(22px + env(safe-area-inset-bottom));width:124px;height:124px;border-radius:50%;background:radial-gradient(circle,rgba(255,253,245,.35),rgba(28,22,40,.35));border:2px solid rgba(255,255,255,.55);touch-action:none}
  .fm-stick i{position:absolute;left:50%;top:50%;width:54px;height:54px;margin:-27px 0 0 -27px;border-radius:50%;background:radial-gradient(circle at 35% 30%,#fffdf5,#e9dcbc);border:2px solid var(--ink);box-shadow:0 3px 0 var(--ink)}
  .fm-stick span{position:absolute;color:rgba(255,255,255,.85);font-size:12px;text-shadow:0 1px 2px #000}
  .fm-stick .u{left:50%;top:4px;transform:translateX(-50%)}.fm-stick .d{left:50%;bottom:4px;transform:translateX(-50%)}.fm-stick .l{left:6px;top:50%;transform:translateY(-50%)}.fm-stick .r{right:6px;top:50%;transform:translateY(-50%)}
  .fm-jump{position:absolute;right:18px;bottom:calc(30px + env(safe-area-inset-bottom));width:92px;height:92px;border-radius:50%;border:2px solid var(--ink);background:radial-gradient(circle at 35% 30%,#ffc07a,#e8641c 60%,#b8440c);color:#fff;font:800 18px var(--f-game);text-shadow:0 1.5px 0 #8a330a;box-shadow:inset 0 3px 0 rgba(255,255,255,.4),0 5px 0 var(--ink);touch-action:none}
  .fm-jump.on{transform:translateY(3px);box-shadow:inset 0 3px 0 rgba(255,255,255,.4),0 2px 0 var(--ink)}
  .fm-keys{display:none}
}
@media (max-width:820px){
  body.fm-page .minimap{position:fixed;top:0;left:0;right:0}
  .fm-top{top:46px;left:8px;right:8px;gap:6px;justify-content:flex-start}
  .fm-chpop{left:0;right:auto}
  .fm-chip{font-size:13px;padding:4px 10px 3px}
  .fm-mapbtn{display:inline-flex;margin-left:auto}
  .fm-mmwin{top:84px}
  .fm-chat{left:8px;right:8px;width:auto;bottom:168px;height:132px;grid-template-rows:auto 1fr auto auto;background:linear-gradient(rgba(255,253,245,.86),rgba(241,231,207,.86))}
  .fm-log{font-size:12.5px;padding:3px 8px}.fm-ctabs button{font-size:12px;padding:2px 8px 0}.fm-say input{font-size:16px;padding:4px 8px}
  .fm-chat .fm-say{padding:4px 6px 6px}.fm-chat .fm-say .btn{display:none}
  .fm-bar{right:8px;bottom:auto;top:88px;flex-direction:column;gap:5px}
  body.fm-showmap .fm-bar{top:176px}
  .fm-bar button{width:48px;height:48px;border-radius:10px}.fm-bar button span{display:none}.fm-bar button img{width:30px;height:30px}
  .fm-emotes{right:64px;top:88px;bottom:auto}
  .fm-prompt{top:96px;font-size:14px;max-width:calc(100vw - 90px);left:calc(50% - 26px)}
  .fm-prompt span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .fm-win,.fm-w-auc,.fm-w-offers,.fm-w-offer,.fm-w-shop{left:6px!important;right:6px!important;top:auto!important;bottom:6px;width:auto;max-height:78vh}
  .fm-w-deal{left:12px!important;right:12px!important;top:10vh!important;bottom:auto}
  .fm-toasts{top:142px;left:8px;width:calc(100vw - 76px)}
  .fm-lobby{padding:56px 10px calc(var(--hud-h) + 16px);place-items:start center}
  .fm-gate-body{grid-template-columns:1fr}
  .fm-hero{padding:18px 18px 14px}
  .fm-lede{font-size:14px;margin-bottom:10px}.fm-hero h1{font-size:34px;margin-bottom:8px}.fm-safe{font-size:13px}
  .fm-points{gap:5px;margin-bottom:10px}.fm-points li{padding:5px 10px}.fm-points b{font-size:14.5px}.fm-points span{font-size:12.5px;line-height:1.3}
  .fm-points li{grid-template-columns:1fr;gap:0}
  .fm-join{border-left:0;border-top:2px dashed var(--win-line);padding:16px 18px}
  .fm-avatars{grid-template-columns:repeat(6,1fr);gap:4px}
  .fm-auc{grid-template-columns:42px minmax(0,1fr) auto}.fm-auc .fm-at{grid-column:2/-1;display:flex;gap:6px;align-items:baseline;justify-content:flex-start;text-align:left}
}
@media (max-width:820px) and (pointer:fine){.fm-pad{display:block}}
/* the minimap window (top-left, ~150px) would sit on the entrance window's title bar when the gate spans the width */
@media (min-width:821px) and (max-width:1340px){.fm-lobby{padding-top:172px;place-items:start center}}
.fm-wn-btn{font-size:inherit;text-decoration:underline dotted;text-underline-offset:2px}
.fm-wn-btn:hover{color:var(--maple)}

/* owner tweaks (Nov 3): roomier chat, no key-hint strip, nicer minimap */
.fm-keys{display:none!important}
@media (min-width:821px){
  .fm-chat{width:clamp(420px,44vw,700px);height:300px}
  .fm-log{font-size:14.5px;line-height:1.45;padding:8px 12px}
  .fm-say input{font-size:15px}
}
.fm-mmhost{height:110px!important;padding:4px!important;background:linear-gradient(#3b4a7a,#26304f)!important}
.fm-mmhost .fm-mm,.fm-mmwin .fm-mm{border-radius:7px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.25),0 1px 0 rgba(255,255,255,.15)}
.fm-mmwin{height:96px;background:linear-gradient(#3b4a7a,#26304f)}
body.fm-page .minimap{width:340px}

/* ---------------- busy meter (channels: never raw counts) ---------------- */
.fm-bmw{display:inline-flex;align-items:center;gap:6px;min-width:0}
.fm-bmw small{font:800 12px var(--f-ui);color:inherit;opacity:.9;white-space:nowrap}
.fm-bm{display:inline-flex;gap:2px;padding:2px;border:1.5px solid var(--ink);border-radius:5px;background:rgba(36,32,46,.55);box-shadow:inset 0 1px 0 rgba(0,0,0,.35)}
.fm-bm i{width:7px;height:10px;border-radius:2px;background:rgba(255,255,255,.14)}
.fm-bm i.on{background:linear-gradient(#fff6,transparent 55%),hsl(calc(130 - var(--k) * 125) 72% 52%);box-shadow:0 0 4px hsla(calc(130 - var(--k) * 125),90%,60%,.5)}
.fm-bm-full i.on{background:linear-gradient(#fff6,transparent 55%),#e0503a}
.fm-chan .fm-bmw{justify-content:space-between}
.fm-chan[aria-checked=true] .fm-bmw small,.fm-chan.cur .fm-bmw small{color:#fff}
.fm-chan .fm-here{font:700 11.5px var(--f-ui)}
.fm-online .fm-bm i{width:6px;height:9px}.fm-online-l{font:700 12.5px var(--f-ui)}
.fm-ch .fm-bm{vertical-align:middle;padding:1.5px}.fm-ch .fm-bm i{width:5px;height:9px}
.fm-chpop .fm-chan{grid-template-columns:auto 1fr;align-items:center;column-gap:10px}.fm-chpop .fm-chan .fm-here{grid-column:1/-1}

/* ---------------- NPC merchants ---------------- */
.fm-npcb{display:inline-block;margin-left:4px;padding:0 4px;border-radius:3px;background:linear-gradient(#ffe7a0,#e2a92a);color:#4a2e00;font:800 9.5px/14px var(--f-ui);font-style:normal;letter-spacing:.04em;vertical-align:1px;text-decoration:none}
.fm-n-npc{font-style:italic;color:#9a6a08}
.fm-l-npc .fm-c{color:#6b5320}
.fm-l-whisper.fm-l-npc .fm-c,.fm-l-whisper.fm-l-npc .fm-n{color:#7a5a12}
#fm-menu .fm-mnpc{opacity:1;color:#9a6a08;font-style:italic;cursor:default}
.fm-npch{display:flex;gap:10px;align-items:center;margin-bottom:8px}.fm-npch small{display:block;color:var(--ink-3);font-size:12.5px;line-height:1.3}
.fm-asklog{list-style:none;margin:0 0 8px;padding:8px;display:grid;gap:6px;max-height:min(220px,32vh);min-height:64px;overflow:auto;border:2px solid var(--win-line,#d8c9a3);border-radius:8px;background:#fffdf5}
.fm-asklog li{padding:6px 9px;border-radius:8px;background:#fff3cf;font-size:14px;line-height:1.35;justify-self:start;max-width:92%}
.fm-asklog li.me{justify-self:end;background:#dfe8fb}.fm-asklog li.err{background:#fde3dc;color:#8a2a16}
.fm-askf{display:flex;gap:6px}.fm-askf .inp{flex:1;min-width:0;font-size:16px}
.fm-askq{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.fm-askq .btn{min-height:36px}

/* ---------------- mobile pass (Nov 3): thumb-sized controls, keyboard-aware chat, roomier text ---------------- */
@media (pointer:coarse){
  .fm-chip{min-height:44px;padding:4px 12px 3px}
  .fm-mapbtn{min-width:56px;justify-content:center}
  .fm-ctabs button{min-height:34px}
  .fm-cfold{min-width:44px;min-height:34px}
  .win>.bar .x{position:relative;width:30px;height:30px}
  .win>.bar .x::before{content:"";position:absolute;inset:-7px}   /* 44px hit area */
  .fm-askq .btn,.fm-acts .btn,.fm-win .btn.sm{min-height:44px}
  .fm-menu button{min-height:44px}
  .fmc-seg button{min-height:40px;padding:6px 10px 4px}
  .fmc-sw{width:44px;height:44px}
  .fmc-turn{min-height:44px}
  .fm-chan{min-height:56px}
}
@media (max-width:820px){
  .fm-chans{gap:6px}
  .fm-chan{padding:8px 8px 6px}
  .fm-chan .fm-bmw{display:grid;justify-items:start;gap:3px}
  .fm-chan .fm-bm i{width:6px}
  .fm-mmwin{top:96px}
  .fm-bar{top:100px}
  body.fm-showmap .fm-bar{top:188px}
  .fm-emotes{top:100px}
  .fm-prompt{top:104px}
  .fm-toasts{top:150px}
  .fm-log{font-size:13.5px;line-height:1.4}
  .fm-chat{height:150px;bottom:162px}
  .fm-npcb{font-size:9px;line-height:13px}
}
@media (max-width:380px){
  .fm-chan b{font-size:16px}
  .fm-chan .fm-bm i{width:5px}
  .fm-ch .fm-bm{display:none}   /* very narrow: the switcher still shows meters */
}
/* on-screen keyboard open (js: visualViewport -> --kb, body.fm-kb): lift chat + windows above it, hide the pad */
body.fm-kb .fm-pad,body.fm-kb .fm-bar,body.fm-kb .fm-prompt,body.fm-kb .fm-emotes{display:none!important}
body.fm-kb .fm-chat{bottom:calc(var(--kb,0px) + 6px);height:min(240px,calc(100dvh - var(--kb,0px) - 110px))}
body.fm-kb .fm-win{top:auto!important;bottom:calc(var(--kb,0px) + 6px)!important;max-height:calc(100dvh - var(--kb,0px) - 70px)}
body.fm-kb .fm-lobby{padding-bottom:calc(var(--kb,0px) + 16px)}
/* ---------------- phones in landscape (e.g. 844x390): compact room shell, controls in the corners ---------------- */
@media (pointer:coarse) and (max-height:500px) and (orientation:landscape){
  body.fm-page .menu,body.fm-page .hud{display:none}
  body.fm-page .minimap{position:fixed;top:0;left:0;right:0;width:auto!important;height:auto!important;margin:0;border-radius:0;border:0;padding:0!important;z-index:60;box-shadow:0 3px 0 rgba(20,16,30,.3)}
  body.fm-page .minimap .bar{border-radius:0;padding:3px 8px 2px 12px;font-size:15px;margin:0}
  body.fm-page .minimap .bar::after{display:none}
  body.fm-page .minimap .mbtn{display:inline-flex;margin-left:auto;align-items:center;font:800 14px var(--f-game);color:var(--ink);background:linear-gradient(#fffdf5,#efe3c5);border:2px solid var(--ink);border-radius:8px;padding:3px 12px 1px;min-height:36px;cursor:pointer;text-shadow:none}
  body.fm-page .minimap .mm{display:none}
  .fm-lobby{padding:52px 10px 16px!important;place-items:start center}
  .fm-gate-body{grid-template-columns:1fr 1fr}
  .fm-hero{padding:14px 16px}.fm-hero h1{font-size:30px;margin-bottom:6px}.fm-lede{font-size:13.5px}.fm-points{display:none}
  /* in game */
  .fm-top{top:48px;left:8px;right:auto;gap:6px;justify-content:flex-start}
  .fm-mapbtn{display:inline-flex}
  .fm-mmwin{top:98px;left:8px;right:auto;width:min(420px,50vw);height:80px}
  .fm-bar{top:48px;right:8px;bottom:auto;flex-direction:row;gap:4px}
  .fm-bar button{width:44px;height:44px;border-radius:10px}.fm-bar button span{display:none}.fm-bar button img{width:28px;height:28px}
  .fm-emotes{top:98px;right:8px;bottom:auto}
  .fm-prompt{top:100px;font-size:14px}
  .fm-stick{left:12px;bottom:calc(10px + env(safe-area-inset-bottom));width:112px;height:112px}
  .fm-jump{right:12px;bottom:calc(16px + env(safe-area-inset-bottom));width:84px;height:84px}
  .fm-chat{left:136px;right:108px;width:auto;bottom:6px;height:132px}
  .fm-log{font-size:13px;line-height:1.35;padding:3px 8px}
  .fm-chat .fm-say .btn{display:none}
  .fm-win,.fm-w-auc,.fm-w-offers,.fm-w-offer,.fm-w-shop,.fm-lookwin{left:auto!important;right:6px!important;top:46px!important;bottom:6px!important;width:min(460px,62vw)!important;max-height:none!important}
  .fm-w-deal{left:calc(50% - 190px)!important;right:auto!important;top:46px!important;bottom:6px!important;overflow:auto}
  .fm-toasts{top:100px;left:auto;right:8px;width:min(340px,45vw)}
  body.fm-kb .fm-chat{left:8px;right:8px;height:auto;max-height:calc(100dvh - var(--kb,0px) - 52px)}
  body.fm-kb .fm-win{top:46px!important}
  body.fm-kb .fm-top{display:none}
}
body.fm-kb .fm-w-ask .fm-npch,body.fm-kb .fm-w-ask .fm-fine,body.fm-kb .fm-w-ask .fm-askq{display:none}
body.fm-kb .fm-w-ask .fm-asklog{max-height:calc(100dvh - var(--kb,0px) - 190px);min-height:40px}
