/* GENERATED by build.py from styles/tokens.css and styles/pages.css. Do not edit. */
/* onKlockIO — tokens and type scale.
   SINGLE SOURCE OF TRUTH. Read-only for section work: consume these, never
   redefine a colour or a size locally. build.py writes it into public/site.css
   (the home page) and public/pages.css (privacy, support, android). */


:root {
  /* One ground for the whole site: black, in both themes. There is no light
     mode any more, so nothing below needs a second palette. */
  color-scheme: dark;      /* UA surfaces follow the page */
  --paper:      #000000;
  --paper-2:    #0e1214;   /* raised surface — cards, table headers */
  --ink:        #ffffff;
  --muted:      #9aa0aa;   /* 8.0:1 on black */
  --mid:        #787b83;   /* 5.0:1 — rules and large text */
  --rule:       #232829;
  --blue:       #0394c8;
  --blue-lt:    #35b3e0;
  --blue-ink:   #3ab5e4;   /* links and accents on black — 8.9:1 */
  --hot:        #e16446;
  --hot-lt:     #f08265;
  --hot-ink:    #f08265;   /* 8.1:1 on black */
  /* Lightened from the raw brand pair. #0394c8 -> #e16446 crosses a grey-blue
     midpoint (#7c7c87, 4.88:1) that showed as a muddy band through the middle
     of a long gradient word like stopTimer. These two stops are the same hues
     lifted: 8.58:1 and 8.09:1 on black, midpoint #929aa2 at 6.97:1. */
  /* 100deg, not 135: on a short wide word the gradient box's diagonal is much
     longer than the text, so a 135deg ramp puts the text in the middle of it
     and the end stops never appear. Measured on "logjams" at 135deg the violet
     arrived as #7e96ed and the orange as #8e5e56 — neither end read. At 100deg
     the gradient line is 212px across a 206px word, so the text samples very
     nearly the whole ramp. The accent bars on privacy/support use the same
     token and are wide and short, where 100deg is if anything cleaner. */
  --grad:       linear-gradient(100deg, #35b3e0, #f08265);

  --pad:        clamp(1.25rem, 5vw, 6rem);
  --nav-h:      52px;
  --shadow:     0 24px 60px rgba(0, 0, 0, .6);
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
  margin: 0; background: var(--paper); color: var(--ink);
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", system-ui, sans-serif;
  font-size: clamp(17px, 1.15vw, 21px); line-height: 1.5;
  /* the glows deliberately spill past their tiles; clip (not hidden) keeps that
     off the horizontal scrollbar without making the body a scroll container,
     which would break the sticky sub-nav */
  overflow-x: clip;
}
img { max-width: 100%; height: auto; display: block; }
a { color: var(--blue-ink); text-underline-offset: .2em; }
:focus-visible { outline: 2px solid var(--blue-ink); outline-offset: 4px; border-radius: 4px; }
h1, h2, h3 { font-weight: 650; letter-spacing: -.02em; line-height: 1.05; margin: 0; text-wrap: balance; }
h2 { font-size: clamp(2.1rem, 5.2vw, 4.2rem); }
h3 { font-size: clamp(1.3rem, 2.1vw, 1.8rem); letter-spacing: -.015em; }
p { margin: 0; max-width: 60ch; }
.lede { font-size: clamp(1.1rem, 1.7vw, 1.4rem); color: var(--muted); max-width: 44ch; }
section { padding: clamp(5rem, 14vh, 10rem) var(--pad); }
.wrap { max-width: 1180px; margin: 0 auto; }
.skip { position: absolute; left: -9999px; background: var(--paper); color: var(--ink); padding: 1rem; z-index: 40; }
.skip:focus { left: 1rem; top: 1rem; }
section[id], main [id] { scroll-margin-top: calc(var(--nav-h) + 16px); }

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0; background: var(--paper); color: var(--ink);
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Segoe UI", system-ui, sans-serif;
  font-size: 17px; line-height: 1.55;
}
main { max-width: 40rem; margin: 0 auto; padding: clamp(3rem, 10vh, 6rem) clamp(1.25rem, 5vw, 2rem) 4rem; }
a { color: var(--blue-ink); text-underline-offset: .2em; }
:focus-visible { outline: 2px solid var(--blue-ink); outline-offset: 4px; border-radius: 4px; }
.home { display: inline-block; font-weight: 600; letter-spacing: -.02em; text-decoration: none; color: var(--ink); font-size: 1.15rem; margin-bottom: clamp(2.5rem, 8vh, 4rem); }
.home .dot { color: var(--mid); }
.home::before { content: "←"; color: var(--mid); margin-right: .5rem; font-weight: 400; }
h1 { font-size: clamp(2.25rem, 6vw, 3.25rem); font-weight: 650; letter-spacing: -.025em; line-height: 1.05; margin: 0 0 .5rem; }
h2 { font-size: 1.2rem; font-weight: 600; letter-spacing: -.015em; margin: 3rem 0 .75rem; }
p, li { max-width: 62ch; }
p { margin: 0 0 1.1rem; }
ul { padding-left: 1.15rem; margin: 0 0 1.1rem; }
li { margin: .3rem 0; }
.sub { color: var(--muted); margin-bottom: 2.5rem; }
.lede { font-size: 1.25rem; line-height: 1.4; letter-spacing: -.01em; border-left: 3px solid transparent;
        border-image: var(--grad) 1; padding-left: 1.15rem; margin-bottom: 2.5rem; }
code { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: .92em; }
dl { margin: 0; }
dt { font-weight: 600; letter-spacing: -.01em; margin-top: 1.75rem; }
dd { margin: .35rem 0 0; color: var(--muted); max-width: 62ch; }
hr { border: 0; border-top: 1px solid var(--rule); margin: 3.5rem 0 1.5rem; }
footer { color: var(--mid); font-size: .85rem; max-width: 60ch; }
footer a { color: var(--muted); }

/* ---------- the waitlist form (android.html) ---------- */
form { margin: 2rem 0 1rem; display: grid; gap: .6rem; max-width: 26rem; }
label { font-weight: 600; }
/* --mid, not --rule, on the field edge: 5.0:1, over the 3:1 a control boundary needs */
input[type="email"] { font: inherit; padding: .7rem .85rem; border-radius: 12px; border: 1px solid var(--mid); background: var(--paper-2); color: var(--ink); }
button { font: inherit; font-weight: 600; padding: .75rem 1.25rem; border: 0; border-radius: 999px; background: var(--ink); color: var(--paper); cursor: pointer; justify-self: start; }
button:disabled { opacity: .6; cursor: progress; }
/* the honeypot: off-screen rather than display:none, which some bots skip */
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.status { min-height: 1.55em; margin: 0; }
.status.ok  { color: #7ee2a8; }          /* 13.0:1 on black */
.status.err { color: var(--hot-ink); }   /* 8.1:1 on black */
