/* contact */

  /* Contact: the title and the email beside the form, which sits on a wash. */.contact-page.svelte-dil66k {display:flex;flex-direction:column;min-height:100svh;}.skip-link.svelte-dil66k {position:fixed;z-index:60;top:var(--s2);inset-inline-start:var(--s2);padding:var(--s2) var(--s4);border-radius:var(--r-pill);background:var(--ink);color:var(--paper);font:var(--type-control);translate:0 calc(-100% - var(--s4));transition:translate var(--fast) var(--ease);}.skip-link.svelte-dil66k:focus {translate:0 0;}main.svelte-dil66k {flex:1;display:grid;grid-template-columns:minmax(0, 360px) minmax(0, 1fr);align-items:start;gap:var(--s7);width:100%;max-width:var(--page);margin:0 auto;padding:var(--s7) var(--gutter) var(--s9);}main.svelte-dil66k:focus {outline:none;}.heading.svelte-dil66k {position:sticky;top:var(--s5);display:grid;justify-items:start;gap:var(--s4);}h1.svelte-dil66k {color:var(--ink);font:var(--type-title);letter-spacing:-0.04em;}.intro.svelte-dil66k {color:var(--ink2);font:var(--type-lead);}.email-option.svelte-dil66k {display:flex;flex-wrap:wrap;gap:var(--s2);color:var(--ink3);font:var(--type-small);}.email-option.svelte-dil66k a:where(.svelte-dil66k) {color:var(--ink2);text-decoration:underline;text-decoration-color:var(--wash2);text-decoration-thickness:2px;text-underline-offset:4px;overflow-wrap:anywhere;transition:color var(--fast) var(--ease);}
  @media (hover: hover) {.email-option.svelte-dil66k a:where(.svelte-dil66k):hover {color:var(--ink);} }.form-surface.svelte-dil66k {--field: var(--wash2);--field-hover: var(--paper);min-width:0;padding:var(--s6);border-radius:var(--r-row);background:var(--wash);}
  @media (max-width: 900px) {main.svelte-dil66k {grid-template-columns:minmax(0, 1fr);gap:var(--s6);padding-top:var(--s5);}.heading.svelte-dil66k {position:static;}.form-surface.svelte-dil66k {padding:var(--s4);}
  }
.page-header.svelte-4plpxu {display:grid;grid-template-columns:auto minmax(0, 1fr) auto;grid-template-areas:"leading nav end";align-items:center;gap:var(--s2) var(--s6);width:100%;max-width:var(--page);margin:0 auto;padding:var(--s4) var(--gutter);}.page-leading.svelte-4plpxu {grid-area:leading;display:flex;align-items:center;gap:var(--s2);min-width:0;}.page-brand.svelte-4plpxu {color:var(--ink);font:var(--type-mark);letter-spacing:-0.02em;white-space:nowrap;}nav.svelte-4plpxu {grid-area:nav;display:flex;align-items:center;gap:var(--s5);min-width:0;overflow-x:auto;scrollbar-width:none;}nav.svelte-4plpxu::-webkit-scrollbar {display:none;}nav.svelte-4plpxu a:where(.svelte-4plpxu) {flex:none;color:var(--ink3);font:var(--type-small);white-space:nowrap;transition:color var(--fast) var(--ease);}nav.svelte-4plpxu a[aria-current="page"]:where(.svelte-4plpxu) {color:var(--ink);}.header-end.svelte-4plpxu {grid-area:end;display:flex;align-items:center;gap:var(--s2);}.open-action.svelte-4plpxu {display:inline-flex;align-items:center;height:36px;padding:0 var(--s4);border-radius:var(--r-pill);background:var(--ink);color:var(--paper);font:var(--type-control);white-space:nowrap;transition:opacity var(--fast) var(--ease), scale var(--fast) var(--ease);}.open-action.svelte-4plpxu:active {scale:0.97;}
  @media (hover: hover) {nav.svelte-4plpxu a:where(.svelte-4plpxu):hover {color:var(--ink);}.open-action.svelte-4plpxu:hover {opacity:0.86;}
  }
  /* A phone: the mark and the way in on the first row, the pages under them. */
  @media (max-width: 720px) {.page-header.svelte-4plpxu {grid-template-columns:minmax(0, 1fr) auto;grid-template-areas:"leading end" "nav nav";gap:var(--s2) var(--s4);}.page-header.app.svelte-4plpxu {grid-template-columns:auto minmax(0, 1fr) auto;grid-template-areas:"leading nav end";}nav.svelte-4plpxu {gap:var(--s4);min-height:44px;}.open-action.svelte-4plpxu {height:44px;}nav.svelte-4plpxu a:where(.svelte-4plpxu) {position:relative;}nav.svelte-4plpxu a:where(.svelte-4plpxu)::after {content:"";position:absolute;left:50%;top:50%;width:max(100%, 44px);height:44px;translate:-50% -50%;}
  }
  @media (forced-colors: active) {.open-action.svelte-4plpxu {border:1px solid ButtonText;} }
.theme.svelte-1jgdtao {position:relative;display:grid;place-items:center;width:36px;height:36px;padding:0;border:0;border-radius:var(--r-pill);background:transparent;color:var(--ink3);cursor:pointer;transition:background-color var(--fast) var(--ease), color var(--fast) var(--ease), scale var(--fast) var(--ease);}.theme.svelte-1jgdtao:active {scale:0.94;}
  @media (hover: hover) {.theme.svelte-1jgdtao:hover {background:var(--wash);color:var(--ink);} }
  /* The icons trade places with a quarter turn. */.theme.svelte-1jgdtao span:where(.svelte-1jgdtao) {grid-area:1 / 1;display:grid;opacity:0;rotate:-90deg;scale:0.6;transition:opacity var(--glide) var(--ease), rotate var(--glide) var(--ease), scale var(--glide) var(--ease);}.theme.svelte-1jgdtao span.on:where(.svelte-1jgdtao) {opacity:1;rotate:0deg;scale:1;}
.contact-form.svelte-12nsr0s, .success.svelte-12nsr0s {display:flex;flex-direction:column;gap:var(--s5);min-width:0;}p.svelte-12nsr0s, h2.svelte-12nsr0s {margin:0;}.field.svelte-12nsr0s {display:flex;flex-direction:column;gap:var(--s2);min-width:0;}.categories.svelte-12nsr0s {display:grid;grid-template-columns:repeat(auto-fit, minmax(min(100%, 200px), 1fr));gap:var(--s4);}.label.svelte-12nsr0s {color:var(--ink2);font:var(--type-control);}.field.is-disabled.svelte-12nsr0s .label:where(.svelte-12nsr0s) {color:var(--ink3);}.optional.svelte-12nsr0s {color:var(--ink3);font:var(--type-meta);}input.svelte-12nsr0s, textarea.svelte-12nsr0s {width:100%;min-width:0;min-height:36px;border:0;border-radius:var(--r-col);background:var(--field);color:var(--ink);font:var(--type-small);transition:background-color var(--fast) var(--ease);}input.svelte-12nsr0s {padding:0 var(--s3);}textarea.svelte-12nsr0s {min-height:160px;max-height:400px;padding:var(--s2) var(--s3);resize:vertical;}input.svelte-12nsr0s:hover:not(:disabled), textarea.svelte-12nsr0s:hover:not(:disabled) {background:var(--field-hover);}
  /* Ledger has no red: an invalid field darkens toward ink, and its reason sits under it. */input[aria-invalid="true"].svelte-12nsr0s, textarea[aria-invalid="true"].svelte-12nsr0s {background:color-mix(in oklab, var(--ink) 14%, var(--field));}input.svelte-12nsr0s:disabled, textarea.svelte-12nsr0s:disabled {opacity:0.6;}input.svelte-12nsr0s::placeholder, textarea.svelte-12nsr0s::placeholder {color:var(--ink3);}.label-row.svelte-12nsr0s {display:flex;align-items:baseline;justify-content:space-between;gap:var(--s3);}.count.svelte-12nsr0s {flex:none;color:var(--ink3);font:var(--type-meta);font-variant-numeric:tabular-nums;}.privacy.svelte-12nsr0s, .draft-note.svelte-12nsr0s {color:var(--ink3);font:var(--type-meta);}.error.svelte-12nsr0s {color:var(--ink);font:var(--type-meta);}.notice.svelte-12nsr0s {display:grid;gap:var(--s3);padding:var(--s4);border-radius:var(--r-box);background:var(--wash);}
  /* On the notice's wash, its button steps up to wash2 (and to paper on hover). */.notice.svelte-12nsr0s .sk-btn.ghost {background:var(--wash2);}.notice.svelte-12nsr0s .sk-btn.ghost:hover:not(:disabled) {background:var(--paper);}.notice.svelte-12nsr0s > p:where(.svelte-12nsr0s):first-child {color:var(--ink);font:var(--type-small);}.reference.svelte-12nsr0s {min-width:0;color:var(--ink2);overflow-wrap:anywhere;}.reference.svelte-12nsr0s code:where(.svelte-12nsr0s) {display:block;color:var(--ink);font:var(--type-small);user-select:all;}.actions.svelte-12nsr0s, .recovery-actions.svelte-12nsr0s {display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--s3);}.recovery-actions.svelte-12nsr0s {justify-content:flex-start;}.recovery-actions.svelte-12nsr0s a:where(.svelte-12nsr0s) {display:inline-flex;align-items:center;min-height:36px;font:var(--type-control);}.send-section.svelte-12nsr0s {display:grid;gap:var(--s3);}.form-actions.svelte-12nsr0s {justify-content:space-between;}.secondary-action.svelte-12nsr0s {margin-inline-end:auto;}.draft-note.svelte-12nsr0s {text-align:end;}.success.svelte-12nsr0s {padding-block:var(--s4);}.success.svelte-12nsr0s [role="status"]:where(.svelte-12nsr0s) {display:grid;gap:var(--s2);}.success.svelte-12nsr0s p:where(.svelte-12nsr0s) {color:var(--ink2);font:var(--type-small);}.success-icon.svelte-12nsr0s {display:grid;place-items:center;width:48px;height:48px;border-radius:50%;background:var(--wash);color:var(--ink);}.success.svelte-12nsr0s h2:where(.svelte-12nsr0s) {color:var(--ink);font:var(--type-mark);text-wrap:balance;}.honeypot.svelte-12nsr0s, .sr-only.svelte-12nsr0s {position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;}
  @media (max-width: 720px), (pointer: coarse) {input.svelte-12nsr0s, textarea.svelte-12nsr0s {font-size:16px;}input.svelte-12nsr0s, .recovery-actions.svelte-12nsr0s a:where(.svelte-12nsr0s), .reference.svelte-12nsr0s .expander > .toggle {min-height:44px;}
  }
.sk-select.svelte-1p8kh9h {position:relative;display:inline-block;width:100%;min-width:0;max-width:100%;}

  /* A wash field, like every text field: no line, the ring on keyboard focus only. */.sk-select-trigger.svelte-1p8kh9h {display:flex;align-items:center;justify-content:space-between;gap:var(--s2);width:100%;min-width:0;max-width:100%;min-height:36px;padding:0 var(--s2) 0 var(--s3);border:0;border-radius:var(--r-col);background:var(--field);color:var(--ink);font:var(--type-small);text-align:start;cursor:pointer;transition:background-color var(--fast) var(--ease);}.sk-select-trigger.svelte-1p8kh9h:hover:not(:disabled),
  .sk-select.is-open.svelte-1p8kh9h .sk-select-trigger:where(.svelte-1p8kh9h) {background:var(--field-hover);}.sk-select-trigger.svelte-1p8kh9h:disabled {opacity:0.4;cursor:default;}
  /* Ledger has no red: an invalid field darkens toward ink, and the form says why below it. */.sk-select-trigger[data-invalid].svelte-1p8kh9h {background:color-mix(in oklab, var(--ink) 14%, var(--field));}.sk-select-label.svelte-1p8kh9h {flex:1 1 0;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}.sk-select-label.is-placeholder.svelte-1p8kh9h {color:var(--ink3);}.sk-select-caret.svelte-1p8kh9h {display:grid;flex:none;color:var(--ink3);transition:rotate var(--glide) var(--ease), color var(--fast) var(--ease);}.sk-select.is-open.svelte-1p8kh9h .sk-select-caret:where(.svelte-1p8kh9h) {rotate:180deg;color:var(--ink);}

  /* The list: a flat wash2 surface in the top layer. It rises 6 px as it fades in (200 ms) and
   * fades out (120 ms); dropdownMotion reads the close duration. */.sk-select-popover.svelte-1p8kh9h {
    /* Declared only so check-theme passes while components outside this lane still name
     * --popup-radius (the loom sidebar and dialog, the token logits popover, the manifold job
     * progress, the discover form). It reaches this element alone: those draw square corners until
     * their lanes redraw them on --r-box. Delete it when none reads it. */--popup-radius: var(--r-box);--dropdown-close-dur: var(--out);position:fixed;inset:auto;z-index:60;box-sizing:border-box;margin:0;padding:var(--s1);overflow-y:auto;list-style:none;border:0;border-radius:var(--r-box);background:var(--wash2);color:var(--ink2);outline:none;opacity:0;translate:0 6px;transition:opacity var(--in) var(--ease), translate var(--in) var(--ease);}.sk-select-popover[data-origin="bottom-left"].svelte-1p8kh9h {translate:0 -6px;}.sk-select-popover.is-open.svelte-1p8kh9h {opacity:1;translate:0 0;}.sk-select-popover.is-closing.svelte-1p8kh9h {opacity:0;translate:0 0;transition-duration:var(--out);}.sk-select-opt.svelte-1p8kh9h {display:flex;align-items:center;gap:var(--s2);min-height:40px;padding:var(--s2) var(--s3);border-radius:var(--r-col);color:var(--ink2);font:var(--type-control);overflow-wrap:anywhere;cursor:pointer;transition:background-color var(--fast) var(--ease), color var(--fast) var(--ease);}.sk-select-text.svelte-1p8kh9h {flex:1 1 auto;min-width:0;}.sk-select-check.svelte-1p8kh9h {display:grid;flex:none;}.sk-select-opt.is-active.svelte-1p8kh9h {color:var(--ink);}.sk-select-opt.is-highlight.svelte-1p8kh9h:not(.is-disabled) {background:var(--paper);color:var(--ink);}.sk-select-opt.is-disabled.svelte-1p8kh9h {opacity:0.4;cursor:default;}

  @media (max-width: 720px), (pointer: coarse) {.sk-select-trigger.svelte-1p8kh9h, .sk-select-opt.svelte-1p8kh9h {min-height:44px;}
  }
  @media (prefers-reduced-motion: reduce) {.sk-select-popover.svelte-1p8kh9h, .sk-select-popover[data-origin="bottom-left"].svelte-1p8kh9h {translate:none;}
  }
.morph-text.svelte-iee8ik {position:relative;display:inline-block;vertical-align:baseline;min-width:0;max-width:100%;}.morph-source.svelte-iee8ik {min-width:0;overflow-wrap:inherit;}.morph-paint.svelte-iee8ik {position:absolute;inset-inline-start:0;top:0;pointer-events:none;user-select:none;-webkit-user-select:none;visibility:hidden;max-width:100%;overflow:clip;--torph-fade: 0.08em;}.morph-text.svelte-iee8ik[data-morph-active] > .morph-source:where(.svelte-iee8ik) {color:transparent;}.morph-text.svelte-iee8ik[data-morph-active] > .morph-paint:where(.svelte-iee8ik) {visibility:visible;}
  @media (prefers-reduced-motion: reduce), (forced-colors: active) {.morph-text.svelte-iee8ik[data-morph-active] > .morph-source:where(.svelte-iee8ik) {color:inherit;}.morph-text.svelte-iee8ik[data-morph-active] > .morph-paint:where(.svelte-iee8ik) {visibility:hidden;}
  }
.sk-btn.svelte-npd92 {display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);max-width:100%;min-height:36px;padding:var(--s2) var(--s4);border:0;border-radius:var(--r-pill);background:transparent;color:var(--ink);font:var(--type-control);text-align:center;text-wrap:balance;overflow-wrap:anywhere;cursor:pointer;transition:background-color var(--fast) var(--ease),
      color var(--fast) var(--ease),
      opacity var(--fast) var(--ease),
      scale var(--fast) var(--ease);}.sk-btn.svelte-npd92:active:not(:disabled):not(.static) {scale:0.97;}.sk-btn.svelte-npd92:disabled {opacity:0.4;cursor:default;}.md.svelte-npd92 {font:var(--type-control);}.sm.svelte-npd92 {min-height:32px;padding:var(--s1) var(--s3);font:var(--type-control);}.solid.svelte-npd92 {padding-inline:var(--s5);background:var(--ink);color:var(--paper);}.solid.sm.svelte-npd92 {padding-inline:var(--s4);}.solid.accented.svelte-npd92 {background:var(--btn-accent);}.solid.svelte-npd92:hover:not(:disabled) {opacity:0.86;}.ghost.svelte-npd92, .danger.svelte-npd92 {background:var(--wash);}.ghost.svelte-npd92:hover:not(:disabled), .danger.svelte-npd92:hover:not(:disabled) {background:var(--wash2);}.ghost.accented.svelte-npd92, .danger.accented.svelte-npd92 {background:color-mix(in oklch, var(--btn-accent) 14%, var(--wash));}.ghost.accented.svelte-npd92:hover:not(:disabled), .danger.accented.svelte-npd92:hover:not(:disabled) {background:color-mix(in oklch, var(--btn-accent) 22%, var(--wash));}.flat.svelte-npd92, .flat.sm.svelte-npd92 {padding-inline:0;background:transparent;color:var(--ink3);}.flat.svelte-npd92:hover:not(:disabled) {color:var(--ink);}

  /* Phones and touch screens: every target 44 px, a text-only button included. */
  @media (max-width: 720px), (pointer: coarse) {.sk-btn.svelte-npd92, .sm.svelte-npd92 {min-height:44px;}.flat.svelte-npd92 {min-width:44px;}
  }
.page-footer.svelte-tcpvjo {display:grid;gap:var(--s6);width:100%;max-width:var(--page);margin:0 auto;padding:var(--s7) var(--gutter) max(var(--s7), env(safe-area-inset-bottom));color:var(--ink3);font:var(--type-small);}.footer-groups.svelte-tcpvjo {display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:var(--s5) var(--s6);}.footer-group.svelte-tcpvjo {display:grid;align-content:start;gap:var(--s3);min-width:0;}ul.svelte-tcpvjo {display:grid;gap:var(--s2);}a.svelte-tcpvjo {display:inline-flex;flex-wrap:wrap;align-items:center;gap:0 var(--s1);color:var(--ink2);transition:color var(--fast) var(--ease);}a[aria-current="page"].svelte-tcpvjo {color:var(--ink);}.link-detail.svelte-tcpvjo {flex-basis:100%;color:var(--ink3);font:var(--type-meta);}.project-info.svelte-tcpvjo {display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2) var(--s5);}.project-info.svelte-tcpvjo a:where(.svelte-tcpvjo) {color:var(--ink3);}
  @media (hover: hover) {a.svelte-tcpvjo:hover, .project-info.svelte-tcpvjo a:where(.svelte-tcpvjo):hover {color:var(--ink);} }.compact.svelte-tcpvjo {gap:var(--s4);padding-top:var(--s5);}.compact.svelte-tcpvjo .footer-groups:where(.svelte-tcpvjo) {gap:var(--s4) var(--s5);}
  @media (max-width: 720px) {.footer-groups.svelte-tcpvjo {grid-template-columns:repeat(2, minmax(0, 1fr));}a.svelte-tcpvjo {min-height:32px;}
  }