/* The Ghost — texture.
   A clean grainless ground is forbidden. Every ground carries print grain and a plate edge.
   Grain is an inline SVG turbulence, so it ships with the CSS and never 404s. */
:root{
  --texture-grain:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='260' height='260'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='260' height='260' filter='url(%23n)' opacity='0.55'/></svg>"); /* @kind other */
  --grain-opacity:0.30; /* @kind other */      /* on saturated grounds */
  --grain-opacity-paper:0.16; /* @kind other */ /* on cream / manila stock */
  /* The plate edge: over-inked press margin. The ONLY shadow in the system.
     It is an artefact of printing, not a UI elevation. Never use it to float a card. */
  --edge-plate:inset 0 0 90px 26px rgba(22,19,17,0.55), inset 0 0 22px 4px rgba(22,19,17,0.45); /* @kind shadow */
  --edge-plate-soft:inset 0 0 60px 14px rgba(22,19,17,0.34); /* @kind shadow */
}

/* ---- Utilities ---- */
.gh-ground{position:relative;background-color:var(--surface-ground);color:var(--ink);isolation:isolate}
.gh-ground::after{content:"";position:absolute;inset:0;background-image:var(--texture-grain);background-size:260px 260px;opacity:var(--grain-opacity);mix-blend-mode:multiply;pointer-events:none;z-index:1}
.gh-ground > *{position:relative;z-index:2}
.gh-plate{box-shadow:var(--edge-plate)}
.gh-plate-soft{box-shadow:var(--edge-plate-soft)}
.gh-paper{position:relative;background-color:var(--card);color:var(--ink)}
.gh-paper::after{content:"";position:absolute;inset:0;background-image:var(--texture-grain);background-size:260px 260px;opacity:var(--grain-opacity-paper);mix-blend-mode:multiply;pointer-events:none}
