/* Landing page styles — scoped to body.home so this sheet can load on
 * every page (soft navigation swaps pages without a full reload). */

body.home {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  background-image: var(--bg-wash);
  background-attachment: fixed;
}

.hero {
  /* svh keeps the hero stable under mobile browser URL bars. */
  min-height: calc(100vh - 64px);
  min-height: calc(100svh - 64px);
  display: grid;
  place-content: center;
  text-align: center;
  padding: var(--space-16) var(--space-6);
  animation: rise-in var(--duration-slow) var(--ease-out) both;
}

.hero-title {
  font-size: var(--text-display);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-tight);
}

.hero-type {
  margin-top: var(--space-4);
  font-family: var(--font-mono);
  font-size: clamp(1rem, 2.5vw, 1.25rem);
  color: var(--text-primary);
  min-height: 1.6em;
}

.hero-type-word {
  color: var(--accent-strong);
  font-weight: var(--weight-semibold);
}

.hero-type-cursor {
  display: inline-block;
  width: 0.55ch;
  height: 1.05em;
  margin-left: 2px;
  vertical-align: text-bottom;
  background: var(--accent-default);
  animation: cursor-blink 1.1s steps(1) infinite;
}

@keyframes cursor-blink {
  0%,
  100% {
    opacity: 1;
  }
  50% {
    opacity: 0;
  }
}

.hero-scroll-cue {
  justify-self: center;
  margin-top: var(--space-12);
  color: var(--text-muted);
  font-size: var(--text-lg);
  animation: cue-float 2.2s var(--ease-in-out) infinite;
}

@keyframes cue-float {
  0%,
  100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(8px);
  }
}

@media (prefers-reduced-motion: reduce) {
  .hero-type-cursor,
  .hero-scroll-cue {
    animation: none;
  }
}

/* ── Intro band: photo + vinyl stickers on a darker blush ── */
:root {
  --band-blush: var(--blush-200);
}

[data-theme="dark"] {
  --band-blush: #3a2523;
}

@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --band-blush: #3a2523;
  }
}

.intro {
  padding: var(--space-16) var(--space-6);
  background: var(--band-blush);
}

@media (max-width: 640px) {
  body.home {
    /* iOS repaints fixed backgrounds badly while scrolling. */
    background-attachment: scroll;
  }

  .intro {
    padding: var(--space-12) var(--space-4);
  }
}

.wave-into-blush {
  color: var(--band-blush);
}

.wave-out-blush {
  background: var(--band-blush);
  color: var(--surface-default);
}

/* The resume and everything below sit on plain surface. */
.site-footer {
  background: var(--surface-default);
}

.intro-inner {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 5fr) minmax(0, 6fr);
  gap: var(--space-12);
  align-items: center;
}

@media (max-width: 720px) {
  .intro-inner {
    grid-template-columns: 1fr;
  }
}

.intro-photo {
  transform: rotate(-3deg);
  transition: transform var(--duration-base) var(--ease-out);
}

.intro-photo:hover {
  transform: rotate(-1deg) scale(1.02);
}

.intro-photo-img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--radius-lg);
  border: 1px solid var(--border-default);
  box-shadow: var(--shadow-lg);
}

.intro-hello {
  font-family: var(--font-mono);
  font-weight: var(--weight-semibold);
  color: var(--accent-strong);
}

.intro-copy h2 {
  margin-top: var(--space-2);
  font-size: var(--text-4xl);
  letter-spacing: var(--tracking-tight);
}

/* Vinyl stickers: logo cutouts with a white die-cut border (stacked
 * drop-shadows follow the cutout's silhouette), scattered sporadically. */
.sticker-scatter {
  position: absolute;
  inset: 0;
  pointer-events: none;
}

.sticker {
  position: absolute;
  width: var(--size, 90px);
  height: auto;
  pointer-events: auto;
  transform: rotate(var(--tilt, 0deg));
  filter: drop-shadow(0 8px 10px rgba(35, 30, 27, 0.25));
  transition: transform var(--duration-base) var(--ease-out);
}

.sticker:hover {
  transform: rotate(0deg) scale(1.12);
}

@media (max-width: 720px) {
  .sticker-scatter {
    position: static;
    display: flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-4);
    margin-top: var(--space-4);
  }

  /* Scaled down from the scattered desktop sizes so all three fit one row. */
  .sticker {
    position: static;
    width: calc(var(--size, 90px) * 0.75);
  }
}

/* ── About squiggle: draws itself in as the section scrolls into view ── */
.squiggle {
  display: block;
  width: min(320px, 70%);
  height: 28px;
  margin-top: var(--space-4);
}

@supports (animation-timeline: view()) {
  .squiggle path {
    stroke-dasharray: 1;
    stroke-dashoffset: 1;
    animation: draw-squiggle linear both;
    animation-timeline: view();
    animation-range: entry 10% cover 45%;
  }

  @keyframes draw-squiggle {
    to {
      stroke-dashoffset: 0;
    }
  }

  @media (prefers-reduced-motion: reduce) {
    .squiggle path {
      animation: none;
      stroke-dashoffset: 0;
    }
  }
}

.hero-design-link {
  justify-self: center;
  margin-top: var(--space-3);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--accent-strong);
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}

.hero-subtitle {
  margin-top: var(--space-3);
  max-width: 46ch;
  font-size: var(--text-lg);
  color: var(--text-secondary);
}

.hero-links {
  margin-top: var(--space-8);
  display: flex;
  gap: var(--space-4);
  justify-content: center;
}

@keyframes rise-in {
  from {
    opacity: 0;
    transform: translateY(12px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
