/* ============================================================
   Slingshot — holding page + 404
   Self-contained. The landing page's styles.css is archived, so
   nothing here depends on it. Kept in its own file (not inline)
   so the Content-Security-Policy can forbid inline styles.
   ============================================================ */

:root{
  --ink:#0B2B2E;
  --paper:#F3F8F7;
  --teal:#14C8B4;
  --paper-80:rgba(243,248,247,.80);
  --paper-60:rgba(243,248,247,.60);
  --paper-15:rgba(243,248,247,.15);

  --h-font:"Manrope",system-ui,-apple-system,"Segoe UI",sans-serif;
}

*{box-sizing:border-box;margin:0;padding:0}

html{-webkit-text-size-adjust:100%}

body{
  /* Flat ink, deliberately. Any gradient here bands on 8-bit displays and
     any shape behind the copy reads as a box. The field supplies the depth. */
  background:var(--ink);
  color:var(--paper);
  font-family:var(--h-font);
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
  /* svh keeps the block truly centred on mobile, where the browser
     chrome makes vh overshoot. vh above is the fallback. */
  min-height:100svh;
  display:flex;
  align-items:center;
  justify-content:center;
  padding:24px 0 calc(24px + env(safe-area-inset-bottom));
}

/* ---------- The field ---------- */
/* Full-viewport canvas behind everything. pointer-events:none so it never
   intercepts a click or a text selection; the component listens on window. */
.field{position:fixed;inset:0;z-index:0;pointer-events:none}
.field canvas{display:block;width:100%;height:100%}

.wordmark{
  font-weight:800;font-size:32px;line-height:1;
  letter-spacing:-.03em;text-transform:lowercase;
  -webkit-text-stroke:.6px currentColor;
  color:var(--paper);
  -webkit-user-select:none;user-select:none;
}
.wordmark__dot{color:var(--teal)}

.hold{
  position:relative;z-index:1;
  max-width:44em;text-align:center;
  padding:48px clamp(24px,5vw,56px);
  /* No background, on purpose. Readability comes from the component: every
     particle fades on a wide feathered ellipse around this box, so there is
     no painted edge for the eye to find. */
}
.hold .wordmark{display:inline-block}
.wordmark__dot{display:inline-block}

/* ---------- Entrance ---------- */
/* hero-init.js puts `has-field` on <html> before first paint (copy hidden),
   `is-ready` once the field has drawn in (copy staggers up), and
   `is-pulsing` on the dot as the last line lands. Without JS none of the
   classes exist and the copy simply shows. */
.has-field .hold > *{opacity:0;transform:translateY(10px)}
.has-field.is-ready .hold > *{
  opacity:1;transform:none;
  transition:opacity .8s cubic-bezier(.2,.7,.2,1),transform .8s cubic-bezier(.2,.7,.2,1);
}
.has-field.is-ready .hold > :nth-child(2){transition-delay:.09s}
.has-field.is-ready .hold > :nth-child(3){transition-delay:.18s}
.has-field.is-ready .hold > :nth-child(4){transition-delay:.27s}
.has-field.is-ready .hold > :nth-child(5){transition-delay:.36s}

.wordmark__dot.is-pulsing{animation:dot-pulse .75s cubic-bezier(.2,.7,.2,1) 1 both}
@keyframes dot-pulse{
  0%{transform:scale(1);text-shadow:0 0 0 rgba(20,200,180,0)}
  35%{transform:scale(1.5);text-shadow:0 0 16px rgba(20,200,180,.8)}
  100%{transform:scale(1);text-shadow:0 0 0 rgba(20,200,180,0)}
}

@media (prefers-reduced-motion:reduce){
  .has-field .hold > *{opacity:1;transform:none;transition:none}
  .wordmark__dot.is-pulsing{animation:none}
}

.hold__tag{
  margin-top:8px;font-weight:600;font-size:10px;line-height:1.2;
  letter-spacing:.16em;text-transform:uppercase;color:var(--paper-60);
}

/* The hairline is the only ornament on the page — it separates the
   lockup from the message without needing a second colour. */
.hold__rule{
  width:56px;height:1px;border:0;
  background:var(--paper-15);
  margin:32px auto;
}

.hold h1{
  font-weight:800;
  font-size:clamp(26px,6vw,38px);
  line-height:1.15;
  letter-spacing:-.02em;
}

.hold p{
  margin-top:14px;
  font-weight:500;
  font-size:clamp(15px,3.4vw,17px);
  line-height:1.55;
  color:var(--paper-80);
}

/* ---------- 404 ---------- */
.nf{max-width:34em;text-align:center}
.nf .wordmark{display:inline-block;margin-bottom:32px}
.nf h1{font-weight:800;font-size:clamp(28px,6.5vw,40px);line-height:1.15;letter-spacing:-.02em}
.nf p{margin-top:14px;font-weight:500;font-size:17px;line-height:1.55;color:var(--paper-80)}
