
/* ---- Inter, self-hosted --------------------------------------------- */
/* Only the subsets and weights the site actually uses. unicode-range means
   a visitor downloads Cyrillic only if the page needs it. */

@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/inter-latin-400-normal.woff2") format("woff2");
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/assets/fonts/inter-latin-600-normal.woff2") format("woff2");
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/assets/fonts/inter-latin-700-normal.woff2") format("woff2");
  unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/inter-latin-ext-400-normal.woff2") format("woff2");
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/assets/fonts/inter-latin-ext-600-normal.woff2") format("woff2");
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/assets/fonts/inter-latin-ext-700-normal.woff2") format("woff2");
  unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("/assets/fonts/inter-cyrillic-400-normal.woff2") format("woff2");
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url("/assets/fonts/inter-cyrillic-600-normal.woff2") format("woff2");
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}
@font-face {
  font-family: "Inter";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("/assets/fonts/inter-cyrillic-700-normal.woff2") format("woff2");
  unicode-range: U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;
}

/* 4V3D — dark, technical, minimal. One stylesheet, no framework. */

:root {
  --bg: #0a0a0c;
  --bg-raised: #131317;
  --bg-hover: #1a1a20;
  --line: #26262e;
  --line-soft: #1c1c22;
  --text: #eceef2;
  --muted: #9296a3;
  --accent: #0072ce;          /* Estonian flag blue — solid fills */
  --accent-text: #5aa9ee;     /* lighter tint for text/marks on dark */
  --accent-ink: #ffffff;      /* text on top of --accent */
  --accent-dim: #1d4f7c;      /* borders and hover edges */
  --text-soft: #c8ccd6;
  --muted-2: #62667a;
  --warn-text: #ffcf7a;
  --warn-line: #6b5320;
  --warn-bg: #1c1710;
  --offer-text: #f4a3bd;
  --offer-line: #6d2f47;
  --offer-bg: #1d1218;
  --shadow: none;
  --max: 1080px;
  --pad: clamp(1.25rem, 5vw, 3rem);
  --font: "Inter", ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto,
    "Helvetica Neue", Arial, sans-serif;
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
    "Liberation Mono", monospace;
}

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  * { animation-duration: .001ms !important; transition-duration: .001ms !important; }
}

body {
  margin: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font);
  font-size: 17px;
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
}

img { max-width: 100%; height: auto; }

a { color: var(--accent-text); text-decoration: none; }
a:hover { text-decoration: underline; }

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

.skip {
  position: absolute;
  left: -9999px;
  top: 0;
  background: var(--accent);
  color: var(--accent-ink);
  padding: .6rem 1rem;
  font-weight: 600;
  z-index: 100;
}
.skip:focus { left: 0; }

/* ---------------------------------------------------------------- header */

.site-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  max-width: var(--max);
  margin: 0 auto;
  padding: 1.25rem var(--pad);
  border-bottom: 1px solid var(--line-soft);
}

.logo {
  display: inline-flex;
  align-items: baseline;
  gap: .6rem;
  color: var(--text);
  text-decoration: none;
}
.logo:hover { text-decoration: none; }
.logo-img { display: block; height: 40px; width: auto; }
.logo-text {
  font-family: var(--mono);
  font-size: 1.35rem;
  font-weight: 700;
  letter-spacing: .06em;
}
.logo-tag {
  font-family: var(--mono);
  font-size: .72rem;
  color: var(--muted);
  letter-spacing: .1em;
}

.site-nav {
  display: flex;
  align-items: center;
  gap: clamp(.9rem, 2.5vw, 1.6rem);
  flex-wrap: wrap;
}
.site-nav a {
  color: var(--muted);
  font-size: .95rem;
  text-decoration: none;
  padding: .25rem 0;
  border-bottom: 1px solid transparent;
}
.site-nav a:hover { color: var(--text); text-decoration: none; }
.site-nav a.active { color: var(--text); border-bottom-color: var(--accent); }

.site-nav .lang {
  font-family: var(--mono);
  font-size: .78rem;
  letter-spacing: .08em;
  color: var(--muted);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: .2rem .6rem;
}
.site-nav .lang:hover { border-color: var(--accent-dim); color: var(--accent-text); }

/* ------------------------------------------------------------------ hero */

main { max-width: var(--max); margin: 0 auto; padding: 0 var(--pad); }

.hero { padding: clamp(3rem, 9vw, 6rem) 0 clamp(2rem, 5vw, 3.5rem); }

.kicker {
  font-family: var(--mono);
  font-size: .78rem;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--accent-text);
  margin: 0 0 1rem;
}

h1 {
  font-size: clamp(2.1rem, 6vw, 3.6rem);
  line-height: 1.08;
  letter-spacing: -0.025em;
  margin: 0 0 1.25rem;
  max-width: 20ch;
}

.hero-sub {
  font-size: clamp(1.05rem, 2.2vw, 1.25rem);
  color: var(--muted);
  max-width: 62ch;
  margin: 0;
}

.hero-actions { display: flex; flex-wrap: wrap; gap: .75rem; margin-top: 2rem; }

.btn {
  display: inline-block;
  background: var(--accent);
  color: var(--accent-ink);
  font-weight: 600;
  font-size: .95rem;
  padding: .7rem 1.4rem;
  border-radius: 6px;
  border: 1px solid var(--accent);
  text-decoration: none;
}
.btn:hover { text-decoration: none; filter: brightness(1.08); }

.btn-ghost { background: transparent; color: var(--text); border-color: var(--line); }
.btn-ghost:hover { border-color: var(--accent-dim); color: var(--accent-text); filter: none; }

/* --------------------------------------------------------------- content */

.content { padding-bottom: clamp(3rem, 8vw, 5rem); }

.content h2 {
  font-size: clamp(1.4rem, 3vw, 1.85rem);
  letter-spacing: -0.015em;
  margin: 3rem 0 1rem;
  padding-top: 2rem;
  border-top: 1px solid var(--line-soft);
}
.content > h2:first-child { margin-top: 0; padding-top: 0; border-top: 0; }

.content h3 {
  font-size: 1.15rem;
  margin: 2.25rem 0 .6rem;
  letter-spacing: -0.01em;
  color: var(--text);
}
.content h3::before {
  content: "";
  display: block;
  width: 1.75rem;
  height: 2px;
  background: var(--accent);
  margin-bottom: .7rem;
}
.card h3 { margin: 0 0 .5rem; font-size: 1.05rem; }
.card h3::before { display: none; }

.content p { max-width: 68ch; color: var(--text-soft); }
.content .lead { font-size: 1.15rem; color: var(--text); }

.ticks { list-style: none; padding: 0; margin: 1rem 0; max-width: 68ch; }
.ticks li {
  position: relative;
  padding-left: 1.6rem;
  margin-bottom: .6rem;
  color: var(--text-soft);
}
.ticks li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .62em;
  width: .5rem;
  height: .5rem;
  border-left: 2px solid var(--accent-text);
  border-bottom: 2px solid var(--accent-text);
  transform: rotate(-45deg);
}

.cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1rem;
  margin: 1.5rem 0;
}
.card {
  background: var(--bg-raised);
  border: 1px solid var(--line);
  border-radius: 10px;
  padding: 1.4rem;
}
.card p { margin: 0; color: var(--muted); font-size: .95rem; }

/* A card rendered as <a> (see build.py's `cards` block) needs the anchor
   defaults undone so it still looks like a card, not a link. */
a.card.linked {
  display: block;
  color: inherit;
  text-decoration: none;
  cursor: pointer;
}
a.card.linked:hover h3 { color: var(--accent-ink); }

.specs { margin: 1.5rem 0; display: grid; gap: 0; max-width: 760px; }
.spec {
  display: grid;
  grid-template-columns: minmax(160px, 34%) 1fr;
  gap: 1rem;
  padding: .85rem 0;
  border-bottom: 1px solid var(--line-soft);
}
.spec:first-child { border-top: 1px solid var(--line-soft); }
.spec dt { font-family: var(--mono); font-size: .88rem; color: var(--text); }
.spec dd { margin: 0; color: var(--muted); font-size: .95rem; }

@media (max-width: 520px) {
  .spec { grid-template-columns: 1fr; gap: .2rem; }
}

.cta {
  margin: 3rem 0 0;
  padding: 1.75rem;
  background: var(--bg-raised);
  border: 1px solid var(--line);
  border-left: 3px solid var(--accent-text);
  border-radius: 10px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}
.cta p { margin: 0; max-width: 48ch; }

/* ------------------------------------------------------------------ form */

.contact-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
  gap: clamp(1.5rem, 4vw, 3rem);
  align-items: start;
}
@media (max-width: 720px) {
  .contact-grid { grid-template-columns: 1fr; }
}

.contact-form label {
  display: block;
  font-size: .85rem;
  font-family: var(--mono);
  color: var(--muted);
  margin: 1.1rem 0 .35rem;
}
.contact-form input,
.contact-form textarea {
  width: 100%;
  background: var(--bg-raised);
  border: 1px solid var(--line);
  border-radius: 6px;
  color: var(--text);
  font: inherit;
  font-size: 1rem;
  padding: .7rem .85rem;
}
.contact-form input:focus,
.contact-form textarea:focus { border-color: var(--accent-dim); }
.contact-form textarea { resize: vertical; min-height: 8rem; }

.contact-form input[name="_gotcha"] {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
}

.contact-form button {
  margin-top: 1.4rem;
  background: var(--accent);
  color: var(--accent-ink);
  border: 0;
  border-radius: 6px;
  font: inherit;
  font-weight: 600;
  padding: .75rem 1.6rem;
  cursor: pointer;
}
.contact-form button:hover { filter: brightness(1.08); }

.form-note { font-size: .85rem; color: var(--muted); margin-top: .9rem; }
.form-warning {
  font-size: .85rem;
  color: var(--warn-text);
  border: 1px dashed var(--warn-line);
  background: var(--warn-bg);
  padding: .6rem .8rem;
  border-radius: 6px;
}

.contact-side { border-left: 1px solid var(--line-soft); padding-left: clamp(1rem, 3vw, 2rem); }
@media (max-width: 720px) {
  .contact-side { border-left: 0; padding-left: 0; border-top: 1px solid var(--line-soft); padding-top: 1.5rem; }
}
.contact-direct { color: var(--muted); font-size: .9rem; margin: 0 0 .3rem; }
.big-link { font-size: 1.15rem; font-family: var(--mono); }

.mini-specs { margin-top: 2rem; }
.mini-specs dt {
  font-family: var(--mono);
  font-size: .75rem;
  color: var(--muted);
  letter-spacing: .06em;
  text-transform: uppercase;
  margin-top: 1rem;
}
.mini-specs dd { margin: .1rem 0 0; font-size: .95rem; }

/* ---------------------------------------------------------------- footer */

.site-footer {
  border-top: 1px solid var(--line-soft);
  margin-top: 2rem;
  padding: 2.5rem var(--pad) 3rem;
}
.foot-grid {
  max-width: var(--max);
  margin: 0 auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  gap: 1.5rem;
}
.foot-name { font-family: var(--mono); font-weight: 700; margin: 0 0 .4rem; }
.foot-meta { margin: 0; color: var(--muted); font-size: .9rem; }
.foot-nav { display: flex; flex-direction: column; gap: .35rem; }
.foot-nav a { color: var(--muted); font-size: .9rem; }
.foot-nav a:hover { color: var(--text); }
.copyright {
  max-width: var(--max);
  margin: 2.5rem auto 0;
  color: var(--muted-2);
  font-size: .82rem;
}

/* --------------------------------------------- click-to-reveal email */

.mailreveal {
  background: transparent;
  border: 1px dashed var(--line);
  border-radius: 6px;
  color: var(--accent-text);
  font: inherit;
  font-size: .95rem;
  padding: .45rem .9rem;
  cursor: pointer;
}
.mailreveal:hover { border-color: var(--accent-dim); border-style: solid; }
.mailreveal.big-link { font-family: var(--mono); font-size: 1rem; }
.mailshown { font-family: var(--mono); }

/* -------------------------------------------------------------- light theme
   Dark is the default (brand). Light applies when the visitor's OS asks for it
   and they haven't chosen otherwise, or when they pick it with the toggle. */



:root[data-theme="light"] {
  --bg: #ffffff;
  --bg-raised: #f7f8fa;
  --bg-hover: #eef0f4;
  --line: #dde1e8;
  --line-soft: #e8ebf0;
  --text: #14161a;
  --text-soft: #3d434e;
  --muted: #5b6270;
  --muted-2: #838a97;
  --accent: #0072ce;
  --accent-text: #0060ad;
  --accent-ink: #ffffff;
  --accent-dim: #9ec8ee;
  --warn-text: #7a5200;
  --warn-line: #d9b45e;
  --warn-bg: #fdf6e6;
  --offer-text: #a82a58;
  --offer-line: #e9b6c8;
  --offer-bg: #fdf1f5;
  --shadow: 0 1px 2px rgba(20, 22, 26, .06);
}

.card, .cta, .contact-form input, .contact-form textarea { box-shadow: var(--shadow); }

/* --------------------------------------------------------- theme toggle */

.themetoggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: transparent;
  color: var(--muted);
  cursor: pointer;
}
.themetoggle:hover { border-color: var(--accent-dim); color: var(--accent-text); }
.themetoggle svg { fill: none; stroke: currentColor; stroke-width: 1.7; }

/* show the icon for the theme you'd switch TO */
.ico-sun { display: block; }
.ico-moon { display: none; }

:root[data-theme="light"] .ico-sun { display: block; }
:root[data-theme="light"] .ico-moon { display: none; }
:root[data-theme="dark"] .ico-sun { display: none; }
:root[data-theme="dark"] .ico-moon { display: block; }

/* ------------------------------------------------------------------ blog */

.postlist { display: grid; gap: 0; margin: 1.5rem 0; }
.postrow {
  display: grid;
  grid-template-columns: 7.5rem 1fr;
  gap: .2rem 1.5rem;
  padding: 1.35rem 0;
  border-bottom: 1px solid var(--line-soft);
  color: inherit;
  text-decoration: none;
}
.postrow:first-child { border-top: 1px solid var(--line-soft); }
.postrow:hover { text-decoration: none; }
.postrow:hover .posttitle { color: var(--accent-text); }
.postdate {
  grid-row: span 2;
  font-family: var(--mono);
  font-size: .8rem;
  color: var(--muted-2);
  padding-top: .28rem;
}
.posttitle { font-size: 1.1rem; font-weight: 600; letter-spacing: -0.01em; }
.postblurb { color: var(--muted); font-size: .95rem; max-width: 60ch; }

@media (max-width: 560px) {
  .postrow { grid-template-columns: 1fr; gap: .3rem; }
  .postdate { grid-row: auto; padding-top: 0; }
}

.postmeta {
  font-family: var(--mono);
  font-size: .8rem;
  color: var(--muted-2);
  margin: -0.5rem 0 0;
}

/* ------------------------------------------------------------- pricing */

.pricetable { margin: 1.5rem auto; max-width: 760px; }
.pricerow {
  display: flex;
  align-items: baseline;
  gap: 1rem;
  padding: .8rem 0;
  border-bottom: 1px solid var(--line-soft);
  text-align: left;
}
.pricerow:first-child { border-top: 1px solid var(--line-soft); }
.priceitem { flex: 1; }
.priceval {
  font-family: var(--mono);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  color: var(--text);
}
.priceval.tbc {
  color: var(--warn-text);
  background: var(--warn-bg);
  border: 1px dashed var(--warn-line);
  border-radius: 4px;
  padding: .1rem .45rem;
  font-size: .8rem;
}


/* ==========================================================================
   CENTRED LAYOUT + POINT-CLOUD TEXTURE
   Everything is centre-aligned by request. The background motif is a
   generated point cloud — the actual output of a 3D scanner, not decoration.
   ========================================================================== */

:root {
  --dots: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201200%20620%22%20preserveAspectRatio%3D%22xMidYMid%20slice%22%20fill%3D%22%2523ffffff%22%3E%3Ccircle%20cx%3D%2287%22%20cy%3D%22332%22%20r%3D%220.9%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%22289%22%20cy%3D%22342%22%20r%3D%222.4%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%2256%22%20cy%3D%22532%22%20r%3D%221.1%22%20opacity%3D%220.51%22%2F%3E%3Ccircle%20cx%3D%22124%22%20cy%3D%22354%22%20r%3D%220.9%22%20opacity%3D%220.52%22%2F%3E%3Ccircle%20cx%3D%22816%22%20cy%3D%22265%22%20r%3D%222.4%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22434%22%20cy%3D%22154%22%20r%3D%221.1%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%22360%22%20cy%3D%22307%22%20r%3D%221.8%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%22688%22%20cy%3D%22543%22%20r%3D%221.4%22%20opacity%3D%220.55%22%2F%3E%3Ccircle%20cx%3D%2273%22%20cy%3D%22435%22%20r%3D%221.8%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%22463%22%20cy%3D%22415%22%20r%3D%221.8%22%20opacity%3D%220.38%22%2F%3E%3Ccircle%20cx%3D%22733%22%20cy%3D%22306%22%20r%3D%221.4%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%22334%22%20cy%3D%22257%22%20r%3D%221.8%22%20opacity%3D%220.82%22%2F%3E%3Ccircle%20cx%3D%22936%22%20cy%3D%22542%22%20r%3D%221.8%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22473%22%20cy%3D%22299%22%20r%3D%221.1%22%20opacity%3D%220.17%22%2F%3E%3Ccircle%20cx%3D%22122%22%20cy%3D%22225%22%20r%3D%221.1%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22318%22%20cy%3D%22514%22%20r%3D%220.9%22%20opacity%3D%220.27%22%2F%3E%3Ccircle%20cx%3D%221097%22%20cy%3D%22470%22%20r%3D%220.9%22%20opacity%3D%220.63%22%2F%3E%3Ccircle%20cx%3D%22313%22%20cy%3D%22227%22%20r%3D%221.1%22%20opacity%3D%220.51%22%2F%3E%3Ccircle%20cx%3D%22935%22%20cy%3D%22204%22%20r%3D%221.1%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%22982%22%20cy%3D%22459%22%20r%3D%222.4%22%20opacity%3D%220.48%22%2F%3E%3Ccircle%20cx%3D%22877%22%20cy%3D%22614%22%20r%3D%221.8%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22831%22%20cy%3D%22593%22%20r%3D%221.4%22%20opacity%3D%220.82%22%2F%3E%3Ccircle%20cx%3D%221080%22%20cy%3D%22521%22%20r%3D%221.4%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22939%22%20cy%3D%22465%22%20r%3D%221.1%22%20opacity%3D%220.44%22%2F%3E%3Ccircle%20cx%3D%2233%22%20cy%3D%22366%22%20r%3D%221.1%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22187%22%20cy%3D%22340%22%20r%3D%220.9%22%20opacity%3D%220.5%22%2F%3E%3Ccircle%20cx%3D%22311%22%20cy%3D%22260%22%20r%3D%221.4%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%22795%22%20cy%3D%22505%22%20r%3D%222.4%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%2233%22%20cy%3D%22554%22%20r%3D%221.4%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22543%22%20cy%3D%22331%22%20r%3D%221.1%22%20opacity%3D%220.63%22%2F%3E%3Ccircle%20cx%3D%221052%22%20cy%3D%22584%22%20r%3D%222.4%22%20opacity%3D%220.77%22%2F%3E%3Ccircle%20cx%3D%22772%22%20cy%3D%22227%22%20r%3D%221.1%22%20opacity%3D%220.83%22%2F%3E%3Ccircle%20cx%3D%22264%22%20cy%3D%22591%22%20r%3D%221.8%22%20opacity%3D%220.24%22%2F%3E%3Ccircle%20cx%3D%22461%22%20cy%3D%22321%22%20r%3D%220.9%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%22594%22%20cy%3D%22203%22%20r%3D%221.1%22%20opacity%3D%220.43%22%2F%3E%3Ccircle%20cx%3D%2287%22%20cy%3D%22582%22%20r%3D%221.4%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%221112%22%20cy%3D%22166%22%20r%3D%222.4%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%221126%22%20cy%3D%22601%22%20r%3D%221.1%22%20opacity%3D%220.27%22%2F%3E%3Ccircle%20cx%3D%22348%22%20cy%3D%22310%22%20r%3D%221.4%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%221193%22%20cy%3D%2223%22%20r%3D%222.4%22%20opacity%3D%220.52%22%2F%3E%3Ccircle%20cx%3D%22128%22%20cy%3D%22508%22%20r%3D%221.8%22%20opacity%3D%220.52%22%2F%3E%3Ccircle%20cx%3D%221066%22%20cy%3D%22602%22%20r%3D%221.1%22%20opacity%3D%220.84%22%2F%3E%3Ccircle%20cx%3D%22411%22%20cy%3D%22516%22%20r%3D%221.1%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%2285%22%20cy%3D%22459%22%20r%3D%221.1%22%20opacity%3D%220.16%22%2F%3E%3Ccircle%20cx%3D%221182%22%20cy%3D%22201%22%20r%3D%221.4%22%20opacity%3D%220.28%22%2F%3E%3Ccircle%20cx%3D%22220%22%20cy%3D%22208%22%20r%3D%221.4%22%20opacity%3D%220.49%22%2F%3E%3Ccircle%20cx%3D%22241%22%20cy%3D%22313%22%20r%3D%221.4%22%20opacity%3D%220.72%22%2F%3E%3Ccircle%20cx%3D%22173%22%20cy%3D%22364%22%20r%3D%221.4%22%20opacity%3D%220.34%22%2F%3E%3Ccircle%20cx%3D%22279%22%20cy%3D%22363%22%20r%3D%221.1%22%20opacity%3D%220.6%22%2F%3E%3Ccircle%20cx%3D%22859%22%20cy%3D%22545%22%20r%3D%221.4%22%20opacity%3D%220.65%22%2F%3E%3Ccircle%20cx%3D%22174%22%20cy%3D%22511%22%20r%3D%222.4%22%20opacity%3D%220.58%22%2F%3E%3Ccircle%20cx%3D%22881%22%20cy%3D%22504%22%20r%3D%222.4%22%20opacity%3D%220.67%22%2F%3E%3Ccircle%20cx%3D%22682%22%20cy%3D%22504%22%20r%3D%222.4%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22853%22%20cy%3D%22593%22%20r%3D%220.9%22%20opacity%3D%220.14%22%2F%3E%3Ccircle%20cx%3D%22160%22%20cy%3D%22224%22%20r%3D%221.8%22%20opacity%3D%220.53%22%2F%3E%3Ccircle%20cx%3D%221171%22%20cy%3D%22306%22%20r%3D%221.8%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%22238%22%20cy%3D%22372%22%20r%3D%221.4%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22588%22%20cy%3D%22439%22%20r%3D%221.8%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22142%22%20cy%3D%22554%22%20r%3D%220.9%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%221162%22%20cy%3D%22279%22%20r%3D%221.1%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%221117%22%20cy%3D%2246%22%20r%3D%222.4%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22597%22%20cy%3D%22543%22%20r%3D%221.1%22%20opacity%3D%220.12%22%2F%3E%3Ccircle%20cx%3D%22590%22%20cy%3D%22279%22%20r%3D%221.1%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%221128%22%20cy%3D%22121%22%20r%3D%221.4%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%2292%22%20cy%3D%22574%22%20r%3D%220.9%22%20opacity%3D%220.32%22%2F%3E%3Ccircle%20cx%3D%2262%22%20cy%3D%22410%22%20r%3D%221.1%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22319%22%20cy%3D%22317%22%20r%3D%221.4%22%20opacity%3D%220.69%22%2F%3E%3Ccircle%20cx%3D%22480%22%20cy%3D%22543%22%20r%3D%221.1%22%20opacity%3D%220.65%22%2F%3E%3Ccircle%20cx%3D%2259%22%20cy%3D%22454%22%20r%3D%221.1%22%20opacity%3D%220.59%22%2F%3E%3Ccircle%20cx%3D%22153%22%20cy%3D%22293%22%20r%3D%221.4%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22886%22%20cy%3D%22405%22%20r%3D%221.1%22%20opacity%3D%220.34%22%2F%3E%3Ccircle%20cx%3D%22669%22%20cy%3D%22245%22%20r%3D%221.1%22%20opacity%3D%220.17%22%2F%3E%3Ccircle%20cx%3D%22601%22%20cy%3D%22503%22%20r%3D%221.8%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%221196%22%20cy%3D%22279%22%20r%3D%221.1%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22210%22%20cy%3D%22345%22%20r%3D%221.4%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22684%22%20cy%3D%22550%22%20r%3D%221.8%22%20opacity%3D%220.4%22%2F%3E%3Ccircle%20cx%3D%22432%22%20cy%3D%22426%22%20r%3D%221.1%22%20opacity%3D%220.19%22%2F%3E%3Ccircle%20cx%3D%221114%22%20cy%3D%22327%22%20r%3D%221.8%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22818%22%20cy%3D%22584%22%20r%3D%221.8%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%221155%22%20cy%3D%22388%22%20r%3D%221.8%22%20opacity%3D%220.63%22%2F%3E%3Ccircle%20cx%3D%22699%22%20cy%3D%22241%22%20r%3D%222.4%22%20opacity%3D%220.12%22%2F%3E%3Ccircle%20cx%3D%22645%22%20cy%3D%22618%22%20r%3D%221.4%22%20opacity%3D%220.59%22%2F%3E%3Ccircle%20cx%3D%221061%22%20cy%3D%22295%22%20r%3D%221.1%22%20opacity%3D%220.14%22%2F%3E%3Ccircle%20cx%3D%22494%22%20cy%3D%22403%22%20r%3D%221.1%22%20opacity%3D%220.48%22%2F%3E%3Ccircle%20cx%3D%22809%22%20cy%3D%22260%22%20r%3D%221.8%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%22505%22%20cy%3D%22423%22%20r%3D%221.4%22%20opacity%3D%220.66%22%2F%3E%3Ccircle%20cx%3D%22374%22%20cy%3D%22508%22%20r%3D%221.1%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22732%22%20cy%3D%22556%22%20r%3D%220.9%22%20opacity%3D%220.81%22%2F%3E%3Ccircle%20cx%3D%22176%22%20cy%3D%22244%22%20r%3D%222.4%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%221078%22%20cy%3D%22548%22%20r%3D%220.9%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%22422%22%20cy%3D%22592%22%20r%3D%221.1%22%20opacity%3D%220.4%22%2F%3E%3Ccircle%20cx%3D%22105%22%20cy%3D%22437%22%20r%3D%222.4%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22920%22%20cy%3D%2225%22%20r%3D%220.9%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%2274%22%20cy%3D%22121%22%20r%3D%222.4%22%20opacity%3D%220.37%22%2F%3E%3Ccircle%20cx%3D%22327%22%20cy%3D%22594%22%20r%3D%221.4%22%20opacity%3D%220.66%22%2F%3E%3Ccircle%20cx%3D%22827%22%20cy%3D%22573%22%20r%3D%222.4%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22761%22%20cy%3D%22585%22%20r%3D%221.1%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%22948%22%20cy%3D%22566%22%20r%3D%221.1%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%22220%22%20cy%3D%22498%22%20r%3D%221.1%22%20opacity%3D%220.56%22%2F%3E%3Ccircle%20cx%3D%22903%22%20cy%3D%22153%22%20r%3D%220.9%22%20opacity%3D%220.47%22%2F%3E%3Ccircle%20cx%3D%221167%22%20cy%3D%22107%22%20r%3D%221.8%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22353%22%20cy%3D%22351%22%20r%3D%221.4%22%20opacity%3D%220.27%22%2F%3E%3Ccircle%20cx%3D%22297%22%20cy%3D%22152%22%20r%3D%222.4%22%20opacity%3D%220.26%22%2F%3E%3Ccircle%20cx%3D%22632%22%20cy%3D%22403%22%20r%3D%221.8%22%20opacity%3D%220.84%22%2F%3E%3Ccircle%20cx%3D%221009%22%20cy%3D%22567%22%20r%3D%221.4%22%20opacity%3D%220.29%22%2F%3E%3Ccircle%20cx%3D%22852%22%20cy%3D%22217%22%20r%3D%221.4%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%22782%22%20cy%3D%22126%22%20r%3D%221.4%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%22446%22%20cy%3D%22385%22%20r%3D%220.9%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22658%22%20cy%3D%2239%22%20r%3D%221.8%22%20opacity%3D%220.6%22%2F%3E%3Ccircle%20cx%3D%22801%22%20cy%3D%22259%22%20r%3D%222.4%22%20opacity%3D%220.77%22%2F%3E%3Ccircle%20cx%3D%22963%22%20cy%3D%22400%22%20r%3D%221.8%22%20opacity%3D%220.27%22%2F%3E%3Ccircle%20cx%3D%227%22%20cy%3D%22559%22%20r%3D%220.9%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%221059%22%20cy%3D%22286%22%20r%3D%220.9%22%20opacity%3D%220.16%22%2F%3E%3Ccircle%20cx%3D%22171%22%20cy%3D%22500%22%20r%3D%222.4%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22445%22%20cy%3D%22313%22%20r%3D%221.4%22%20opacity%3D%220.24%22%2F%3E%3Ccircle%20cx%3D%22904%22%20cy%3D%22491%22%20r%3D%221.4%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%221132%22%20cy%3D%22605%22%20r%3D%220.9%22%20opacity%3D%220.56%22%2F%3E%3Ccircle%20cx%3D%22826%22%20cy%3D%22553%22%20r%3D%221.1%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22188%22%20cy%3D%22223%22%20r%3D%221.1%22%20opacity%3D%220.15%22%2F%3E%3Ccircle%20cx%3D%22675%22%20cy%3D%22470%22%20r%3D%221.4%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%22511%22%20cy%3D%22408%22%20r%3D%221.8%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%224%22%20cy%3D%22611%22%20r%3D%221.8%22%20opacity%3D%220.68%22%2F%3E%3Ccircle%20cx%3D%22936%22%20cy%3D%22284%22%20r%3D%221.8%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22376%22%20cy%3D%22447%22%20r%3D%222.4%22%20opacity%3D%220.77%22%2F%3E%3Ccircle%20cx%3D%22783%22%20cy%3D%22486%22%20r%3D%220.9%22%20opacity%3D%220.85%22%2F%3E%3Ccircle%20cx%3D%22879%22%20cy%3D%22505%22%20r%3D%221.8%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%22973%22%20cy%3D%22493%22%20r%3D%221.1%22%20opacity%3D%220.17%22%2F%3E%3Ccircle%20cx%3D%22421%22%20cy%3D%22469%22%20r%3D%222.4%22%20opacity%3D%220.32%22%2F%3E%3Ccircle%20cx%3D%22607%22%20cy%3D%22198%22%20r%3D%221.1%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22452%22%20cy%3D%22491%22%20r%3D%222.4%22%20opacity%3D%220.16%22%2F%3E%3Ccircle%20cx%3D%221030%22%20cy%3D%22599%22%20r%3D%222.4%22%20opacity%3D%220.54%22%2F%3E%3Ccircle%20cx%3D%22318%22%20cy%3D%22614%22%20r%3D%221.4%22%20opacity%3D%220.36%22%2F%3E%3Ccircle%20cx%3D%22372%22%20cy%3D%22599%22%20r%3D%221.4%22%20opacity%3D%220.66%22%2F%3E%3Ccircle%20cx%3D%22751%22%20cy%3D%22259%22%20r%3D%220.9%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%22273%22%20cy%3D%22405%22%20r%3D%220.9%22%20opacity%3D%220.53%22%2F%3E%3Ccircle%20cx%3D%22496%22%20cy%3D%22187%22%20r%3D%221.4%22%20opacity%3D%220.58%22%2F%3E%3Ccircle%20cx%3D%22292%22%20cy%3D%2293%22%20r%3D%221.1%22%20opacity%3D%220.76%22%2F%3E%3Ccircle%20cx%3D%22939%22%20cy%3D%22249%22%20r%3D%220.9%22%20opacity%3D%220.16%22%2F%3E%3Ccircle%20cx%3D%22985%22%20cy%3D%22553%22%20r%3D%222.4%22%20opacity%3D%220.44%22%2F%3E%3Ccircle%20cx%3D%221125%22%20cy%3D%22455%22%20r%3D%220.9%22%20opacity%3D%220.15%22%2F%3E%3Ccircle%20cx%3D%22638%22%20cy%3D%22252%22%20r%3D%220.9%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22771%22%20cy%3D%22402%22%20r%3D%222.4%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%22371%22%20cy%3D%22186%22%20r%3D%221.8%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%228%22%20cy%3D%22524%22%20r%3D%221.8%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%22314%22%20cy%3D%22399%22%20r%3D%221.4%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%22319%22%20cy%3D%22343%22%20r%3D%222.4%22%20opacity%3D%220.83%22%2F%3E%3Ccircle%20cx%3D%22355%22%20cy%3D%22576%22%20r%3D%220.9%22%20opacity%3D%220.76%22%2F%3E%3Ccircle%20cx%3D%2218%22%20cy%3D%22161%22%20r%3D%221.1%22%20opacity%3D%220.81%22%2F%3E%3Ccircle%20cx%3D%22757%22%20cy%3D%22430%22%20r%3D%222.4%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22525%22%20cy%3D%22449%22%20r%3D%221.4%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22206%22%20cy%3D%2220%22%20r%3D%222.4%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%22414%22%20cy%3D%2288%22%20r%3D%220.9%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%22772%22%20cy%3D%2226%22%20r%3D%220.9%22%20opacity%3D%220.17%22%2F%3E%3Ccircle%20cx%3D%22983%22%20cy%3D%22553%22%20r%3D%221.8%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%22247%22%20cy%3D%2269%22%20r%3D%220.9%22%20opacity%3D%220.72%22%2F%3E%3Ccircle%20cx%3D%22758%22%20cy%3D%22178%22%20r%3D%220.9%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22923%22%20cy%3D%22373%22%20r%3D%221.4%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22109%22%20cy%3D%22508%22%20r%3D%220.9%22%20opacity%3D%220.5%22%2F%3E%3Ccircle%20cx%3D%22346%22%20cy%3D%22465%22%20r%3D%221.4%22%20opacity%3D%220.48%22%2F%3E%3Ccircle%20cx%3D%22590%22%20cy%3D%22494%22%20r%3D%221.8%22%20opacity%3D%220.55%22%2F%3E%3Ccircle%20cx%3D%22114%22%20cy%3D%22576%22%20r%3D%220.9%22%20opacity%3D%220.43%22%2F%3E%3Ccircle%20cx%3D%22775%22%20cy%3D%22231%22%20r%3D%221.8%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%22905%22%20cy%3D%22467%22%20r%3D%221.4%22%20opacity%3D%220.54%22%2F%3E%3Ccircle%20cx%3D%22626%22%20cy%3D%22538%22%20r%3D%222.4%22%20opacity%3D%220.66%22%2F%3E%3Ccircle%20cx%3D%221062%22%20cy%3D%22148%22%20r%3D%221.4%22%20opacity%3D%220.67%22%2F%3E%3Ccircle%20cx%3D%221170%22%20cy%3D%22448%22%20r%3D%221.4%22%20opacity%3D%220.24%22%2F%3E%3Ccircle%20cx%3D%22954%22%20cy%3D%22455%22%20r%3D%221.1%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%221023%22%20cy%3D%22435%22%20r%3D%221.8%22%20opacity%3D%220.74%22%2F%3E%3Ccircle%20cx%3D%22770%22%20cy%3D%22362%22%20r%3D%221.1%22%20opacity%3D%220.59%22%2F%3E%3Ccircle%20cx%3D%22856%22%20cy%3D%22390%22%20r%3D%221.8%22%20opacity%3D%220.47%22%2F%3E%3Ccircle%20cx%3D%2224%22%20cy%3D%22532%22%20r%3D%221.1%22%20opacity%3D%220.77%22%2F%3E%3Ccircle%20cx%3D%2219%22%20cy%3D%22491%22%20r%3D%221.4%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%22471%22%20cy%3D%22473%22%20r%3D%222.4%22%20opacity%3D%220.38%22%2F%3E%3Ccircle%20cx%3D%22838%22%20cy%3D%22218%22%20r%3D%221.1%22%20opacity%3D%220.34%22%2F%3E%3Ccircle%20cx%3D%22481%22%20cy%3D%22591%22%20r%3D%221.8%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22197%22%20cy%3D%22576%22%20r%3D%221.1%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22979%22%20cy%3D%22290%22%20r%3D%222.4%22%20opacity%3D%220.59%22%2F%3E%3Ccircle%20cx%3D%22277%22%20cy%3D%22437%22%20r%3D%221.8%22%20opacity%3D%220.62%22%2F%3E%3Ccircle%20cx%3D%22578%22%20cy%3D%22499%22%20r%3D%221.4%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22362%22%20cy%3D%22297%22%20r%3D%220.9%22%20opacity%3D%220.6%22%2F%3E%3Ccircle%20cx%3D%22435%22%20cy%3D%22576%22%20r%3D%220.9%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%22789%22%20cy%3D%22130%22%20r%3D%221.4%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22932%22%20cy%3D%22215%22%20r%3D%221.8%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22201%22%20cy%3D%22553%22%20r%3D%220.9%22%20opacity%3D%220.61%22%2F%3E%3Ccircle%20cx%3D%22237%22%20cy%3D%22430%22%20r%3D%221.8%22%20opacity%3D%220.61%22%2F%3E%3Ccircle%20cx%3D%22581%22%20cy%3D%22561%22%20r%3D%221.1%22%20opacity%3D%220.48%22%2F%3E%3Ccircle%20cx%3D%22647%22%20cy%3D%22535%22%20r%3D%221.4%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%2241%22%20cy%3D%22445%22%20r%3D%221.4%22%20opacity%3D%220.19%22%2F%3E%3Ccircle%20cx%3D%22665%22%20cy%3D%22566%22%20r%3D%221.4%22%20opacity%3D%220.43%22%2F%3E%3Ccircle%20cx%3D%22665%22%20cy%3D%22513%22%20r%3D%221.8%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22752%22%20cy%3D%22432%22%20r%3D%220.9%22%20opacity%3D%220.28%22%2F%3E%3Ccircle%20cx%3D%22122%22%20cy%3D%22112%22%20r%3D%220.9%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22944%22%20cy%3D%22349%22%20r%3D%221.4%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%22694%22%20cy%3D%22567%22%20r%3D%222.4%22%20opacity%3D%220.15%22%2F%3E%3Ccircle%20cx%3D%22143%22%20cy%3D%22502%22%20r%3D%221.8%22%20opacity%3D%220.45%22%2F%3E%3Ccircle%20cx%3D%221125%22%20cy%3D%22608%22%20r%3D%221.8%22%20opacity%3D%220.52%22%2F%3E%3Ccircle%20cx%3D%22752%22%20cy%3D%22265%22%20r%3D%220.9%22%20opacity%3D%220.84%22%2F%3E%3Ccircle%20cx%3D%221030%22%20cy%3D%22135%22%20r%3D%221.8%22%20opacity%3D%220.13%22%2F%3E%3Ccircle%20cx%3D%22856%22%20cy%3D%22530%22%20r%3D%220.9%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%221068%22%20cy%3D%22566%22%20r%3D%220.9%22%20opacity%3D%220.13%22%2F%3E%3Ccircle%20cx%3D%22199%22%20cy%3D%22534%22%20r%3D%220.9%22%20opacity%3D%220.35%22%2F%3E%3Ccircle%20cx%3D%221139%22%20cy%3D%22451%22%20r%3D%221.1%22%20opacity%3D%220.23%22%2F%3E%3Ccircle%20cx%3D%22943%22%20cy%3D%22586%22%20r%3D%222.4%22%20opacity%3D%220.36%22%2F%3E%3Ccircle%20cx%3D%22826%22%20cy%3D%22199%22%20r%3D%221.1%22%20opacity%3D%220.55%22%2F%3E%3Ccircle%20cx%3D%22979%22%20cy%3D%22550%22%20r%3D%221.1%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%221041%22%20cy%3D%22355%22%20r%3D%222.4%22%20opacity%3D%220.62%22%2F%3E%3Ccircle%20cx%3D%221096%22%20cy%3D%22215%22%20r%3D%222.4%22%20opacity%3D%220.47%22%2F%3E%3Ccircle%20cx%3D%22458%22%20cy%3D%22488%22%20r%3D%221.1%22%20opacity%3D%220.35%22%2F%3E%3Ccircle%20cx%3D%221111%22%20cy%3D%22364%22%20r%3D%221.8%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22105%22%20cy%3D%22500%22%20r%3D%221.1%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22385%22%20cy%3D%22314%22%20r%3D%221.1%22%20opacity%3D%220.26%22%2F%3E%3Ccircle%20cx%3D%22217%22%20cy%3D%22435%22%20r%3D%222.4%22%20opacity%3D%220.38%22%2F%3E%3Ccircle%20cx%3D%22936%22%20cy%3D%22531%22%20r%3D%221.8%22%20opacity%3D%220.39%22%2F%3E%3Ccircle%20cx%3D%22187%22%20cy%3D%22370%22%20r%3D%222.4%22%20opacity%3D%220.56%22%2F%3E%3Ccircle%20cx%3D%22679%22%20cy%3D%22364%22%20r%3D%221.4%22%20opacity%3D%220.43%22%2F%3E%3Ccircle%20cx%3D%221156%22%20cy%3D%22157%22%20r%3D%221.1%22%20opacity%3D%220.85%22%2F%3E%3Ccircle%20cx%3D%22454%22%20cy%3D%2217%22%20r%3D%221.4%22%20opacity%3D%220.76%22%2F%3E%3Ccircle%20cx%3D%22550%22%20cy%3D%22587%22%20r%3D%220.9%22%20opacity%3D%220.75%22%2F%3E%3Ccircle%20cx%3D%22768%22%20cy%3D%22572%22%20r%3D%220.9%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22192%22%20cy%3D%22599%22%20r%3D%221.1%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%221130%22%20cy%3D%22584%22%20r%3D%222.4%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%221127%22%20cy%3D%22420%22%20r%3D%222.4%22%20opacity%3D%220.44%22%2F%3E%3Ccircle%20cx%3D%22783%22%20cy%3D%22292%22%20r%3D%221.8%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%22172%22%20cy%3D%22420%22%20r%3D%221.1%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22188%22%20cy%3D%22516%22%20r%3D%222.4%22%20opacity%3D%220.75%22%2F%3E%3Ccircle%20cx%3D%22116%22%20cy%3D%22576%22%20r%3D%220.9%22%20opacity%3D%220.45%22%2F%3E%3Ccircle%20cx%3D%22408%22%20cy%3D%22510%22%20r%3D%221.4%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%22320%22%20cy%3D%22255%22%20r%3D%221.4%22%20opacity%3D%220.54%22%2F%3E%3Ccircle%20cx%3D%22356%22%20cy%3D%22499%22%20r%3D%220.9%22%20opacity%3D%220.35%22%2F%3E%3Ccircle%20cx%3D%2268%22%20cy%3D%22555%22%20r%3D%221.1%22%20opacity%3D%220.53%22%2F%3E%3Ccircle%20cx%3D%221165%22%20cy%3D%22268%22%20r%3D%221.1%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%2269%22%20cy%3D%22450%22%20r%3D%220.9%22%20opacity%3D%220.44%22%2F%3E%3Ccircle%20cx%3D%22609%22%20cy%3D%22317%22%20r%3D%222.4%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%22626%22%20cy%3D%22143%22%20r%3D%222.4%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%22105%22%20cy%3D%22377%22%20r%3D%221.4%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%22164%22%20cy%3D%22415%22%20r%3D%221.1%22%20opacity%3D%220.55%22%2F%3E%3Ccircle%20cx%3D%22490%22%20cy%3D%22447%22%20r%3D%221.4%22%20opacity%3D%220.36%22%2F%3E%3Ccircle%20cx%3D%221010%22%20cy%3D%22536%22%20r%3D%220.9%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%2244%22%20cy%3D%22435%22%20r%3D%220.9%22%20opacity%3D%220.38%22%2F%3E%3Ccircle%20cx%3D%221119%22%20cy%3D%22601%22%20r%3D%221.4%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%22980%22%20cy%3D%22537%22%20r%3D%221.8%22%20opacity%3D%220.54%22%2F%3E%3Ccircle%20cx%3D%221078%22%20cy%3D%22181%22%20r%3D%221.8%22%20opacity%3D%220.45%22%2F%3E%3Ccircle%20cx%3D%2231%22%20cy%3D%22499%22%20r%3D%221.1%22%20opacity%3D%220.83%22%2F%3E%3Ccircle%20cx%3D%22268%22%20cy%3D%22113%22%20r%3D%221.4%22%20opacity%3D%220.53%22%2F%3E%3Ccircle%20cx%3D%22764%22%20cy%3D%22288%22%20r%3D%221.8%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%221043%22%20cy%3D%22445%22%20r%3D%220.9%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22703%22%20cy%3D%22472%22%20r%3D%220.9%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%22932%22%20cy%3D%22210%22%20r%3D%221.4%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%22424%22%20cy%3D%22540%22%20r%3D%220.9%22%20opacity%3D%220.39%22%2F%3E%3Ccircle%20cx%3D%22319%22%20cy%3D%22421%22%20r%3D%222.4%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%2243%22%20cy%3D%2262%22%20r%3D%220.9%22%20opacity%3D%220.44%22%2F%3E%3C%2Fsvg%3E");
  --dots-op: .30;
  --glow: radial-gradient(70% 55% at 50% 0%, rgba(0,114,206,.20), transparent 70%);
}

:root[data-theme="light"] {
  --dots: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%201200%20620%22%20preserveAspectRatio%3D%22xMidYMid%20slice%22%20fill%3D%22%25230a2540%22%3E%3Ccircle%20cx%3D%2287%22%20cy%3D%22332%22%20r%3D%220.9%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%22289%22%20cy%3D%22342%22%20r%3D%222.4%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%2256%22%20cy%3D%22532%22%20r%3D%221.1%22%20opacity%3D%220.51%22%2F%3E%3Ccircle%20cx%3D%22124%22%20cy%3D%22354%22%20r%3D%220.9%22%20opacity%3D%220.52%22%2F%3E%3Ccircle%20cx%3D%22816%22%20cy%3D%22265%22%20r%3D%222.4%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22434%22%20cy%3D%22154%22%20r%3D%221.1%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%22360%22%20cy%3D%22307%22%20r%3D%221.8%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%22688%22%20cy%3D%22543%22%20r%3D%221.4%22%20opacity%3D%220.55%22%2F%3E%3Ccircle%20cx%3D%2273%22%20cy%3D%22435%22%20r%3D%221.8%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%22463%22%20cy%3D%22415%22%20r%3D%221.8%22%20opacity%3D%220.38%22%2F%3E%3Ccircle%20cx%3D%22733%22%20cy%3D%22306%22%20r%3D%221.4%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%22334%22%20cy%3D%22257%22%20r%3D%221.8%22%20opacity%3D%220.82%22%2F%3E%3Ccircle%20cx%3D%22936%22%20cy%3D%22542%22%20r%3D%221.8%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22473%22%20cy%3D%22299%22%20r%3D%221.1%22%20opacity%3D%220.17%22%2F%3E%3Ccircle%20cx%3D%22122%22%20cy%3D%22225%22%20r%3D%221.1%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22318%22%20cy%3D%22514%22%20r%3D%220.9%22%20opacity%3D%220.27%22%2F%3E%3Ccircle%20cx%3D%221097%22%20cy%3D%22470%22%20r%3D%220.9%22%20opacity%3D%220.63%22%2F%3E%3Ccircle%20cx%3D%22313%22%20cy%3D%22227%22%20r%3D%221.1%22%20opacity%3D%220.51%22%2F%3E%3Ccircle%20cx%3D%22935%22%20cy%3D%22204%22%20r%3D%221.1%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%22982%22%20cy%3D%22459%22%20r%3D%222.4%22%20opacity%3D%220.48%22%2F%3E%3Ccircle%20cx%3D%22877%22%20cy%3D%22614%22%20r%3D%221.8%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22831%22%20cy%3D%22593%22%20r%3D%221.4%22%20opacity%3D%220.82%22%2F%3E%3Ccircle%20cx%3D%221080%22%20cy%3D%22521%22%20r%3D%221.4%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22939%22%20cy%3D%22465%22%20r%3D%221.1%22%20opacity%3D%220.44%22%2F%3E%3Ccircle%20cx%3D%2233%22%20cy%3D%22366%22%20r%3D%221.1%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22187%22%20cy%3D%22340%22%20r%3D%220.9%22%20opacity%3D%220.5%22%2F%3E%3Ccircle%20cx%3D%22311%22%20cy%3D%22260%22%20r%3D%221.4%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%22795%22%20cy%3D%22505%22%20r%3D%222.4%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%2233%22%20cy%3D%22554%22%20r%3D%221.4%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22543%22%20cy%3D%22331%22%20r%3D%221.1%22%20opacity%3D%220.63%22%2F%3E%3Ccircle%20cx%3D%221052%22%20cy%3D%22584%22%20r%3D%222.4%22%20opacity%3D%220.77%22%2F%3E%3Ccircle%20cx%3D%22772%22%20cy%3D%22227%22%20r%3D%221.1%22%20opacity%3D%220.83%22%2F%3E%3Ccircle%20cx%3D%22264%22%20cy%3D%22591%22%20r%3D%221.8%22%20opacity%3D%220.24%22%2F%3E%3Ccircle%20cx%3D%22461%22%20cy%3D%22321%22%20r%3D%220.9%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%22594%22%20cy%3D%22203%22%20r%3D%221.1%22%20opacity%3D%220.43%22%2F%3E%3Ccircle%20cx%3D%2287%22%20cy%3D%22582%22%20r%3D%221.4%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%221112%22%20cy%3D%22166%22%20r%3D%222.4%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%221126%22%20cy%3D%22601%22%20r%3D%221.1%22%20opacity%3D%220.27%22%2F%3E%3Ccircle%20cx%3D%22348%22%20cy%3D%22310%22%20r%3D%221.4%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%221193%22%20cy%3D%2223%22%20r%3D%222.4%22%20opacity%3D%220.52%22%2F%3E%3Ccircle%20cx%3D%22128%22%20cy%3D%22508%22%20r%3D%221.8%22%20opacity%3D%220.52%22%2F%3E%3Ccircle%20cx%3D%221066%22%20cy%3D%22602%22%20r%3D%221.1%22%20opacity%3D%220.84%22%2F%3E%3Ccircle%20cx%3D%22411%22%20cy%3D%22516%22%20r%3D%221.1%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%2285%22%20cy%3D%22459%22%20r%3D%221.1%22%20opacity%3D%220.16%22%2F%3E%3Ccircle%20cx%3D%221182%22%20cy%3D%22201%22%20r%3D%221.4%22%20opacity%3D%220.28%22%2F%3E%3Ccircle%20cx%3D%22220%22%20cy%3D%22208%22%20r%3D%221.4%22%20opacity%3D%220.49%22%2F%3E%3Ccircle%20cx%3D%22241%22%20cy%3D%22313%22%20r%3D%221.4%22%20opacity%3D%220.72%22%2F%3E%3Ccircle%20cx%3D%22173%22%20cy%3D%22364%22%20r%3D%221.4%22%20opacity%3D%220.34%22%2F%3E%3Ccircle%20cx%3D%22279%22%20cy%3D%22363%22%20r%3D%221.1%22%20opacity%3D%220.6%22%2F%3E%3Ccircle%20cx%3D%22859%22%20cy%3D%22545%22%20r%3D%221.4%22%20opacity%3D%220.65%22%2F%3E%3Ccircle%20cx%3D%22174%22%20cy%3D%22511%22%20r%3D%222.4%22%20opacity%3D%220.58%22%2F%3E%3Ccircle%20cx%3D%22881%22%20cy%3D%22504%22%20r%3D%222.4%22%20opacity%3D%220.67%22%2F%3E%3Ccircle%20cx%3D%22682%22%20cy%3D%22504%22%20r%3D%222.4%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22853%22%20cy%3D%22593%22%20r%3D%220.9%22%20opacity%3D%220.14%22%2F%3E%3Ccircle%20cx%3D%22160%22%20cy%3D%22224%22%20r%3D%221.8%22%20opacity%3D%220.53%22%2F%3E%3Ccircle%20cx%3D%221171%22%20cy%3D%22306%22%20r%3D%221.8%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%22238%22%20cy%3D%22372%22%20r%3D%221.4%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22588%22%20cy%3D%22439%22%20r%3D%221.8%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22142%22%20cy%3D%22554%22%20r%3D%220.9%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%221162%22%20cy%3D%22279%22%20r%3D%221.1%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%221117%22%20cy%3D%2246%22%20r%3D%222.4%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22597%22%20cy%3D%22543%22%20r%3D%221.1%22%20opacity%3D%220.12%22%2F%3E%3Ccircle%20cx%3D%22590%22%20cy%3D%22279%22%20r%3D%221.1%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%221128%22%20cy%3D%22121%22%20r%3D%221.4%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%2292%22%20cy%3D%22574%22%20r%3D%220.9%22%20opacity%3D%220.32%22%2F%3E%3Ccircle%20cx%3D%2262%22%20cy%3D%22410%22%20r%3D%221.1%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22319%22%20cy%3D%22317%22%20r%3D%221.4%22%20opacity%3D%220.69%22%2F%3E%3Ccircle%20cx%3D%22480%22%20cy%3D%22543%22%20r%3D%221.1%22%20opacity%3D%220.65%22%2F%3E%3Ccircle%20cx%3D%2259%22%20cy%3D%22454%22%20r%3D%221.1%22%20opacity%3D%220.59%22%2F%3E%3Ccircle%20cx%3D%22153%22%20cy%3D%22293%22%20r%3D%221.4%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22886%22%20cy%3D%22405%22%20r%3D%221.1%22%20opacity%3D%220.34%22%2F%3E%3Ccircle%20cx%3D%22669%22%20cy%3D%22245%22%20r%3D%221.1%22%20opacity%3D%220.17%22%2F%3E%3Ccircle%20cx%3D%22601%22%20cy%3D%22503%22%20r%3D%221.8%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%221196%22%20cy%3D%22279%22%20r%3D%221.1%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22210%22%20cy%3D%22345%22%20r%3D%221.4%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22684%22%20cy%3D%22550%22%20r%3D%221.8%22%20opacity%3D%220.4%22%2F%3E%3Ccircle%20cx%3D%22432%22%20cy%3D%22426%22%20r%3D%221.1%22%20opacity%3D%220.19%22%2F%3E%3Ccircle%20cx%3D%221114%22%20cy%3D%22327%22%20r%3D%221.8%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22818%22%20cy%3D%22584%22%20r%3D%221.8%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%221155%22%20cy%3D%22388%22%20r%3D%221.8%22%20opacity%3D%220.63%22%2F%3E%3Ccircle%20cx%3D%22699%22%20cy%3D%22241%22%20r%3D%222.4%22%20opacity%3D%220.12%22%2F%3E%3Ccircle%20cx%3D%22645%22%20cy%3D%22618%22%20r%3D%221.4%22%20opacity%3D%220.59%22%2F%3E%3Ccircle%20cx%3D%221061%22%20cy%3D%22295%22%20r%3D%221.1%22%20opacity%3D%220.14%22%2F%3E%3Ccircle%20cx%3D%22494%22%20cy%3D%22403%22%20r%3D%221.1%22%20opacity%3D%220.48%22%2F%3E%3Ccircle%20cx%3D%22809%22%20cy%3D%22260%22%20r%3D%221.8%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%22505%22%20cy%3D%22423%22%20r%3D%221.4%22%20opacity%3D%220.66%22%2F%3E%3Ccircle%20cx%3D%22374%22%20cy%3D%22508%22%20r%3D%221.1%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22732%22%20cy%3D%22556%22%20r%3D%220.9%22%20opacity%3D%220.81%22%2F%3E%3Ccircle%20cx%3D%22176%22%20cy%3D%22244%22%20r%3D%222.4%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%221078%22%20cy%3D%22548%22%20r%3D%220.9%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%22422%22%20cy%3D%22592%22%20r%3D%221.1%22%20opacity%3D%220.4%22%2F%3E%3Ccircle%20cx%3D%22105%22%20cy%3D%22437%22%20r%3D%222.4%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22920%22%20cy%3D%2225%22%20r%3D%220.9%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%2274%22%20cy%3D%22121%22%20r%3D%222.4%22%20opacity%3D%220.37%22%2F%3E%3Ccircle%20cx%3D%22327%22%20cy%3D%22594%22%20r%3D%221.4%22%20opacity%3D%220.66%22%2F%3E%3Ccircle%20cx%3D%22827%22%20cy%3D%22573%22%20r%3D%222.4%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22761%22%20cy%3D%22585%22%20r%3D%221.1%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%22948%22%20cy%3D%22566%22%20r%3D%221.1%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%22220%22%20cy%3D%22498%22%20r%3D%221.1%22%20opacity%3D%220.56%22%2F%3E%3Ccircle%20cx%3D%22903%22%20cy%3D%22153%22%20r%3D%220.9%22%20opacity%3D%220.47%22%2F%3E%3Ccircle%20cx%3D%221167%22%20cy%3D%22107%22%20r%3D%221.8%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22353%22%20cy%3D%22351%22%20r%3D%221.4%22%20opacity%3D%220.27%22%2F%3E%3Ccircle%20cx%3D%22297%22%20cy%3D%22152%22%20r%3D%222.4%22%20opacity%3D%220.26%22%2F%3E%3Ccircle%20cx%3D%22632%22%20cy%3D%22403%22%20r%3D%221.8%22%20opacity%3D%220.84%22%2F%3E%3Ccircle%20cx%3D%221009%22%20cy%3D%22567%22%20r%3D%221.4%22%20opacity%3D%220.29%22%2F%3E%3Ccircle%20cx%3D%22852%22%20cy%3D%22217%22%20r%3D%221.4%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%22782%22%20cy%3D%22126%22%20r%3D%221.4%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%22446%22%20cy%3D%22385%22%20r%3D%220.9%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22658%22%20cy%3D%2239%22%20r%3D%221.8%22%20opacity%3D%220.6%22%2F%3E%3Ccircle%20cx%3D%22801%22%20cy%3D%22259%22%20r%3D%222.4%22%20opacity%3D%220.77%22%2F%3E%3Ccircle%20cx%3D%22963%22%20cy%3D%22400%22%20r%3D%221.8%22%20opacity%3D%220.27%22%2F%3E%3Ccircle%20cx%3D%227%22%20cy%3D%22559%22%20r%3D%220.9%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%221059%22%20cy%3D%22286%22%20r%3D%220.9%22%20opacity%3D%220.16%22%2F%3E%3Ccircle%20cx%3D%22171%22%20cy%3D%22500%22%20r%3D%222.4%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22445%22%20cy%3D%22313%22%20r%3D%221.4%22%20opacity%3D%220.24%22%2F%3E%3Ccircle%20cx%3D%22904%22%20cy%3D%22491%22%20r%3D%221.4%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%221132%22%20cy%3D%22605%22%20r%3D%220.9%22%20opacity%3D%220.56%22%2F%3E%3Ccircle%20cx%3D%22826%22%20cy%3D%22553%22%20r%3D%221.1%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22188%22%20cy%3D%22223%22%20r%3D%221.1%22%20opacity%3D%220.15%22%2F%3E%3Ccircle%20cx%3D%22675%22%20cy%3D%22470%22%20r%3D%221.4%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%22511%22%20cy%3D%22408%22%20r%3D%221.8%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%224%22%20cy%3D%22611%22%20r%3D%221.8%22%20opacity%3D%220.68%22%2F%3E%3Ccircle%20cx%3D%22936%22%20cy%3D%22284%22%20r%3D%221.8%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22376%22%20cy%3D%22447%22%20r%3D%222.4%22%20opacity%3D%220.77%22%2F%3E%3Ccircle%20cx%3D%22783%22%20cy%3D%22486%22%20r%3D%220.9%22%20opacity%3D%220.85%22%2F%3E%3Ccircle%20cx%3D%22879%22%20cy%3D%22505%22%20r%3D%221.8%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%22973%22%20cy%3D%22493%22%20r%3D%221.1%22%20opacity%3D%220.17%22%2F%3E%3Ccircle%20cx%3D%22421%22%20cy%3D%22469%22%20r%3D%222.4%22%20opacity%3D%220.32%22%2F%3E%3Ccircle%20cx%3D%22607%22%20cy%3D%22198%22%20r%3D%221.1%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22452%22%20cy%3D%22491%22%20r%3D%222.4%22%20opacity%3D%220.16%22%2F%3E%3Ccircle%20cx%3D%221030%22%20cy%3D%22599%22%20r%3D%222.4%22%20opacity%3D%220.54%22%2F%3E%3Ccircle%20cx%3D%22318%22%20cy%3D%22614%22%20r%3D%221.4%22%20opacity%3D%220.36%22%2F%3E%3Ccircle%20cx%3D%22372%22%20cy%3D%22599%22%20r%3D%221.4%22%20opacity%3D%220.66%22%2F%3E%3Ccircle%20cx%3D%22751%22%20cy%3D%22259%22%20r%3D%220.9%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%22273%22%20cy%3D%22405%22%20r%3D%220.9%22%20opacity%3D%220.53%22%2F%3E%3Ccircle%20cx%3D%22496%22%20cy%3D%22187%22%20r%3D%221.4%22%20opacity%3D%220.58%22%2F%3E%3Ccircle%20cx%3D%22292%22%20cy%3D%2293%22%20r%3D%221.1%22%20opacity%3D%220.76%22%2F%3E%3Ccircle%20cx%3D%22939%22%20cy%3D%22249%22%20r%3D%220.9%22%20opacity%3D%220.16%22%2F%3E%3Ccircle%20cx%3D%22985%22%20cy%3D%22553%22%20r%3D%222.4%22%20opacity%3D%220.44%22%2F%3E%3Ccircle%20cx%3D%221125%22%20cy%3D%22455%22%20r%3D%220.9%22%20opacity%3D%220.15%22%2F%3E%3Ccircle%20cx%3D%22638%22%20cy%3D%22252%22%20r%3D%220.9%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22771%22%20cy%3D%22402%22%20r%3D%222.4%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%22371%22%20cy%3D%22186%22%20r%3D%221.8%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%228%22%20cy%3D%22524%22%20r%3D%221.8%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%22314%22%20cy%3D%22399%22%20r%3D%221.4%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%22319%22%20cy%3D%22343%22%20r%3D%222.4%22%20opacity%3D%220.83%22%2F%3E%3Ccircle%20cx%3D%22355%22%20cy%3D%22576%22%20r%3D%220.9%22%20opacity%3D%220.76%22%2F%3E%3Ccircle%20cx%3D%2218%22%20cy%3D%22161%22%20r%3D%221.1%22%20opacity%3D%220.81%22%2F%3E%3Ccircle%20cx%3D%22757%22%20cy%3D%22430%22%20r%3D%222.4%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22525%22%20cy%3D%22449%22%20r%3D%221.4%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22206%22%20cy%3D%2220%22%20r%3D%222.4%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%22414%22%20cy%3D%2288%22%20r%3D%220.9%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%22772%22%20cy%3D%2226%22%20r%3D%220.9%22%20opacity%3D%220.17%22%2F%3E%3Ccircle%20cx%3D%22983%22%20cy%3D%22553%22%20r%3D%221.8%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%22247%22%20cy%3D%2269%22%20r%3D%220.9%22%20opacity%3D%220.72%22%2F%3E%3Ccircle%20cx%3D%22758%22%20cy%3D%22178%22%20r%3D%220.9%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22923%22%20cy%3D%22373%22%20r%3D%221.4%22%20opacity%3D%220.57%22%2F%3E%3Ccircle%20cx%3D%22109%22%20cy%3D%22508%22%20r%3D%220.9%22%20opacity%3D%220.5%22%2F%3E%3Ccircle%20cx%3D%22346%22%20cy%3D%22465%22%20r%3D%221.4%22%20opacity%3D%220.48%22%2F%3E%3Ccircle%20cx%3D%22590%22%20cy%3D%22494%22%20r%3D%221.8%22%20opacity%3D%220.55%22%2F%3E%3Ccircle%20cx%3D%22114%22%20cy%3D%22576%22%20r%3D%220.9%22%20opacity%3D%220.43%22%2F%3E%3Ccircle%20cx%3D%22775%22%20cy%3D%22231%22%20r%3D%221.8%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%22905%22%20cy%3D%22467%22%20r%3D%221.4%22%20opacity%3D%220.54%22%2F%3E%3Ccircle%20cx%3D%22626%22%20cy%3D%22538%22%20r%3D%222.4%22%20opacity%3D%220.66%22%2F%3E%3Ccircle%20cx%3D%221062%22%20cy%3D%22148%22%20r%3D%221.4%22%20opacity%3D%220.67%22%2F%3E%3Ccircle%20cx%3D%221170%22%20cy%3D%22448%22%20r%3D%221.4%22%20opacity%3D%220.24%22%2F%3E%3Ccircle%20cx%3D%22954%22%20cy%3D%22455%22%20r%3D%221.1%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%221023%22%20cy%3D%22435%22%20r%3D%221.8%22%20opacity%3D%220.74%22%2F%3E%3Ccircle%20cx%3D%22770%22%20cy%3D%22362%22%20r%3D%221.1%22%20opacity%3D%220.59%22%2F%3E%3Ccircle%20cx%3D%22856%22%20cy%3D%22390%22%20r%3D%221.8%22%20opacity%3D%220.47%22%2F%3E%3Ccircle%20cx%3D%2224%22%20cy%3D%22532%22%20r%3D%221.1%22%20opacity%3D%220.77%22%2F%3E%3Ccircle%20cx%3D%2219%22%20cy%3D%22491%22%20r%3D%221.4%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%22471%22%20cy%3D%22473%22%20r%3D%222.4%22%20opacity%3D%220.38%22%2F%3E%3Ccircle%20cx%3D%22838%22%20cy%3D%22218%22%20r%3D%221.1%22%20opacity%3D%220.34%22%2F%3E%3Ccircle%20cx%3D%22481%22%20cy%3D%22591%22%20r%3D%221.8%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22197%22%20cy%3D%22576%22%20r%3D%221.1%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22979%22%20cy%3D%22290%22%20r%3D%222.4%22%20opacity%3D%220.59%22%2F%3E%3Ccircle%20cx%3D%22277%22%20cy%3D%22437%22%20r%3D%221.8%22%20opacity%3D%220.62%22%2F%3E%3Ccircle%20cx%3D%22578%22%20cy%3D%22499%22%20r%3D%221.4%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22362%22%20cy%3D%22297%22%20r%3D%220.9%22%20opacity%3D%220.6%22%2F%3E%3Ccircle%20cx%3D%22435%22%20cy%3D%22576%22%20r%3D%220.9%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%22789%22%20cy%3D%22130%22%20r%3D%221.4%22%20opacity%3D%220.3%22%2F%3E%3Ccircle%20cx%3D%22932%22%20cy%3D%22215%22%20r%3D%221.8%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22201%22%20cy%3D%22553%22%20r%3D%220.9%22%20opacity%3D%220.61%22%2F%3E%3Ccircle%20cx%3D%22237%22%20cy%3D%22430%22%20r%3D%221.8%22%20opacity%3D%220.61%22%2F%3E%3Ccircle%20cx%3D%22581%22%20cy%3D%22561%22%20r%3D%221.1%22%20opacity%3D%220.48%22%2F%3E%3Ccircle%20cx%3D%22647%22%20cy%3D%22535%22%20r%3D%221.4%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%2241%22%20cy%3D%22445%22%20r%3D%221.4%22%20opacity%3D%220.19%22%2F%3E%3Ccircle%20cx%3D%22665%22%20cy%3D%22566%22%20r%3D%221.4%22%20opacity%3D%220.43%22%2F%3E%3Ccircle%20cx%3D%22665%22%20cy%3D%22513%22%20r%3D%221.8%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22752%22%20cy%3D%22432%22%20r%3D%220.9%22%20opacity%3D%220.28%22%2F%3E%3Ccircle%20cx%3D%22122%22%20cy%3D%22112%22%20r%3D%220.9%22%20opacity%3D%220.79%22%2F%3E%3Ccircle%20cx%3D%22944%22%20cy%3D%22349%22%20r%3D%221.4%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%22694%22%20cy%3D%22567%22%20r%3D%222.4%22%20opacity%3D%220.15%22%2F%3E%3Ccircle%20cx%3D%22143%22%20cy%3D%22502%22%20r%3D%221.8%22%20opacity%3D%220.45%22%2F%3E%3Ccircle%20cx%3D%221125%22%20cy%3D%22608%22%20r%3D%221.8%22%20opacity%3D%220.52%22%2F%3E%3Ccircle%20cx%3D%22752%22%20cy%3D%22265%22%20r%3D%220.9%22%20opacity%3D%220.84%22%2F%3E%3Ccircle%20cx%3D%221030%22%20cy%3D%22135%22%20r%3D%221.8%22%20opacity%3D%220.13%22%2F%3E%3Ccircle%20cx%3D%22856%22%20cy%3D%22530%22%20r%3D%220.9%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%221068%22%20cy%3D%22566%22%20r%3D%220.9%22%20opacity%3D%220.13%22%2F%3E%3Ccircle%20cx%3D%22199%22%20cy%3D%22534%22%20r%3D%220.9%22%20opacity%3D%220.35%22%2F%3E%3Ccircle%20cx%3D%221139%22%20cy%3D%22451%22%20r%3D%221.1%22%20opacity%3D%220.23%22%2F%3E%3Ccircle%20cx%3D%22943%22%20cy%3D%22586%22%20r%3D%222.4%22%20opacity%3D%220.36%22%2F%3E%3Ccircle%20cx%3D%22826%22%20cy%3D%22199%22%20r%3D%221.1%22%20opacity%3D%220.55%22%2F%3E%3Ccircle%20cx%3D%22979%22%20cy%3D%22550%22%20r%3D%221.1%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%221041%22%20cy%3D%22355%22%20r%3D%222.4%22%20opacity%3D%220.62%22%2F%3E%3Ccircle%20cx%3D%221096%22%20cy%3D%22215%22%20r%3D%222.4%22%20opacity%3D%220.47%22%2F%3E%3Ccircle%20cx%3D%22458%22%20cy%3D%22488%22%20r%3D%221.1%22%20opacity%3D%220.35%22%2F%3E%3Ccircle%20cx%3D%221111%22%20cy%3D%22364%22%20r%3D%221.8%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22105%22%20cy%3D%22500%22%20r%3D%221.1%22%20opacity%3D%220.41%22%2F%3E%3Ccircle%20cx%3D%22385%22%20cy%3D%22314%22%20r%3D%221.1%22%20opacity%3D%220.26%22%2F%3E%3Ccircle%20cx%3D%22217%22%20cy%3D%22435%22%20r%3D%222.4%22%20opacity%3D%220.38%22%2F%3E%3Ccircle%20cx%3D%22936%22%20cy%3D%22531%22%20r%3D%221.8%22%20opacity%3D%220.39%22%2F%3E%3Ccircle%20cx%3D%22187%22%20cy%3D%22370%22%20r%3D%222.4%22%20opacity%3D%220.56%22%2F%3E%3Ccircle%20cx%3D%22679%22%20cy%3D%22364%22%20r%3D%221.4%22%20opacity%3D%220.43%22%2F%3E%3Ccircle%20cx%3D%221156%22%20cy%3D%22157%22%20r%3D%221.1%22%20opacity%3D%220.85%22%2F%3E%3Ccircle%20cx%3D%22454%22%20cy%3D%2217%22%20r%3D%221.4%22%20opacity%3D%220.76%22%2F%3E%3Ccircle%20cx%3D%22550%22%20cy%3D%22587%22%20r%3D%220.9%22%20opacity%3D%220.75%22%2F%3E%3Ccircle%20cx%3D%22768%22%20cy%3D%22572%22%20r%3D%220.9%22%20opacity%3D%220.31%22%2F%3E%3Ccircle%20cx%3D%22192%22%20cy%3D%22599%22%20r%3D%221.1%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%221130%22%20cy%3D%22584%22%20r%3D%222.4%22%20opacity%3D%220.78%22%2F%3E%3Ccircle%20cx%3D%221127%22%20cy%3D%22420%22%20r%3D%222.4%22%20opacity%3D%220.44%22%2F%3E%3Ccircle%20cx%3D%22783%22%20cy%3D%22292%22%20r%3D%221.8%22%20opacity%3D%220.21%22%2F%3E%3Ccircle%20cx%3D%22172%22%20cy%3D%22420%22%20r%3D%221.1%22%20opacity%3D%220.7%22%2F%3E%3Ccircle%20cx%3D%22188%22%20cy%3D%22516%22%20r%3D%222.4%22%20opacity%3D%220.75%22%2F%3E%3Ccircle%20cx%3D%22116%22%20cy%3D%22576%22%20r%3D%220.9%22%20opacity%3D%220.45%22%2F%3E%3Ccircle%20cx%3D%22408%22%20cy%3D%22510%22%20r%3D%221.4%22%20opacity%3D%220.22%22%2F%3E%3Ccircle%20cx%3D%22320%22%20cy%3D%22255%22%20r%3D%221.4%22%20opacity%3D%220.54%22%2F%3E%3Ccircle%20cx%3D%22356%22%20cy%3D%22499%22%20r%3D%220.9%22%20opacity%3D%220.35%22%2F%3E%3Ccircle%20cx%3D%2268%22%20cy%3D%22555%22%20r%3D%221.1%22%20opacity%3D%220.53%22%2F%3E%3Ccircle%20cx%3D%221165%22%20cy%3D%22268%22%20r%3D%221.1%22%20opacity%3D%220.8%22%2F%3E%3Ccircle%20cx%3D%2269%22%20cy%3D%22450%22%20r%3D%220.9%22%20opacity%3D%220.44%22%2F%3E%3Ccircle%20cx%3D%22609%22%20cy%3D%22317%22%20r%3D%222.4%22%20opacity%3D%220.33%22%2F%3E%3Ccircle%20cx%3D%22626%22%20cy%3D%22143%22%20r%3D%222.4%22%20opacity%3D%220.18%22%2F%3E%3Ccircle%20cx%3D%22105%22%20cy%3D%22377%22%20r%3D%221.4%22%20opacity%3D%220.25%22%2F%3E%3Ccircle%20cx%3D%22164%22%20cy%3D%22415%22%20r%3D%221.1%22%20opacity%3D%220.55%22%2F%3E%3Ccircle%20cx%3D%22490%22%20cy%3D%22447%22%20r%3D%221.4%22%20opacity%3D%220.36%22%2F%3E%3Ccircle%20cx%3D%221010%22%20cy%3D%22536%22%20r%3D%220.9%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%2244%22%20cy%3D%22435%22%20r%3D%220.9%22%20opacity%3D%220.38%22%2F%3E%3Ccircle%20cx%3D%221119%22%20cy%3D%22601%22%20r%3D%221.4%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%22980%22%20cy%3D%22537%22%20r%3D%221.8%22%20opacity%3D%220.54%22%2F%3E%3Ccircle%20cx%3D%221078%22%20cy%3D%22181%22%20r%3D%221.8%22%20opacity%3D%220.45%22%2F%3E%3Ccircle%20cx%3D%2231%22%20cy%3D%22499%22%20r%3D%221.1%22%20opacity%3D%220.83%22%2F%3E%3Ccircle%20cx%3D%22268%22%20cy%3D%22113%22%20r%3D%221.4%22%20opacity%3D%220.53%22%2F%3E%3Ccircle%20cx%3D%22764%22%20cy%3D%22288%22%20r%3D%221.8%22%20opacity%3D%220.2%22%2F%3E%3Ccircle%20cx%3D%221043%22%20cy%3D%22445%22%20r%3D%220.9%22%20opacity%3D%220.46%22%2F%3E%3Ccircle%20cx%3D%22703%22%20cy%3D%22472%22%20r%3D%220.9%22%20opacity%3D%220.42%22%2F%3E%3Ccircle%20cx%3D%22932%22%20cy%3D%22210%22%20r%3D%221.4%22%20opacity%3D%220.64%22%2F%3E%3Ccircle%20cx%3D%22424%22%20cy%3D%22540%22%20r%3D%220.9%22%20opacity%3D%220.39%22%2F%3E%3Ccircle%20cx%3D%22319%22%20cy%3D%22421%22%20r%3D%222.4%22%20opacity%3D%220.71%22%2F%3E%3Ccircle%20cx%3D%2243%22%20cy%3D%2262%22%20r%3D%220.9%22%20opacity%3D%220.44%22%2F%3E%3C%2Fsvg%3E");
  --dots-op: .16;
  --glow: radial-gradient(70% 55% at 50% 0%, rgba(0,114,206,.13), transparent 70%);
}

body { text-align: center; position: relative; }

/* the scanned-plane motif sits behind everything, fixed so it doesn't jitter */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  background-image: var(--dots);
  background-size: cover;
  background-position: center top;
  opacity: var(--dots-op);
  pointer-events: none;
  z-index: 0;
}
body > * { position: relative; z-index: 1; }

/* a soft brand-coloured glow above the fold */
.hero { position: relative; }
.hero::before {
  content: "";
  position: absolute;
  inset: -6rem -50vw 0;
  background: var(--glow);
  pointer-events: none;
  z-index: -1;
}

/* --- header and footer centred as stacked rows --- */
.site-header { flex-direction: column; justify-content: center; gap: 1rem; }
.site-nav { justify-content: center; }
.logo { justify-content: center; }

.foot-grid { justify-items: center; }
.foot-nav { align-items: center; }

/* --- content blocks centred --- */
h1, .hero-sub, .kicker { margin-left: auto; margin-right: auto; }
.hero-actions { justify-content: center; }

.content p, .content .lead { margin-left: auto; margin-right: auto; }
.content h2, .content h3 { text-align: center; }
.content h3::before { margin-left: auto; margin-right: auto; }

.ticks { margin-left: auto; margin-right: auto; }
.ticks li { padding-left: 0; }
.ticks li::before {
  position: static;
  display: inline-block;
  margin-right: .6rem;
  transform: rotate(-45deg) translate(1px, -2px);
  vertical-align: middle;
}

.specs { margin-left: auto; margin-right: auto; }
.spec { grid-template-columns: 1fr; gap: .15rem; text-align: center; }

.cta { flex-direction: column; text-align: center; border-left: 0; border-top: 3px solid var(--accent-text); }
.cta p { margin-left: auto; margin-right: auto; }

.postrow { grid-template-columns: 1fr; text-align: center; gap: .3rem; }
.postdate { grid-row: auto; padding-top: 0; }
.postblurb { margin-left: auto; margin-right: auto; }

.pricerow { flex-direction: column; gap: .2rem; text-align: center; }

/* the contact form stays left-aligned inside: centred form fields are unusable */
.contact-form, .contact-side { text-align: left; }
.contact-side { border-left: 0; border-top: 1px solid var(--line-soft); padding: 1.5rem 0 0; }

/* cards keep their own internal alignment centred too */
.card { text-align: center; }

/* wordmark stacked: name on top, tagline beneath */
.logo { flex-direction: column; align-items: center; gap: .15rem; }
.logo-tag { letter-spacing: .22em; font-size: .68rem; }
.logo-img + .logo-tag { margin-top: .1rem; }

/* the H1 is short now — let it breathe rather than wrap early */
h1 { max-width: 24ch; }

/* headline set in the wordmark's own voice: mono, caps, wide tracking */
h1.wordmark {
  font-family: var(--mono);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .1em;
  font-size: clamp(2.3rem, 7.5vw, 4.6rem);
  line-height: 1.05;
  max-width: 100%;
  text-indent: .1em;           /* balance the trailing letter-space */
}

/* --------------------------------------------------- brand mark (header) */

.logo-mark {
  display: block;
  width: 56px;
  height: 56px;
  border-radius: 10px;
}
.logo { gap: .45rem; }
.logo-tag {
  letter-spacing: .24em;
  font-size: .64rem;
  text-transform: lowercase;
}

/* headline: quieter and shorter, the mark carries the brand now */
h1 {
  font-size: clamp(1.9rem, 4.6vw, 3.1rem);
  letter-spacing: -0.03em;
  max-width: 18ch;
}
.hero-sub { max-width: 48ch; font-size: clamp(1rem, 1.9vw, 1.15rem); }

/* camera-corner brackets from the logo, framing the hero */
.hero::after {
  content: "";
  position: absolute;
  inset: 1rem -1rem 2rem;
  pointer-events: none;
  border: 2px solid var(--accent-text);
  opacity: .22;
  -webkit-mask:
    linear-gradient(#000 0 0) top left / 34px 34px no-repeat,
    linear-gradient(#000 0 0) top right / 34px 34px no-repeat,
    linear-gradient(#000 0 0) bottom left / 34px 34px no-repeat,
    linear-gradient(#000 0 0) bottom right / 34px 34px no-repeat;
  mask:
    linear-gradient(#000 0 0) top left / 34px 34px no-repeat,
    linear-gradient(#000 0 0) top right / 34px 34px no-repeat,
    linear-gradient(#000 0 0) bottom left / 34px 34px no-repeat,
    linear-gradient(#000 0 0) bottom right / 34px 34px no-repeat;
}
@media (max-width: 640px) { .hero::after { display: none; } }

/* breathing room so the dark logo tile never touches the page tint */
.site-header { padding-top: 1.9rem; }
.logo-mark {
  margin: .3rem;
  box-shadow: 0 0 0 8px var(--bg);   /* a clean gap in the page colour */
}


/* the theme switch should look like a control, not a decoration */
.themetoggle {
  width: auto;
  height: auto;
  gap: .4rem;
  padding: .32rem .7rem;
  border-color: var(--line);
  background: var(--bg-raised);
  color: var(--text);
  font-family: var(--mono);
  font-size: .72rem;
  letter-spacing: .08em;
  text-transform: uppercase;
}
.themetoggle::after { content: attr(data-label); }
.themetoggle:hover { border-color: var(--accent-text); color: var(--accent-text); }

/* footer: one centred block, no duplicate navigation */
.foot-block { max-width: var(--max); margin: 0 auto; display: grid; gap: .35rem; justify-items: center; }
.foot-name { font-family: var(--mono); font-weight: 700; letter-spacing: .06em; margin: 0; }
.foot-meta { margin: 0; color: var(--muted); font-size: .9rem; }
.foot-mail { margin: .7rem 0 0; }

/* home hero: one line on anything wider than a phone, wraps below that */
h1.oneline {
  font-size: clamp(1.25rem, 3.4vw, 2.45rem);
  letter-spacing: -0.02em;
  line-height: 1.15;
  max-width: none;
}
@media (min-width: 700px) { h1.oneline { white-space: nowrap; } }

/* ==========================================================================
   FUNK PASS — corner brackets on every block, numbered sections, tighter
   price rows. Same camera-corner language as the hero.
   ========================================================================== */

.framed { position: relative; }
.framed::before {
  content: "";
  position: absolute;
  inset: -4px;
  pointer-events: none;
  border: 2px solid var(--accent-text);
  border-radius: 12px;
  opacity: .30;
  transition: opacity .18s ease;
  -webkit-mask:
    linear-gradient(#000 0 0) top left / 20px 20px no-repeat,
    linear-gradient(#000 0 0) top right / 20px 20px no-repeat,
    linear-gradient(#000 0 0) bottom left / 20px 20px no-repeat,
    linear-gradient(#000 0 0) bottom right / 20px 20px no-repeat;
  mask:
    linear-gradient(#000 0 0) top left / 20px 20px no-repeat,
    linear-gradient(#000 0 0) top right / 20px 20px no-repeat,
    linear-gradient(#000 0 0) bottom left / 20px 20px no-repeat,
    linear-gradient(#000 0 0) bottom right / 20px 20px no-repeat;
}
.card.framed:hover::before { opacity: .75; }
.card { border-color: var(--line-soft); transition: transform .18s ease, border-color .18s ease; }
.card:hover { transform: translateY(-2px); border-color: var(--accent-dim); }

/* numbered sections, like a technical drawing */
.content { counter-reset: sec; }
.content h2 { counter-increment: sec; }
.content h2::before {
  content: "[" counter(sec, decimal-leading-zero) "]";
  display: block;
  font-family: var(--mono);
  font-size: .68rem;
  letter-spacing: .2em;
  color: var(--accent-text);
  opacity: .85;
  margin-bottom: .55rem;
}

/* numbered cards */
.cards { counter-reset: card; }
.card { counter-increment: card; padding-top: 1.9rem; }
.card::after {
  content: counter(card, decimal-leading-zero);
  position: absolute;
  top: .8rem;
  left: 0;
  right: 0;
  font-family: var(--mono);
  font-size: .68rem;
  letter-spacing: .18em;
  color: var(--muted-2);
}

/* boxed asides: disclaimers and terms */
.note {
  margin: 1.5rem auto;
  max-width: 68ch;
  padding: 1.15rem 1.4rem;
  background: var(--bg-raised);
  border: 1px solid var(--line);
  border-radius: 10px;
}
.note p { margin: 0; color: var(--text); font-size: .97rem; }
.note.framed::before { border-color: var(--warn-line); opacity: .8; }

/* price rows back to two columns with a dotted leader */
@media (min-width: 560px) {
  .pricerow {
    flex-direction: row;
    align-items: baseline;
    text-align: left;
    gap: .6rem;
  }
  .priceitem { flex: 1; position: relative; overflow: hidden; }
  .priceitem::after {
    content: "";
    display: inline-block;
    width: 100%;
    margin-left: .5rem;
    border-bottom: 1px dotted var(--line);
    transform: translateY(-.25em);
  }
  .priceval { flex: 0 0 auto; }
}
.pricetable { padding: 1.4rem 1.6rem; background: var(--bg-raised); border-radius: 10px; border: 1px solid var(--line-soft); }
.pricerow:first-child { border-top: 0; }
.pricerow:last-child { border-bottom: 0; }

/* specs and postlist get the same treatment so nothing floats loose */
.specs.framed, .postlist.framed { padding: .6rem 1.4rem; }
.foot-block.framed { padding: 1.4rem 1.6rem; }
.contact-form.framed { padding: 1.4rem 1.6rem; }

/* header: menu on one row, tools on the next */
.site-tools { display: flex; align-items: center; justify-content: center; gap: .6rem; flex-wrap: wrap; }
.langbar { display: inline-flex; align-items: center; border: 1px solid var(--line); border-radius: 999px; overflow: hidden; background: var(--bg-raised); }
.langbar .lang {
  font-family: var(--mono);
  font-size: .68rem;
  letter-spacing: .1em;
  padding: .34rem .55rem;
  border: 0;
  border-radius: 0;
  color: var(--muted);
  border-right: 1px solid var(--line-soft);
}
.langbar > :last-child { border-right: 0; }
.langbar .lang:hover { color: var(--accent-text); background: var(--bg-hover); text-decoration: none; }
.langbar .lang.current { color: var(--accent-ink); background: var(--accent); }

/* Eleven languages no longer fit on one phone-width row: the last code ran
   off the right edge. Below 640px the single segmented pill becomes wrapped
   chips, so every language stays visible with no sideways scrolling and no
   dropdown to open. The max-width is what forces a tidy two rows rather
   than a ragged 8 + 3, and a twelfth language would simply fill the gap. */
@media (max-width: 640px) {
  /* the bar is now narrower than the row, so the theme button would slide up
     beside it; keep it stacked underneath as before */
  .site-tools { flex-direction: column; gap: .55rem; }
  .langbar {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: .3rem;
    max-width: 15rem;
    border: 0;
    border-radius: 0;
    background: none;
    overflow: visible;
  }
  .langbar .lang,
  .langbar > :last-child {
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--bg-raised);
    padding: .32rem .5rem;
  }
  .langbar .lang.current { border-color: var(--accent); background: var(--accent); }
}

.form-langnote {
  font-size: .88rem;
  color: var(--text-soft);
  border-left: 3px solid var(--accent-text);
  padding: .1rem 0 .1rem .8rem;
  margin: 0 0 .4rem;
}

/* headline: the SCAN / DESIGN / PRINT wordline, sized off the sub-line */
h1.oneline {
  font-family: var(--mono);
  font-weight: 700;
  font-size: clamp(1.05rem, 2.9vw, 1.75rem);
  letter-spacing: .02em;
  line-height: 1.25;
  max-width: none;
}
@media (min-width: 760px) { h1.oneline { white-space: nowrap; } }

/* a little more air between hero and the first block */
.hero { padding-bottom: clamp(2.5rem, 6vw, 4rem); }

/* the hero glow is deliberately wider than the viewport; clip it so the page
   never gets a horizontal scrollbar */
html, body { overflow-x: hidden; max-width: 100%; }
.hero::before { inset: -6rem -20vw 0; }

/* the glow used to start mid-header, which drew a hard line right under the
   nav. Start it above the top of the page instead, so there is no edge at all */
.hero::before { inset: -16rem -20vw 0; }

/* air between the wordmark, the nav and the language row */
.site-header { gap: 1.5rem; padding-bottom: 1.6rem; }
.site-nav { margin-top: .35rem; }
.site-tools { margin-top: .1rem; }

/* "read the full page" link at the end of a services section */
.more { margin: 1.1rem auto 0; }
.more a {
  display: inline-block;
  font-family: var(--mono);
  font-size: .78rem;
  letter-spacing: .06em;
  color: var(--accent-text);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: .34rem .95rem;
}
.more a::after { content: " →"; }
.more a:hover { border-color: var(--accent-text); background: var(--bg-raised); text-decoration: none; }

/* the services page is long now — give each service section room to breathe */
.content h2 { margin-top: 3.6rem; }

/* Long bullet lists: keep the block centred on the page, but give the text a
   straight left edge inside it. Centring 110 ragged lines is unreadable. */
.ticks {
  display: inline-block;
  text-align: left;
  max-width: 62ch;
}
.ticks li { padding-left: 1.6rem; }
.ticks li::before {
  position: absolute;
  left: 0;
  top: .62em;
  margin-right: 0;
  transform: rotate(-45deg);
  vertical-align: baseline;
}

/* honeypot: off-screen for bots, invisible and unfocusable for people */
.contact-form .hp { position: absolute; left: -9999px; width: 1px; height: 1px; opacity: 0; }

/* ---- small print: footer link + modal ------------------------------- */

.legal-line { margin: .55rem 0 0; }

.legal-link {
  font-family: var(--mono);
  font-size: .78rem;
  letter-spacing: .06em;
  color: var(--muted-2);
  text-decoration: none;
  border-bottom: 1px dotted var(--line);
  padding-bottom: 1px;
}
.legal-link:hover,
.legal-link:focus-visible { color: var(--text); border-bottom-color: var(--accent); }

.legalbox[open] {
  position: fixed;
  inset: 0;
  margin: auto;
  display: block;
}

.legalbox {
  width: min(56rem, 92vw);
  max-height: 86vh;
  padding: 0;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: var(--bg-raised);
  color: var(--text);
  overflow: hidden;
}
.legalbox::backdrop { background: rgba(0, 0, 0, .78); }

.legalbody {
  max-height: 86vh;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 3.4rem 2.2rem 2.6rem;
}
.legalbody,
.legalbody *,
.legalbody .content h2,
.legalbody .content h3,
.legalbody .content .note,
.legalbody .content .lead { text-align: left; }

.legalbody h1 {
  font-size: 1.55rem;
  line-height: 1.15;
  letter-spacing: -.02em;
  margin: 0 0 .45rem;
}
.legalbody .hero-sub {
  color: var(--muted);
  font-size: .92rem;
  margin: 0 0 1.8rem;
  max-width: none;
}
.legalbody .content {
  padding: 0;
  margin: 0;
  max-width: none;
  border: 0;
}
.legalbody .content > * { margin-left: 0; margin-right: 0; max-width: none; }
.legalbody .content h2 { font-size: 1.12rem; margin: 2.3rem 0 .7rem; }
.legalbody .content h2::before { display: block; margin: 0 0 .3rem; text-align: left; }
.legalbody .content h3 { font-size: .98rem; margin: 1.6rem 0 .5rem; }
.legalbody .content p,
.legalbody .content li { font-size: .92rem; line-height: 1.62; }
.legalbody .specs { margin: .6rem 0; }
.legalbody .framed::before { display: none; }
.legalbody .more { display: none; }

.legalclose {
  position: absolute;
  top: .75rem;
  right: .85rem;
  z-index: 2;
  font-family: var(--mono);
  font-size: .72rem;
  letter-spacing: .08em;
  color: var(--muted);
  background: var(--bg);
  border: 1px solid var(--line);
  border-radius: 999px;
  padding: .35rem .95rem;
  cursor: pointer;
}
.legalclose:hover { color: var(--text); border-color: var(--accent); }

@media (max-width: 40rem) {
  .legalbody { padding: 3.1rem 1.15rem 2rem; }
  .legalbox { width: 94vw; }
}

/* ---- inline links inside body copy ---------------------------------- */
/* Colour alone doesn't separate these from the surrounding text well
   enough, so they get an underline. .more / .btn / nav are unaffected. */

.content p > a,
.content li > a,
.content .note a,
.legalbody .content a {
  color: var(--accent-text);
  text-decoration: underline;
  text-decoration-color: color-mix(in srgb, var(--accent-text) 45%, transparent);
  text-underline-offset: .18em;
  text-decoration-thickness: 1px;
}
.content p > a:hover,
.content li > a:hover,
.content .note a:hover,
.legalbody .content a:hover {
  text-decoration-color: var(--accent-text);
}


/* ---- four cards read as 2 x 2, never 3 + 1 -------------------------- */

.cards-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }

@media (max-width: 520px) {
  .cards-4 { grid-template-columns: 1fr; }
}


/* ---- highlighted run inside body copy -------------------------------- */
/* The only pink on the site. Good news, so it must not borrow the amber
   that everywhere else means "careful". Colour only — no box, no weight. */

.hi { color: var(--offer-text); }
