/* IBM Plex Serif Bold + IBM Plex Sans (SIL OFL 1.1, see assets/fonts/OFL.txt). Used for the share cards. */
@font-face{font-family:"IBM Plex Serif";font-style:normal;font-weight:700;font-display:swap;src:url(../assets/fonts/IBMPlexSerif-Bold.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:400;font-display:swap;src:url(../assets/fonts/IBMPlexSans-Regular.woff2) format("woff2")}
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:600;font-display:swap;src:url(../assets/fonts/IBMPlexSans-SemiBold.woff2) format("woff2")}
:root{--bg:#160f26;--panel:#251a3d;--panel2:#30234f;--line:#7a5fa3;--gold:#f0b54a;--gold2:#ffd98a;--txt:#f7ead0;--mut:#b9a7c9;--red:#ff6b6b;--green:#7be08a;--blue:#5aa9ff;--purple:#c07bff;--orange:#ffb347}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;height:100%;background:#0c0816;color:var(--txt);font:14px/1.35 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;overscroll-behavior:none}
button{font:inherit;color:inherit;cursor:pointer}
h1,h2,h3,.serif{font-family:Georgia,"Times New Roman",serif;letter-spacing:.3px}
h2{margin:6px 0 8px;font-size:18px;color:var(--gold2)}h3{margin:10px 0 6px;font-size:15px;color:var(--gold2)}
#app{position:relative;max-width:480px;height:100%;margin:0 auto;display:flex;flex-direction:column;background:var(--bg);overflow:hidden;box-shadow:0 0 40px #000}
#top{background:linear-gradient(#30234f,#251a3d);border-bottom:1px solid var(--line);padding:6px 8px 4px;z-index:5}
.row{display:flex;align-items:center;gap:6px}.sp{flex:1}.wrap{flex-wrap:wrap}
.who{display:flex;align-items:center;gap:6px}.ava{width:34px;height:34px;border-radius:50%;border:2px solid var(--gold);background:url(../assets/icons/icon-192.png) center/cover}
.pw{font-size:12px;color:var(--mut)}.pw b{color:var(--txt)}
.pill{background:#0006;border:1px solid var(--line);border-radius:12px;padding:2px 8px;font-size:12px;white-space:nowrap}
.vip{background:linear-gradient(#f0b54a,#d9902a);color:#2b1d14;font-weight:700;border:0}.vip.off{background:#30234f;color:#b9a7c9}
.ibtn{position:relative;background:#0005;border:1px solid var(--line);border-radius:9px;width:34px;height:32px;font-size:17px;display:grid;place-items:center;padding:0}
.badge{position:absolute;top:-5px;right:-5px;background:var(--red);color:#fff;border-radius:9px;font-size:10px;min-width:16px;height:16px;line-height:16px;padding:0 3px;font-weight:700}
.res{display:grid;grid-template-columns:repeat(5,1fr);gap:4px;margin-top:5px}
.res div{background:#0005;border-radius:8px;padding:2px 4px;font-size:11.5px;text-align:center;white-space:nowrap;overflow:hidden}.res small{display:block;color:var(--mut);font-size:9.5px}
#timers{display:flex;gap:5px;overflow-x:auto;padding:4px 8px;background:#160f26;border-bottom:1px solid #30234f;min-height:8px;scrollbar-width:none}
.tmr{flex:0 0 auto;background:var(--panel);border:1px solid var(--line);border-radius:9px;padding:3px 6px;font-size:11px;display:flex;align-items:center;gap:5px}
.tmr .bar{width:50px}
.bar{height:6px;background:#0008;border-radius:4px;overflow:hidden}.bar i{display:block;height:100%;background:linear-gradient(90deg,var(--gold),var(--gold2))}
#view{flex:1;overflow-y:auto;padding:8px 8px 70px;-webkit-overflow-scrolling:touch}
#tabs{display:grid;grid-template-columns:repeat(8,1fr);background:linear-gradient(#251a3d,#160f26);border-top:1px solid var(--line);z-index:5}
#tabs button{background:none;border:0;padding:6px 0 7px;font-size:10px;color:var(--mut);display:flex;flex-direction:column;align-items:center;gap:1px;position:relative}
#tabs button span{font-size:18px;line-height:1}#tabs button.on{color:var(--gold2)}#tabs button.on::before{content:"";position:absolute;top:0;left:20%;right:20%;height:2px;background:var(--gold)}
.subs{display:flex;gap:4px;overflow-x:auto;margin:-2px 0 8px;scrollbar-width:none}
.subs button{flex:0 0 auto;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:5px 11px;font-size:12.5px;position:relative}.subs button.on{background:var(--gold);color:#2b1d14;border-color:var(--gold);font-weight:700}
.card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:9px;margin-bottom:8px}
.card.hl{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold) inset}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:7px}.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.btn{background:linear-gradient(#ffd98a,#d9902a);color:#2b1d14;border:0;border-radius:9px;padding:7px 12px;font-weight:700;box-shadow:0 2px 0 #a66b33;white-space:nowrap}
.btn:active{transform:translateY(1px);box-shadow:none}.btn.sm{padding:4px 9px;font-size:12px}.btn.alt{background:linear-gradient(#30234f,#251a3d);color:var(--txt);box-shadow:inset 0 0 0 1px #7a5fa3,0 2px 0 #160f26}
.btn.green{background:linear-gradient(#9ce8a7,#7be08a);box-shadow:0 2px 0 #4a8653}.btn.blue{background:linear-gradient(#83beff,#5aa9ff);box-shadow:0 2px 0 #366599}
.btn[disabled]{filter:grayscale(1) brightness(.7);cursor:not-allowed}.btn.full{width:100%}
.mut{color:var(--mut)}.small{font-size:12px}.tiny{font-size:10.5px}.red{color:var(--red)}.green-t{color:var(--green)}.gold{color:var(--gold2)}
.cost span{margin-right:7px;white-space:nowrap}.cost .no{color:var(--red)}
.scene{position:relative;height:150px;border-radius:12px;overflow:hidden;margin-bottom:8px;background:url(../assets/bg/town.jpg) center 35%/cover;border:1px solid var(--line)}
.scene::after{content:"";position:absolute;inset:0;background:linear-gradient(transparent 40%,#160f26ee)}
.scene .cap{position:absolute;left:10px;bottom:8px;z-index:1}.scene .cap h2{margin:0;text-shadow:0 2px 6px #000}
.glow{position:absolute;width:120px;height:120px;left:50%;top:30%;margin-left:-60px;border-radius:50%;background:radial-gradient(#f0b54a88,transparent 70%);animation:flick 3s infinite ease-in-out;pointer-events:none}
@keyframes flick{50%{opacity:.55;transform:scale(1.08)}}
.bld{display:flex;gap:8px;align-items:center;cursor:pointer;padding:7px}
.bld img{width:58px;height:58px;object-fit:contain;background:none;border:0;flex:none}
.bld .nm{font-weight:700}.lv{background:#0007;border-radius:6px;padding:0 5px;font-size:11px;color:var(--gold2);margin-left:4px}
.hero{position:relative;border-radius:11px;overflow:hidden;border:2px solid var(--line);cursor:pointer;background:#1b1640;aspect-ratio:3/4}
.hero img{width:100%;height:100%;object-fit:cover;display:block}.hero.lock img{filter:grayscale(1) brightness(.35)}
.hero .info{position:absolute;left:0;right:0;bottom:0;padding:14px 5px 4px;background:linear-gradient(transparent,#000d);font-size:11px}
.hero .info b{font-size:12.5px;display:block}.hero .team{position:absolute;top:4px;right:4px;background:var(--gold);color:#2b1d14;font-size:10px;font-weight:700;border-radius:6px;padding:1px 5px}
.hero .rar{position:absolute;top:4px;left:4px;font-size:10px;font-weight:700;border-radius:6px;padding:1px 5px;color:#160f26}
.stars{color:var(--gold2);letter-spacing:-1px}
#modal{position:absolute;inset:0;background:#000a;display:none;z-index:20;align-items:flex-end;justify-content:center}
#modal.on{display:flex}
.sheet{background:var(--bg);border:1px solid var(--line);border-bottom:0;border-radius:16px 16px 0 0;width:100%;max-height:88%;overflow-y:auto;padding:12px 12px 18px;animation:up .2s ease-out}
@keyframes up{from{transform:translateY(40px);opacity:.4}}
.sheet .x{float:right;background:#0006;border:1px solid var(--line);border-radius:50%;width:30px;height:30px}
#toasts{position:absolute;top:96px;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:4px;z-index:40;pointer-events:none}
.toast{background:#251a3df0;border:1px solid var(--gold);border-radius:10px;padding:6px 12px;font-size:12.5px;max-width:92%;animation:tin .25s ease-out;box-shadow:0 4px 14px #000a}
@keyframes tin{from{transform:translateY(-10px);opacity:0}}
.qbar{position:absolute;left:8px;right:8px;bottom:62px;z-index:4;background:#251a3df2;border:1px solid var(--gold);border-radius:11px;padding:6px 8px;display:flex;align-items:center;gap:7px;font-size:12.5px;box-shadow:0 4px 12px #000a}
.battle{position:relative;height:200px;border-radius:12px;overflow:hidden;background:url(../assets/bg/battle.jpg) center/cover;border:1px solid var(--line)}
.battle.boss{background-image:url(../assets/bg/boss.jpg)}
.battle .side{position:absolute;bottom:10px;width:44%;padding:6px;background:#000a;border-radius:9px;font-size:12px}.battle .l{left:8px}.battle .r{right:8px}
.hpbar{height:9px;background:#2b1d14;border-radius:5px;overflow:hidden;margin-top:3px}.hpbar i{display:block;height:100%;background:linear-gradient(90deg,#7be08a,#7be08a);transition:width .45s}.r .hpbar i{background:linear-gradient(90deg,#994040,#ff6b6b)}
.float{position:absolute;font-weight:800;color:#fff;text-shadow:0 2px 3px #000;animation:fl 0.9s ease-out forwards;pointer-events:none;font-size:15px}
@keyframes fl{to{transform:translateY(-40px);opacity:0}}
.shake{animation:sh .25s}@keyframes sh{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
.log{font-size:11.5px;color:var(--mut);max-height:110px;overflow-y:auto;background:#0005;border-radius:8px;padding:5px 7px;margin-top:6px}
.mapv{position:relative;height:420px;border-radius:12px;overflow:hidden;background:url(../assets/bg/map.jpg) center/cover;border:1px solid var(--line)}
.mk{position:absolute;transform:translate(-50%,-50%);background:#160f26dd;border:1px solid var(--gold);border-radius:10px;padding:3px 7px;font-size:11px;text-align:center;cursor:pointer;white-space:nowrap;box-shadow:0 2px 8px #000}
.mk b{font-size:17px;display:block;line-height:1.1}
.stage{display:grid;grid-template-columns:repeat(6,1fr);gap:5px}
.stg{aspect-ratio:1;border-radius:9px;background:var(--panel2);border:1px solid var(--line);display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:12px;padding:0}
.stg.done{border-color:var(--gold)}.stg.cur{background:var(--gold);color:#2b1d14;font-weight:700;animation:pulse 1.6s infinite}.stg.lock{opacity:.4}.stg.boss{border-width:2px;border-color:var(--red)}
@keyframes pulse{50%{box-shadow:0 0 0 4px #f0b54a55}}
.tbl{width:100%;border-collapse:collapse;font-size:12.5px}.tbl td,.tbl th{padding:4px 5px;border-bottom:1px solid #30234f;text-align:left}.tbl tr.me{background:#f0b54a22;font-weight:700}.tbl th{color:var(--mut);font-weight:600}
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}.cal div{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:4px 2px;font-size:10px;text-align:center;min-height:52px}
.cal .got{opacity:.45}.cal .now{border-color:var(--gold);box-shadow:0 0 0 1px var(--gold)}.cal .big{border-color:var(--purple)}
.pass{display:grid;grid-template-columns:34px 1fr 1fr;gap:4px;align-items:stretch;font-size:11.5px}
.pass .t{display:grid;place-items:center;background:#0005;border-radius:8px;font-weight:700}.pass .c{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:4px;display:flex;align-items:center;gap:4px;justify-content:space-between}
.pass .c.prem{border-color:var(--orange)}.pass .c.got{opacity:.5}
.chat{height:300px;overflow-y:auto;background:#0005;border-radius:10px;padding:6px;font-size:12.5px}.chat p{margin:3px 0}.chat b{color:var(--gold2)}
input[type=text],input[type=password],select{background:#0006;border:1px solid var(--line);color:var(--txt);border-radius:8px;padding:6px 8px;font:inherit}
input[type=range]{width:100%;accent-color:var(--gold)}
.tag{display:inline-block;font-size:10px;padding:1px 6px;border-radius:6px;background:#0007;border:1px solid var(--line);margin-left:4px}
.tri{display:flex;justify-content:space-around;font-size:12px;text-align:center;background:#0004;border-radius:10px;padding:6px}
#tut{position:absolute;inset:0;z-index:30;pointer-events:none;display:none}#tut.on{display:block}
#tut .dim{position:absolute;inset:0;background:#0004}
#tut .box{position:absolute;left:10px;right:10px;bottom:120px;background:#251a3df8;border:2px solid var(--gold);border-radius:14px;padding:10px 12px;pointer-events:auto;box-shadow:0 8px 24px #000;display:flex;gap:10px;align-items:flex-start}
#tut .box.top{bottom:auto;top:110px}
#tut .box img{width:54px;height:54px;border-radius:50%;border:2px solid var(--gold);object-fit:cover}
.tut-hl{position:relative;z-index:31!important;outline:3px solid var(--gold2)!important;outline-offset:2px;animation:tutp 1.2s infinite!important;border-radius:9px}
@keyframes tutp{50%{outline-color:#fff6}}
.wheel{width:190px;height:190px;margin:6px auto;border-radius:50%;border:5px solid var(--gold);background:conic-gradient(#ffb347 0 3%,#c07bff 3% 15%,#5aa9ff 15% 45%,#7a5fa3 45% 100%);position:relative;transition:transform 1.6s cubic-bezier(.2,.8,.2,1)}
.wheel::after{content:"🏮";position:absolute;inset:0;display:grid;place-items:center;font-size:44px}
.ptr{text-align:center;font-size:22px;margin-bottom:-14px;position:relative;z-index:1}
.loading{position:absolute;inset:0;display:grid;place-items:center;background:var(--bg);z-index:50;font-family:Georgia,serif;color:var(--gold2);font-size:20px}
.notice{font-size:11px;color:var(--mut);background:#0004;border:1px dashed var(--line);border-radius:8px;padding:6px 8px;margin:6px 0}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--red);margin-left:3px;vertical-align:middle}
.subs button .dot{position:absolute;top:2px;right:3px;margin:0}

/* community economy: membership frames and titles */
.fr-bronze{border-color:#a66b33!important}.fr-silver{border-color:#d6d5d5!important}.fr-gold{border-color:#f0b54a!important;box-shadow:0 0 6px #f0b54a66}
.fr-t-bronze{color:#d9902a}.fr-t-silver{color:#d6d5d5}.fr-t-gold{color:#ffd98a}
.ava.fr-bronze,.ava.fr-silver,.ava.fr-gold{border-width:3px}
a{color:var(--gold2)}

/* v3 art */
.bldimg{width:96px;height:96px;object-fit:contain;flex:none}
.tok{display:inline-block;vertical-align:-0.3em;object-fit:contain}
.adico{display:inline-block;vertical-align:middle;object-fit:contain;margin-right:4px}
.spark-card{border-width:2px}
#adMock{position:fixed;inset:0;z-index:999;background:#000d;display:flex;align-items:center;justify-content:center;color:#fff;text-align:center}
.mbadge{display:inline-block;vertical-align:middle;object-fit:contain;margin-right:4px}.tag .mbadge{margin:-6px 3px -6px -2px}
/* ---- World map progression (js/map.js) ---- */
.wm-prog .wm-seg{display:flex;gap:3px;margin:6px 0}.wm-seg i{flex:1;height:7px;border-radius:4px;background:#2a1f40;border:1px solid #3b2e57}
.wm-seg i.dim{background:linear-gradient(90deg,#4b386d,#2a1f40)}.wm-seg i.lit{background:#c98a3c;border-color:#e8b45f}.wm-seg i.cleared{background:#ffd98a;border-color:#ffe9b8;box-shadow:0 0 6px #ffc46e88}
.wm-strip{cursor:pointer;margin:6px 0}
.wmap-host{min-height:200px}
.wm-hint{margin:-2px 2px 5px;line-height:1.3}
.wmap{position:relative;height:clamp(320px,calc(100vh - 440px),600px);border-radius:12px;overflow:hidden;border:1px solid var(--line);background:#0e0a1a;touch-action:none;user-select:none;-webkit-user-select:none;cursor:grab}
.wmap.drag{cursor:grabbing}.wmap.drag .wm{pointer-events:none}
.wm-world{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}.wm-world.anim{transition:transform .35s ease}
.wm-bg{position:absolute;inset:0;filter:brightness(1.7) saturate(1.05);pointer-events:none}
.wm-svg,.wm-fog,.wm-layer{position:absolute;left:0;top:0;width:720px;height:1280px;pointer-events:none}
.wm-layer>*{pointer-events:auto}
.wm-svg polyline{fill:none;stroke-linecap:round;stroke-linejoin:round}
.tr-dim{stroke:#c9b48a55;stroke-width:5;stroke-dasharray:2 14}.tr-glow{stroke:#ffc46e40;stroke-width:16}.tr-lit{stroke:#ffd98a;stroke-width:5;stroke-dasharray:14 9}
.wall{fill:none;stroke-width:9}.wall.wood{stroke:#7a5530;stroke-dasharray:6 4}.wall.stone{stroke:#8d8579;stroke-dasharray:22 5}.wall.gold{stroke:#d9b26a}
.wm{position:absolute;z-index:1200;transform:translate(-50%,-100%);cursor:pointer;text-align:center;line-height:1}
.wm img{display:block;margin:0 auto;pointer-events:none;-webkit-user-drag:none}
.wm .wl{display:inline-block;margin-top:-6px;padding:4px 9px;border-radius:9px;background:#160f26e6;border:1px solid var(--gold);color:#f3e6c8;font-size:19px;white-space:nowrap}
.wm .wl.sm{font-size:16px;padding:2px 7px;border-color:#e8b45f99}.wm .wl.rg{font-family:var(--serif,serif);border-color:#9a7bd0}
.wm-camp img{width:96px;height:96px}.wm-camp.far{opacity:.8}.wm-camp.next{z-index:2050}.wm-camp.next img{filter:drop-shadow(0 0 10px #9a7bd0)}
.wm-camp.next .wl{border-color:#ff8f6b;animation:wmpulse 1.6s ease-in-out infinite}.wm-camp.scouted img{filter:drop-shadow(0 0 10px #9a7bd0) brightness(.75)}
.wm-beacon img{width:70px;height:70px;filter:drop-shadow(0 0 8px #ffc46e)}
.wm-shrine img{width:124px;height:124px}.wm-shrine.won img{filter:drop-shadow(0 0 14px #ffc46e)}.wm-shrine.won .wl{border-color:var(--gold)}
.wm.fog1{filter:brightness(.7) saturate(.7)}.wm.fog2{filter:brightness(.45) saturate(.4);opacity:.85}
.wm-bld{transform:translate(-50%,-78%)}.wm-bld img{width:100%;height:100%;object-fit:contain}.wm-bld.keep img{filter:drop-shadow(0 0 16px #ffc46eaa)}
.wm-town{transform:translate(-50%,0);z-index:2000}
/* real alliance crest marker (v1.7.0): 24 px on screen at any zoom, on a 2 px night ring, under camps (1200) and beacons */
.wm-ally{transform:translate(-50%,-50%) scale(var(--ik,1));transform-origin:50% 50%;z-index:1150;display:flex;flex-direction:column;align-items:center;gap:1px}
.wm-ally .ally-mk{display:block;width:28px;height:28px;padding:2px;box-sizing:border-box;border-radius:50%;background:#160f26;box-shadow:0 1px 3px #0009}
.wm-ally .ally-mk .crest{display:block}
.wm-ally .ally-tag{margin-top:0;font-size:10px;padding:1px 4px;border-radius:5px;letter-spacing:.5px;font-weight:700}
.wm-stage{transform:translate(-50%,-50%);z-index:2100}.wm-stage span{display:inline-block;padding:6px 11px;border-radius:12px;background:#2a1a0ee8;border:2px solid #ffd98a;color:#ffe9b8;font-size:20px;font-weight:700;box-shadow:0 0 14px #ffc46e88}.wm-stage.boss span{border-color:#ff6b6b}
.wm-chip{transform:translate(-50%,-50%);padding:6px 10px;border-radius:10px;background:#160f26e0;border:1px solid var(--gold);color:#f3e6c8;font-size:17px;white-space:nowrap}
.wm-ctl{position:absolute;right:8px;top:8px;display:flex;flex-direction:column;gap:6px;z-index:5}
.wm-ctl button{width:36px;height:36px;border-radius:10px;border:1px solid var(--line);background:#160f26dd;color:#f3e6c8;font-size:18px}
@keyframes wmpulse{50%{box-shadow:0 0 12px #ff8f6b}}

/* ===== Desktop / laptop (wide screens only; phones and portrait tablets never match) =====
   Portrait game scaled evenly to the window height by js/main.js (body zoom = innerHeight/860, min 1) and centred.
   Side space: town art, cover-scaled, blurred ~6px and darkened ~45% toward #160f26. Never stretched sideways. */
#fsBtn{display:none}
@media (min-width:768px) and (min-aspect-ratio:4/5){
  html{background:#160f26}
  html::before{content:"";position:fixed;inset:-24px;background:url(../assets/bg/town.jpg) center/cover no-repeat;filter:blur(6px);z-index:-2}
  html::after{content:"";position:fixed;inset:0;background:#160f26;opacity:.45;z-index:-1}
  body.desk{background:transparent}
  body.desk #app{width:480px;max-width:480px;box-shadow:0 0 0 1px #7a5fa355,0 0 48px #000c}
  body.desk #modal,body.desk #toasts,body.desk #tut{left:50%;right:auto;width:480px;margin-left:-240px}
  body.desk .wmap{height:clamp(320px,calc(var(--vh,1vh)*100 - 440px),600px)}
  body.desk #fsBtn{display:flex;align-items:center;justify-content:center;position:fixed;top:10px;right:12px;z-index:60;width:40px;height:40px;border-radius:10px;
    background:linear-gradient(#30234f,#251a3d);border:1px solid #7a5fa3;color:#ffd98a;font-size:20px;line-height:1;box-shadow:0 2px 10px #000a}
  body.desk #fsBtn:hover{border-color:#f0b54a}body.desk #fsBtn.on{color:#f0b54a;border-color:#f0b54a}
}
/* ---- sharing & invites (js/viral.js) ---- */
.scene-act{position:absolute;right:8px;top:8px;z-index:1;display:flex;gap:6px}
.share-prev{background:#0006;border:1px solid var(--line);border-radius:12px;padding:6px;min-height:180px;display:flex;align-items:center;justify-content:center}
.share-prev img{max-width:100%;max-height:52vh;border-radius:8px;display:block;margin:auto;box-shadow:0 4px 18px #0009}
.share-prev.sm img{max-height:36vh}
.linkbox{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;background:#0007;border:1px solid var(--line);border-radius:8px;padding:8px;word-break:break-all;user-select:all;-webkit-user-select:all;color:var(--gold2);margin-top:4px}
.inv-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:2px}
.inv-stats div{background:var(--panel2);border:1px solid var(--line);border-radius:10px;text-align:center;padding:8px 4px}
.inv-stats b{display:block;font-size:22px;color:var(--gold2);font-family:Georgia,serif}.inv-stats span{font-size:11px;color:var(--mut)}
.tag.kindred{border-color:var(--gold);color:var(--gold2);background:#30234fcc}
.tag.founder{border-color:#e8b85c;color:#ffe2a0;background:#3a2a1acc;white-space:nowrap}.tag.founder .fd-badge{vertical-align:-3px}
.card.founders{border-color:#e8b85c;background:linear-gradient(160deg,#2c1f47,#3a2a1a);min-width:0}
.founders .fd-head{gap:10px;align-items:center;flex-wrap:nowrap}.founders .fd-title{min-width:0}.founders .fd-title b{font-size:17px;color:var(--gold2)}
.founders .fd-left{margin-top:8px;font-size:15px}.founders .fd-left b{font-size:20px;color:var(--gold2);font-family:Georgia,serif}
.founders .fd-bar{height:8px;border-radius:6px;background:#00000055;border:1px solid var(--line);overflow:hidden;margin-top:6px}.founders .fd-bar i{display:block;height:100%;background:linear-gradient(90deg,#f2a93b,#ffe2a0)}
.founders .fd-steps{margin-top:8px;display:grid;gap:6px}.founders .fd-step{display:flex;gap:8px;align-items:flex-start;font-size:13px;color:var(--mut)}.founders .fd-step.ok{color:var(--txt)}
.founders .fd-dot{flex:0 0 18px;height:18px;border-radius:50%;border:1.5px solid var(--line);display:flex;align-items:center;justify-content:center;font-size:12px}.founders .fd-step.ok .fd-dot{background:#8fbf6a;border-color:#8fbf6a;color:#14210d}
.founders .fd-mine{margin-top:8px;font-size:14px;overflow-wrap:anywhere}
.tag.lightbringer{border-color:var(--gold2);color:var(--txt);background:linear-gradient(90deg,#30234f,#4a3270)}
.ava.fr-lightbringer{border-width:3px;border-color:var(--gold)!important;box-shadow:0 0 0 2px var(--line),0 0 10px #f0b54a88}
.wm-share{margin-left:6px}

.codebox{display:flex;gap:6px;margin-top:8px}.codebox input{flex:1;min-width:0;text-transform:uppercase;letter-spacing:2px;font-family:ui-monospace,Menlo,Consolas,monospace}

/* Sponsor placements (js/sponsor.js): always labelled, never blocking */
.sp-tag{display:inline-block;font-size:10px;font-weight:600;letter-spacing:.02em;padding:1px 6px;border-radius:6px;background:#f3e6c4;color:#3a2a12;border:1px solid #c9a55a;margin-left:4px;vertical-align:middle;text-transform:none}
.sp-tag.sm{font-size:9px;padding:0 5px}
.sp-banner{position:relative;border-radius:10px;overflow:hidden;border:1px solid var(--sp-accent,var(--line));margin:6px 0;cursor:pointer;background:#0004;container-type:inline-size}
.sp-banner img{display:block;width:100%;height:auto}
/* the tag must sit inside the art's clear top-right corner (spec: 200x40 of 960 wide = 20.8cqw x 4.17cqw) */
.sp-banner>.sp-tag{position:absolute;margin:0;line-height:1;white-space:nowrap;top:2px;right:2px;font-size:9px;padding:1px 5px;top:.4cqw;right:.5cqw;font-size:min(11px,2.5cqw);padding:.3cqw 1.2cqw;border-radius:1cqw}
.sp-visit{display:inline-flex;flex-direction:column;align-items:center;gap:2px}.sp-linknote{font-size:10px;line-height:1.2;white-space:nowrap}
.sp-line{font-size:11px;padding:4px 8px;color:var(--mut,#cbb)}
.sp-cos{position:absolute;bottom:8px;width:72px;height:72px;cursor:pointer;z-index:2}
.sp-cos img{width:100%;height:100%;object-fit:contain;filter:drop-shadow(0 2px 4px #0008)}
.sp-cos .sp-tag{position:absolute;left:50%;bottom:-6px;transform:translateX(-50%);margin:0;white-space:nowrap}
.sp-skin{left:8px}.sp-deco{right:8px}
.sp-region{position:absolute;left:0;width:720px;pointer-events:none}
.sp-region img{width:100%;height:100%;display:block;opacity:.35;mix-blend-mode:screen}
.sp-rtag{position:absolute;left:50%;transform:translateX(-50%);top:10px;white-space:nowrap;pointer-events:auto;font-size:11px;padding:2px 8px;border-radius:8px;background:#f3e6c4;color:#3a2a12;border:1px solid #c9a55a;cursor:pointer}
/* ---- v1.6.0: Lantern Guide, Juice, Rekindle, Festival ---- */
.gbtn{position:relative;flex:none;width:34px;height:34px;border-radius:50%;border:1px solid var(--gold);background:#2a1d44;color:var(--txt);font-size:18px;line-height:1;padding:0;cursor:pointer}
.gbtn i{position:absolute;top:-4px;right:-4px;min-width:16px;height:16px;padding:0 3px;border-radius:8px;background:var(--red);color:#fff;font:600 10px/16px system-ui,sans-serif;font-style:normal}
.gbtn.hot{animation:gpulse 2.4s ease-in-out infinite}
@keyframes gpulse{0%,100%{box-shadow:0 0 0 0 #ffc35a00}50%{box-shadow:0 0 0 5px #ffc35a44}}
.gitem .gi{width:24px;text-align:center;font-size:17px;flex:none}
#fx{position:fixed;inset:0;pointer-events:none;z-index:60;overflow:hidden}
#fx .fly{position:absolute;transform:translate(-50%,0);font-weight:700;font-size:13px;white-space:nowrap;color:#ffe3a3;text-shadow:0 1px 3px #000,0 0 8px #ff9d2e88;animation:flyup 1.05s ease-out forwards}
#fx .fly img{height:16px;vertical-align:-3px}
@keyframes flyup{0%{opacity:0;transform:translate(-50%,6px) scale(.85)}15%{opacity:1;transform:translate(-50%,0) scale(1.05)}100%{opacity:0;transform:translate(-50%,-56px) scale(1)}}
#fx .spark{position:absolute;width:7px;height:7px;margin:-3px 0 0 -3px;border-radius:50%;background:radial-gradient(#fff6d0,#ffb23e 55%,#ff7a1a00 72%);animation:spark .72s ease-out forwards}
@keyframes spark{0%{opacity:1;transform:translate(0,0) scale(1.2)}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(.3)}}
#fx .lvup{position:absolute;left:50%;top:120px;transform:translateX(-50%);min-width:220px;max-width:88%;text-align:center;padding:12px 18px;border-radius:14px;border:1px solid var(--gold);background:radial-gradient(circle at 50% 0,#4a2c12f2,#1d1430f2);box-shadow:0 0 30px #ff9d2e66,0 8px 24px #000c;animation:lvin .45s cubic-bezier(.2,1.4,.4,1)}
#fx .lvup.out{transition:opacity .45s,transform .45s;opacity:0;transform:translate(-50%,-14px)}
#fx .lvt{font-size:12px;color:var(--gold);letter-spacing:.08em;text-transform:uppercase}
#fx .lvn{font-family:var(--serif,serif);font-size:30px;font-weight:700;color:#ffe3a3;text-shadow:0 0 14px #ff9d2e}
#fx .lvu{font-size:12.5px;margin-top:4px;line-height:1.5}
@keyframes lvin{0%{opacity:0;transform:translateX(-50%) scale(.6)}100%{opacity:1;transform:translateX(-50%) scale(1)}}
.rk{border-color:#ffc35a;background:linear-gradient(160deg,#3a2a14cc,#251a3dcc)}
.fest{background:linear-gradient(160deg,#4a1f1acc,#251a3dcc)}
@media (prefers-reduced-motion:reduce){.gbtn.hot{animation:none}#fx .lvup{animation:none}}
body.desk #fx .lvup{top:140px}

/* ---- real alliances (v1.7.0) ---- */
.crest{display:inline-block;flex:none;line-height:0;vertical-align:middle}.crest-svg{display:block;shape-rendering:geometricPrecision}
.ry-head{gap:10px;align-items:center}.ry-head>div{overflow:hidden}.ry-head b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ry-real{background:#2f7a40;color:#f7ead0;border-radius:8px;padding:2px 6px;font-size:10px;white-space:nowrap}
.ry-big{display:flex;gap:12px;align-items:center}.ry-big>div{min-width:0;overflow-wrap:anywhere}
.ry-li{gap:10px;align-items:center}.ry-li>div{overflow:hidden}.ry-li b{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ry-code{letter-spacing:1px;color:var(--gold2)}.ry-help{margin-top:3px}
.ry-chat p{margin:0 0 6px;overflow-wrap:anywhere}.ry-chat p.me b{color:var(--gold2)}.ry-chat p.sys{opacity:.85}
.ry-flag{background:none;border:0;color:var(--mut);font-size:12px;padding:0 4px;min-height:0;cursor:pointer}
.ry-mem tr[data-a]{cursor:pointer}
.cr-pick{display:flex;flex-wrap:wrap;gap:4px}.cr-pick button{padding:2px;min-height:0;border-radius:8px;background:#160f26;border:1px solid #3b2d58;line-height:0}.cr-pick button.on{border-color:#ffd98a;box-shadow:0 0 0 1px #ffd98a}
.wy-hp{position:relative;height:22px;border-radius:11px;background:#160f26;border:1px solid #6a4aa0;overflow:hidden}.wy-hp i{position:absolute;left:0;top:0;bottom:0;background:linear-gradient(90deg,#9f3a2e,#d0663f)}
.wy-hp span{position:relative;display:block;text-align:center;font-size:11px;line-height:20px;color:#f7ead0;font-weight:700;text-shadow:0 1px 2px #000}
.ry-pend .crest{margin-right:2px}

/* v1.7.1 Gloam Wyrm bust portrait (AD ruling): on the Night page under the wyrm banner (176) and in the Lantern Guide list (96). Never drawn over boss.jpg, no backing. */
.wyrm-bust{display:block;width:176px;height:176px;margin:8px auto 0}
.gitem .gi.gi-wyrm{width:96px;height:96px}
.gitem .gi-wyrm img{display:block;width:96px;height:96px}
