/* Finite, compositor-friendly presentation. Reward state is owned by the server. */
body:has([data-forge]) main{padding-top:25px;padding-bottom:30px}
.forge-page{--forge-tone:#c4ccdc;--forge-ease:cubic-bezier(.2,.75,.25,1);max-width:790px;margin:0 auto 15px;font-variant-numeric:tabular-nums;animation:forge-enter .4s var(--forge-ease) both;color:var(--text,#f8fafc)}.forge-page [hidden]{display:none!important}.forge-heading{display:flex;justify-content:space-between;align-items:center;margin:0 0 17px}.forge-heading h1{font-size:25px;letter-spacing:-.035em;font-weight:850;margin:0}.forge-controls{display:flex;align-items:center;gap:5px}.forge-icon-button{display:grid;place-items:center;width:38px;height:38px;min-height:38px!important;background:transparent;border:1px solid transparent;border-radius:var(--button-radius,6px);color:var(--muted,#a5aec2);cursor:pointer;padding:9px;transition:color .15s,background .15s}.forge-icon-button:hover{background:var(--surface2,#171b30);color:var(--text,#f8fafc)}.forge-icon-button svg{width:19px;height:19px}.sound-cross{display:none}.is-muted .sound-cross{display:block}.is-muted .sound-wave{display:none}
.forge-console{position:relative;border:1px solid var(--border,#2b3150);border-radius:var(--card-radius,10px);background:var(--surface,#111526)}.forge-stage{position:relative;text-align:center;padding:17px 20px 21px;min-height:329px}.forge-level{display:flex;align-items:center;justify-content:center;gap:6px;color:var(--muted,#a5aec2);font-size:10px;letter-spacing:.12em;font-weight:800}.forge-level svg{width:12px;height:12px;color:#e0b57d}.forge-visual{width:230px;height:181px;position:relative;display:grid;place-items:center;margin:0 auto;isolation:isolate;color:var(--forge-tone);--seed-size:6px}.forge-page[data-level="7"] .forge-visual{--seed-size:9px}.forge-page[data-level="4"] .forge-visual,.forge-page[data-level="5"] .forge-visual,.forge-page[data-level="6"] .forge-visual{--seed-size:8px}
.forge-visual>.forge-glyph{width:174px;height:174px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) scale(.06);opacity:0;z-index:2;pointer-events:none}.forge-halo{position:absolute;inset:3px 18px;background:radial-gradient(ellipse,color-mix(in srgb,var(--forge-tone) 18%,transparent),transparent 68%);opacity:.32;pointer-events:none}.forge-glyph{color:var(--forge-tone);overflow:visible}.glyph-core,.glyph-outer,.glyph-dust{transform-origin:100px 100px}.glyph-sheen{opacity:0}.glyph-orbit{opacity:.6}.glyph-crown{opacity:.85}.glyph-dust{opacity:.7}
/* A tiny source of light is all that exists before materialisation. */
.forge-seed{position:absolute;inset:0;z-index:2;pointer-events:none;animation:seed-arrive 1.1s var(--forge-ease) both}.seed-mote,.seed-aura,.seed-satellite{position:absolute;left:50%;top:50%;border-radius:50%}.seed-mote{width:var(--seed-size);height:var(--seed-size);transform:translate(-50%,-50%);background:#f4eee8;box-shadow:0 0 8px 2px var(--forge-tone),0 0 24px 5px color-mix(in srgb,var(--forge-tone) 24%,transparent)}.seed-aura{width:76px;height:76px;transform:translate(-50%,-50%);background:radial-gradient(circle,color-mix(in srgb,var(--forge-tone) 15%,transparent),transparent 66%)}.seed-satellite{width:2px;height:2px;background:var(--forge-tone);opacity:0;transform:translate(var(--sx),var(--sy));box-shadow:0 0 5px var(--forge-tone)}.satellite-a{--sx:-19px;--sy:10px}.satellite-b{--sx:24px;--sy:-14px}.satellite-c{--sx:-7px;--sy:-29px}.forge-page[data-level="2"] .satellite-a,.forge-page[data-level="3"] .satellite-a{opacity:.45}.forge-page[data-level="4"] .satellite-a,.forge-page[data-level="5"] .satellite-a,.forge-page[data-level="6"] .satellite-a,.forge-page[data-level="7"] .satellite-a,.forge-page[data-level="4"] .satellite-b,.forge-page[data-level="5"] .satellite-b,.forge-page[data-level="6"] .satellite-b,.forge-page[data-level="7"] .satellite-b{opacity:.55}.forge-page[data-level="7"] .satellite-c{opacity:.6}
.forge-energy,.forge-flare,.forge-particles{position:absolute;inset:0;pointer-events:none}.forge-energy{z-index:1}.energy-orbit{position:absolute;left:50%;top:50%;width:88px;height:88px;margin:-44px;border:1px solid transparent;border-top-color:color-mix(in srgb,var(--forge-tone) 38%,transparent);border-bottom-color:color-mix(in srgb,var(--forge-tone) 12%,transparent);border-radius:50%;opacity:0}.energy-orbit b{position:absolute;width:3px;height:3px;top:11px;left:11px;border-radius:50%;background:var(--forge-tone);box-shadow:0 0 7px var(--forge-tone)}.energy-orbit b+b{top:auto;left:auto;bottom:11px;right:11px;width:2px;height:2px}.orbit-b{width:126px;height:126px;margin:-63px;display:none}.orbit-c{width:164px;height:164px;margin:-82px;display:none}.orbit-b b{top:17px;left:17px}.orbit-b b+b{top:auto;left:auto;bottom:17px;right:17px}.orbit-c b{top:23px;left:23px}.orbit-c b+b{top:auto;left:auto;bottom:23px;right:23px}.forge-page[data-level="3"] .orbit-b,.forge-page[data-level="4"] .orbit-b,.forge-page[data-level="5"] .orbit-b,.forge-page[data-level="6"] .orbit-b,.forge-page[data-level="7"] .orbit-b,.forge-page[data-level="6"] .orbit-c,.forge-page[data-level="7"] .orbit-c{display:block}.gather-mote{position:absolute;left:50%;top:50%;width:2px;height:2px;border-radius:50%;background:var(--forge-tone);opacity:0;transform:rotate(var(--angle)) translateX(var(--radius)) scale(.3);box-shadow:0 0 5px var(--forge-tone)}
[data-rank="1"]{--forge-tone:#c4ccdc}
.forge-page[data-level="2"],[data-rank="2"]{--forge-tone:#75dca4}.forge-page[data-level="3"],[data-rank="3"]{--forge-tone:#6dbfff}.forge-page[data-level="4"],[data-rank="4"]{--forge-tone:#b599ff}.forge-page[data-level="5"],[data-rank="5"]{--forge-tone:#d79be8}.forge-page[data-level="6"],[data-rank="6"]{--forge-tone:#ebc47d}.forge-page[data-level="7"],[data-rank="7"]{--forge-tone:#f5c16e}
.forge-reward{display:flex;align-items:baseline;justify-content:center;gap:9px;margin:2px 0 15px;line-height:1.1;color:var(--text,#f8fafc)}.forge-reward strong{font-size:43px;font-weight:800;letter-spacing:-.045em}.forge-reward>span{font-size:14px;font-weight:500;color:var(--muted,#a5aec2)}.forge-claim{width:210px;min-height:46px!important;display:inline-flex;align-items:center;justify-content:center;gap:13px;padding:12px 20px;border:1px solid var(--primary,#7c3aed);border-radius:var(--button-radius,6px);background:var(--primary,#7c3aed);color:var(--primary-text,#fff);font-family:inherit;font-weight:850;font-size:12px;line-height:1;letter-spacing:.04em;text-decoration:none;cursor:pointer;transition:transform .15s var(--forge-ease),background .15s}.forge-claim svg{width:16px;height:16px}.forge-claim:hover:not(:disabled){background:var(--primary-hover,color-mix(in srgb,var(--primary,#7c3aed) 90%,#000));transform:translateY(-1px)}.forge-claim:active:not(:disabled){transform:scale(.98)}.forge-claim:disabled{cursor:default;background:var(--surface2,#171b30);color:var(--muted,#a5aec2);border-color:var(--border,#2b3150)}.forge-claim[aria-busy="true"]{background:var(--primary,#7c3aed);color:var(--primary-text,#fff)}.forge-wait{display:flex;align-items:center;justify-content:center;gap:8px;min-height:46px;color:var(--muted,#a5aec2);font-size:13px;letter-spacing:.08em}.forge-wait svg{width:17px;height:17px;color:#9e90af}.forge-seal{position:absolute;bottom:13px;right:48px;z-index:3;width:24px;height:24px;display:grid;place-items:center;border-radius:50%;background:#20332d;border:1px solid #5a7b66;color:#b1d7bd;animation:forge-seal-in .35s var(--forge-ease) both}.forge-seal svg{width:14px;height:14px}.forge-skip{position:absolute;bottom:2px;left:50%;transform:translateX(-50%);min-height:28px!important;background:none;border:0;color:#b5a4c8;font-size:10px;cursor:pointer}.forge-feedback{margin:10px 0 0;font-size:12px;line-height:1.4;color:#e2c6bf}.forge-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.forge-journey{position:relative;border-top:1px solid var(--border,#2b3150);padding:15px 22px 17px;background:var(--bg,#080a12);border-radius:0 0 var(--card-radius,10px) var(--card-radius,10px)}.journey-heading{display:flex;justify-content:space-between;align-items:center;margin:0 0 10px}.journey-heading h2{font-size:12px;font-weight:800;color:var(--text,#f8fafc);margin:0;display:flex;gap:9px;align-items:center}.journey-heading h2>span{font-size:11px;font-weight:600;color:var(--muted,#a5aec2)}.journey-tools{display:flex;align-items:center;gap:10px}.grace-help{position:relative;color:#ab9cc4}.grace-help>summary{cursor:pointer;display:grid;place-items:center;list-style:none;width:29px;min-height:29px;padding:5px;border-radius:7px}.grace-help svg{width:19px;height:19px}.grace-used{display:none}.grace-help.is-used{color:#c8ae87}.grace-help.is-used .grace-intact{display:none}.grace-help.is-used .grace-used{display:block}.grace-tooltip{position:absolute;right:0;top:32px;z-index:6;width:230px;background:var(--surface2,#171b30);border:1px solid var(--border,#2b3150);border-radius:var(--button-radius,6px);padding:13px;color:var(--text,#f8fafc);font-size:12px;line-height:1.5;box-shadow:0 10px 30px #0006}.cycle-seal{display:flex;align-items:center;gap:5px;color:#d7b680;font-size:10px}.cycle-seal svg{width:13px;height:13px}
.forge-steps{list-style:none;padding:0;margin:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:9px}.forge-step{position:relative;min-width:0;border-radius:var(--button-radius,6px);display:flex;flex-direction:column;align-items:center;padding:6px 3px 9px;color:var(--forge-tone);background:var(--surface,#111526);border:1px solid var(--border,#2b3150);transition:background .3s,border-color .3s,opacity .3s}.forge-step+.forge-step:before{content:'';position:absolute;right:calc(100% + 1px);top:47px;width:9px;border-top:1px solid var(--border,#2b3150)}.step-number{font-size:10px;font-weight:650;color:var(--muted,#a5aec2);letter-spacing:.01em;align-self:center;white-space:nowrap}.step-art{position:relative;display:grid;place-items:center;width:62px;height:58px}.step-art>.forge-glyph{width:67px;height:67px;transition:transform .25s var(--forge-ease)}.forge-step>strong{font-size:15px;font-weight:800;line-height:1.5;letter-spacing:-.015em}.step-state{position:absolute;bottom:0;right:1px;width:15px;height:15px;border-radius:50%;display:grid;place-items:center;background:#16131e;color:#a99dbb}.step-state svg{width:10px;height:10px}.step-future .step-art{opacity:1}.step-future>strong{opacity:1}.step-future .step-state{color:#a295b3}.step-completed .step-state{background:#27342e;color:#acd2ba;border:1px solid #445d4d}.step-current{background:color-mix(in srgb,var(--forge-tone) 14%,var(--surface,#111526));border-color:var(--forge-tone)}.step-current .step-state{background:var(--forge-tone);color:#17111e}.step-current:after{content:'';position:absolute;top:-2px;left:30%;right:30%;height:3px;border-radius:4px;background:var(--forge-tone)}.step-legendary{background:#211c14;border:1px solid #8d7042}.step-legendary .step-art{width:70px}.step-legendary .step-art>.forge-glyph{width:78px;height:78px}.step-legendary>strong{font-size:17px}.step-legendary.step-current{border-color:#f5c16e;background:#302719}.is-legendary .step-legendary{border-color:#f5c16e;background:#302719;box-shadow:inset 0 0 0 2px #302719,inset 0 0 0 3px #b38d51}.is-legendary .forge-reward strong{color:#f5c16e}.is-legendary .forge-seal{background:#3b2e1e;border-color:#a3804e;color:#efce99}
/* Same flat surfaces as Store; the purchasable state uses its mint/green accent. */
.forge-ticket{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:18px;margin-top:18px;padding:18px 22px;border:1px solid var(--border,#2b3150);border-radius:var(--card-radius,10px);background:var(--surface,#111526)}
.ticket-top{display:flex;align-items:center;gap:13px;min-width:0}.ticket-details{min-width:0;flex:1}.ticket-details h2{font-size:12px;font-weight:650;margin:0 0 5px;color:var(--muted,#a5aec2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ticket-emblem{display:grid;place-items:center;flex:none;width:39px;height:39px;border:1px solid var(--border,#2b3150);border-radius:var(--button-radius,6px);color:var(--muted,#a5aec2);background:var(--surface2,#171b30)}.ticket-emblem svg{width:23px;height:23px}.ticket-status{font-size:12px;font-weight:600;margin:0;color:var(--text,#f8fafc);line-height:1.45}
.ticket-top>a{display:grid;place-items:center;margin-left:auto;width:32px;min-height:32px;color:var(--muted,#a5aec2);border-radius:var(--button-radius,6px);flex:none}.ticket-top>a:hover{background:var(--surface2,#171b30);color:var(--text,#f8fafc)}.ticket-top>a svg{width:17px;height:17px}
.ticket-track{display:flex;align-items:center;gap:15px;grid-column:1/-1;margin:14px 0 0}.ticket-track>span{white-space:nowrap;font-size:11px;color:var(--muted,#a5aec2)}.forge-ticket progress{flex:1;width:100%;min-width:0;height:4px;appearance:none;display:block;border:0;border-radius:3px;background:var(--border,#2b3150);color:var(--primary,#7c3aed)}.forge-ticket progress::-webkit-progress-bar{background:var(--border,#2b3150);border-radius:3px}.forge-ticket progress::-webkit-progress-value{background:var(--primary,#7c3aed);border-radius:3px}.forge-ticket progress::-moz-progress-bar{background:var(--primary,#7c3aed);border-radius:3px}
.ticket-action{grid-column:2;grid-row:1}.forge-ticket:not(.ticket-ready) .ticket-action{display:none}.forge-ticket:not(.ticket-ready) .ticket-top{grid-column:1/-1}.ticket-buy{display:inline-flex;align-items:center;justify-content:center;gap:11px;min-height:46px;padding:12px 18px;border:1px solid #6be5bc;border-radius:var(--button-radius,6px);background:#155b49;color:#f1fff9;text-decoration:none;font-size:12px;font-weight:850;white-space:nowrap;transition:transform .15s,background .15s}.ticket-buy svg{width:17px;height:17px}.ticket-buy:hover{background:#1b705a;transform:translateY(-1px)}.ticket-buy:active{transform:translateY(0)}.ticket-buy:focus-visible{outline:3px solid #b0ffe0;outline-offset:4px}.ticket-buy[hidden]{display:none}
.ticket-ready{border-color:#53dcb1;background:#102a27}.ticket-ready .ticket-emblem{background:#1a493c;border-color:#3c876e;color:#8af3cd}.ticket-ready .ticket-details h2{color:#b3d7cd}.ticket-ready .ticket-status{font-size:18px;font-weight:850;color:#f2fff9;letter-spacing:-.025em}.ticket-ready .ticket-top>a,.ticket-ready .ticket-track{display:none}.forge-store-link{display:flex;align-items:center;justify-content:center;gap:10px;margin-top:14px;padding:12px;font-size:12px;color:var(--muted,#a5aec2);text-decoration:none}.forge-store-link:hover{color:var(--text,#f8fafc)}.forge-store-link svg{width:15px;height:15px}
.forge-help{position:relative}.forge-help>summary{list-style:none}.forge-help>summary::-webkit-details-marker,.grace-help>summary::-webkit-details-marker{display:none}.forge-rules{position:absolute;right:0;top:44px;z-index:8;width:330px;max-width:calc(100vw - 40px);padding:20px;background:var(--surface2,#171b30);border:1px solid var(--border,#2b3150);border-radius:var(--card-radius,10px);box-shadow:0 16px 40px #0006;text-align:left}.forge-rules h2{font-size:15px;margin:0 0 9px}.forge-rules p,.forge-rules li{font-size:12px;color:#c8bdd5;line-height:1.65;margin:0}.forge-rules>details{margin-top:14px;border-top:1px solid #4b3d5b;padding-top:12px}.forge-rules>details>summary{font-size:12px;color:#d5c4e8;cursor:pointer}.forge-rules ul{padding-left:17px;margin:12px 0}.forge-rules a{color:#d5c4e8;font-size:12px}
/* Gathering light, the material cut, then a restrained loot burst. */
.forge-flare{z-index:3}.flare-ring,.flare-rays,.flare-glow{position:absolute;left:50%;top:50%;opacity:0;pointer-events:none}.flare-ring{width:66px;height:66px;margin:-33px;border:1px solid var(--forge-tone);border-radius:50%}.flare-rays{width:170px;height:170px;margin:-85px;background:repeating-conic-gradient(from 12deg,transparent 0deg 42deg,color-mix(in srgb,var(--forge-tone) 45%,transparent) 44deg,transparent 46deg 90deg);mask-image:radial-gradient(circle,#0003 12%,#000 25%,transparent 69%)}.flare-glow{width:140px;height:140px;margin:-70px;background:radial-gradient(circle,color-mix(in srgb,var(--forge-tone) 28%,transparent),transparent 65%)}
.forge-particles{z-index:4}.particle{position:absolute;left:50%;top:50%;width:2px;height:2px;opacity:0;border-radius:50%;background:var(--forge-tone);box-shadow:0 0 5px color-mix(in srgb,var(--forge-tone) 60%,transparent)}.particle:nth-child(3n){width:3px;height:3px;border-radius:1px}.p0{--x:-95px;--y:-55px}.p1{--x:90px;--y:-65px}.p2{--x:-75px;--y:45px}.p3{--x:95px;--y:38px}.p4{--x:15px;--y:-82px}.p5{--x:-20px;--y:77px}.p6{--x:72px;--y:75px}.p7{--x:-95px;--y:0px}.p8{--x:-103px;--y:-73px}.p9{--x:103px;--y:55px}.p10{--x:40px;--y:-83px}.p11{--x:-32px;--y:79px}.p12{--x:-54px;--y:-70px}.p13{--x:70px;--y:-35px}.p14{--x:52px;--y:81px}.p15{--x:-103px;--y:28px}.particle:nth-child(n+9){display:none}.forge-page[data-level="3"] .particle:nth-child(-n+12),.forge-page[data-level="4"] .particle:nth-child(-n+12),.forge-page[data-level="5"] .particle:nth-child(-n+12),.forge-page[data-level="6"] .particle:nth-child(-n+12),.forge-page[data-level="7"] .particle{display:block}
/* Every shard is a facet of the final cut; only its presentation transform moves.
   Seven assembly choreographies, one persisted server result. */
.forge-page{--piece-motion:pieces-petals;--settle-motion:settle-pearl;--piece-ease:cubic-bezier(.15,.8,.25,1)}
.forge-page[data-level="2"]{--piece-motion:pieces-orbit;--settle-motion:settle-orbit;--piece-ease:cubic-bezier(.2,.7,.3,1)}
.forge-page[data-level="3"]{--piece-motion:pieces-triad;--settle-motion:settle-triad;--piece-ease:cubic-bezier(.2,.7,.2,1)}
.forge-page[data-level="4"]{--piece-motion:pieces-layers;--settle-motion:settle-layers;--piece-ease:cubic-bezier(.42,0,.25,1)}
.forge-page[data-level="5"]{--piece-motion:pieces-constellation;--settle-motion:settle-stellar;--piece-ease:cubic-bezier(.42,0,.3,1)}
.forge-page[data-level="6"]{--piece-motion:pieces-pressure;--settle-motion:settle-prism;--piece-ease:cubic-bezier(.45,0,.25,1)}
.forge-page[data-level="7"]{--piece-motion:pieces-crown;--settle-motion:settle-crown;--piece-ease:cubic-bezier(.45,0,.3,1)}
.crystal-piece{transform-box:view-box}.piece-front{stroke-linejoin:round}.piece-depth{opacity:0}.glyph-body{opacity:0}.glyph-solid{opacity:1}.glyph-rim{pointer-events:none}.glyph-finishing{pointer-events:none}
.is-forging [data-forge-form]{visibility:hidden}.is-forging .forge-skip{bottom:26px;font-size:11px;min-height:38px!important;padding:9px 14px;border-radius:7px}.forge-skip:hover{background:#292133;color:#e7d8f7}.is-forging .forge-seed{animation:none}.is-forging .seed-mote{animation:seed-fracture var(--forge-duration) var(--forge-ease) both}.is-forging .seed-aura{animation:seed-aura var(--forge-duration) var(--forge-ease) both}.is-forging .seed-satellite{animation:seed-satellite var(--forge-duration) ease-in-out both}.is-forging .satellite-b{animation-name:seed-counter-satellite}
.is-forging .energy-orbit{animation:energy-orbit var(--forge-duration) cubic-bezier(.4,0,.25,1) both}.is-forging .orbit-b{animation-name:energy-counter-orbit}.is-forging .orbit-c{animation-name:energy-outer-orbit}.is-forging .gather-mote{animation:gather-mote 1.15s ease-in calc(var(--i)*.045s) both}.forge-page[data-level="7"].is-forging .gather-mote{animation-duration:1.6s}
.is-forging .forge-visual>.forge-glyph{animation:forge-reconstruct var(--forge-duration) linear both}
.is-forging .forge-visual .crystal-piece{animation-name:var(--piece-motion);animation-duration:calc(var(--forge-duration)*(1 - var(--lag)));animation-delay:calc(var(--forge-duration)*var(--lag));animation-timing-function:var(--piece-ease);animation-fill-mode:both}
.is-forging .forge-visual .piece-depth{animation:piece-relief calc(var(--forge-duration)*(1 - var(--lag))*(var(--piece-lock) - .02)) ease-in-out calc(var(--forge-duration)*var(--lag)) both}
.is-forging .forge-visual .glyph-body{animation:forge-fragments-out calc(var(--forge-duration)*.06) linear calc(var(--forge-duration)*(var(--forge-reveal) - .03)) both}
.is-forging .forge-visual .glyph-solid,.is-forging .forge-visual .glyph-finishing{animation:forge-solid-in calc(var(--forge-duration)*.06) linear calc(var(--forge-duration)*(var(--forge-reveal) - .03)) both}
.is-forging .forge-visual .glyph-core{animation:var(--settle-motion) var(--forge-duration) var(--forge-ease) both}
.is-forging .forge-visual .glyph-outer{animation:forge-unfold calc(var(--forge-duration)*(1 - var(--forge-reveal))) var(--forge-ease) calc(var(--forge-duration)*var(--forge-reveal)) both}.is-forging .forge-visual .glyph-sheen{animation:forge-sheen calc(var(--forge-duration)*(1 - var(--forge-reveal))) ease-in-out calc(var(--forge-duration)*var(--forge-reveal)) both}.is-forging .forge-visual .glyph-dust{animation:forge-dust calc(var(--forge-duration)*(1 - var(--forge-reveal))) ease-out calc(var(--forge-duration)*var(--forge-reveal)) both}
.is-forging .forge-halo{animation:forge-energy var(--forge-duration) var(--forge-ease) both}.is-forging .flare-ring{animation:forge-ring calc(var(--forge-duration)*(1 - var(--forge-reveal))) ease-out var(--burst-at) both}.is-forging .flare-rays{animation:forge-rays calc(var(--forge-duration)*(1 - var(--forge-reveal))) ease-out var(--burst-at) both}.is-forging .flare-glow{animation:forge-glow calc(var(--forge-duration)*(1 - var(--forge-reveal))) ease-out var(--burst-at) both}.is-forging .particle{animation:forge-particle .7s ease-out calc(var(--burst-at) + var(--i)*.007s) both}.forge-page[data-level="7"].is-forging .particle{animation-duration:.65s}.is-forging .forge-reward{animation:forge-reward calc(var(--forge-duration)*(1 - var(--forge-reveal))) var(--forge-ease) var(--burst-at) both}
/* Early ranks are intentionally effortless: no shared spinning cage. */
.forge-page[data-level="1"] .energy-orbit,.forge-page[data-level="1"] .seed-satellite,.forge-page[data-level="3"] .energy-orbit{display:none}
.forge-page[data-level="1"].is-forging .gather-mote,.forge-page[data-level="2"].is-forging .gather-mote,.forge-page[data-level="3"].is-forging .gather-mote{animation-name:gather-straight;animation-duration:.7s}
.forge-page[data-level="1"] .gather-mote:nth-of-type(n+8){display:none}
.forge-page[data-level="2"].is-forging .energy-orbit{animation-name:energy-polish}
.forge-page[data-level="4"].is-forging .energy-orbit{animation-name:energy-layers}
.forge-page[data-level="5"].is-forging .energy-orbit{animation-name:energy-levitation}
.forge-page[data-level="6"].is-forging .energy-orbit{animation-name:energy-pressure}
.forge-page[data-level="7"].is-forging .energy-orbit{animation-name:energy-levitation}.forge-page[data-level="7"].is-forging .orbit-b{animation-direction:reverse}
.is-complete .forge-seed{display:none}.is-complete .forge-visual>.forge-glyph{opacity:1;transform:translate(-50%,-50%)}.is-complete .forge-halo{opacity:.7}
@keyframes forge-enter{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}
@keyframes seed-arrive{0%{opacity:0;transform:translateY(6px) scale(.65)}65%{opacity:1;transform:translateY(-1px) scale(1.08)}100%{opacity:1;transform:none}}
@keyframes seed-fracture{0%{opacity:1;transform:translate(-50%,-50%) scale(1)}10%{opacity:1;transform:translate(-50%,-50%) scale(1.5)}18%{opacity:.8;transform:translate(-50%,-50%) scale(2.5)}26%,100%{opacity:0;transform:translate(-50%,-50%) scale(.2)}}
@keyframes seed-aura{0%{opacity:.5;transform:translate(-50%,-50%) scale(.7)}18%{opacity:.8;transform:translate(-50%,-50%) scale(1.4)}36%{opacity:.25;transform:translate(-50%,-50%) scale(1.6)}61%{opacity:.4;transform:translate(-50%,-50%) scale(.6)}74%{opacity:.6;transform:translate(-50%,-50%) scale(1.8)}90%,100%{opacity:0;transform:translate(-50%,-50%) scale(2)}}
@keyframes seed-satellite{0%{opacity:0;transform:rotate(0) translate(var(--sx),var(--sy))}20%{opacity:.7}48%{opacity:.8;transform:rotate(240deg) translate(var(--sx),var(--sy))}60%,100%{opacity:0;transform:rotate(400deg) translate(0,0)}}
@keyframes seed-counter-satellite{0%{opacity:0;transform:rotate(0) translate(var(--sx),var(--sy))}20%{opacity:.7}48%{opacity:.8;transform:rotate(-240deg) translate(var(--sx),var(--sy))}60%,100%{opacity:0;transform:rotate(-400deg) translate(0,0)}}
@keyframes energy-orbit{0%{opacity:0;transform:rotate(-80deg) scale(.7)}16%{opacity:.45}44%{opacity:.85;transform:rotate(140deg) scale(1)}65%{opacity:.9;transform:rotate(300deg) scale(.55)}76%{opacity:.4;transform:rotate(410deg) scale(1.5)}95%,100%{opacity:0;transform:rotate(490deg) scale(1.7)}}
@keyframes energy-counter-orbit{0%{opacity:0;transform:rotate(60deg) scale(.5)}22%{opacity:.4}44%{opacity:.65;transform:rotate(-120deg) scale(1)}65%{opacity:.8;transform:rotate(-300deg) scale(.6)}78%{opacity:.3;transform:rotate(-400deg) scale(1.25)}95%,100%{opacity:0;transform:rotate(-460deg) scale(1.5)}}
@keyframes energy-outer-orbit{0%,12%{opacity:0;transform:rotate(-30deg) scale(.6)}33%{opacity:.3}60%{opacity:.65;transform:rotate(230deg) scale(.8)}75%{opacity:.4;transform:rotate(400deg) scale(1.1)}95%,100%{opacity:0;transform:rotate(470deg) scale(1.25)}}
@keyframes gather-mote{0%{opacity:0;transform:rotate(var(--angle)) translateX(var(--radius)) scale(.2)}18%{opacity:.7}65%{opacity:.9;transform:rotate(calc(var(--angle) + 85deg)) translateX(30px) scale(1)}100%{opacity:0;transform:rotate(calc(var(--angle) + 150deg)) translateX(1px) scale(.2)}}
@keyframes forge-reconstruct{0%{opacity:1;transform:translate(-50%,-50%)}100%{opacity:1;transform:translate(-50%,-50%)}}
/* Easy ranks dock directly. Later ranks have longer suspended phases,
   asynchronous paths and two-stage assembly, rather than the same spin. */
@keyframes pieces-petals{0%,8%{opacity:0;transform:translate(var(--home-x),var(--home-y)) scale(.3)}18%{opacity:1;transform:translate(var(--dx),var(--dy)) scale(.95)}44%,100%{opacity:1;transform:none}}
@keyframes pieces-orbit{0%,9%{opacity:0;transform:translate(var(--home-x),var(--home-y)) scale(.3)}22%{opacity:1;transform:translate(var(--side-x),calc(var(--dy)*.3)) rotate(var(--turn))}34%{transform:translate(calc(var(--side-x)*.3),calc(var(--dy)*.15)) rotate(calc(var(--turn)*.4))}50%,100%{opacity:1;transform:none}}
@keyframes pieces-triad{0%,9%{opacity:0;transform:translate(var(--home-x),var(--home-y)) scale(.25)}23%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--turn))}35%{transform:translate(var(--dx),var(--dy)) rotate(var(--turn));animation-timing-function:cubic-bezier(.2,.8,.2,1)}56%,100%{opacity:1;transform:none}}
@keyframes pieces-layers{0%,10%{opacity:0;transform:translate(var(--home-x),var(--home-y)) scale(.25)}25%{opacity:1;transform:translate(calc(var(--dx)*.4),var(--layer-y)) rotate(var(--turn))}37%{transform:translate(calc(var(--dx)*.1),calc(var(--layer-y) - 4px)) rotate(calc(var(--turn)*.5));animation-timing-function:ease-in-out}46%{transform:translate(0,calc(var(--layer-y) + 2px)) rotate(0)}61%,100%{opacity:1;transform:none}}
@keyframes pieces-constellation{0%,10%{opacity:0;transform:translate(var(--home-x),var(--home-y)) scale(.25)}25%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--turn));animation-timing-function:ease-in-out}36%{transform:translate(calc(var(--dx) + 8px),calc(var(--dy) - 7px)) rotate(calc(var(--turn)*.8));animation-timing-function:ease-in-out}48%{transform:translate(calc(var(--dx) - 4px),calc(var(--dy) + 3px)) rotate(calc(var(--turn)*.5));animation-timing-function:ease-in-out}56%{transform:translate(calc(var(--dx)*.7),calc(var(--dy) - 4px)) rotate(calc(var(--turn)*.3))}66%,100%{opacity:1;transform:none}}
@keyframes pieces-pressure{0%,10%{opacity:0;transform:translate(var(--home-x),var(--home-y)) scale(.25)}25%{opacity:1;transform:translate(var(--side-x),calc(var(--dy)*.55)) rotate(var(--turn));animation-timing-function:ease-in-out}39%{transform:translate(var(--side-x),calc(var(--dy)*.55 - 6px)) rotate(calc(var(--turn)*.7));animation-timing-function:ease-in-out}50%{transform:translate(calc(var(--side-x)*.85),calc(var(--dy)*.4 + 2px)) rotate(calc(var(--turn)*.4))}57%{transform:translate(calc(var(--side-x)*.6),calc(var(--dy)*.25)) rotate(0);animation-timing-function:cubic-bezier(.5,0,.2,1)}68%,100%{opacity:1;transform:none}}
@keyframes pieces-crown{0%,10%{opacity:0;transform:translate(var(--home-x),var(--home-y)) scale(.25)}24%{opacity:1;transform:translate(var(--dx),var(--dy)) rotate(var(--turn)) scaleX(.92);animation-timing-function:ease-in-out}35%{transform:translate(calc(var(--dx) + 5px),calc(var(--dy) - 8px)) rotate(calc(var(--turn)*.7)) scaleX(.96);animation-timing-function:ease-in-out}47%{transform:translate(calc(var(--dx) - 4px),calc(var(--dy) + 2px)) rotate(calc(var(--turn)*.45)) scaleX(1);animation-timing-function:ease-in-out}57%{transform:translate(calc(var(--dx)*.8),calc(var(--dy) - 5px)) rotate(calc(var(--turn)*.25));animation-timing-function:cubic-bezier(.42,0,.2,1)}70%,100%{opacity:1;transform:none}}
@keyframes settle-pearl{0%,100%{transform:none}}
@keyframes settle-orbit{0%,100%{transform:none}}
@keyframes settle-triad{0%,62%{transform:none}71%{transform:translateY(1px)}100%{transform:none}}
@keyframes settle-layers{0%,64%{transform:none}77%{transform:translateY(-2px)}100%{transform:none}}
@keyframes settle-stellar{0%,60%{transform:none}74%{transform:translateY(-3px) skewY(-1deg)}87%{transform:translateY(-1px)}100%{transform:none}}
@keyframes settle-prism{0%,58%{transform:none}72%{transform:translateY(-4px)}85%{transform:translateY(-2px) skewY(-1deg)}100%{transform:none}}
@keyframes settle-crown{0%,50%{transform:none}64%{transform:translateY(-4px)}76%{transform:translateY(-2px)}88%{transform:translateY(-4px) skewY(-.7deg)}100%{transform:none}}
@keyframes piece-relief{0%{opacity:0}25%,60%{opacity:.7}100%{opacity:0}}
@keyframes forge-solid-in{from{opacity:0}to{opacity:1}}
@keyframes forge-fragments-out{from{opacity:1}to{opacity:0}}
@keyframes gather-straight{0%{opacity:0;transform:rotate(var(--angle)) translateX(var(--radius)) scale(.2)}20%{opacity:.6}100%{opacity:0;transform:rotate(var(--angle)) translateX(0) scale(.4)}}
@keyframes energy-polish{0%{opacity:0;transform:scale(.7)}24%{opacity:.3}54%{opacity:.4;transform:scale(.85)}80%,100%{opacity:0;transform:scale(1.3)}}
@keyframes energy-layers{0%{opacity:0;transform:rotate(90deg) scaleX(.6)}28%{opacity:.35}57%{opacity:.5;transform:rotate(90deg) scaleX(.7) scaleY(.85)}85%,100%{opacity:0;transform:rotate(90deg) scale(1.2)}}
@keyframes energy-pressure{0%{opacity:0;transform:rotate(-20deg) scale(.8)}25%{opacity:.25}55%{opacity:.5;transform:rotate(-10deg) scale(.9)}75%{opacity:.4;transform:rotate(-10deg) scale(.65)}100%{opacity:0;transform:rotate(0) scale(1.2)}}
@keyframes energy-levitation{0%{opacity:0;transform:rotate(-30deg) scale(.8)}24%{opacity:.2}52%{opacity:.4;transform:rotate(35deg) scale(1)}76%{opacity:.45;transform:rotate(80deg) scale(.9)}100%{opacity:0;transform:rotate(115deg) scale(1.3)}}
@keyframes forge-unfold{0%{opacity:0;transform:scale(.86)}65%{opacity:.8;transform:scale(1)}100%{opacity:1;transform:none}}
@keyframes forge-sheen{0%{opacity:0;transform:translateX(0)}18%{opacity:.3}80%{opacity:.3;transform:translateX(225px)}100%{opacity:0;transform:translateX(260px)}}
@keyframes forge-dust{0%{opacity:0;transform:translateY(3px)}65%{opacity:.85;transform:translateY(-1px)}100%{opacity:.7;transform:none}}
@keyframes forge-energy{0%{opacity:.25;transform:scale(.7)}30%{opacity:.4;transform:scale(1.1)}62%{opacity:.3;transform:scale(.7)}75%{opacity:.9;transform:scale(1.45)}100%{opacity:.7;transform:scale(1)}}
@keyframes forge-ring{0%{opacity:0;transform:scale(.2)}20%{opacity:.4}80%{opacity:.08}100%{opacity:0;transform:scale(2.4)}}
@keyframes forge-rays{0%{opacity:0;transform:scale(.2) rotate(-5deg)}22%{opacity:.45;transform:scale(.9) rotate(0)}100%{opacity:0;transform:scale(1.2) rotate(5deg)}}
@keyframes forge-glow{0%{opacity:0;transform:scale(.6)}22%{opacity:.4;transform:scale(1)}100%{opacity:0;transform:scale(1.3)}}
@keyframes forge-particle{0%{opacity:0;transform:translate(0,0) scale(.3) rotate(0)}16%{opacity:.85}75%{opacity:.45}100%{opacity:0;transform:translate(var(--x),var(--y)) scale(.2) rotate(110deg)}}
@keyframes forge-reward{0%{opacity:.6;transform:scale(.99)}30%{opacity:1;transform:translateY(-2px) scale(1.03)}100%{opacity:1;transform:none}}
@keyframes forge-seal-in{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}
@media(max-width:640px){body:has([data-forge]) main{padding-top:19px;padding-bottom:20px}.forge-page{max-width:440px;margin:0 auto}.forge-heading{margin-bottom:12px}.forge-heading h1{font-size:23px}.forge-console{border-radius:var(--card-radius,10px)}.forge-stage{min-height:302px;padding:15px 16px 17px}.forge-visual{height:166px;width:210px;margin-top:0}.forge-visual>.forge-glyph{width:154px;height:154px}.forge-reward{margin-top:4px;margin-bottom:13px}.forge-reward strong{font-size:38px}.forge-reward>span{font-size:13px}.forge-claim{min-height:45px!important;width:196px}.forge-seal{right:43px;bottom:10px}.forge-journey{padding:12px 15px 13px}.forge-steps{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px 7px}.forge-step{padding:5px 2px 7px}.forge-step+.forge-step:before{display:none}.step-art{width:60px;height:49px}.step-art>.forge-glyph{width:61px;height:61px}.step-number{font-size:9px;margin:0}.forge-step>strong{font-size:15px}.step-legendary{grid-column:span 2;display:grid;grid-template-columns:32px 1fr 36px;grid-template-rows:1fr;align-items:center;padding:6px 8px}.step-legendary .step-number{align-self:center;margin:0}.step-legendary .step-art{width:100%;height:69px}.step-legendary .step-art>.forge-glyph{width:76px;height:76px}.step-legendary .step-state{right:4px;bottom:4px}.step-legendary>strong{font-size:16px}.forge-ticket{padding:12px 17px 14px}.ticket-top h2{font-size:12px}.ticket-track{margin:5px 0}.forge-rules{max-height:65vh;overflow-y:auto}.cycle-seal{font-size:9px}}
@media(prefers-reduced-motion:reduce){.forge-page,.forge-page *{animation:none!important;transition:none!important;scroll-behavior:auto!important}.forge-claim:hover,.forge-claim:active{transform:none!important}}

@media(max-width:640px){.forge-ticket{grid-template-columns:minmax(0,1fr);gap:0;padding:17px 18px;margin-top:16px}.ticket-action{grid-column:1;grid-row:auto;margin-top:14px}.ticket-buy{width:100%}.ticket-ready .ticket-status{font-size:17px}}
@media(prefers-reduced-motion:reduce){.ticket-buy{transition:none;transform:none!important}}
