/* fx: ambient scene life + UI motion (js/fx.js). All motion is killed by body.rm / prefers-reduced-motion (style.css) and body.fx-off. */
#fxo{position:absolute;inset:0;z-index:90;pointer-events:none;overflow:hidden}
.fx-stamp{position:absolute;opacity:0;display:grid;place-items:center;filter:drop-shadow(0 2px 2px rgba(60,10,5,.35));will-change:transform,opacity}
.fx-stamp .fx-sc{width:100%;height:100%;display:grid;place-items:center;border:7px solid;border-radius:10px;font-family:'Noto Serif CJK JP','Noto Serif JP',serif;font-weight:900;line-height:1;letter-spacing:.04em;opacity:.93;filter:url(#fx-rough);box-shadow:inset 0 0 0 3px rgba(241,228,195,.0),inset 0 0 0 5px currentColor;background:rgba(241,228,195,.08)}
.fx-stamp .fx-sc.round{border-radius:50%}
.fx-ink{position:absolute;opacity:0;filter:blur(7px)}
.fx-flash{position:absolute;inset:0;background:#fff6df;opacity:0}
.fx-conf{position:absolute;display:block;border-radius:50% 4px 50% 4px;opacity:0;box-shadow:0 1px 0 rgba(0,0,0,.15)}
body.fx-off #fxo{display:none}
/* scene layers on .cover (injected) */
.fx-kbw{position:absolute;inset:0;overflow:hidden;z-index:-1;pointer-events:none}
.fx-kb{position:absolute;inset:0;transform-origin:50% 50%;will-change:transform}
.fx-kb>*{position:absolute;pointer-events:none}
.fx-cv{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}
.fx-patch,.fx-glow,.fx-wisp{will-change:transform,opacity}
.fx-glow,.fx-wisp,.fx-tint{border-radius:50%}.fx-tint{border-radius:0}
@keyframes fxkb{from{transform:scale(1) translate(0,0)}to{transform:scale(1.06) translate(calc(var(--kx)*1.5%),calc(var(--ky)*1%))}}
@keyframes fxrot{from{transform:rotate(calc(var(--a)*-1))}to{transform:rotate(var(--a))}}
@keyframes fxskew{from{transform:skewX(calc(var(--a)*-1))}to{transform:skewX(var(--a))}}
@keyframes fxflick{0%{opacity:.55}8%{opacity:.9}17%{opacity:.5}31%{opacity:.95}44%{opacity:.62}58%{opacity:1}73%{opacity:.55}86%{opacity:.85}100%{opacity:.6}}
@keyframes fxpulse{0%,100%{opacity:calc(var(--o)*.55)}50%{opacity:var(--o)}}
@keyframes fxsteam{0%{opacity:0;transform:translate(0,0) scale(.55)}20%{opacity:var(--o)}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(1.9)}}
/* UI motion */
.toast{transform-origin:50% 0;animation:fxtoast .34s cubic-bezier(.2,.8,.3,1),fxtoastout .3s ease-in 2.9s forwards}
@keyframes fxtoast{from{opacity:0;transform:translateY(-16px) scaleY(.62)}60%{opacity:1;transform:translateY(2px) scaleY(1.04)}to{opacity:1;transform:none}}
@keyframes fxtoastout{to{opacity:0;transform:translateY(-8px)}}
#modal:not([hidden]){animation:fxfade .22s ease-out}
#modal .card,#modal .title{transform-origin:50% 0;animation:fxunfold .32s cubic-bezier(.2,.8,.3,1) both}
@keyframes fxfade{from{opacity:0}}
@keyframes fxunfold{from{opacity:0;transform:translateY(18px) scale(.95,.88)}65%{opacity:1;transform:translateY(-2px) scale(1.005)}to{opacity:1;transform:none}}
#nav .badge{animation:fxbadge 2.2s ease-out infinite}
@keyframes fxbadge{0%{box-shadow:0 0 0 0 rgba(168,42,36,.6)}70%,100%{box-shadow:0 0 0 8px rgba(168,42,36,0)}}
.btn,#nav .it{transition:translate .12s,scale .09s,filter .12s}
.btn:active:not(:disabled),#nav .it:active{scale:.965}
#content div[data-act],#content section[data-act],#content li[data-act],#content a[data-act]{transition:translate .12s ease-out,scale .09s}
#content div[data-act]:hover,#content section[data-act]:hover,#content li[data-act]:hover{translate:0 -1px}
#content div[data-act]:active,#content li[data-act]:active{scale:.985}
.rrow{transition:translate .14s ease-out,scale .09s,background .12s}.rrow:hover{translate:3px 0}.rrow:active{scale:.975}
.card .opt{transition:translate .12s,background .12s,border-color .12s}.card .opt:hover{translate:0 -1px}.card .opt:active{scale:.985}
.wbg .body{animation:fxbreath 4.5s ease-in-out infinite}
@keyframes fxbreath{0%,100%{transform:scaleY(.994)}50%{transform:scaleY(1.006)}}
body.fx-paused *{animation-play-state:paused!important}
body.fx-off .fx-kbw{display:none}
body.fx-off .toast,body.fx-off #modal .card,body.fx-off #modal .title,body.fx-off #modal:not([hidden]),body.fx-off #nav .badge,body.fx-off .wbg .body{animation:none}
