@import url('https://fonts.googleapis.com/css2?family=Rajdhani:wght@600;700&family=IBM+Plex+Sans:wght@400;500;600;700&family=JetBrains+Mono:wght@500;700&display=swap');

:root{
  --bg:#060b17; --bg2:#0a1222; --panel:#0c1528; --panel2:#101b33; --row:#0d1730; --rowh:#132042;
  --line:#1a2744; --line2:#253558;
  --text:#e6edf7; --muted:#8a9bb8; --dim:#5b6b88;
  --cyan:#22d3ee; --cyan2:#0ea5e9; --gold:#f5b82e; --gold2:#ffd56b; --red:#f2545b; --green:#34d399;
  --cav:#f5b82e; --cavbg:#33270a; --arc:#34d399; --arcbg:#0b3024; --foot:#60a5fa; --footbg:#0e2347; --mix:#c084fc; --mixbg:#2a1550;
  --r:12px;
  --mono:"JetBrains Mono",ui-monospace,Consolas,monospace;
  --disp:"Rajdhani","IBM Plex Sans",system-ui,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 "IBM Plex Sans",system-ui,sans-serif;-webkit-font-smoothing:antialiased}
body{min-height:100vh;background:radial-gradient(900px 420px at 15% -120px,rgba(34,211,238,.08),transparent 70%),radial-gradient(900px 420px at 90% -160px,rgba(245,184,46,.06),transparent 70%),var(--bg)}
button,input,select,textarea{font:inherit;color:inherit}
a{color:var(--cyan)}
.hidden{display:none!important}
.wrap{max-width:1240px;margin:0 auto;padding:0 16px}

/* ---------- header ---------- */
.top{border-bottom:1px solid var(--line);background:linear-gradient(180deg,rgba(10,18,34,.9),rgba(6,11,23,.6));position:sticky;top:0;z-index:20;backdrop-filter:blur(8px)}
.top .bar{display:flex;align-items:center;gap:14px;padding:12px 0 10px;flex-wrap:wrap}
.logo-badge{width:46px;height:46px;border-radius:12px;display:flex;align-items:center;justify-content:center;gap:1px;background:linear-gradient(145deg,#12233f,#0b1426);border:1px solid var(--line2);font-size:16px;flex:none}
.logo-badge.big{width:64px;height:64px;font-size:22px;margin:0 auto 12px}
.brand h1{font:700 26px/1 var(--disp);letter-spacing:.02em;margin:0;text-transform:uppercase;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.brand .tag{font:600 12px/1 "IBM Plex Sans",sans-serif;text-transform:none;letter-spacing:0;color:var(--cyan);border:1px solid rgba(34,211,238,.45);background:rgba(34,211,238,.08);padding:4px 8px;border-radius:999px}
.brand p{margin:4px 0 0;color:var(--muted);font-size:12.5px}
.top .sp{flex:1}
.chips{display:flex;align-items:center;border:1px solid var(--line2);border-radius:10px;background:var(--panel);font-size:12.5px;color:var(--muted)}
.chips span{padding:7px 12px;white-space:nowrap}
.chips span+span{border-left:1px solid var(--line2)}
.chips b{color:var(--text);font-weight:600}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid var(--line2);background:var(--panel2);color:var(--text);padding:8px 13px;border-radius:9px;font-weight:600;cursor:pointer;text-decoration:none;font-size:13px;white-space:nowrap}
.btn:hover{border-color:#36507f;background:#14223f}
.btn.primary{background:linear-gradient(135deg,var(--cyan2),var(--cyan));border-color:transparent;color:#03131c}
.btn.primary:hover{filter:brightness(1.08)}
.btn.gold{background:var(--gold);border-color:var(--gold);color:#241800}
.btn.danger{color:#ffb4b7;border-color:#5a2430;background:#22111a}
.btn.ghost{background:transparent}
.btn.sm{padding:5px 9px;font-size:12px;border-radius:7px}
.btn.wide{width:100%}
.btn:disabled{opacity:.5;cursor:not-allowed}
.tabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:0 0 10px}
.tabs::-webkit-scrollbar{display:none}
.tabs button{display:flex;align-items:center;gap:8px;border:1px solid transparent;background:none;color:var(--muted);padding:9px 14px;border-radius:10px;cursor:pointer;font-weight:600;font-size:14px;white-space:nowrap}
.tabs button:hover{color:var(--text);background:var(--panel)}
.tabs button[aria-selected=true]{background:linear-gradient(135deg,var(--cyan2),var(--cyan));color:#03131c;box-shadow:0 6px 20px rgba(34,211,238,.18)}
.tabs .n{font:600 11px var(--mono);background:#1a2848;color:var(--muted);padding:1px 7px;border-radius:999px}
.tabs button[aria-selected=true] .n{background:rgba(3,19,28,.25);color:#03131c}

main{padding:18px 0 60px}
.card{background:linear-gradient(180deg,var(--panel),var(--bg2));border:1px solid var(--line);border-radius:var(--r)}
.card.pad{padding:16px}
h2{font:700 20px var(--disp);margin:0 0 4px;letter-spacing:.02em}
.muted{color:var(--muted)} .dim{color:var(--dim)}
.small{font-size:12.5px}

/* ---------- filters ---------- */
.filters{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;padding:12px 14px;margin-bottom:14px}
.filters label{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:12.5px;font-weight:500}
select,input:not([type]),input[type=text],input[type=search],input[type=number],input[type=date],input[type=password],textarea{background:#0a1326;border:1px solid var(--line2);border-radius:8px;padding:7px 10px;color:var(--text);font-size:13px;min-width:0}
select:focus,input:focus,textarea:focus{outline:none;border-color:var(--cyan);box-shadow:0 0 0 3px rgba(34,211,238,.15)}
select.gold{color:var(--gold);border-color:#5b4a1b}
.filters .sp{flex:1}
.seg{display:inline-flex;border:1px solid var(--line2);border-radius:9px;overflow:hidden;background:#0a1326;flex-wrap:wrap}
.seg button{border:0;background:none;color:var(--muted);padding:7px 12px;cursor:pointer;font-size:12.5px;font-weight:600}
.seg button+button{border-left:1px solid var(--line2)}
.seg button[aria-pressed=true]{background:#14284a;color:var(--cyan)}
.toggle{display:inline-flex;align-items:center;gap:7px;cursor:pointer;color:var(--muted);font-size:12.5px}
.toggle input{accent-color:var(--cyan)}

/* ---------- leaderboard ---------- */
.tablewrap{overflow-x:auto}
table.lb{width:100%;border-collapse:collapse;min-width:980px}
table.lb th{font:600 11px "IBM Plex Sans",sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);text-align:left;padding:14px 10px;border-bottom:1px solid var(--line);white-space:nowrap;cursor:pointer;user-select:none}
table.lb th.num,table.lb td.num{text-align:right}
table.lb th.sorted{color:var(--gold)}
table.lb th .ic{margin-right:4px}
table.lb td{padding:12px 10px;border-bottom:1px solid var(--line);vertical-align:middle}
table.lb tbody tr.row{cursor:pointer;transition:background .12s}
table.lb tbody tr.row:hover{background:var(--rowh)}
table.lb tbody tr.row.open{background:var(--rowh)}
.rank{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font:700 13px var(--mono);color:var(--dim)}
.rank.r1{background:rgba(245,184,46,.15);border:1.5px solid var(--gold);color:var(--gold)}
.rank.r2{background:rgba(180,195,220,.12);border:1.5px solid #a9b6cf;color:#d5deee}
.rank.r3{background:rgba(234,123,52,.13);border:1.5px solid #e2793a;color:#f39a5f}
.who b{font-weight:700;font-size:14.5px}
.atag{font:600 11px var(--mono);color:var(--cyan);border:1px solid rgba(34,211,238,.4);background:rgba(34,211,238,.07);padding:1px 6px;border-radius:5px;margin-left:6px;vertical-align:1px}
.sub{color:var(--muted);font-size:12px;margin-top:3px;display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center}
.sub .dot{color:var(--dim)}
.sub .lg{color:var(--cyan2)}
.mono{font-family:var(--mono)}
.pill{display:inline-block;font-size:12px;font-weight:700;padding:3px 9px;border-radius:5px;border:1px solid}
.pill.cavalry{color:var(--cav);background:var(--cavbg);border-color:#6a5216}
.pill.archers{color:var(--arc);background:var(--arcbg);border-color:#1b6248}
.pill.footmen{color:var(--foot);background:var(--footbg);border-color:#24508f}
.pill.mix{color:var(--mix);background:var(--mixbg);border-color:#563092}
.cat{font-size:11px;font-weight:600;color:var(--muted);border:1px solid var(--line2);padding:1px 7px;border-radius:999px}
.stat{min-width:74px}
.stat .v{font:500 13px var(--mono);text-align:right}
.stat .b{height:3px;border-radius:2px;background:#16233f;margin-top:5px;overflow:hidden}
.stat .b i{display:block;height:100%;background:linear-gradient(90deg,#1f6f8b,var(--cyan));border-radius:2px}
.stat.best .v{color:var(--cyan)}
.stat .na{color:var(--dim)}
.score{font:700 15px var(--mono);color:var(--gold);text-align:right;white-space:nowrap}
.chev{color:var(--dim);text-align:center;font-size:18px;width:30px}
tr.detail td{background:#0a1326;padding:0}
.det{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr) minmax(0,.9fr);gap:18px;padding:16px 18px 18px}
.det h4{margin:0 0 8px;font:600 11px "IBM Plex Sans",sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.heroes{display:flex;gap:10px;flex-wrap:wrap}
.hero{display:flex;flex-direction:column;align-items:center;width:74px;text-align:center;font-size:11.5px;gap:4px}
.av{width:52px;height:52px;border-radius:10px;border:1px solid var(--line2);background:#13203d center/cover;display:grid;place-items:center;font:700 15px var(--disp);color:var(--muted);overflow:hidden;position:relative}
.av img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}
.av.sm{width:26px;height:26px;border-radius:6px;font-size:10px}
.hero .lv{color:var(--dim);font-size:10.5px}
.avs{display:inline-flex;gap:3px;margin-left:2px}
.kv{display:grid;grid-template-columns:auto 1fr;gap:5px 14px;font-size:13px}
.kv span:nth-child(odd){color:var(--muted)}
.kv span:nth-child(even){font-family:var(--mono);text-align:right}
.thumb{display:block;max-width:100%;max-height:180px;border-radius:8px;border:1px solid var(--line2);cursor:zoom-in}
.empty{padding:50px 20px;text-align:center;color:var(--muted)}
.empty b{display:block;color:var(--text);font-size:16px;margin-bottom:6px}

/* ---------- compare ---------- */
.cmp-pick{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.cmp-pick label{display:flex;align-items:center;gap:7px;border:1px solid var(--line2);border-radius:999px;padding:5px 11px 5px 8px;cursor:pointer;font-size:13px;background:#0a1326}
.cmp-pick label.on{border-color:var(--cyan);background:rgba(34,211,238,.08)}
.cmp-pick input{accent-color:var(--cyan)}
.cmp-pick .s{font:600 11.5px var(--mono);color:var(--gold)}
.cmp-grid{display:grid;gap:12px;margin-top:14px}
.cmp-head{display:grid;gap:12px}
.cmp-card{padding:14px;border:1px solid var(--line);border-radius:10px;background:var(--panel);position:relative}
.cmp-card .sc{font:700 22px var(--mono);color:var(--gold);margin-top:6px}
.cmp-card .sw{position:absolute;top:0;left:0;right:0;height:3px;border-radius:10px 10px 0 0}
.cmp-row{display:grid;grid-template-columns:150px 1fr;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.cmp-row .lbl{color:var(--muted);font-weight:600;font-size:13px}
.cmp-bars{display:grid;gap:5px}
.cmp-bar{display:grid;grid-template-columns:minmax(80px,140px) 1fr 110px;gap:10px;align-items:center;font-size:12.5px}
.cmp-bar .nm{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmp-bar .tr{height:10px;background:#122041;border-radius:5px;overflow:hidden}
.cmp-bar .tr i{display:block;height:100%;border-radius:5px}
.cmp-bar .val{font-family:var(--mono);text-align:right;white-space:nowrap}
.cmp-bar .val small{color:var(--red);margin-left:6px}
.cmp-bar.best .val{color:var(--cyan)}
.cmp-bar.best .val small{color:var(--green)}

/* ---------- groups ---------- */
.groups{display:grid;grid-template-columns:repeat(auto-fill,minmax(270px,1fr));gap:12px}
.group{padding:16px;cursor:pointer;transition:border-color .12s}
.group:hover{border-color:#36507f}
.group h3{margin:0;font:700 20px var(--disp);display:flex;align-items:center;gap:8px}
.group .kv{margin-top:12px}

/* ---------- modal ---------- */
dialog{border:1px solid var(--line2);border-radius:14px;background:var(--panel);color:var(--text);padding:0;max-width:min(980px,calc(100vw - 24px));width:100%;max-height:calc(100vh - 32px)}
dialog::backdrop{background:rgba(2,6,14,.75);backdrop-filter:blur(3px)}
.dlg-h{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);z-index:2}
.dlg-h h3{margin:0;font:700 19px var(--disp);flex:1}
.dlg-b{padding:16px 18px}
.dlg-f{display:flex;gap:8px;justify-content:flex-end;padding:12px 18px;border-top:1px solid var(--line);position:sticky;bottom:0;background:var(--panel);flex-wrap:wrap}
.x{background:none;border:0;color:var(--muted);font-size:22px;cursor:pointer;line-height:1;padding:4px 8px}
img.full{max-width:100%;display:block;margin:0 auto}

/* ---------- forms ---------- */
.form{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px}
.f{display:flex;flex-direction:column;gap:5px}
.f>span{font-size:11.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.f.wide{grid-column:1/-1}
.f input,.f select,.f textarea{width:100%}
.f.ocr input,.f.ocr select{border-color:#1f6f8b;background:#0a1d2c}
.f .hint{font-size:11.5px;color:var(--dim);text-transform:none;letter-spacing:0;font-weight:400}
fieldset{border:1px solid var(--line);border-radius:10px;padding:12px 14px 14px;margin:0 0 14px}
legend{padding:0 6px;color:var(--cyan);font-weight:700;font-size:12px;letter-spacing:.08em;text-transform:uppercase}
.hero-slots{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.hero-slot{display:grid;grid-template-columns:52px 1fr;gap:10px;align-items:start;border:1px solid var(--line);border-radius:10px;padding:10px;background:#0a1326}
.hero-slot .row2{display:grid;grid-template-columns:1fr 1fr;gap:6px;margin-top:6px}
.err{background:rgba(242,84,91,.1);border:1px solid rgba(242,84,91,.4);color:#ffc2c5;border-radius:9px;padding:9px 12px;font-size:13px}
.note{background:rgba(34,211,238,.06);border:1px solid rgba(34,211,238,.3);color:#bdeffa;border-radius:9px;padding:9px 12px;font-size:13px}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:#0f2a1f;border:1px solid #1b6248;color:#b7f5d9;padding:10px 16px;border-radius:10px;z-index:100;font-weight:600;box-shadow:0 10px 30px rgba(0,0,0,.4)}
.toast.bad{background:#2a1117;border-color:#5a2430;color:#ffc2c5}

/* ---------- admin ---------- */
.admin-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:14px}
table.plain{width:100%;border-collapse:collapse}
table.plain th{font:600 11px "IBM Plex Sans",sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);text-align:left;padding:10px;border-bottom:1px solid var(--line);white-space:nowrap}
table.plain td{padding:10px;border-bottom:1px solid var(--line);vertical-align:middle}
table.plain td.act{text-align:right;white-space:nowrap}
.legrow td{background:#0a1326;font-size:13px}
.legrow td:first-child{padding-left:28px}
.drop{border:2px dashed var(--line2);border-radius:12px;padding:26px 16px;text-align:center;color:var(--muted);cursor:pointer;transition:.15s;background:#0a1326}
.drop.over,.drop:hover{border-color:var(--cyan);color:var(--text);background:#0b1b2f}
.drop b{color:var(--text)}
.ocr-layout{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:16px;align-items:start}
.ocr-img{position:sticky;top:130px}
.ocr-img img{width:100%;border-radius:10px;border:1px solid var(--line2)}
.progress{height:6px;background:#122041;border-radius:3px;overflow:hidden;margin-top:8px}
.progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--cyan2),var(--cyan));transition:width .2s}
.sidepick{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0}
.sidepick button{flex:1;min-width:150px;text-align:left;border:1px solid var(--line2);background:#0a1326;border-radius:10px;padding:10px 12px;cursor:pointer;color:var(--text)}
.sidepick button[aria-pressed=true]{border-color:var(--cyan);background:rgba(34,211,238,.08)}
.sidepick small{display:block;color:var(--muted);margin-top:2px}
pre.raw{white-space:pre-wrap;font:12px/1.5 var(--mono);color:var(--muted);background:#070e1d;border:1px solid var(--line);border-radius:8px;padding:10px;max-height:240px;overflow:auto;margin:0}
details summary{cursor:pointer;color:var(--muted);font-size:12.5px;margin:8px 0}
.weights{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:10px}

/* ---------- login ---------- */
.login-body{display:grid;place-items:center;padding:24px 16px}
.login-box{width:100%;max-width:380px;background:linear-gradient(180deg,var(--panel),var(--bg2));border:1px solid var(--line);border-radius:16px;padding:28px 24px;text-align:center}
.login-box h1{font:700 30px var(--disp);text-transform:uppercase;margin:0}
.login-box .sub{justify-content:center;margin:4px 0 18px}
.login-box label{display:block;text-align:left;font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:14px 0 6px}
.login-box input{width:100%;padding:11px 12px;font-size:16px}
.login-box .btn{margin-top:16px;padding:11px}
.login-box .err,.login-box .note{text-align:left;margin:10px 0 0}
.login-box .foot{margin:16px 0 0;font-size:13px}

@media (max-width:900px){
  .det{grid-template-columns:1fr}
  .ocr-layout{grid-template-columns:1fr}
  .ocr-img{position:static}
  .cmp-row{grid-template-columns:1fr}
}
@media (max-width:640px){
  .brand h1{font-size:21px}
  .top .bar{gap:10px}
  .chips{width:100%;justify-content:space-between}
  .chips span{padding:6px 8px;flex:1;text-align:center}
  .top{position:static}
  .filters{padding:12px}
  .filters label{width:100%;justify-content:space-between}
  .filters label select{flex:1;max-width:65%}
  .cmp-bar{grid-template-columns:80px 1fr 90px}
}

input::placeholder,textarea::placeholder{color:var(--dim)}
input[type=file]{color:var(--muted);font-size:13px}
input[type=date]{color-scheme:dark}

/* ---------- in-game stat colours + icons ---------- */
:root{--c-might:#e2774a;--c-resistance:#5b95e8;--c-tmight:#e8574c;--c-tres:#e8574c;--c-hp:#62c450;--c-speed:#5b95e8;--c-damage:#e3a44c}
.sic{width:18px;height:18px;vertical-align:-4px;margin-right:5px;border-radius:50%}
table.lb th .sic{width:18px;height:18px}
.st-might{--sc:var(--c-might)} .st-resistance{--sc:var(--c-resistance)} .st-tmight{--sc:var(--c-tmight)} .st-tres{--sc:var(--c-tres)}
.st-hp{--sc:var(--c-hp)} .st-speed{--sc:var(--c-speed)} .st-damage{--sc:var(--c-damage)}
table.lb th[class*="st-"]{color:var(--sc)}
table.lb th[class*="st-"].sorted{color:var(--sc);text-decoration:underline;text-underline-offset:4px}
.stat[class*="st-"] .v{color:var(--sc)}
.stat[class*="st-"] .b i{background:var(--sc);opacity:.85}
.stat.best .v{font-weight:700}
.kv span[class*="st-"]{color:var(--sc)}
.cmp-row .lbl[class*="st-"]{color:var(--sc)}
.stat{min-width:84px}
table.lb{min-width:1240px}
.whoin{display:flex;align-items:center;gap:10px}
.av.skin{width:40px;height:40px;border-radius:9px;border-color:#3d4d72;flex:none}
.av.skin.lg{width:72px;height:72px;border-radius:12px}
.av.skin.md{width:52px;height:52px}
.skinrow{display:flex;align-items:center;gap:12px}
.dragon{font-size:11px;font-weight:700;color:#ff9b6b;border:1px solid #6b3322;background:#2a130c;padding:1px 7px;border-radius:999px}
.chk{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;color:var(--text);padding:8px 0}
.chk input{accent-color:var(--cyan);width:16px;height:16px}
.skin-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.skin-card{padding:12px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:8px}
.skin-card .av.skin{width:96px;height:96px;border-radius:14px}
.skin-card b{font-size:13px}
.skin-pick{display:flex;gap:12px;align-items:flex-start}
.skin-pick .av.skin, .skin-pick .ph{width:64px;height:64px;border-radius:12px;flex:none}
.ph{border:1px dashed var(--line2);display:grid;place-items:center;color:var(--dim);font-size:11px;text-align:center;background:#0a1326}
.cropwrap{position:relative;display:block;user-select:none;touch-action:none}
.cropwrap.cropping{cursor:crosshair}
.cropbox{position:absolute;border:2px solid var(--cyan);box-shadow:0 0 0 9999px rgba(3,8,18,.55);border-radius:6px;pointer-events:none}
.cropwrap{overflow:hidden;border-radius:10px}
.cropwrap img{display:block;width:100%;border:1px solid var(--line2);border-radius:10px;cursor:zoom-in}
.cropwrap.cropping img{cursor:crosshair}
.av.skinned{border-color:#a9832f;box-shadow:0 0 0 1px rgba(245,184,46,.35)}

.warn{font-size:11px;font-weight:700;color:#ffcf6b;border:1px solid #6b5420;background:#2a2109;padding:1px 7px;border-radius:999px;white-space:nowrap}
.warnbox{margin:12px 0 0;font-size:12.5px;color:#ffdc8f;background:#2a2109;border:1px solid #6b5420;border-radius:8px;padding:8px 10px}
