/* One compact header for public pages and full-screen tools. */
:root{--px-header-height:64px;--header-h:var(--px-header-height);--px-press-time:140ms;--px-press-ease:cubic-bezier(.2,.7,.2,1)}
.px-header-ready body .site-header.px-site-header{display:block;position:sticky;top:0;z-index:35;min-height:var(--px-header-height);border:0;background:rgba(247,248,246,.97);box-shadow:0 1px 0 #1b202510}
.px-site-header,.px-site-header *{box-sizing:border-box}
.px-site-header .px-header-inner,.px-site-header.px-header-inner{display:flex;align-items:center;gap:8px;width:100%;min-height:var(--px-header-height);padding:8px max(12px,env(safe-area-inset-right)) 8px max(12px,env(safe-area-inset-left));margin:0;min-width:0}
.px-site-header .px-header-brand{display:flex;align-items:center;gap:9px;flex:none;min-width:44px;min-height:44px;color:#1b2025;text-decoration:none;font:750 1rem/1 system-ui,-apple-system,sans-serif;letter-spacing:0}
.px-header-brand img{display:block;width:40px;height:40px;border-radius:9px;background:#05090c;image-rendering:pixelated}
:is(.site-header,.audio-heading,.lc-top,.px-site-header) .brand-mark{flex:none;width:40px;height:40px;background-size:40px 40px;border:0;border-radius:9px;transform:none} /* also before the header script runs: no stretched circle on first paint */
/* ---- 特典ボタン (js/pass-button.mjs): ad → gold coin, free → mint gift, active → hourglass + 12-pixel bar ---- */
.px-site-header .px-header-pass{--pxb-bg:linear-gradient(165deg,#ffe28a 0%,#ffc94a 48%,#f3a531 100%);--pxb-ink:#4a2a03;--pxb-edge:#c27614;--pxb-depth:#a55f0c;position:relative;display:grid;grid-template-columns:20px minmax(0,1fr);grid-template-rows:1fr auto;align-items:center;column-gap:5px;flex:none;width:104px;min-width:104px;height:44px;margin-left:auto;padding:4px 8px 4px 6px;overflow:visible;isolation:isolate;border:2px solid var(--pxb-edge);border-radius:10px;background:var(--pxb-bg);box-shadow:inset 0 2px 0 #fff9,inset 0 -2px 0 #0000001a,0 3px 0 var(--pxb-depth);color:var(--pxb-ink);font:800 13px/1 system-ui,-apple-system,"Hiragino Sans",sans-serif;font-variant-numeric:tabular-nums;white-space:nowrap;cursor:pointer;touch-action:manipulation;text-align:left}
.px-header-pass[data-state=free]{--pxb-bg:linear-gradient(165deg,#c8f5d6 0%,#7fdaa2 50%,#44b77a 100%);--pxb-ink:#0d3b22;--pxb-edge:#2f9160;--pxb-depth:#237047}
.px-header-pass[data-state=active]{--pxb-bg:linear-gradient(165deg,#fffaf0,#f3ead7);--pxb-ink:#5b4417;--pxb-edge:#c9a45a;--pxb-depth:#b8904540;grid-template-rows:1fr 7px;row-gap:3px}
.px-header-pass[data-state=active][data-low=true]{--pxb-edge:#e0664f;--pxb-depth:#c2412d55}
.px-header-pass[data-state=pro]{--pxb-bg:linear-gradient(165deg,#2e2a44,#18162a);--pxb-ink:#ffe39a;--pxb-edge:#8d78e0;--pxb-depth:#0005;cursor:default}
.px-header-pass:disabled{opacity:1}
.px-header-pass[data-pending=true]{cursor:progress;filter:saturate(.7) brightness(.97)}
.px-header-ready .px-header-pass:not(:disabled):active{transform:translateY(3px);box-shadow:inset 0 2px 0 #fff9,inset 0 -2px 0 #0000001a,0 0 0 var(--pxb-depth)}
.pxb-icon{grid-column:1;grid-row:1 / -1;display:grid;place-items:center;width:20px;height:20px;align-self:center}
.pxb-icon svg{grid-area:1/1;display:none;overflow:visible}
.px-header-pass:is([data-state=ad],[data-state=pro]) .pxb-coin,.px-header-pass[data-state=free] .pxb-gift,.px-header-pass[data-state=active] .pxb-glass{display:block}
.pxb-coin-rim{fill:#a86410}.pxb-coin-face{fill:#ffd95c}.pxb-coin-star{fill:#fff6c9;transform-box:view-box}
.px-header-pass[data-state=pro] .pxb-coin-face{fill:#b9a6ff}.px-header-pass[data-state=pro] .pxb-coin-rim{fill:#5b48b8}
.pxb-gift-box{fill:#ff7a8a}.pxb-gift-lid{fill:#ff9aa6}.pxb-gift-ribbon{fill:#fff4b8}
.pxb-glass-frame{fill:#8a6424}.pxb-sand-top,.pxb-sand-bottom,.pxb-sand-drop{fill:#e8a93a}
.px-header-pass[data-low=true] :is(.pxb-sand-top,.pxb-sand-bottom,.pxb-sand-drop){fill:#e2553f}
.pxb-text{grid-column:2;grid-row:1;display:grid;gap:3px;min-width:0}
.px-header-pass[data-state=active] .pxb-text{grid-auto-flow:column;justify-content:start;align-items:baseline;gap:4px}
.pxb-main{display:block;min-width:0;overflow:hidden;text-overflow:ellipsis;font:900 15px/1 system-ui,-apple-system,"Hiragino Sans",sans-serif;letter-spacing:-.01em;text-shadow:0 1px 0 #ffffff80}
.px-header-pass[data-state=free] .pxb-main{font-size:13px}
.pxb-sub{display:block;font:800 9px/1 system-ui,-apple-system,"Hiragino Sans",sans-serif;opacity:.82;letter-spacing:.02em}
.px-header-pass[data-state=active] .pxb-sub{order:-1;font-size:9px}
.px-header-pass[data-state=pro] .pxb-main{text-shadow:none}
.pxb-bar{grid-column:2;grid-row:2;display:none;grid-template-columns:repeat(12,1fr);gap:1px;height:7px;padding:1px;border-radius:2px;background:#8a642433}
.px-header-pass[data-state=active] .pxb-bar{display:grid}
.pxb-bar i{display:block;background:transparent}
.pxb-bar i[data-on=true]{background:#f0b43c;box-shadow:inset 0 1px 0 #fff8}
.px-header-pass[data-low=true] .pxb-bar i[data-on=true]{background:#ec6a52}
.pxb-shine{position:absolute;inset:0;overflow:hidden;border-radius:8px;pointer-events:none;z-index:1}
.pxb-shine::before{content:'';position:absolute;top:-6px;bottom:-6px;left:0;width:16px;background:linear-gradient(90deg,transparent,#fffc,transparent);transform:translateX(-30px) skewX(-18deg);opacity:0}
/* the daily free hour waits: a red dot, like a notification */
.px-header-pass[data-state=free]::after{content:'';position:absolute;top:-5px;right:-5px;z-index:3;width:10px;height:10px;border:2px solid #fff;border-radius:50%;background:#ef4b3f;box-shadow:0 1px 2px #0003;animation:pxb-dot 2.4s ease-in-out infinite}
@keyframes pxb-dot{0%,80%,100%{transform:none}86%{transform:scale(1.3)}92%{transform:scale(.95)}}
.pxb-sparks{position:absolute;inset:-4px;pointer-events:none;z-index:2}
.pxb-sparks i{position:absolute;width:3px;height:3px;background:#fff;box-shadow:0 0 0 1px #ffcf4d;opacity:0}
.pxb-sparks i:nth-child(1){left:2px;top:3px}.pxb-sparks i:nth-child(2){right:6px;top:-1px}.pxb-sparks i:nth-child(3){right:1px;bottom:6px}
.px-header-pass[data-state=free] .pxb-sparks i{box-shadow:0 0 0 1px #5fcf91}
/* idle life: only while an ad (or the free hour) is waiting */
.px-header-pass[data-state=ad] .pxb-coin{animation:pxb-coin-flip 4.2s steps(1,end) infinite}
.px-header-pass:is([data-state=ad],[data-state=free]) .pxb-shine::before{animation:pxb-shine 4.2s ease-in-out infinite}
.px-header-pass:is([data-state=ad],[data-state=free]) .pxb-sparks i{animation:pxb-twinkle 2.4s steps(3,end) infinite}
.px-header-pass:is([data-state=ad],[data-state=free]) .pxb-sparks i:nth-child(2){animation-delay:.8s}
.px-header-pass:is([data-state=ad],[data-state=free]) .pxb-sparks i:nth-child(3){animation-delay:1.6s}
.px-header-pass[data-state=free] .pxb-gift{animation:pxb-hop 1.6s steps(1,end) infinite}
.px-header-pass[data-state=active] .pxb-sand-drop{animation:pxb-drop 1.2s steps(4,end) infinite}
.px-header-pass[data-state=active] .pxb-bar i[data-edge=true]{animation:pxb-blink 1.6s steps(1,end) infinite}
.px-header-pass[data-low=true] .pxb-bar i[data-edge=true]{animation-duration:.6s}
.px-header-pass[data-low=true] .pxb-main{animation:pxb-low 1.2s steps(1,end) infinite}
@keyframes pxb-coin-flip{0%,72%{transform:none}76%{transform:scaleX(.55)}80%{transform:scaleX(.12)}84%{transform:scaleX(-.55)}88%{transform:scaleX(-1)}92%{transform:scaleX(-.4)}96%{transform:scaleX(.5)}100%{transform:none}}
@keyframes pxb-shine{0%,62%{opacity:0;transform:translateX(-30px) skewX(-18deg)}66%{opacity:1}88%{opacity:1;transform:translateX(120px) skewX(-18deg)}100%{opacity:0;transform:translateX(120px) skewX(-18deg)}}
@keyframes pxb-twinkle{0%,55%,100%{opacity:0;transform:scale(.4)}65%{opacity:1;transform:scale(1)}80%{opacity:.8;transform:scale(1.4) rotate(45deg)}}
@keyframes pxb-hop{0%,70%,100%{transform:none}75%{transform:translateY(-3px)}82%{transform:translateY(-1px)}88%{transform:translateY(-2px)}94%{transform:none}}
@keyframes pxb-drop{0%{transform:translateY(0);opacity:1}100%{transform:translateY(4px);opacity:.2}}
@keyframes pxb-blink{0%,50%{opacity:1}51%,100%{opacity:.25}}
@keyframes pxb-low{0%,50%{color:#c73a24}51%,100%{color:var(--pxb-ink)}}
/* a watched ad: pop, the bar fills pixel by pixel, a ring; pixels and 「+1時間」 fly from .pxb-burst */
.px-header-pass[data-fx=grant]{animation:pxb-pop 520ms steps(6,end) 1}
.px-header-pass[data-fx=grant] .pxb-bar i[data-on=true]{animation:pxb-fill 380ms steps(2,end) calc(var(--i) * 40ms + 120ms) 1 both}
.px-header-pass[data-fx=grant] .pxb-glass{animation:pxb-turn 520ms steps(4,end) 1}
.px-header-pass[data-fx]::before{content:'';position:absolute;inset:-3px;border:3px solid #ffd35a;border-radius:13px;pointer-events:none;opacity:0;animation:pxb-ring 700ms ease-out 1}
.px-header-pass[data-fx=ready]::before{border-color:#fff2a8;animation:pxb-ring 700ms ease-out 2}
.px-header-pass[data-fx=ready]{animation:pxb-bounce 700ms steps(7,end) 1}
.px-header-pass[data-fx=ready] .pxb-coin{animation:pxb-turn 520ms steps(4,end) 1}
@keyframes pxb-pop{0%{transform:scale(1)}30%{transform:scale(1.14) rotate(-2deg)}55%{transform:scale(.95) rotate(1deg)}80%{transform:scale(1.04)}100%{transform:none}}
@keyframes pxb-fill{0%{background:#fff;transform:scaleY(1.8)}100%{background:#f0b43c;transform:none}}
@keyframes pxb-turn{0%{transform:rotate(0)}100%{transform:rotate(180deg)}}
@keyframes pxb-ring{0%{opacity:.95;transform:scale(.96)}100%{opacity:0;transform:scale(1.22,1.4)}}
@keyframes pxb-bounce{0%,100%{transform:none}20%{transform:translateY(-4px)}40%{transform:translateY(0)}60%{transform:translateY(-2px)}80%{transform:none}}
.pxb-burst{position:fixed;z-index:2147483001;width:0;height:0;pointer-events:none}
.pxb-burst i{position:absolute;left:0;top:0;image-rendering:pixelated;box-shadow:0 0 0 1px #0000001a}
.pxb-burst b{position:absolute;left:0;top:0;padding:3px 7px;border:2px solid #c27614;border-radius:7px;background:#ffd35a;color:#4a2a03;font:900 12px/1 system-ui,-apple-system,"Hiragino Sans",sans-serif;white-space:nowrap;box-shadow:0 2px 0 #a55f0c}
@media(prefers-reduced-motion:reduce){.px-header-pass *,.px-header-pass::before{animation:none!important}.pxb-burst{display:none}}
html[data-pixieed-motion=reduced] .px-header-pass *,html[data-pixieed-motion=reduced] .px-header-pass::before,html[data-pixieed-motion=reduced] .px-header-pass{animation:none!important}
html[data-pixieed-motion=reduced] .pxb-burst{display:none}
.audio-heading.px-site-header .px-header-pass{width:98px;min-width:98px}
.lc-top.px-site-header .px-header-pass[data-state=active],.px-standalone-globe .px-header-pass[data-state=active]{--pxb-bg:linear-gradient(165deg,#2c2c25f5,#17222af5);--pxb-ink:#ffe4a6;--pxb-edge:#e0b65c80;--pxb-depth:#0006}
.lc-top.px-site-header .px-header-pass[data-state=active] .pxb-glass-frame,.px-standalone-globe .px-header-pass[data-state=active] .pxb-glass-frame{fill:#e8c67a}
.lc-top.px-site-header .px-header-pass[data-state=active] .pxb-main,.px-standalone-globe .px-header-pass[data-state=active] .pxb-main{text-shadow:none}
.px-site-header .menu-toggle{width:44px;height:44px;min-width:44px}
.px-site-header :is(a,button,summary):focus-visible{outline:3px solid #357bb3;outline-offset:2px}
.px-site-header .px-header-utilities{flex:none}
.px-header-ready [data-pass-slot]{display:none!important}
/* Full-screen editors reserve exactly the height of the shared bar. */
.px-header-ready body:is(.app-page--tool-draw,.app-page--tool-jigsaw,.app-page--tool-creation-game,.app-page--tool-creation-spot,.app-page--tool-creation-hidden) #main{height:calc(100dvh - var(--px-header-height))}
.px-header-ready body:is(.hidden-object-editing,.spot-editing) #main{top:var(--px-header-height);height:calc(100dvh - var(--px-header-height))}
.px-header-ready .pixfind-page--playing{top:var(--px-header-height);height:auto}
.audio-heading.px-site-header{gap:6px;flex:none;min-height:var(--px-header-height);padding:0;margin:0}
.audio-heading.px-site-header h1{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.audio-heading.px-site-header .audio-header-actions{gap:3px}
.lc-top.px-site-header{display:flex;top:var(--lc-safe-t);left:0;right:0;gap:8px;min-height:64px;padding:8px 12px;pointer-events:none;background:linear-gradient(#0d111499,transparent)}
.lc-top.px-site-header>*{pointer-events:auto}
.lc-top.px-site-header .px-header-brand{color:white}
.lc-top.px-site-header .lc-zoom-stops{position:absolute;top:calc(100% + 4px);left:50%;transform:translateX(-50%);max-width:calc(100vw - 24px);overflow-x:auto}
.lc-top.px-site-header .lc-top-left{gap:0}
.lc[data-recording=true] .px-site-header *{pointer-events:none}
.px-header-ready body.px-standalone-globe .site-header.px-site-header{background:#08121c;color:#e9f6f7}
.px-standalone-globe .px-header-brand{color:#e9f6f7}
.px-standalone-globe .prototype-header{display:none}
.px-standalone-globe .globe-prototype{padding:0;width:100%;min-height:0;grid-template-rows:minmax(0,1fr);height:calc(100dvh - var(--px-header-height))}
.px-standalone-globe .globe-stage{min-height:0;height:calc(100dvh - var(--px-header-height));border:0;border-radius:0}
@media(max-width:600px){.px-site-header .px-header-brand>span:not(.brand-mark){display:none}.px-site-header .px-header-inner,.px-site-header.px-header-inner{gap:6px}.audio-heading.px-site-header{padding:0;gap:5px}}

/* Public controls share a small, physical response; canvases keep their own gestures. */
.px-header-ready :is(.px-header-pass,.px-header-utilities button,.px-header-utilities summary,.button,.app-tabs>a,.app-tabs>button,.lc-nav>a,.lc-nav>button){transition:transform var(--px-press-time) var(--px-press-ease),opacity var(--px-press-time) ease}
.px-header-ready :is(.px-header-pass,.px-header-utilities button,.px-header-utilities summary,.button,.app-tabs>a,.app-tabs>button,.lc-nav>a,.lc-nav>button):not(:disabled):active{transform:translateY(1px) scale(.96)}
.px-header-ready .tool-card{background-image:linear-gradient(145deg,#ffffff90,transparent 65%);transition:transform 180ms var(--px-press-ease);box-shadow:0 2px 0 #17233308}
.px-header-ready .tool-card__icon{position:relative;isolation:isolate;box-shadow:inset 0 1px 0 #fff8}
.px-header-ready .tool-card__icon::after{content:'';position:absolute;right:5px;bottom:5px;width:3px;height:3px;background:currentColor;box-shadow:-4px 0 currentColor,0 -4px currentColor;opacity:.18;pointer-events:none}
.px-header-ready .tool-card:active{transform:translateY(1px) scale(.985)}
@media(hover:hover) and (pointer:fine){.px-header-ready .px-header-pass:not(:disabled):hover{transform:translateY(-1px)}.px-header-ready .tool-card:hover{transform:translateY(-3px);box-shadow:0 2px 0 #17233308}}
@media(prefers-reduced-motion:reduce){.px-header-ready :is(.px-header-pass,.px-header-utilities button,.px-header-utilities summary,.button,.app-tabs>a,.app-tabs>button,.lc-nav>a,.lc-nav>button,.tool-card){transition:none;transform:none}.px-header-ready .px-header-pass::after{animation:none}.px-header-ready :is(.px-header-pass,.px-header-utilities button,.px-header-utilities summary,.button,.app-tabs>a,.app-tabs>button,.lc-nav>a,.lc-nav>button,.tool-card):is(:active,:hover){transform:none}}
/* Override the older global reduced-motion duration on every new gauge cell. */
@media(prefers-reduced-motion:reduce){.px-header-ready .px-header-pass,.px-header-ready .px-header-pass *,.px-header-ready .px-header-pass::before,.px-header-ready .px-header-pass::after{animation:none!important;transition:none!important}}
html[data-pixieed-motion=reduced] :is(.px-header-pass,.px-header-utilities button,.px-header-utilities summary,.button,.app-tabs>a,.app-tabs>button,.lc-nav>a,.lc-nav>button,.tool-card){transition:none;transform:none}
html[data-pixieed-motion=reduced] .px-header-pass::after{animation:none}
html[data-pixieed-motion=reduced] :is(.px-header-pass,.px-header-utilities button,.px-header-utilities summary,.button,.app-tabs>a,.app-tabs>button,.lc-nav>a,.lc-nav>button,.tool-card):is(:active,:hover){transform:none}
html[data-pixieed-motion=reduced] .px-header-pass,html[data-pixieed-motion=reduced] .px-header-pass *,html[data-pixieed-motion=reduced] .px-header-pass::before,html[data-pixieed-motion=reduced] .px-header-pass::after{animation:none!important;transition:none!important}

/* The opt-in sheet uses the same pixel details and stays readable on short screens. */
.px-header-ready .px-pass{background:linear-gradient(145deg,#28343d,#151d25);border-color:#e5c77a30;box-shadow:0 12px 30px #0004}
.px-header-ready .px-pass h2 i{border-radius:7px;background:linear-gradient(145deg,#ffe5a4,#efc76b);box-shadow:inset 0 1px 0 #fff9}
.px-header-ready .px-pass-perks{gap:6px;padding:0;list-style:none}
.px-header-ready .px-pass-perks li{position:relative;padding:8px 10px 8px 25px;border:1px solid #ffffff10;border-radius:9px;background:#ffffff06}
.px-header-ready .px-pass-perks li::before{content:'';position:absolute;left:11px;top:14px;width:4px;height:4px;background:#e7c576;box-shadow:4px 0 #e7c576,0 4px #e7c576}
.px-header-ready .px-pass-note{font-size:12px}
.px-header-ready .px-pass button{border-radius:12px;transition:transform var(--px-press-time) var(--px-press-ease)}
.px-header-ready .px-pass button:not(:disabled):active{transform:translateY(1px) scale(.97)}
.px-header-ready .px-pass .px-pass-go{background:linear-gradient(145deg,#f27a61,#de5146);box-shadow:inset 0 1px 0 #fff3,0 2px 0 #0002}
@media(prefers-reduced-motion:reduce){.px-header-ready .px-pass button{transition:none;transform:none}.px-header-ready .px-pass button:active{transform:none}}
html[data-pixieed-motion=reduced] .px-pass button{transition:none;transform:none}
html[data-pixieed-motion=reduced] .px-pass button:active{transform:none}

/* Native details keep their focus and dismissal behavior; only presentation moves. */
.px-header-ready [data-px-panel-motion^=reveal]{transform-origin:var(--px-panel-origin-x,50%) var(--px-panel-origin-y,100%);pointer-events:auto}
.px-header-ready [data-px-panel-motion=reveal-a]{animation:px-panel-reveal-a 180ms var(--px-press-ease) 1}
.px-header-ready [data-px-panel-motion=reveal-b]{animation:px-panel-reveal-b 180ms var(--px-press-ease) 1}
.px-header-ready [data-px-panel-motion=return-a]{animation:px-panel-return-a 140ms var(--px-press-ease) 1}
.px-header-ready [data-px-panel-motion=return-b]{animation:px-panel-return-b 140ms var(--px-press-ease) 1}
@keyframes px-panel-reveal-a{from{opacity:.4;transform:translateY(3px) scale(.975)}to{opacity:1;transform:none}}
@keyframes px-panel-reveal-b{from{opacity:.4;transform:translateY(3px) scale(.975)}to{opacity:1;transform:none}}
@keyframes px-panel-return-a{0%,100%{transform:none}45%{transform:scale(.96)}}
@keyframes px-panel-return-b{0%,100%{transform:none}45%{transform:scale(.96)}}
/* tool pages: the tool's name beside the logo, kept on phones too */
.px-site-header .px-header-brand--tool>span:not(.brand-mark){display:inline!important;overflow:hidden;min-width:0;font-weight:900;font-size:1rem;letter-spacing:.04em;text-overflow:ellipsis;white-space:nowrap}
.px-site-header .px-header-brand--tool{flex:0 1 auto;min-width:0}
@media(max-width:360px){.px-site-header .px-header-brand--tool>span:not(.brand-mark){font-size:.9rem;letter-spacing:.02em}}
/* tight headers use the short name (ドットで音楽 → 音楽) */
@media(max-width:360px){.px-site-header .px-header-brand--tool>span[data-short]{font-size:0!important}.px-site-header .px-header-brand--tool>span[data-short]::after{content:attr(data-short);font-size:.95rem}}
@media(max-width:440px){.audio-heading.px-site-header .px-header-brand--tool>span[data-short],.lc-top.px-site-header .px-header-brand--tool>span[data-short]{font-size:0!important}.audio-heading.px-site-header .px-header-brand--tool>span[data-short]::after,.lc-top.px-site-header .px-header-brand--tool>span[data-short]::after{content:attr(data-short);font-size:.95rem}}
