/* /what-is-my-ip only (07 §4). Shared section patterns: components/sections.css. Tokens only (rule 12). */

/* ---------- Hero: intro left, IP card right; phones show intro → card → proof points ---------- */
.ip-hero {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--space-5);
  grid-template-areas: "intro" "card" "proof"; padding-block: var(--space-5) var(--space-7);
}
.ip-hero__intro { grid-area: intro; display: grid; gap: var(--space-3); justify-items: start; }
.ip-hero__card { grid-area: card; min-width: 0; }
.ip-hero__proof { grid-area: proof; font-size: var(--text-small); }
.ip-hero__title { font-size: var(--text-display); line-height: 1.05; font-weight: 700; letter-spacing: -0.02em; }
.ip-hero__lead { max-width: 52ch; color: var(--color-text-muted); line-height: 1.55; }
@media (min-width: 1024px) {
  .ip-hero {
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); column-gap: var(--space-8); row-gap: var(--space-5);
    grid-template-areas: "intro card" "proof card"; align-items: center; padding-top: var(--space-7);
  }
  .ip-hero__intro { align-self: end; gap: var(--space-4); }
  .ip-hero__proof { align-self: start; font-size: var(--text-body); }
}

/* ---------- IP card ---------- */
.ip-card {
  display: grid; gap: var(--space-5); padding: var(--space-6) var(--space-5);
  background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-xl);
  box-shadow: var(--shadow-2);
}
.ip-card__label {
  font-size: var(--text-tiny); font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--color-text-muted);
}
/* Phones: address above the Copy button, one line reserved (an IPv6 at its smaller size fits in it on two lines).
   From 576 px: address and button side by side, two lines reserved. Filling it in never moves the card. */
.ip-card__main { display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-3); }
.ip-card__ip {
  display: block; min-width: 0; min-height: calc(var(--text-ip) * 1.3); font-size: var(--text-ip); font-weight: 700;
  line-height: 1.1; font-variant-numeric: tabular-nums; letter-spacing: -0.01em; overflow-wrap: anywhere;
}
@media (min-width: 576px) {
  .ip-card__main { flex-direction: row; align-items: center; gap: var(--space-4); min-height: calc(var(--text-ip) * 2.3); }
  .ip-card__ip { flex: 1 1 auto; min-height: 0; }
}
.ip-card__ip--v6 { font-size: var(--text-ip-v6); font-family: var(--font-mono); letter-spacing: 0; }
.ip-card[data-state="loading"] .ip-card__ip { color: var(--color-text-muted); font-weight: 600; font-size: var(--text-h2); }
.ip-card__copy { flex: none; min-height: var(--tap-min); }
.ip-card__copy.is-copied { border-color: var(--color-good); color: var(--color-good); }

/* Label / value rows: long provider and place names get the full width instead of a narrow tile. */
.ip-facts { display: grid; margin: 0; border-top: 1px solid var(--color-border); }
.ip-fact { display: grid; gap: var(--space-1); padding-block: var(--space-3); border-bottom: 1px solid var(--color-border); }
@media (min-width: 576px) {
  .ip-fact { grid-template-columns: 10rem minmax(0, 1fr); gap: var(--space-4); align-items: baseline; }
}
.ip-fact dt {
  display: flex; align-items: center; gap: var(--space-2);
  font-size: var(--text-tiny); font-weight: 600; text-transform: uppercase; letter-spacing: .04em; color: var(--color-text-muted);
}
.ip-fact__icon { flex: none; width: var(--icon-sm); height: var(--icon-sm); color: var(--color-primary); }
.ip-fact dd { margin: 0; font-weight: 600; overflow-wrap: anywhere; }

.ip-card__foot { display: grid; gap: var(--space-3); justify-items: start; padding-top: var(--space-4); border-top: 1px solid var(--color-border); }

/* ---------- Public vs private: four cards ---------- */
.ip-types { display: grid; gap: var(--space-4); grid-template-columns: minmax(0, 1fr); }
@media (min-width: 576px) { .ip-types { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1024px) { .ip-types { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.ip-type {
  display: grid; gap: var(--space-2); align-content: start; padding: var(--space-5);
  background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg);
}
.ip-type__name { font-size: var(--text-h3); }
.ip-type p { color: var(--color-text-muted); font-size: var(--text-small); }
.ip-type .ip-type__example { margin-top: auto; padding-top: var(--space-2); color: var(--color-text); font-weight: 600; }
.ip-type code { font-family: var(--font-mono); font-size: var(--text-small); }

/* ---------- In depth: topic cards ---------- */
.ip-topics { display: grid; gap: var(--space-4); grid-template-columns: minmax(0, 1fr); }
@media (min-width: 768px) { .ip-topics { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.ip-topic { padding: var(--space-5); background: var(--color-surface); border: 1px solid var(--color-border); border-radius: var(--radius-lg); }
.ip-topic h3 { font-size: var(--text-h3); margin-bottom: var(--space-2); }
.ip-topic p { color: var(--color-text-muted); font-size: var(--text-small); line-height: 1.6; }
.ip-related { margin-top: var(--space-6); }
.ip-related h3 { font-size: var(--text-h3); }
