*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{
  --bg:#0f0f15;--surface:#18181f;--surface2:#20202a;--surface3:#282834;
  --border:#32324a;--border-light:#44446a;
  --text:#f0f0f8;--muted:#8888a8;--dim:#55556a;
  --gold:#e86c1e;--gold2:#ff8033;--gold-dim:rgba(232,108,30,.15);
  --red:#cc3333;--red-dim:rgba(204,51,51,.15);
  --r:8px;
}
body{background:var(--bg);color:var(--text);font-family:'Outfit',sans-serif;min-height:100vh;line-height:1.6}
body::before{content:'';position:fixed;inset:0;pointer-events:none;z-index:0;
  background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.025'/%3E%3C/svg%3E");}
#app{position:relative;z-index:1}
header{border-bottom:1px solid var(--border);background:linear-gradient(180deg,#14141c,var(--bg));padding:0 2rem;position:sticky;top:0;z-index:100;backdrop-filter:blur(8px)}
.hdr{max-width:1100px;margin:0 auto;display:flex;align-items:center;gap:2rem;height:64px}
.logo{font-family:'Cinzel',serif;font-weight:900;font-size:1.2rem;color:var(--gold);letter-spacing:.05em;cursor:pointer;white-space:nowrap;user-select:none}
.logo b{color:var(--muted);font-weight:400}
#hdr-row{flex:1;display:none;gap:.5rem;max-width:500px;align-items:center}
#hdr-row.show{display:flex}
main{max-width:1100px;margin:0 auto;padding:2rem}
input[type=text],select{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r);color:var(--text);font-family:'Outfit',sans-serif;font-size:.9rem;padding:.5rem .9rem;outline:none;transition:border-color .2s}
input[type=text]:focus{border-color:var(--gold)}
input[type=text]::placeholder{color:var(--dim)}
.btn{background:var(--gold);color:#111;border:none;border-radius:var(--r);font-family:'Outfit',sans-serif;font-weight:700;font-size:.9rem;padding:.5rem 1.2rem;cursor:pointer;transition:background .2s,transform .1s;white-space:nowrap}
.btn:hover{background:var(--gold2)}
.btn:active{transform:scale(.97)}

/* MODE TOGGLE */
.mode-toggle{display:flex;gap:.25rem;flex-shrink:0}
.mode-btn{background:var(--surface2);border:1px solid var(--border);border-radius:var(--r);color:var(--muted);font-family:'Outfit',sans-serif;font-size:.82rem;padding:.35rem .8rem;cursor:pointer;transition:all .2s;white-space:nowrap}
.mode-btn.active{background:var(--gold-dim);border-color:var(--gold);color:var(--gold)}

/* HOME */
#v-home{text-align:center;padding:5rem 1rem}
.hero-h{font-family:'Cinzel',serif;font-weight:900;font-size:clamp(2.2rem,5vw,3.8rem);line-height:1.1;margin-bottom:.8rem}
.hero-h em{color:var(--gold);font-style:normal}
.hero-p{color:var(--muted);font-size:1rem;max-width:440px;margin:0 auto 2rem;font-weight:300}
.hero-row{display:flex;gap:.6rem;max-width:520px;margin:0 auto}
.hero-row input{flex:1;font-size:1rem;padding:.7rem 1.1rem}
.hero-row .btn{padding:.7rem 1.5rem}

/* SEARCH */
#v-search{display:none}
.res-hdr{display:flex;align-items:baseline;gap:1rem;margin-bottom:1.25rem;flex-wrap:wrap}
.res-title{font-family:'Cinzel',serif;font-size:1rem;color:var(--muted)}
.res-n{font-size:.8rem;color:var(--dim)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:1rem}
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;cursor:pointer;transition:border-color .2s,transform .15s,box-shadow .2s}
.card:hover{border-color:var(--gold);transform:translateY(-2px);box-shadow:0 8px 28px rgba(232,108,30,.13)}
.card-img{width:100%;aspect-ratio:1;object-fit:cover;background:var(--surface2);display:block}
.card-ph{width:100%;aspect-ratio:1;background:var(--surface2);display:flex;align-items:center;justify-content:center;font-size:2.5rem;color:var(--dim)}
.card-body{padding:.7rem}
.card-name{font-weight:600;font-size:.85rem;line-height:1.3;margin-bottom:.2rem}
.card-yr{font-size:.78rem;color:var(--dim)}

/* GAME */
#v-game{display:none}
.back{display:inline-flex;align-items:center;gap:.4rem;color:var(--muted);font-size:.85rem;cursor:pointer;margin-bottom:1.25rem;background:none;border:none;font-family:'Outfit',sans-serif;padding:0;transition:color .2s}
.back:hover{color:var(--gold)}
.g-hero{display:grid;grid-template-columns:auto 1fr;gap:2rem;margin-bottom:2rem;align-items:start}
@media(max-width:600px){.g-hero{grid-template-columns:1fr}}
.g-cover{width:190px;border-radius:var(--r);border:1px solid var(--border);object-fit:cover;box-shadow:0 4px 20px rgba(0,0,0,.5);display:block}
.g-cover-ph{width:190px;height:190px;background:var(--surface2);border-radius:var(--r);display:flex;align-items:center;justify-content:center;font-size:3rem;border:1px solid var(--border)}
.g-title{font-family:'Cinzel',serif;font-size:clamp(1.4rem,3vw,2rem);font-weight:700;line-height:1.2;margin-bottom:.2rem}
.g-yr{color:var(--muted);font-size:.95rem;margin-bottom:.9rem}
.stats{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:1rem}
.stat{background:var(--surface2);border:1px solid var(--border);border-radius:20px;padding:.3rem .85rem;font-size:.78rem;display:flex;align-items:center;gap:.35rem;color:var(--muted)}
.stat b{color:var(--text)}
.stat.gold{border-color:var(--gold-dim);color:var(--gold)}
.stat.gold b{color:var(--gold)}
.cats{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.9rem}
.cat{background:var(--surface3);border:1px solid var(--border);border-radius:4px;padding:.18rem .55rem;font-size:.73rem;color:var(--muted)}
.desc-box{position:relative}
.desc{color:var(--muted);font-size:.88rem;line-height:1.75;max-height:115px;overflow:hidden;white-space:pre-line}
.desc.open{max-height:none}
.desc-fade{position:absolute;bottom:0;left:0;right:0;height:38px;background:linear-gradient(transparent,var(--bg));pointer-events:none}
.readmore{color:var(--gold);font-size:.83rem;cursor:pointer;background:none;border:none;font-family:'Outfit',sans-serif;padding:0;margin-top:.25rem}
.readmore:hover{text-decoration:underline}
hr{border:none;border-top:1px solid var(--border);margin:1.75rem 0}
.sec{font-family:'Cinzel',serif;font-size:1.15rem;font-weight:700;margin-bottom:1.1rem;display:flex;align-items:center;gap:.65rem}
.badge{background:var(--surface2);border:1px solid var(--border);border-radius:20px;padding:.15rem .6rem;font-family:'Outfit',sans-serif;font-size:.78rem;font-weight:500;color:var(--muted)}
.exp-bar{display:flex;flex-wrap:wrap;gap:.65rem;margin-bottom:1rem;align-items:center}
.fg{display:flex;align-items:center;gap:.35rem;flex:1;min-width:150px}
.fl{font-size:.72rem;color:var(--dim);white-space:nowrap;text-transform:uppercase;letter-spacing:.05em}
.fi{flex:1;min-width:0;padding:.42rem .7rem;font-size:.83rem}
.fi.exc{border-color:rgba(200,64,64,.4)}
.fi.exc:focus{border-color:var(--red)}
.pills{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.6rem}
.pill{display:flex;align-items:center;gap:.3rem;border-radius:20px;padding:.18rem .65rem;font-size:.75rem}
.pill.i{background:var(--gold-dim);color:var(--gold);border:1px solid rgba(200,145,42,.3)}
.pill.e{background:var(--red-dim);color:var(--red);border:1px solid rgba(200,64,64,.3)}
.pill button{background:none;border:none;color:inherit;cursor:pointer;opacity:.65;padding:0;font-size:.9rem;line-height:1}
.pill button:hover{opacity:1}
.exp-meta2{font-size:.78rem;color:var(--dim);margin-bottom:.65rem}
.exp-list{display:flex;flex-direction:column;gap:.45rem}
.exp-row{display:flex;align-items:center;gap:.9rem;background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:.65rem .9rem;transition:border-color .2s}
.exp-row:hover{border-color:var(--border-light)}
.exp-th{width:42px;height:42px;border-radius:4px;object-fit:cover;flex-shrink:0;border:1px solid var(--border)}
.exp-ph{width:42px;height:42px;border-radius:4px;background:var(--surface2);display:flex;align-items:center;justify-content:center;font-size:1rem;flex-shrink:0;border:1px solid var(--border)}
.exp-name{font-weight:500;font-size:.88rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.exp-yr{font-size:.76rem;color:var(--dim);margin-top:.08rem}
.exp-rat{font-size:.82rem;color:var(--gold);font-weight:600;white-space:nowrap;flex-shrink:0}
.exp-wt{font-size:.76rem;color:var(--muted);white-space:nowrap;flex-shrink:0}
.exp-own{font-size:.72rem;font-weight:600;padding:.15rem .55rem;border-radius:20px;white-space:nowrap;flex-shrink:0}
.exp-own.owned{background:rgba(34,197,94,.12);color:#4ade80;border:1px solid rgba(34,197,94,.25)}
.exp-own.missing{background:var(--surface2);color:var(--dim);border:1px solid var(--border)}
.spin-wrap{display:flex;flex-direction:column;align-items:center;gap:1rem;padding:3.5rem;color:var(--muted);font-size:.88rem}
.spin{width:30px;height:30px;border:2px solid var(--border);border-top-color:var(--gold);border-radius:50%;animation:spin .65s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.err-box{background:rgba(200,64,64,.1);border:1px solid rgba(200,64,64,.3);border-radius:var(--r);padding:.9rem 1.1rem;color:#e07070;font-size:.88rem;margin-bottom:1rem}
.empty{text-align:center;padding:2.5rem;color:var(--dim);font-size:.88rem}
.tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--border);margin-bottom:1.25rem}
.tab{background:none;border:none;border-bottom:2px solid transparent;color:var(--muted);font-family:'Outfit',sans-serif;font-size:.9rem;padding:.55rem 1rem;cursor:pointer;margin-bottom:-1px;transition:color .2s,border-color .2s}
.tab:hover{color:var(--text)}
.tab.active{color:var(--gold);border-bottom-color:var(--gold)}
.sleeve-form{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:1rem;margin-top:.75rem}
.sleeve-form-row{display:grid;grid-template-columns:70px 1fr 1fr auto;gap:.5rem;align-items:center;margin-bottom:.5rem}
.sleeve-form-row input{padding:.38rem .6rem;font-size:.82rem}
.sleeve-form-row input::placeholder{color:var(--dim)}
.btn-sm{background:var(--surface2);color:var(--muted);border:1px solid var(--border);border-radius:var(--r);font-family:'Outfit',sans-serif;font-size:.78rem;padding:.3rem .7rem;cursor:pointer;white-space:nowrap;transition:all .2s}
.btn-sm:hover{border-color:var(--border-light);color:var(--text)}
.btn-sm.danger:hover{border-color:var(--red);color:var(--red)}
.sleeve-form-actions{display:flex;gap:.5rem;margin-top:.75rem;align-items:center}
.sleeve-save-msg{font-size:.78rem;color:#4ade80;display:none}
.sleeve-add-btn{color:var(--gold);background:none;border:none;font-family:'Outfit',sans-serif;font-size:.82rem;cursor:pointer;padding:0}
.sleeve-add-btn:hover{text-decoration:underline}
.sleeve-table{width:100%;border-collapse:collapse;margin-bottom:.75rem;font-size:.85rem}
.sleeve-table th{text-align:left;color:var(--dim);font-weight:500;font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;padding:.35rem .6rem;border-bottom:1px solid var(--border)}
.sleeve-table td{padding:.45rem .6rem;border-bottom:1px solid var(--border);color:var(--muted)}
.sleeve-table td:first-child{color:var(--text);font-weight:600}
.sleeve-table tr:last-child td{border-bottom:none}
.sleeve-link{display:inline-flex;align-items:center;gap:.35rem;color:var(--gold);font-size:.82rem;text-decoration:none;margin-top:.25rem}
.sleeve-link:hover{text-decoration:underline}
.sleeve-unknown{font-size:.83rem;color:var(--dim);margin-bottom:.75rem}
.bgg-credit{margin-top:2rem;display:flex;justify-content:center}.bgg-credit a{display:flex;flex-direction:column;align-items:center;gap:.6rem;text-decoration:none;opacity:.6;transition:opacity .2s}.bgg-credit a:hover{opacity:1}.bgg-credit img{border-radius:var(--r);border:1px solid var(--border);width:240px;background:#cccccc;padding:4px}.bgg-credit span{font-size:.72rem;color:var(--muted);letter-spacing:.05em;text-transform:uppercase}
.bgg-hdr-credit{display:flex;align-items:center;flex-shrink:0;opacity:.5;transition:opacity .2s}.bgg-hdr-credit:hover{opacity:1}.bgg-hdr-credit img{height:32px;width:auto;border-radius:4px;border:1px solid var(--border);background:#cccccc;padding:2px}
