/* zane.it — homepage styles on top of the Nocturne tokens in nocturne.css.
   Every value mirrors the Claude Design source (Zane.it.dc.html); the only
   additions are the [hidden] guard and the small-screen block at the end. */

[hidden] { display: none !important; }

html { scroll-behavior: smooth; scroll-padding-top: 72px; }
body {
  margin: 0;
  padding-top: 47px; /* height of the fixed nav */
  text-wrap: pretty;
  background:
    radial-gradient(1200px 720px at 82% -160px, color-mix(in srgb, var(--color-accent-900) 75%, transparent), transparent 60%),
    radial-gradient(1100px 800px at -10% 100%, color-mix(in srgb, black 30%, transparent), transparent 55%),
    var(--color-bg);
}
a { color: var(--color-accent-300); }
a:hover { color: var(--color-accent-200); }

/* — layout — */
.container { max-width: 1200px; margin: 0 auto; padding: 0 clamp(20px, 5vw, 72px); }
.kicker {
  display: block; font-size: 13px; line-height: 14px; letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--color-accent); margin: 0 0 14px;
}
.divider {
  height: 1px;
  background: linear-gradient(to right, transparent, var(--color-divider) 48px calc(100% - 48px), transparent);
}

/* — header — */
.site-nav {
  position: fixed; top: 0; left: 0; right: 0; z-index: 100;
  padding-inline: max(clamp(20px, 5vw, 72px), calc((100% - 1200px) / 2 + clamp(20px, 5vw, 72px)));
  background: color-mix(in srgb, var(--color-bg) 82%, transparent);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
}
.site-nav a { white-space: nowrap; }

/* — hero — */
.hero {
  display: grid; grid-template-columns: minmax(0, 7fr) minmax(220px, 4fr);
  gap: 28px clamp(24px, 5vw, 96px); align-items: center; padding: 20px 0 84px;
}
.hero h1 {
  font-size: clamp(40px, 4.8vw, 68px); line-height: clamp(45px, 5.35vw, 76px);
  letter-spacing: -0.015em; margin: 0 0 0 -0.06em;
}
.hero h1 span { display: block; }
.hero-intro { font-size: 17px; line-height: 28px; max-width: 58ch; margin: 42px 0 0; color: var(--color-text); }
.hero-photo img { width: 100%; height: auto; border-radius: var(--radius-md); }

/* — technologies — */
.tech { padding: 0 0 56px; }
.tech-rows { display: flex; flex-direction: column; gap: 42px; align-items: center; }
.tech-row { display: flex; gap: clamp(28px, 4vw, 64px); flex-wrap: wrap; align-items: center; justify-content: center; }
.tech-row img { height: 40px; }
.tech-row img.is-small { height: 36px; }
.tech-row img.is-inverted { filter: invert(0.9); }
.tech-row img.is-proxmox { filter: invert(48%) sepia(85%) saturate(2500%) hue-rotate(10deg) brightness(1.05); }
.tech-row img.is-claude { filter: invert(58%) sepia(45%) saturate(1200%) hue-rotate(330deg) brightness(1.05); }

/* — call to action — */
.cta {
  display: table; margin: 0 auto 84px; white-space: nowrap;
  font-weight: 600; font-size: 18px; padding: 16px 36px;
  background: var(--color-accent-800); border-color: var(--color-accent);
  box-shadow: 0 0 32px color-mix(in srgb, var(--color-accent) 35%, transparent);
}
.cta, .cta:hover { color: var(--color-accent-100); }
.cta:hover, .cta:active { background: var(--color-accent-700); }

/* — stats band — */
.stats {
  padding: 70px 0;
  background:
    radial-gradient(900px 420px at 85% -40%, color-mix(in srgb, var(--color-section-glow) 70%, transparent), transparent 64%),
    var(--color-section);
}
.stats-grid {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, auto));
  justify-content: space-between; gap: 42px 28px;
}
.stat-value {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: clamp(36px, 3.6vw, 52px); line-height: 56px; color: var(--color-text); margin: 0 0 0 -0.055em;
}
.stat-label {
  font-size: 13px; line-height: 14px; letter-spacing: 0.06em; text-transform: uppercase;
  color: color-mix(in srgb, var(--color-text) 64%, transparent); margin: 14px 0 0;
}

/* — what I do — */
.skills { padding: 98px 0 70px; }
.skill {
  display: grid; grid-template-columns: minmax(48px, 80px) minmax(0, 1fr);
  gap: 14px clamp(24px, 4vw, 48px); align-items: baseline; padding: 42px 0;
}
.skill + .skill {
  background: linear-gradient(to right, transparent, var(--color-neutral-700) 48px calc(100% - 48px), transparent) top / 100% 1px no-repeat;
}
.skill-num {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: 15px; line-height: 28px; color: var(--color-accent); font-feature-settings: 'tnum' 1; margin: 0;
}
.skill h2 { font-size: 24px; line-height: 28px; letter-spacing: -0.01em; margin: 0; }
.skill-body {
  grid-column: 2; font-size: 15.5px; line-height: 28px; margin: 0;
  color: color-mix(in srgb, var(--color-text) 78%, transparent); max-width: 52ch;
}

/* — feature sections — */
.feature { padding: 28px 0 84px; }
.feature h2 { font-size: 32px; line-height: 42px; letter-spacing: -0.012em; margin: 0; max-width: 24ch; }
.feature-grid { display: grid; gap: 42px clamp(24px, 5vw, 96px); align-items: center; margin-top: 42px; }
.feature-grid.text-first { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); }
.feature-grid.media-first { grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); }
.feature-text { display: flex; flex-direction: column; gap: 42px; }
.feature h3 { font-size: 19px; line-height: 28px; letter-spacing: -0.01em; margin: 0; }
.feature-body {
  font-size: 15.5px; line-height: 28px; margin: 14px 0 0;
  color: color-mix(in srgb, var(--color-text) 78%, transparent); max-width: 52ch;
}
.feature-body.is-wide { max-width: none; }
.feature-shot img { width: 100%; height: auto; border-radius: 8px; }

/* — outreach (TurboLab.it) — */
.outreach-stack { display: flex; flex-direction: column; gap: 42px; margin-top: 42px; }
.outreach-logo { align-self: center; }
.outreach-logo a { display: block; }
.outreach-logo img { width: 420px; max-width: 100%; height: 120px; object-fit: contain; border-radius: 8px; }
.outreach-video {
  align-self: center; width: 100%; max-width: 720px; aspect-ratio: 16 / 9;
  border-radius: var(--radius-md); overflow: hidden; box-shadow: var(--shadow-md);
}
.outreach-video iframe { width: 100%; height: 100%; border: 0; display: block; }

/* — about — */
.about {
  display: grid; grid-template-columns: minmax(0, 7fr) minmax(220px, 4fr);
  gap: 28px clamp(24px, 5vw, 96px); align-items: center; padding: 56px 0 84px;
}
.about-text { max-width: 66ch; }
.about h2 { font-size: 32px; line-height: 42px; letter-spacing: -0.012em; margin: 0; }
.about-body {
  font-size: 15.5px; line-height: 28px; margin: 28px 0 0;
  color: color-mix(in srgb, var(--color-text) 78%, transparent); max-width: 48ch;
}
.about-photo img { width: 100%; max-width: 380px; height: auto; border-radius: var(--radius-md); }

/* — timeline — */
.timeline { padding: 28px 0 84px; }
.timeline .kicker { margin-bottom: 28px; }
.timeline-step {
  display: grid; grid-template-columns: minmax(140px, 200px) minmax(0, 1fr);
  gap: 14px clamp(24px, 4vw, 72px); align-items: baseline; padding: 28px 0;
  background: linear-gradient(to right, transparent, var(--color-neutral-800) 48px calc(100% - 48px), transparent) top / 100% 1px no-repeat;
}
.timeline-period {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: 15px; line-height: 28px; color: var(--color-accent); font-feature-settings: 'tnum' 1; margin: 0;
}
.timeline-step h3 { font-size: 19px; line-height: 28px; letter-spacing: -0.01em; margin: 0; }
.timeline-body {
  font-size: 15px; line-height: 28px; margin: 7px 0 0;
  color: color-mix(in srgb, var(--color-text) 70%, transparent); max-width: 66ch;
}

/* — contact — */
.contact { padding: 70px 0 56px; }
.contact-grid {
  display: grid; grid-template-columns: minmax(0, 520px) minmax(220px, 380px);
  gap: 42px clamp(24px, 5vw, 96px); align-items: start;
}
.contact h3 { font-size: 24px; line-height: 28px; margin: 0; }
.contact-intro {
  font-size: 15.5px; line-height: 28px; margin: 21px 0 0;
  color: color-mix(in srgb, var(--color-text) 78%, transparent); max-width: 58ch;
}
.contact-form .required { color: var(--color-accent); }
.contact-form { display: flex; flex-direction: column; gap: var(--space-4); margin-top: 42px; }
.contact-form textarea.input { resize: vertical; min-height: 120px; }
.contact-form .btn { align-self: flex-start; }
.contact-form { --color-error: oklch(0.72 0.19 25); }
.contact-warning { font-size: 14px; line-height: 24px; color: var(--color-error); margin: 0; }
.contact-warning a { color: var(--color-error); }
/* validation: native constraints (required, type=email) checked by the browser,
   messages rendered inline by site.js instead of the browser bubble */
.contact-form .input:user-invalid,
.contact-form .input[aria-invalid="true"] { border-color: var(--color-error); }
.contact-form .input[aria-invalid="true"]:focus-visible { border-color: var(--color-error); outline-color: var(--color-error); }
.contact-success { font-size: 17px; line-height: 28px; margin: 42px 0 0; color: var(--color-accent-100); }
.contact-legal { font-size: 12px; line-height: 18px; margin: 0; color: color-mix(in srgb, var(--color-text) 55%, transparent); }
.contact-legal a { color: inherit; }
/* Google allows hiding the reCAPTCHA badge only with the .contact-legal notice in place */
.grecaptcha-badge { visibility: hidden; }
.field-error { font-size: 12px; line-height: 18px; margin: 5px 0 0; color: var(--color-error); }
.contact-photo { align-self: center; overflow: hidden; border-radius: var(--radius-md); }
.contact-photo img { width: 309px; max-width: 100%; height: auto; }

/* — footer — */
.footer { padding: 56px 0; font-size: 13px; line-height: 28px; color: color-mix(in srgb, var(--color-text) 55%, transparent); }

/* — small screens — not in the design source, which was drawn at desktop
   width: the two-column layouts stack and the header scrolls sideways. */
@media (max-width: 720px) {
  .site-nav { overflow-x: auto; }
  .hero, .about, .contact-grid, .timeline-step,
  .feature-grid.text-first, .feature-grid.media-first { grid-template-columns: minmax(0, 1fr); }
}
