:root{--ink:#202c4c;--yellow:#ffd459;--sky:#cceeff;--pink:#ffd7e8;--green:#bff0bd}*{box-sizing:border-box}body{margin:0;background:#68c9e7;color:var(--ink);font-family:'Black Han Sans',sans-serif}.app{max-width:560px;min-height:100vh;margin:auto;padding:16px 15px 96px;background:#fff6d8;border-inline:4px solid var(--ink)}button,input,textarea{font:inherit;color:var(--ink)}button{cursor:pointer;border:3px solid var(--ink);box-shadow:3px 3px 0 var(--ink)}button:active{transform:translate(2px,2px);box-shadow:1px 1px 0 var(--ink)}.logo{display:block;margin:auto;border:0;box-shadow:none;background:none;font:18px 'Press Start 2P';color:#2f599c}.logo span{color:#ff6e78}.tagline,.sub,.daily{text-align:center;color:#66769d;margin:8px 0 15px;font-size:14px}.page{display:none}.page.active{display:block}h1{text-align:center;font-size:28px;margin:18px 0 0}.hero{position:relative;overflow:hidden;border:3px solid var(--ink);height:170px}.hero img{width:100%;height:100%;object-fit:cover}.hero b{position:absolute;left:12px;bottom:10px;color:#fff;font:19px 'Press Start 2P';line-height:1.5;text-shadow:3px 3px #263553}.home-menu{display:grid;gap:15px;margin-top:18px}.home-menu button{padding:0;background:#fff;text-align:left;overflow:hidden}.home-menu img{width:100%;height:108px;display:block;object-fit:cover}.home-menu strong,.home-menu small{display:block;padding:3px 9px}.home-menu strong{font-size:18px}.home-menu small{color:#66769d;padding-bottom:8px}.cat-door{margin:20px 0 0 auto;display:flex;align-items:center;gap:7px;background:#ffd2a0;padding:4px 10px}.cat-door img{height:38px;width:55px;object-fit:cover;object-position:center}.head-row{display:flex;align-items:center;justify-content:center;position:relative}.head-row h1{margin-inline:auto}.admin-button{position:absolute;right:0;font-size:12px;background:#e7e7ee;padding:6px}.bracket{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;align-items:start}.round{display:grid;gap:8px}.round h2{font-size:13px;text-align:center;margin:4px 0}.match{min-height:59px;padding:4px;background:#fff;border:2px solid var(--ink);font-size:11px;text-align:center}.match button{width:100%;border:0;box-shadow:none;background:#fff;padding:2px;font-size:11px}.match button:not(:last-child){border-bottom:1px dashed #8994ac}.match button:disabled{color:#aeb4c2}.match .won{background:var(--yellow)}.champion{text-align:center;background:var(--yellow);border:3px solid var(--ink);padding:15px;margin:18px;font-size:22px;animation:pop .8s infinite alternate}.picks{display:grid;grid-template-columns:1fr 1fr;gap:9px}.picks h2{font-size:16px;text-align:center}.pick-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:7px}.pick{min-height:70px;background:#fff;padding:4px;font-size:12px}.pick img{display:block;width:100%;height:37px;object-fit:cover}.pick.selected{background:var(--yellow);outline:3px solid #ff8179}.big-button{display:block;width:100%;padding:11px;margin:18px 0 10px;background:var(--yellow);font-size:19px}.big-button:disabled{background:#d7dbe2;color:#7b8496;box-shadow:none}.random-battle{background:#d9c8ff;border:3px solid var(--ink);padding:15px;text-align:center;font-size:19px}.random-battle img,.modal-fight img{width:41%;height:110px;object-fit:cover;border:3px solid var(--ink)}.writer{padding:13px;background:var(--sky);border:3px solid var(--ink);box-shadow:4px 4px #7384aa;display:grid;gap:9px}.writer input,.writer textarea,.comment input,dialog input{border:3px solid var(--ink);padding:8px;background:#fff}.writer textarea{min-height:80px}.writer label,.writer button{padding:8px;text-align:center;background:var(--yellow);border:3px solid var(--ink)}.writer input[type=file]{display:none}.post,.cat{margin:16px 0;padding:13px;background:#fff;border:3px solid var(--ink);box-shadow:4px 4px #8491ac}.post.best{border-color:#e29316;background:#fff7b5}.post h2,.cat h2{margin:0;font-size:20px}.post p,.cat p{margin:6px 0}.post img{max-width:100%;max-height:200px;border:2px solid var(--ink)}.reaction{display:flex;gap:9px;margin:10px 0}.reaction button{padding:5px 8px;background:#fff}.delete{background:#ffb0af!important}.comment{display:grid;grid-template-columns:1fr auto;gap:6px}.comment button{background:var(--green);padding:4px 9px}.comment-list{grid-column:1/-1;font-family:system-ui;font-size:13px}.comment-list p{border-top:1px dashed #9da7bd;padding:6px 2px;margin:0}.cat{background:var(--pink);display:grid;grid-template-columns:96px 1fr;gap:10px}.cat>img{width:96px;height:96px;object-fit:cover;border:2px solid var(--ink)}.cat .reaction,.cat .comment{grid-column:1/-1}nav{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:min(560px,100%);display:flex;justify-content:space-around;padding:8px;background:#273858;border:3px solid var(--ink)}nav button{background:#fff;padding:5px 16px;font-size:22px}nav small{display:block;font:8px 'Press Start 2P'}dialog{width:min(450px,90vw);border:4px solid var(--ink);background:#fff6d8;color:var(--ink);text-align:center}.x{float:right;background:#ffb0af;font-size:25px}.modal-fight{display:flex;align-items:center;justify-content:center;gap:8px;margin:13px 0}.modal-fight span{font:17px 'Press Start 2P';color:#e84e5b}dialog::backdrop{background:#17213caa}@keyframes pop{to{transform:scale(1.04)}}@media(max-width:390px){.bracket{grid-template-columns:repeat(2,1fr)}h1{font-size:24px}}
body nav button{width:30%;padding:5px 8px;font-size:22px}body .cat-door{display:none}body #catRunner{position:fixed;z-index:6;bottom:59px;left:12%;display:flex;align-items:center;gap:3px;padding:2px 5px;background:#ffd2a0;animation:cat-run 7s ease-in-out infinite}#catRunner img{width:42px;height:35px;object-fit:cover}#catRunner span{font-size:11px}.match button img{width:18px!important;height:18px!important;object-fit:contain}.match button{display:flex;align-items:center;gap:3px;text-align:left}.modal-fight img,.random-battle img{object-fit:contain;background:#dceeff}.writer .file-label{cursor:pointer}.writer #fileName{text-align:center;font-family:system-ui;color:#52617f}@keyframes cat-run{0%,100%{left:12%}45%{left:calc(88% - 100px)}70%{left:35%}}

/* Page identities and the shared pixel-world navigation. */
.hidden{display:none!important}
.app{padding-bottom:172px}
.hero{height:auto;border:0;overflow:visible;text-align:center;padding:28px 0 18px}
.hero b{position:static;display:block;color:#2f599c;text-shadow:2px 2px #fff;font-size:24px}
.hero p{color:#66769d;font-size:14px;margin:12px 0 0}
.page:not(#home){padding:18px 12px 24px;margin:18px -4px 0;border-top:6px solid var(--page-accent);background:var(--page-bg)}
#ranking{--page-accent:#8076d4;--page-bg:#eeeaff}
#bugbattle{--page-accent:#4a9660;--page-bg:#e5f3dd}
#board{--page-accent:#bc8744;--page-bg:#f7ecd7}
#cats{--page-accent:#c57498;--page-bg:#ffedf4}
.page:not(#home) h1{margin:8px 0;color:var(--page-accent)}
.head-row{flex-wrap:wrap;gap:10px}.head-row .admin-button{position:static}
.round h2{padding:7px 0;background:#51467b;color:#fff}
.match{box-shadow:2px 2px #b2a7d0}.match button{min-height:32px}
.match button img{flex:none}
.champion img{width:42px;height:42px;object-fit:contain;vertical-align:middle}
.picks>div{min-width:0;padding:8px;background:#ffffffa8}
.picks h2{font-size:14px;color:#356740}
.pick img{height:60px;object-fit:contain}.pick{min-height:92px}
.pick.selected{outline:3px solid #41875a;background:#ddffc0}
.random-battle{background:#f4ffdf;border-color:#4a9660}
nav.world-nav{z-index:10;height:142px;border:0;background:linear-gradient(transparent 0%,#bde6ed 45%,#bde6ed 70%,transparent 70%);padding:0;display:block;overflow:hidden}
.world-icons{position:absolute;inset:12px 14px 38px;display:flex;justify-content:space-around;align-items:end}
body nav.world-nav .world-icons button{position:relative;width:30%;padding:0 4px 5px;border:0;box-shadow:none;background:transparent;display:grid;justify-items:center;gap:4px}
.world-icons img{width:46px;height:46px;object-fit:contain;mix-blend-mode:multiply;image-rendering:pixelated}
.world-icons .book-icon{font-size:38px;line-height:46px}
.world-icons small{font:12px 'Black Han Sans',sans-serif;background:#fff6d8;padding:3px 7px;color:#344e35}
.world-icons button[aria-current="page"] small{background:#ffe174;box-shadow:0 3px #567f43}
.world-icons button:hover img{transform:translateY(-5px)}
.ground{position:absolute;bottom:0;left:0;right:0;height:38px;border-top:9px solid #71b44d;background:repeating-linear-gradient(90deg,transparent 0 25px,#66482755 25px 31px),repeating-linear-gradient(0deg,#8c6138 0 12px,#9c7043 12px 24px);box-shadow:0 -4px #416d34;pointer-events:none}
body nav.world-nav #catRunner{position:absolute;z-index:2;bottom:33px;left:4%;width:62px;height:55px;display:block;padding:0;border:0;background:transparent;box-shadow:none;animation:ground-cat 12s linear infinite}
body #catRunner img{width:60px;height:52px;object-fit:contain;mix-blend-mode:multiply;image-rendering:pixelated}
#catRunner span{position:absolute;top:-8px;left:10px;white-space:nowrap;background:#fff6d8;font-size:10px;padding:2px 4px}
#catRunner:focus-visible{animation-play-state:paused;outline:3px dashed #324d31}
@keyframes ground-cat{0%{left:3%;transform:scaleX(1)}48%{left:calc(97% - 62px);transform:scaleX(1)}50%{left:calc(97% - 62px);transform:scaleX(-1)}98%{left:3%;transform:scaleX(-1)}100%{left:3%;transform:scaleX(1)}}

/* Combat is rendered with the supplied character art, not a video file. */
#battleModal{width:min(600px,96vw);padding:14px;background:#182536;color:#fff;border-color:#a8c779}
#battleModal h2{font-size:18px;margin:10px 34px 16px}
#modalResult{min-height:28px;color:#ffdf73;font-size:21px}
.modal-fight.arena{position:relative;display:block;isolation:isolate;height:290px;overflow:hidden;border:3px solid #0c1621;background:linear-gradient(#234462 0%,#78a6ac 65%,#527b47 65%);margin:12px 0}
.arena::before{content:"";position:absolute;inset:40% 0 25%;background:repeating-linear-gradient(90deg,#2e554377 0 40px,transparent 40px 64px);clip-path:polygon(0 25%,10% 25%,10% 0,30% 0,30% 40%,55% 40%,55% 10%,75% 10%,75% 50%,100% 50%,100% 100%,0 100%)}
.health-row{position:absolute;z-index:3;top:12px;left:10px;right:10px;display:flex;justify-content:space-between;gap:18px}
.health-row label{width:45%;font-size:12px;text-align:left;color:#fff}
.health-row label:last-child{text-align:right}
.health-row progress{display:block;appearance:none;width:100%;height:12px;margin-top:7px;border:2px solid #172a24;background:#472e34}
progress::-webkit-progress-bar{background:#472e34}progress::-webkit-progress-value{background:#8fe358;transition:width .3s}progress::-moz-progress-bar{background:#8fe358}
.arena .fighter{position:absolute;bottom:39px;width:34%;height:140px;z-index:2}
.fighter-left{left:6%}.fighter-right{right:6%}
.arena .fighter img{width:100%;height:100%;border:0;object-fit:contain;background:transparent;filter:drop-shadow(0 8px 3px #10241b80);image-rendering:pixelated}
.arena-floor{position:absolute;inset:auto 0 0;height:40px;border-top:7px solid #82be4a;background:repeating-linear-gradient(90deg,#745038 0 30px,#835f40 30px 60px)}
.combat-caption{position:absolute;z-index:4;top:74px;left:0;right:0;font-size:22px;color:#ffe77b;text-shadow:2px 2px #172533}
.impact{position:absolute;z-index:3;left:42%;top:48%;font-size:64px;color:#ffe882;opacity:0;text-shadow:0 0 12px #fff}
.fighter-left.attack{animation:attack-left .52s ease-in-out}.fighter-right.attack{animation:attack-right .52s ease-in-out}
.fighter.hit{animation:hit .5s ease-out}.arena.shake{animation:shake .3s .18s}.shake .impact{animation:impact .5s}
.fighter.defeated{opacity:.35;transform:translateY(22px) rotate(15deg);transition:all .5s}
.fighter.victorious{animation:celebrate .7s ease-in-out infinite alternate}
.arena.finished .impact{opacity:1;top:26%;font-size:42px;animation:celebrate .8s infinite alternate}
@keyframes attack-left{50%{transform:translateX(70%) rotate(-12deg)}}
@keyframes attack-right{50%{transform:translateX(-70%) rotate(12deg)}}
@keyframes hit{45%{filter:brightness(2);transform:translateY(-8px) rotate(8deg)}}
@keyframes shake{25%,75%{translate:-4px 0}50%{translate:4px 0}}
@keyframes impact{30%,65%{opacity:1;transform:scale(1.3)}}
@keyframes celebrate{to{transform:translateY(-10px)}}
@media(max-width:390px){.page:not(#home){padding:12px 6px}.picks{gap:5px}.picks>div{padding:5px}.hero b{font-size:22px}.arena .fighter{height:110px}.modal-fight.arena{height:255px}.health-row label{font-size:10px}}
@media(prefers-reduced-motion:reduce){body nav.world-nav #catRunner{animation-duration:35s}.arena.shake,.fighter.attack,.fighter.hit,.fighter.victorious,.arena.finished .impact{animation:none}}

.arena.grand-finale{background:radial-gradient(ellipse at 72% 50%,#c098ff 0,#5b3592 30%,#172438 75%)}
.grand-finale .fighter.defeated,.grand-finale .health-row,.grand-finale .impact{opacity:0}
.grand-finale .fighter.victorious{left:30%;right:auto;bottom:30px;width:40%;height:155px;animation:champion-entrance 1.1s ease-out both;filter:drop-shadow(0 0 16px #d1a2ff)}
.grand-finale .combat-caption{top:20px;color:#ffe394;font-size:23px}
.victory-crown{position:absolute;z-index:5;left:0;right:0;top:51px;font-size:40px;color:#ffdf66;animation:crown-descend 1s ease-out both}
.victory-confetti{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:4}
.victory-confetti i{position:absolute;left:var(--x);top:-18px;width:7px;height:13px;background:hsl(var(--hue) 95% 72%);animation:confetti-fall 2.6s var(--delay) ease-in infinite}
#champion{background:radial-gradient(ellipse at top,#f8e9ac,#dac6fa);border-color:#756093;animation:none;padding:22px 12px}
#champion small,#champion b{display:block}#champion small{font:10px 'Press Start 2P';color:#756093;line-height:1.8}
#champion img{display:block;width:125px;height:135px;object-fit:contain;margin:16px auto;filter:drop-shadow(0 8px 9px #5b358555)}
#champion p{font-size:13px;color:#685477}
@keyframes champion-entrance{from{transform:scale(.5) translateY(35px);opacity:0}70%{transform:scale(1.08)}to{transform:scale(1);opacity:1}}
@keyframes crown-descend{from{transform:translateY(-25px);opacity:0}to{transform:translateY(0);opacity:1}}
@keyframes confetti-fall{to{transform:translateY(340px) rotate(420deg);opacity:.15}}
@media(prefers-reduced-motion:reduce){.victory-confetti i{animation:none;top:var(--x)}.grand-finale .fighter.victorious,.victory-crown{animation:none}}

body #catRunner img{mix-blend-mode:normal}

/* Keep forms and long user text within narrow phone screens. */
.writer,.writer input,.writer textarea,.comment input{min-width:0;width:100%}
.comment{grid-template-columns:minmax(0,1fr) auto}
.post,.cat,.post h2,.post p,.comment-list{min-width:0;overflow-wrap:anywhere}
.post>p,.comment-list p{white-space:pre-wrap}
.reaction{flex-wrap:wrap}
