/* Rule Stack: styles for modes, opposite rounds, XP and levels, achievements, skins and challenges.
   Built only from the tokens and mino tiles in style.css (the UI's own file); loaded after it. */

/* ---------- level / XP ---------- */
.level{display:flex;flex-direction:column;gap:8px}
.lvtop{display:flex;align-items:center;gap:12px}
.lvnum{width:40px;height:40px;border-radius:5px;display:grid;place-items:center;font:400 1.15rem/1 var(--display);flex:none}
.lvtop b{display:block;font-weight:700}
.lvtop small{display:block;font-size:.85rem;color:var(--ink-2);font-variant-numeric:tabular-nums}
.xpbar{height:10px;border-radius:3px;background:var(--panel);overflow:hidden;box-shadow:inset 0 0 0 1px var(--line)}
.xpbar i{display:block;height:100%;background:var(--go);box-shadow:inset 0 2px 0 oklch(1 0 0 / .4);transition:width .6s var(--ease)}

/* ---------- modes ---------- */
.modeshead{font-size:1.05rem;margin-top:4px}
.modes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.mode{display:flex;gap:12px;align-items:flex-start;padding:12px;border-radius:10px;border:0;background:var(--panel);text-align:left;cursor:pointer;color:var(--ink);font:500 .95rem var(--body);transition:transform .12s var(--ease),background .12s}
.mode:hover{transform:translateY(-2px);background:color-mix(in oklch,var(--panel) 80%,var(--ink))}
.mode .mino{width:38px;height:38px;border-radius:5px;display:grid;place-items:center;flex:none}
.mode .mino svg{stroke:var(--tile-ink)}
.mode b{display:block;font-weight:700;margin-bottom:2px}
.mode small{display:block;font-size:.82rem;line-height:1.35;color:var(--ink-2)}
.mode small b{display:inline;color:var(--ink)}
.mode .mbest{margin-top:4px;color:var(--ink);font-variant-numeric:tabular-nums}
.modetag{font:500 .72rem var(--body);letter-spacing:.04em;padding:3px 7px;border-radius:4px;background:var(--panel);color:var(--ink)}
.zen{font:400 .85rem/1 var(--display);color:var(--pass);letter-spacing:.04em}
.catpick{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;max-height:50vh;overflow:auto}
.catpick .btn{justify-content:flex-start;white-space:normal;text-align:left;min-height:44px}
.catpick .mino{width:14px;height:14px;border-radius:3px;flex:none}

/* ---------- opposite rounds ---------- */
.oppnote{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;background:color-mix(in oklch,var(--fail) 22%,var(--panel));font-size:.95rem}
.oppnote .mino{width:30px;height:30px;border-radius:4px;display:grid;place-items:center;flex:none}
.oppnote .mino svg{stroke:var(--tile-ink);width:18px;height:18px}

/* ---------- challenge ---------- */
.challenge{display:flex;align-items:center;gap:12px;padding:12px;border-radius:10px;background:color-mix(in oklch,var(--fail) 18%,var(--panel))}
.challenge .mino{width:40px;height:40px;border-radius:5px;display:grid;place-items:center;flex:none}
.challenge .mino svg{stroke:var(--tile-ink)}
.challenge h2{font-size:1.05rem}
.challenge p{font-size:.9rem;color:var(--ink-2)}
.challenge p b{color:var(--ink)}
.challenge .go{margin-left:auto;flex:none}
.chalres{font-weight:500;color:var(--ink-2)} .chalres b{color:var(--ink)}
.chalres.win{color:var(--pass)}
.btnrow.three{grid-template-columns:1.3fr 1fr 1fr}
.btnrow .btn{white-space:normal;text-align:center}

/* ---------- achievements ---------- */
.achs{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.achs li{display:grid;grid-template-columns:36px minmax(0,1fr);gap:12px;align-items:center;padding:10px 12px;border-radius:8px;background:var(--panel);color:var(--ink-2);font-size:.9rem}
.achs li b{display:block;color:var(--ink);font-size:1rem}
.achs li > span:first-child{width:36px;height:36px;border-radius:5px;display:grid;place-items:center}
.achs li .sw{box-shadow:inset 0 0 0 2px var(--line);color:var(--ink-2)}
.achs li .mino svg{stroke:var(--tile-ink)}
.achs li:not(.got){opacity:.75}
.achtoast{position:fixed;left:50%;bottom:max(18px,env(safe-area-inset-bottom));transform:translateX(-50%);z-index:70;pointer-events:none;display:flex;align-items:center;gap:12px;width:min(92vw,420px);padding:12px 14px;border-radius:10px;background:var(--ground);color:var(--ink);font-size:.88rem;
  box-shadow:0 8px 30px oklch(0 0 0 / .35),inset 0 0 0 2px var(--go);animation:achin .35s var(--ease)}
.achtoast.out{animation:achout .3s ease-in forwards}
.achtoast .mino{width:40px;height:40px;border-radius:5px;display:grid;place-items:center;flex:none}
.achtoast .mino svg{stroke:var(--tile-ink)}
.achtoast small{display:block;font:400 .65rem var(--display);letter-spacing:.06em;color:var(--go)}
.achtoast b{display:block;font-size:1rem}
@keyframes achin{from{transform:translate(-50%,30px);opacity:0}}
@keyframes achout{to{transform:translate(-50%,30px);opacity:0}}

/* ---------- skins ---------- */
.skinset{flex-direction:column;align-items:stretch;padding:12px 0}
.skins{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
.skin{display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px 4px;border-radius:8px;border:2px solid transparent;background:var(--panel);cursor:pointer;color:var(--ink);font:500 .78rem var(--body)}
.skin.on{border-color:var(--go)}
.skin:disabled{opacity:.45;cursor:default}
.skin small{font-size:.7rem;color:var(--ink-2)}
.sw7{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;width:100%;max-width:84px}
.sw7 i{height:12px;border-radius:2px}
.seasontag{font:500 .7rem var(--body);color:var(--go);margin-left:6px}

@media (max-width:380px){.modes{grid-template-columns:1fr}.skins{grid-template-columns:repeat(2,minmax(0,1fr))}.btnrow.three{grid-template-columns:1fr}}

/* ---------- powers (Bend aim, kit row, pick rarity) ---------- */
.rules.bending li[data-no][role=button]{cursor:pointer;box-shadow:inset 0 0 0 2px var(--m5)}
.rules.bending li[data-no][role=button]:hover{background:color-mix(in oklch,var(--m5) 22%,var(--panel))}
.rules li.dim{opacity:.45}
.kit{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:.8rem;color:var(--ink-2)}
.kit .meter{display:inline-flex;align-items:center;gap:8px;font-weight:500}
.kit .cells{display:inline-flex;gap:3px}
.kit .cells i{width:12px;height:12px;border-radius:2px;box-shadow:inset 0 0 0 2px var(--line)}
.kit .cells i.on{background:var(--m3);box-shadow:inset 1px 1px 0 rgb(255 255 255/.4),inset -1px -1px 0 rgb(0 0 0/.25)}
.kit .chip{display:inline-flex;align-items:center;gap:6px;padding:3px 8px 3px 3px;border-radius:5px;background:var(--panel);color:var(--ink);font-weight:500}
.kit .chip .mino{width:20px;height:20px;border-radius:3px;display:grid;place-items:center}
.kit .chip .mino svg{width:13px;height:13px;stroke:var(--tile-ink)}
.pick .ptop{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;width:100%}
.pick .rar{font:400 .6rem/1 var(--display);letter-spacing:.06em;padding:4px 6px 3px;border-radius:3px;color:var(--ink-2);box-shadow:inset 0 0 0 1.5px var(--line)}
.pick .rar.uncommon{color:var(--m0);box-shadow:inset 0 0 0 1.5px var(--m0)}
.pick .rar.rare{color:var(--m1);box-shadow:inset 0 0 0 1.5px var(--m1)}
.pick .rar.relic{color:var(--tile-ink);background:var(--boss);box-shadow:none}
.pw.armed[data-p=bend]{background:color-mix(in oklch,var(--m5) 30%,var(--panel));box-shadow:inset 0 0 0 2px var(--m5)}
.pw.armed[data-p=wild]{background:color-mix(in oklch,var(--boss) 30%,var(--panel));box-shadow:inset 0 0 0 2px var(--boss)}

/* ---------- play with a friend, online (versus.js) ---------- */
.btn.duo{min-height:56px;font-size:1.05rem}
.vs,.vsover,.vslobby{display:flex;flex-direction:column;gap:14px}
.vsover,.vslobby{gap:18px}
.vsover h1,.vslobby h1{font-size:clamp(2rem,10vw,3rem)}
.duel{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}
.vsp{display:flex;flex-direction:column;gap:6px;min-width:0;opacity:.6;transition:opacity .2s}
.vsp.active,.vsover .vsp{opacity:1}
.vshead{display:flex;justify-content:space-between;align-items:baseline;gap:8px;min-width:0}
.vsname{display:flex;align-items:center;gap:6px;font-weight:700;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vsname i{width:12px;height:12px;border-radius:3px;flex:none}
.vshead b{font:400 1.4rem/1 var(--display);font-variant-numeric:tabular-nums}
.vsp .well{height:clamp(140px,24vh,260px)}
#popp .well{cursor:default}
#pme.active .well{outline:3px solid var(--c);outline-offset:3px}
.vswait{font-size:.85rem;font-weight:500;color:var(--ink-2)}
.vswait.off{color:var(--fail)}
.vsover .vsp.won .vshead b{color:var(--go)}
.vsover .vsp .well{height:clamp(160px,30vh,320px)}
.vstools{grid-template-columns:1fr 2fr}
.vstools .pw.skip{grid-column:auto}
.vsfield{display:flex;flex-direction:column;gap:4px;font-weight:700;font-size:.9rem}
.vsfield input,.vsjoin input{font:500 1rem var(--body);min-height:48px;padding:8px 12px;border-radius:8px;border:2px solid var(--line);background:var(--panel);color:var(--ink);min-width:0}
.vsor{text-align:center;font-size:.88rem}
.vsjoin{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px}
.vsjoin input{font:400 1.3rem var(--display);letter-spacing:.3em;text-transform:uppercase}
.vserr{color:var(--fail);font-weight:700;font-size:.9rem;min-height:1.2em}
.vscode{display:flex;gap:8px}
.vscode b{width:64px;height:64px;display:grid;place-items:center;border-radius:6px;font:400 2.2rem/1 var(--display)}
.vsplayers{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.vsplayers li{display:flex;align-items:center;gap:10px;min-height:48px;padding:8px 12px;border-radius:8px;background:var(--panel);font-weight:700}
.vsplayers li i{width:16px;height:16px;border-radius:3px;flex:none}
.vsplayers li.empty{color:var(--ink-2);font-weight:500;background:none;box-shadow:inset 0 0 0 2px var(--panel)}
.vsplayers li.empty i{background:none;box-shadow:inset 0 0 0 2px var(--line)}
.vsplayers small{margin-left:auto;color:var(--fail);font-weight:500}
.vslen{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.vslen .btn.on{border-color:var(--go);background:color-mix(in oklch,var(--go) 18%,var(--panel))}
@media (min-width:960px){
  main[data-screen="versus"],main[data-screen="vsover"],main[data-screen="vslobby"]{max-width:880px;width:100%;margin:0 auto}
  main[data-screen="vslobby"]{max-width:560px}
  .vsp .well{height:clamp(200px,30dvh,340px)}
}
