/* Portfolio index + 404 — layered on assets/css/style.css
   Type scale: modular steps + shared tracking (typeset) */

body.home,
body.not-found {
  --font-sans: 'IBM Plex Sans', system-ui, sans-serif;
  --font-display: 'Instrument Serif', Georgia, 'Times New Roman', serif;

  /* Scale (~1.2): caption < label < small < body < display handled via existing clamps */
  --text-caption: 0.75rem;
  --text-label: 0.8125rem;
  --text-small: 0.875rem;
  --text-body: 1rem;
  --text-body-lg: 1.0625rem;

  --leading-body: 1.65;
  --leading-heading: 1.08;
  --leading-subhead: 1.15;

  --track-wide: 0.14em;
  --track-label: 0.16em;
  --track-micro: 0.12em;

  position: relative;
  font-family: var(--font-sans);
  font-weight: 400;
  line-height: var(--leading-body);
  -webkit-font-smoothing: antialiased;
  font-synthesis: none;
}

body.home h1,
body.home .projects h2,
body.not-found h1 {
  font-family: var(--font-display);
  text-rendering: optimizeLegibility;
}

body.home h1 {
  line-height: var(--leading-heading);
  text-wrap: balance;
}

body.home .projects h2 {
  line-height: var(--leading-subhead);
}

body.home .bio p,
body.home .group-title,
body.home .project-list a,
body.home .project-meta,
body.home .links a,
body.home .footer,
body.home .coordinates {
  font-family: var(--font-sans);
}

body.not-found .lost-message,
body.not-found .lost-detail p,
body.not-found .back-link,
body.not-found .footer,
body.not-found .coordinates {
  font-family: var(--font-sans);
}

body.home .group-title {
  font-size: var(--text-caption);
  font-weight: 500;
  letter-spacing: var(--track-label);
  line-height: 1.3;
}

body.home .bio p {
  font-size: var(--text-body-lg);
  font-weight: 400;
  max-width: 58ch;
  line-height: var(--leading-body);
  color: color-mix(in srgb, var(--fg) 72%, var(--accent));
}

body.home .project-list a {
  font-size: var(--text-body);
  font-weight: 500;
  letter-spacing: 0.01em;
  line-height: var(--leading-subhead);
}

body.home .project-meta {
  font-size: var(--text-small);
  line-height: 1.45;
}

body.home .links a {
  font-size: var(--text-label);
  font-weight: 500;
  letter-spacing: var(--track-wide);
  line-height: var(--leading-subhead);
}

body.home .footer,
body.home .coordinates {
  font-size: var(--text-caption);
  letter-spacing: var(--track-micro);
  line-height: 1.4;
}

body.home #canvas,
body.not-found #canvas {
  opacity: 0.28;
}

body.home a:focus-visible,
body.not-found a:focus-visible {
  outline: 2px solid var(--fg);
  outline-offset: 3px;
  border-radius: 2px;
}

/* Skip link — keyboard / screen reader */
.skip-link {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.skip-link:focus-visible {
  position: fixed;
  width: auto;
  height: auto;
  margin: 0;
  clip: auto;
  z-index: 100;
  left: 1rem;
  top: 1rem;
  padding: 0.65rem 1rem;
  font-family: var(--font-sans);
  font-size: var(--text-label);
  font-weight: 500;
  letter-spacing: var(--track-micro);
  text-decoration: none;
  color: var(--bg);
  background: var(--fg);
  border-radius: 2px;
  box-shadow: 0 4px 24px rgba(0, 0, 0, 0.45);
  outline: 2px solid var(--accent);
  outline-offset: 2px;
}

/* Touch-friendly targets + interaction feedback */
body.home .project-list a {
  display: inline-flex;
  align-items: center;
  min-height: 2.75rem;
  padding: 0.35rem 0;
  transition:
    color 0.2s cubic-bezier(0.19, 1, 0.22, 1),
    opacity 0.2s cubic-bezier(0.19, 1, 0.22, 1);
}

body.home .project-list a:hover {
  color: color-mix(in srgb, var(--fg) 90%, #fff);
}

body.home .project-list a:active {
  opacity: 0.82;
}

body.home .project-list a::after {
  transition: transform 0.35s cubic-bezier(0.19, 1, 0.22, 1);
}

body.home .links a {
  display: inline-flex;
  align-items: center;
  min-height: 2.75rem;
  padding: 0.35rem 0.15rem;
  margin: -0.35rem -0.15rem;
  transition:
    color 0.2s cubic-bezier(0.19, 1, 0.22, 1),
    opacity 0.2s cubic-bezier(0.19, 1, 0.22, 1);
}

body.home .links a:hover {
  color: color-mix(in srgb, var(--fg) 90%, #fff);
}

body.home .links a:active {
  opacity: 0.82;
}

body.home .links a::after {
  transition: transform 0.35s cubic-bezier(0.19, 1, 0.22, 1);
}

@media (prefers-reduced-motion: reduce) {
  body.home h1,
  body.home .bio,
  body.home .projects,
  body.home .links,
  body.home .footer,
  body.home .coordinates,
  body.not-found .error-code,
  body.not-found .lost-message,
  body.not-found .lost-detail,
  body.not-found .back-link,
  body.not-found .footer,
  body.not-found .coordinates {
    animation: none !important;
    opacity: 1;
    transform: none;
  }

  body.not-found .error-code {
    opacity: 0.12;
  }

  body.home .project-list a,
  body.home .links a,
  body.not-found .back-link {
    transition-duration: 0.01ms;
  }
}

/* --------------------------------------------------------------------------
   404 page
   -------------------------------------------------------------------------- */

body.not-found .error-code {
  font-family: var(--font-display);
  font-size: clamp(6rem, 20vw, 12rem);
  font-weight: 400;
  letter-spacing: -0.04em;
  line-height: 0.85;
  color: var(--fg);
  opacity: 0.12;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 0;
  pointer-events: none;
  animation: fadeToGhost 1.2s ease-out;
}

@keyframes fadeToGhost {
  from {
    opacity: 0;
  }
  to {
    opacity: 0.12;
  }
}

body.not-found .lost-message {
  font-size: var(--text-label);
  font-weight: 500;
  letter-spacing: var(--track-wide);
  color: var(--dim);
  text-transform: uppercase;
  line-height: var(--leading-subhead);
  animation: fadeUp 1s ease-out 0.15s both;
}

body.not-found .lost-detail {
  margin-top: 1.5rem;
  margin-bottom: 3rem;
  animation: fadeUp 1s ease-out 0.3s both;
}

body.not-found .lost-detail p {
  font-size: var(--text-body-lg);
  color: var(--accent);
  max-width: 48ch;
  line-height: var(--leading-body);
}

body.not-found .back-link {
  display: inline-flex;
  align-items: center;
  min-height: 2.75rem;
  font-weight: 500;
  color: var(--fg);
  text-decoration: none;
  font-size: var(--text-label);
  letter-spacing: var(--track-wide);
  text-transform: uppercase;
  position: relative;
  padding: 0.35rem 0 6px;
  line-height: var(--leading-subhead);
  transition:
    color 0.2s cubic-bezier(0.19, 1, 0.22, 1),
    opacity 0.2s cubic-bezier(0.19, 1, 0.22, 1);
  animation: fadeUp 1s ease-out 0.45s both;
}

body.not-found .back-link:hover {
  color: color-mix(in srgb, var(--fg) 90%, #fff);
}

body.not-found .back-link:active {
  opacity: 0.82;
}

body.not-found .back-link::after {
  content: '';
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 1px;
  background: var(--dim);
  transform: scaleX(0);
  transform-origin: right;
  transition: transform 0.35s cubic-bezier(0.19, 1, 0.22, 1);
}

body.not-found .back-link:hover::after {
  transform: scaleX(1);
  transform-origin: left;
}

body.not-found .container {
  position: relative;
}

body.not-found .footer,
body.not-found .coordinates {
  font-size: var(--text-caption);
  letter-spacing: var(--track-micro);
  line-height: 1.4;
}
