/* Inazda Stage: the few styles the engine and recipes rely on. Theme it with the --stage-* variables. */
:root{
  --stage-ink:#121214; --stage-paper:#f2eee6; --stage-signal:#ff4d1f;
  --stage-cursor-size:14px; --stage-ring:#1f5bff;
}
/* Fixed WebGL layer sits under the flow; flow content sits above it. */
.stage-canvas{position:fixed;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
/* Flow content must stack above the fixed canvas, with or without the smoother wrapper. */
#stage-wrapper,body>main,body>footer{position:relative;z-index:1}
/* SplitText line masks: overflow clip keeps descenders (padding + negative margin). */
.stage-line{padding-bottom:.08em;margin-bottom:-.08em}
.stage-line-mask{padding:.12em 0 .14em;margin:-.12em 0 -.14em}
.stage-caret::after{content:"";display:inline-block;width:.08em;height:.9em;margin-left:.06em;background:currentColor;vertical-align:-.08em;animation:stage-blink 1s steps(1) infinite}
@keyframes stage-blink{50%{opacity:0}}
/* Custom cursor (recipes/cursor.js). Hidden on touch, in reduced motion and in media mode by the recipe itself. */
.stage-cursor{position:fixed;left:0;top:0;z-index:10000;pointer-events:none;mix-blend-mode:normal}
.stage-cursor-dot{position:absolute;left:0;top:0;width:var(--stage-cursor-size);height:var(--stage-cursor-size);margin:calc(var(--stage-cursor-size)/-2) 0 0 calc(var(--stage-cursor-size)/-2);
  border-radius:50%;background:var(--stage-signal);box-shadow:0 0 0 2px var(--stage-paper);transition:transform .35s cubic-bezier(.2,1.2,.36,1)}
.stage-cursor.is-hover .stage-cursor-dot{transform:scale(2.6);opacity:.9}
.stage-cursor.is-label .stage-cursor-dot{transform:scale(0)}
.stage-cursor-label{position:absolute;left:0;top:0;transform:translate(-50%,-50%) scale(.6);opacity:0;white-space:nowrap;padding:8px 12px;border-radius:999px;
  background:var(--stage-signal);color:var(--stage-ink);font:600 12px/1 ui-monospace,monospace;letter-spacing:.06em;text-transform:uppercase;transition:transform .3s cubic-bezier(.2,1.2,.36,1),opacity .2s}
.stage-cursor.is-label .stage-cursor-label{opacity:1;transform:translate(-50%,-50%) scale(1)}
/* Reduced motion: the engine adds .stage-reduced; recipes render designed stills. */
.stage-reduced .stage-cursor{display:none}
@media (prefers-reduced-motion: reduce){.stage-caret::after{animation:none}}

/* Visually hidden text that recipes add for screen readers. */
.stage-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
