@font-face{font-family:DM;src:url('assets/fonts/dm-sans-500.ttf');font-display:swap}@font-face{font-family:Fraunces;src:url('assets/fonts/fraunces-600.ttf');font-display:swap}
:root{color-scheme:dark;font-family:DM,system-ui,sans-serif;color:#fff3ff;background:#090819;--violet:#c394ff;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px)}*{box-sizing:border-box}body{margin:0;min-height:100svh;overflow-x:hidden}button{font:inherit;color:inherit;cursor:pointer;-webkit-tap-highlight-color:transparent}button:disabled{cursor:default}button:focus-visible{outline:3px solid #fff;outline-offset:4px}button,input{touch-action:manipulation}[hidden]{display:none!important}.backdrop{position:fixed;inset:0;background:linear-gradient(#0c092155,#0b081b88),url('assets/glowgrove.png') center/cover;z-index:-4}.vignette{position:fixed;inset:0;pointer-events:none;background:linear-gradient(#0b071ed9,transparent 25%,transparent 65%,#090619df),radial-gradient(ellipse at 50% 30%,transparent 35%,#06061585);z-index:-1}#scenery{position:fixed;inset:0;pointer-events:none;z-index:-2}#scenery canvas{display:block;width:100%;height:100%}header{height:76px;padding:calc(8px + var(--safe-top)) 18px 8px;display:flex;align-items:center;justify-content:space-between;max-width:680px;margin:auto}.brand{display:flex;align-items:center;gap:8px;background:none;border:0;padding:0;text-align:left}.brand>span{font-size:36px;color:#d8aaff;text-shadow:0 0 20px #b354ff}.brand b{font:600 25px/.82 Fraunces,Georgia,serif;letter-spacing:-1px;text-shadow:0 0 14px #ba77ff}.header-actions{display:flex;gap:8px}.icon-button{width:44px;height:44px;border:1px solid #b898e680;border-radius:50%;background:#120d2dc9;font-size:23px;box-shadow:inset 0 0 12px #9172ca22}.icon-button.muted{opacity:.6}main{max-width:600px;margin:auto;padding:0 15px calc(8px + var(--safe-bottom))}h1{text-align:center;font:500 clamp(24px,6vw,35px)/1.1 Fraunces,Georgia,serif;margin:18px 0 22px;text-shadow:0 2px 12px #8e56b6}.primary{width:100%;min-height:52px;padding:12px 18px;border:1px solid #e9c9ff;border-radius:13px;background:linear-gradient(110deg,#542896,#854fd2 50%,#422773);box-shadow:inset 0 0 0 3px #c6a2ff35,0 0 19px #a665ff55;font-weight:600;font-size:17px;transition:opacity .2s,transform .2s}.primary:disabled{opacity:.38}.primary:active:not(:disabled){transform:scale(.97)}.text-button{border:0;background:transparent;padding:12px;min-height:44px;font-size:13px;color:#e4cef6}.roster{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px 11px}.foil{--foil:#b791ff;position:relative;border:2px solid var(--foil);border-radius:12px;box-shadow:0 0 3px #fff,0 0 15px color-mix(in srgb,var(--foil) 45%,transparent),inset 0 0 14px var(--foil);background:#151227;isolation:isolate;transform:translateZ(0)}.foil::before{content:'';position:absolute;inset:4px;z-index:2;border:1px solid color-mix(in srgb,var(--foil) 55%,#fff);border-radius:8px;pointer-events:none;box-shadow:inset 0 0 9px #fff2}.foil::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:3;background:linear-gradient(120deg,transparent 25%,#fff0 35%,#fff6 47%,#8af4ff33 49%,#ffb8ee55 52%,transparent 66%);background-size:350% 100%;mix-blend-mode:screen;opacity:.36;animation:foilSweep 8s ease-in-out infinite}.card-art{position:absolute;inset:5px;border-radius:8px;background-image:url('assets/concepts/pick-reference.png');background-size:389% 610%;background-position:var(--art-x,8%) var(--art-y,30%);background-repeat:no-repeat;z-index:0;transition:filter .7s,opacity .3s}.pick-card{aspect-ratio:.69;padding:0;transition:transform .25s,filter .25s;animation:arrive .5s both;animation-delay:calc(var(--cell)*.04s)}.pick-card .card-name{position:absolute;bottom:5px;left:5px;right:5px;z-index:2;background:linear-gradient(transparent,#0e091bea 25%);padding:20px 0 8px;font:600 clamp(15px,4vw,24px) Fraunces,Georgia,serif;text-shadow:0 2px 3px #000}.pick-card .selected-mark{position:absolute;top:-10px;right:-8px;z-index:5;width:28px;height:28px;display:grid;place-items:center;border-radius:50%;color:#0c281d;background:#adffd4;box-shadow:0 0 15px #7affbc;font-size:18px}.pick-card[aria-pressed=true]{transform:translateY(-5px);box-shadow:0 0 4px #fff,0 0 22px var(--foil)}.pick-card:disabled{filter:saturate(.45);opacity:.6}.selection-dock{margin:21px 0 0;padding:13px;border:1px solid #b992f24f;background:#120e29b5;border-radius:17px}.slots{display:flex;justify-content:center;gap:13px;margin-bottom:12px}.slot{width:44px;height:54px;background:#19112f;border:1px dashed #ac83d6;border-radius:7px;position:relative;padding:0;overflow:hidden;color:#d3a3ff;font-size:24px}.slot .card-art{inset:1px}.chosen-team{display:flex;justify-content:center;gap:15px;padding:15px 0 0}.chosen-team .pick-card{width:23%;max-width:108px;pointer-events:none}.arena-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px;margin-bottom:20px}.arena-option{grid-column:span 2;aspect-ratio:.92;overflow:hidden;padding:0}.arena-option:nth-child(n+4){grid-column:span 3;aspect-ratio:1.6}.arena-art{position:absolute;inset:4px;border-radius:7px;background-image:url('assets/concepts/arena-reference.png');background-size:358% 715%;background-position:var(--scene-x,6%) 51%;transition:transform .4s}.arena-option[data-id=forest] .arena-art{--scene-x:50%}.arena-option[data-id=sand] .arena-art{--scene-x:95%}.arena-option[data-id=planet] .arena-art{background-size:230% 690%;background-position:6% 73%}.arena-option[data-id=peak] .arena-art{background-size:230% 690%;background-position:96% 73%}.arena-option strong{position:absolute;bottom:4px;left:4px;right:4px;padding:23px 2px 7px;font:500 13px Fraunces,Georgia,serif;z-index:3;background:linear-gradient(transparent,#0b091eee 40%)}.arena-option[aria-pressed=true]{outline:2px solid #fff;outline-offset:3px;box-shadow:0 0 20px var(--foil)}#edit-team{display:block;margin:5px auto}
body[data-screen=battle] header{height:64px}.battle-heading{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:11px;color:#c6b3dc}.battle-heading .text-button{padding:0 6px;font-size:11px;min-height:28px}#turn{color:#c4ffdf;font-size:13px;text-shadow:0 0 10px #48ff9699}#battle{height:calc(100svh - 72px - var(--safe-top) - var(--safe-bottom));display:grid;grid-template-rows:28px minmax(270px,1fr) 100px 72px;gap:4px}.board{position:relative;min-height:0;perspective:1000px}.battle-card{position:absolute;width:53%;height:63%;max-height:360px;padding:0;transition:filter .25s,box-shadow .25s;transform-style:preserve-3d;overflow:visible;text-align:left}.battle-card.player{left:0;bottom:0;--foil:#73ffb7;z-index:5;touch-action:none;cursor:grab}.battle-card.rival{right:0;top:0;--foil:#ff646e;z-index:2}.battle-card .card-art{inset:6px;background-size:389% 610%;filter:saturate(1.14)}.battle-card[data-stage=Adult] .card-art{filter:saturate(1.25) contrast(1.07)}.battle-card[data-stage=Omega]{box-shadow:0 0 4px #fff,0 0 28px var(--foil),inset 0 0 18px #fff5}.battle-card[data-stage=Omega] .card-art{filter:saturate(1.3) contrast(1.12)}.card-top{position:absolute;top:7px;left:7px;right:7px;z-index:5;padding:5px 6px 9px;background:linear-gradient(#0d0a1af2 70%,transparent);border-radius:7px 7px 0 0;display:grid;grid-template-columns:1fr auto;gap:5px;pointer-events:none}.side-label{font-size:10px;letter-spacing:1.7px;text-transform:uppercase;color:#caffe1}.rival .side-label{color:#ffb3b3}.stage-mark{font-size:16px;line-height:13px;color:#f2d192}.hp{display:block;grid-column:span 2;height:12px;background:#100c20;box-shadow:0 0 0 1px #b0f9d97a,inset 0 2px 5px #000;border-radius:7px;overflow:hidden}.hp i{display:block;height:100%;width:100%;border-radius:inherit;background:linear-gradient(#d5ffeb,#5aefba 52%,#229f79);box-shadow:0 0 8px #91ffd4;transition:width .65s cubic-bezier(.2,.7,.3,1)}.rival .hp{box-shadow:0 0 0 1px #ff9fa68a}.rival .hp i{background:linear-gradient(#ffd5d5,#ff586b 52%,#ae253c);box-shadow:0 0 10px #ff7a84}.card-bottom{position:absolute;bottom:6px;left:6px;right:6px;z-index:4;border-radius:0 0 7px 7px;background:linear-gradient(transparent,#0a0819ed 40%);padding:25px 10px 9px;display:flex;align-items:baseline;justify-content:space-between;gap:3px;pointer-events:none}.card-bottom strong{font:500 clamp(17px,5vw,25px) Fraunces,Georgia,serif}.stage-name{font-size:9px;letter-spacing:.8px;color:#efd7b0}.battle-card:disabled{cursor:default}.swipe-hint{position:absolute;right:1%;bottom:8%;width:40%;text-align:center;color:#e7d6fc;font:italic 16px Fraunces,Georgia,serif;pointer-events:none;transition:opacity .5s}.touch-hand{display:block;font-size:34px;text-shadow:0 0 14px #b889ff;animation:handSwipe 3s ease-in-out infinite;margin-bottom:4px}.swipe-hint.used{opacity:0}.rituals{display:flex;justify-content:center;gap:48px;position:relative;z-index:6}.rituals>button{position:relative;width:102px;height:100px;background:none;border:0;padding:0}.egg-fallback{position:absolute;top:6px;left:31px;width:42px;height:59px;border-radius:50% 50% 45% 45%;background:radial-gradient(circle at 35% 25%,#fff,#a9bcff 13%,#9967fa 36%,#401956 80%);color:#ffd6ff;font-size:27px;padding-top:12px;box-shadow:0 0 19px #d984ffa0,inset -7px -7px 10px #22062e;transform:rotate(8deg)}.egg-button::before{content:'';position:absolute;top:57px;left:13px;width:76px;height:19px;background:conic-gradient(#dfbbff,#42184e,#6e54b4,#24152b,#dfbbff);clip-path:polygon(0 30%,10% 0,20% 30%,35% 0,45% 45%,60% 10%,70% 40%,90% 5%,100% 70%,65% 100%,20% 85%)}.egg-button.has-3d .egg-fallback,.egg-button.has-3d::before{visibility:hidden}.ritual-label{position:absolute;bottom:0;left:0;right:0;text-align:center;font:500 15px Fraunces,Georgia,serif;color:#f6e7ff}.hearts{position:absolute;inset:0;pointer-events:none;color:#ffb9ef;text-shadow:0 0 9px #ff6fcf}.hearts i{font-style:normal;position:absolute;top:30%;left:5%;animation:hearts 2.7s infinite;font-size:17px}.hearts i:nth-child(2){left:72%;top:20%;animation-delay:-1.8s}.hearts i:nth-child(3){left:49%;top:7%;animation-delay:-.7s}.charge-ring{position:absolute;top:6px;left:16px;width:70px;height:70px;border-radius:50%;background:conic-gradient(#ffdda0 var(--charge,0%),#68527733 0);padding:4px;box-shadow:0 0 12px #c895ff38}.charge-ring>span{display:grid;place-items:center;background:radial-gradient(#392144,#130f28);width:100%;height:100%;border-radius:50%;font-size:34px;color:#d5a8ec}.ultimate-button:disabled{opacity:.52}.ultimate-button.ready .charge-ring{box-shadow:0 0 24px #ffd28aab;animation:ultReady 2s infinite}.ultimate-button.ready .charge-ring>span{color:#fff1c5}.bench{display:flex;justify-content:center;gap:16px;align-items:center;z-index:8}.bench-card{height:65px;width:51px;padding:0;position:relative;border-radius:7px;transition:transform .25s,opacity .25s}.bench-card.active{transform:translateY(-3px);outline:2px solid #aeffd8;outline-offset:3px}.bench-card.dead{filter:grayscale(1);opacity:.35}.bench-card .card-art{inset:3px;border-radius:4px}.bench-card .hp{position:absolute;left:4px;right:4px;bottom:4px;height:6px;z-index:5}.bench-card .rest-mark{position:absolute;inset:0;display:grid;place-items:center;z-index:6;font-size:28px;color:#fff}.bench-card::before{inset:2px}
#battle-fx{position:absolute;inset:0;pointer-events:none;z-index:10;overflow:visible}.spell-bolt{position:absolute;width:20px;height:20px;border-radius:50%;background:#fff;box-shadow:0 0 12px #fff,0 0 24px var(--spell),0 0 50px var(--spell)}.spell-bolt::after{content:'';position:absolute;top:5px;right:4px;width:70px;height:10px;border-radius:50%;background:linear-gradient(90deg,transparent,var(--spell));transform-origin:right center}.fx-spark{position:absolute;color:var(--spell);font-size:20px;text-shadow:0 0 8px currentColor}.hit-ring{position:absolute;width:110px;height:110px;border:3px solid var(--spell);border-radius:50%;box-shadow:0 0 30px var(--spell),inset 0 0 20px var(--spell);transform:translate(-50%,-50%)}#evolution-cue{position:absolute;inset:35% 0 auto;text-align:center;pointer-events:none;z-index:15;font:500 34px Fraunces,Georgia,serif;text-shadow:0 0 10px #efbdff,0 0 30px #ca7dff;opacity:0}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}dialog{color:#fff1ff;width:min(340px,90vw);border:1px solid #a384c7;border-radius:24px;background:linear-gradient(145deg,#251a3c,#100d20);padding:26px;box-shadow:0 0 60px #935dd957}dialog::backdrop{background:#050410ad;backdrop-filter:blur(8px)}dialog h2{font:500 29px Fraunces,Georgia,serif;text-align:center;margin:0 0 24px}dialog .text-button{display:block;margin:8px auto}.help,#audio-status{font-size:13px;line-height:1.5;color:#cabbd9;text-align:center}.setting{display:flex;align-items:center;gap:10px;font-size:14px;margin:17px 0 20px;min-height:44px}.setting input{width:23px;height:23px;accent-color:#ca9afc}.result-star{text-align:center;font-size:65px;color:#d8acff;text-shadow:0 0 30px #b884ff}
@keyframes foilSweep{0%,20%{background-position:130% 0}70%,100%{background-position:-30% 0}}@keyframes handSwipe{0%,35%,100%{transform:translate(-8px,8px);opacity:.5}65%{transform:translate(8px,-12px);opacity:1}}@keyframes hearts{0%{transform:translateY(7px) scale(.6);opacity:.1}50%{opacity:1}100%{transform:translateY(-15px) scale(1.1);opacity:0}}@keyframes ultReady{50%{filter:brightness(1.4);transform:scale(1.05)}}@keyframes arrive{from{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}
@media(min-width:650px){header{height:95px}main{padding-bottom:20px}#draft h1{margin:16px 0 28px}.roster{gap:23px}.pick-card{max-height:255px}body[data-screen=battle] header{height:76px}#battle{height:calc(100svh - 88px);grid-template-rows:28px minmax(270px,1fr) 110px 72px}.battle-card{width:46%;height:65%}.swipe-hint{width:46%;font-size:19px}.rituals{gap:100px}.arena-option strong{font-size:18px}}
@media(max-height:650px){header{height:62px}h1{margin:10px 0 14px;font-size:24px}.roster{gap:10px}.pick-card{aspect-ratio:.8}.selection-dock{margin-top:13px;padding:9px}.slots{margin-bottom:8px}.slot{height:42px;width:35px}body[data-screen=battle] header{height:54px}#battle{height:calc(100svh - 62px - var(--safe-bottom));grid-template-rows:26px minmax(220px,1fr) 86px 60px}.bench-card{height:53px;width:42px}.rituals{transform:scale(.86);transform-origin:top center}.card-top{padding:3px 5px 6px}.card-bottom{padding-bottom:6px}.chosen-team{padding:5px}.chosen-team .pick-card{width:18%}.arena-grid{gap:9px;margin-bottom:13px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}body.gentle *,body.gentle *::before,body.gentle *::after{animation:none!important;transition:none!important}

/* Generated distant scenery, with live foreground crystals and reflections. */
.backdrop{background:linear-gradient(#0c092118,#0b081b35),url(assets/arenas/cave.png) center/cover;transition:opacity .6s}
body[data-arena=forest] .backdrop{background-image:linear-gradient(#0c092118,#0b081b35),url(assets/arenas/forest.png)}
body[data-arena=sand] .backdrop{background-image:linear-gradient(#0c092118,#0b081b35),url(assets/arenas/sand.png)}
body[data-arena=planet] .backdrop{background-image:linear-gradient(#0c092118,#0b081b35),url(assets/arenas/planet.png)}
body[data-arena=peak] .backdrop{background-image:linear-gradient(#0c092118,#0b081b35),url(assets/arenas/peak.png)}

.battle-card.has-model{background:transparent}.battle-card.has-model .card-art{opacity:0}

.touch-hand{color:#e5c7ff;filter:drop-shadow(0 0 7px #bc8aff)}.egg-button{background:radial-gradient(ellipse at 50% 48%,#be64ff35,transparent 67%)!important}.egg-button:disabled{opacity:.62}.foil{border-radius:8px}.foil::before{border-radius:4px}

/* Stage treatment stays legible while Astra's distinct anatomy is pending. */
.stage-name{font-size:11px;font-weight:600}.stage-mark{display:grid;place-items:center;width:24px;height:22px;line-height:22px;font-size:20px}
.battle-card[data-stage=Adult] .stage-mark{background:#4c3a62;border:1px solid #e2c4ff;border-radius:50%;color:#f5eaff;box-shadow:0 0 10px #c496ff66}
.battle-card[data-stage=Adult]::before{border-width:2px;border-color:#e6caff}
.battle-card[data-stage=Omega] .stage-mark{width:30px;height:26px;font-size:27px;color:#ffe8a6;text-shadow:0 0 12px #ffbf55}
.battle-card[data-stage=Omega] .stage-name{color:#ffe3a1;letter-spacing:1.6px;text-transform:uppercase;font-size:12px;text-shadow:0 0 10px #fca746}
.battle-card[data-stage=Omega]::before{border:2px solid #ffdf9a;box-shadow:inset 0 0 19px #ffd58055,0 0 9px #ffd17e7a}
.battle-card[data-stage=Omega]::after{opacity:.65;animation-duration:4s}
.battle-card[data-dragon=ember][data-stage=Adult] .card-art{background-image:url(assets/concepts/evolution-reference.png);background-size:389% 506%;background-position:50% 35.5%}
.battle-card[data-dragon=ember][data-stage=Omega] .card-art{background-image:url(assets/concepts/evolution-reference.png);background-size:389% 506%;background-position:92% 33.5%}

header{height:calc(76px + var(--safe-top))}body[data-screen=battle] header{height:calc(64px + var(--safe-top))}
@media(min-width:650px){header{height:calc(95px + var(--safe-top))}body[data-screen=battle] header{height:calc(76px + var(--safe-top))}#battle{height:calc(100svh - 88px - var(--safe-top) - var(--safe-bottom))}}
@media(max-height:650px){header{height:calc(62px + var(--safe-top))}body[data-screen=battle] header{height:calc(54px + var(--safe-top))}#battle{height:calc(100svh - 62px - var(--safe-top) - var(--safe-bottom))}}
@media(orientation:landscape) and (max-height:550px){main{max-width:900px}#battle{grid-template-columns:minmax(0,1fr) 154px;grid-template-rows:24px minmax(155px,1fr) 64px}.battle-heading{grid-column:1/-1}.board{grid-column:1;grid-row:2/4}.battle-card{width:44%;height:95%}.rituals{grid-column:2;grid-row:2;flex-direction:column;gap:0;align-items:center;transform:scale(.82);transform-origin:top center}.bench{grid-column:2;grid-row:3;gap:6px}.bench-card{width:44px;height:58px}.swipe-hint{display:none}}

@media(min-width:650px) and (min-height:651px){#battle{height:calc(100svh - 96px - var(--safe-top) - var(--safe-bottom))}}
@media(max-height:650px){main{padding-bottom:calc(8px + var(--safe-bottom))}}

/* The DOM supplies accessible controls. All character, card and world art is rendered. */
body.full-3d .backdrop{display:none}body.full-3d .vignette{background:linear-gradient(#09081977,transparent 24%,transparent 80%,#09081988)}
body.full-3d .card-art,body.full-3d .arena-art{display:none!important}
body.full-3d .foil,body.full-3d .slot,body.full-3d .battle-card.has-model{background:transparent!important;border-color:transparent!important;box-shadow:none!important}
body.full-3d .foil:before,body.full-3d .foil:after{display:none!important}
body.full-3d .battle-card .card-top{background:linear-gradient(#10172bd9,transparent);}
body.full-3d .card-bottom,body.full-3d .pick-card .card-name{background:linear-gradient(transparent,#090d20b8);}
body.full-3d .pick-card{animation:none;transform:none}body.full-3d .pick-card[aria-pressed=true]{outline:2px solid #b6ffe0;outline-offset:2px}
body.full-3d .arena-option{overflow:visible}body.full-3d .arena-option strong{background:linear-gradient(transparent,#080c22d9)}
body.full-3d .slot{overflow:visible}body.full-3d .egg-button .egg-fallback{display:none}

body.full-3d .hearts,body.full-3d .charge-ring{visibility:hidden}

@media(max-width:600px){body.full-3d .battle-card.player{left:-10px}body.full-3d .battle-card.rival{right:-10px}}
body.full-3d .bench-card .hp{height:8px}
