/* POLISH GLASS — border beam · shine sweep · split reveal · title shimmer */

/* Border-beam: conic gradient rotates around periphery, masked as 1px border */
.glass-card, .svc-card, .case-card, .review-card, .meta-card {
  position: relative; isolation: isolate;
}
.glass-card::before, .svc-card::before, .case-card::before,
.review-card::before, .meta-card::before {
  content: ''; position: absolute; inset: 0; border-radius: inherit;
  padding: 1px;
  background: conic-gradient(from 0deg,
    transparent 0%, var(--c) 20%, transparent 40%, var(--p) 60%, transparent 80%);
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
  -webkit-mask-composite: xor; mask-composite: exclude;
  opacity: 0; transition: opacity 0.5s;
  pointer-events: none; z-index: 1;
}
.glass-card:hover::before, .svc-card:hover::before, .case-card:hover::before,
.review-card:hover::before, .meta-card:hover::before {
  opacity: 0.8; animation: beam-rotate 5s linear infinite;
}
@keyframes beam-rotate { to { transform: rotate(360deg); } }

/* Shine-sweep — diagonal white band glides on :hover */
.svc-card::after, .case-card::after {
  content: ''; position: absolute; inset: 0; border-radius: inherit;
  background: linear-gradient(105deg, transparent 40%, rgba(255,255,255,0.08) 50%, transparent 60%);
  transform: translateX(-150%);
  transition: transform 0.9s var(--ease-out-expo);
  pointer-events: none; z-index: 2;
}
.svc-card:hover::after, .case-card:hover::after { transform: translateX(150%); }

/* Split-char reveal — set by js/split-reveal.js */
.s-title .split-char {
  display: inline-block; opacity: 0; transform: translateY(20px);
  transition: opacity 0.55s var(--ease-out-expo), transform 0.55s var(--ease-out-expo);
}
.s-title.revealed .split-char { opacity: 1; transform: translateY(0); will-change: auto; }
.s-title .split-char[data-space="1"] { width: 0.28em; }

/* Shimmer — gradient inner <span> breathes; paused outside viewport */
.s-title span {
  background-size: 200% 100%; background-position: 0% 50%;
  animation: shimmer 8s ease-in-out infinite paused;
}
.s-title.in-view span { animation-play-state: running; }
@keyframes shimmer {
  0%, 100% { background-position: 0% 50%; }
  50%      { background-position: 100% 50%; }
}

/* Fallbacks */
.perf-low .glass-card::before, .perf-low .svc-card::before, .perf-low .case-card::before,
.perf-low .review-card::before, .perf-low .meta-card::before { animation: none; opacity: 0 !important; }
.no-glass .glass-card::before, .no-glass .svc-card::before, .no-glass .case-card::before,
.no-glass .review-card::before, .no-glass .meta-card::before { display: none; }
@media (prefers-reduced-motion: reduce) {
  .svc-card::after, .case-card::after { display: none; }
  .glass-card::before, .svc-card::before, .case-card::before,
  .review-card::before, .meta-card::before { animation: none; }
  .s-title span { animation: none; }
  .s-title .split-char { opacity: 1; transform: none; transition: none; }
}
@media (hover: none) {
  .svc-card::after, .case-card::after { display: none; }
  .glass-card::before, .svc-card::before, .case-card::before,
  .review-card::before, .meta-card::before { display: none; }
}
