:root { --s: 2; }
* { box-sizing: border-box; }
html, body {
  margin: 0; height: 100%; overflow: hidden;
  background: #07040c; color: #eee;
  font-family: 'Kanit', sans-serif;
}
body { display: flex; align-items: center; justify-content: center; }
#wrap { position: relative; width: 960px; height: 540px; }
canvas {
  display: block; width: 100%; height: 100%;
  image-rendering: pixelated; image-rendering: crisp-edges;
  cursor: default;
}
.overlay {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: calc(var(--s) * 6px);
  background: rgba(8, 4, 16, .74);
  text-align: center; user-select: none;
}
.hidden { display: none; }

.title {
  font-family: 'Press Start 2P', monospace;
  font-size: calc(var(--s) * 16px);
  color: #ffd23f;
  text-shadow: 0 calc(var(--s) * 2px) 0 #9c1f2e, 0 calc(var(--s) * 4px) 0 #1b1028;
}
.title.small { font-size: calc(var(--s) * 11.2px); }
.title.red { color: #ff4a4a; text-shadow: 0 calc(var(--s) * 2px) 0 #3a0a12; }
.subtitle { font-size: max(10.4px, calc(var(--s) * 6.4px)); color: #cbb8e8; }
.hint { font-size: max(8.8px, calc(var(--s) * 4.8px)); color: #9fe0ff; }
.best { font-size: max(8.8px, calc(var(--s) * 4.8px)); color: #ffd23f; min-height: 1em; }
.controls {
  display: grid; grid-template-columns: 1fr 1fr; gap: calc(var(--s) * 2px) calc(var(--s) * 14px);
  font-size: max(8.8px, calc(var(--s) * 4.8px)); color: #ddd; text-align: left;
}
.controls b { color: #ffd23f; font-weight: 600; }

.btn {
  font-family: 'Press Start 2P', monospace;
  font-size: max(8px, calc(var(--s) * 5.6px));
  padding: calc(var(--s) * 5px) calc(var(--s) * 12px);
  color: #1b1028; background: #ffd23f;
  border: calc(var(--s) * 2px) solid #1b1028;
  box-shadow: 0 calc(var(--s) * 3px) 0 #9c6a1c;
  cursor: pointer;
}
.btn:hover { background: #ffe57a; }
.btn:active { transform: translateY(calc(var(--s) * 2px)); box-shadow: 0 calc(var(--s) * 1px) 0 #9c6a1c; }

.cards { display: flex; gap: calc(var(--s) * 8px); }
.card {
  position: relative;
  width: calc(var(--s) * 100px); min-height: calc(var(--s) * 104px);
  padding: calc(var(--s) * 6px);
  display: flex; flex-direction: column; align-items: center; gap: calc(var(--s) * 3px);
  background: linear-gradient(#22183a, #140e22);
  border: calc(var(--s) * 2px) solid #c8c8c8;
  box-shadow: 0 0 0 calc(var(--s) * 1px) #000, 0 calc(var(--s) * 4px) 0 #000;
  color: #eee; font-family: 'Kanit', sans-serif; cursor: pointer;
  transition: transform .08s;
  animation: pop .25s ease-out backwards;
}
.card:nth-child(2) { animation-delay: .06s; }
.card:nth-child(3) { animation-delay: .12s; }
@keyframes pop { from { transform: translateY(calc(var(--s) * 20px)) scale(.8); opacity: 0; } }
.card:hover { transform: translateY(calc(var(--s) * -4px)); }
.card.r1 { border-color: #c8c8c8; }
.card.r2 { border-color: #8888ff; box-shadow: 0 0 calc(var(--s) * 8px) #5555ff88, 0 calc(var(--s) * 4px) 0 #000; }
.card.r3 { border-color: #ffff77; box-shadow: 0 0 calc(var(--s) * 10px) #ffd23f99, 0 calc(var(--s) * 4px) 0 #000; }
.card .rar { font-family: 'Press Start 2P', monospace; font-size: max(5.6px, calc(var(--s) * 3.2px)); opacity: .8; }
.card.r1 .rar, .card.r1 .nm { color: #e0e0e0; }
.card.r2 .rar, .card.r2 .nm { color: #9a9aff; }
.card.r3 .rar, .card.r3 .nm { color: #ffff77; }
.card.r4 { border-color: #e08a3c; box-shadow: 0 0 calc(var(--s) * 12px) #ff8a2bbb, 0 calc(var(--s) * 4px) 0 #000; }
.card.r4 .rar, .card.r4 .nm { color: #ff9a4a; }
.features { display: flex; flex-direction: column; gap: calc(var(--s) * 1px); font-size: max(8.8px, calc(var(--s) * 4.8px)); color: #ddd; }
.card .key {
  position: absolute; top: calc(var(--s) * -6px); left: calc(var(--s) * -6px);
  width: calc(var(--s) * 12px); height: calc(var(--s) * 12px);
  display: grid; place-items: center;
  font-family: 'Press Start 2P', monospace; font-size: max(6.4px, calc(var(--s) * 4px));
  background: #ffd23f; color: #1b1028; border: calc(var(--s) * 1px) solid #000;
}
.card .icon {
  width: calc(var(--s) * 28px); height: calc(var(--s) * 28px);
  display: grid; place-items: center;
  font-size: calc(var(--s) * 12px); line-height: 1;
  color: var(--c); background: #0b0712;
  border: calc(var(--s) * 1px) solid var(--c);
  text-shadow: 0 0 calc(var(--s) * 4px) var(--c);
}
.card .nm { font-family: 'Press Start 2P', monospace; font-size: max(6.4px, calc(var(--s) * 4px)); line-height: 1.4; }
.card .th { font-size: max(9.6px, calc(var(--s) * 5.6px)); font-weight: 600; color: #fff; }
.card .desc { font-size: max(8.8px, calc(var(--s) * 4.8px)); color: #c9c0dc; line-height: 1.35; flex: 1; }
.card .lv { font-family: 'Press Start 2P', monospace; font-size: max(5.6px, calc(var(--s) * 3.6px)); color: #7dff6a; }

.stats, .skilllist { font-size: max(9.6px, calc(var(--s) * 5.6px)); line-height: 1.6; }
.stats b { color: #ffd23f; }
.skilllist { display: flex; flex-wrap: wrap; justify-content: center; gap: calc(var(--s) * 4px); max-width: 80%; }
.skilllist span { padding: calc(var(--s) * 1px) calc(var(--s) * 5px); border: 1px solid #555; background: #140e22; font-size: max(8.8px, calc(var(--s) * 4.8px)); }

/* ---------- members / scoreboard */
.account { font-size: max(8.8px, calc(var(--s) * 4.8px)); color: #ccc; line-height: 1.7; }
.account .who { color: #fff; font-weight: 600; margin-right: calc(var(--s) * 4px); }
.account b, .runresult b { color: #ffd23f; }
.muted { color: #888; }
.link { background: none; border: 0; padding: 0; color: #9fe0ff; font: inherit; cursor: pointer; text-decoration: underline; }
.link:hover { color: #fff; }
.row { display: flex; gap: calc(var(--s) * 6px); }
.btn.alt { background: #9fe0ff; box-shadow: 0 calc(var(--s) * 3px) 0 #2a6a9a; }
.runresult { font-size: max(9.6px, calc(var(--s) * 5.6px)); min-height: 1.4em; }
.newbest { color: #7dff6a; font-family: 'Press Start 2P', monospace; font-size: .8em; }
.modal { background: rgba(8, 4, 16, .88); z-index: 5; }
.panel {
  display: flex; flex-direction: column; align-items: center; gap: calc(var(--s) * 5px);
  padding: calc(var(--s) * 10px) calc(var(--s) * 14px);
  background: #160f24; border: calc(var(--s) * 2px) solid #c99a3c; box-shadow: 0 calc(var(--s) * 4px) 0 #000;
  max-height: 92%; overflow-y: auto;
}
.panel.wide { min-width: 70%; }
.panel input {
  width: calc(var(--s) * 140px); padding: calc(var(--s) * 3px) calc(var(--s) * 5px);
  font: inherit; font-size: max(9.6px, calc(var(--s) * 5.6px));
  color: #fff; background: #0b0712; border: calc(var(--s) * 1px) solid #5a4a7a; outline: none;
}
.panel input:focus { border-color: #ffd23f; }
.error { color: #ff6a6a; font-size: max(8.8px, calc(var(--s) * 4.8px)); min-height: 1.2em; }
.tabs { display: flex; gap: calc(var(--s) * 3px); }
.tab {
  font: inherit; font-size: max(8.8px, calc(var(--s) * 4.8px)); cursor: pointer;
  padding: calc(var(--s) * 2px) calc(var(--s) * 7px); color: #ccc; background: #0b0712; border: 1px solid #5a4a7a;
}
.tab.on { color: #1b1028; background: #ffd23f; border-color: #ffd23f; }
.board { width: 100%; border-collapse: collapse; font-size: max(8.8px, calc(var(--s) * 4.8px)); }
.board th { color: #c99a3c; font-weight: 600; text-align: left; padding: calc(var(--s) * 1.5px) calc(var(--s) * 4px); border-bottom: 1px solid #5a4a7a; }
.board td { padding: calc(var(--s) * 1.5px) calc(var(--s) * 4px); border-bottom: 1px solid #2a2238; }
.board td b { color: #ffd23f; }
.board tr.mine td { background: #2a2050; }
.statgrid { display: grid; grid-template-columns: repeat(5, 1fr); gap: calc(var(--s) * 3px); width: 100%; }
.statgrid div { display: flex; flex-direction: column; align-items: center; padding: calc(var(--s) * 3px); background: #0b0712; border: 1px solid #2a2238; }
.statgrid span { font-size: max(8px, calc(var(--s) * 4px)); color: #aaa; }
.statgrid b { font-size: max(10.4px, calc(var(--s) * 6.4px)); color: #ffd23f; }
.fav { font-size: max(8.8px, calc(var(--s) * 4.8px)); color: #ccc; }

/* ---------- inventory */
.card.r5 { border-color: #c070ff; box-shadow: 0 0 calc(var(--s) * 12px) #b04bd8cc, 0 calc(var(--s) * 4px) 0 #000; }
.card.r5 .rar, .card.r5 .nm { color: #d0a0ff; }
.card .desc .imp, .card .desc .mod { line-height: 1.3; }
.card .desc .uq { color: #ffb070; }
.card .desc hr, .tip hr { border: 0; border-top: 1px solid #4a3a5a; margin: calc(var(--s) * 1.5px) 0; }
.cardimg { width: 80%; image-rendering: pixelated; }
.panel.inv { gap: calc(var(--s) * 4px); padding: calc(var(--s) * 6px) calc(var(--s) * 10px); }
.invwrap { display: flex; gap: calc(var(--s) * 10px); align-items: flex-start; }
.doll {
  display: grid; gap: calc(var(--s) * 3px);
  grid-template-columns: repeat(3, calc(var(--s) * 26px));
  grid-template-areas: ". helmet amulet" "weapon body offhand" "ring1 belt ring2" ". boots .";
  padding: calc(var(--s) * 4px); background: #0b0712; border: 1px solid #2a2238;
}
.bagside { display: flex; flex-direction: column; gap: calc(var(--s) * 5px); }
.bag { display: grid; grid-template-columns: repeat(5, calc(var(--s) * 22px)); gap: calc(var(--s) * 2px); }
.slot {
  width: 100%; aspect-ratio: 1; display: grid; place-items: center; cursor: pointer;
  background: #140e22; border: calc(var(--s) * 1px) solid #3a3048;
}
.dslot .slot { width: calc(var(--s) * 26px); }
.slot.empty { cursor: default; }
.slot.empty span { font-size: max(7.2px, calc(var(--s) * 3.6px)); color: #5a4a6a; }
.slot img { width: 70%; image-rendering: pixelated; }
.slot:hover:not(.empty) { background: #241a38; }
.slot.r1 { border-color: #c8c8c8; } .slot.r2 { border-color: #8888ff; } .slot.r3 { border-color: #ffff77; }
.slot.r4 { border-color: #ff9a4a; box-shadow: inset 0 0 calc(var(--s) * 4px) #ff8a2b88; }
.pstats { display: grid; grid-template-columns: 1fr 1fr; gap: 0 calc(var(--s) * 8px); font-size: max(8px, calc(var(--s) * 4.4px)); }
.pstats div { display: flex; justify-content: space-between; gap: calc(var(--s) * 4px); }
.pstats span { color: #aaa; } .pstats b { color: #ffd23f; font-weight: 600; }
.invfoot { display: flex; gap: calc(var(--s) * 8px); align-items: center; font-size: max(8px, calc(var(--s) * 4.4px)); }
.tip { position: absolute; z-index: 9; pointer-events: none; display: flex; flex-direction: column; gap: calc(var(--s) * 3px); }
.tipbox {
  min-width: calc(var(--s) * 100px); max-width: calc(var(--s) * 140px);
  padding: calc(var(--s) * 4px) calc(var(--s) * 6px); background: rgba(10, 6, 18, .96);
  border: calc(var(--s) * 1px) solid #c8c8c8; font-size: max(8px, calc(var(--s) * 4.4px)); text-align: center;
}
.tipbox.r2 { border-color: #8888ff; } .tipbox.r3 { border-color: #ffff77; } .tipbox.r4 { border-color: #ff9a4a; }
.tipbox.cmp { opacity: .85; }
.cmplabel { font-size: .85em; color: #888; }
.iname { font-family: 'Press Start 2P', monospace; font-size: max(6.4px, calc(var(--s) * 3.6px)); line-height: 1.5; }
.ibase { color: #ddd; } .islot { color: #888; font-size: .9em; }
.imp { color: #c8c8ff; } .mod { color: #8888ff; } .mod.uq { color: #ffb070; }

/* ---------- profile / appearance */
.account .who {
  display: inline-flex; align-items: center; gap: calc(var(--s) * 3px); cursor: pointer;
  background: none; border: 0; color: #fff; font: inherit; font-weight: 600; padding: 0;
}
.account .who img { width: calc(var(--s) * 10px); image-rendering: pixelated; }
.account .who small { color: #9fe0ff; font-weight: 400; font-size: .85em; }
.board td.pl { display: flex; align-items: center; gap: calc(var(--s) * 3px); }
.board td.pl img { width: calc(var(--s) * 8px); image-rendering: pixelated; }
.lookpanel { gap: calc(var(--s) * 4px); }
.lookwrap { display: flex; gap: calc(var(--s) * 10px); align-items: center; }
.lookprev { display: flex; flex-direction: column; align-items: center; gap: calc(var(--s) * 3px); }
.lookprev canvas {
  width: calc(var(--s) * 64px); height: calc(var(--s) * 64px); image-rendering: pixelated;
  background: radial-gradient(#2c4529, #140e22 70%); border: calc(var(--s) * 1px) solid #5a4a7a;
}
.lookname { font-weight: 600; color: #ffd23f; font-size: max(10px, calc(var(--s) * 5.6px)); }
.lookopts { display: flex; flex-direction: column; gap: calc(var(--s) * 3px); }
.optrow { display: grid; grid-template-columns: calc(var(--s) * 34px) 1fr; align-items: center; gap: calc(var(--s) * 4px); font-size: max(9px, calc(var(--s) * 4.8px)); color: #ccc; }
.optrow input { width: calc(var(--s) * 100px); padding: calc(var(--s) * 2px) calc(var(--s) * 4px); font: inherit; color: #fff; background: #0b0712; border: 1px solid #5a4a7a; outline: none; }
.optrow input:focus { border-color: #ffd23f; }
.chips { display: flex; gap: calc(var(--s) * 2px); }
.chip {
  display: flex; flex-direction: column; align-items: center; gap: 1px; cursor: pointer;
  padding: calc(var(--s) * 1.5px); background: #0b0712; border: calc(var(--s) * 1px) solid #3a3048; color: #bbb; font: inherit; font-size: .85em;
}
.chip img { width: calc(var(--s) * 12px); image-rendering: pixelated; }
.chip.on { border-color: #ffd23f; color: #ffd23f; }
.swatches { display: flex; gap: calc(var(--s) * 2px); }
.sw { width: calc(var(--s) * 9px); height: calc(var(--s) * 9px); cursor: pointer; border: calc(var(--s) * 1px) solid #1b1028; padding: 0; }
.sw.on { outline: calc(var(--s) * 1px) solid #ffd23f; outline-offset: 1px; }
