/* Custom Cursor */
.cursor-dot {
  position: fixed;
  top: 0;
  left: 0;
  width: 8px;
  height: 8px;
  background-color: var(--text-primary);
  border-radius: 50%;
  pointer-events: none;
  z-index: 9999;
  transform: translate(-50%, -50%);
  transition: width 0.3s, height 0.3s, background-color 0.3s;
  mix-blend-mode: difference;
}

.cursor-outline {
  position: fixed;
  top: 0;
  left: 0;
  width: 40px;
  height: 40px;
  border: 1px solid rgba(255, 255, 255, 0.5);
  border-radius: 50%;
  pointer-events: none;
  z-index: 9998;
  transform: translate(-50%, -50%);
  transition: width 0.3s, height 0.3s, border-color 0.3s;
}

body.has-touch .cursor-dot,
body.has-touch .cursor-outline {
  display: none !important;
}

/* Hover States */
.cursor-dot.hover-view {
  width: 60px;
  height: 60px;
  background-color: rgba(255, 255, 255, 0.15);
  display: flex;
  align-items: center;
  justify-content: center;
}

.cursor-dot.hover-view::after {
  content: 'VIEW';
  font-size: 10px;
  font-weight: 600;
  letter-spacing: 0.1em;
  color: var(--text-primary);
}

.cursor-outline.hover-view {
  opacity: 0;
}

body.gsap-loaded .fade-up {
  opacity: 0;
  transform: translateY(30px);
}

.reveal-text {
  clip-path: polygon(0 100%, 100% 100%, 100% 100%, 0 100%);
}

.image-reveal {
  overflow: hidden;
  position: relative;
}

.image-reveal img {
  transform: scale(1.1);
  transition: transform 1.5s cubic-bezier(0.16, 1, 0.3, 1);
}

.image-reveal.is-revealed img {
  transform: scale(1);
}

/* Preloader */
.preloader {
  display: none !important;
}

.preloader.hidden {
  opacity: 0;
  pointer-events: none;
}

.preloader-text {
  font-family: var(--font-serif);
  font-size: 24px;
  letter-spacing: 0.1em;
  color: var(--text-primary);
}

.preloader-line {
  width: 100px;
  height: 1px;
  background: var(--border-subtle);
  position: relative;
  overflow: hidden;
}

.preloader-line::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 30%;
  background: var(--text-primary);
  animation: preloader-progress 1s ease-in-out infinite alternate;
}

@keyframes preloader-progress {
  0% { transform: translateX(-100%); }
  100% { transform: translateX(330%); }
}
