:root{--ui-bg:#050806;--ui-panel:#111b18;--ui-panel-soft:#17231f;--ui-border:#33433d;--ui-muted:#8ea79d;--ui-control:#25342e;--ui-radius:20px;--ui-nav-size:44px;--ui-gap:8px}
*{box-sizing:border-box}
html,body{margin:0;width:100%;height:100%;overflow:hidden;background:var(--ui-bg);color:#f4f7f5;font-family:Inter,system-ui,Segoe UI,sans-serif}
body{display:block}
#shell{position:fixed;inset:0;width:100vw;height:100vh;height:100dvh;background:#0b1712;overflow:hidden;touch-action:none}
canvas{display:block;width:100%;height:100%;touch-action:none;user-select:none}
.hidden{display:none!important}
.modal{position:fixed;inset:0;background:#000b;display:grid;place-items:center;padding:max(18px,env(safe-area-inset-top)) max(18px,env(safe-area-inset-right)) max(18px,env(safe-area-inset-bottom)) max(18px,env(safe-area-inset-left));z-index:20}
.panel{width:min(430px,100%);max-height:min(760px,94vh);max-height:min(760px,94dvh);overflow:auto;background:var(--ui-panel);border:1px solid var(--ui-border);border-radius:var(--ui-radius);padding:18px;box-shadow:0 24px 90px #000}
.screen-panel{width:min(540px,100%);height:min(900px,94dvh);max-height:94dvh;overflow:hidden;display:flex;flex-direction:column}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.panel-head-actions{display:flex;gap:var(--ui-gap);flex:0 0 auto}
.panel-nav-button{border:0!important;background:var(--ui-control)!important;color:white!important;border-radius:12px!important;width:var(--ui-nav-size)!important;height:var(--ui-nav-size)!important;min-height:var(--ui-nav-size)!important;padding:0!important;font-size:28px!important;line-height:1!important;display:grid!important;place-items:center!important}
.panel-nav-button:active{transform:translateY(1px);filter:brightness(.92)}
.panel h2{margin:2px 0 8px}.panel h3{margin:18px 0 8px;font-size:15px}.panel small,.hint{color:var(--ui-muted)}
.summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.summary span{background:#1b2823;border-radius:10px;padding:9px;font-size:12px}
.upgrade-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.panel button{border:0;border-radius:10px;padding:11px;min-height:44px;touch-action:manipulation;font-weight:800;background:#2a3933;color:white}
.panel button.primary{background:#34b84b}
.panel input{width:100%;border:1px solid #3a4c45;background:#0b1310;color:white;border-radius:10px;padding:12px;min-height:44px;margin:5px 0 8px}
.link-grid{display:grid;gap:7px;margin-top:14px}
output{display:block;margin-top:9px;padding:10px;border-radius:10px;background:#0b1310;color:#7ee9ff;min-height:38px;word-break:break-all}
hr{border:0;border-top:1px solid #293b34;margin:18px 0}
.merchant-panel{width:min(470px,100%)}.resource-row{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin:10px 0 4px}.resource-row span{background:#18251f;border-radius:9px;padding:9px;text-align:center;font-size:12px;font-weight:800}.merchant-stock{display:grid;gap:8px}.stock-row{display:grid;grid-template-columns:1fr auto;gap:10px;align-items:center;background:#17221e;border-radius:10px;padding:10px}.stock-row small{display:block;color:#91a49b;margin-top:3px}.stock-row button{min-width:88px}.stock-row button:disabled{opacity:.42}.quest-card{background:#17221e;border-radius:10px;padding:12px}.quest-card p{margin:5px 0}.quest-card button{margin-top:8px;width:100%}
.panel button.secondary{background:#22322c;border:1px solid #3a5047}.panel button.wide{width:100%;margin-top:10px}
.gear-panel{width:min(500px,100%)}.gear-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin:8px 0 12px}.gear-stats span{background:#18251f;border-radius:9px;padding:8px 5px;text-align:center;font-size:11px}.equipped-slots,.gear-inventory,.loot-choices{display:grid;gap:8px}.inventory-head{display:flex;align-items:end;justify-content:space-between}.inventory-head h3{margin-bottom:6px}
.gear-card{border:1px solid #34463f;background:#17221e;border-radius:12px;padding:11px;position:relative;overflow:hidden}.gear-card::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--rarity,#aeb5b1)}.gear-card h4{margin:0 0 3px;font-size:15px}.gear-meta{font-size:11px;color:#aab9b3;margin-bottom:7px}.gear-flavor{font-size:11px;color:#8fa198;font-style:italic;margin:7px 0}.gear-stats-list{display:flex;gap:5px;flex-wrap:wrap;margin:6px 0}.gear-stat{font-size:10px;background:#0f1815;border-radius:7px;padding:4px 6px}.affix{font-size:10px;color:#cdd9d4;margin:2px 0}.gear-actions{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin-top:9px}.gear-actions.three{grid-template-columns:repeat(3,1fr)}.gear-actions button{padding:9px 6px;font-size:11px;min-height:44px}.gear-actions button.recycle{background:#4a322d}.gear-actions button.keep{background:#30433b}.gear-actions button.equip{background:#2d7842}.gear-actions button:disabled{opacity:.38}
.slot-label{font-size:9px;color:#7f958b;text-transform:uppercase;letter-spacing:.08em}.empty-slot{border:1px dashed #33443e;border-radius:10px;padding:12px;color:#72847c;font-size:12px}
.compare{margin-top:7px;padding-top:7px;border-top:1px solid #293a34;font-size:10px;color:#aebdb7}.delta-up{color:#77df92}.delta-down{color:#ff8589}.behavior-line{font-size:10px;color:#8fd6f0;margin-top:5px}
.loot-modal{z-index:30;background:#000d}.loot-panel{width:min(520px,100%);max-height:94vh;max-height:94dvh}.loot-heading h2{margin:2px 0}.loot-resources{font-size:11px;color:#c7d3ce}.loot-card{box-shadow:inset 0 0 28px color-mix(in srgb,var(--rarity,#aaa) 8%,transparent)}

/* Survival/loot clarity pass */
.gear-title-row{display:grid;grid-template-columns:42px 1fr auto;gap:9px;align-items:center;margin-bottom:5px}.gear-title-row h4{margin:0}.gear-icon{width:38px;height:38px;display:grid;place-items:center;border:2px solid var(--rarity,#aeb5b1);border-radius:10px;background:#0c1512;font-size:22px;line-height:1;box-shadow:inset 0 0 12px color-mix(in srgb,var(--rarity,#aaa) 16%,transparent)}.rarity-badge{align-self:start;padding:3px 6px;border:1px solid var(--rarity,#aaa);border-radius:999px;color:var(--rarity,#aaa);font-size:9px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}.gear-card.rarity-rare{border-color:#477eae}.gear-card.rarity-epic{border-color:#8054a6;box-shadow:inset 0 0 20px rgba(182,120,239,.06)}.gear-card.rarity-legendary{border-color:#a9852f;box-shadow:inset 0 0 24px rgba(242,196,79,.10)}


/* EmorgiE menu / inventory / equipment pass */
.menu-home{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px;overflow:auto}
.menu-tile{display:grid!important;grid-template-columns:42px 1fr;grid-template-rows:auto auto;text-align:left;gap:2px 8px;padding:14px!important;background:#17231f!important;border:1px solid #33483f!important}
.menu-tile>span{grid-row:1/3;font-size:28px;align-self:center}.menu-tile>b{font-size:15px}.menu-tile>small{font-size:10px;color:#8ea79d;font-weight:600}
.menu-section{overflow:auto;padding-right:2px}.world-map-card{margin-top:10px;display:grid;gap:10px}.world-map-card .map-band{background:#15221d;border:1px solid #32463d;border-radius:13px;padding:13px}.world-map-card strong{display:block;font-size:18px;margin-bottom:3px}

.inventory-panel{gap:10px}.item-details,.equipment-details{min-height:150px;background:#121f1a;border:1px solid #31453c;border-radius:14px;padding:13px;overflow:auto}
.item-details .detail-head,.equipment-details .detail-head{display:flex;align-items:center;gap:12px}.detail-icon{font-size:42px;width:54px;height:54px;display:grid;place-items:center;background:#0b1511;border-radius:12px;border:1px solid #3a5047}
.item-details h3,.equipment-details h3{margin:0}.detail-meta{font-size:11px;color:#93a79e}.detail-count{font-size:13px;font-weight:900;color:#ffe27a}
.inventory-workspace,.equipment-browser{display:grid;grid-template-columns:48px 1fr;gap:9px;min-height:0;flex:1}
.vertical-filters{display:flex;flex-direction:column;gap:7px}.vertical-filters button{padding:0!important;min-height:42px!important;width:42px;border:1px solid #32473e!important;background:#182720!important;font-size:20px}.vertical-filters button.active{outline:2px solid #7fe1a0;background:#254432!important}
.item-grid,.gear-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:78px;gap:7px;overflow:auto;align-content:start;padding-right:2px}
.item-cell,.gear-cell{border:1px solid #34483f;background:#16231e;border-radius:11px;position:relative;padding:5px;display:grid;place-items:center;cursor:pointer;user-select:none}
.item-cell.selected,.gear-cell.selected{outline:2px solid #9df0c9}.item-cell[draggable=true],.gear-cell[draggable=true]{cursor:grab}.item-cell .cell-icon,.gear-cell .cell-icon{font-size:30px;line-height:1}.item-cell .cell-count{position:absolute;right:5px;bottom:4px;font-size:11px;font-weight:900;color:#ffe27a}.cell-rarity{position:absolute;left:4px;bottom:4px;width:7px;height:7px;border-radius:50%;background:var(--rarity,#aaa)}
.belt-wrap{border-top:1px solid #2f433a;padding-top:9px}.belt-title{display:flex;justify-content:space-between;align-items:end;margin-bottom:6px}.belt-title small{color:#82968d}.belt-bar{display:grid;grid-template-columns:repeat(5,1fr);gap:7px}.belt-slot{height:65px;border-radius:11px;border:1px dashed #4a6358;background:#101a16;display:grid;place-items:center;position:relative}.belt-slot.drag-over{outline:2px solid #7fe1a0;background:#1b3227}.belt-slot .belt-icon{font-size:27px}.belt-slot .belt-num{position:absolute;top:4px;left:5px;font-size:10px;color:#7e9288}.belt-slot .belt-count{position:absolute;right:5px;bottom:4px;font-size:10px;color:#ffe27a;font-weight:900}

.equipment-panel{gap:8px}.equipment-upper{display:grid;grid-template-columns:1.05fr .95fr;gap:10px;min-height:280px}.paperdoll{position:relative;min-height:270px;background:#0f1916;border:1px solid #2e4239;border-radius:14px;overflow:hidden}.character-shadow{position:absolute;inset:35px 58px 28px;display:grid;place-items:center;opacity:.55}.shadow-head{width:48px;height:48px;border-radius:50%;background:#050807;position:absolute;top:10px}.shadow-body{width:76px;height:120px;border-radius:35px 35px 18px 18px;background:#050807;position:absolute;top:57px}.shadow-legs{width:62px;height:90px;border-left:25px solid #050807;border-right:25px solid #050807;position:absolute;top:170px}
.equipment-slots{position:absolute;inset:8px}.equip-slot{position:absolute;width:62px;height:62px;border:1px dashed #566f64;border-radius:11px;background:#13201b;display:grid;place-items:center;text-align:center;font-size:10px;padding:3px}.equip-slot .slot-icon{font-size:24px;display:block}.equip-slot[data-slot="head"]{left:50%;top:0;transform:translateX(-50%)}.equip-slot[data-slot="weapon"]{left:4px;top:90px}.equip-slot[data-slot="body"]{left:50%;top:92px;transform:translateX(-50%)}.equip-slot[data-slot="accessory"]{right:4px;top:90px}.equip-slot[data-slot="boots"]{left:50%;bottom:2px;transform:translateX(-50%)}.equip-slot.drag-over{outline:2px solid #7fe1a0}.equip-slot.filled{border-style:solid;border-color:var(--rarity,#566f64)}
.equipment-browser{flex:1}.gear-grid{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:80px}.gear-cell .cell-name{font-size:9px;line-height:1.1;text-align:center;color:#b7c7c0}.gear-cell .cell-icon{font-size:27px}
.rarity-common{--rarity:#aeb5b1}.rarity-uncommon{--rarity:#6bd18b}.rarity-rare{--rarity:#62aaf2}.rarity-epic{--rarity:#c47cff}.rarity-legendary{--rarity:#f4c95d}

@media(max-width:430px){
  .menu-home{grid-template-columns:1fr}.item-grid,.gear-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .equipment-upper{grid-template-columns:1fr;min-height:0}.paperdoll{min-height:250px}.equipment-details{min-height:130px}
}



/* Shared-menu Biobook */
.biobook-summary{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:8px 0 10px}
.biobook-count{background:#17251f;border:1px solid #30443b;border-radius:11px;padding:10px;text-align:center}
.biobook-count b{display:block;font-size:20px;color:#f1f5f3}.biobook-count span{display:block;margin-top:2px;color:var(--ui-muted);font-size:9px;text-transform:uppercase}
.biobook-list{display:grid;gap:7px}
.biobook-entry{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;background:#141f1b;border:1px solid #2d4038;border-radius:11px;padding:10px}
.biobook-entry-main b{display:block;font-size:13px}.biobook-entry-main small{display:block;margin-top:3px;font-size:9px}
.biobook-entry-progress{text-align:right}.biobook-entry-progress strong{display:block;color:#ffd76e;font-size:12px}.biobook-entry-progress small{display:block;margin-top:3px;color:#9df0c9;font-size:9px}
.biobook-empty{padding:18px;border:1px dashed #34483f;border-radius:11px;color:var(--ui-muted);text-align:center}
.biobook-pager{display:grid;grid-template-columns:1fr auto 1fr;gap:8px;align-items:center;margin-top:10px}.biobook-pager span{text-align:center;color:var(--ui-muted);font-size:11px}.biobook-pager button:last-child{justify-self:stretch}

/* Discovered world map */
.world-map-card{margin-top:10px;display:grid;gap:10px}
.world-map-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}
.world-map-stats>div{background:#14211c;border:1px solid #31463d;border-radius:11px;padding:9px 7px;text-align:center}
.world-map-stats b{display:block;font-size:19px;color:#f2f6f3}
.world-map-stats span{display:block;margin-top:2px;font-size:9px;line-height:1.15;color:#8fa39a;text-transform:uppercase;letter-spacing:.04em}
.world-map-frame{height:min(56dvh,590px);min-height:420px;border-radius:15px;overflow:hidden;border:1px solid #334b41;background:#07110e;box-shadow:inset 0 0 40px rgba(0,0,0,.35)}
.world-map-svg{display:block;width:100%;height:100%;background:linear-gradient(#0a1713,#07100d)}
.world-map-svg .map-bg{fill:#091510}
.world-map-svg .map-route-shadow{fill:none;stroke:#020504;stroke-width:26;stroke-linecap:round;stroke-linejoin:round;opacity:.9}
.world-map-svg .map-route{fill:none;stroke:#688778;stroke-width:12;stroke-linecap:round;stroke-linejoin:round}
.world-map-svg .map-zone-ring{fill:none;stroke:#dce9e3;stroke-width:4;opacity:.58}
.world-map-svg .map-zone.current .map-zone-ring{stroke:#ffe27a;stroke-width:7;opacity:1}
.world-map-svg .map-zone text{font:900 24px system-ui;fill:#dce8e2;paint-order:stroke;stroke:#07110e;stroke-width:7px;stroke-linejoin:round}
.world-map-svg .map-entrance polygon{stroke-width:5}
.world-map-svg .map-entrance.known polygon{fill:#0b1411;stroke:#70867c;stroke-dasharray:6 5}
.world-map-svg .map-entrance.known circle{fill:#70867c}
.world-map-svg .map-entrance.visited polygon{fill:#b57bff;stroke:#eddcff}
.world-map-svg .map-entrance.visited circle{fill:#f4ebff}
.world-map-svg .map-portal polygon{stroke-width:5}
.world-map-svg .map-portal.revealed polygon{fill:#0b1514;stroke:#55a9ba}
.world-map-svg .map-portal.active polygon{fill:#4ff1ff;stroke:#d7fdff;filter:drop-shadow(0 0 7px rgba(79,241,255,.65))}
.world-map-svg .map-player>circle:last-of-type{fill:#ffdc64;stroke:#fff4c0;stroke-width:4}
.world-map-svg .map-player-pulse{fill:none;stroke:#ffdc64;stroke-width:4;opacity:.5}
.world-map-legend{display:flex;flex-wrap:wrap;gap:10px 14px;padding:3px 2px;color:#9baca4;font-size:10px}
.world-map-legend span{display:flex;align-items:center;gap:5px}
.world-map-legend i{display:inline-block;width:11px;height:11px}
.legend-player{border-radius:50%;background:#ffdc64;border:2px solid #fff4c0}
.legend-cave{background:#b57bff;clip-path:polygon(50% 0,100% 100%,0 100%)}
.legend-portal{background:#4ff1ff;transform:rotate(45deg)}
.map-frontier{background:#141d24;border:1px solid #33485a;color:#a9c7da;border-radius:11px;padding:10px;font-size:11px}
.world-zone-list{display:grid;gap:6px}
.world-zone-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:9px;align-items:center;background:#121e19;border:1px solid #2a3d35;border-radius:11px;padding:9px 10px}
.world-zone-row b{display:block;font-size:12px;color:#e9f0ed}
.world-zone-row small{display:block;margin-top:2px;color:#81948b;font-size:9px}
.world-zone-status{display:flex;justify-content:flex-end;flex-wrap:wrap;gap:4px;max-width:230px}
.map-status{border:1px solid #40564c;border-radius:999px;padding:3px 6px;font-size:8px;white-space:nowrap;color:#9aafa6;background:#17251f}
.map-status.visited{color:#e7d7ff;border-color:#75569b;background:#241b31}
.map-status.active{color:#bffaff;border-color:#347d84;background:#102c30}
.map-status.revealed{color:#9dd6df;border-color:#365d65;background:#14252a}
.map-status.deep{color:#ffb8ed;border-color:#724465;background:#2d1928}
.map-status.muted{opacity:.62}

@media(max-width:430px){
  .world-map-frame{height:52dvh;min-height:360px}
  .world-map-stats b{font-size:17px}
  .world-zone-row{grid-template-columns:1fr}
  .world-zone-status{justify-content:flex-start;max-width:none}
}

@media(max-width:430px){
  .panel-nav-button{--ui-nav-size:44px}
  .biobook-entry{grid-template-columns:1fr}.biobook-entry-progress{text-align:left}
}


/* LAN-only developer diagnostics */
.dev-menu-tile{border-color:#496d5d!important;background:#182b23!important}
.dev-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:8px 0 4px}
.dev-toolbar>div{display:grid;gap:2px}.dev-toolbar strong{font-size:16px}
.dev-toolbar button{min-width:90px;padding:8px 12px}
.dev-runtime{display:grid;gap:6px;margin-top:10px}
.dev-runtime-row{display:grid;grid-template-columns:105px minmax(0,1fr);gap:10px;align-items:center;background:#121f1a;border:1px solid #2d4439;border-radius:10px;padding:9px 10px}
.dev-runtime-row>span{font-size:10px;color:var(--ui-muted);text-transform:uppercase;letter-spacing:.05em}
.dev-runtime-row>div{display:flex;min-width:0;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}
.dev-runtime-row strong{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:11px;color:#e8f2ed;word-break:break-all;text-align:right}
.dev-status-badge{border:1px solid #44584f;border-radius:999px;padding:2px 6px!important;font-size:8px!important;text-transform:uppercase;letter-spacing:.04em}
.dev-status-badge.ok{color:#95efaa;border-color:#39764a;background:#132b1c}
.dev-status-badge.working{color:#ffe59a;border-color:#806d35;background:#302817}
.dev-status-badge.warn{color:#ffd38c;border-color:#7f5f32;background:#302317}
.dev-status-badge.bad{color:#ff999d;border-color:#804146;background:#32191c}
.dev-status-badge.neutral{color:#aabbb3}
.dev-stat-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}
.dev-stat-card{min-width:0;background:#14211c;border:1px solid #30463c;border-radius:10px;padding:9px}
.dev-stat-card b{display:block;font-size:16px;color:#f0f6f2;word-break:break-word}
.dev-stat-card span{display:block;margin-top:2px;font-size:8px;color:#8fa39a;text-transform:uppercase;letter-spacing:.04em}
.dev-stat-card small{display:block;margin-top:4px;font-size:8px;color:#a9c3b7}
@media(max-width:430px){
  .dev-stat-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dev-runtime-row{grid-template-columns:86px minmax(0,1fr)}
}
