*{box-sizing:border-box}body{margin:0;background:#09090c;color:#f6f5f9;font:15px/1.45 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}body[data-page=gallery] main{max-width:900px;margin:auto;padding:22px 20px calc(130px + env(safe-area-inset-bottom))}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;cursor:pointer;color:inherit}a{color:inherit;text-decoration:none}svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.project-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:26px}.brand{display:flex;align-items:baseline;font-size:23px;font-weight:750;letter-spacing:-1.1px}.brand>span:first-child{color:#b9b0ff}.brand-dot{width:5px;height:5px;border-radius:50%;background:#8e81fb;margin-left:7px}
.create-hero{position:relative;isolation:isolate;display:block;overflow:hidden;min-height:204px;padding:25px;border-radius:28px;background:linear-gradient(120deg,#6562f8,#4334d4 60%,#292074);border:1px solid #ffffff25;box-shadow:inset 0 1px 0 #ffffff30,0 12px 50px #30287516}.hero-light{position:absolute;inset:-80%;z-index:-1;background:radial-gradient(ellipse at 35% 50%,#b3b9ff60,transparent 30%),radial-gradient(ellipse at 65% 55%,#835dff70,transparent 30%);animation:hero-flow 13s ease-in-out infinite alternate;pointer-events:none}.hero-text{position:relative;z-index:1;display:flex;flex-direction:column;align-items:flex-start}.hero-text small{font-size:9px;letter-spacing:1.8px;font-weight:550;color:#e4dfffab}.hero-text strong{font-size:29px;letter-spacing:-1px;line-height:1.13;font-weight:650;margin:17px 0 22px}.hero-action{font-size:12px;color:#f2efff;display:flex;align-items:center;gap:24px}.hero-action>span{font-size:19px}.hero-orbit{position:absolute;width:205px;height:205px;right:-41px;top:6px;color:#ded5ff40;stroke-width:.6;animation:orbit-breathe 9s ease-in-out infinite alternate;pointer-events:none}
.heading{display:flex;align-items:end;justify-content:space-between;gap:20px;margin:33px 2px 22px}.heading .eyebrow{font-size:9px;letter-spacing:1.8px;color:#6d6a79;margin:0 0 7px}h1{font-size:32px;letter-spacing:-1.2px;line-height:1.15;margin:0;font-weight:620}#count{color:#898493;font-size:12px;font-variant-numeric:tabular-nums;padding-bottom:4px}#message{font-size:13px;color:#aba5b9}#message:empty{display:none}
.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:25px 14px}.project-card{display:block;position:relative;min-width:0;color:inherit;animation:card-in .3s ease-out}.preview{position:relative;aspect-ratio:3/4;overflow:hidden;border-radius:21px;background:radial-gradient(ellipse at 80% 10%,#3b3455,#1b1926 60%,#14131b);display:grid;place-items:center;border:1px solid #ffffff0a}.project-card:nth-child(3n+2) .preview{background:radial-gradient(ellipse at 10% 10%,#244952,#192b33 60%,#12171b)}.project-card:nth-child(3n) .preview{background:radial-gradient(ellipse at 80% 10%,#504034,#2c2226 60%,#191417)}.preview img{position:absolute;width:100%;height:100%;object-fit:cover;opacity:0;transition:opacity .3s}.preview img.visible{opacity:1}.preview:after{content:'';position:absolute;inset:50% 0 0;background:linear-gradient(transparent,#0006);pointer-events:none}.fallback{font-size:35px;color:#ffffff35;font-weight:200}.badge{position:absolute;left:10px;top:10px;z-index:1;border-radius:20px;background:#0d0d159c;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid #ffffff13;padding:5px 9px;font-size:9px;color:#e7e2ef}.badge.ready{color:#dbd7eb}.badge.ready:before{content:'';display:inline-block;width:4px;height:4px;margin:0 5px 2px 0;border-radius:50%;background:#b8e5c9}.open-icon{position:absolute;right:12px;bottom:12px;z-index:1;display:grid;place-items:center;width:28px;height:28px;border-radius:50%;background:#ffffff18;border:1px solid #ffffff24;color:#fff;font-size:10px;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px)}.card-info{padding:12px 3px 0}.card-info strong{display:block;font-size:13px;font-weight:530;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;letter-spacing:-.15px}.card-info small{display:block;color:#73707c;font-size:10px;margin-top:4px}.card-info small+small{color:#66616e;font-size:9px}.project-card .card-delete{position:absolute;right:9px;top:9px;width:28px;height:28px;border-radius:50%;border:1px solid #ffffff15;background:#11111a85;backdrop-filter:blur(12px);display:grid;place-items:center;padding:6px;z-index:3;color:#d4ccdf}.card-delete svg{width:14px;height:14px}.project-card:active .preview{opacity:.85}
#empty{text-align:center;padding:42px 20px;color:#aaa3b6}.empty-symbol{font-size:40px;color:#b9aff6}#empty h2{font-size:21px;font-weight:500;color:#f0edf5;margin:20px 0 8px}#empty p{font-size:13px}.empty-create{display:inline-block;margin-top:14px;font-size:13px;color:#c8baff}#filter-empty{text-align:center;padding:45px 12px;color:#8b8399;font-size:13px}#more{display:block;width:100%;margin-top:24px;padding:13px;border:1px solid #ffffff12;background:#ffffff05;border-radius:16px;font-size:12px;color:#afa6bd}.footer-note{font-size:10px;text-align:center;color:#5f5969;margin:28px 0 0}#account-status{font-size:10px!important;color:#6f697c!important;padding:0 20px!important;margin-bottom:110px}
.project-dock{position:fixed;z-index:30;bottom:max(18px,env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);display:flex;gap:12px;width:calc(100% - 36px);max-width:460px;align-items:center}.glass-tabs{position:relative;isolation:isolate;display:grid;grid-template-columns:repeat(3,1fr);flex:1;min-width:0;border-radius:36px;padding:5px;background:linear-gradient(155deg,#ffffff12,#ffffff04),#17171cbf;-webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);border:1px solid #ffffff20;box-shadow:inset 0 1px 0 #ffffff13,0 12px 38px #0008}.glass-tabs button{position:relative;display:flex;flex-direction:column;align-items:center;gap:4px;justify-content:center;height:56px;background:none;border:0;color:#85818c;border-radius:30px;font-size:9px;transition:color .25s;min-width:0}.glass-tabs button svg{width:21px;height:21px;stroke-width:1.65}.glass-tabs button[aria-pressed=true]{color:#e8e1fa}.glass-tabs button[aria-pressed=true] svg{color:#b8a9ff}.glass-selection{position:absolute;top:5px;bottom:5px;left:5px;width:calc((100% - 10px)/3);border-radius:30px;background:linear-gradient(145deg,#ffffff26,#ffffff08);border:1px solid #ffffff28;box-shadow:inset 0 1px 0 #ffffff25,0 3px 12px #0002;transform:translateX(calc(var(--active)*100%));transition:transform .45s cubic-bezier(.22,.8,.23,1),border-radius .3s;pointer-events:none}.glass-tabs.flowing .glass-selection{border-radius:35% 48% 38% 48%}.dock-create{display:grid;place-items:center;flex:0 0 64px;height:64px;border-radius:50%;color:#fff;background:radial-gradient(circle at 30% 20%,#9185ff,#5645de 55%,#352495);border:1px solid #c1b5ff75;box-shadow:inset 0 2px 6px #e5dbff55,0 8px 22px #0005}.dock-create svg{width:27px;height:27px;stroke-width:1.5}.dock-create:active{transform:scale(.94)}button:focus-visible,a:focus-visible{outline:2px solid #c2b0ff;outline-offset:4px}[hidden]{display:none!important}
@keyframes hero-flow{to{transform:translate(8%,5%) rotate(18deg)}}@keyframes orbit-breathe{to{transform:rotate(12deg) scale(1.06);opacity:.6}}@keyframes card-in{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:none}}@keyframes spin{to{transform:rotate(360deg)}}@media(min-width:650px){.grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:28px 22px}.create-hero{min-height:230px;padding:30px}.hero-text strong{font-size:35px}.hero-orbit{right:50px;width:260px;height:260px;top:-15px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}

/* Compact creation control and transform-only liquid navigation. */
.create-hero{min-height:0;height:68px;padding:0 19px;border-radius:21px;display:flex;align-items:center;justify-content:space-between;box-shadow:inset 0 1px 0 #ffffff28,0 6px 24px #30287512}.create-label{font-size:17px;font-weight:580;letter-spacing:-.35px}.create-arrow{display:grid;place-items:center;width:33px;height:33px;border-radius:50%;background:#ffffff12;border:1px solid #ffffff24;font-size:23px;font-weight:300}.create-hero .hero-light{animation-duration:6s}.create-hero:active{transform:scale(.99)}
.glass-selection{transition:none;transform-origin:center;border-radius:30px;overflow:hidden;background:linear-gradient(140deg,#ffffff30,#ffffff09 55%,#cbc1ff1a)}.glass-selection:after{content:'';position:absolute;inset:0;border-radius:inherit;background:linear-gradient(115deg,transparent 20%,#ffffff20 45%,transparent 65%);opacity:.65;pointer-events:none}.glass-tabs.flowing .glass-selection{border-radius:30px}
/* Fade scrolling content behind the dock, without intercepting touch. */
body[data-page=gallery]::before{content:'';position:fixed;z-index:20;left:0;right:0;bottom:0;height:calc(140px + env(safe-area-inset-bottom));background:linear-gradient(to bottom,rgba(9,9,12,0) 0%,rgba(9,9,12,.28) 28%,rgba(9,9,12,.78) 61%,#09090c 92%);pointer-events:none}
/* Lightweight glass surface; solid, quiet actions. */
body[data-page=gallery] dialog.project-delete-dialog{width:min(352px,calc(100vw - 40px));border-radius:30px;box-shadow:0 22px 70px #0006;animation:delete-reveal .18s ease-out}
body[data-page=gallery] dialog.project-delete-dialog::backdrop{background:#03030655;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
body[data-page=gallery] .project-delete-dialog .confirm-box{padding:28px 24px 22px;border-radius:30px;border:1px solid #ffffff25;border-top-color:#ffffff55;border-bottom-color:#ffffff12;background:linear-gradient(145deg,#ffffff13,transparent 45%,#ffffff06),#20202766;-webkit-backdrop-filter:blur(28px) saturate(1.5);backdrop-filter:blur(28px) saturate(1.5);box-shadow:inset 0 1px 1px #ffffff20,inset 0 -1px 1px #ffffff08;text-align:left}
.project-delete-dialog .confirm-box h2{font-size:22px;font-weight:560;letter-spacing:-.65px;color:#f4f3f7;margin:0 0 12px}.project-delete-dialog .confirm-box .project-name{color:#eeeaf2;font-size:13px;line-height:1.5;margin:0 0 8px;overflow-wrap:anywhere}.project-delete-dialog .confirm-box #delete-project-description{font-size:12px;line-height:1.65;color:#bab7c2;margin:0 0 24px}.project-delete-dialog .delete-error:empty{display:none}.project-delete-dialog .confirm-box .delete-error{color:#ffb4bf;font-size:12px}.delete-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px}.project-delete-dialog .delete-actions button{margin:0;padding:13px 6px;min-height:46px;border-radius:13px;border:0!important;box-shadow:none;font-size:13px;font-weight:500;transition:opacity .15s,transform .15s}.project-delete-dialog .delete-actions .secondary{background:#36363d;color:#f3f1f6}.project-delete-dialog .delete-actions .danger{background:#ededf0!important;color:#a03543}.project-delete-dialog .delete-actions button:active{transform:scale(.98);opacity:.85}.project-delete-dialog .delete-actions button:focus-visible{outline:2px solid #d9d2ea;outline-offset:3px}
@keyframes delete-reveal{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}}
/* Approved AI clapperboard, clipped from the original concept; live accessible text. */
.create-hero{height:auto;min-height:0;aspect-ratio:2.65;padding:0 6%;justify-content:flex-start;border-radius:23px;background:#111119;border:1px solid #b4a0d654;box-shadow:inset 0 1px 0 #ffffff24,0 9px 30px #0003;transition:transform .2s,border-color .2s}.create-copy{position:relative;z-index:3;display:flex;flex-direction:column;gap:9px;pointer-events:none}.create-label{display:flex;align-items:center;gap:9px;font-size:clamp(17px,4.8vw,24px);font-weight:550;letter-spacing:-.5px;color:#f7f4f9}.create-subtitle{font-size:clamp(11px,3.1vw,14px);color:#a8a1b5;letter-spacing:.05px}.create-arrow{display:inline;width:auto;height:auto;background:none;border:0;border-radius:0;color:#c19ce7;font-size:25px;line-height:1;font-weight:300}.create-art{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden;mask-image:linear-gradient(90deg,transparent 53%,#000 66%);-webkit-mask-image:linear-gradient(90deg,transparent 53%,#000 66%)}.create-art img{position:absolute;width:107.566%;max-width:none;height:auto;left:-3.783%;top:50%;transform:translateY(-21.12%)}.create-hero .hero-light{inset:-35%;z-index:2;pointer-events:none;mix-blend-mode:screen;background:radial-gradient(ellipse at 74% 60%,#ac6de280,transparent 31%),radial-gradient(ellipse at 40% 35%,#7c65ca45,transparent 38%),linear-gradient(115deg,transparent 35%,#d9baff18 52%,transparent 67%);animation:ai-card-breathe 6s ease-in-out infinite alternate;will-change:transform,opacity}.create-hero:active{transform:scale(.986)}.create-hero:focus-visible{outline:2px solid #ccb6f1;outline-offset:4px}@keyframes ai-card-breathe{0%{transform:translate(-8%,5%) scale(.92) rotate(-7deg);opacity:.35}55%{opacity:.8}100%{transform:translate(9%,-5%) scale(1.1) rotate(9deg);opacity:1}}@media(min-width:650px){.create-hero{aspect-ratio:3.6;max-height:190px}.create-label{font-size:27px}.create-art{mask-image:linear-gradient(90deg,transparent 56%,#000 67%)}.create-art img{top:53%}}@media(prefers-reduced-motion:reduce){.create-hero .hero-light{animation:none;transform:none;opacity:.5;will-change:auto}.create-hero{transition:none}}

/* Clip the composited artwork/light together before applying the rounded edge. */
.create-surface{position:absolute;inset:0;border-radius:22px;overflow:hidden;isolation:isolate;clip-path:inset(0 round 22px);-webkit-mask-image:-webkit-radial-gradient(white,black);pointer-events:none}
.create-art{border-radius:inherit}
.create-hero .create-rim{position:absolute;inset:0;width:100%;height:100%;z-index:4;pointer-events:none;overflow:hidden;fill:none;stroke-linecap:round}
.create-rim rect{x:2px;y:2px;width:calc(100% - 4px);height:calc(100% - 4px);rx:21px;ry:21px;fill:none;stroke:#eadcff;stroke-width:.85;stroke-dasharray:.35 99.65;stroke-linecap:round;animation:card-rim-lap 5s linear infinite;stroke-dashoffset:var(--rim-start)}
.create-rim .rim-glow{filter:blur(1px);opacity:.38}
.create-rim .rim-glow rect{stroke:#b482ff;stroke-width:1.5}
.create-rim .rim-light{filter:blur(.15px);opacity:.8}
@keyframes card-rim-lap{0%{stroke-dashoffset:var(--rim-start);opacity:0}2%{opacity:1}17%{opacity:1}20%,100%{stroke-dashoffset:var(--rim-end);opacity:0}}
@media(prefers-reduced-motion:reduce){.create-rim{display:none}}

.project-card .card-delete{font-size:24px;padding:0;line-height:1}.project-menu .confirm-box{position:relative}.project-menu .menu-close{position:absolute;right:18px;top:14px;font-size:25px;border:0;background:none;color:#ded8e8;padding:6px}.project-menu [data-action]{display:block;width:100%;text-align:left;margin:8px 0;padding:14px 12px;background:#ffffff08;border:1px solid #ffffff12;border-radius:14px;color:#e9e5ee;font-size:14px}.project-menu [data-action=delete]{color:#e9aeb8}.menu-status{font-size:12px;line-height:1.5;color:#aaa3b8;overflow-wrap:anywhere}
.upload-cancel{position:fixed;bottom:calc(28px + env(safe-area-inset-bottom));left:50%;transform:translateX(-50%);z-index:2147483647;padding:12px 22px;border-radius:22px;background:#22212bcc;color:#ddd5ec;border:1px solid #ffffff26;font-size:14px}.upload-cancel[hidden]{display:none}
/* Compact live generation card; preserves the animation node while progress polls. */
.project-card[data-state=processing] .preview{background:radial-gradient(ellipse at 50% 40%,#3e2e574d,transparent 68%),#121018}
.project-card[data-state=processing] .fallback,.project-card[data-state=processing] .badge,.project-card[data-state=processing] .open-icon,.project-card[data-state=failed] .open-icon{display:none}
.processing-art{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;color:#d9c4f7;pointer-events:none}
/* Unified card footer; specificity overrides the shared library menu button. */
body[data-page=gallery] .project-card{border:1px solid #b9a3db29;border-radius:21px;overflow:hidden;background:linear-gradient(145deg,#211e2a,#17161d);box-shadow:inset 0 1px #ffffff05}
body[data-page=gallery] .project-card .preview{border:0;border-radius:0;aspect-ratio:3/4}
body[data-page=gallery] .card-info{position:relative;min-height:88px;padding:13px 12px 14px;border-top:1px solid #d0b4f21c;background:linear-gradient(130deg,#ffffff03,transparent 70%)}
body[data-page=gallery] .card-info strong{padding-right:29px;font-size:12px;line-height:20px;font-weight:550;color:#eeeaf3}
body[data-page=gallery] .card-info small{color:#98919f;margin-top:4px;line-height:14px}
body[data-page=gallery] .card-info small+small{color:#817b8b;font-size:9px}
body[data-page=gallery] .card-info .card-delete{position:absolute;top:2px;right:0;width:44px;height:44px;padding:0;background:transparent;border:0;border-radius:12px;backdrop-filter:none;-webkit-backdrop-filter:none;color:#c7bfce;font-size:25px;box-shadow:none}
body[data-page=gallery] .card-info .card-delete:active{background:#ffffff0b}
body[data-page=gallery] .card-info .card-delete:focus-visible{outline:2px solid #c6a5ed;outline-offset:-5px}
.project-card[data-state=processing] .preview{isolation:isolate;background:#0d0c12}
.processing-art{overflow:hidden;isolation:isolate;background:#0d0c12}
.processing-mesh{position:absolute;inset:0;overflow:hidden;z-index:-1;background:#0d0c12}
.processing-mesh i{position:absolute;width:115%;height:80%;left:-35%;top:10%;border-radius:50%;background:radial-gradient(ellipse,#a660884d,transparent 65%);filter:blur(19px);animation:mesh-rose 5.4s ease-in-out infinite alternate;will-change:transform}
.processing-mesh i:nth-child(2){left:10%;top:-20%;background:radial-gradient(ellipse,#8b65b66b,transparent 66%);animation:mesh-violet 6.7s ease-in-out infinite alternate;animation-delay:-3s}
.processing-mesh i:nth-child(3){left:15%;top:55%;background:radial-gradient(ellipse,#b26d9240,transparent 66%);animation:mesh-rose 4.6s ease-in-out infinite alternate-reverse;animation-delay:-2s}
.processing-particles{position:absolute;inset:0;overflow:hidden;z-index:0}
.processing-particles i{position:absolute;left:var(--x);top:var(--y);width:var(--size);height:var(--size);border-radius:50%;background:#f4dcf4;opacity:0;box-shadow:0 0 4px #e8bded66;animation:particle-rise var(--speed) linear infinite;animation-delay:var(--delay)}
.processing-particles i:nth-child(3n){background:#c7b6ed}.processing-particles i:nth-child(4n){background:#ecc0ce}
.processing-clap{position:absolute;top:31%;width:58px;height:58px;color:#f2e7f1;filter:drop-shadow(0 0 8px #d6b5ed22)}
.processing-percent{position:absolute;top:71%;color:#f3edf6;font:500 27px/1.1 -apple-system,BlinkMacSystemFont,sans-serif;font-variant-numeric:tabular-nums;letter-spacing:-.8px}
.processing-percent small{font-size:15px;margin-left:2px;color:#c0b2c9}
.processing-label{position:absolute;top:86%;font-size:10px;color:#afa4b9}
@keyframes mesh-rose{from{transform:translate(-15%,25%) scale(.95)}to{transform:translate(42%,-38%) scale(1.35)}}
@keyframes mesh-violet{from{transform:translate(12%,-8%) scale(1.2)}to{transform:translate(-42%,72%) scale(.95)}}
@keyframes particle-rise{0%{transform:translate(-13px,26px);opacity:0}18%{opacity:.65}75%{opacity:.4}100%{transform:translate(44px,-115px);opacity:0}}
@media(prefers-reduced-motion:reduce){.processing-mesh i,.processing-particles i{animation:none!important;will-change:auto}.processing-particles i{opacity:.4}.processing-mesh i:nth-child(2){transform:translate(-15%,25%)}}

/* Gallery pull gesture does not resize or move the project cards. */
html:has(body[data-page=gallery]),body[data-page=gallery]{overscroll-behavior-y:none}
.project-header.has-wallet .personal-balance--header{min-height:44px;min-width:76px;padding:7px 11px;border:1px solid #c4ace225;border-radius:16px;background:linear-gradient(135deg,#bba0e512,#ffffff04);font-size:15px}
.project-header .wallet-caption{font-size:9px}
.project-pull{--pull:0;--pull-y:0px;position:fixed;z-index:20;top:calc(env(safe-area-inset-top) + 40px);left:50%;width:84px;height:84px;display:grid;place-items:center;color:#e4d5fb;pointer-events:none;opacity:var(--pull);transform:translate(-50%,calc(var(--pull-y) - 64px));transition:opacity .22s,transform .22s}
.project-pull[data-state=idle]{visibility:hidden}.project-pull[data-state=pulling],.project-pull[data-state=armed]{transition:none}
.pull-glow{position:absolute;inset:7px;border-radius:50%;background:radial-gradient(ellipse,#aa84dc30,#09090cdc 60%,transparent 75%);filter:blur(7px)}
.project-pull .pull-clapper{width:49px;height:49px;z-index:1;overflow:visible;filter:none;transform:rotate(calc(-35deg + var(--pull)*27deg))}
.pull-lid{transform-origin:8px 17px;transform:rotate(calc(var(--pull)*-12deg))}
.pull-orbit{position:absolute;inset:0;transform:rotate(calc(var(--pull)*120deg)) rotateX(24deg)}
.pull-orbit:before{content:'';position:absolute;inset:5px;border:1px solid #c6a9e513;border-top-color:#d1b5ed60;border-right-color:#c6a9e52b;border-radius:50%;transform:rotate(-30deg)}
.pull-orbit i{position:absolute;left:50%;top:50%;width:var(--dot);height:var(--dot);border-radius:50%;background:#e2ccff;opacity:var(--light);box-shadow:0 0 5px #b58bdf65;transform:translate(-50%,-50%) rotate(var(--angle)) translateX(37px)}
.project-pull[data-state=loading] .pull-clapper{animation:pull-turn 2.3s ease-in-out infinite}
.project-pull[data-state=loading] .pull-lid{animation:pull-clap 1.15s ease-in-out infinite}
.project-pull[data-state=loading] .pull-orbit{animation:pull-orbit 2.8s linear infinite}
.project-pull[data-state=loading] .pull-glow{animation:pull-breathe 1.7s ease-in-out infinite alternate}
.pull-label{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.project-pull .pull-check{position:absolute;right:2px;bottom:6px;width:21px;height:21px;border-radius:50%;background:#d9c7ef;stroke:#31213e;stroke-width:1.7;fill:none;opacity:0;transform:scale(.5);transition:opacity .2s,transform .2s}
.project-pull[data-state=done] .pull-check{opacity:1;transform:scale(1)}
.project-pull[data-state=error] .pull-label{width:auto;height:auto;clip-path:none;overflow:visible;margin:0;top:78px;padding:6px 12px;border-radius:12px;background:#211b2ded;font-size:12px;color:#e8d8f6}
@keyframes pull-turn{0%,100%{transform:rotate(-12deg) translateY(1px)}50%{transform:rotate(9deg) translateY(-3px)}}
@keyframes pull-clap{0%,100%{transform:rotate(-16deg)}50%{transform:rotate(7deg)}}
@keyframes pull-orbit{from{transform:rotateX(24deg) rotate(0deg)}to{transform:rotateX(24deg) rotate(360deg)}}
@keyframes pull-breathe{to{transform:scale(1.18);opacity:.7}}
@media(prefers-reduced-motion:reduce){.project-pull,.project-pull *{animation:none!important;transition:none!important}}
body[data-page=gallery] main>header.project-header.has-wallet{display:flex;justify-content:space-between;gap:12px}
body[data-page=gallery] main>header.project-header.has-wallet>.brand{position:static;transform:none;margin:0;text-align:left}
body[data-page=gallery] main>header.project-header.has-wallet>.personal-balance--header{align-items:flex-end;padding:7px 11px;margin:0}

.pull-atoms{position:absolute;inset:0;pointer-events:none}.pull-atoms i{position:absolute;left:50%;top:50%;width:var(--size);height:var(--size);background:#e3cfff;border-radius:50%;box-shadow:0 0 4px #c59afa70;opacity:0;transform:translate(var(--sx),var(--sy))}
.project-pull[data-state=done] .pull-atoms i{animation:pull-disperse .7s cubic-bezier(.12,.6,.3,1) var(--delay) both}
.project-pull[data-state=done] .pull-clapper{animation:pull-dissolve .26s ease-out both}
.project-pull[data-state=done] .pull-orbit,.project-pull[data-state=done] .pull-glow{animation:pull-vanish .45s ease-out both}
.project-pull[data-state=done] .pull-check{display:none}
@keyframes pull-disperse{0%{opacity:0;transform:translate(var(--sx),var(--sy)) scale(.6)}12%{opacity:.95}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(.15)}}
@keyframes pull-dissolve{to{opacity:0;transform:rotate(-7deg)}}
@keyframes pull-vanish{to{opacity:0;filter:blur(4px)}}
@media(prefers-reduced-motion:reduce){.project-pull[data-state=done] .pull-atoms{display:none}.project-pull[data-state=done] .pull-check{display:block}}



/* Quiet failure state, using the gallery's lilac glass and film motif. */
body[data-page=gallery] .project-card[data-state=failed]{cursor:pointer;border-color:#cc9fb42e;background:#1b1720}
.project-card[data-state=failed] .preview{background:radial-gradient(ellipse at 50% 36%,#82557130,transparent 68%),linear-gradient(155deg,#241c2a,#15131c 75%);box-shadow:inset 0 1px #ead4f309}
.project-card[data-state=failed] .fallback{position:absolute;top:39%;left:50%;transform:translate(-50%,-50%);z-index:1;line-height:1}
.failure-mark{position:relative;display:grid;place-items:center;width:62px;height:62px;border-radius:21px;color:#d5bfdc;background:linear-gradient(145deg,#dbc2eb14,#b792cc06);border:1px solid #d7b8e12c;box-shadow:inset 0 1px #f1e3f51a,0 8px 24px #09050d24}
.failure-mark>svg{width:34px;height:34px;stroke-width:1.5}
.failure-mark-dot{position:absolute;right:-5px;bottom:-4px;display:grid;place-items:center;width:21px;height:21px;border:3px solid #231b29;border-radius:50%;background:#ce9dac;color:#32212c;font:650 12px/1 -apple-system,BlinkMacSystemFont,sans-serif}
.project-card[data-state=failed] .badge{top:auto;bottom:48px;left:8px;right:8px;transform:none;padding:0;border:0;background:none;backdrop-filter:none;-webkit-backdrop-filter:none;text-align:center;white-space:normal;color:#d6a7b7;font-size:10px;font-weight:500;line-height:1.4}
.failure-hint{position:absolute;bottom:21px;left:8px;right:8px;z-index:1;display:flex;align-items:center;justify-content:center;gap:5px;color:#ada0b8;font-size:9px;line-height:1.3;pointer-events:none}
.failure-hint svg{width:13px;height:13px;stroke-width:1.3}
.project-card[data-state=failed] .card-info{border-top-color:#c4a0cf18}
.project-card[data-state=failed]:focus-visible{outline:2px solid #d3b8df;outline-offset:4px}
.project-card[data-state=failed]:active .preview{opacity:.88}
body[data-page=gallery] .project-failure .confirm-box{padding:28px 24px 24px;background:linear-gradient(145deg,#e4c9f00b,transparent 60%),#201b28eb;border-color:#d9b9e32b;border-top-color:#ead4f447;box-shadow:inset 0 1px #ffffff06,0 20px 65px #08050c33}
.project-failure .failure-mark{width:54px;height:54px;border-radius:18px;margin:0 0 22px}
.project-failure .failure-mark>svg{width:30px;height:30px}
.project-failure #failure-title{margin:0 18px 10px 0;color:#f1eaf6;font-size:22px;font-weight:570;line-height:1.22;letter-spacing:-.6px}
.project-failure .confirm-box .project-name{margin:0 0 20px;color:#a99bb5;font-size:12px;line-height:1.5}
.project-failure #failure-reason{margin:0;color:#ded3e6;font-size:14px;line-height:1.65;overflow-wrap:anywhere}
.project-failure .failure-note{margin:18px 0 0;padding:13px 0 0;border-top:1px solid #ddc0ec14;font-size:12px;line-height:1.6;color:#ac9fb8}
.project-failure .failure-note:empty{display:none}
.project-failure .failure-close{display:block;width:100%;min-height:46px;margin-top:24px;padding:13px 16px;border:1px solid #e3cdef2e;border-radius:15px;background:#b89dc11c;color:#eee4f4;font-size:14px;font-weight:550;cursor:pointer}
.project-failure .failure-close:active{background:#c9a9d32a}
.project-failure .menu-close{top:17px;right:17px;width:40px;height:40px;color:#ac9db8;font-size:24px;border-radius:50%}
.project-failure .menu-close:active{background:#ffffff08}
