/* ---------- page ---------- */
*{box-sizing:border-box}
body{margin:0;background:#121110;color:#e9e2d4;font-family:'Spectral',Georgia,serif;font-size:17px;line-height:1.55}
a{color:#e8a33d}a:hover{color:#f5c26b}
.wrap{max-width:1248px;margin:0 auto;padding:0 24px}
.mono{font-family:'JetBrains Mono',monospace}
.muted{color:#8d857a;font-size:13px}
.top{border-bottom:1px solid #2c2925;background:#0d0c0b}
.top .row{display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between;padding-top:18px;padding-bottom:18px}
.brand{display:flex;align-items:center;gap:12px;font-family:'Cinzel',serif;font-weight:900;font-size:22px;letter-spacing:.18em;color:#f1e9d8}
nav{display:flex;flex-wrap:wrap;gap:6px;font-family:'Cinzel',serif;font-size:14px;letter-spacing:.08em}
nav a{padding:10px 14px;border-radius:6px;color:#bdb4a5;text-decoration:none;border:1px solid #2c2925}
nav a.on{background:#2a1f12;color:#f5c26b;border-color:#5a3f1c}
main{padding-top:56px;padding-bottom:72px;display:flex;flex-direction:column;gap:56px}
section{display:flex;flex-direction:column;gap:14px}
.hero h1{margin:0;font-family:'Cinzel',serif;font-weight:900;font-size:clamp(40px,6vw,76px);line-height:1.05;color:#f1e9d8}
.hero p{margin:0;max-width:640px;color:#bdb4a5;font-size:19px}
.live{font-family:'JetBrains Mono',monospace;font-size:13px;letter-spacing:.12em;color:#8d857a;display:flex;align-items:center;gap:10px}
.dot{width:10px;height:10px;border-radius:50%;background:#d9483b;display:inline-block}
h2{margin:0;font-family:'Cinzel',serif;font-weight:700;font-size:30px;color:#f1e9d8}
.sub{margin:0;max-width:680px;color:#bdb4a5}
.h2row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:8px}
.legend{display:flex;flex-wrap:wrap;gap:18px;font-family:'JetBrains Mono',monospace;font-size:13px;color:#bdb4a5}
.legend span{display:flex;align-items:center;gap:8px}
.legend i{width:12px;height:12px;display:inline-block}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px}
.stat{background:#1b1917;border:1px solid #2c2925;border-radius:10px;padding:22px 22px 18px;display:flex;flex-direction:column;gap:4px}
.stat b{font-family:'Cinzel',serif;font-weight:700;font-size:40px;color:#f5c26b;line-height:1.1}
.stat span{font-size:15px;color:#bdb4a5}
.logbox{overflow-x:auto;border:1px solid #2c2925;border-radius:10px;background:#0f0e0d}
.log{min-width:880px;font-family:'JetBrains Mono',monospace;font-size:14px}
.lrow{display:grid;grid-template-columns:100px 60px 150px 110px minmax(0,1fr) 140px;gap:12px;padding:12px 18px;border-bottom:1px solid #1f1d1b;align-items:center}
.lrow.head{color:#8d857a;border-bottom-color:#2c2925;font-size:12px;letter-spacing:.1em}
.lrow .t{color:#8d857a}.lrow .c{font-weight:600}
.lrow .p{color:#f5c26b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.fate-reported{color:#e06b5f;font-weight:600}.fate-tarpit{color:#8fb8b2;font-weight:600}.fate-repelled{color:#c9a46b;font-weight:600}
.lrow.empty{color:#8d857a;display:block}
.traps{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px}
.traps div{background:#1b1917;border:1px solid #2c2925;border-radius:10px;padding:16px 18px;display:flex;flex-direction:column;gap:6px}
.traps b{font-family:'JetBrains Mono',monospace;font-size:15px;color:#f5c26b}
.traps span{font-size:15px;color:#bdb4a5}
footer{border-top:1px solid #2c2925;padding:28px 24px;text-align:center;font-family:'Cinzel',serif;letter-spacing:.12em;font-size:13px;color:#6f685e}

/* ---------- scene frame (scaled to fit) ---------- */
.scene-box{width:100%;overflow:hidden;border-radius:10px;border:1px solid #2c2925}
.scene-scale{width:1200px;transform-origin:0 0}
.scene{position:relative;width:1200px;height:380px;overflow:hidden}
.abs{position:absolute}

/* ---------- shared sprite bits ---------- */
.px{shape-rendering:crispEdges;display:block;filter:drop-shadow(1px 0 0 #07060d) drop-shadow(-1px 0 0 #07060d) drop-shadow(0 1px 0 #07060d) drop-shadow(0 -1px 0 #07060d)}
.px.flat{filter:none}
.lA,.lB{animation:step .36s steps(1) infinite}.lB{animation-delay:-.18s}
@keyframes step{0%{opacity:1}50%{opacity:0}}
.tag{font-family:'JetBrains Mono',monospace;font-size:10px;font-weight:700;text-align:center;margin-bottom:2px;text-shadow:1px 1px 0 #000}

/* ---------- night siege ---------- */
.night{background:linear-gradient(#070a22 0 28%,#0e1338 28% 50%,#18205a 50% 70%,#2a2f6e 70% 100%)}
.moon{position:absolute;left:110px;top:34px;width:52px;height:52px;background:#f1e9d8;box-shadow:inset -8px -8px 0 #cfc5ad}
.crater{position:absolute;background:#d8cfbd}.c1{left:124px;top:48px;width:8px;height:8px}.c2{left:140px;top:66px;width:6px;height:6px}
.star{position:absolute;background:#e9e2d4;animation:tw 2.4s steps(1) infinite}@keyframes tw{0%{opacity:1}50%{opacity:.25}}
.shoot{position:absolute;width:40px;height:2px;background:linear-gradient(90deg,transparent,#fff);opacity:0;animation:shoot 13s linear infinite}
@keyframes shoot{0%,90%{opacity:0;left:300px;top:20px}91%{opacity:1}96%{opacity:0;left:560px;top:90px}100%{opacity:0}}
.cloud{position:absolute;animation:drift linear infinite}@keyframes drift{0%{left:-200px}100%{left:1240px}}
.mtn{position:absolute;left:0;right:0}
.mtn.far{bottom:60px;height:170px;background:#1c2250;clip-path:polygon(0 100%,0 62%,7% 34%,13% 52%,21% 12%,29% 46%,37% 26%,45% 58%,54% 18%,62% 50%,71% 32%,80% 64%,100% 64%,100% 100%)}
.mtn.near{bottom:40px;height:90px;background:#141a3c;clip-path:polygon(0 100%,0 50%,10% 30%,22% 55%,34% 25%,47% 50%,58% 35%,70% 60%,100% 60%,100% 100%)}
.bat{position:absolute;left:-30px;animation:batfly linear infinite}
@keyframes batfly{0%{left:-30px;transform:translateY(0)}25%{transform:translateY(-14px)}50%{transform:translateY(8px)}75%{transform:translateY(-10px)}100%{left:1230px;transform:translateY(0)}}
.wing{animation:wing .25s steps(1) infinite}.wing2{animation:wing .25s steps(1) infinite;animation-delay:-.125s}
@keyframes wing{0%{opacity:1}50%{opacity:0}}
.graveyard{position:absolute;left:0;bottom:40px;width:240px;height:200px;z-index:0;pointer-events:none}
.graveyard .tablet{position:absolute;left:16px;bottom:0;width:74px;height:54px;background:#8d857a;box-shadow:0 0 0 2px #07060d,inset 4px 0 0 #a39b8e;border-radius:6px 6px 0 0;display:flex;flex-direction:column;align-items:center;justify-content:center;font:700 9px 'JetBrains Mono',monospace;color:#2a2420;line-height:1.2;z-index:2}
.graveyard .tablet b{font-size:17px;color:#1a1622}
.graveyard .stones{position:absolute;left:104px;bottom:0;display:flex;gap:10px;align-items:flex-end;z-index:2}
.graveyard .mist{position:absolute;left:0;right:0;bottom:0;height:26px;z-index:3;background:linear-gradient(transparent,rgba(143,211,204,.14));animation:mist 4s ease-in-out infinite alternate}
@keyframes mist{0%{opacity:.6}100%{opacity:1}}
.ghost{position:absolute;bottom:30px;opacity:0;z-index:1;animation:rise 6s ease-out infinite}
.ghost.once{animation-iteration-count:1;animation-fill-mode:forwards}
@keyframes rise{0%{opacity:0;transform:translate(0,0)}10%{opacity:.9}40%{transform:translate(8px,-50px)}70%{opacity:.7;transform:translate(-6px,-100px)}100%{opacity:0;transform:translate(4px,-150px)}}
.ghost svg{animation:wob .8s steps(2) infinite}@keyframes wob{0%{transform:none}50%{transform:translateX(2px)}}
.bricks{background-color:#565067;background-image:linear-gradient(#2c2838 3px,transparent 3px),linear-gradient(90deg,#2c2838 3px,transparent 3px),linear-gradient(#6c6582 2px,transparent 2px);background-size:30px 18px,30px 18px,30px 18px;background-position:0 0,0 0,3px 3px}
.wall{position:absolute;left:910px;bottom:40px;width:290px;height:150px;box-shadow:inset 6px 0 0 #3a3550}
.gate{position:absolute;left:112px;bottom:0;width:56px;height:76px;background:#0d0b14;border-radius:28px 28px 0 0;box-shadow:inset 0 0 0 4px #2c2838}
.fl{animation:fl .5s steps(2) infinite}@keyframes fl{0%{background:#f5c26b}50%{background:#d9783b}}
.torch{position:absolute;top:50px;width:10px;height:14px}.t1{left:92px}.t2{left:178px}
.crenels{position:absolute;top:-20px;left:0;right:0;height:20px;display:flex;justify-content:space-between}
.crenels>div{width:22px;height:20px}
.crenels.small{top:-18px;height:18px}.crenels.small>div{width:20px;height:18px}
.archers{position:absolute;top:-66px;left:0;right:0;display:flex;justify-content:space-between;padding:0 2px}
.bob{animation:bob 1.4s steps(2) infinite}@keyframes bob{0%{transform:translateY(0)}50%{transform:translateY(-3px)}}
.draw{animation:draw 1.1s steps(1) infinite}@keyframes draw{0%{opacity:1}60%{opacity:0}}
.guards{position:absolute;left:70px;bottom:0;display:flex;gap:120px}
.guards .px{transform:scaleX(-1)}
.tower{position:absolute;left:1020px;bottom:190px;width:90px;height:110px;box-shadow:inset 6px 0 0 #3a3550}
.window{position:absolute;left:27px;top:20px;width:36px;height:40px;border-radius:18px 18px 0 0;overflow:hidden;box-shadow:inset 0 0 0 3px #2c2838}
.princess{position:absolute;left:3px;bottom:0}
.wvA,.wvB{animation:step 1s steps(1) infinite}.wvB{animation-delay:-.5s}
.heartpop{position:absolute;left:38px;top:4px;opacity:0;animation:heartpop 7s linear infinite}
@keyframes heartpop{0%,80%{opacity:0;transform:translateY(0)}83%{opacity:1}100%{opacity:0;transform:translateY(-26px)}}
.pole{position:absolute;left:44px;top:-64px;width:4px;height:48px;background:#8d857a}
.flag{position:absolute;left:48px;top:-64px;width:34px;height:20px;background:#b8432f;box-shadow:inset 0 -4px 0 #7a2219;transform-origin:left center;animation:wave .7s steps(2) infinite}
@keyframes wave{0%{transform:skewY(0)}50%{transform:skewY(-8deg)}}
.ground{position:absolute;left:0;right:0;bottom:0;height:40px;z-index:2;background-color:#2b2418;background-image:repeating-linear-gradient(90deg,transparent 0 14px,#231d13 14px 18px);border-top:6px solid #3f6b2e;box-shadow:0 -3px 0 #5b8a3a}
.tarpit{position:absolute;left:250px;width:130px;bottom:0;height:46px;z-index:2;background:#3a2a1a;border-top:5px solid #5a4126}
.tarpit-label{position:absolute;left:250px;width:130px;bottom:52px;z-index:3;text-align:center;font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;color:#c9a46b;text-shadow:1px 1px 0 #000}
.banner{position:absolute;right:16px;top:14px;z-index:3;font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;color:#f5c26b;background:#1a1430;border:2px solid #f5c26b;padding:4px 10px;box-shadow:3px 3px 0 #000}
.quiet{position:absolute;left:0;right:0;top:150px;text-align:center;z-index:4;font-family:'JetBrains Mono',monospace;font-size:14px;color:#bdb4a5;text-shadow:1px 1px 0 #000}

/* ---------- the live battle (siege.js) ---------- */
#raiders{position:absolute;inset:0;z-index:1;pointer-events:none}
.act{position:absolute;left:0;top:0;transition:opacity 1s}
.act .tag{width:100%}
.act .body{position:relative;transform-origin:50% 100%;transition:transform .25s}
.act.flip .body{transform:scaleX(-1)}
.act.still .lA,.act.still .lB{animation:none}.act.still .lB{opacity:0}
.act.dead .body{transform:rotate(-90deg) translate(-8px,-6px)}
.act.dead .lA,.act.dead .lB{animation:none}
.act.dead .tag{opacity:0}
.act.hurt .body svg{animation:hurt .3s steps(2) 2}@keyframes hurt{0%{opacity:.35}}
.gone{opacity:0 !important;transition:opacity 1s}
.prop{position:absolute}
.prop.key{left:28px;top:20px}
.prop.scroll{left:26px;top:22px}
.prop.spy{left:26px;top:6px;display:none}.spying .prop.spy{display:block}
.prop.shieldp{left:-4px;top:12px;width:12px;height:18px;background:#8f99a6;box-shadow:inset -3px -3px 0 #5a6270,inset 0 0 0 2px #2b2f3a;border-radius:0 0 6px 6px}
.prop.shieldp.lost{animation:shieldfly .6s forwards}@keyframes shieldfly{to{transform:translate(-30px,30px) rotate(-120deg);opacity:0}}
.k-brute .tag{font-size:12px}
.scoutc svg{filter:hue-rotate(160deg) drop-shadow(1px 0 0 #07060d) drop-shadow(-1px 0 0 #07060d)}
.k-ladder .body{display:flex;width:110px;height:48px}
.k-ladder .lc{position:absolute;left:0;top:0}.k-ladder .lc2{left:74px}
.k-ladder .lad{position:absolute;left:18px;top:14px;z-index:1}
.sinking .body{animation:sinkdown 3s linear forwards}@keyframes sinkdown{to{transform:translateY(62px)}}
.bubbles i{position:absolute;bottom:-4px;width:6px;height:6px;border-radius:50%;background:#7a5a36;animation:bub 1s infinite}
.bubbles i:nth-child(1){left:6px}.bubbles i:nth-child(2){left:18px;animation-delay:-.4s}.bubbles i:nth-child(3){left:28px;animation-delay:-.7s}
@keyframes bub{0%{transform:translateY(60px);opacity:1}100%{transform:translateY(40px);opacity:0}}
.roll{animation:roll .5s linear}@keyframes roll{0%{transform:none}50%{transform:translate(10px,8px) rotate(180deg) scale(.8)}100%{transform:translateX(0) rotate(360deg)}}
.hop{transform:translateY(-8px)}
.burnfx{position:absolute;left:4px;top:18px;z-index:2}
.spark{position:absolute;left:-8px;top:14px;width:10px;height:10px;background:#fff3c4;box-shadow:0 0 8px 3px #f5c26b;animation:spark .35s forwards}@keyframes spark{to{transform:scale(2);opacity:0}}
.steam{position:absolute;left:4px;top:-6px;width:30px;height:30px;background:radial-gradient(circle,rgba(233,226,212,.8) 30%,transparent 70%);animation:steam 1s forwards}@keyframes steam{to{transform:translateY(-30px) scale(1.6);opacity:0}}
.sally{z-index:4}
.sally.strike .body svg{animation:strike .25s steps(2) 2}@keyframes strike{50%{transform:rotate(-14deg) translateX(-4px)}}
.arrow{position:absolute;left:-9px;top:-1px;width:18px;height:3px;background:#e9e2d4;transform-origin:50% 50%;z-index:5}
.arrow::before{content:'';position:absolute;left:-4px;top:-1px;width:4px;height:5px;background:#8a5a2b}
.arrow::after{content:'';position:absolute;right:-4px;top:-1px;width:4px;height:5px;background:#b8c2cf}
.arrow.fire{background:#f5c26b;box-shadow:0 0 8px 2px #f5a04a}.arrow.fire::after{background:#e0503b}
.arrow.stuck{z-index:1}
.arrow.embedded{z-index:3;width:14px}
.rock{position:absolute;left:-7px;top:-7px;width:14px;height:14px;background:#8d857a;box-shadow:inset -4px -4px 0 #5a544c;z-index:5}
.dustfx{position:absolute;animation:dustpuff .8s forwards}@keyframes dustpuff{0%{transform:scale(.6);opacity:1}100%{transform:scale(1.4);opacity:0}}
.drop{position:absolute;left:0;top:0;transition:opacity 1s}
.pop{position:absolute;left:0;top:0;z-index:6;font:700 12px 'JetBrains Mono',monospace;color:#fff3c4;text-shadow:1px 1px 0 #000;animation:popup 1.4s forwards;white-space:nowrap}
@keyframes popup{0%{opacity:0;margin-top:6px}15%{opacity:1;margin-top:0}80%{opacity:1}100%{opacity:0;margin-top:-14px}}
.pop-volley{font-size:16px;color:#f5c26b}.pop-block{color:#dfe6ee}.pop-alert{font-size:16px;color:#e0503b}
.cauldron{position:absolute;left:890px;top:164px;width:24px;height:18px;z-index:4;background:#2b2f3a;border-radius:0 0 8px 8px;box-shadow:inset 0 -4px 0 #1a1d22,inset 3px 0 0 #4a4f58,0 0 0 2px #07060d;transform-origin:0 100%;transition:transform .35s}
.cauldron::before{content:'';position:absolute;left:-3px;top:-2px;width:30px;height:4px;background:#4a4f58;box-shadow:0 0 0 2px #07060d}
.cauldron .liq{position:absolute;left:2px;top:1px;width:20px;height:4px;background:#f5a04a;box-shadow:0 0 6px 2px rgba(245,160,74,.7);animation:boil .4s steps(2) infinite}
@keyframes boil{50%{background:#f5c26b;transform:translateY(-1px)}}
.cauldron.tip{transform:rotate(-75deg)}
.steamwisp{position:absolute;left:6px;top:-6px;width:8px;height:8px;background:rgba(233,226,212,.6);animation:wisp 1.2s linear infinite}
.steamwisp.w2{left:14px;animation-delay:-.6s}
@keyframes wisp{0%{transform:translateY(0);opacity:.8}100%{transform:translate(4px,-22px) scale(1.6);opacity:0}}
.odrop{position:absolute;left:890px;top:178px;z-index:4;animation:odx .55s linear both}
.odrop i{display:block;width:8px;height:9px;background:#f5a04a;box-shadow:0 0 6px 1px rgba(245,140,60,.8),inset 0 -3px 0 #d9783b;animation:ody .55s cubic-bezier(.45,0,1,1) both}
@keyframes odx{0%{transform:translateX(-4px)}100%{transform:translateX(var(--dx))}}
@keyframes ody{0%{transform:translateY(0)}100%{transform:translateY(154px) scaleY(1.4);opacity:.9}}
.splash{position:absolute;top:336px;z-index:3}
.splash .puddle{position:absolute;left:-28px;top:-3px;width:56px;height:6px;background:#f5a04a;box-shadow:0 0 10px 3px rgba(245,140,60,.6);animation:puddle 2.6s forwards}
@keyframes puddle{0%{transform:scaleX(.3)}15%{transform:scaleX(1)}60%{background:#8a5a2b;box-shadow:none}100%{background:#5a4126;opacity:0}}
.splash .bit{position:absolute;left:-3px;top:-6px;width:5px;height:5px;background:#f5c26b;animation:bit .6s ease-out forwards}
.splash .b1{--bx:-26px;--by:-22px}.splash .b2{--bx:-12px;--by:-34px}.splash .b3{--bx:14px;--by:-30px}.splash .b4{--bx:28px;--by:-18px}
@keyframes bit{to{transform:translate(var(--bx),var(--by));opacity:0}}
.splash .puff{position:absolute;left:-18px;top:-20px;width:22px;height:22px;border-radius:50%;background:rgba(233,226,212,.75);animation:puff 2s ease-out forwards}
.splash .p2{left:-2px;animation-delay:.2s;opacity:0}.splash .p3{left:-28px;animation-delay:.45s;opacity:0}
@keyframes puff{0%{transform:scale(.5);opacity:.9}100%{transform:translateY(-90px) scale(2.2);opacity:0}}
.act.scald .body svg{animation:scald .12s steps(2) 6}
@keyframes scald{0%{transform:translateX(-2px);filter:sepia(1) saturate(4) hue-rotate(-20deg)}100%{transform:translateX(2px)}}
/* archers */
.archers{display:block}
.archer{position:absolute;top:0}
.abob{animation:bob 1.4s steps(2) infinite}
.archer .nock{opacity:0}
.archer.drawing .nock{opacity:1}
.archer.drawing .abob{animation:none;transform:translateX(2px)}
.archer.dip .nock{opacity:1}.archer.dip .nock rect{fill:#f5a04a}
.archer.lookback .abob svg{transform:scaleX(-1)}
.archer.stretch .abob{animation:none;transform:translateY(-5px) scaleY(1.06)}
.yawn{position:absolute;left:-12px;top:-18px;font:700 10px 'JetBrains Mono',monospace;color:#e9e2d4;background:#1a1430;border:1px solid #6b6570;padding:0 4px;animation:popup 1.6s forwards}
.brazier{position:absolute;left:914px;top:160px;width:16px;height:12px;z-index:2;background:#4a4f58;box-shadow:inset 0 -3px 0 #2b2f3a}
.brazier-fire{position:absolute;left:3px;top:-9px;width:10px;height:9px}
.guards{transition:transform 1s}
.guards.wallup{transform:translateX(-60px)}
.flag.salute{animation:salute .3s steps(2) 5;background:#f5c26b}
@keyframes salute{0%{transform:translateY(0) skewY(0)}50%{transform:translateY(-6px) skewY(-10deg)}}

/* weather */
#weather{position:absolute;inset:0;z-index:5;pointer-events:none;opacity:0;transition:opacity 4s}
#weather.rain,#weather.fog{opacity:1}
#weather.rain{background-image:repeating-linear-gradient(105deg,transparent 0 22px,rgba(180,200,240,.35) 22px 23px);background-size:100% 60px;animation:rain .35s linear infinite}
@keyframes rain{to{background-position:-16px 60px}}
#weather.fog{background:linear-gradient(transparent 55%,rgba(200,205,220,.35) 75%,rgba(200,205,220,.15) 100%);animation:fog 8s ease-in-out infinite alternate}
@keyframes fog{to{background-position:120px 0;filter:blur(1px)}}
/* torches only burn from evening to dawn */
[data-tod=morning] .night .torch,[data-tod=day] .night .torch{animation:none;background:#3a2f25}

/* ---------- dungeon ---------- */
.dungeon{height:420px}
.stone{background-color:#2e2a33;background-image:linear-gradient(#1c1a20 3px,transparent 3px),linear-gradient(90deg,#1c1a20 3px,transparent 3px),linear-gradient(#3b3641 2px,transparent 2px);background-size:40px 24px,40px 24px,40px 24px;background-position:0 0,20px 0,3px 3px}
.glow{position:absolute;top:-20px;width:280px;height:280px;border-radius:50%;background:#f5a04a;animation:glow .9s steps(2) infinite}
.g1{left:-80px}.g2{right:-80px}
@keyframes glow{0%{opacity:.3}50%{opacity:.2}}
.sconce{position:absolute;top:60px;width:8px;height:40px;background:#6b4a24}.sconce.s1{left:14px}.sconce.s2{right:14px}
.dtorch{position:absolute;top:40px;width:16px;height:22px;border-radius:8px 8px 2px 2px}.dtorch.s1{left:10px}.dtorch.s2{right:10px}
.dfl{animation:dfl .45s steps(2) infinite}@keyframes dfl{0%{background:#f5c26b;transform:scaleY(1)}50%{background:#e0783b;transform:scaleY(.85)}}
.chain{position:absolute;top:0;width:4px;background:repeating-linear-gradient(#6b6570 0 6px,#3b3641 6px 9px)}
.drip{position:absolute;top:0;width:3px;height:6px;background:#8fb4e0;opacity:0;animation:drip linear infinite}
@keyframes drip{0%,70%{opacity:0;top:0}71%{opacity:1;top:0}90%{opacity:1;top:300px}91%{opacity:0;top:300px}100%{opacity:0}}
.ledger{position:absolute;left:50%;top:8px;margin-left:-90px;width:180px;text-align:center;z-index:3;font-family:'JetBrains Mono',monospace;font-size:12px;font-weight:700;color:#f1e9d8;background:#3a2814;border:2px solid #c9a46b;padding:3px 0;box-shadow:3px 3px 0 #000}
.cells{position:absolute;left:40px;right:40px;top:50px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:30px}
.cell{position:relative;display:flex;flex-direction:column;gap:6px}
.plaque{align-self:center;font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;color:#f5c26b;background:#3a2814;border:2px solid #8a6a3c;padding:3px 10px;box-shadow:2px 2px 0 #000}
.meter{height:6px;background:#1a1620;border:1px solid #45404c}.meter i{display:block;height:100%;background:#c9a46b}
.jail{position:relative;height:200px;background:#0e0b12;box-shadow:inset 0 0 0 4px #45404c,inset 0 -18px 0 #1a1620}
.jail .shelf{position:absolute;left:8px;top:40px;width:40px;height:4px;background:#3a3540}
.inmates{position:absolute;left:8px;right:8px;bottom:18px;display:flex;justify-content:center;align-items:flex-end;gap:6px;flex-wrap:wrap-reverse}
.inmate{position:relative}
.bars{position:absolute;inset:4px;z-index:2;background-image:repeating-linear-gradient(90deg,transparent 0 16px,#6b6570 16px 20px,#8d8794 20px 22px,transparent 22px 36px)}
.crossbar{position:absolute;left:4px;right:4px;top:30px;height:6px;background:#6b6570;z-index:2}
.lock{position:absolute;right:18px;top:96px;width:10px;height:14px;background:#c9a46b;z-index:3;box-shadow:inset 0 -4px 0 #8a6a3c}
.plus{position:absolute;left:50%;top:-6px;margin-left:-14px;font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;color:#7ee08a;text-shadow:1px 1px 0 #000;opacity:0;animation:plus linear infinite}
@keyframes plus{0%,88%{opacity:0;transform:translateY(0)}90%{opacity:1}100%{opacity:0;transform:translateY(-22px)}}
.a-shake{animation:shake .5s steps(2) infinite}@keyframes shake{0%{transform:translateX(-2px)}50%{transform:translateX(2px)}}
.a-pace{animation:pace 3s steps(12) infinite alternate}@keyframes pace{0%{transform:translateX(-14px)}100%{transform:translateX(14px)}}
.a-sit{transform:translateY(10px)}
.a-sleep{transform:rotate(-90deg) translate(-8px,6px)}
.a-look{animation:look 2.6s steps(1) infinite}@keyframes look{0%{transform:scaleX(1)}50%{transform:scaleX(-1)}}
.zz{position:absolute;left:6px;top:-10px;font-family:'JetBrains Mono',monospace;font-size:11px;font-weight:700;color:#bcd8f5;animation:zz 2.4s linear infinite;opacity:0}
@keyframes zz{0%{opacity:0;transform:translate(0,0)}20%{opacity:1}100%{opacity:0;transform:translate(10px,-22px)}}
.floor{position:absolute;left:0;right:0;bottom:28px;height:52px;z-index:3;background-color:#24202a;background-image:linear-gradient(90deg,#1a1720 3px,transparent 3px);background-size:60px 100%;border-top:4px solid #3b3641}
.patrol{position:absolute;bottom:34px;left:40px;z-index:4;animation:patrol 12s linear infinite alternate}
@keyframes patrol{0%{left:40px}100%{left:1120px}}
.face{animation:face 24s steps(1) infinite}@keyframes face{0%{transform:scaleX(1)}50%{transform:scaleX(-1)}}
.rat{position:absolute;bottom:20px;z-index:4;left:-30px;animation:rat linear infinite}
@keyframes rat{0%{left:-30px}12%{left:1230px}100%{left:1230px}}
.tickerbar{position:absolute;left:0;right:0;bottom:0;height:28px;z-index:5;background:#120f14;border-top:2px solid #8a6a3c;overflow:hidden;display:flex;align-items:center}
.ticker{display:flex;gap:60px;white-space:nowrap;padding-left:20px;font-family:'JetBrains Mono',monospace;font-size:12px;color:#e9e2d4;animation:ticker 40s linear infinite}
.ticker em{color:#7ee08a;font-style:normal}
@keyframes ticker{0%{transform:translateX(0)}100%{transform:translateX(-50%)}}

@media (prefers-reduced-motion: reduce){
  *{animation:none !important}
  .lB,.wing2{opacity:0}
}

/* ---------- treasury ---------- */
.trez-head{display:flex;align-items:center;gap:18px}
.trez-totals{display:flex;flex-wrap:wrap;gap:22px;font-size:14px;color:#bdb4a5}
.trez-totals b{color:#f5c26b;font-size:18px}
.trez{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.vault{background:#1b1917;border:1px solid #5a3f1c;border-radius:10px;padding:18px;box-shadow:inset 0 0 0 1px #2a1f12}
.vault h3{margin:0 0 12px;font-family:'Cinzel',serif;font-size:17px;color:#f1e9d8}
.vault ol{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;counter-reset:r}
.vault li{position:relative;display:grid;grid-template-columns:22px minmax(0,1fr) auto;gap:8px;align-items:center;font-family:'JetBrains Mono',monospace;font-size:14px;padding:4px 6px;counter-increment:r;z-index:0}
.vault li::before{content:counter(r);color:#8d857a;font-size:12px}
.vault li .v{color:#f5c26b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.vault li .n{color:#bdb4a5;font-size:12px}
.vault li i{position:absolute;left:0;top:0;bottom:0;background:#2a1f12;border-radius:4px;z-index:-1}
.vault li.empty{display:block;color:#8d857a}
.vault li.empty::before{content:none}

/* ---------- siege map ---------- */
.mapbox{border:1px solid #2c2925;border-radius:10px;background:#0b1020;overflow:hidden}
#siegemap{display:block;width:100%;height:auto;image-rendering:pixelated}
.maplegend{display:flex;flex-wrap:wrap;gap:16px;font-size:13px;color:#bdb4a5}
.maplegend b{color:#f5c26b}

/* ---------- guests + rules ---------- */
.guests{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.guest{background:#1b1917;border:1px solid #2f5a56;border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}
.guest b{font-family:'JetBrains Mono',monospace;font-size:15px;color:#8fd3cc}
.guest span{font-size:14px;color:#bdb4a5}
.guests .empty{color:#8d857a;font-family:'JetBrains Mono',monospace;font-size:14px}
.rules{margin:0;padding-left:22px;display:flex;flex-direction:column;gap:12px;max-width:820px;color:#bdb4a5}
.rules b{color:#f1e9d8}
.rules li::marker{color:#e8a33d;font-family:'Cinzel',serif;font-weight:700}

/* AbuseIPDB score badges in the siege log */
.score{display:inline-flex;align-items:center;gap:8px}
.score i{display:inline-block;width:44px;height:6px;background:#2c2925;position:relative}
.score i::after{content:"";position:absolute;left:0;top:0;bottom:0;width:var(--w);background:var(--c)}
.score.hi{color:#f08a7e}.score.mid{color:#f5c26b}.score.lo{color:#bdb4a5}.score.none{color:#6f685e}

/* educational explainer boxes */
.explain{background:#15141a;border:1px solid #2c2925;border-left:0;border-radius:10px;padding:18px 20px;display:flex;flex-direction:column;gap:10px;max-width:900px}
.explain h3{margin:0;font-family:'Cinzel',serif;font-size:18px;color:#f1e9d8}
.explain p{margin:0;color:#bdb4a5;font-size:16px}
.explain p.muted{font-size:14px;color:#8d857a}
.explain b{color:#e9e2d4}
.bands{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px;color:#bdb4a5;font-size:15px}
.bands li{display:grid;grid-template-columns:120px 1fr;gap:12px;align-items:center}
.bands .score{font-family:'JetBrains Mono',monospace;font-size:13px}
@media (max-width:560px){.bands li{grid-template-columns:1fr;gap:2px}}

.bands.steps li{grid-template-columns:28px 1fr;align-items:start}
.step{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;background:#2a1f12;border:1px solid #5a3f1c;color:#f5c26b;font:700 13px 'JetBrains Mono',monospace}
.explain code{font-family:'JetBrains Mono',monospace;font-size:14px;color:#8fd3cc;overflow-wrap:anywhere}

.tagx{font-family:'JetBrains Mono',monospace;font-size:13px;font-weight:700;color:#f5c26b;overflow-wrap:anywhere}
.explain .bands li{grid-template-columns:150px 1fr}
@media (max-width:560px){.explain .bands li{grid-template-columns:1fr}}
.explain .bands.steps li{grid-template-columns:28px 1fr}

.scorelink{display:inline-flex;align-items:center;gap:6px;text-decoration:none;padding:6px 0}
.scorelink:hover .score,.scorelink:focus-visible .score{text-decoration:underline}
.scorelink .ext{font-size:12px;color:#8d857a}
.scorelink:hover .ext{color:#f5c26b}

/* ---------- gate scene (honored guests) ---------- */
.gate-scene{height:260px;background:linear-gradient(#5d8fd0 0 30%,#79a7de 30% 55%,#9cc0e8 55% 100%)}
.sun{position:absolute;left:150px;top:26px;width:44px;height:44px;background:#fff1b8;box-shadow:0 0 0 6px rgba(255,241,184,.35)}
.gcloud{position:absolute;animation:drift linear infinite}
.hill{position:absolute;left:0;right:0}
.hill.far{bottom:40px;height:120px;background:#6f9e58;clip-path:polygon(0 100%,0 55%,12% 35%,26% 58%,40% 30%,55% 52%,68% 38%,82% 60%,100% 45%,100% 100%)}
.hill.near{bottom:40px;height:70px;background:#55843f;clip-path:polygon(0 100%,0 45%,15% 25%,30% 50%,48% 30%,62% 55%,78% 35%,100% 55%,100% 100%)}
.road{position:absolute;left:0;right:0;bottom:0;height:40px;z-index:2;background-color:#a07c50;background-image:repeating-linear-gradient(90deg,transparent 0 22px,#8f6c43 22px 26px);border-top:6px solid #6f9e58;box-shadow:0 -3px 0 #8cc06c}
.bricks-day{background-color:#9a93a8;background-image:linear-gradient(#6c6582 3px,transparent 3px),linear-gradient(90deg,#6c6582 3px,transparent 3px),linear-gradient(#b5afc2 2px,transparent 2px);background-size:30px 18px,30px 18px,30px 18px;background-position:0 0,0 0,3px 3px}
.gatehouse{position:absolute;left:930px;bottom:40px;width:270px;height:170px;z-index:1;box-shadow:inset 6px 0 0 #7a7390}
.gatehouse .crenels{position:absolute;top:-20px;left:0;right:0;height:20px;display:flex;justify-content:space-between}
.gatehouse .crenels>div{width:22px;height:20px}
.arch{position:absolute;left:40px;bottom:0;width:80px;height:110px;background:#2a2433;border-radius:40px 40px 0 0;overflow:hidden;box-shadow:inset 0 0 0 5px #6c6582}
.portcullis{position:absolute;left:0;right:0;top:0;height:110px;background-image:repeating-linear-gradient(90deg,transparent 0 10px,#3a3540 10px 14px),repeating-linear-gradient(transparent 0 16px,#3a3540 16px 20px)}
.gbanner{position:absolute;top:24px;width:26px;height:48px;background:#2f8f8a;box-shadow:inset 0 -8px 0 #246f6b,inset 0 4px 0 #f5c26b}
.gbanner.b1{left:150px}.gbanner.b2{left:210px}
.gateguard{position:absolute;left:880px;bottom:40px;z-index:4}
.bubble{position:absolute;left:866px;top:124px;z-index:5}
.gate-sign{position:absolute;left:968px;bottom:156px;z-index:2;font:700 10px 'JetBrains Mono',monospace;color:#3a2814;background:#e9d6a8;border:2px solid #6b4a24;padding:2px 6px}
.gate-demo{position:absolute;left:16px;top:12px;z-index:6;font:700 12px 'JetBrains Mono',monospace;color:#1a1430;background:rgba(255,255,255,.75);padding:4px 8px}
.visitor{position:absolute;left:0;bottom:40px;z-index:4;display:flex;align-items:flex-end;gap:0}
.visitor .vlabel{position:absolute;left:0;right:0;bottom:100%;margin-bottom:4px;text-align:center;white-space:nowrap;font:700 11px 'JetBrains Mono',monospace;text-shadow:1px 1px 0 #000}
.visitor.still .lA,.visitor.still .lB{animation:none}.visitor.still .lB{opacity:0}
.mini-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.mini-stats div{background:#1b1917;border:1px solid #2f5a56;border-radius:10px;padding:12px 14px;display:flex;flex-direction:column;gap:2px}
.mini-stats b{font-family:'JetBrains Mono',monospace;font-size:20px;color:#8fd3cc;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mini-stats span{font-size:14px;color:#bdb4a5}

/* ---------- time of day (follows the viewer's clock; night is the siege's default look) ---------- */
.tod-chip{position:absolute;left:16px;top:12px;z-index:6;font:700 11px 'JetBrains Mono',monospace;letter-spacing:.08em;color:#f1e9d8;background:rgba(10,8,20,.55);border:1px solid rgba(255,255,255,.25);padding:3px 8px}
.tint{position:absolute;inset:0;z-index:3;pointer-events:none;background:transparent;transition:background 1s}
#gstars .star{display:none}

/* night siege */
[data-tod=morning] .night{background:linear-gradient(#5b7fc4 0 28%,#9fb6e0 28% 50%,#f0b8a0 50% 72%,#f7d49a 72% 100%)}
[data-tod=day] .night{background:linear-gradient(#4f86d6 0 28%,#6d9ce0 28% 50%,#8db4e8 50% 72%,#a9c8ee 72% 100%)}
[data-tod=evening] .night{background:linear-gradient(#2a1f4a 0 26%,#5a2f5e 26% 48%,#a8455a 48% 70%,#e07a4a 70% 100%)}
[data-tod=morning] .night .moon{top:118px;background:#ffe7a3;box-shadow:0 0 0 6px rgba(255,231,163,.35)}
[data-tod=day] .night .moon{top:26px;background:#fff1b8;box-shadow:0 0 0 8px rgba(255,241,184,.35)}
[data-tod=evening] .night .moon{top:140px;background:#ffb070;box-shadow:0 0 0 8px rgba(255,140,80,.3)}
[data-tod=morning] .night .crater,[data-tod=day] .night .crater,[data-tod=evening] .night .crater{display:none}
[data-tod=morning] .night .star,[data-tod=day] .night .star,[data-tod=morning] .night .bat,[data-tod=day] .night .bat{display:none}
[data-tod=evening] .night .star{opacity:.4}
[data-tod=morning] .night .shoot,[data-tod=day] .night .shoot,[data-tod=evening] .night .shoot{display:none}
[data-tod=morning] .night .mtn.far{background:#8a86b4}[data-tod=morning] .night .mtn.near{background:#64689a}
[data-tod=day] .night .mtn.far{background:#7a9cc0}[data-tod=day] .night .mtn.near{background:#5d7fa3}
[data-tod=evening] .night .mtn.far{background:#4a2a4a}[data-tod=evening] .night .mtn.near{background:#331c35}
[data-tod=morning] .night .cloud{filter:brightness(2.6) sepia(.35)}
[data-tod=day] .night .cloud{filter:brightness(3.4) saturate(.2)}
[data-tod=evening] .night .cloud{filter:brightness(1.7) sepia(.5) hue-rotate(-25deg)}

/* gate scene (daytime is its default look) */
[data-tod=morning] .gate-scene{background:linear-gradient(#7a8fd0 0 30%,#f0b8a0 30% 60%,#f7d49a 60% 100%)}
[data-tod=evening] .gate-scene{background:linear-gradient(#5a2f5e 0 30%,#a8455a 30% 60%,#e07a4a 60% 100%)}
[data-tod=night] .gate-scene{background:linear-gradient(#070a22 0 30%,#0e1338 30% 60%,#18205a 60% 100%)}
[data-tod=morning] .gate-scene .sun{top:96px;background:#ffe7a3}
[data-tod=evening] .gate-scene .sun{top:104px;left:120px;background:#ffb070;box-shadow:0 0 0 6px rgba(255,140,80,.3)}
[data-tod=night] .gate-scene .sun{top:26px;background:#f1e9d8;box-shadow:inset -8px -8px 0 #cfc5ad}
[data-tod=night] #gstars .star{display:block}
[data-tod=morning] .gate-scene .tint{background:rgba(255,170,120,.08)}
[data-tod=evening] .gate-scene .tint{background:rgba(90,30,70,.22)}
[data-tod=night] .gate-scene .tint{background:rgba(8,12,45,.5)}
[data-tod=evening] .gate-scene .gcloud{filter:sepia(.6) hue-rotate(-30deg) brightness(.9)}
[data-tod=night] .gate-scene .gcloud{filter:brightness(.35) saturate(.4)}

.vault li.hid .v{color:#8d857a}
#roadquiet{top:110px;color:#fff;text-shadow:1px 1px 0 #000,0 0 6px rgba(0,0,0,.6)}

/* ---------- the Tavern (live presence) ---------- */
.tavern-wrap{display:flex;flex-direction:column;gap:14px}
.tv-room{position:relative;width:960px;height:320px;overflow:hidden;background-color:#4a3220;background-image:repeating-linear-gradient(90deg,#3e2a1b 0 3px,transparent 3px 34px),repeating-linear-gradient(transparent 0 58px,#3a2718 58px 61px)}
.tv-beam{position:absolute;left:0;right:0;top:0;height:20px;background:#2a1c12;box-shadow:0 4px 0 #3a2718}
.tv-post{position:absolute;top:20px;width:14px;height:260px;background:#2f2014}
.tv-glow{position:absolute;border-radius:50%;background:#f5a04a;animation:tvglow 1.2s ease-in-out infinite alternate}
@keyframes tvglow{0%{opacity:.16}100%{opacity:.28}}
.tv-hearth{position:absolute;left:20px;bottom:40px;width:150px;height:160px;background-color:#6c6582;background-image:linear-gradient(#3a3550 3px,transparent 3px),linear-gradient(90deg,#3a3550 3px,transparent 3px);background-size:28px 16px;box-shadow:0 0 0 3px #07060d}
.tv-hole{position:absolute;left:25px;bottom:0;width:100px;height:74px;background:#120c08;border-radius:30px 30px 0 0}
.tv-fire{position:absolute;left:47px;bottom:6px;transform-origin:bottom center;animation:tvfire .35s steps(2) infinite}
@keyframes tvfire{0%{transform:scaleY(1)}50%{transform:scaleY(.82) translateY(3px)}}
.tv-mantel{position:absolute;left:-8px;right:-8px;top:22px;height:10px;background:#5a3e26;box-shadow:0 0 0 2px #07060d}
.tv-mug-deco{position:absolute;left:20px;top:8px;width:12px;height:14px;background:#c9a46b;box-shadow:0 0 0 2px #07060d}
.tv-bottle-deco{position:absolute;left:116px;top:6px;width:8px;height:16px;background:#3f8a5a;box-shadow:0 0 0 2px #07060d}
.tv-shield{position:absolute;left:59px;top:30px}
.tv-cat{position:absolute;left:150px;bottom:40px;z-index:2;padding:6px 4px 0;margin:-6px -4px 0}
.tv-zz{position:absolute;left:26px;top:-12px;font:700 11px 'JetBrains Mono',monospace;color:#bcd8f5;opacity:0;animation:tvzz 2.6s linear infinite}
@keyframes tvzz{0%{opacity:0;transform:translate(0,0)}20%{opacity:1}100%{opacity:0;transform:translate(10px,-22px)}}
.tv-tail{position:absolute;left:-10px;bottom:4px;width:12px;height:4px;background:#c9a46b;box-shadow:0 0 0 1px #07060d;transform-origin:right center;animation:tvtail 1.6s steps(2) infinite}
@keyframes tvtail{0%{transform:rotate(0)}50%{transform:rotate(20deg)}}
.tv-door{position:absolute;left:196px;bottom:40px;width:58px;height:106px;background:#5a3e26;box-shadow:0 0 0 3px #07060d,inset 0 0 0 4px #3a2718;border-radius:29px 29px 0 0;background-image:repeating-linear-gradient(90deg,transparent 0 12px,#47301d 12px 14px)}
.tv-doorlight{position:absolute;left:200px;bottom:40px;width:50px;height:98px;background:#18205a;border-radius:25px 25px 0 0;opacity:0;transition:opacity .2s}
.tv-doorlight.open{opacity:1}
.tv-knob{position:absolute;left:240px;bottom:90px;width:6px;height:6px;background:#c9a46b;box-shadow:0 0 0 1px #07060d}
.tv-window{position:absolute;left:290px;top:44px;width:86px;height:66px;background:linear-gradient(#070a22,#18205a);box-shadow:0 0 0 5px #3a2718,0 0 0 7px #07060d;overflow:hidden}
.tv-moon{position:absolute;left:50px;top:8px;width:16px;height:16px;background:#f1e9d8;box-shadow:inset -3px -3px 0 #cfc5ad}
.tv-star{position:absolute;width:2px;height:2px;background:#e9e2d4;animation:tw 2.4s steps(1) infinite}
.tv-hills{position:absolute;left:0;right:0;bottom:0;height:18px;background:#141a3c;clip-path:polygon(0 100%,0 40%,30% 10%,60% 50%,100% 20%,100% 100%)}
.tv-mull-v{position:absolute;left:41px;top:0;bottom:0;width:4px;background:#3a2718}
.tv-mull-h{position:absolute;left:0;right:0;top:31px;height:4px;background:#3a2718}
[data-tod=morning] .tv-window,[data-tod=day] .tv-window{background:linear-gradient(#4f86d6,#a9c8ee)}
[data-tod=morning] .tv-moon,[data-tod=day] .tv-moon{background:#fff1b8;box-shadow:none}
[data-tod=morning] .tv-star,[data-tod=day] .tv-star{display:none}
[data-tod=morning] .tv-hills,[data-tod=day] .tv-hills{background:#5d7fa3}
[data-tod=evening] .tv-window{background:linear-gradient(#5a2f5e,#e07a4a)}
[data-tod=evening] .tv-moon{background:#ffb070;box-shadow:none;top:24px}
[data-tod=evening] .tv-hills{background:#331c35}
.tv-poster{position:absolute;left:400px;top:126px;width:54px;height:68px;padding:4px 0 0;box-sizing:border-box;background:#e9d6a8;box-shadow:0 0 0 2px #07060d;transform:rotate(-3deg);display:flex;flex-direction:column;align-items:center;gap:3px;z-index:2;text-decoration:none;cursor:default}
.tv-cat:focus{outline:none}.tv-cat:focus-visible{outline:1px dotted #8d857a;outline-offset:2px}
.tv-pin{position:absolute;left:25px;top:-3px;width:4px;height:4px;background:#8d857a}
.tv-wanted{font:700 8px 'JetBrains Mono',monospace;color:#6b2a1a}
.tv-bad{font:700 6px 'JetBrains Mono',monospace;color:#3a2718}
.tv-chain{position:absolute;left:520px;top:20px;width:2px;height:36px;background:#1a1210}
.tv-ring{position:absolute;left:476px;top:56px;width:90px;height:8px;background:#3a2718;box-shadow:0 0 0 2px #07060d}
.tv-candles{position:absolute;left:476px;top:42px;width:90px;display:flex;justify-content:space-between}
.tv-candle{display:flex;flex-direction:column;align-items:center}
.tv-candle i{width:6px;height:8px;background:#f5c26b;box-shadow:0 0 14px 5px rgba(245,180,90,.4);animation:tvflick .45s steps(2) infinite}
.tv-candle b{width:6px;height:8px;background:#e9e2d4}
@keyframes tvflick{0%{background:#f5c26b}50%{background:#e8a33d}}
.tv-signchain{position:absolute;top:20px;width:2px;height:16px;background:#8d857a}
.tv-sign{position:absolute;left:570px;top:36px;width:130px;background:#2a1c12;border:3px solid #8a5a2b;box-shadow:0 0 0 2px #07060d;padding:5px 0;text-align:center;font:700 10px 'JetBrains Mono',monospace;color:#f5e2b8;line-height:1.35}
.tv-sign div{font-size:11px;color:#f5c26b}
.tv-rug{position:absolute;left:290px;bottom:36px;width:360px;height:12px;background:#7a2219;box-shadow:inset 0 3px 0 #a8352a,0 0 0 2px #07060d;background-image:repeating-linear-gradient(90deg,transparent 0 20px,#f5c26b 20px 22px);z-index:1}
.tv-tables{position:absolute;left:290px;bottom:44px;display:flex;gap:48px;z-index:2}
.tv-table{position:relative;display:flex;gap:10px;align-items:flex-end;min-width:60px;min-height:40px}
.tv-top{position:absolute;left:-12px;right:-12px;bottom:-4px;height:26px;background:#8a5a2b;box-shadow:0 0 0 3px #07060d,inset 0 5px 0 #a8692c}
.tv-patron{position:relative;animation:tvchat 2.6s steps(2) infinite}
@keyframes tvchat{0%{transform:none}50%{transform:translateY(-2px)}}
.tv-tag{font:700 10px 'JetBrains Mono',monospace;text-align:center;color:#f5c26b;text-shadow:1px 1px 0 #000;margin-bottom:2px;white-space:nowrap}
.tv-tag.me{color:#8fd3cc}
.tv-mug{width:10px;height:12px;background:#c9a46b;box-shadow:0 0 0 2px #07060d,inset 0 3px 0 #fff3c4}
.tv-toastL{position:absolute;left:22px;bottom:22px;animation:tvtoastL 5s steps(1) infinite}
.tv-toastR{position:absolute;left:46px;bottom:22px;animation:tvtoastR 5s steps(1) infinite}
@keyframes tvtoastL{0%,60%{transform:none}62%,74%{transform:translate(8px,-14px) rotate(15deg)}76%{transform:none}}
@keyframes tvtoastR{0%,60%{transform:none}62%,74%{transform:translate(-8px,-14px) rotate(-15deg)}76%{transform:none}}
.tv-clink{position:absolute;left:30px;bottom:44px;opacity:0;animation:tvclink 5s steps(1) infinite}
@keyframes tvclink{0%,61%{opacity:0}63%,70%{opacity:1}71%{opacity:0}}
.tv-sip{position:absolute;left:6px;bottom:22px;animation:tvsip 4s steps(1) infinite}
@keyframes tvsip{0%,70%{transform:none}72%,84%{transform:translateY(-6px) rotate(-20deg)}86%{transform:none}}
.tv-bread{position:absolute;left:26px;bottom:22px;width:22px;height:8px;background:#c98a4a;border-radius:6px 6px 2px 2px;box-shadow:0 0 0 2px #07060d,inset 0 2px 0 #e8b06a}
.tv-steam{position:absolute;width:3px;height:8px;background:rgba(233,226,212,.5);opacity:0;animation:tvsteam 2.2s linear infinite}
@keyframes tvsteam{0%{opacity:.6;transform:translateY(0)}100%{opacity:0;transform:translateY(-16px)}}
.tv-tcandle{position:absolute;right:-2px;bottom:22px;display:flex;flex-direction:column;align-items:center}
.tv-tcandle i{width:4px;height:6px;background:#f5c26b;box-shadow:0 0 10px 3px rgba(245,180,90,.4);animation:tvflick .45s steps(2) infinite}
.tv-tcandle b{width:5px;height:9px;background:#e9e2d4;box-shadow:0 0 0 1px #07060d}
.tv-walker{position:absolute;left:0;bottom:40px;z-index:3}
.tv-walker.go{animation:tventer 4.2s linear forwards}
@keyframes tventer{0%{transform:translateX(206px);opacity:0}8%{opacity:1}85%{transform:translateX(var(--to));opacity:1}100%{transform:translateX(var(--to));opacity:0}}
.tv-bard{position:absolute;left:640px;bottom:40px;z-index:2}
.tv-stool{position:absolute;left:6px;bottom:0;width:32px;height:14px;background:#6b4a24;box-shadow:0 0 0 2px #07060d}
.tv-sway{position:relative;bottom:14px;transform-origin:bottom center;animation:tvsway 1.2s steps(2) infinite}
@keyframes tvsway{0%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
.tv-note{position:absolute;left:34px;bottom:60px;font:700 15px 'JetBrains Mono',monospace;color:#f5c26b;text-shadow:1px 1px 0 #000;opacity:0;animation:tvnote 3s linear infinite}
@keyframes tvnote{0%{opacity:0;transform:translate(0,0)}15%{opacity:1}100%{opacity:0;transform:translate(26px,-70px)}}
.tv-shelf{position:absolute;right:24px;width:212px;height:8px;background:#3a2718}
.tv-bottles{position:absolute;right:42px;top:30px;display:flex;gap:12px;align-items:flex-end}
.tv-bottles span{width:10px;box-shadow:0 0 0 2px #07060d}
.tv-mugs{position:absolute;right:50px;top:76px;display:flex;gap:10px}
.tv-mugs span{width:12px;height:14px;background:#c9a46b;box-shadow:0 0 0 2px #07060d}
.tv-keep{position:absolute;right:130px;bottom:122px;z-index:1}
.tv-wipe{position:absolute;left:24px;top:24px;animation:tvwipe .7s steps(2) infinite}
@keyframes tvwipe{0%{transform:translateX(0)}50%{transform:translateX(5px)}}
.tv-bar{position:absolute;right:24px;bottom:40px;width:212px;height:84px;background:#6b4a24;box-shadow:0 0 0 3px #07060d,inset 0 8px 0 #8a5a2b;z-index:2;background-image:repeating-linear-gradient(90deg,transparent 0 40px,#5a3e26 40px 43px)}
.tv-barmug{position:absolute;right:70px;bottom:124px;z-index:3;width:10px;height:12px;background:#c9a46b;box-shadow:0 0 0 2px #07060d,inset 0 3px 0 #fff3c4}
.tv-barrels{position:absolute;right:6px;bottom:40px;z-index:3;display:flex;flex-direction:column}
.tv-barrels span{width:34px;height:30px;background:#8a5a2b;box-shadow:0 0 0 2px #07060d,inset 0 6px 0 #6b4a24,inset 0 -6px 0 #6b4a24;border-radius:6px}
.tv-floor{position:absolute;left:0;right:0;bottom:0;height:40px;border-top:4px solid #3a2718;z-index:4;background-color:#5a3e26;background-image:repeating-linear-gradient(90deg,transparent 0 46px,#47301d 46px 49px)}
.tv-quiet{top:150px;color:#f5e2b8;z-index:5}
@media (prefers-reduced-motion: reduce){.tv-room *{animation:none!important}.tv-walker{display:none}}
