
/* Shared art and layout for the cultivation expansion. */
.exp-dialog{width:min(850px,calc(100vw - 24px));max-height:92dvh;padding:0;box-sizing:border-box;border:1px solid #c7b17c;border-radius:22px;background:linear-gradient(145deg,#315b4f,#123c34 65%);color:#e9edda;box-shadow:0 30px 90px #000a}
.exp-dialog::backdrop{background:#031b24b3;backdrop-filter:blur(5px)}
.exp-head{position:sticky;top:0;z-index:3;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 22px;background:#153d35;border-bottom:1px solid #bbab7255}
.exp-head h2{font-size:24px;margin:0;color:#efdaa4}.exp-head button{padding:8px 14px}
.exp-tabs{display:flex;gap:8px;padding:12px 22px 0}.exp-tabs button{flex:1;padding:10px 8px;font-size:14px}.exp-tabs [aria-pressed=true]{background:#dbca90;color:#153a32}
.exp-body{padding:18px 22px;overflow-x:hidden}.exp-body h3,.exp-body h4{color:#eed89f}.exp-body p{line-height:1.65}.exp-note{font-size:13px;color:#bfd3c4;line-height:1.7}
.exp-body form,.beast-admin form{display:grid;gap:12px;margin:16px 0}
.exp-body label,.beast-admin label{display:grid;gap:7px;min-width:0}
.exp-body input,.exp-body select,.beast-admin input,.beast-admin select{width:100%;min-width:0;box-sizing:border-box;border:1px solid #bda97588;background:#103830;color:#f2e6c6;border-radius:8px;padding:11px;font:inherit}
.exp-body fieldset,.beast-admin fieldset{border:1px solid #bda97555;border-radius:10px;min-width:0}
.exp-body details{margin-top:14px;border-top:1px solid #bbab7244;padding-top:12px}.exp-body summary{cursor:pointer;color:#e7d49b}
.beast-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.root-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin:24px 0}
.root-choice{border:1px solid #bfa978;border-radius:18px;background:radial-gradient(circle at 40% 20%,#608f6a,#133d33 80%);color:#efe0b9;box-shadow:inset 0 1px 0 #fff5,0 4px 10px #021f2866;padding:20px 4px}
.root-choice strong{display:block;font:36px/1.4 serif}.root-choice small{display:block;margin-top:4px}.root-choice[aria-pressed=true]{outline:3px double #f3da91;opacity:1}
.element-fire{background:radial-gradient(circle at 40% 20%,#a16b44,#562c30 80%)}.element-earth{background:radial-gradient(circle at 40% 20%,#af9760,#554927 80%)}.element-metal{background:radial-gradient(circle at 40% 20%,#899caa,#354754 80%)}.element-water{background:radial-gradient(circle at 40% 20%,#628ba6,#183e5c 80%)}
.exp-shop-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.exp-product{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center;padding:18px 14px;border:1px solid #bca46d77;border-radius:17px;background:radial-gradient(ellipse at 50% 8%,#b5c49b22,transparent 65%),#123b3288}
.exp-product-art{width:140px;height:140px;object-fit:contain;max-width:100%;filter:drop-shadow(0 6px 5px #06251f66)}
.exp-product-art.board-art{border-radius:10px}.exp-product h3{font-size:19px;margin:10px 0 0}.exp-product p{font-size:13px;margin:5px 0;line-height:1.7}.exp-product>p:first-of-type{flex:1}.exp-product>strong{color:#f5d88f;font-size:20px}.exp-product button{font-size:14px;padding:10px 12px;width:100%}
.beast-banner{position:relative;isolation:isolate;display:flex;align-items:center;gap:20px;min-height:120px;border:1px solid #ba9e62;border-radius:18px;padding:18px 24px;margin:0 0 18px;overflow:hidden;background:#193f33;box-shadow:inset 0 0 0 4px #74937133,0 5px 15px #102c3655}
.beast-banner-art{position:absolute;z-index:-1;inset:0;background:linear-gradient(90deg,#092e2e11,#123e35eb 58%),url('beast-guardian.png') 15% 44%/cover no-repeat}
.beast-banner>div:not(.beast-banner-art){margin-left:28%;flex:1}.beast-banner h3{margin:5px 0;font-size:23px;color:#ffe3aa}.beast-banner p{margin:5px 0;font-size:13px;color:#d7e4cf}.beast-banner small{font-size:11px;color:#cde3c2}.beast-banner strong{font-size:14px;color:#edd19a}.beast-banner button{flex:none}
.beast-hero{display:grid;grid-template-columns:1.1fr 1fr;gap:20px;align-items:center;margin:18px 0;border:1px solid #b5a47266;border-radius:16px;overflow:hidden;background:#163f32}
.beast-hero img{width:100%;height:210px;object-fit:cover}.beast-hero>div{padding:12px 20px 12px 0}.beast-hero h3{font-size:25px;margin:9px 0}.beast-hero p{font-size:13px}.beast-hero progress{width:100%;height:15px;accent-color:#90bc73}.beast-hero progress::-webkit-progress-bar{background:#071f24;border-radius:20px}.beast-hero progress::-webkit-progress-value{background:linear-gradient(90deg,#578763,#bfcd8c);border-radius:20px}
.beast-hero.in-challenge{grid-template-columns:110px 1fr;margin:10px 0}.beast-hero.in-challenge img{height:86px}.beast-hero.in-challenge h3{font-size:19px;margin:5px 0}.beast-hero.in-challenge p{margin:4px 0}.beast-hero.in-challenge p:last-child{display:none}
.beast-empty{text-align:center}.beast-empty img{max-height:260px;width:100%;object-fit:cover;border-radius:14px;margin-top:16px}
.beast-rewards{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:22px}.beast-rewards article{padding:14px;border:1px solid #af9d6888;border-radius:12px;background:#103b31}.beast-rewards h4{margin:0 0 10px}.beast-rewards p{font-size:14px}.beast-rewards button{padding:9px 16px}
.hunt-result{padding:16px;margin:15px 0;border:1px solid #d5bd7d;border-radius:12px;background:#7e956c22}.hunt-result strong{color:#f4dca0}.hunt-result p{font-size:13px}
.memory-status{display:grid;grid-template-columns:1fr auto;gap:6px;margin:15px 0}.memory-status b{font-size:26px;color:#f4dc96;font-variant-numeric:tabular-nums}.memory-status strong{align-self:center;font-size:20px}.memory-status small{grid-column:1/-1;color:#c3d8c5}
.memory-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;max-width:490px;margin:0 auto}
.memory-card{position:relative;display:grid;place-content:center;aspect-ratio:1.12;min-height:55px;padding:5px;border:2px solid #bca66d;border-radius:10px;color:#e9dab0;box-shadow:inset 0 0 0 3px #174439,0 3px 5px #071f2666;background:radial-gradient(circle,#547963,#123e32 72%);touch-action:manipulation}
.memory-card.covered{background:linear-gradient(#163f35aa,#163f35dd),url('art-root-scroll.png') center/90% no-repeat}.memory-card.revealed{background:#eee7cb;color:#214b3d;box-shadow:inset 0 0 0 3px #c3ccaa,0 3px 5px #071f2666}.memory-card:disabled{opacity:1;cursor:default}.memory-card.matched{background:#b9d0b6;border-color:#7cab8a;color:#305d45}.card-rank{font:32px/1.1 Georgia,serif}.memory-card small{font-size:10px;margin-top:5px}
.beast-admin{max-width:950px;margin:28px auto;padding:0 18px 50px}.beast-admin>.hub-panel{margin-bottom:18px}.beast-admin h1{color:#f0d99c}.beast-admin [hidden]{display:none!important}.beast-admin-list article{border-top:1px solid #b39f6855;padding:16px 0}
.profile-avatar[data-frame="lotus-frame"],.seat-disc[data-frame="lotus-frame"]{position:relative;overflow:visible!important;isolation:isolate;border:0!important;outline:0!important;box-shadow:none!important;margin:10px}
.profile-avatar[data-frame="lotus-frame"]::before,.seat-disc[data-frame="lotus-frame"]::before{content:'';position:absolute;inset:-23%;background:url('skin-lotus-frame.png') center/contain no-repeat;z-index:2;pointer-events:none;filter:drop-shadow(0 2px 3px #072a2288)}
.game-board:is(.go,.gomoku,.reversi) .token.skin-lotus,.skin-round-lotus-black .cell .stone.black,.skin-round-lotus-white .cell .stone.white{border:0!important;outline:0!important;background-color:transparent!important;box-shadow:none!important;background-position:center!important;background-size:104% 104%!important;background-repeat:no-repeat!important;filter:drop-shadow(0 2px 1px #26372c88)}
.game-board:is(.go,.gomoku,.reversi) .token.skin-lotus.p1,.skin-round-lotus-black .cell .stone.black{background-image:url('skin-lotus-black.png')!important}
.game-board:is(.go,.gomoku,.reversi) .token.skin-lotus.p2,.skin-round-lotus-white .cell .stone.white{background-image:url('skin-lotus-white.png')!important}
.series-lotus .side-1,.series-lotus .side-2{border:0!important;box-shadow:none!important;background:transparent url('skin-lotus-black.png') center/contain no-repeat;color:transparent}.series-lotus .side-2{background-image:url('skin-lotus-white.png')}
#board-shell[data-board-skin="lotus-board"],.board-wrap[data-board-skin="lotus-board"]{background:#dce5cf url('skin-lotus-board.png') center/100% 100% no-repeat!important;border-color:#9bad84!important}
#board-shell[data-board-skin="lotus-board"] .game-board,.board-wrap[data-board-skin="lotus-board"] #board{background-color:transparent!important}
#board-shell[data-board-skin="lotus-board"] .game-board{background-image:none!important}
#board-shell[data-board-skin="lotus-board"] .game-board.chess .board-cell{background:#d4dfc3cc}#board-shell[data-board-skin="lotus-board"] .game-board.chess .board-cell.dark{background:#678a73dd}
#board-shell[data-board-skin="lotus-board"] .game-board.reversi .board-cell{border-color:#507b6399}
.exp-dialog .cult-toast{position:sticky;left:auto;bottom:0;transform:none;margin:10px auto;max-width:95%}
@media(max-width:740px){.exp-dialog{max-height:94dvh}.exp-head{padding:12px 14px}.exp-head h2{font-size:21px}.exp-tabs{padding:10px 12px 0;gap:5px}.exp-tabs button{font-size:12px}.exp-body{padding:14px}.root-grid{gap:6px}.root-choice{padding:15px 2px}.root-choice strong{font-size:29px}.root-choice small{font-size:11px}.exp-shop-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.exp-product{padding:12px 10px}.exp-product-art{height:112px;width:112px}.exp-product h3{font-size:17px}.exp-product button{font-size:12px}.beast-banner{gap:10px;padding:14px;margin-bottom:12px;min-height:90px}.beast-banner>div:not(.beast-banner-art){margin-left:15%}.beast-banner h3{font-size:18px}.beast-banner p{font-size:11px}.beast-banner small{display:none}.beast-banner strong{font-size:11px}.beast-banner button{font-size:12px;padding:10px}.beast-hero{gap:12px;grid-template-columns:1fr 1fr}.beast-hero img{height:155px}.beast-hero>div{padding:10px 10px 10px 0}.beast-hero h3{font-size:20px}.beast-rewards article{padding:12px}.beast-rewards p{font-size:12px}.memory-grid{gap:8px;max-width:min(410px,calc(100dvh - 305px))}.memory-card{aspect-ratio:1;min-height:48px}.card-rank{font-size:26px}.memory-card small{display:none}.beast-hero.in-challenge{grid-template-columns:85px 1fr;gap:9px}.beast-hero.in-challenge img{height:72px}.beast-hero.in-challenge h3{font-size:17px}.beast-hero.in-challenge small{font-size:11px}.memory-status{margin:8px 0}.exp-dialog:has(.memory-grid) .exp-event-select{display:none}.exp-dialog:has(.memory-grid) .exp-note{font-size:11px;margin-bottom:0}}


.board-wrap[data-board-skin="lotus-board"] #board{background-image:none!important}

.exp-dialog:has(.memory-grid) .exp-event-select{display:none}.memory-grid{max-width:min(440px,calc(92dvh - 320px))}@media(max-width:740px){.memory-grid{max-width:min(410px,calc(94dvh - 320px))}}

.memory-grid{max-width:min(440px,calc(92dvh - 380px))}@media(max-width:740px){.memory-grid{max-width:min(410px,calc(94dvh - 320px))}}

/* The material belongs to the viewer's table; board geometry stays above it. */
#board-shell[data-board-skin="lotus-board"] .river{background:#dce5cf;color:#385545}
#board-shell[data-board-skin="lotus-board"] .game-board.chess .board-cell.selected{background:#a2ca61}
#board-shell[data-board-skin="lotus-board"] .game-board.chess .board-cell.last{box-shadow:inset 0 0 0 3px #dfba59}
#board-shell[data-board-skin="lotus-board"]:has(.checkers){border-radius:17px}
#board-shell[data-board-skin="lotus-board"]:has(.checkers)::before{border-radius:11px}
#board-shell[data-board-skin="lotus-board"] .game-board.checkers{box-shadow:none;border-color:transparent}

/* Illustrated card textures. Hidden cards never include their rank in the DOM. */
.memory-grid{width:100%;max-width:min(400px,calc(69dvh - 255px));gap:8px}
.memory-card{aspect-ratio:3/4;min-height:48px;padding:0;border:1px solid #d7bd78;border-radius:9px;overflow:hidden;box-shadow:0 3px 6px #041d2266;background:#103d34;isolation:isolate;container-type:inline-size}
.memory-card.covered{background:#103d34 url('beast-card-back-v1.webp') center/100% 100% no-repeat}
.memory-card.revealed,.memory-card.matched{background:#f0ead8 url('beast-card-face-v1.webp') center/100% 100% no-repeat;color:#174c41;box-shadow:0 3px 6px #041d2266}
.memory-card .card-rank{position:relative;margin-top:-14%;font:600 clamp(24px,48cqw,48px)/1 Georgia,'Times New Roman',serif;text-shadow:0 1px 0 #fff9}
.memory-card.matched{border-color:#b9ead1;box-shadow:0 0 0 2px #71b69888,0 3px 6px #041d2266}
.memory-card.matched::after{content:'✓';position:absolute;right:5px;bottom:5px;display:grid;place-items:center;width:17px;height:17px;border-radius:50%;font:700 12px/1 sans-serif;color:#e9f6dc;background:#1a5849;box-shadow:0 0 0 1px #c1dca5}
.memory-card:not(:disabled):hover{border-color:#ffdf8c;box-shadow:0 0 0 2px #d5bc7066,0 4px 8px #041d2266}
.memory-card:focus-visible{outline:3px solid #f7e6b4;outline-offset:2px}
@media(max-width:740px){.memory-grid{max-width:min(380px,calc(70.5dvh - 225px));gap:7px}.memory-card{aspect-ratio:3/4;min-height:48px}}

/* Five elemental encounters share one art mapping in BeastVisuals. */
.beast-banner-art{background:none;inset:0;overflow:hidden}
.beast-banner-art img{position:absolute;left:0;top:50%;transform:translateY(-50%);width:34%;height:auto;min-height:100%;object-fit:cover}
.beast-banner-art::after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,transparent 14%,#123e35ed 37%,#123e35 65%)}
.beast-hero:not(.in-challenge){grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
.beast-hero:not(.in-challenge) img{height:auto;aspect-ratio:1;object-fit:contain;background:#0c2928}
.beast-hero.in-challenge img{object-fit:contain;background:#0c2928}
.beast-art-preview{display:flex;gap:20px;align-items:center;padding:14px;border:1px solid #bda97566;border-radius:14px;background:#0f302b}
.beast-art-preview img{width:120px;height:120px;border-radius:10px;object-fit:contain}.beast-art-preview p{margin:6px 0;color:#cfddc9}.beast-art-preview strong{color:#efdaa4}
.beast-cinematic{width:min(620px,calc(100vw - 24px));max-height:92dvh;padding:0;border:1px solid #d9be7b;border-radius:22px;overflow:hidden;background:#102c29;color:#f5e4b1;box-shadow:0 22px 90px #000b}
.beast-cinematic::backdrop{background:#021813c7;backdrop-filter:blur(5px)}
.beast-cinematic-stage{position:relative;isolation:isolate;aspect-ratio:1;max-height:90dvh;overflow:hidden}
.beast-cinematic-image{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;animation:beast-recoil 3s ease-out both}
.beast-cinematic-shade{position:absolute;inset:0;background:linear-gradient(#041e26a6,transparent 34%,transparent 54%,#021b23df)}
.beast-cinematic-heading{position:absolute;left:7%;top:6%;right:7%;text-align:center;text-shadow:0 2px 8px #000}.beast-cinematic-heading small{letter-spacing:.18em;color:#f4ddaa}.beast-cinematic-heading h2{font-size:clamp(23px,4.5vw,34px);margin:8px 0}
.beast-sword{position:absolute;left:-45%;top:44%;width:45%;height:auto;opacity:0;filter:drop-shadow(0 0 7px #c0ffed);animation:beast-sword-flight 3s ease-in both}
.beast-sword svg{display:block;width:100%;height:auto}.beast-sword::before{content:'';position:absolute;right:95%;top:42%;height:15%;width:80%;background:linear-gradient(90deg,transparent,#a0f6db);border-radius:50%}
.sword-one{--flight-angle:13deg;--target-top:44%}.sword-two{--flight-angle:-18deg;--target-top:56%;animation-name:beast-sword-flight-two}.sword-three{--flight-angle:0deg;--target-top:48%;animation-name:beast-sword-flight-three}
.beast-impact{position:absolute;left:48%;top:47%;width:18%;aspect-ratio:1;border:2px solid #fff1b1;border-radius:50%;background:radial-gradient(circle,#f9e6a5aa,transparent 60%);box-shadow:0 0 24px #b4f8d899;opacity:0;animation:beast-impact 3s ease-out both}
.beast-cinematic-result{position:absolute;left:8%;right:8%;bottom:13%;display:flex;align-items:baseline;justify-content:center;gap:10px;flex-wrap:wrap;text-shadow:0 2px 12px #031914;animation:beast-damage 3s ease-out both}.beast-cinematic-result span{width:100%;text-align:center;letter-spacing:.2em;color:#e9dbb4}.beast-cinematic-result strong{font:700 clamp(34px,8vw,54px)/1.05 Georgia,serif;color:#ffe4a0}.beast-cinematic-result small{font-size:15px}
.beast-cinematic-skip{position:absolute;right:4%;bottom:4%;font-size:12px;padding:7px 12px}
@keyframes beast-sword-flight{0%,12%{left:-45%;top:30%;opacity:0;transform:rotate(var(--flight-angle))}18%{opacity:1}36%{left:42%;top:var(--target-top);opacity:1}42%,100%{left:58%;top:var(--target-top);opacity:0;transform:rotate(var(--flight-angle))}}
@keyframes beast-sword-flight-two{0%,24%{left:-45%;top:80%;opacity:0;transform:rotate(var(--flight-angle))}30%{opacity:1}48%{left:42%;top:var(--target-top);opacity:1}54%,100%{left:58%;top:var(--target-top);opacity:0;transform:rotate(var(--flight-angle))}}
@keyframes beast-sword-flight-three{0%,36%{left:-45%;top:48%;opacity:0;transform:rotate(var(--flight-angle))}42%{opacity:1}60%{left:42%;top:var(--target-top);opacity:1}66%,100%{left:58%;top:var(--target-top);opacity:0;transform:rotate(var(--flight-angle))}}
@keyframes beast-impact{0%,34%{opacity:0;transform:scale(.3)}40%{opacity:.75;transform:scale(1)}68%{opacity:.4;transform:scale(2.4)}85%,100%{opacity:0;transform:scale(3)}}
@keyframes beast-recoil{0%,34%{transform:scale(1)}38%{transform:translate(5px,2px) scale(1.01)}44%{transform:translate(-3px,0)}50%{transform:translate(4px,1px)}60%{transform:translate(-2px,0)}70%,100%{transform:none}}
@keyframes beast-damage{0%,52%{opacity:0;transform:translateY(16px)}72%,100%{opacity:1;transform:none}}
@media(max-width:740px){.beast-banner-art img{width:38%}.beast-banner-art::after{background:linear-gradient(90deg,#103b3533,#123e35e8 37%,#123e35 66%)}.beast-art-preview{gap:12px}.beast-art-preview img{width:95px;height:95px}.beast-hero:not(.in-challenge){grid-template-columns:1fr}.beast-hero:not(.in-challenge) img{max-height:230px;object-fit:contain}.beast-hero:not(.in-challenge)>div{padding:0 16px 12px}.beast-hero:not(.in-challenge) p{margin:6px 0}}
@media(prefers-reduced-motion:reduce){.beast-cinematic-image,.beast-sword,.beast-impact,.beast-cinematic-result{animation:none}.beast-sword,.beast-impact{display:none}.beast-cinematic-result{opacity:1;transform:none}}

/* A tap is acknowledged immediately, while the server confirms the card. */
.memory-card.pending{border-color:#ffe59e;box-shadow:0 0 0 2px #d7bc7faa,inset 0 0 20px #e7ca8055;transform:scale(.96)}
.memory-card.pending::after{content:'';position:absolute;inset:auto 20% 12%;height:3px;border-radius:3px;background:#ffe9b3;animation:memory-await .6s ease-in-out infinite alternate}
.memory-card:not(:disabled):active{transform:scale(.96)}
@keyframes memory-await{from{opacity:.35}to{opacity:1}}
@media(prefers-reduced-motion:reduce){.memory-card.pending::after{animation:none}.memory-card.pending,.memory-card:not(:disabled):active{transform:none}}

/* Grid dimensions come from the event; avoid shrinking larger grids into tiny targets. */
.memory-grid.variable-grid{grid-template-columns:repeat(var(--memory-cols,4),minmax(0,1fr));max-width:480px;gap:8px}
.variable-grid .memory-card{aspect-ratio:1;min-width:0;min-height:44px}
.variable-grid .card-rank{font-size:clamp(20px,40cqw,42px)}
.hunt-completed-note{color:#e9d69b}
@media(max-width:740px){.memory-grid.variable-grid{max-width:380px;gap:5px}.exp-dialog:has(.variable-grid) .exp-body{padding:10px}.variable-grid .memory-card{min-height:42px}}

/* One permanent achievement, shown independently of per-event currency rewards. */
.beast-finisher{margin:22px 0;padding:20px;border:1px solid #c6a77699;border-radius:16px;background:radial-gradient(ellipse at 50% 20%,#85683926,transparent 65%),linear-gradient(145deg,#253f3e,#17312e);box-shadow:inset 0 1px #f9dfa318}
.beast-finisher-heading{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px}.beast-finisher h4{margin:0;color:#f2deb0;font-size:17px}.beast-finisher-heading>span{padding:4px 10px;border:1px solid #d4b87977;border-radius:20px;color:#eed7a5;font-size:12px}
.beast-finisher-art{display:grid;place-items:center;margin:18px 0 12px}.beast-finisher-art .honor-nameplate.has-art{width:min(480px,100%)}
.beast-finisher p{line-height:1.8;overflow-wrap:break-word;word-break:normal}.beast-finisher-status{margin:0 0 16px;text-align:center;color:#c9d6cb;font-size:14px}.beast-finisher-status.is-owned{color:#ffe3a0}.beast-finisher .beast-finisher-note{color:#b7c9c1;font-size:13px}.beast-final-blow{padding-top:12px;border-top:1px solid #b8a77144;color:#ead3a2}
@media(max-width:480px){.beast-finisher{padding:14px}.beast-finisher h4{font-size:16px}.beast-finisher-art{margin:16px 0 10px}.beast-finisher>button{width:100%;white-space:normal}}
