/* Shared pink circle cursor (all pages) */
html.has-cursor, html.has-cursor * { cursor: none !important; }
.cursor { position: fixed; left: 0; top: 0; z-index: 2147483647; pointer-events: none; opacity: 0; transition: opacity 0.2s ease; }
.cursor.is-visible { opacity: 1; }
.cursor i { display: block; width: 16px; height: 16px; margin: -8px 0 0 -8px; border-radius: 50%; background: #c9545c; transition: transform 0.25s cubic-bezier(0.2, 0.7, 0.2, 1), opacity 0.25s ease; }
/* over anything clickable: the circle grows and softens */
.cursor.is-link i { transform: scale(2.75); opacity: 0.55; }
@media (prefers-reduced-motion: reduce) { .cursor i { transition: none; } }

/* selected text is pink */
::selection { background: rgba(201, 84, 92, 0.3); color: inherit; }
::-moz-selection { background: rgba(201, 84, 92, 0.3); color: inherit; }
/* subtle film grain over every page (still, sits under the cursors) */
html::after {
  content: ""; position: fixed; inset: 0; z-index: 2147482000; pointer-events: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .2  0 0 0 0 .16  0 0 0 0 .14  0 0 0 1.1 -.35'/></filter><rect width='180' height='180' filter='url(%23n)'/></svg>");
  background-size: 180px 180px; opacity: .16;
}
@media print { html::after { display: none; } }
