/* ============ HogwartsRP character roster ============ */
body.page-characters{background-position:center top}
body.page-characters::before{background:linear-gradient(180deg,rgba(7,10,15,.73),rgba(8,11,16,.91) 58%,rgba(7,9,13,.97))}
.character-hero{min-height:465px;padding:128px 1.5rem 4rem;display:grid;place-items:center;text-align:center;position:relative;overflow:hidden}
.character-hero::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 50% 15%,rgba(214,174,66,.2),transparent 38%),linear-gradient(180deg,rgba(4,7,12,.12),rgba(7,10,15,.88)),url('../img/home_bg_fallback.webp') center 32%/cover no-repeat;filter:saturate(.8)}
.character-hero::after{content:'';position:absolute;inset:auto 0 0;height:150px;background:linear-gradient(transparent,#0b0f15)}
.character-hero-inner{position:relative;z-index:2;max-width:900px}
.character-kicker{display:inline-flex;align-items:center;gap:.55rem;padding:.42rem .75rem;border:1px solid rgba(214,174,66,.5);border-radius:999px;background:rgba(11,14,19,.7);color:#e7c96f;font-size:.69rem;font-weight:850;letter-spacing:.19em;text-transform:uppercase}
.character-kicker::before{content:'✦';font-size:.8rem}
.character-hero h1{font-family:"Harry Potter",Georgia,serif;font-size:clamp(3rem,7vw,5.4rem);line-height:1;color:var(--accent-gold);text-shadow:0 0 35px rgba(244,196,48,.34),0 6px 24px rgba(0,0,0,.8);margin:1rem 0 .85rem}
.character-hero p{max-width:760px;margin:0 auto;color:#d2c2a8;font-size:1.05rem;line-height:1.8}
.roster-stats{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr));gap:.75rem;max-width:820px;margin:1.7rem auto 0}
.roster-stat{border:1px solid rgba(214,174,66,.38);background:rgba(13,17,23,.78);backdrop-filter:blur(12px);border-radius:10px;padding:.85rem 1rem;box-shadow:0 12px 35px rgba(0,0,0,.22)}
.roster-stat.process{border-color:rgba(214,174,66,.62);background:linear-gradient(145deg,rgba(70,52,20,.52),rgba(13,17,23,.82))}.roster-stat.process strong{color:#f4d77e}.roster-stat strong{display:block;color:#fff4cd;font-size:1.55rem;line-height:1.1}.roster-stat span{display:block;color:#a99a84;font-size:.69rem;letter-spacing:.11em;text-transform:uppercase;margin-top:.35rem}
.roster-shell{max-width:1240px;margin:-1.5rem auto 5rem;padding:0 1.5rem;position:relative;z-index:3}
.roster-toolbar{position:sticky;top:74px;z-index:30;background:rgba(12,16,22,.94);border:1px solid rgba(214,174,66,.42);box-shadow:0 14px 45px rgba(0,0,0,.38);backdrop-filter:blur(18px);border-radius:14px;padding:1rem;margin-bottom:1rem}
.roster-search-row{display:grid;grid-template-columns:minmax(250px,1fr) auto;gap:1rem;align-items:center}
.character-search{position:relative}.character-search::before{content:'⌕';position:absolute;left:1rem;top:50%;transform:translateY(-54%);color:#d6ae42;font-size:1.4rem;pointer-events:none}
.character-search input{width:100%;border:1px solid #4d4433;background:#0b0f15;color:#fef9f0;border-radius:9px;padding:.86rem 1rem .86rem 2.75rem;font-size:.95rem;outline:none;transition:.22s;user-select:text}
.character-search input:focus{border-color:#d6ae42;box-shadow:0 0 0 3px rgba(214,174,66,.12)}
.open-only{display:flex;align-items:center;gap:.6rem;color:#cbbda6;font-size:.84rem;white-space:nowrap;cursor:pointer}.open-only input{width:18px;height:18px;accent-color:#d6ae42;cursor:pointer}
.roster-filter-row{display:flex;gap:.55rem;overflow-x:auto;padding-top:.85rem;scrollbar-width:none}.roster-filter-row::-webkit-scrollbar{display:none}
.roster-filter{flex:0 0 auto;border:1px solid #49402f;background:#141920;color:#cdbfa9;border-radius:999px;padding:.55rem .85rem;font-size:.73rem;font-weight:750;letter-spacing:.04em;cursor:pointer;transition:.22s}
.roster-filter:hover,.roster-filter.active{border-color:#d6ae42;background:linear-gradient(135deg,#ad7920,#d3a632);color:#0b0e13;box-shadow:0 5px 18px rgba(214,174,66,.2)}
.roster-summary{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin:0 0 1.4rem;padding:.9rem 1rem;border-left:3px solid #d6ae42;background:rgba(18,23,30,.76);color:#bbaa90;font-size:.82rem;border-radius:0 8px 8px 0}
.roster-summary strong{color:#f4d77e}.roster-legend{display:flex;align-items:center;gap:.65rem;flex-wrap:wrap}.roster-legend .status-badge{margin:0}
.roster-group{margin:0 0 2rem;background:rgba(10,14,20,.54);border:1px solid rgba(255,255,255,.08);border-radius:15px;overflow:hidden;box-shadow:0 18px 55px rgba(0,0,0,.26)}
.roster-group-head{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:1rem;padding:1.15rem 1.25rem;border-bottom:1px solid rgba(255,255,255,.08);background:linear-gradient(90deg,rgba(214,174,66,.09),rgba(13,17,23,.92) 45%)}
.roster-emblem{width:52px;height:52px;border-radius:13px;display:grid;place-items:center;font-family:Georgia,serif;font-size:1.35rem;font-weight:800;color:#fff7de;background:#332715;border:1px solid #d6ae42;box-shadow:0 0 25px rgba(214,174,66,.18)}
.roster-heading-copy span{display:block;color:#a3937c;font-size:.65rem;letter-spacing:.17em;text-transform:uppercase;font-weight:800}.roster-heading-copy h2{font-family:Georgia,'Times New Roman',serif;color:#fff7df;font-size:1.45rem;margin:.1rem 0 0}
.roster-group-count{text-align:right}.roster-group-count strong{display:block;color:#edca60;font-size:1.3rem;line-height:1}.roster-group-count span{display:block;color:#8f8576;font-size:.65rem;text-transform:uppercase;letter-spacing:.09em;margin-top:.25rem}
.roster-gryffindor .roster-emblem{background:linear-gradient(145deg,#7f1d2d,#32111a);border-color:#d6ae42}.roster-slytherin .roster-emblem{background:linear-gradient(145deg,#14513e,#0f241d);border-color:#aebcb7}.roster-ravenclaw .roster-emblem{background:linear-gradient(145deg,#1d477e,#101e35);border-color:#b7833d}.roster-hufflepuff .roster-emblem{background:linear-gradient(145deg,#9b7717,#2d250d);border-color:#efd15b}.roster-staff .roster-emblem{background:linear-gradient(145deg,#5f477f,#21182c)}.roster-ministry .roster-emblem{background:linear-gradient(145deg,#216c6f,#10292b)}.roster-allies .roster-emblem{background:linear-gradient(145deg,#3e668c,#162333)}.roster-dark .roster-emblem{background:linear-gradient(145deg,#3a2d49,#15101d);border-color:#a8434d}
.character-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:.8rem;padding:1rem}
.character-card{min-height:122px;display:grid;grid-template-columns:84px minmax(0,1fr) minmax(155px,auto);align-items:center;gap:1rem;padding:.9rem;background:linear-gradient(145deg,rgba(28,33,40,.92),rgba(13,17,23,.96));border:1px solid #343a43;border-radius:11px;position:relative;overflow:hidden;transition:transform .25s ease,border-color .25s ease,box-shadow .25s ease}
.character-card::before{content:'';position:absolute;inset:0 auto 0 0;width:3px;background:#d6ae42;opacity:.35}.character-card.is-taken::before{opacity:1;background:#62b986}.character-card:hover{transform:translateY(-3px);border-color:#8d7438;box-shadow:0 12px 30px rgba(0,0,0,.28)}
.character-portrait{width:78px;height:78px;border-radius:16px;overflow:hidden;border:1px solid rgba(214,174,66,.55);box-shadow:0 8px 20px rgba(0,0,0,.38);background:#0b0f15}.character-portrait img{display:block;width:100%;height:100%;object-fit:cover}
.character-copy{min-width:0}.character-role{display:block;color:#d2ae4a;font-size:.62rem;font-weight:850;letter-spacing:.12em;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.character-copy h3{font-family:Georgia,'Times New Roman',serif;font-size:1.09rem;line-height:1.25;color:#fff8e8;margin:.25rem 0;white-space:normal}.character-faction{display:block;color:#82796d;font-size:.72rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.character-status{display:flex;flex-direction:column;align-items:flex-end;gap:.38rem;text-align:right;min-width:0}.status-badge{display:inline-flex;align-items:center;gap:.35rem;border-radius:999px;padding:.27rem .52rem;font-size:.57rem;font-weight:900;letter-spacing:.13em;border:1px solid}.status-badge.open{color:#e6c65f;border-color:#806c32;background:rgba(128,108,50,.13)}.status-badge.taken{color:#8ed2a8;border-color:#397b53;background:rgba(57,123,83,.14)}
.character-player-list{display:flex;justify-content:flex-end;gap:.35rem;flex-wrap:wrap}.character-player-list span{display:inline-flex;padding:.36rem .55rem;border-radius:7px;background:#13251c;border:1px solid #356c4a;color:#e8fff0;font-size:.76rem;font-weight:750}
.character-apply{display:inline-flex;font-family:inherit;cursor:pointer;align-items:center;justify-content:center;gap:.45rem;max-width:100%;border:1px solid #a97a22;background:linear-gradient(135deg,#9a5b13,#c58b25);color:#fff8e5;text-decoration:none;border-radius:7px;padding:.48rem .65rem;font-size:.72rem;font-weight:850;white-space:nowrap;transition:.2s}.character-apply:hover{transform:translateY(-1px);box-shadow:0 5px 16px rgba(197,139,37,.28);border-color:#e6c45d}.character-apply span{transition:transform .2s}.character-apply:hover span{transform:translateX(3px)}
.character-status small{color:#746d63;font-size:.6rem;letter-spacing:.04em}
.character-no-results{text-align:center;padding:4rem 1rem;border:1px dashed #65542d;border-radius:14px;background:rgba(13,17,23,.8);color:#baa98e}.character-no-results strong{display:block;color:#f1cf69;font-family:Georgia,serif;font-size:1.3rem;margin-bottom:.35rem}
@media(min-width:901px) and (max-width:1350px){.nav-container{max-width:1320px;padding-inline:1.25rem}.nav-links{gap:1.15rem}.nav-links a{font-size:.92rem}}
@media(max-width:1050px){.character-grid{grid-template-columns:1fr}}
@media(max-width:900px){.character-hero{padding-top:105px;min-height:420px}.roster-shell{padding:0 1rem}.roster-toolbar{top:66px}.roster-search-row{grid-template-columns:1fr}.open-only{justify-content:flex-start}.roster-summary{align-items:flex-start;flex-direction:column}.character-grid{padding:.75rem}.character-card{grid-template-columns:70px minmax(0,1fr);min-height:0}.character-portrait{width:66px;height:66px;border-radius:13px}.character-status{grid-column:1/-1;display:grid;grid-template-columns:auto 1fr auto;align-items:center;text-align:left;border-top:1px solid rgba(255,255,255,.07);padding-top:.7rem;width:100%}.character-player-list{justify-content:flex-start}.character-status small{text-align:right}.character-apply{justify-self:start}.roster-group-head{grid-template-columns:auto 1fr}.roster-group-count{grid-column:2;text-align:left;display:flex;gap:.35rem;align-items:baseline}.roster-group-count strong{font-size:1rem}.roster-group-count span{margin:0}}
@media(max-width:560px){.character-hero h1{font-size:2.8rem}.character-hero p{font-size:.91rem}.roster-stats{grid-template-columns:repeat(2,1fr);gap:.45rem}.roster-stat{padding:.7rem .4rem}.roster-stat strong{font-size:1.25rem}.roster-stat span{font-size:.54rem}.roster-toolbar{padding:.75rem}.character-card{gap:.75rem;padding:.75rem}.character-copy h3{font-size:1rem}.character-status{grid-template-columns:auto 1fr}.character-status small{display:none}.roster-group-head{padding:1rem}.roster-emblem{width:46px;height:46px}.roster-heading-copy h2{font-size:1.15rem}}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
@media(max-width:560px){.character-hero-inner{width:100%;min-width:0}.character-hero h1{font-size:clamp(2rem,10vw,2.45rem);letter-spacing:-.02em;overflow-wrap:anywhere}.roster-stats{width:100%;min-width:0}.roster-stat{min-width:0}}

/* Live Discord committee voting */
.character-card.is-voting::before{opacity:1;background:#d6ae42;box-shadow:0 0 18px rgba(214,174,66,.4)}
.character-card.is-review::before{opacity:1;background:#d7a928;box-shadow:0 0 18px rgba(215,169,40,.32)}
.status-badge.voting{color:#f2d574;border-color:#8f7130;background:rgba(143,113,48,.16)}
.status-badge.review{color:#ffe38a;border-color:#96752d;background:rgba(150,117,45,.2)}
.character-live-votes{display:flex;justify-content:flex-end;align-items:center;gap:.36rem;flex-wrap:wrap}
.character-live-votes span{display:inline-flex;align-items:center;gap:.18rem;min-width:2.25rem;justify-content:center;padding:.28rem .42rem;border:1px solid rgba(214,174,66,.25);border-radius:8px;background:rgba(8,12,18,.42);font-size:.68rem;color:#d9d3c7}
.character-live-votes b{color:#f4d77e;font-size:.72rem}
html[data-voting-bot="offline"] .status-badge.voting::after{content:'•';color:#c66;margin-left:.1rem}
@media(max-width:900px){.character-live-votes{justify-content:flex-start}.character-live-votes span{min-width:2.45rem}}
.character-card.is-accepted::before{opacity:1;background:#62b986}

/* Roster live-state fix: dynamically rendered cards stay visible after filters/status refresh. */
.character-card,.character-grid{opacity:1;transform:none}
.status-badge.voting,.status-badge.review{white-space:normal;text-align:center;justify-content:center;line-height:1.25;max-width:190px}
@media(max-width:900px){.status-badge.voting,.status-badge.review{max-width:none}}
