/* RepoBar — repobar.greatpixels.com
   The page is a commit graph: five colored rails, one per repository, run the whole
   scroll and every section sits on a node. Commit Mono is the notation voice, the
   system face carries prose. CSP forbids inline styles: everything here is a class. */

/* ── faces ─────────────────────────────────────────────────────────────── */
@font-face {
  font-family: "Commit Mono";
  src: url("/assets/fonts/commit-mono-400.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "Commit Mono";
  src: url("/assets/fonts/commit-mono-700.woff2") format("woff2");
  font-weight: 700; font-style: normal; font-display: swap;
}

/* ── tokens ────────────────────────────────────────────────────────────── */
:root {
  color-scheme: light dark;

  --paper:      #FAFAFA;
  --paper-2:    #F1F1F3;
  --surface:    #FFFFFF;
  --ink:        #0E0E12;
  --on-ink:     #ECECF0;
  --on-ink-2:   #C3C3CC;
  --on-ink-3:   #ABABB7;

  --text:    #15151A;
  --text-2:  #55555E;
  --text-3:  #6B6B7A;

  --hairline:        rgba(0,0,0,.11);
  --hairline-strong: rgba(0,0,0,.20);

  --accent:        #3B4CC7;
  --accent-hover:  #2F3EA8;
  --accent-quiet:  #EDEFFC;
  --accent-ring:   rgba(59,76,199,.30);
  --on-accent:     #FFFFFF;

  --bar-h: 30px;
  --toolbar-h: 64px;
  --r1: #FF383C;  --r2: #0088FF;  --r3: #34C759;  --r4: #FF8D28;  --r5: #CB30E0;

  --mb-bg:      #F5F5F6;
  --mb-fg:      rgba(0,0,0,.86);
  --mb-bg-dark: #232326;
  --mb-fg-dark: rgba(255,255,255,.92);

  --font-mono: "Commit Mono", ui-monospace, SFMono-Regular, Menlo, monospace;
  --font-ui: -apple-system, BlinkMacSystemFont, "SF Pro Text", system-ui, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:20px; --s6:24px; --s8:32px;
  --s10:40px; --s12:48px; --s16:64px; --s20:80px; --s24:96px; --s32:128px;

  --radius:   8px;
  --radius-lg: 14px;

  --gutter: 34px;          /* rail column width */
  --cap-top: 76px;         /* aligns the rail heads with the loupe’s dots */
  --cap-size: 7px;
  --rail-gap: 6px;
  --rail-0: 6px;
  --page: 1120px;
  --pad: clamp(20px, 5vw, 40px);

  --shadow-frame:
    0 0 0 1px rgba(0,0,0,.06),
    0 1px 2px rgba(0,0,0,.05),
    0 8px 16px -6px rgba(0,0,0,.07),
    0 26px 44px -18px rgba(0,0,0,.14);
  --shadow-soft:
    0 0 0 1px rgba(0,0,0,.05),
    0 1px 2px rgba(0,0,0,.04),
    0 10px 22px -12px rgba(0,0,0,.10);
  --shadow-btn:
    inset 0 1px 0 rgba(255,255,255,.22),
    0 1px 2px rgba(15,20,60,.22),
    0 4px 10px -3px rgba(38,51,140,.28);
}

@media (prefers-color-scheme: dark) {
  :root {
    --paper:   #0C0C0F;
    --paper-2: #131317;
    --surface: #17171B;
    --ink:     #08080A;
    --on-ink:  #ECECF0;

    --text:   #F2F2F5;
    --text-2: #A8A8B2;
    --text-3: #82828C;

    --hairline:        rgba(255,255,255,.13);
    --hairline-strong: rgba(255,255,255,.24);

    --accent:       #8FA0FF;
    --accent-hover: #A9B6FF;
    --accent-quiet: rgba(143,160,255,.14);
    --accent-ring:  rgba(143,160,255,.34);
    --on-accent:    #10132E;

    --r1: #FF4A4D;  --r2: #1E96FF;  --r3: #3ED26A;  --r4: #FF9A3D;  --r5: #DA45EF;

    --mb-bg: #232326;  --mb-fg: rgba(255,255,255,.92);

    --shadow-frame:
      0 0 0 1px rgba(255,255,255,.07),
      0 1px 2px rgba(0,0,0,.4),
      0 8px 16px -6px rgba(0,0,0,.45),
      0 26px 44px -18px rgba(0,0,0,.6);
    --shadow-soft:
      0 0 0 1px rgba(255,255,255,.06),
      0 10px 22px -12px rgba(0,0,0,.5);
  }
}

@supports (color: color(display-p3 1 1 1)) {
  @media (color-gamut: p3) {
    :root {
      --r1: color(display-p3 .965 .247 .231);
      --r2: color(display-p3 .157 .518 .996);
      --r3: color(display-p3 .259 .765 .380);
      --r4: color(display-p3 .941 .565 .208);
      --r5: color(display-p3 .733 .239 .855);
    }
  }
}

/* ── base ──────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
html {
  background: var(--paper);
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: calc(var(--bar-h) + var(--toolbar-h) + 16px);
}
body {
  margin: 0;
  background: var(--paper);
  color: var(--text);
  font: 400 17px/1.62 var(--font-ui);
  text-rendering: optimizeLegibility;
  overflow-x: hidden;
}
h1, h2, h3, .mono, code, .btn, .mb-clock, .mb-count, .req, .foot-head, .styles-name, .glance-cap {
  font-family: var(--font-mono);
  font-variant-numeric: tabular-nums;
}
h1, h2, h3 { margin: 0; font-weight: 400; }
p { margin: 0; }
figure { margin: 0; }
a { color: inherit; }
img, svg { display: block; max-width: 100%; }
::selection { background: var(--accent-quiet); color: var(--text); }

.vh {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}
.skip {
  position: fixed; top: 10px; left: 10px; z-index: 60;
  padding: 10px 14px; border-radius: var(--radius);
  background: var(--accent); color: var(--on-accent);
  font: 400 14px/1 var(--font-mono); text-decoration: none;
  transform: translateY(-200%); transition: transform 140ms ease;
}
.skip:focus-visible { transform: none; }

:focus { outline: none; }
:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
  border-radius: 4px;
}

.col {
  width: min(100% - 2 * var(--pad), var(--page));
  margin-inline: auto;
  padding-left: var(--gutter);
}

/* ── menu bar (true app metrics: 24pt bar, 14pt glyph, 6pt dots, 3pt gaps) ─ */
.menubar {
  --mb: 1;
  --mb-bg: #F5F5F6; --mb-fg: rgba(0,0,0,.86);
  display: flex; align-items: center;
  gap: calc(10px * var(--mb));
  height: calc(24px * var(--mb));
  padding-inline: calc(10px * var(--mb));
  background: var(--mb-bg); color: var(--mb-fg);
  font-family: var(--font-ui);
  user-select: none;
}
.menubar--dark { --mb-bg: var(--mb-bg-dark); --mb-fg: var(--mb-fg-dark); }

/* the status item itself: glyph, then one dot per repository */
.mb-glyph { width: calc(14px * var(--mb)); height: calc(14px * var(--mb)); flex: none; }
.mb-dots { display: flex; align-items: center; gap: calc(3px * var(--mb)); }
.mb-dot {
  --dot: currentColor;
  position: relative; flex: none;
  width: calc(6px * var(--mb)); height: calc(6px * var(--mb));
  border-radius: 50%;
  background: var(--dot); opacity: .32;
}
.mb-dot.is-new { opacity: 1; }
.mb-dot.is-error {
  opacity: 1; background: none;
  box-shadow: inset 0 0 0 calc(1.2px * var(--mb)) var(--dot);
}
.mb-dot b, .dot b {
  position: absolute; inset: 0;
  display: grid; place-items: center;
  font: 700 calc(5.5px * var(--mb))/1 var(--font-ui); color: var(--dot);
}
.mb-dot--r1 { --dot: var(--r1); } .mb-dot--r2 { --dot: var(--r2); }
.mb-dot--r3 { --dot: var(--r3); } .mb-dot--r4 { --dot: var(--r4); }
.mb-dot--r5 { --dot: var(--r5); }

.mb-count {
  display: inline-grid; place-items: center; flex: none;
  min-width: calc(15px * var(--mb)); height: calc(15px * var(--mb));
  padding-inline: calc(4px * var(--mb));
  border-radius: 999px; background: var(--r1); color: #fff;
  font: 700 calc(10px * var(--mb))/1 var(--font-ui);
}
.mb-solo { position: relative; display: inline-grid; place-items: center; }
.mb-pip {
  position: absolute; top: calc(-1px * var(--mb)); right: calc(-2px * var(--mb));
  width: calc(5px * var(--mb)); height: calc(5px * var(--mb));
  border-radius: 50%; background: var(--r1);
  box-shadow: 0 0 0 calc(1.2px * var(--mb)) var(--mb-bg);
}

.mb-clock { font-size: calc(11px * var(--mb)); letter-spacing: -.01em; }

/* the same dot, at prose scale */
.dot {
  --mb: 1; --dot: currentColor;
  position: relative; display: inline-block; flex: none;
  width: calc(6px * var(--mb)); height: calc(6px * var(--mb));
  border-radius: 50%; background: var(--dot); opacity: .32;
}
.dot.is-new { opacity: 1; }
.dot.is-error { opacity: 1; background: none; box-shadow: inset 0 0 0 calc(1.2px * var(--mb)) var(--dot); }
.dot--r1 { --dot: var(--r1); } .dot--r2 { --dot: var(--r2); }
.dot--r3 { --dot: var(--r3); } .dot--r4 { --dot: var(--r4); }
.dot--r5 { --dot: var(--r5); }

/* ↓behind / ↑ahead capsules, as the panel draws them */
.cap {
  display: inline-flex; align-items: center;
  padding: 1px 5px; border-radius: 999px;
  font: 600 10.5px/1.5 var(--font-mono); letter-spacing: -.02em;
  background: color-mix(in srgb, var(--r2) 15%, transparent); color: var(--r2);
}
.cap--up { background: color-mix(in srgb, var(--r4) 18%, transparent); color: var(--cap-up-fg, #B45309); }
@media (prefers-color-scheme: dark) { :root { --cap-up-fg: var(--r4); } }
[data-appearance="dark"] .rb-pop { --cap-up-fg: var(--r4); }
[data-appearance="light"] .rb-pop { --cap-up-fg: #B45309; }
.cap[hidden] { display: none; }
/* ── the macOS menu bar, as the page header ─────────────────────────────── */
.macbar {
  --mb: 1;
  position: sticky; top: 0; z-index: 50;
  height: var(--bar-h);
  background: var(--bar-bg);
  backdrop-filter: saturate(180%) blur(20px);
  -webkit-backdrop-filter: saturate(180%) blur(20px);
  color: var(--bar-fg);
  box-shadow: inset 0 -1px 0 var(--bar-edge), var(--bar-cast);
  font-family: var(--font-ui);
  transition: background 220ms ease, color 220ms ease;
}
[data-appearance="dark"] {
  --bar-bg: rgba(28, 28, 30, .84); --bar-fg: rgba(255, 255, 255, .92);
  --bar-fg-2: rgba(255, 255, 255, .82); --bar-hit: rgba(255, 255, 255, .16);
  --bar-hit-on: rgba(255, 255, 255, .26); --bar-edge: rgba(255, 255, 255, .10);
  --bar-cast: 0 1px 4px rgba(0, 0, 0, .18);
  --bar-ring: #fff;
}
[data-appearance="light"] {
  --bar-bg: rgba(255, 255, 255, .92); --bar-fg: rgba(0, 0, 0, .88);
  --bar-fg-2: rgba(0, 0, 0, .74); --bar-hit: rgba(0, 0, 0, .07);
  --bar-hit-on: rgba(0, 0, 0, .13); --bar-edge: rgba(0, 0, 0, .17);
  --bar-cast: 0 1px 4px rgba(0, 0, 0, .07);
  --bar-ring: var(--accent);
}
[data-appearance="dark"] .mb-sun,
[data-appearance="light"] .mb-moon { display: none; }
.mb-item--appearance svg { width: 14px; height: 14px; }
.macbar-in {
  display: flex; align-items: center; gap: var(--s4);
  height: var(--bar-h); padding-inline: 12px;
}
.macbar-menus { display: flex; align-items: center; gap: 2px; min-width: 0; }
.macbar-app { display: grid; place-items: center; padding-inline: 6px; opacity: .95; }
.macbar-app .mb-glyph { width: 15px; height: 15px; }
.macbar-menus a {
  padding: 3px 8px; border-radius: 5px;
  font-size: 13px; line-height: 1; color: var(--bar-fg-2);
  text-decoration: none; white-space: nowrap;
  transition: background 120ms linear, color 120ms linear;
}
.macbar-menus a:first-of-type { font-weight: 600; color: var(--bar-fg); }
.macbar-menus a:hover { background: var(--bar-hit); color: var(--bar-fg); }
.macbar-menus a:focus-visible { outline-color: var(--bar-ring); outline-offset: 1px; }

.macbar-status { display: flex; align-items: center; gap: 12px; margin-left: auto; }
.macbar .mb-item {
  display: flex; align-items: center; gap: 4px;
  padding: 3px 7px; border: 0; border-radius: 5px;
  background: transparent; color: inherit; cursor: pointer;
  transition: background 120ms linear;
}
.macbar .mb-item:hover { background: var(--bar-hit); }
.macbar .mb-item[aria-expanded="true"] { background: var(--bar-hit-on); }
.macbar .mb-item:focus-visible { outline: 2px solid var(--bar-ring); outline-offset: 1px; }
.macbar .mb-glyph { width: 14px; height: 14px; }
.macbar .mb-sys { width: 15px; height: 15px; opacity: .85; }
.macbar .mb-sys--bat { width: 17px; height: 17px; }
.macbar .mb-clock { font-size: 12.5px; color: var(--bar-fg); font-variant-numeric: tabular-nums; }
.macbar .mb-dot.is-error { box-shadow: inset 0 0 0 1.2px var(--dot); }

/* without scripting the bar is still a true reading of the app, minus the demo */
.js-only { display: none; }
.js .js-only { display: inline; }
html:not(.js) .rb-pop { display: none; }
html:not(.js) #rb-trigger { pointer-events: none; }

/* ── the demo popover ──────────────────────────────────────────────────── */
/* with the panel open, the still of the same panel steps back */
.shot--panel { transition: opacity 220ms ease; }
.panel-open .shot--panel { opacity: .28; }

.rb-pop {
  position: absolute; top: calc(var(--bar-h) + 2px); left: var(--pop-left, auto); z-index: 60;
  width: 344px; max-width: calc(100vw - 16px);
  color: var(--rb-text);
  animation: pop-in 160ms cubic-bezier(.16, 1, .3, 1) both;
}
.rb-pop[hidden] { display: none; }
@keyframes pop-in { from { opacity: 0; transform: translateY(-6px) scale(.985); } to { opacity: 1; transform: none; } }
.rb-arrow {
  position: absolute; top: -7px; left: calc(var(--arrow-x, 172px) - 8px);
  width: 16px; height: 8px; overflow: hidden;
}
.rb-arrow::before {
  content: ""; position: absolute; left: 2px; top: 2px;
  width: 12px; height: 12px; border-radius: 2px;
  background: var(--rb-surface); transform: rotate(45deg);
  box-shadow: 0 0 0 .5px rgba(0,0,0,.10);
}
.rb-panel {
  background: var(--rb-surface);
  color: var(--rb-text);
  border-radius: 12px;
  font-family: var(--font-ui);
  box-shadow:
    0 0 0 .5px rgba(0,0,0,.14),
    0 2px 6px rgba(0,0,0,.10),
    0 16px 32px -12px rgba(0,0,0,.24),
    0 40px 72px -28px rgba(0,0,0,.30);
}
/* the panel carries its own appearance, because the bar above it is a dark
   macOS simulation sitting on a light page — and the demo lets you switch it */
[data-appearance="dark"] .rb-pop {
  --rb-surface: #2A2A2D; --rb-surface-2: #37373B; --rb-hair: rgba(255,255,255,.13);
  --rb-text: #F2F2F5; --rb-text-2: rgba(242,242,245,.74); --rb-text-3: rgba(242,242,245,.52);
  --rb-err: #FF8A85; --rb-up: var(--r4);
}
[data-appearance="light"] .rb-pop {
  --rb-surface: #FAFAFA; --rb-surface-2: #F0F0F2; --rb-hair: rgba(0,0,0,.10);
  --rb-text: #1C1C1E; --rb-text-2: rgba(28,28,30,.70); --rb-text-3: rgba(28,28,30,.50);
  --rb-err: #C62B30; --rb-up: #B45309;
}
[data-appearance="dark"] .rb-arrow::before { box-shadow: 0 0 0 .5px rgba(255,255,255,.24); }
.rb-head {
  border-radius: 12px 12px 0 0;
  display: flex; align-items: flex-start; gap: 8px;
  padding: 6px 10px 5px 12px; border-bottom: 1px solid var(--rb-hair);
}
.rb-head-text { min-width: 0; flex: 1; }
.rb-head-actions { display: flex; gap: 2px; margin-top: -1px; }
.rb-icon {
  display: grid; place-items: center;
  width: 22px; height: 22px; padding: 0;
  border: 0; border-radius: 5px; background: none;
  color: var(--rb-text-2); cursor: pointer;
  transition: background 120ms linear, color 120ms linear;
}
.rb-icon svg { width: 14px; height: 14px; }
.rb-icon:hover { background: rgba(128,128,140,.14); color: var(--rb-text); }
.rb-icon:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.rb-icon.is-spinning svg { animation: rb-spin 700ms cubic-bezier(.4,0,.2,1) 1; }
.rb-ico-spin, .rb-rowspin { display: none; }
.rb-panel.is-checking .rb-ico-arrow { display: none; }
.rb-panel.is-checking .rb-ico-spin,
.rb-panel.is-checking .rb-rowspin { display: block; }
.rb-ico-spin, .rb-rowspin { animation: rb-tick 900ms steps(12, end) infinite; }
.rb-rowspin { width: 13px; height: 13px; grid-row: 1 / 3; color: var(--rb-text-3); }
.rb-panel.is-checking .rb-chev { display: none; }
.rb-repo:nth-child(2) .rb-rowspin { animation-delay: 90ms; }
.rb-repo:nth-child(3) .rb-rowspin { animation-delay: 180ms; }
.rb-repo:nth-child(4) .rb-rowspin { animation-delay: 270ms; }
.rb-repo:nth-child(5) .rb-rowspin { animation-delay: 360ms; }
@keyframes rb-tick { to { transform: rotate(360deg); } }

.rb-foot-r { display: flex; align-items: center; gap: 10px; }
.rb-pause {
  display: grid; place-items: center;
  width: 20px; height: 20px; padding: 0;
  border: 0; border-radius: 50%; background: none;
  color: var(--rb-text-2); cursor: pointer;
}
.rb-pause svg { width: 16px; height: 16px; }
.rb-pause .rb-pause-play { display: none; }
.rb-pause:hover { color: var(--rb-text); }
.rb-pause:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.rb-pop.is-paused .rb-pause .rb-pause-bars { display: none; }
.rb-pop.is-paused .rb-pause .rb-pause-play { display: block; }
.rb-pop.is-paused .rb-rows { opacity: .55; }
.rb-quit { color: var(--rb-text-2); }
.macbar.is-paused .mb-dots { opacity: .45; }


@keyframes rb-spin { to { transform: rotate(360deg); } }
.rb-status { font-size: 12px; line-height: 1.35; font-weight: 500; letter-spacing: -.01em; }
.rb-updated { font-size: 11px; line-height: 1.3; color: var(--rb-text-3); margin-top: 0; }

.rb-rows { list-style: none; margin: 0; padding: 3px 0; }
.rb-repo + .rb-repo { border-top: 1px solid transparent; }
.rb-row {
  display: grid; grid-template-columns: 14px 1fr auto 12px;
  align-items: center; gap: 8px;
  width: 100%; padding: 3px 12px; border: 0; background: none;
  text-align: left; cursor: pointer; color: inherit;
}
.rb-row:hover { background: rgba(128,128,140,.10); }
.rb-row:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.rb-row .dot { --mb: 1.5; }
.rb-name {
  grid-column: 2; display: flex; align-items: center; gap: 5px;
  font-size: 13px; line-height: 1.2; font-weight: 500; letter-spacing: -.01em;
}
.rb-branch {
  grid-column: 2; grid-row: 2;
  font: 400 11px/1.1 var(--font-mono); color: var(--rb-text-3);
}
.rb-row { grid-template-rows: auto auto; }
.rb-row .dot, .rb-caps, .rb-chev { grid-row: 1 / 3; }
.rb-err { font-style: normal; color: var(--rb-err); }
.rb-dirty { width: 6px; height: 6px; border-radius: 50%; background: var(--r4); }
.rb-caps { display: flex; gap: 4px; }
.cap {
  font: 500 11px/1 var(--font-mono); font-variant-numeric: tabular-nums;
  padding: 3px 6px; border-radius: 999px;
}
.cap--down { color: var(--r2); background: color-mix(in srgb, var(--r2) 14%, transparent); }
.cap--up { color: var(--r4); background: color-mix(in srgb, var(--r4) 16%, transparent); }
.rb-chev { width: 13px; height: 13px; color: var(--rb-text-3); transition: transform 180ms cubic-bezier(.32,.72,0,1); }
.rb-repo.is-open .rb-chev { transform: rotate(90deg); }

.rb-body { display: none; padding: 0 12px 9px; }
.rb-repo.is-open .rb-body { display: block; }
.rb-commits { list-style: none; margin: 0 0 8px; padding: 0; display: grid; gap: 4px; }
.rb-commits li { display: grid; grid-template-columns: 58px 1fr; gap: 0 8px; align-items: baseline; }
.rb-sha { font: 400 11px/1.45 var(--font-mono); color: var(--r2); }
.rb-subject { font-size: 12px; font-weight: 500; line-height: 1.25; }
.rb-meta { grid-column: 2; font-size: 11px; line-height: 1.4; color: var(--rb-text-3); }
.rb-repo.is-seen .rb-subject { font-weight: 400; color: var(--rb-text-2); }
.rb-repo.is-seen .rb-sha { color: var(--rb-text-3); }
.rb-explain { font-size: 11.5px; color: var(--rb-text-2); padding-bottom: 2px; }

.rb-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 5px 6px; }
.rb-btn {
  display: inline-flex; align-items: center;
  font: 500 11.5px/1 var(--font-ui);
  padding: 4px 9px; border-radius: 6px; cursor: pointer;
  background: var(--rb-surface-2); color: inherit;
  border: .5px solid var(--rb-hair);
}
.rb-btn:hover:not(:disabled) { background: color-mix(in srgb, var(--rb-surface-2) 70%, var(--rb-text) 8%); }
.rb-btn:disabled { opacity: .45; cursor: default; }
.rb-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.rb-open { position: relative; margin-left: auto; }
.rb-btn--menu { padding-inline: 7px 5px; gap: 6px; }
.rb-open-ico { width: 13px; height: 13px; opacity: .8; }
.rb-open-div { width: 1px; align-self: stretch; margin-inline: 2px 0; background: var(--rb-hair); }
.rb-caret { width: 12px; height: 12px; margin-left: 5px; opacity: .7; }
.rb-dropdown {
  position: absolute; top: calc(100% + 5px); right: 0; z-index: 5;
  min-width: 196px; max-height: min(58vh, 360px); overflow-y: auto;
  padding: 5px 0;
  background: var(--rb-surface); border-radius: 8px;
  box-shadow: 0 0 0 .5px var(--rb-hair), 0 10px 24px -8px rgba(0,0,0,.35);
}
.rb-dropdown[hidden] { display: none; }
.rb-menu-head {
  padding: 5px 12px 2px;
  font: 500 11px/1.3 var(--font-ui); color: var(--rb-text-3);
}
.rb-menu-list { list-style: none; margin: 0 0 4px; padding: 0 0 4px; border-bottom: 1px solid var(--rb-hair); }
.rb-menu-list--last { margin-bottom: 0; padding-bottom: 0; border-bottom: 0; }
.rb-dropdown button {
  display: flex; align-items: center; gap: 6px;
  width: 100%; padding: 4px 12px 4px 8px;
  border: 0; background: none; text-align: left; cursor: pointer;
  font: 400 12.5px/1.4 var(--font-ui); color: inherit;
}
.rb-menu-check { width: 12px; height: 12px; flex: none; visibility: hidden; }
.rb-dropdown button.is-current .rb-menu-check { visibility: visible; }
.rb-dropdown button.is-current { font-weight: 500; }
.rb-dropdown button:hover { background: var(--accent); color: var(--on-accent); }
.rb-dropdown button:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.rb-note { font-size: 11px; color: var(--rb-text-3); }

.rb-plus { width: 13px; height: 13px; margin-right: 5px; vertical-align: -2px; color: var(--rb-text-3); }
.rb-foot-l { display: inline-flex; align-items: center; }
.rb-foot {
  border-radius: 0 0 12px 12px;
  display: flex; align-items: center; justify-content: space-between;
  padding: 5px 12px; border-top: 1px solid var(--rb-hair);
  font-size: 11.5px; color: var(--rb-text-3);
}

/* the bar keeps macOS proportions on a phone: app menu, status item, clock */
@media (max-width: 900px) {
  .macbar-menus a:not(:first-of-type) { display: none; }
  .macbar .mb-sys { display: none; }
  .macbar-in { padding-inline: 8px; }
  .macbar-status { gap: 8px; }
}
@media (max-width: 420px) {
  .rb-pop { width: calc(100vw - 12px); }
}

/* ── masthead (the app toolbar under the menu bar) ──────────────────────── */
.masthead {
  position: sticky; top: var(--bar-h); z-index: 40;
  display: flex; align-items: center; justify-content: space-between; gap: var(--s4);
  height: var(--toolbar-h); padding: 0 var(--s5);
  background: color-mix(in srgb, var(--paper) 88%, transparent);
  backdrop-filter: saturate(1.6) blur(14px);
  -webkit-backdrop-filter: saturate(1.6) blur(14px);
  border-bottom: 1px solid transparent;
  transition: border-color 180ms ease, background 180ms ease;
}
.masthead.is-stuck {
  border-bottom-color: var(--hairline);
  /* the dark band would otherwise bleed through and swallow the wordmark */
  background: color-mix(in srgb, var(--paper) 97%, transparent);
}
.wordmark {
  display: inline-flex; align-items: center; gap: 9px;
  color: var(--text); text-decoration: none;
  font: 700 15px/1 var(--font-mono); letter-spacing: -.02em;
}
.wordmark-mark { width: 19px; height: 19px; color: var(--accent); flex: none; }
.wordmark:hover .wordmark-mark { color: var(--accent-hover); }
/* ── buttons ───────────────────────────────────────────────────────────── */
.btn {
  display: inline-flex; align-items: center; justify-content: center;
  padding: 10px 16px; border-radius: var(--radius);
  background: var(--accent); color: var(--on-accent);
  font: 700 14px/1 var(--font-mono); letter-spacing: -.01em;
  text-decoration: none; border: 0; cursor: pointer;
  box-shadow: var(--shadow-btn);
  transition: background 140ms ease, transform 140ms ease, box-shadow 140ms ease;
}
.btn:hover { background: var(--accent-hover); transform: translateY(-1px); }
.btn:active { transform: translateY(0) scale(.99); }
.btn--lg { padding: 14px 22px; font-size: 16px; }
.btn--sm { padding: 8px 12px; font-size: 13px; }
.btn--ghost {
  background: transparent; color: var(--text);
  box-shadow: inset 0 0 0 1px var(--hairline-strong);
}
.btn--ghost:hover { background: var(--paper-2); color: var(--text); }

/* ── the graph ─────────────────────────────────────────────────────────── */
main { position: relative; }
.rails {
  position: absolute; inset: 0; z-index: 2;
  width: min(100% - 2 * var(--pad), var(--page));
  margin-inline: auto; left: 0; right: 0;
  pointer-events: none;
}
.rail {
  --rail-line: color-mix(in srgb, var(--rail) 34%, transparent);
  position: absolute; top: 0; bottom: 0; width: 2px;
  background: linear-gradient(to bottom,
    transparent calc(var(--cap-top) + 4px),
    var(--rail-line) calc(var(--cap-top) + 22px),
    var(--rail-line) calc(100% - 190px), transparent 100%);
}
.rail::before {
  content: ""; position: absolute; top: var(--cap-top);
  left: calc((2px - var(--cap-size)) / 2);
  width: var(--cap-size); height: var(--cap-size); border-radius: 50%;
  background: color-mix(in srgb, var(--rail) 34%, transparent);
}
.rail.is-new::before { background: var(--rail); }
.rail.is-error::before {
  background: var(--paper);
  box-shadow: inset 0 0 0 max(1.6px, calc(var(--cap-size) / 5)) var(--rail);
}
.rail--1 { left: var(--rail-0);                                  --rail: var(--r1); }
.rail--2 { left: calc(var(--rail-0) + 1 * var(--rail-gap));      --rail: var(--r2); }
.rail--3 { left: calc(var(--rail-0) + 2 * var(--rail-gap));      --rail: var(--r3); }
.rail--4 { left: calc(var(--rail-0) + 3 * var(--rail-gap));      --rail: var(--r4); }
.rail--5 { left: calc(var(--rail-0) + 4 * var(--rail-gap));      --rail: var(--r5); }

section { position: relative; }
section[data-node="1"] { --node-x: var(--rail-0);                             --node-c: var(--r1); }
section[data-node="2"] { --node-x: calc(var(--rail-0) + 1 * var(--rail-gap)); --node-c: var(--r2); }
section[data-node="3"] { --node-x: calc(var(--rail-0) + 2 * var(--rail-gap)); --node-c: var(--r3); }
section[data-node="4"] { --node-x: calc(var(--rail-0) + 3 * var(--rail-gap)); --node-c: var(--r4); }
section[data-node="5"] { --node-x: calc(var(--rail-0) + 4 * var(--rail-gap)); --node-c: var(--r5); }

section > .col h1,
section > .col > h2 { position: relative; }
section > .col h1::before,
section > .col > h2::before {
  content: ""; position: absolute;
  left: calc(-1 * (var(--gutter) - var(--node-x)) - 5px);
  top: .46em; width: 12px; height: 12px; border-radius: 50%;
  background: var(--paper);
  box-shadow: 0 0 0 2.5px var(--node-c);
  z-index: 3;
}
section > .col h1::after,
section > .col > h2::after {
  content: ""; position: absolute;
  left: calc(-1 * (var(--gutter) - var(--node-x)) + 8px);
  right: 100%; top: calc(.46em + 5px); height: 2px; z-index: 3;
  background: var(--node-c); opacity: .30;
}
.band--alt > .col > h2::before { background: var(--paper-2); }
.band--ink > .col > h2::before { background: var(--ink); }

/* ── hero ──────────────────────────────────────────────────────────────── */
.hero { padding-block: clamp(48px, 8vw, 88px) clamp(28px, 4vw, 56px); }
.point {
  display: flex; align-items: flex-start; gap: 10px;
  margin-bottom: var(--s8); max-width: 46ch;
  font-size: 14px; color: var(--text-2);
}
.point b { color: var(--text); font-weight: 600; font-family: var(--font-mono); }
.point-arrow {
  flex: none; width: 14px; height: 18px; margin-top: 1px;
  background: currentColor; color: var(--accent);
  -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 18'><path d='M7 17V3M2.5 7.5 7 3l4.5 4.5' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/contain no-repeat;
  mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 18'><path d='M7 17V3M2.5 7.5 7 3l4.5 4.5' fill='none' stroke='black' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>") center/contain no-repeat;
}
.linkish {
  border: 0; background: none; padding: 0; cursor: pointer;
  font: inherit; color: var(--accent);
  text-decoration: underline; text-underline-offset: .2em;
}
.linkish:hover { color: var(--accent-hover); }
.menubar--loupe {
  --mb: 3;
  --mb-bg: var(--bar-bg); --mb-fg: var(--bar-fg);
  width: max-content; max-width: 100%;
  padding-inline: calc(14px * var(--mb));
  border-radius: 10px;
  border: 0; cursor: pointer;
  box-shadow: 0 0 0 1px var(--bar-edge), var(--bar-cast);
  transition: box-shadow 160ms ease, background 220ms ease, color 220ms ease;
}
.menubar--loupe:hover { box-shadow: 0 0 0 1px var(--bar-fg-2); }
.menubar--loupe:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }
html:not(.js) .menubar--loupe { cursor: default; }
.glance { margin-bottom: var(--s8); }
.glance-cap {
  margin-top: var(--s3);
  font-size: 13px; color: var(--text-3); letter-spacing: -.01em;
}
.glance-cap b { color: var(--text); font-weight: 700; }

h1 {
  font-size: clamp(1.85rem, 1.1rem + 2.6vw, 2.8rem);
  line-height: 1.16; letter-spacing: -.022em;
  max-width: 21ch; text-wrap: balance;
}
.lead {
  margin-top: var(--s6);
  font-size: clamp(1.0625rem, 1rem + .35vw, 1.25rem);
  line-height: 1.5; color: var(--text-2);
  max-width: 54ch; text-wrap: pretty;
}
.cta { display: flex; flex-wrap: wrap; gap: var(--s3); margin-top: var(--s8); }
.req {
  display: flex; flex-wrap: wrap; gap: 6px 10px;
  margin: var(--s5) 0 0; padding: 0; list-style: none;
  font-size: 12.5px; color: var(--text-3); letter-spacing: -.01em;
}
.req li + li::before { content: "·"; margin-right: 10px; color: var(--hairline-strong); }
.req-note { margin-top: var(--s3); font-size: 14px; color: var(--text-2); max-width: 52ch; }
.req-note a { color: var(--text-2); text-decoration-color: var(--hairline-strong); text-underline-offset: .2em; }
.req-note a:hover { color: var(--text); }

.shot img { border-radius: 12px; box-shadow: var(--shadow-frame); }
.shot figcaption { margin-top: var(--s3); font-size: 12.5px; color: var(--text-3); font-family: var(--font-mono); }
.shot--panel { margin: var(--s12) 0 0; }
.shot--panel img { width: 352px; max-width: 100%; height: auto; box-shadow: none; filter: drop-shadow(0 1px 1px rgba(0,0,0,.06)) drop-shadow(0 12px 22px rgba(0,0,0,.10)) drop-shadow(0 36px 60px rgba(0,0,0,.14)); border-radius: 0; }

/* ── bands ─────────────────────────────────────────────────────────────── */
.band { padding-block: clamp(64px, 8vw, 112px); }
.band--alt { background: var(--paper-2); }
.band--ink { background: var(--ink); color: var(--on-ink); }
.band--ink .prose, .band--ink p { color: var(--on-ink-2); }
.band--ink h2 { color: var(--on-ink); }
.band--ink .mono { background: rgba(255,255,255,.07); color: var(--on-ink); }

h2 {
  font-size: clamp(1.4rem, 1.05rem + 1.35vw, 1.9rem);
  line-height: 1.24; letter-spacing: -.02em;
  max-width: 24ch; text-wrap: balance;
}
h3 {
  font-size: 1.0625rem; font-weight: 700; letter-spacing: -.015em;
  margin-top: var(--s12);
}
.prose {
  margin-top: var(--s5); max-width: 62ch;
  color: var(--text-2); text-wrap: pretty;
}
.prose.small { font-size: 15px; }
.prose b, .promises b, .steps b { color: var(--text); font-weight: 600; }
.band--ink .promises b { color: var(--on-ink); }

.mono {
  font-family: var(--font-mono); font-size: .9em;
  background: var(--paper-2); padding: 1px 5px; border-radius: 5px;
  border: 1px solid var(--hairline);
}
.band--alt .mono { background: var(--surface); }

/* ── dot states ────────────────────────────────────────────────────────── */
.states {
  display: grid; gap: var(--s6);
  margin: var(--s10) 0 0; padding: 0;
  grid-template-columns: 1fr;
}
.state { display: grid; gap: 4px; }
.states dt {
  display: flex; align-items: center; gap: 10px;
  font: 700 14px/1 var(--font-mono); letter-spacing: -.01em;
}
.states dd { margin: 0; color: var(--text-2); font-size: 15px; }
.states .dot { --mb: 2.2; }

/* ── style comparison ──────────────────────────────────────────────────── */
.styles { margin-top: var(--s8); display: grid; gap: var(--s5); max-width: 68ch; }
.styles-row { display: grid; gap: var(--s3); align-items: center; }
.styles-name { font: 700 13px/1 var(--font-mono); color: var(--text-3); letter-spacing: -.01em; }
.menubar--sample {
  --mb: 1.9;
  border-radius: 8px;
  box-shadow: inset 0 0 0 1px var(--hairline);
  justify-content: flex-end;
  overflow: hidden;
}
.menubar--sample .mb-clock { margin-left: auto; }
.menubar--sample .mb-glyph { margin-left: 0; }
.menubar--sample.menubar--dark { box-shadow: inset 0 0 0 1px rgba(255,255,255,.10); }

/* ── feature rows ──────────────────────────────────────────────────────── */
.row { display: grid; gap: var(--s6); margin-top: var(--s12); align-items: center; }
.row-text h3 { margin-top: 0; }
.row-media img { width: 100%; height: auto; border-radius: 0; box-shadow: none; filter: drop-shadow(0 1px 1px rgba(0,0,0,.05)) drop-shadow(0 10px 18px rgba(0,0,0,.08)) drop-shadow(0 30px 48px rgba(0,0,0,.12)); }
.beat {
  margin-top: var(--s16); padding-top: var(--s8);
  border-top: 1px solid var(--hairline);
  max-width: 62ch; color: var(--text-2);
}

/* ── the run (commands) ────────────────────────────────────────────────── */
.run { margin: var(--s10) 0 0; padding: 0; list-style: none; counter-reset: run; display: grid; gap: var(--s6); }
.run li { counter-increment: run; position: relative; padding-left: 34px; }
.run li::before {
  content: counter(run);
  position: absolute; left: 0; top: 2px;
  width: 22px; height: 22px; border-radius: 50%;
  display: grid; place-items: center;
  font: 400 12px/1 var(--font-mono);
  color: var(--on-ink-2);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.18);
}
.run code {
  display: block; font-family: var(--font-mono); font-size: 13.5px; line-height: 1.5;
  color: var(--on-ink);
  overflow-wrap: break-word; text-indent: -2ch; padding-left: 2ch;
}
.run code.run-none { color: var(--on-ink-3); }
.run p { margin-top: 6px; font-size: 15px; color: var(--on-ink-2); max-width: 60ch; }

.promises { margin: var(--s16) 0 0; padding: 0; list-style: none; display: grid; gap: 0; }
.promises li {
  padding: var(--s5) 0; font-size: 15.5px; color: var(--on-ink-2);
  border-top: 1px solid rgba(255,255,255,.10); max-width: 68ch;
}
.promises li:last-child { border-bottom: 1px solid rgba(255,255,255,.10); }

/* ── install ───────────────────────────────────────────────────────────── */
.dl { margin-top: var(--s10); }
.dl-meta { margin-top: var(--s3); font: 400 13px/1.5 var(--font-mono); color: var(--text-3); }
.dl-sha { margin-top: 6px; font-size: 12px; color: var(--text-3); overflow-wrap: anywhere; }
.dl-sha .mono { background: none; border: 0; padding: 0; font-size: 11.5px; }

.steps { margin: var(--s10) 0 0; padding: 0; list-style: none; counter-reset: step; display: grid; gap: var(--s5); }
.steps li {
  counter-increment: step; position: relative; padding-left: 40px;
  color: var(--text-2); max-width: 62ch;
}
.steps li::before {
  content: counter(step);
  position: absolute; left: 0; top: 1px;
  width: 26px; height: 26px; border-radius: 50%;
  display: grid; place-items: center;
  font: 700 13px/1 var(--font-mono); color: var(--accent);
  box-shadow: inset 0 0 0 1.5px var(--accent-ring);
}
.note {
  margin-top: var(--s8); padding: var(--s4) var(--s5);
  background: var(--accent-quiet); border-radius: var(--radius);
  font-size: 15px; color: var(--text); max-width: 62ch;
}
.cmd {
  display: flex; align-items: center; gap: var(--s3); flex-wrap: wrap;
  margin-top: var(--s8); padding: var(--s3) var(--s4);
  background: var(--ink); border-radius: var(--radius); max-width: 62ch;
}
.cmd code {
  font-family: var(--font-mono); font-size: 13px; color: var(--on-ink);
  overflow-wrap: anywhere; flex: 1 1 auto;
}
.cmd .btn--ghost { color: var(--on-ink); box-shadow: inset 0 0 0 1px rgba(255,255,255,.22); }
.cmd .btn--ghost:hover { background: rgba(255,255,255,.08); color: var(--on-ink); }

/* ── faq ───────────────────────────────────────────────────────────────── */
.faq { margin-top: var(--s10); border-top: 1px solid var(--hairline); max-width: 68ch; }
.faq details { border-bottom: 1px solid var(--hairline); }
.faq summary {
  display: flex; align-items: flex-start; gap: 10px;
  padding: var(--s5) 0; cursor: pointer; list-style: none;
  font: 700 15.5px/1.4 var(--font-mono); letter-spacing: -.015em;
}
.faq summary::-webkit-details-marker { display: none; }
.faq summary::before {
  content: "+"; flex: none; width: 1em;
  font-weight: 400; color: var(--accent);
  transition: transform 200ms cubic-bezier(.32,.72,0,1);
}
.faq details[open] summary::before { content: "−"; }
.faq p { padding-bottom: var(--s6); color: var(--text-2); font-size: 15.5px; max-width: 62ch; }

/* ── footer ────────────────────────────────────────────────────────────── */
.foot {
  background: var(--paper-2);
  border-top: 1px solid var(--hairline);
  padding-block: var(--s16) var(--s10);
}
.foot .col { padding-left: var(--gutter); }
.foot-grid { display: grid; gap: var(--s8); }
.foot-brand { display: flex; align-items: center; gap: 8px; font: 700 15px/1 var(--font-mono); }
.foot-brand .wordmark-mark { width: 18px; height: 18px; }
.foot-brand .mono { background: none; border: 0; padding: 0; color: var(--text-3); font-weight: 400; }
.foot-head { font: 700 12px/1 var(--font-mono); letter-spacing: .02em; color: var(--text-3); margin-bottom: var(--s3); }
.foot nav ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; }
.foot a { color: var(--text-2); text-decoration-color: var(--hairline-strong); text-underline-offset: .2em; }
.foot a:hover { color: var(--text); }
.foot-note { margin-top: 8px; font-size: 13.5px; color: var(--text-3); max-width: 34ch; }
.foot-legal { margin-top: var(--s12); font-size: 12px; color: var(--text-3); }

/* a detail crop that has to shrink below its own UI size stops being readable,
   so on a phone it takes the whole column */
@media (max-width: 620px) {
  .row-media.shot picture { display: block; }
  .row-media.shot img { width: 100%; height: auto; }
}

/* ── legal pages ───────────────────────────────────────────────────────── */
.doc { padding-block: var(--s16) var(--s24); }
.doc .col { max-width: 760px; padding-left: 0; }
.doc h1 { font-size: clamp(1.7rem, 1.3rem + 1.6vw, 2.25rem); max-width: 24ch; }
.doc h1::before { display: none; }
.doc h2 { font-size: 1.125rem; font-weight: 700; margin-top: var(--s12); max-width: none; }
.doc h2::before { display: none; }
.doc p, .doc li { color: var(--text-2); max-width: 68ch; }
.doc p { margin-top: var(--s4); }
.doc ul { margin: var(--s4) 0 0; padding-left: 1.2em; display: grid; gap: 8px; }
.doc .updated { margin-top: var(--s4); font: 400 13px/1 var(--font-mono); color: var(--text-3); }
.doc a { color: var(--accent); text-underline-offset: .2em; }
.doc pre {
  margin-top: var(--s5); padding: var(--s5); overflow-x: auto;
  background: var(--paper-2); border: 1px solid var(--hairline); border-radius: var(--radius);
  font: 400 12.5px/1.7 var(--font-mono); color: var(--text-2); white-space: pre-wrap;
}
.doc-back { display: inline-block; margin-top: var(--s16); font: 400 14px/1 var(--font-mono); color: var(--text-2); }

/* ── motion ────────────────────────────────────────────────────────────── */
@keyframes dot-fill {
  from { opacity: .32; transform: scale(1); }
  40%  { opacity: 1;   transform: scale(1.34); }
  to   { opacity: 1;   transform: scale(1); }
}
@keyframes dot-ping {
  0%   { opacity: .5; transform: scale(1); }
  14%  { opacity: 0;  transform: scale(2.6); }
  100% { opacity: 0;  transform: scale(2.6); }
}
[data-play="1"] .mb-dot.is-new { animation: dot-fill 460ms cubic-bezier(.16, 1, .3, 1) both; }
[data-play="1"] .d1 { animation-delay: 620ms; }
[data-play="1"] .d2 { animation-delay: 860ms; }
.menubar--loupe .mb-dot.is-new::after {
  content: ""; position: absolute; inset: 0; border-radius: 50%;
  box-shadow: 0 0 0 calc(1.5px * var(--mb)) var(--dot); opacity: 0;
}
[data-play="1"] .menubar--loupe .d1::after { animation: dot-ping 4.4s cubic-bezier(.16,1,.3,1) 620ms infinite; }
[data-play="1"] .menubar--loupe .d2::after { animation: dot-ping 4.4s cubic-bezier(.16,1,.3,1) 900ms infinite; }


/* ── responsive ────────────────────────────────────────────────────────── */
@media (min-width: 620px) {
  :root { --gutter: 76px; --rail-gap: 13px; --rail-0: 10px; --cap-top: 84px; --cap-size: 9px; }
  .menubar--loupe { --mb: 3.2; }
  .states { grid-template-columns: repeat(3, 1fr); gap: var(--s8); }
  .cmd { flex-wrap: nowrap; }
  .foot-grid { grid-template-columns: repeat(2, 1fr); }
  .styles-row { grid-template-columns: 96px 1fr 1fr; gap: var(--s4); }
  .menubar--real { padding-inline: 16px; }
}

@media (min-width: 1080px) {
  .band--ink .col { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); column-gap: var(--s20); align-items: start; }
  .band--ink .col > h2, .band--ink .col > .prose { grid-column: 1 / -1; }
  .band--ink .run { margin-top: var(--s12); }
  .band--ink .promises { margin-top: var(--s12); grid-template-columns: 1fr; }
  .band--ink .promises li:nth-last-child(2) { border-bottom: 0; }
}

@media (min-width: 1000px) {
  .hero .col { display: grid; grid-template-columns: minmax(0, 1fr) 372px; column-gap: var(--s16); align-items: start; }
  .shot--panel { margin-top: 0; position: sticky; top: 104px; }
}

@media (min-width: 900px) {
  :root { --gutter: 116px; --rail-gap: 22px; --rail-0: 12px; --cap-top: 120px; --cap-size: 12px; }
  .nav { display: flex; }
  .row { grid-template-columns: 1fr 380px; gap: var(--s16); }
  .row--flip .row-text { order: 2; }
  .row--flip .row-media { order: 1; }
  .promises { grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: var(--s10); }
  .promises li:nth-last-child(2) { border-bottom: 1px solid rgba(255,255,255,.10); }
  .foot-grid { grid-template-columns: 1.4fr 1fr 1fr 1.4fr; }
  .shot--panel img { width: 352px; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }
}
