/* signature.css: the φ moiré hero (ported from chevaillier-site index.html, see docs/SIGNATURE.md). */
.sig-hero{position:relative;min-height:min(100svh,52rem);display:flex;align-items:center;overflow:hidden;background:var(--ground)}
.sig-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;opacity:0;transition:opacity var(--dur-slow) var(--ease)}
.sig-canvas[data-sig-state="gl"],.sig-canvas[data-sig-state="static"]{opacity:1}
/* no-WebGL / reduced-data fallback: a still gradient, tinted from brass */
.sig-canvas[data-sig-state="fallback"]{opacity:1;background:radial-gradient(80% 90% at 70% 40%,rgba(163,150,122,.07),transparent 55%),radial-gradient(100% 100% at 30% 80%,rgba(30,56,97,.45),transparent 70%)}
/* hero legibility shade: the only gradient besides the no-WebGL fallback; >= .85 alpha under the text column (left 61.8%) */
.hero-shade{position:absolute;inset:0;z-index:1;background:linear-gradient(90deg,rgba(var(--shade-rgb),.94) 0%,rgba(var(--shade-rgb),.88) 61.8%,rgba(var(--shade-rgb),.15) 100%)}
.sig-grain{position:fixed;inset:0;z-index:60;pointer-events:none;opacity:.05;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E")}
.sig-inner{position:relative;z-index:2;width:100%;max-width:var(--container);margin:0 auto;padding:var(--space-2xl) var(--gutter) var(--space-xl)}
.sig-inner>*{max-width:calc(var(--container) * .618)}
/* h1 word reveal: words are hidden only while JS runs (html.js), so no-JS readers see everything */
.h1w>span>em{font-style:italic}
.h1w{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.06em;margin-bottom:-.06em}
.h1w>span{display:inline-block}
/* H1 reveal: 280ms per word + max .09s stagger = ~370ms total, no blur */
.js .h1w>span{transform:translateY(60%);opacity:0;
  transition:transform .28s var(--ease),opacity .28s var(--ease);transition-delay:var(--wd,0s)}
.js .sig-ready .h1w>span{transform:none;opacity:1}
@media (prefers-reduced-motion:reduce){
  .js .h1w>span{transform:none;opacity:1;transition:none}
  .sig-canvas{transition:none}
}
@media (max-width:48rem){.hero-shade{background:rgba(var(--shade-rgb),.9)}.sig-inner>*{max-width:none}}
