/* text-fx.css — redesign pass (Oct 2026). Loaded AFTER site.css in every page head; later rules win.
   Owner: FX (DESIGN-SPEC §5, TEXT-FX-DESIGN §1, REVISION-2 R5). Pairs with static/js/text-fx.js, which never
   injects this file. Targets: h1.hero-wordmark (home) and h1.page-hero__title (listing pages). */

/* ---- live state (classes set by text-fx.js only, in the task that renders the first WebGL frame) ---- */
.text-fx-host { -webkit-hyphens: manual; hyphens: manual; }    /* soft hyphens would be glyphs the texture can't see */
canvas.text-fx { position: absolute; pointer-events: none; display: block; z-index: 1; }
.text-fx-live { -webkit-text-fill-color: transparent; }        /* color stays → computed colour still readable; text-shadow still paints */

@media print, (prefers-reduced-motion: reduce), (forced-colors: active) {
  .text-fx-live { -webkit-text-fill-color: currentcolor; }
  canvas.text-fx { display: none; }
}

/* ---- DOM mirror — the same gesture (lift shadow + cream sheen) when the module is not live
   on a hover-capable device (import pending/failed, no WebGL). The gold .hero-lab keeps its colour.
   Lift shadow = text-fx.js DEFAULTS (0.07em down, 0.10em blur, navy-cast .46), tuned against the navy
   clay page-hero slabs. Light theme only (REVISION-2 R7). ---- */
@media (hover: hover) and (pointer: fine) and (prefers-reduced-motion: no-preference) {
  h1.hero-wordmark:not(.text-fx-live), h1.page-hero__title:not(.text-fx-live) {
    transition: color 600ms var(--ease-out), text-shadow 600ms var(--ease-out);
  }
  h1.hero-wordmark:not(.text-fx-live):hover {
    color: var(--cream, #fff3d6);
    text-shadow: 0 .07em .10em rgb(0 14 44 / .46), 0 2px 28px rgb(0 20 60 / .55);
  }
  h1.page-hero__title:not(.text-fx-live):hover {
    color: var(--cream, #fff3d6);
    text-shadow: 0 .07em .10em rgb(0 14 44 / .46);
  }
}
