
:root{
  --bg:#000; --bg2:#1c1c1e; --bg3:#2c2c2e; --fill:#3a3a3c; --sep:#38383a;
  --label:#fff; --label2:rgba(235,235,245,.62); --label3:rgba(235,235,245,.32);
  --blue:#0a84ff; --green:#30d158; --orange:#ff9f0a; --red:#ff453a; --purple:#bf5af2; --teal:#64d2ff; --yellow:#ffd60a;
  --r:16px; --z:1;
  --stage:#141210;
}
@media (prefers-color-scheme: light){
  :root:not([data-theme="dark"]){
    --bg:#f2f2f7; --bg2:#fff; --bg3:#e9e9ee; --fill:#d1d1d6; --sep:#e0e0e5;
    --label:#000; --label2:rgba(60,60,67,.62); --label3:rgba(60,60,67,.3);
    --blue:#007aff; --green:#34c759; --orange:#ff9500; --red:#ff3b30; --purple:#af52de; --teal:#32ade6; --yellow:#ffcc00;
    --stage:#2a2520;
  }
}
*{box-sizing:border-box}
html{background:var(--bg)}
body{margin:0;background:var(--bg);color:var(--label);font:15px/1.45 "IBM Plex Sans Thai",-apple-system,BlinkMacSystemFont,system-ui,sans-serif;-webkit-font-smoothing:antialiased}
button,input{font:inherit;color:inherit}
.app{display:grid;grid-template-columns:300px 1fr;min-height:100vh}

/* sidebar */
.side{position:sticky;top:0;height:100vh;overflow:auto;padding:22px 14px 30px;border-right:1px solid var(--sep);background:var(--bg)}
.side h1{font-size:30px;font-weight:700;letter-spacing:-.02em;margin:0 6px 2px}
.side .src{color:var(--label2);font-size:12.5px;margin:0 6px 12px}
.field{display:flex;align-items:center;gap:6px;background:var(--bg3);border-radius:11px;padding:7px 10px}
.field svg{flex:none;opacity:.55}
.field input{border:0;outline:0;background:transparent;width:100%;font-size:15px}
.field input::placeholder{color:var(--label2)}
.group{margin-top:14px;background:var(--bg2);border-radius:var(--r);overflow:hidden}
.row{display:flex;align-items:center;gap:12px;width:100%;padding:10px 12px;background:transparent;border:0;text-align:left;cursor:pointer;position:relative}
.row + .row::before{content:"";position:absolute;left:62px;right:0;top:0;height:1px;background:var(--sep)}
.row:hover{background:var(--bg3)}
.row.on{background:color-mix(in srgb,var(--blue) 18%,transparent)}
.av{flex:none;width:38px;height:38px;border-radius:50%;display:grid;place-items:center;font-weight:700;font-size:15px;color:#fff}
.row .t{flex:1;min-width:0}
.row .n{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.row .d{color:var(--label2);font-size:12.5px}
.pill{flex:none;font-size:12px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--bg3);color:var(--label2)}
.row.on .pill{background:var(--blue);color:#fff}

/* main */
main{padding:22px 26px 60px;min-width:0;max-width:1500px}
.hero{background:var(--bg2);border-radius:22px;padding:20px 22px;display:grid;grid-template-columns:auto 1fr;gap:6px 18px;align-items:center}
.hero .av{width:64px;height:64px;font-size:26px;grid-row:span 2}
.hero h2{margin:0;font-size:28px;font-weight:700;letter-spacing:-.02em;line-height:1.15}
.hero .sub{color:var(--label2)}
.chips{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:13px;padding:4px 10px;border-radius:999px;background:var(--bg3);color:var(--label2)}
.chip b{color:var(--label);font-weight:600}
.dot{width:8px;height:8px;border-radius:50%;background:var(--label3)}
.dot.on{background:var(--green)}
.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:12px}
.tile{background:var(--bg2);border-radius:var(--r);padding:12px 14px}
.tile .k{font-size:12.5px;color:var(--label2)}
.tile .v{font-size:19px;font-weight:600;font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.tile .v small{font-size:13px;color:var(--label2);font-weight:500}
.bar{height:4px;border-radius:2px;background:var(--bg3);margin-top:8px;overflow:hidden}
.bar i{display:block;height:100%;border-radius:2px}

.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:22px 0 14px;position:sticky;top:0;z-index:5;padding:8px 0;background:color-mix(in srgb,var(--bg) 85%,transparent);backdrop-filter:blur(14px)}
.seg{display:inline-flex;background:var(--bg3);border-radius:10px;padding:2px;gap:2px}
.seg button{border:0;background:transparent;padding:5px 14px;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;color:var(--label)}
.seg button.on{background:var(--fill);box-shadow:0 1px 3px #0004}
.seg.sm button{padding:3px 9px;font-size:12.5px}
.toolbar .field{flex:1;min-width:200px;max-width:340px}
.spacer{flex:1}

/* stage with game windows */
.stage{background:radial-gradient(ellipse at top,#2b241b,var(--stage) 75%);border-radius:22px;padding:18px;display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start}
.toggles{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.tog{display:inline-flex;align-items:center;gap:8px;background:var(--bg2);border-radius:999px;padding:5px 12px 5px 6px;font-size:13.5px;cursor:pointer;border:0}
.tog img{width:24px;height:24px;border-radius:6px}
.sw{width:34px;height:20px;border-radius:10px;background:var(--fill);position:relative;transition:.2s}
.sw::after{content:"";position:absolute;left:2px;top:2px;width:16px;height:16px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 2px #0005}
.tog.on .sw{background:var(--green)}
.tog.on .sw::after{left:16px}

.win{position:relative;zoom:var(--z);flex:none;background-repeat:no-repeat;background-size:100% 100%;filter:drop-shadow(0 6px 12px #0009)}
.win .hit{position:absolute;cursor:pointer;border-radius:3px}
.win .hit:hover{background:#ffffff1c}
.win .txt{position:absolute;font:600 9px/1 "IBM Plex Sans Thai",sans-serif;color:#f3e6c4;text-shadow:0 0 2px #000,0 0 2px #000;white-space:nowrap;overflow:hidden}
.s{position:absolute}
.s.it{cursor:pointer}
.s.it img{width:100%;height:100%;display:block}
.s.it:hover,.s.it:focus-visible{outline:1px solid #ffd77a;outline-offset:0}
.s .ct{position:absolute;right:1px;bottom:0;font:700 8px/1 "IBM Plex Sans Thai",sans-serif;color:#fff;text-shadow:0 0 2px #000,0 0 2px #000}
.s .nm{position:absolute;inset:1px;font-size:6px;line-height:1.05;overflow:hidden;color:#eee;background:#3a2f22}
.s.hitq{outline:2px solid var(--teal);box-shadow:0 0 8px var(--teal);z-index:2}
.s.dim img{opacity:.2}

/* grouped lists */
.cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:18px;align-items:start}
.gl h3{font-size:13px;font-weight:500;color:var(--label2);text-transform:none;margin:0 16px 6px}
.gl .box{background:var(--bg2);border-radius:var(--r);overflow:hidden}
.gl .li{display:flex;justify-content:space-between;gap:14px;padding:11px 16px;position:relative;font-size:14.5px}
.gl .li + .li::before{content:"";position:absolute;left:16px;right:0;top:0;height:1px;background:var(--sep)}
.gl .li span:last-child{color:var(--label2);text-align:right;word-break:break-word;min-width:0}
.gl .li.mono span:last-child{font-family:ui-monospace,Menlo,monospace;font-size:12.5px}
.pets{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.pet{background:var(--bg2);border-radius:var(--r);padding:14px 16px}
.pet .top{display:flex;align-items:center;gap:12px}
.pet .n{font-weight:600}
.pet .d{color:var(--label2);font-size:13px}
.pet .gear{display:flex;gap:6px;margin-top:12px}
.pet .cell{position:relative;width:36px;height:36px;border-radius:8px;background:var(--bg3);overflow:hidden}
.pet .cell .s{left:2px!important;top:2px!important}
.empty{color:var(--label2);padding:30px;text-align:center;background:var(--bg2);border-radius:var(--r)}

#tip{position:fixed;z-index:50;pointer-events:none;max-width:320px;background:#000000d0;border:1px solid #7a6a4a;padding:8px 14px;font-size:12.5px;line-height:1.45;text-align:center;color:#fff;display:none}
#tip .t{font-weight:600;font-size:13px;margin-bottom:3px}
#tip .ln{margin:1px 0}
#tip .element{color:#ff8a5c} #tip .req{color:#cfc3a6} #tip .stat{color:#fff} #tip .opt{color:#7cc2ff}
#tip .soul{color:#c99cff} #tip .dur{color:#8fe08f} #tip .time{color:#ff9fcf} #tip .bind{color:#ff6b5e}
#tip .raw{color:#9a8d76;font-size:12px}
#tip .meta{margin-top:6px;padding-top:6px;border-top:1px solid #4a3c2a;color:#8a7d66;font-size:11px}
#tip .ds{color:#c9bc9f;font-size:12px;margin-top:4px}

@media (max-width:900px){
  .app{grid-template-columns:1fr}
  .side{position:static;height:auto;border-right:0;padding:16px 16px 4px}
  .side .group{display:flex;overflow-x:auto;background:transparent;gap:8px;border-radius:0}
  .side .row{flex:none;width:auto;background:var(--bg2);border-radius:14px;padding:8px 12px}
  .side .row::before{display:none}
  .side .row .av{width:30px;height:30px;font-size:13px}
  main{padding:12px 16px 50px}
  .hero{padding:16px}
  .hero h2{font-size:23px}
  .hero .av{width:52px;height:52px;font-size:21px}
  .stage{padding:12px;gap:12px;border-radius:18px}
  .toolbar .field{max-width:none}
}

/* app additions */
.login{min-height:100vh;display:grid;place-items:center;padding:20px}
.login form{width:100%;max-width:360px;background:var(--bg2);border-radius:22px;padding:28px 24px;display:flex;flex-direction:column;gap:12px}
.login h1{margin:0 0 4px;font-size:26px;font-weight:700}
.login p{margin:0 0 8px;color:var(--label2);font-size:14px}
.login input{border:0;outline:0;background:var(--bg3);border-radius:12px;padding:12px 14px;font-size:16px}
.login button,.btn{border:0;border-radius:12px;padding:12px;font-size:16px;font-weight:600;background:var(--blue);color:#fff;cursor:pointer}
.login .err{color:var(--red);font-size:14px;min-height:20px}
.side .foot{display:flex;justify-content:space-between;align-items:center;margin:14px 6px 0;color:var(--label2);font-size:13px}
.link{background:none;border:0;color:var(--blue);cursor:pointer;padding:0;font-size:13px}
.loading{color:var(--label2);padding:40px;text-align:center}
.src-badge{font-size:12px;padding:3px 9px;border-radius:999px;font-weight:600}
.src-badge.live{background:color-mix(in srgb,var(--green) 22%,transparent);color:var(--green)}
.src-badge.db{background:var(--bg3);color:var(--label2)}
.mini-grid{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.mini-grid .cell{position:relative;width:36px;height:36px;border-radius:8px;background:var(--bg3);overflow:hidden}
.mini-grid .cell .s{left:2px!important;top:2px!important}
.s.it .nm{display:none}
.s.noicon img{display:none}
.s.noicon .nm{display:block}

/* ---- member system ---- */
.nav{margin-top:6px}
.nav .row .ic{flex:none;width:30px;height:30px;border-radius:8px;display:grid;place-items:center;font-size:16px;color:#fff}
.nav .row + .row::before{left:54px}
.side .who{display:flex;align-items:center;gap:10px;min-width:0}
.side .who .n{font-weight:600;color:var(--label);font-size:14px}
.role{display:inline-block;font-size:11.5px;font-weight:600;padding:1px 8px;border-radius:999px}
.role.owner{background:color-mix(in srgb,var(--orange) 22%,transparent);color:var(--orange)}
.role.admin{background:color-mix(in srgb,var(--purple) 22%,transparent);color:var(--purple)}
.role.gm{background:color-mix(in srgb,var(--blue) 22%,transparent);color:var(--blue)}
.page-h{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:4px 0 16px}
.page-h h2{margin:0;font-size:28px;font-weight:700;letter-spacing:-.02em;flex:1}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;border-radius:11px;padding:9px 16px;font-size:15px;font-weight:600;background:var(--blue);color:#fff;cursor:pointer}
.btn.sm{padding:6px 12px;font-size:13.5px;border-radius:9px}
.btn.gray{background:var(--bg3);color:var(--label)}
.btn.red{background:color-mix(in srgb,var(--red) 18%,transparent);color:var(--red)}
.btn.arm{background:var(--red);color:#fff}
.btn:disabled{opacity:.5;cursor:default}
.mrow{display:flex;align-items:center;gap:12px;padding:12px 16px;position:relative;width:100%;background:transparent;border:0;text-align:left;cursor:pointer}
.mrow + .mrow::before{content:"";position:absolute;left:66px;right:0;top:0;height:1px;background:var(--sep)}
.mrow:hover{background:var(--bg3)}
.mrow .t{flex:1;min-width:0}
.mrow .n{font-weight:600}
.mrow .d{color:var(--label2);font-size:13px}
.tag{font-size:11.5px;padding:2px 8px;border-radius:999px;background:var(--bg3);color:var(--label2);white-space:nowrap}
.tag.ok{color:var(--green);background:color-mix(in srgb,var(--green) 16%,transparent)}
.tag.bad{color:var(--red);background:color-mix(in srgb,var(--red) 16%,transparent)}
.chev{color:var(--label3);font-size:18px}
.modal{position:fixed;inset:0;background:#0009;backdrop-filter:blur(6px);display:grid;place-items:center;z-index:40;padding:16px}
.sheet{width:100%;max-width:460px;max-height:90vh;overflow:auto;background:var(--bg2);border-radius:20px;padding:20px 20px 16px;box-shadow:0 20px 60px #000a}
.sheet h3{margin:0 0 4px;font-size:20px}
.sheet .sub{color:var(--label2);font-size:13.5px;margin-bottom:14px}
.form{display:flex;flex-direction:column;gap:10px}
.form label{font-size:13px;color:var(--label2);display:flex;flex-direction:column;gap:5px}
.form input,.form select,.filters input,.filters select{border:0;outline:0;background:var(--bg3);border-radius:11px;padding:10px 12px;font-size:15px;color:var(--label)}
.form .row2{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.form .err{color:var(--red);font-size:13.5px;min-height:18px}
.secret{font-family:ui-monospace,Menlo,monospace;font-size:16px;letter-spacing:.06em;background:var(--bg3);border-radius:11px;padding:12px;text-align:center;user-select:all;word-break:break-all}
.notice{background:color-mix(in srgb,var(--orange) 15%,transparent);color:var(--label);border-radius:12px;padding:10px 12px;font-size:13.5px}
.filters{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}
.filters input{flex:1;min-width:180px}
.arow{display:grid;grid-template-columns:150px 120px 1fr auto;gap:10px;align-items:baseline;padding:10px 16px;position:relative;font-size:14px}
.arow + .arow::before{content:"";position:absolute;left:16px;right:0;top:0;height:1px;background:var(--sep)}
.arow .tm{color:var(--label2);font-size:12.5px;font-variant-numeric:tabular-nums}
.arow .ac b{font-weight:600}
.arow .dt{color:var(--label2);font-size:12.5px;word-break:break-word}
.arow .ip{color:var(--label3);font-size:12px;font-family:ui-monospace,Menlo,monospace}
.arow.fail .ac b{color:var(--red)}
.more{display:flex;justify-content:center;padding:12px}
@media (max-width:700px){ .arow{grid-template-columns:1fr;gap:2px} }
