/* Site-specific additions on top of bundle.css (kept in the kit's ip- vocabulary). */
html { scroll-behavior: smooth; scroll-padding-top: var(--space-6); }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } * { transition: none !important; } }

.ip-skip { position: absolute; left: var(--space-4); top: -100px; z-index: 10; }
.ip-skip:focus { top: var(--space-4); }

.ip-mission { max-width: 900px; }
.ip-lead--spaced { margin-bottom: var(--space-12); }
.ip-hero--inner { padding-bottom: var(--space-12); }
.ip-page-body { padding-bottom: var(--space-24); }
.ip-panel--form { max-width: 800px; }
.ip-footer__blurb { margin: var(--space-3) 0 0; max-width: 320px; }
.ip-footer__links a[aria-current="page"] { color: var(--ink); }

/* contact form states */
.ip-hp { position: absolute; left: -10000px; width: 1px; height: 1px; overflow: hidden; }
.ip-form [hidden] { display: none; }
.ip-notice--error { background: transparent; border-color: var(--danger); }
.ip-notice--error strong { color: var(--danger); }
.ip-check a { color: var(--gold-ink); }
.ip-btn[aria-busy="true"] { opacity: .7; cursor: progress; }

/* legal pages */
.ip-legal ul { color: var(--ink-muted); max-width: var(--measure); padding-left: var(--space-6); }
.ip-legal a { color: var(--gold-ink); }

@media (max-width: 720px) {
  .ip-page-body { padding-bottom: var(--space-16); }
  .ip-logo__mark { width: 44px; }
  .ip-logo { gap: 10px; }
  .ip-logo__name { font-size: 14px; }
  .ip-logo__sub { font-size: 7px; }
  .ip-logo__sub::before, .ip-logo__sub::after { width: 16px; }
}
@media (max-width: 420px) {
  .ip-header .ip-btn--sm { padding: 0 var(--space-4); }
  .ip-display-xl { font-size: 42px; line-height: 46px; }
}

/* header CTA: short label on phones */
.ip-header__cta { white-space: nowrap; }
.ip-cta-short { display: none; }
@media (max-width: 520px) {
  .ip-cta-long { display: none; }
  .ip-cta-short { display: inline; }
}

/* legal pages: align with the hero's left edge instead of centring the narrow column */
.ip-container.ip-legal { max-width: var(--container); }
.ip-legal > dl { max-width: 760px; }
.ip-legal > p.ip-small { margin: 0 0 var(--space-6); }
.ip-legal > h2.ip-h2:first-of-type { margin-top: 0; }

/* imprint inside the footer */
.ip-footer__imprint { margin-top: var(--space-12); padding-top: var(--space-8); border-top: 1px solid var(--line); }
.ip-footer__imprint .ip-eyebrow { margin-bottom: var(--space-6); }
.ip-imprint { display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--space-8); margin: 0; }
.ip-imprint dt { font-size: 13px; line-height: 20px; font-weight: 600; color: var(--ink); margin-bottom: var(--space-1); }
.ip-imprint dd { margin: 0; font-size: 13px; line-height: 20px; color: var(--ink-muted); }
.ip-imprint a { color: var(--ink-muted); }
.ip-imprint a:hover { color: var(--gold-ink); }
.ip-imprint__note { margin: var(--space-8) 0 0; max-width: 820px; }
.ip-footer__imprint:target { scroll-margin-top: var(--space-6); }
@media (max-width: 720px) { .ip-imprint { grid-template-columns: 1fr; gap: var(--space-6); } }

/* service cards without numbers: title starts at the top */
.ip-service > .ip-service__title:first-child { margin-top: 0; }

/* space background (Three.js, home page): fixed layers that never catch clicks —
   --bg sits behind the content (stars, globe, orbit), --fx in front (rocket in flight, explosion) */
.ip-space { position: fixed; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.ip-space--bg { z-index: 0; opacity: 0; transition: opacity 1.2s ease; }
.ip-space--bg.is-ready { opacity: 1; }
.ip-space--fx { z-index: 30; }
.ip-header, main, .ip-footer { position: relative; z-index: 1; }
@media (max-width: 720px) { .ip-space--bg.is-ready { opacity: .45; } }

/* a button hit by the rocket: short kick plus an expanding gold outline */
.ip-btn:not(.ip-skip) { position: relative; }
.ip-btn::before { content: ""; position: absolute; inset: -1px; border: 1px solid var(--gold); border-radius: inherit; opacity: 0; pointer-events: none; }
.ip-btn.is-hit { animation: ip-hit .6s cubic-bezier(.2, .8, .2, 1); }
.ip-btn.is-hit::before { animation: ip-hit-ring .7s ease-out; }
@keyframes ip-hit { 0% { transform: scale(1); } 25% { transform: scale(1.07); } 60% { transform: scale(.98); } 100% { transform: scale(1); } }
@keyframes ip-hit-ring { 0% { opacity: .9; transform: scale(1); } 100% { opacity: 0; transform: scale(1.35, 1.9); } }
