@import "https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=DM+Sans:opsz,wght@9..40,400;9..40,500;9..40,600;9..40,700&family=Fraunces:opsz,wght@9..144,600;9..144,700&display=swap";:root{--ink:#17232e;--muted:#697680;--paper:#f5f1e8;--cream:#fffdfa;--line:#dcd8ce;--red:#e65142;--red-dark:#c94337;--dark:#14212c;--teal:#1c3c40;--teal-light:#a6ded2;--hp-healthy:#4fae74;--hp-warning:#e2ae3f;--hp-danger:#e65142;--font-serif:"Fraunces", Georgia, serif;--font-mono:"DM Mono", monospace;--font-sans:"DM Sans", Arial, sans-serif}*{box-sizing:border-box}html{background:var(--paper);min-width:320px}body{min-width:320px;font-family:var(--font-sans);margin:0}button,input{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed}:focus-visible{outline:2px solid var(--red);outline-offset:2px}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.is-pixel{image-rendering:pixelated}.app-shell{min-height:100svh;color:var(--ink);background:radial-gradient(circle at 77% 0%, #cde7e1b8, transparent 29rem), var(--paper);overflow-x:clip}.eyebrow{color:var(--red);font:500 10px/1.4 var(--font-mono);letter-spacing:.13em;display:block}.topbar{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);z-index:20;background:#fffdfad1;border-bottom:1px solid #17232e1f;justify-content:space-between;align-items:center;gap:12px;height:76px;padding:0 clamp(20px,4vw,68px);display:flex;position:sticky;top:0}.brand{font:700 20px/1 var(--font-mono);letter-spacing:-1px;color:var(--ink);background:0 0;border:0;align-items:center;gap:9px;padding:0;display:flex}.brand>span:last-child span{color:var(--red)}nav{gap:29px;height:100%;display:flex}nav button{color:var(--muted);background:0 0;border:0;padding:2px 0 0;font-size:14px;font-weight:600;position:relative}nav button:hover,nav button.active{color:var(--ink)}nav button.active:after{content:"";background:var(--red);bottom:0;border-radius:4px;height:3px;position:absolute;inset-inline:0}.top-actions{align-items:center;gap:18px;display:flex}.team-count{font-family:var(--font-mono);align-items:center;gap:8px;display:flex}.team-count span{color:var(--muted);letter-spacing:.1em;font-size:10px}.team-count strong{font-size:16px}.team-count em{color:#8d989f;font-style:normal;font-weight:400}.pokeball-mark{width:22px;height:22px;color:var(--red);border:2px solid;border-radius:50%;flex:none;place-items:center;display:inline-grid;position:relative}.pokeball-mark:before{content:"";background:currentColor;width:100%;height:2px;position:absolute;top:calc(50% - 1px);left:0}.pokeball-mark i{z-index:1;background:var(--cream);border:2px solid;border-radius:50%;width:36%;height:36%;position:relative}.type-row{flex-wrap:wrap;gap:4px;display:flex}.type-tag{--type:#7c8790;background:color-mix(in srgb, var(--type) 13%, transparent);min-height:18px;color:color-mix(in srgb, var(--type) 85%, black);text-transform:uppercase;font:600 8px/1 var(--font-mono);letter-spacing:.04em;border-radius:3px;align-items:center;padding:2px 6px;display:inline-flex}.type-tag-solid{background:var(--type);color:#fff}.button-outline{border:1px solid var(--ink);font:600 11px var(--font-mono);color:var(--ink);background:0 0;flex:none;padding:10px 14px}.button-outline:hover:not(:disabled){color:#fff;background:var(--ink)}.button-primary{border:1px solid var(--red);background:var(--red);color:#fff;align-items:center;gap:9px;padding:10px 16px;font-size:12px;font-weight:700;display:inline-flex}.button-primary .pokeball-mark{color:#fff;width:18px;height:18px}.button-primary .pokeball-mark i{background:var(--red)}.button-primary:hover:not(:disabled){background:var(--red-dark);border-color:var(--red-dark)}.audio-controls{align-items:center;gap:4px;display:flex;position:relative}.music-button,.audio-settings-toggle{color:#4b6262;font:500 9px var(--font-mono);letter-spacing:.03em;background:#e4eee8;border:0;border-radius:3px;padding:6px 8px}.audio-settings-toggle{padding:4px 7px;font-size:12px;line-height:1}.music-button:hover,.audio-settings-toggle:hover,.audio-settings-toggle[aria-expanded=true]{color:#fff;background:var(--ink)}.music-button.muted{color:#8e9697;box-shadow:inset 0 0 0 1px var(--line);background:0 0}.audio-settings{z-index:30;background:var(--cream);border:1px solid var(--line);gap:12px;width:220px;padding:14px;display:grid;position:absolute;top:calc(100% + 10px);right:0;box-shadow:8px 8px #17232e14}.audio-settings label{gap:6px;display:grid}.audio-settings span{color:var(--muted);font:600 9px var(--font-mono);letter-spacing:.06em;text-transform:uppercase;justify-content:space-between;display:flex}.audio-settings b{color:var(--ink)}.audio-settings input{width:100%;accent-color:var(--red)}.sprite-fallback{color:#fff;font:700 30px var(--font-serif);background:#8ba8a4;border-radius:50%;place-items:center;display:grid}@media (width<=760px){.topbar{height:64px;padding:0 14px}.brand{font-size:17px}nav{gap:15px}nav button{font-size:12px}.team-count span{display:none}.top-actions{gap:10px}.music-button{padding:5px 7px;font-size:0}.music-button:first-letter{font-size:14px}}@media (width<=400px){.brand>span:last-child{display:none}nav{gap:12px}}.landing-page{grid-template-columns:minmax(310px,.9fr) minmax(360px,1.1fr);align-items:center;gap:clamp(38px,7vw,120px);max-width:1500px;min-height:calc(100svh - 76px);margin:auto;padding:clamp(43px,7vw,112px) clamp(26px,7vw,112px) 72px;display:grid;position:relative}.landing-page:before{content:"";background:linear-gradient(90deg,#0000,#17232e1f,#0000);height:1px;position:absolute;inset:0 0 auto}.landing-copy{z-index:2;position:relative}.landing-kicker{color:#53686a;font:600 12px var(--font-mono);margin:14px 0 4px}.landing-copy h1{font:700 clamp(59px,7.1vw,108px)/.84 var(--font-serif);letter-spacing:-6px;margin:0}.landing-copy h1 i{color:var(--red)}.landing-summary{max-width:460px;color:var(--muted);margin:28px 0 27px;font-size:16px;line-height:1.7}.landing-actions{align-items:center;gap:18px;display:flex}.landing-cta{border:1px solid var(--red);color:#fff;background:var(--red);align-items:center;gap:10px;min-height:53px;padding:0 17px;font-size:13px;font-weight:700;transition:transform .15s,background .15s;display:flex}.landing-cta .pokeball-mark{color:#fff}.landing-cta .pokeball-mark i{background:var(--red)}.landing-cta span{margin-left:8px;font-size:20px;line-height:1;transition:transform .15s}.landing-cta:hover{background:var(--red-dark)}.landing-cta:hover span{transform:translate(4px)}.landing-ghost{color:var(--ink);background:0 0;border:0;padding:12px 0;font-size:12px;font-weight:700}.landing-ghost:hover{color:var(--red)}.landing-stats{margin-top:45px;display:flex}.landing-stats div{border-left:1px solid var(--line);min-width:110px;padding:0 17px}.landing-stats div:first-child{border-left:0;padding-left:0}.landing-stats b,.landing-stats span{display:block}.landing-stats b{font:700 24px/1 var(--font-serif)}.landing-stats span{color:var(--muted);margin-top:5px;font-size:9px}.landing-visual{background:linear-gradient(148deg,#bce2d8 0%,#a0d1ce 48%,#70aca2 48.2%,#396c69 100%);border:1px solid #21454440;min-height:490px;position:relative;overflow:hidden;box-shadow:18px 18px #2f4b461f}.landing-visual:before{content:"";opacity:.32;background-image:linear-gradient(#ffffff42 1px,#0000 1px),linear-gradient(90deg,#ffffff42 1px,#0000 1px);background-size:30px 30px;position:absolute;inset:0}.landing-sun{aspect-ratio:1;opacity:.87;background:#fae8a9;border-radius:50%;width:310px;position:absolute;top:49px;left:50%;transform:translate(-50%)}.orbit{border:1px solid #fff9;border-radius:50%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)rotate(-18deg)}.orbit-one{width:440px;height:178px}.orbit-two{width:315px;height:390px}.landing-ball{color:#fffdfaad;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.landing-ball .pokeball-mark{border-width:5px;width:97px;height:97px}.landing-ball .pokeball-mark:before{height:5px;top:calc(50% - 2.5px)}.landing-ball .pokeball-mark i{background:#b8e0d8;border-width:5px}.landing-mon{z-index:2;filter:drop-shadow(0 18px 10px #0e36343d);animation:4s ease-in-out infinite hero-float;position:absolute}.landing-sprite{object-fit:contain;width:100%;height:100%}.mon-0{--tilt:-7deg;width:250px;height:250px;bottom:19px;left:29px}.mon-1{--tilt:5deg;width:170px;height:170px;animation-delay:-1.3s;top:48px;right:24px}.mon-2{--tilt:7deg;width:185px;height:185px;animation-delay:-2.6s;bottom:30px;right:13px}.landing-loading{z-index:2;color:#3d726d;text-align:center;font:500 11px/1.6 var(--font-mono);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.visual-caption{z-index:3;color:#e6fffa;gap:4px;display:grid;position:absolute;bottom:17px;left:19px}.visual-caption span{font:500 8px var(--font-mono);letter-spacing:.13em}.visual-caption b{font:600 12px var(--font-sans)}.landing-rules{border-top:1px solid var(--line);color:#567172;font:600 10px var(--font-mono);letter-spacing:.04em;grid-column:1/-1;justify-content:space-between;padding-top:20px;display:flex}.landing-rules p{margin:0}.landing-rules i{color:var(--red);padding:0 5px;font-style:normal}@keyframes hero-float{0%,to{transform:rotate(var(--tilt)) translateY(0)}50%{transform:rotate(var(--tilt)) translateY(-8px)}}@media (width<=1050px){.landing-page{grid-template-columns:minmax(280px,.9fr) minmax(310px,1.1fr);gap:45px;padding-inline:45px}.landing-copy h1{font-size:clamp(57px,7vw,84px)}}@media (width<=760px){.landing-page{flex-direction:column;align-items:stretch;gap:35px;min-height:calc(100svh - 64px);padding:38px 21px 42px;display:flex}.landing-copy h1{letter-spacing:-4px;font-size:62px}.landing-summary{margin:20px 0 22px;font-size:14px}.landing-stats{margin-top:34px}.landing-stats div{flex:1;min-width:0;padding:0 12px}.landing-stats b{font-size:20px}.landing-visual{min-height:345px;box-shadow:9px 9px #2f4b461f}.landing-sun{width:225px;top:30px}.orbit-one{width:320px;height:125px}.orbit-two{width:210px;height:275px}.landing-ball .pokeball-mark{border-width:4px;width:65px;height:65px}.mon-0{width:185px;height:185px;bottom:6px;left:12px}.mon-1{width:125px;height:125px;top:21px;right:6px}.mon-2{width:136px;height:136px;bottom:11px;right:-7px}.landing-rules{text-align:center;padding-top:16px;line-height:1.8;display:block}.landing-rules p{margin-top:6px;font-size:8px}}@media (prefers-reduced-motion:reduce){.landing-mon{transform:rotate(var(--tilt));animation:none}}.pokedex-layout{max-width:1090px;margin:auto;padding:clamp(28px,5vw,68px) clamp(17px,5vw,68px)}.pokedex-main{min-width:0}.page-heading{justify-content:space-between;align-items:flex-start;gap:30px;margin-bottom:35px;display:flex}.page-heading h1{font:700 clamp(41px,5.1vw,72px)/.98 var(--font-serif);letter-spacing:-3.4px;margin:10px 0 14px}.page-heading h1 i{color:var(--red)}.page-heading p{max-width:505px;color:var(--muted);font-size:15px;line-height:1.65}.heading-actions{align-items:flex-start;gap:9px;display:flex}.generation-badge{border:1px solid var(--line);text-align:center;background:#fffdfa99;flex:none;min-width:94px;padding:13px 10px 10px}.generation-badge span,.generation-badge small{font:500 9px/1.1 var(--font-mono);letter-spacing:.08em;color:var(--muted);display:block}.generation-badge b{font:700 16px/1 var(--font-sans);margin:5px 0 4px;display:block}.show-roster{border:1px solid var(--line);color:var(--ink);font:600 9px var(--font-mono);white-space:nowrap;background:#fffdfabd;padding:8px 9px}.show-roster b,.roster-fab b{color:var(--red)}.show-roster:hover{color:#fff;background:var(--ink);border-color:var(--ink)}.search-box{border:1px solid var(--line);background:var(--cream);align-items:center;height:58px;display:flex;box-shadow:0 6px 24px #2e372c08}.search-box:focus-within{border-color:var(--ink)}.search-icon{color:var(--muted);padding:0 12px 5px 18px;font:400 31px/1 Georgia,serif;transform:rotate(-20deg)}.search-box input{min-width:0;color:var(--ink);background:0 0;border:0;outline:0;flex:1;font-size:14px}.search-box input::placeholder{color:#a0a7a8}.search-box button{color:var(--cream);background:var(--ink);border:0;align-self:stretch;padding:0 23px;font-size:13px;font-weight:600;transition:background .2s}.search-box button:hover{background:var(--red)}.search-box button:disabled{opacity:.55}.search-status{min-height:18px;color:var(--muted);font:500 10px var(--font-mono);margin:9px 2px 24px}.section-line{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;margin-bottom:18px;padding-bottom:12px;font-size:13px;font-weight:700;display:flex}.section-line small{color:var(--muted);font:500 9px var(--font-mono);letter-spacing:.08em}.dex-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;display:grid}.loading-cards{text-align:center;color:var(--muted);font:500 13px var(--font-mono);grid-column:1/-1;padding:55px}.loading-cards span{color:var(--red);margin-left:6px}.pokemon-card{border:1px solid var(--line);background:#fffdfaba;flex-direction:column;justify-content:flex-end;min-height:248px;padding:14px 15px 13px;transition:transform .22s,box-shadow .22s,border-color .22s;display:flex;position:relative;overflow:hidden}.pokemon-card:hover{border-color:#bdc8c1;transform:translateY(-4px);box-shadow:0 16px 25px #232f2a14}.pokemon-card.is-selected{border-color:var(--red);background:#fff9f6}.card-topline{color:#849096;font:500 10px var(--font-mono);justify-content:space-between;display:flex;position:absolute;top:12px;left:14px;right:14px}.card-ball{color:#bdc7c4;transform:scale(.65)}.pokemon-card.is-selected .card-ball{color:var(--red)}.pokemon-inspect{width:100%;color:inherit;text-align:left;background:0 0;border:0;flex-direction:column;flex:1;justify-content:flex-end;padding:0;display:flex}.pokemon-inspect:hover .card-copy h3{color:var(--red)}.dex-sprite{object-fit:contain;filter:drop-shadow(0 10px 9px #17232e26);pointer-events:none;width:100%;height:116px;margin:15px auto 0;transition:transform .22s}.pokemon-card:hover .dex-sprite{transform:scale(1.07)translateY(-3px)}.card-copy{border-top:1px solid #17232e1a;padding-top:9px}.card-copy h3{font:700 16px/1.1 var(--font-serif);letter-spacing:-.5px;margin:0 0 7px}.card-action{color:var(--red);text-align:left;font:600 10px var(--font-mono);letter-spacing:-.04em;background:0 0;border:0;padding:10px 0 0}.card-action:hover{text-decoration:underline}.card-action.remove{color:var(--muted)}.roster-fab{z-index:15;border:1px solid var(--ink);color:#fff;background:var(--ink);font:600 11px var(--font-mono);padding:12px 16px;position:fixed;bottom:clamp(14px,3vw,32px);right:clamp(14px,3vw,32px);box-shadow:6px 6px #17232e26}.roster-fab:hover{background:var(--red);border-color:var(--red)}.roster-fab b{color:#ffb4ab}@media (width<=1050px){.dex-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width<=760px){.pokedex-layout{padding:32px 14px 80px}.page-heading{gap:12px;margin-bottom:26px}.page-heading h1{letter-spacing:-2.2px}.generation-badge,.section-line small{display:none}.search-box{height:53px}.search-box button{padding:0 14px}.dex-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:9px}.pokemon-card{min-height:210px;padding:11px}.dex-sprite{height:94px}.card-copy h3{font-size:15px}}@media (width<=380px){.pokemon-card{min-height:195px}.type-tag{font-size:7px}}.modal-backdrop{z-index:50;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);background:#0b1a1f94;place-items:center;padding:22px;animation:.18s ease-out both modal-fade;display:grid;position:fixed;inset:0;overflow:auto}.modal-backdrop>section{outline:none}.detail-modal,.roster-modal,.result-modal{width:min(700px,100%);color:var(--ink);background:#fffdf8;animation:.27s cubic-bezier(.2,.85,.25,1.15) both modal-pop;position:relative;box-shadow:0 22px 70px #06141a5e}.modal-close{border:1px solid var(--line);color:#607072;background:#fffdf8;place-items:center;width:30px;height:30px;font-size:22px;line-height:1;display:grid}.modal-close:hover{color:#fff;border-color:var(--red);background:var(--red)}.detail-modal>.modal-close{z-index:3;position:absolute;top:15px;right:15px}.detail-hero{color:#f8fffd;background:linear-gradient(136deg,#1b4648,#31746d);justify-content:space-between;align-items:center;min-height:238px;padding:29px 35px;display:flex;position:relative;overflow:hidden}.detail-hero:after{content:"";border:1px solid #ffffff40;border-radius:50%;width:310px;height:310px;position:absolute;top:-100px;right:-65px}.detail-hero .eyebrow{color:#afe0d3}.detail-hero h2{font:700 42px/1 var(--font-serif);letter-spacing:-2px;margin:8px 0 10px}.detail-hero .type-tag{color:#fff;background:#ffffff24}.detail-sprite{z-index:1;object-fit:contain;filter:drop-shadow(0 14px 9px #00000042);width:205px;height:205px}.cry-button{color:#fff;font:600 9px var(--font-mono);background:#ffffff1f;border:1px solid #fff6;margin-top:14px;padding:7px 9px}.cry-button:hover{background:#ffffff3d}.detail-grid{grid-template-columns:1.2fr .8fr;gap:29px;padding:28px 35px 32px;display:grid}.detail-grid h3{font:700 17px var(--font-serif);margin:0 0 15px}.stat-list{gap:9px;display:grid}.stat-list>div{grid-template-columns:62px 1fr 30px;align-items:center;gap:8px;display:grid}.stat-list span,.matchup-list>div>span{color:var(--muted);font:600 9px var(--font-mono);text-transform:uppercase}.stat-list i{background:#e1e6df;height:6px;overflow:hidden}.stat-list i b{background:linear-gradient(90deg, #48a98f, var(--red));height:100%;display:block}.stat-list strong{color:#3d5555;text-align:right;font:600 11px var(--font-mono)}.matchup-list{border-left:1px solid var(--line);padding-left:26px}.matchup-list>div+div{margin-top:14px}.matchup-list .type-row{margin-top:6px}.roster-modal{color:#eef7f4;background:#153036;width:min(520px,100%);padding:27px}.roster-modal .eyebrow{color:#78c8b7}.roster-modal-head{border-bottom:1px solid #eef7f42b;justify-content:space-between;padding-bottom:17px;display:flex}.roster-modal-head h2{font:700 29px/1 var(--font-serif);letter-spacing:-1px;margin:5px 0}.roster-modal-head p{color:#9eb9b5;max-width:290px;margin:0;font-size:11px;line-height:1.5}.roster-modal-head>div:last-child{align-items:flex-start;gap:10px;display:flex}.roster-count{color:#a7e0d4;font:500 11px var(--font-mono)}.team-slots{grid-template-columns:1fr 1fr;gap:7px;padding:17px 0;display:grid}.team-slot{color:#eef4ef73;border:1px dashed #eef4ef2e;align-items:center;gap:9px;min-height:58px;padding:5px 7px;display:flex}.team-slot.filled{color:#f6fbf8;background:#ffffff0a;border-style:solid;border-color:#78c8b759}.slot-number{text-align:center;color:#eef4ef47;width:29px;font:500 10px var(--font-mono)}.slot-sprite{object-fit:contain;width:44px;height:44px}.slot-detail{flex:1;gap:2px;min-width:0;display:grid}.slot-detail strong{white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.slot-detail small{color:#a6b8b8;font-size:9px}.slot-remove{color:#98c5bd;background:0 0;border:0;padding:3px;font-size:19px}.slot-remove:hover{color:#fff}.rule-note{border-top:1px solid #eef4ef2b;gap:5px;padding:15px 0;display:grid}.rule-note b{font:600 10px var(--font-mono);letter-spacing:.06em;color:#bce4dc;text-transform:uppercase}.rule-note span{color:#9dadb0;font-size:10px;line-height:1.5}.challenge-button{background:var(--red);color:#fff;border:1px solid #e8695d;justify-content:center;align-items:center;gap:9px;width:100%;min-height:48px;font-size:12px;font-weight:700;display:flex}.challenge-button .pokeball-mark{color:#fff}.challenge-button .pokeball-mark i{background:var(--red)}.challenge-button:hover:not(:disabled){background:var(--red-dark)}.challenge-button:disabled{opacity:.43}.notice{color:#9eadb0;text-align:center;min-height:26px;margin:13px 0 0;font-size:10px;line-height:1.45}.result-backdrop{z-index:60}.result-modal{text-align:center;width:min(415px,100%);padding:40px 35px 35px}.result-modal>.pokeball-mark{width:45px;height:45px;margin-bottom:17px}.result-modal.won>.pokeball-mark{color:#3e9878}.result-modal .eyebrow{color:#3f927a}.result-modal.lost .eyebrow{color:var(--red)}.result-modal h2{font:700 43px/1 var(--font-serif);letter-spacing:-2px;margin:9px 0 11px}.result-modal p{max-width:302px;color:var(--muted);margin:0 auto 23px;font-size:13px;line-height:1.6}.result-modal button{color:#fff;background:#236f62;border:0;width:100%;padding:13px;font-size:12px;font-weight:700}.result-modal.lost button{background:var(--red)}.result-modal button span{margin-left:9px;font-size:17px}.result-modal button:hover{filter:brightness(.9)}@keyframes modal-fade{0%{opacity:0}to{opacity:1}}@keyframes modal-pop{0%{opacity:0;transform:translateY(14px)scale(.96)}to{opacity:1;transform:none}}@media (width<=760px){.modal-backdrop{align-items:start;padding:13px}.detail-modal,.result-modal{margin:auto}.detail-hero{min-height:205px;padding:25px 21px}.detail-hero h2{font-size:35px}.detail-sprite{width:137px;height:137px;margin-right:-10px}.detail-grid{padding:23px 21px;display:block}.matchup-list{border-top:1px solid var(--line);border-left:0;margin-top:24px;padding:21px 0 0}.roster-modal{margin:auto 0;padding:21px}.team-slots{grid-template-columns:1fr}.roster-modal-head h2{font-size:26px}.result-modal{padding:34px 23px 26px}.result-modal h2{font-size:36px}}@media (prefers-reduced-motion:reduce){.modal-backdrop,.detail-modal,.roster-modal,.result-modal{animation-name:modal-fade}}.battle-page{max-width:1120px;margin:auto;padding:clamp(26px,4vw,52px) clamp(14px,4vw,40px) 36px}.battle-heading{justify-content:space-between;align-items:end;gap:12px;margin:0 0 20px;display:flex}.battle-heading h1{font:700 clamp(32px,4.2vw,54px)/.98 var(--font-serif);letter-spacing:-2.4px;margin:8px 0 0}.battle-screen{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-areas:"arena arena""dialogue actions";gap:12px;display:grid}.battle-screen>.battle-arena{grid-area:arena}.battle-screen>.dialogue-wrap{grid-area:dialogue}.battle-screen>.battle-actions{grid-area:actions;align-content:start;gap:10px;display:grid}.empty-battle{text-align:center;max-width:550px;margin:13vh auto}.empty-battle>.pokeball-mark{width:42px;height:42px;margin-bottom:10px}.empty-battle.status-loading>.pokeball-mark{animation:1s ease-in-out infinite ball-wobble}.empty-battle h1{font:700 clamp(36px,5vw,60px)/1 var(--font-serif);letter-spacing:-2.4px;margin:9px 0}.empty-battle p{max-width:400px;color:var(--muted);margin:0 auto 22px;line-height:1.6}.empty-actions{justify-content:center;gap:10px;display:flex}.battle-note{color:var(--muted);margin:13px 2px;font-size:10px;line-height:1.5}@keyframes ball-wobble{0%,to{transform:rotate(0)}25%{transform:rotate(-18deg)}75%{transform:rotate(18deg)}}@media (width<=760px){.battle-screen{grid-template-columns:minmax(0,1fr);grid-template-areas:"arena""dialogue""actions";gap:9px}.battle-heading{align-items:flex-start}.battle-heading h1{letter-spacing:-1.5px;font-size:30px}.battle-heading .button-outline{padding:8px 10px;font-size:10px}.empty-battle{margin:14vh auto;padding:0 15px}}@media (prefers-reduced-motion:reduce){.empty-battle.status-loading>.pokeball-mark{animation:none}}.battle-arena{background:linear-gradient(172deg,#d9f0ea 0%,#a9d8d1 50%,#78b5a9 50.4%,#4e8a80 100%);border:1px solid #9fb7aa;grid-template:"foe-card foe-sprite"minmax(0,45fr)"player-sprite player-card"minmax(0,55fr)/minmax(0,1fr) minmax(0,1fr);gap:10px 24px;height:clamp(420px,46vw,520px);padding:18px 22px;display:grid;position:relative;overflow:hidden;box-shadow:inset 0 0 60px #ffffff52}.arena-sky{pointer-events:none;position:absolute;inset:0}.arena-sky:before{content:"";opacity:.38;background-image:linear-gradient(#ffffff2e 1px,#0000 1px),linear-gradient(90deg,#ffffff2e 1px,#0000 1px);background-size:30px 30px;position:absolute;inset:0}.arena-sky:after{content:"";filter:blur(24px);background:#fffad799;border-radius:50%;width:60%;height:60%;position:absolute;top:-38%;left:20%}.arena-zone{z-index:1;min-width:0;min-height:0;position:relative}.arena-card-opponent{z-index:2;grid-area:foe-card;place-self:start;width:min(260px,100%)}.arena-card-player{z-index:2;grid-area:player-card;place-self:end;width:min(260px,100%)}.arena-sprite-opponent{grid-area:foe-sprite}.arena-sprite-player{grid-area:player-sprite}.info-card{background:#fffef9f2;border:1px solid #132c2f45;padding:10px 12px 9px;animation:.3s ease-out both card-in;box-shadow:5px 5px #14433e24}.info-card-player{border-right:3px solid var(--red)}.info-card-opponent{border-left:3px solid var(--ink)}.info-card-head{grid-template-columns:auto minmax(0,1fr) auto;align-items:baseline;column-gap:7px;display:grid}.info-card-side{color:var(--red);font:600 8px var(--font-mono);letter-spacing:.05em}.info-card-name{text-overflow:ellipsis;white-space:nowrap;font:700 18px/1.1 var(--font-serif);letter-spacing:-.5px;overflow:hidden}.info-card-level{color:var(--muted);font:500 10px var(--font-mono)}.info-card-types{margin:6px 0 7px}.hp-bar-row{align-items:center;gap:6px;display:flex}.hp-bar-tag{color:#ffe9a8;background:var(--ink);font:700 8px/1.2 var(--font-mono);letter-spacing:.06em;border-radius:2px;padding:1px 4px}.hp-track{background:#d4dcd6;border-radius:99px;flex:1;height:7px;overflow:hidden;box-shadow:inset 0 1px 2px #00000026}.hp-fill{border-radius:inherit;height:100%}.hp-healthy{background:var(--hp-healthy)}.hp-warning{background:var(--hp-warning)}.hp-danger{background:var(--hp-danger)}.hp-numbers{text-align:right;color:var(--ink);font:600 12px var(--font-mono);font-variant-numeric:tabular-nums;margin-top:4px}.hp-numbers em{color:#8c9895;font-style:normal;font-weight:400}.hp-bar-compact .hp-bar-tag{display:none}.hp-bar-compact .hp-track{height:4px}.hp-bar-compact .hp-numbers{text-align:left;color:inherit;margin-top:3px;font-size:9px}.hp-bar-compact .hp-numbers em{color:inherit;opacity:.6}@keyframes card-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@media (width<=600px){.battle-arena{gap:6px 8px;height:300px;padding:10px}.arena-card-opponent,.arena-card-player{width:100%}.info-card{padding:6px 7px;box-shadow:3px 3px #14433e24}.info-card-name{font-size:13px}.info-card-level{font-size:9px}.info-card-types{margin:4px 0 5px}.info-card .type-tag{min-height:14px;padding:1px 4px;font-size:7px}.hp-track{height:5px}.hp-numbers{margin-top:2px;font-size:10px}}@media (prefers-reduced-motion:reduce){.info-card{animation-name:fade-in}}.sprite-slot{--ground:16px;width:100%;height:100%;padding:4px 0 var(--ground);justify-content:center;align-items:flex-end;display:flex;position:relative}.sprite-slot-player{--ground:14px}.sprite-platform,.sprite-shadow{left:50%;bottom:var(--ground);pointer-events:none;border-radius:50%;position:absolute;transform:translate(-50%,50%)}.sprite-platform{width:min(96%, calc(var(--sprite-w) * 1.55 + 40px));aspect-ratio:4;background:radial-gradient(at 50% 40%,#ecfff48c,#3c827659 70%);box-shadow:0 5px #1a524a47,inset 0 -2px #ffffff59}.sprite-slot-opponent .sprite-platform{box-shadow:0 7px #1a524a52,inset 0 -2px #fff6}.sprite-shadow{width:calc(var(--sprite-w) * .82);aspect-ratio:5;background:radial-gradient(#1034306b,#10343000 70%)}.sprite-motion{z-index:2;width:var(--sprite-w);transform-origin:50% 100%;line-height:0;position:relative}.sprite-button{background:0 0;border:0;padding:0;line-height:0;display:block}.sprite-button:focus-visible{outline-offset:4px}.sprite-bob{animation:idle-bob var(--t-bob) ease-in-out infinite;display:block}.sprite-slot-opponent .sprite-bob{animation-delay:calc(var(--t-bob) / -2)}.sprite-img{max-width:none;image-rendering:pixelated;opacity:0;display:block}.sprite-slot.is-loaded .sprite-img{opacity:1}.anim-hidden .sprite-motion,.anim-hidden .sprite-shadow{visibility:hidden;opacity:0}.anim-enter .sprite-motion{animation:enter-from-left var(--t-entrance) cubic-bezier(.2,.8,.3,1.1) both}.sprite-slot-opponent.anim-enter .sprite-motion{animation-name:enter-from-right}.anim-enter .sprite-shadow{animation:fade-in var(--t-entrance) ease-out both}.anim-attack .sprite-motion{animation:lunge-player var(--t-lunge) ease-out}.sprite-slot-opponent.anim-attack .sprite-motion{animation-name:lunge-foe}.anim-hit .sprite-img{animation:blink var(--t-blink) steps(1, end) 3}.anim-faint .sprite-motion{animation:faint var(--t-faint) ease-in forwards}.anim-faint .sprite-shadow{animation:fade-out var(--t-faint) ease-in forwards}.anim-faint .sprite-bob,.anim-recall .sprite-bob{animation:none}.anim-recall .sprite-motion{animation:recall var(--t-recall) ease-in forwards}.anim-recall .sprite-shadow{animation:fade-out var(--t-recall) ease-in forwards}@keyframes idle-bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@keyframes enter-from-left{0%{opacity:0;transform:translate(-140%)}60%{opacity:1}to{opacity:1;transform:none}}@keyframes enter-from-right{0%{opacity:0;transform:translate(140%)}60%{opacity:1}to{opacity:1;transform:none}}@keyframes lunge-player{0%,to{transform:none}45%{transform:translate(26px,-12px)}}@keyframes lunge-foe{0%,to{transform:none}45%{transform:translate(-26px,12px)}}@keyframes blink{0%{opacity:0}50%{opacity:1}}@keyframes faint{0%{clip-path:inset(0);opacity:1;transform:none}to{clip-path:inset(0 0 70%);opacity:0;transform:translateY(70%)}}@keyframes recall{to{opacity:0;filter:brightness(3);transform:scale(.15)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{to{opacity:0}}@media (width<=600px){.sprite-slot{--ground:12px}.sprite-slot-player{--ground:10px}}@media (prefers-reduced-motion:reduce){.sprite-bob,.anim-attack .sprite-motion{animation:none}.anim-enter .sprite-motion,.sprite-slot-opponent.anim-enter .sprite-motion{animation-name:fade-in}.anim-hit .sprite-img{animation:dim calc(var(--t-blink) * 3) ease-in-out}.anim-faint .sprite-motion,.anim-recall .sprite-motion{animation-name:fade-out}@keyframes dim{50%{opacity:.45}}}.move-effect{--reach:calc(var(--sprite-w) * .5 + 16px);z-index:3;pointer-events:none;position:absolute;inset:-25%}.fx-flash{background:radial-gradient(circle, var(--fx) 0%, color-mix(in srgb, var(--fx) 40%, transparent) 35%, transparent 68%);opacity:0;mix-blend-mode:screen;border-radius:50%;position:absolute;inset:10%}.fx-ring{aspect-ratio:1;border:3px solid var(--fx);opacity:0;border-radius:50%;width:40%;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(.2)}.fx-particle{--angle:calc(var(--i) * 360deg / var(--count));background:var(--fx);width:10px;height:10px;box-shadow:0 0 8px var(--fx);opacity:0;border-radius:50%;margin:-5px 0 0 -5px;position:absolute;top:50%;left:50%}.effect-burst .fx-flash{animation:flash-pulse var(--t-hit) ease-out}.effect-burst .fx-particle{background:radial-gradient(circle, #fff3b0, var(--fx));animation:ember var(--t-hit) ease-out calc(var(--i) * 18ms) both}.effect-ripple .fx-ring{animation:ripple var(--t-hit) ease-out}.effect-ripple .fx-ring:before,.effect-ripple .fx-ring:after{content:"";border:inherit;animation:ripple-inner var(--t-hit) ease-out calc(var(--t-hit) / 6) both;border-radius:50%;position:absolute;inset:-3px}.effect-ripple .fx-ring:after{animation-delay:calc(var(--t-hit) / 3)}.effect-ripple .fx-particle{background:color-mix(in srgb, var(--fx) 60%, white);width:7px;height:7px;animation:droplet var(--t-hit) ease-out both}.effect-flicker .fx-flash{animation:strobe var(--t-hit) steps(1, end)}.effect-flicker .fx-particle{width:3px;height:16px;animation:spark var(--t-hit) steps(4, end) both;border-radius:1px;margin:-8px 0 0 -1.5px}.effect-wave .fx-ring{animation:ripple var(--t-hit) ease-in-out 2;border-width:2px}.effect-wave .fx-flash{animation:flash-pulse var(--t-hit) ease-in-out}.sprite-motion:has(.effect-wave) .sprite-bob{animation:warp var(--t-hit) ease-in-out}.effect-leaves .fx-particle{width:12px;height:7px;box-shadow:none;animation:leaf var(--t-hit) ease-out calc(var(--i) * 25ms) both;border-radius:0 100%}.effect-impact .fx-flash{animation:flash-pulse calc(var(--t-hit) * .6) ease-out;inset:18%}.effect-impact .fx-ring{animation:ripple calc(var(--t-hit) * .6) ease-out;border-width:5px}.effect-impact .fx-particle{width:4px;height:18px;animation:ray calc(var(--t-hit) * .6) ease-out both;border-radius:2px;margin:-9px 0 0 -2px}.effect-shards .fx-particle{box-shadow:none;clip-path:polygon(50% 0,100% 50%,50% 100%,0 50%);width:12px;height:12px;animation:shard var(--t-hit) cubic-bezier(.2,.7,.3,1) both;border-radius:1px}.effect-shards .fx-flash{animation:flash-pulse calc(var(--t-hit) * .5) ease-out}.effect-sparkle .fx-particle{width:12px;height:12px;box-shadow:none;clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);animation:sparkle var(--t-hit) ease-out calc(var(--i) * 40ms) both;border-radius:0}@keyframes flash-pulse{0%{opacity:0;transform:scale(.4)}25%{opacity:1}to{opacity:0;transform:scale(1.15)}}@keyframes strobe{0%,30%,60%{opacity:1}15%,45%,75%,to{opacity:0}}@keyframes ripple{0%{opacity:1;transform:translate(-50%,-50%)scale(.2)}to{opacity:0;transform:translate(-50%,-50%)scale(2.2)}}@keyframes ripple-inner{0%{opacity:1;transform:scale(.3)}to{opacity:0;transform:scale(1.4)}}@keyframes ember{0%{opacity:1;transform:rotate(var(--angle)) translateY(-8px) scale(1)}to{opacity:0;transform:translateY(-30px) rotate(var(--angle)) translateY(calc(var(--reach) * -1)) scale(.3)}}@keyframes droplet{0%{opacity:0;transform:rotate(var(--angle)) translateY(-20px)}30%{opacity:1}to{opacity:0;transform:rotate(var(--angle)) translateY(calc(var(--reach) * -1.05)) scale(.5)}}@keyframes spark{0%{opacity:1;transform:rotate(var(--angle)) translateY(-14px)}50%{opacity:0}75%{opacity:1}to{opacity:0;transform:rotate(calc(var(--angle) + 20deg)) translateY(calc(var(--reach) * -.8))}}@keyframes warp{0%,to{filter:none;transform:none}25%{filter:hue-rotate(60deg);transform:skew(8deg)scaleX(1.06)}50%{filter:hue-rotate(-40deg)brightness(1.2);transform:skew(-8deg)scaleX(.95)}75%{transform:skew(4deg)}}@keyframes leaf{0%{opacity:0;transform:rotate(var(--angle)) translateY(-6px) rotate(0)}20%{opacity:1}to{opacity:0;transform:rotate(calc(var(--angle) + 120deg)) translateY(calc(var(--reach) * -1)) rotate(540deg)}}@keyframes ray{0%{opacity:1;transform:rotate(var(--angle)) translateY(-16px) scaleY(.4)}to{opacity:0;transform:rotate(var(--angle)) translateY(calc(var(--reach) * -.9)) scaleY(1.2)}}@keyframes shard{0%{opacity:1;transform:rotate(var(--angle)) translateY(-4px) rotate(0)}to{opacity:0;transform:rotate(var(--angle)) translateY(calc(var(--reach) * -1.1)) rotate(220deg) scale(.6)}}@keyframes sparkle{0%{opacity:0;transform:rotate(var(--angle)) translateY(-14px) scale(.3)}40%{opacity:1;transform:rotate(var(--angle)) translateY(calc(var(--reach) * -.6)) scale(1.1)}to{opacity:0;transform:rotate(var(--angle)) translateY(calc(var(--reach) * -.8)) translateX(-18px) scale(.4)}}.battle-arena.is-shaking{animation:arena-shake var(--t-shake) linear}@keyframes arena-shake{0%,to{transform:none}15%{transform:translate(-6px,2px)}30%{transform:translate(5px,-3px)}45%{transform:translate(-4px,3px)}60%{transform:translate(4px,-1px)}75%{transform:translate(-2px,1px)}90%{transform:translate(1px)}}@media (prefers-reduced-motion:reduce){.battle-arena.is-shaking{animation:none}.fx-flash{display:none}.sprite-motion:has(.effect-wave) .sprite-bob{animation:none}.fx-particle,.fx-ring{animation-name:fade-out!important;animation-timing-function:ease-out!important}}.dialogue-wrap{min-width:0}.dialogue-box{text-align:left;width:100%;height:100%;min-height:118px;color:var(--ink);background:var(--cream);border:3px solid var(--ink);box-shadow:inset 0 0 0 3px var(--cream), inset 0 0 0 5px #9fc4ba, 5px 5px 0 #17232e1a;border-radius:6px;padding:18px 22px;display:block;position:relative}.dialogue-box.is-message{cursor:pointer}.dialogue-text{font:600 17px/1.5 var(--font-sans);white-space:pre-wrap;display:block}.dialogue-box.is-idle .dialogue-text{color:var(--muted);font:700 20px/1.3 var(--font-serif);letter-spacing:-.3px}.dialogue-next{color:var(--red);font-size:12px;animation:.8s ease-in-out infinite next-bounce;position:absolute;bottom:10px;right:16px}@keyframes next-bounce{0%,to{transform:translateY(0)}50%{transform:translateY(3px)}}.move-panel{min-width:0}.move-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.move-button{--type:#7c8790;text-align:left;min-width:0;min-height:64px;color:var(--ink);border:1px solid color-mix(in srgb, var(--type) 40%, white);border-left:5px solid var(--type);background:linear-gradient(135deg, color-mix(in srgb, var(--type) 18%, white), color-mix(in srgb, var(--type) 6%, white));border-radius:4px;align-content:center;gap:6px;padding:9px 11px 9px 13px;transition:transform .12s,box-shadow .12s,background .12s;display:grid;position:relative}.move-button:hover:not(:disabled){background:color-mix(in srgb, var(--type) 26%, white);box-shadow:0 4px 0 color-mix(in srgb, var(--type) 45%, transparent);transform:translateY(-2px)}.move-button:active:not(:disabled){box-shadow:none;transform:translateY(0)}.move-button:disabled{opacity:.5}.move-button.is-empty{filter:grayscale();opacity:.45}.move-name{white-space:nowrap;text-overflow:ellipsis;font-size:14px;font-weight:700;overflow:hidden}.move-meta{justify-content:space-between;align-items:center;gap:6px;display:flex}.move-pp{color:var(--muted);font:600 10px var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}.move-hint{z-index:5;color:#fff;background:var(--ink);font:600 10px var(--font-mono);white-space:nowrap;opacity:0;pointer-events:none;border-radius:3px;padding:5px 8px;transition:opacity .15s,transform .15s;position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%,4px)}.move-hint:after{content:"";border:5px solid #0000;border-top-color:var(--ink);position:absolute;top:100%;left:50%;transform:translate(-50%)}.move-button:hover:not(:disabled) .move-hint,.move-button:focus-visible .move-hint,.move-button.show-hint .move-hint{opacity:1;transform:translate(-50%)}.hint-super{color:#8ff0b0}.hint-weak{color:#ffd07a}.hint-none{color:#ffa497}.party-access{border:1px solid var(--line);background:#fffdfac7;justify-content:space-between;align-items:center;min-height:50px;padding:7px 7px 7px 13px;display:flex}.party-access>span{color:var(--muted);font:600 9px var(--font-mono);letter-spacing:.09em}.party-access>span b{color:var(--red)}.party-access button{color:#eff8f4;background:var(--teal);border:1px solid #1d3439;align-self:stretch;align-items:center;gap:7px;min-height:36px;padding:0 14px;font-size:11px;font-weight:700;display:flex}.party-access button .pokeball-mark{width:17px;height:17px;color:var(--teal-light)}.party-access button .pokeball-mark i{background:var(--teal)}.party-access button small{color:var(--teal-light);font:500 8px var(--font-mono);margin-left:2px}.party-access button:hover:not(:disabled){background:var(--red);border-color:var(--red)}.party-access button:disabled{opacity:.5}.party-modal{color:#e9f5f1;background:#153036;width:min(620px,100%);padding:24px;animation:.27s cubic-bezier(.2,.85,.25,1.15) both modal-pop;position:relative;box-shadow:0 22px 70px #06141a5e}.party-modal-head{border-bottom:1px solid #f0fffb29;justify-content:space-between;align-items:flex-start;gap:12px;padding-bottom:15px;display:flex}.party-modal-head .eyebrow{color:#9bd8c9}.party-modal-head h2{font:700 28px/1 var(--font-serif);letter-spacing:-1px;margin:5px 0}.party-modal-head p{color:#9fb6b4;margin:0;font-size:11px;line-height:1.5}.party-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:15px;display:grid}.party-option{text-align:left;color:#f4fcf8;background:#ffffff0a;border:1px solid #ceefe73b;border-radius:4px;grid-template-columns:56px minmax(0,1fr);align-items:center;gap:8px;min-width:0;min-height:78px;padding:8px 10px 8px 6px;transition:border-color .15s,background .15s,transform .15s;display:grid}.party-option:hover:not(:disabled){background:#ffffff1f;border-color:#fff;transform:translateY(-2px)}.party-option.current{background:#6fc7ae29;border-color:#8ce0c8}.party-option.fainted{opacity:.4;filter:grayscale()}.party-option:disabled{cursor:not-allowed}.party-sprite{object-fit:contain;width:56px;height:56px}.party-info{gap:5px;min-width:0;display:grid}.party-name{justify-content:space-between;align-items:baseline;gap:6px;display:flex}.party-name b{white-space:nowrap;text-overflow:ellipsis;font-size:13px;overflow:hidden}.party-name small{color:#9bd8c9;font:600 8px var(--font-mono);letter-spacing:.06em;text-transform:uppercase;flex:none}.party-option.fainted .party-name small{color:#ffa497}.party-option .type-tag{color:#e9f5f1;background:#ffffff1f}.party-option .hp-track{background:#ffffff26}@media (width<=760px){.dialogue-box{min-height:82px;padding:13px 15px}.dialogue-text{font-size:15px}.dialogue-box.is-idle .dialogue-text{font-size:17px}.move-button{min-height:60px;padding:8px 9px 8px 10px}.move-name{font-size:13px}.party-modal{padding:18px}.party-modal-head h2{font-size:24px}.party-grid{grid-template-columns:minmax(0,1fr);gap:6px}.party-option{min-height:66px}}@media (prefers-reduced-motion:reduce){.dialogue-next{animation:none}.move-button,.move-hint,.party-option{transition:opacity .15s}.party-option:hover:not(:disabled){transform:none}.party-modal{animation-name:fade-in}.move-button:hover:not(:disabled){transform:none}}.encounter-transition{z-index:70;pointer-events:none;animation:encounter-out var(--t-encounter) linear forwards;position:fixed;inset:0}.encounter-flash{opacity:0;animation:encounter-flash var(--t-encounter) linear forwards;background:#fff;position:absolute;inset:0}.encounter-bars{grid-auto-rows:1fr;display:grid;position:absolute;inset:0}.encounter-bars i{transform-origin:0;animation:encounter-bar var(--t-encounter) cubic-bezier(.6,0,.4,1) forwards;animation-delay:calc(var(--i) * 30ms);background:#0d151c;transform:scaleX(0)}.encounter-bars i:nth-child(2n){transform-origin:100%}@keyframes encounter-flash{0%{opacity:0}5%{opacity:1}10%{opacity:.2}15%{opacity:1}22%{opacity:0}to{opacity:0}}@keyframes encounter-bar{0%,20%{transform:scaleX(0)}60%,to{transform:scaleX(1)}}@keyframes encounter-out{0%,80%{opacity:1}to{opacity:0}}@media (prefers-reduced-motion:reduce){.encounter-flash{display:none}.encounter-bars i{animation:none;transform:none}.encounter-transition{animation-name:encounter-fade}@keyframes encounter-fade{0%{opacity:0}30%,75%{opacity:1}to{opacity:0}}}.choice-modal{width:min(560px,100%);color:var(--ink);background:#fffdf8;padding:24px;animation:.27s cubic-bezier(.2,.85,.25,1.15) both modal-pop;position:relative;box-shadow:0 22px 70px #06141a5e}.choice-head{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;gap:12px;padding-bottom:14px;display:flex}.choice-head h2{font:700 30px/1 var(--font-serif);letter-spacing:-1px;margin:5px 0 0}.choice-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:16px;display:grid}.choice-card{text-align:left;min-height:150px;color:var(--ink);border:1px solid var(--line);background:#fff;flex-direction:column;align-items:flex-start;gap:8px;padding:16px;transition:transform .15s,border-color .15s,box-shadow .15s;display:flex}.choice-card:hover{border-color:var(--ink);transform:translateY(-3px);box-shadow:5px 5px #17232e1a}.choice-card b{font:700 22px/1.1 var(--font-serif);letter-spacing:-.6px}.choice-card small{color:var(--muted);font-size:12px;line-height:1.5}.choice-computer{border-top:4px solid var(--ink)}.choice-human{border-top:4px solid var(--red)}.choice-computer .option-tag{color:var(--muted)}.turn-timer{border:1px solid var(--line);background:var(--cream);justify-self:end;align-items:baseline;gap:8px;padding:5px 10px;display:inline-flex}.turn-timer span{color:var(--muted);font:600 8px var(--font-mono);letter-spacing:.12em}.turn-timer b{font:700 15px var(--font-mono);font-variant-numeric:tabular-nums}.turn-timer.is-urgent{border-color:var(--red);color:var(--red)}.party-modal .turn-timer{color:var(--ink)}.opponent-banner{border-left:4px solid var(--hp-warning);color:#5c4510;background:#fdf3dc;margin:0 0 12px;padding:10px 14px;font-size:13px}.forfeit-confirm{align-items:center;gap:8px;display:flex}.forfeit-confirm span{color:var(--red);font:600 10px var(--font-mono)}.forfeit-confirm .button-primary,.forfeit-confirm .button-outline{padding:8px 12px}.result-actions{gap:8px;display:grid}.result-actions button:disabled{opacity:.6;cursor:default}.result-modal .result-actions button.secondary{color:var(--ink);box-shadow:inset 0 0 0 1px var(--ink);background:0 0}.button-primary:disabled{opacity:.45}@media (width<=760px){.choice-modal{margin:auto;padding:18px}.choice-grid{grid-template-columns:minmax(0,1fr)}.choice-card{min-height:0}.forfeit-confirm span{display:none}}@media (prefers-reduced-motion:reduce){.choice-modal{animation-name:fade-in}.choice-card:hover{transform:none}}.lobby-page{max-width:980px;margin:auto;padding:clamp(26px,4vw,52px) clamp(14px,4vw,40px) 48px}.lobby-menu{gap:18px;display:grid}.trainer-field{gap:6px;max-width:340px;display:grid}.trainer-field span{color:var(--muted);font:600 9px var(--font-mono);letter-spacing:.1em;text-transform:uppercase}.trainer-field input{border:1px solid var(--line);background:var(--cream);height:46px;color:var(--ink);outline:none;padding:0 14px;font-size:15px}.trainer-field input:focus{border-color:var(--ink)}.lobby-options{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.lobby-option{text-align:left;min-height:170px;color:var(--ink);border:1px solid var(--line);background:#fffdfad1;flex-direction:column;align-items:flex-start;gap:8px;padding:18px;transition:transform .15s,box-shadow .15s,border-color .15s;display:flex}button.lobby-option:hover{border-color:var(--ink);transform:translateY(-3px);box-shadow:6px 6px #17232e1a}.option-random{border-top:4px solid var(--red)}.option-create{border-top:4px solid #2f7d6e}.option-join{border-top:4px solid var(--ink)}.option-tag{color:var(--red);font:600 9px var(--font-mono);letter-spacing:.12em}.option-create .option-tag{color:#2f7d6e}.option-join .option-tag{color:var(--muted)}.lobby-option b{font:700 22px/1.1 var(--font-serif);letter-spacing:-.6px}.lobby-option small{color:var(--muted);font-size:12px;line-height:1.5}.join-row{gap:6px;width:100%;margin-top:auto;display:flex}.join-row input{border:1px solid var(--line);min-width:0;height:42px;font:600 18px var(--font-mono);letter-spacing:.2em;text-transform:uppercase;background:#fff;outline:none;flex:1;padding:0 10px}.join-row input:focus{border-color:var(--ink)}.join-row button{color:#fff;background:var(--ink);border:0;padding:0 14px;font-size:12px;font-weight:700}.join-row button:disabled{opacity:.4}.lobby-status{text-align:center;max-width:520px;margin:10vh auto;padding:0 10px}.lobby-status>.pokeball-mark{width:42px;height:42px;margin-bottom:8px;animation:1s ease-in-out infinite ball-wobble}.lobby-status.status-error>.pokeball-mark{animation:none}.lobby-status h2{font:700 clamp(28px,4vw,42px)/1.05 var(--font-serif);letter-spacing:-1.5px;margin:8px 0}.lobby-status p{color:var(--muted);margin:0 auto 20px;line-height:1.6}.lobby-room{gap:16px;display:grid;position:relative}.lobby-room-top{flex-wrap:wrap;align-items:center;gap:14px 22px;display:flex}.lobby-hint{min-width:220px;color:var(--muted);flex:1;margin:0;font-size:13px;line-height:1.5}.lobby-code-card{color:#eef7f4;background:#153036;gap:4px;padding:14px 16px;display:grid;box-shadow:6px 6px #26413e24}.lobby-code-card>span{color:#9bd8c9;font:600 9px var(--font-mono);letter-spacing:.14em}.lobby-code-card>b{font:600 34px/1 var(--font-mono);letter-spacing:.22em}.code-actions{gap:6px;margin-top:6px;display:flex}.code-actions button{color:#fff;font:600 9px var(--font-mono);background:#ffffff14;border:1px solid #ffffff4d;padding:6px 9px}.code-actions button:hover{background:#fff3}.lobby-versus{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:stretch;gap:12px;display:grid}.versus-mark{color:var(--red);font:700 26px var(--font-serif);align-self:center}.player-slot{border:1px solid var(--line);border-left:4px solid var(--line);background:#fffdfad9;align-content:start;gap:10px;min-height:170px;padding:16px;transition:border-color .2s;display:grid}.player-slot.tone-ready{border-left-color:var(--hp-healthy)}.player-slot.tone-away{border-left-color:var(--hp-warning)}.player-slot.is-empty{color:var(--muted);border-style:dashed;place-content:center;justify-items:center}.slot-label{color:var(--muted);font:600 9px var(--font-mono);letter-spacing:.14em}.player-slot.is-empty .slot-label{justify-self:start}.slot-head{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.slot-head strong{white-space:nowrap;text-overflow:ellipsis;font:700 24px/1.1 var(--font-serif);letter-spacing:-.6px;overflow:hidden}.slot-status{color:var(--muted);font:600 9px var(--font-mono);letter-spacing:.06em;text-transform:uppercase;background:#ece9e1;border-radius:3px;flex:none;padding:3px 7px}.tone-ready .slot-status{color:#fff;background:var(--hp-healthy)}.tone-away .slot-status{color:var(--ink);background:var(--hp-warning)}.slot-team{grid-template-columns:repeat(6,minmax(0,1fr));gap:4px;margin:0;padding:0;list-style:none;display:grid}.slot-team li{aspect-ratio:1;border:1px solid var(--line);background:#f3f1ea;place-items:center;display:grid}.slot-team-sprite{object-fit:contain;width:100%;height:100%}.slot-waiting{align-items:center;gap:10px;font-size:13px;display:flex}.waiting-dots{gap:4px;display:inline-flex}.waiting-dots i{background:var(--red);border-radius:50%;width:6px;height:6px;animation:1.2s ease-in-out infinite dot-pulse}.waiting-dots i:nth-child(2){animation-delay:.2s}.waiting-dots i:nth-child(3){animation-delay:.4s}.lobby-actions{gap:10px;display:flex}.lobby-actions .button-primary{justify-content:center;min-width:150px}.lobby-actions .button-primary[aria-pressed=true]{color:var(--ink);background:var(--cream);border-color:var(--ink)}.lobby-actions .button-primary[aria-pressed=true] .pokeball-mark{color:var(--ink)}.lobby-actions .button-primary[aria-pressed=true] .pokeball-mark i{background:var(--cream)}.countdown-overlay{z-index:65;color:#fff;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#0b1a1fb8;place-content:center;justify-items:center;gap:6px;display:grid;position:fixed;inset:0}.countdown-overlay span{font:600 11px var(--font-mono);letter-spacing:.2em}.countdown-overlay b{font:700 120px/1 var(--font-serif);animation:.9s ease-out both count-pop}@keyframes dot-pulse{0%,to{opacity:.25;transform:scale(.8)}50%{opacity:1;transform:scale(1)}}@keyframes count-pop{0%{opacity:0;transform:scale(1.6)}30%{opacity:1}to{opacity:1;transform:scale(1)}}@media (width<=760px){.lobby-options{grid-template-columns:minmax(0,1fr)}.lobby-option{min-height:0}.lobby-versus{grid-template-columns:minmax(0,1fr)}.versus-mark{justify-self:center;font-size:20px}.player-slot{min-height:0}.slot-head strong{font-size:20px}.lobby-code-card>b{font-size:28px}.lobby-actions{flex-direction:column}}@media (prefers-reduced-motion:reduce){.lobby-status>.pokeball-mark,.waiting-dots i{animation:none}.countdown-overlay b{animation-name:fade-in}button.lobby-option:hover{transform:none}}
