@layer utilities {
  /* ===================================================
     TGK Locked Placeholder
     =================================================== */

  .locked-placeholder {
    text-align: center;
    padding: 2.5rem 1.5rem 2rem;
    border-radius: var(--radius-md, 0.5rem);
    background: var(--bg-primary);
    border: 1px solid color-mix(in srgb, var(--text-accent) 25%, transparent);
    color: var(--text-primary);
    margin: 2rem auto;
    max-width: 700px;
    transition: opacity 0.4s ease;
  }

  html.tgk-js .locked-page[data-gate-pending="true"] > .locked-placeholder {
    opacity: 0;
    pointer-events: none;
    visibility: hidden;
  }

  /* Gate title — JS-rendered and static */
  .gate-title,
  .locked-placeholder > h2 {
    font-family: var(--font-display);
    color: var(--text-primary);
    font-size: var(--font-size-lg);
    margin: 0 0 0.75rem;
    font-weight: var(--type-weight-bold, 700);
  }

  /* Gate body text — JS-rendered and static */
  .gate-body,
  .locked-placeholder > p:not(.locked-actions):not(.locked-note):not(.gate-footnote) {
    color: var(--text-primary);
    font-size: var(--font-size-sm);
    line-height: 1.6;
    margin: 0 auto 1.25rem;
  }

  /* Left-align list inside centred gate */
  .locked-placeholder .list-emoji {
    text-align: left;
    display: inline-block;
  }

  /* Button rows */
  .gate-actions,
  .locked-actions {
    display: flex;
    gap: 0.75rem;
    justify-content: center;
    flex-wrap: wrap;
    margin: 0 0 0.5rem;
  }

  /* Footnote / locked note */
  .gate-footnote,
  .locked-note {
    font-size: var(--type-footnote-size, var(--font-size-xs, 0.8rem));
    color: var(--text-primary);
    margin: 0.75rem 0 0;
    opacity: 1;
  }

  .locked-tier-note {
    color: var(--text-primary);
  }

  /* Buttons inside the gate inherit global .btn */
  .locked-placeholder .btn {
    padding: var(--btn-padding, 0.65rem 1.4rem);
    font-size: var(--type-button-size, var(--font-size-base, 1rem));
    font-family: var(--btn-font, var(--font-display));
    font-weight: var(--type-weight-semibold, 600);
    text-transform: uppercase;
    letter-spacing: var(--type-button-tracking, 0.05em);
    border-radius: var(--btn-radius, var(--radius-md));
    cursor: pointer;
    text-align: center;
    color: var(--text-accent);
    background: transparent;
    border: 2px solid var(--text-accent);
    box-shadow: 0 0 8px transparent;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    margin: var(--space-xs, 0.25rem);
    transition: all 0.3s ease;
  }

  .locked-placeholder .btn:hover {
    background: var(--text-accent);
    color: var(--bg-primary);
    box-shadow: 0 0 12px var(--shadow-glow);
    transform: translateY(-1px);
  }

  .locked-placeholder .btn:active {
    transform: translateY(1px);
    box-shadow: 0 0 6px var(--shadow-glow);
  }

  .locked-placeholder .btn:focus-visible {
    outline: 2px solid var(--highlight);
    outline-offset: 2px;
  }

  .tgk-preview-gate {
    margin: 3rem auto;
    padding: 2rem;
    border: 1px solid color-mix(in srgb, var(--text-accent) 24%, transparent);
    border-radius: var(--radius-md, 0.5rem);
    background: var(--bg-primary);
    text-align: center;
  }

  .tgk-preview-gate__inner {
    max-width: 42rem;
    margin: 0 auto;
  }

  .tgk-preview-gate__eyebrow {
    margin: 0 0 0.5rem;
    font-size: var(--font-size-xs, 0.8rem);
    letter-spacing: var(--type-eyebrow-tracking-subtle, 0.08em);
    text-transform: uppercase;
    opacity: 0.72;
  }

  .tgk-preview-gate__actions {
    margin-top: 1.5rem;
  }

  [data-member-content][hidden],
  [data-preview-gate][hidden],
  .tgk-preview-gate.is-hidden {
    display: none;
  }

  /* ===================================================
     Gated page fade-in (opt-in via .gated-page on body)
     =================================================== */

  .locked-page .page-content {
    opacity: 0;
    transition: opacity 0.5s ease-in-out;
  }

  .locked-page.unlocked-page .page-content {
    opacity: 1;
  }

  @media (prefers-reduced-motion: reduce) {
    .locked-placeholder,
    .locked-placeholder .btn,
    .locked-page .page-content {
      transition: none !important;
    }
    .locked-placeholder .btn:hover {
      transform: none;
    }
  }
}
