HexName-Frontend/src/routes/+page.svelte
Luka Dekanozishvili 7e37f1bbe0 init commit
2026-01-18 14:55:11 +01:00

296 lines
No EOL
27 KiB
Svelte

<script lang="ts">
import { slideIn } from "$lib/slideIn";
import { PUBLIC_BACKEND_API_HOST } from "$env/static/public";
import { domains } from "$lib/domains.svelte";
import ErrorPopup from "$lib/ErrorPopup.svelte";
import Phone from "$lib/Phone.svelte";
let errorMessage: string | null = $state(null);
let subdomain = $state("");
let selectedDomainId = $state("");
let selectedDomainName = $state("");
$effect(() => {
if (domains.baseDomains.length > 0) {
selectedDomainId = domains.baseDomains[0].id;
selectedDomainName = domains.baseDomains[0].domain;
}
});
$effect(() => {
checkAvailability();
});
let available = $state<boolean | null>(null);
let loadingCheck = $state(false);
let debounceTimer: ReturnType<typeof setTimeout> | null = null;
function checkAvailability() {
if (!subdomain || !selectedDomainId) {
available = null;
return;
}
loadingCheck = true;
if (debounceTimer) clearTimeout(debounceTimer);
debounceTimer = setTimeout(async () => {
try {
const res = await fetch(
`${PUBLIC_BACKEND_API_HOST}/api/v1/subdomain/search/${selectedDomainId}/${subdomain}`
);
const data = await res.json();
if (!res.ok) throw new Error("Lookup failed");
available = data.available === true;
} catch (err) {
console.error(err);
available = null;
} finally {
loadingCheck = false;
}
}, 400);
}
// Generate current datetime for DIG
const d = new Date();
const pad = (n: number) => n.toString().padStart(2, '0');
const days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
const months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
const tz = d.toLocaleTimeString('en-US', { timeZoneName: 'short' }).split(' ').pop();
const dateTime =
`${days[d.getDay()]} ` +
`${months[d.getMonth()]} ` +
`${pad(d.getDate())} ` +
`${pad(d.getHours())}:` +
`${pad(d.getMinutes())}:` +
`${pad(d.getSeconds())} ` +
`${tz} ` +
`${d.getFullYear()}`;
</script>
<svelte:head>
<title>HexName - Free, uncomplicated DNS management</title>
<meta property="og:title" content="HexName - Free, uncomplicated DNS management">
<meta name="twitter:title" content="HexName - Free, uncomplicated DNS management">
<meta name="description" content="Register our premium domains and manage DNS and DynDNS - so you can focus on what truly matters.">
<meta property="og:description" content="Register our premium domains and manage DNS and DynDNS - so you can focus on what truly matters.">
<meta name="twitter:description" content="Register our premium domains and manage DNS and DynDNS - so you can focus on what truly matters.">
<meta name="robots" content="index, follow">
</svelte:head>
<div class="flex flex-col items-center m-auto">
<div class="relative w-full overflow-x-clip">
<svg class="absolute left-1/2 -translate-x-1/2 w-[1624px] -translate-y-16" width="1440" height="676" viewBox="0 0 1440 676" fill="none">
<rect x="-92" y="-948" width="1624" height="1624" rx="812" fill="url(#a)"></rect>
<defs>
<radialGradient id="a" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="rotate(90 428 292)scale(812)">
<stop offset=".63" stop-color="#1244e3" stop-opacity="0"></stop>
<stop offset="1" stop-color="#1244e3"></stop>
</radialGradient>
</defs>
</svg>
</div>
<section class="flex flex-col items-center -mt-38 z-1">
<a href="/register" class="flex items-center z-1 mt-48 gap-2 border border-2 border-font text-font/90 rounded-full px-4 py-2" style="opacity: 1; transform: none;">
<div class="size-2.5 bg-success rounded-full animate-pulse"></div>
<span>Start using today!</span>
</a>
<h1 class="text-center leading-[55px] lg:leading-[70px] z-1 text-5xl lg:text-6xl mx-2 mt-4 font-semibold max-w-3xl" style="opacity: 1; transform: none;">Let's manage the backbone of every website - DNS</h1>
<p class="text-center text-base max-w-lg mt-6 z-1 mx-2" style="opacity: 1; transform: none;">Our platform helps you manage DNS and DynDNS - so you can focus on what truly matters.</p>
<div class="flex items-center gap-4 mt-16 z-1" style="opacity: 1; transform: none;">
<a href="/register"><button style="box-shadow: 0 0 10px rgba(0,0,0,0.6)" class="btn btn-lg btn-primary rounded-lg max-w-50">
Get started
<svg viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="size-5">
<path stroke-linecap="round" stroke-linejoin="round" d="M13.5 4.5 21 12m0 0-7.5 7.5M21 12H3"/>
</svg>
</button></a>
<button style="box-shadow: 0 0 10px rgba(0,0,0,0.6)" class="btn btn-lg btn-outline btn-secondary rounded-lg border-2 max-w-50"><a href="/#contact">Contact us</a></button>
</div>
<div class="grid grid-cols-1 lg:grid-cols-[1fr_auto_1fr] overflow-none -mt-4 lg:my-8 justify-items-center items-center not-lg:max-w-120 max-w-full justify-items-stretch">
<div use:slideIn class="flex flex-col stats w-50 max-w-72 h-100 not-lg:-mt-14 lg:pt-10 opacity-0 -translate-x-30 lg:-translate-x-60 ease-out transition-[transform, opacity] will-change-transform duration-1300 not-lg:order-1">
<div class="stat place-items-center">
<div class="stat-title">Our domains</div>
<div class="stat-value">3</div>
<div class="stat-desc">Owned and operated</div>
</div>
<div class="stat place-items-center pt-1">
<div class="stat-title translate-y-3">Available subdomains</div>
<div class="stat-value text-secondary text-6xl"></div>
<div class="stat-desc text-secondary">Per domain</div>
</div>
<div class="stat place-items-center">
<div class="stat-title">Automation-ready</div>
<div class="stat-value">Yes</div>
<div class="stat-desc">API-friendly</div>
</div>
</div>
<figure class="relative lg:w-135 flex flex-col items-center justify-center col-span-2 lg:pt-5 lg:col-span-1">
<div class="mockup-code max-w-2xl my-2 scale-65 lg:scale-85 overflow-hidden bg-base-200">
<pre data-prefix="$"><code>dig example.hexname.com</code></pre>
<div class="text-success translate-x-2">
<pre><code>; &lt;&lt;&gt;&gt; DiG 9.20.16 &lt;&lt;&gt;&gt; example.hexname.com</code></pre>
<pre><code>;; global options: +cmd</code></pre>
<pre><code>;; Got answer:</code></pre>
<pre><code>;; - &gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 47911</code></pre>
<pre><code>;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1</code></pre>
<!-- <pre><code>;; WARNING: recursion requested but not available</code></pre> -->
<pre></pre>
<pre><code>;; OPT PSEUDOSECTION:</code></pre>
<pre><code>; EDNS: version: 0, flags:; udp: 1232</code></pre>
<pre><code>;; QUESTION SECTION:</code></pre>
<pre class="text-secondary"><code>;example.hexname.com. IN A</code></pre>
<pre></pre>
<pre><code>;; ANSWER SECTION:</code></pre>
<pre class="text-secondary"><code>example.hexname.com. 300 IN A 198.51.100.51</code></pre>
<pre><code>;; Query time: {Math.floor(Math.random() * (26 - 15) + 15)} msec</code></pre>
<pre><code>;; SERVER: 9.9.9.9#53(9.9.9.9) (UDP)</code></pre>
<pre><code>;; WHEN: {dateTime}</code></pre>
<pre><code>;; MSG SIZE rcvd: 63</code></pre>
</div>
</div>
</figure>
<div use:slideIn class="flex flex-col stats w-50 max-w-72 h-100 not-lg:-mt-14 lg:pt-10 opacity-0 translate-x-30 lg:translate-x-60 ease-out transition-[transform, opacity] will-change-transform duration-1300 not-lg:order-1">
<div class="stat place-items-center">
<div class="stat-title">Cost</div>
<div class="stat-value">0$</div>
<div class="stat-desc">Forever free!</div>
</div>
<div class="stat place-items-center">
<div class="stat-title">DDNS support</div>
<div class="stat-value text-secondary">Yes</div>
<div class="stat-desc text-secondary">A, AAAA records</div>
</div>
<div class="stat place-items-center">
<div class="stat-title">NS record support</div>
<div class="stat-value">Yes</div>
<div class="stat-desc">Manage DNS externally</div>
</div>
</div>
</div>
</section>
<section class="flex flex-col items-center text-primary-content w-full">
<h2 class="text-4xl font-semibold max-w-2xl">
Our <span class="bg-gradient-to-t from-primary to-base-300">DNS services</span>
</h2>
<p class="text-center max-w-lg mt-3">Register our premium domains and manage records.</p>
<div class="flex flex-col lg:flex-row relative max-w-5xl mx-8 lg:mx-auto lg:px-8 lg:px-0 lg:mt-18">
<div class="py-6 lg:py-0 lg:px-10 lg:w-90">
<svg class="size-10 p-1.5 bg-primary/25 border border-primary/45 rounded-lg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M5.25 14.25h13.5m-13.5 0a3 3 0 0 1-3-3m3 3a3 3 0 1 0 0 6h13.5a3 3 0 1 0 0-6m-16.5-3a3 3 0 0 1 3-3h13.5a3 3 0 0 1 3 3m-19.5 0a4.5 4.5 0 0 1 .9-2.7L5.737 5.1a3.375 3.375 0 0 1 2.7-1.35h7.126c1.062 0 2.062.5 2.7 1.35l2.587 3.45a4.5 4.5 0 0 1 .9 2.7m0 0a3 3 0 0 1-3 3m0 3h.008v.008h-.008v-.008Zm0-6h.008v.008h-.008v-.008Zm-3 6h.008v.008h-.008v-.008Zm0-6h.008v.008h-.008v-.008Z"/>
</svg>
<div class="mt-5 space-y-2">
<h3>Manage DNS records</h3>
<p class="text-sm text-primary-content/65">A, AAAA, TXT, CNAME, MX, NS, SRV - all the essential record types right out of the box</p>
</div>
</div>
<div class="divider lg:divider-horizontal before:bg-primary-content/50 after:bg-primary-content/50 m-0"></div>
<div class="py-6 lg:py-0 lg:px-10 lg:w-90">
<svg class="size-10 p-1.5 bg-primary/25 border border-primary/45 rounded-lg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="m6.75 7.5 3 2.25-3 2.25m4.5 0h3m-9 8.25h13.5A2.25 2.25 0 0 0 21 18V6a2.25 2.25 0 0 0-2.25-2.25H5.25A2.25 2.25 0 0 0 3 6v12a2.25 2.25 0 0 0 2.25 2.25Z"/>
</svg>
<div class="mt-5 space-y-2">
<h3>Set and forget it with DDNS</h3>
<p class="text-sm text-primary-content/65">Update your A/AAAA records periodically with a script so that they always point to your IP</p>
</div>
</div>
<div class="divider lg:divider-horizontal before:bg-primary-content/50 after:bg-primary-content/50 m-0"></div>
<div class="py-6 lg:py-0 lg:px-10 lg:w-90">
<svg class="size-10 p-1.5 bg-primary/25 border border-primary/45 rounded-lg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" d="M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 0 1-.657.643 48.39 48.39 0 0 1-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 0 1-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 0 0-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 0 1-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 0 0 .657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 0 1-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 0 0 5.427-.63 48.05 48.05 0 0 0 .582-4.717.532.532 0 0 0-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.96.401v0a.656.656 0 0 0 .658-.663 48.422 48.422 0 0 0-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 0 1-.61-.58v0Z"/>
</svg>
<div class="mt-5 space-y-2">
<h3>NS record support</h3>
<p class="text-sm text-primary-content/65">Freedom to use 3rd party DNS providers for your domains</p>
</div>
</div>
</div>
</section>
<section class="flex flex-col items-center mt-18 -mb-6">
<h2 class="text-4xl font-semibold max-w-2xl text-center">
Because you deserve <span class="bg-gradient-to-t from-primary to-base-300">freedom</span>
</h2>
<div class="flex flex-col lg:flex-row items-center justify-center gap-x-60 my-10 lg:-translate-x-20">
<div use:slideIn class="my-2 mb-6 grid grid-cols-3 lg:grid-cols-1 lg:w-70 gap-6 lg:gap-12 max-w-5xl px-6 opacity-0 not-lg:translate-y-40 lg:-translate-x-60 ease-out transition-[transform, opacity] will-change-transform duration-1300">
<div class="text-center space-y-2">
<h3 class="font-semibold text-lg">No restrictions</h3>
<p class="text-sm text-primary-content/65">
Register 20 domains, with 100 records per domain. Set absurdly high TTL values, and comments.
We don't restrict you.
</p>
</div>
<div class="text-center space-y-2">
<h3 class="font-semibold text-lg">No expiration</h3>
<p class="text-sm text-primary-content/65">
We'll never expire your domains/records or ask for confirmation if you're still active.
Set it and forget it - like DNS should be.
</p>
</div>
<div class="text-center space-y-2">
<h3 class="font-semibold text-lg">No marketing</h3>
<p class="text-sm text-slate-400">
We do not use your email address or your data for any other purposes than strictly necessary. You're in charge.
</p>
</div>
</div>
<div class="scale-80 -m-30">
<Phone isRotated={true}/>
</div>
</div>
</section>
<div class="flex flex-col items-center justify-center">
<h2 class="text-4xl font-semibold max-w-2xl m-4 -mt-40 pt-56 mb-8" id="search-for-your-domain">
Search for <span class="bg-gradient-to-t from-primary to-base-300">your domain</span>
</h2>
<div class="bg-base-200 flex flex-col border-base-300 rounded-box w-100 border p-4 z-1">
<div class="join">
<input type="text" name="subdomain-name" placeholder="example" class="input input-bordered join-item w-full" bind:value={subdomain}/>
{#if !domains.loadingBaseDomains}
<select
class="select select-bordered bg-base-200 join-item w-full"
name="domain"
bind:value={selectedDomainId}
onchange={(e) => {
const target = e.target as HTMLSelectElement;
const d = domains.baseDomains.find(d => d.id === target.value);
selectedDomainName = d?.domain ?? "";
}}>
{#each domains.baseDomains as d}
<option value={d.id}>{d.domain}</option>
{/each}
</select>
{/if}
</div>
<p class="my-1 text-sm font-medium" class:text-success={available} class:text-error={!available}>
{#if available !== null && !loadingCheck}
{subdomain}.{selectedDomainName}
{available ? " is available" : " is unavailable"}
{:else}
&nbsp
{/if}
</p>
<button class="btn btn-primary w-full p-0" disabled={!available || loadingCheck}><a href="/register" class="flex max-w-full h-full items-center justify-center">{loadingCheck ? "Checking..." : "Register"}</a></button>
</div>
<div class="mt-3 h-12 flex items-center">
<ErrorPopup {errorMessage} />
</div>
</div>
<section class="flex flex-col items-center">
<div class="flex flex-col items-center mt-0">
<h2 class="text-center text-4xl font-semibold max-w-2xl -mt-40 pt-40 mb-2" id="contact-us">
Get in <span class="bg-gradient-to-t from-primary to-base-300">touch</span>
</h2>
<div class="tooltip tooltip-secondary tooltip-bottom" data-tip="Please type the email manually">
<svg class="m-4 p-2 bg-gradient-to-r from-primary to-base-300" viewBox="0 8.8100004196167 590.280029296875 46.97999954223633" data-asc="0.9052734375" width="300"><defs/><g fill="currentColor"><g transform="translate(0, 0)"><path d="M18.26 35.77L22.58 36.33Q21.88 40.80 18.96 43.32Q16.04 45.85 11.79 45.85Q6.47 45.85 3.23 42.37Q0 38.89 0 32.40Q0 28.20 1.39 25.05Q2.78 21.90 5.63 20.32Q8.47 18.75 11.82 18.75Q16.04 18.75 18.73 20.89Q21.41 23.02 22.17 26.95L17.90 27.61Q17.29 25 15.73 23.68Q14.18 22.36 11.99 22.36Q8.67 22.36 6.59 24.74Q4.52 27.12 4.52 32.28Q4.52 37.50 6.52 39.87Q8.52 42.24 11.74 42.24Q14.33 42.24 16.06 40.65Q17.80 39.06 18.26 35.77ZM24.71 32.30Q24.71 25.10 28.71 21.63Q32.06 18.75 36.87 18.75Q42.21 18.75 45.61 22.25Q49.00 25.76 49.00 31.93Q49.00 36.94 47.50 39.81Q46.00 42.68 43.13 44.26Q40.26 45.85 36.87 45.85Q31.42 45.85 28.06 42.36Q24.71 38.87 24.71 32.30M29.22 32.30Q29.22 37.28 31.40 39.76Q33.57 42.24 36.87 42.24Q40.14 42.24 42.31 39.75Q44.48 37.26 44.48 32.15Q44.48 27.34 42.30 24.87Q40.11 22.39 36.87 22.39Q33.57 22.39 31.40 24.85Q29.22 27.32 29.22 32.30ZM54.15 45.26L54.15 19.34L58.11 19.34L58.11 23.02Q60.96 18.75 66.36 18.75Q68.70 18.75 70.67 19.59Q72.63 20.43 73.61 21.80Q74.58 23.17 74.98 25.05Q75.22 26.27 75.22 29.32L75.22 45.26L70.83 45.26L70.83 29.49Q70.83 26.81 70.31 25.48Q69.80 24.15 68.49 23.35Q67.19 22.56 65.43 22.56Q62.62 22.56 60.58 24.34Q58.54 26.12 58.54 31.10L58.54 45.26L54.15 45.26ZM91.55 41.33L92.19 45.21Q90.33 45.61 88.87 45.61Q86.47 45.61 85.16 44.85Q83.84 44.09 83.30 42.86Q82.76 41.63 82.76 37.67L82.76 22.75L79.54 22.75L79.54 19.34L82.76 19.34L82.76 12.92L87.13 10.28L87.13 19.34L91.55 19.34L91.55 22.75L87.13 22.75L87.13 37.92Q87.13 39.79 87.37 40.33Q87.60 40.87 88.12 41.19Q88.65 41.50 89.62 41.50Q90.36 41.50 91.55 41.33ZM112.77 42.07Q110.33 44.14 108.07 45.00Q105.81 45.85 103.22 45.85Q98.95 45.85 96.66 43.76Q94.36 41.67 94.36 38.43Q94.36 36.52 95.23 34.95Q96.09 33.37 97.50 32.42Q98.90 31.47 100.66 30.98Q101.95 30.64 104.57 30.32Q109.89 29.69 112.40 28.81Q112.43 27.91 112.43 27.66Q112.43 24.98 111.18 23.88Q109.50 22.39 106.18 22.39Q103.08 22.39 101.60 23.47Q100.12 24.56 99.41 27.32L95.12 26.73Q95.70 23.97 97.05 22.28Q98.39 20.58 100.93 19.67Q103.47 18.75 106.81 18.75Q110.13 18.75 112.21 19.53Q114.28 20.31 115.26 21.50Q116.24 22.68 116.63 24.49Q116.85 25.61 116.85 28.54L116.85 34.40Q116.85 40.53 117.13 42.15Q117.41 43.77 118.24 45.26L113.65 45.26Q112.96 43.90 112.77 42.07M112.40 32.25Q110.01 33.23 105.22 33.91Q102.51 34.30 101.39 34.79Q100.27 35.28 99.66 36.22Q99.05 37.16 99.05 38.31Q99.05 40.06 100.38 41.24Q101.71 42.41 104.27 42.41Q106.81 42.41 108.79 41.30Q110.77 40.19 111.69 38.26Q112.40 36.77 112.40 33.86L112.40 32.25ZM140.58 35.77L144.90 36.33Q144.19 40.80 141.27 43.32Q138.35 45.85 134.11 45.85Q128.78 45.85 125.55 42.37Q122.31 38.89 122.31 32.40Q122.31 28.20 123.71 25.05Q125.10 21.90 127.94 20.32Q130.79 18.75 134.13 18.75Q138.35 18.75 141.04 20.89Q143.73 23.02 144.48 26.95L140.21 27.61Q139.60 25 138.05 23.68Q136.50 22.36 134.30 22.36Q130.98 22.36 128.91 24.74Q126.83 27.12 126.83 32.28Q126.83 37.50 128.83 39.87Q130.83 42.24 134.06 42.24Q136.65 42.24 138.38 40.65Q140.11 39.06 140.58 35.77ZM158.25 41.33L158.89 45.21Q157.03 45.61 155.57 45.61Q153.17 45.61 151.86 44.85Q150.54 44.09 150 42.86Q149.46 41.63 149.46 37.67L149.46 22.75L146.24 22.75L146.24 19.34L149.46 19.34L149.46 12.92L153.83 10.28L153.83 19.34L158.25 19.34L158.25 22.75L153.83 22.75L153.83 37.92Q153.83 39.79 154.06 40.33Q154.30 40.87 154.82 41.19Q155.35 41.50 156.32 41.50Q157.06 41.50 158.25 41.33ZM160.84 34.52L160.84 30.10L174.34 30.10L174.34 34.52L160.84 34.52ZM196.19 45.26L196.19 41.46Q193.16 45.85 187.96 45.85Q185.67 45.85 183.68 44.97Q181.69 44.09 180.73 42.76Q179.76 41.43 179.37 39.50Q179.10 38.21 179.10 35.40L179.10 19.34L183.50 19.34L183.50 33.72Q183.50 37.16 183.76 38.35Q184.18 40.09 185.52 41.08Q186.87 42.07 188.84 42.07Q190.82 42.07 192.55 41.05Q194.29 40.04 195.01 38.29Q195.73 36.55 195.73 33.23L195.73 19.34L200.12 19.34L200.12 45.26L196.19 45.26ZM205.25 37.52L209.59 36.84Q209.96 39.45 211.63 40.84Q213.31 42.24 216.31 42.24Q219.34 42.24 220.80 41.00Q222.27 39.77 222.27 38.11Q222.27 36.62 220.97 35.77Q220.07 35.18 216.48 34.28Q211.65 33.06 209.78 32.17Q207.91 31.27 206.95 29.70Q205.98 28.13 205.98 26.22Q205.98 24.49 206.77 23.01Q207.57 21.53 208.94 20.56Q209.96 19.80 211.73 19.27Q213.50 18.75 215.53 18.75Q218.58 18.75 220.89 19.63Q223.19 20.51 224.29 22.01Q225.39 23.51 225.81 26.03L221.51 26.61Q221.22 24.61 219.81 23.49Q218.41 22.36 215.84 22.36Q212.82 22.36 211.52 23.36Q210.23 24.37 210.23 25.71Q210.23 26.56 210.77 27.25Q211.30 27.95 212.45 28.42Q213.11 28.66 216.33 29.54Q221.00 30.79 222.84 31.58Q224.68 32.37 225.73 33.89Q226.78 35.40 226.78 37.65Q226.78 39.84 225.50 41.78Q224.22 43.73 221.80 44.79Q219.38 45.85 216.33 45.85Q211.28 45.85 208.63 43.75Q205.98 41.65 205.25 37.52ZM257.06 41.28Q255.47 43.12 253.50 44.23Q251.54 45.34 249.56 45.34Q247.39 45.34 245.34 44.07Q243.29 42.80 242.00 40.16Q240.72 37.52 240.72 34.38Q240.72 30.49 242.71 26.60Q244.70 22.71 247.66 20.75Q250.61 18.80 253.39 18.80Q255.52 18.80 257.45 19.91Q259.38 21.02 260.77 23.29L261.60 19.51L265.97 19.51L262.45 35.89Q261.72 39.31 261.72 39.67Q261.72 40.33 262.22 40.81Q262.72 41.28 263.43 41.28Q264.72 41.28 266.82 39.79Q269.60 37.84 271.23 34.56Q272.85 31.27 272.85 27.78Q272.85 23.71 270.76 20.17Q268.68 16.63 264.54 14.50Q260.40 12.38 255.40 12.38Q249.68 12.38 244.96 15.05Q240.23 17.72 237.63 22.72Q235.03 27.71 235.03 33.42Q235.03 39.40 237.63 43.73Q240.23 48.05 245.15 50.11Q250.07 52.17 256.05 52.17Q262.45 52.17 266.77 50.02Q271.09 47.88 273.24 44.80L277.66 44.80Q276.42 47.36 273.39 50.02Q270.36 52.69 266.19 54.24Q262.01 55.79 256.13 55.79Q250.71 55.79 246.13 54.39Q241.55 53.00 238.33 50.21Q235.11 47.41 233.47 43.77Q231.42 39.16 231.42 33.81Q231.42 27.86 233.86 22.46Q236.84 15.84 242.32 12.33Q247.80 8.81 255.62 8.81Q261.67 8.81 266.49 11.29Q271.31 13.77 274.10 18.68Q276.46 22.90 276.46 27.86Q276.46 34.94 271.48 40.43Q267.04 45.36 261.77 45.36Q260.08 45.36 259.05 44.85Q258.01 44.34 257.52 43.38Q257.20 42.77 257.06 41.28M245.24 34.67Q245.24 38.01 246.83 39.87Q248.41 41.72 250.46 41.72Q251.83 41.72 253.34 40.91Q254.86 40.09 256.24 38.48Q257.62 36.87 258.50 34.39Q259.38 31.91 259.38 29.42Q259.38 26.10 257.73 24.27Q256.08 22.44 253.71 22.44Q252.15 22.44 250.77 23.23Q249.39 24.02 248.10 25.78Q246.80 27.54 246.02 30.05Q245.24 32.57 245.24 34.67ZM282.76 45.26L282.76 9.47L287.16 9.47L287.16 22.31Q290.23 18.75 294.92 18.75Q297.80 18.75 299.93 19.89Q302.05 21.02 302.97 23.02Q303.88 25.02 303.88 28.83L303.88 45.26L299.49 45.26L299.49 28.83Q299.49 25.54 298.06 24.04Q296.63 22.53 294.02 22.53Q292.07 22.53 290.34 23.55Q288.62 24.56 287.89 26.29Q287.16 28.03 287.16 31.08L287.16 45.26L282.76 45.26ZM328.32 36.91L332.86 37.48Q331.79 41.46 328.88 43.65Q325.98 45.85 321.46 45.85Q315.77 45.85 312.44 42.35Q309.11 38.84 309.11 32.52Q309.11 25.98 312.48 22.36Q315.84 18.75 321.22 18.75Q326.42 18.75 329.71 22.29Q333.01 25.83 333.01 32.25Q333.01 32.64 332.98 33.42L313.65 33.42Q313.89 37.70 316.06 39.97Q318.24 42.24 321.48 42.24Q323.90 42.24 325.61 40.97Q327.32 39.70 328.32 36.91M313.89 29.81L328.37 29.81Q328.08 26.54 326.71 24.90Q324.61 22.36 321.26 22.36Q318.24 22.36 316.17 24.39Q314.11 26.42 313.89 29.81ZM335.45 45.26L344.92 31.79L336.16 19.34L341.65 19.34L345.63 25.42Q346.75 27.15 347.44 28.32Q348.51 26.71 349.41 25.46L353.78 19.34L359.03 19.34L350.07 31.54L359.72 45.26L354.32 45.26L349.00 37.21L347.58 35.03L340.77 45.26L335.45 45.26ZM363.38 45.26L363.38 19.34L367.33 19.34L367.33 23.02Q370.19 18.75 375.59 18.75Q377.93 18.75 379.90 19.59Q381.86 20.43 382.84 21.80Q383.81 23.17 384.20 25.05Q384.45 26.27 384.45 29.32L384.45 45.26L380.05 45.26L380.05 29.49Q380.05 26.81 379.54 25.48Q379.03 24.15 377.72 23.35Q376.42 22.56 374.66 22.56Q371.85 22.56 369.81 24.34Q367.77 26.12 367.77 31.10L367.77 45.26L363.38 45.26ZM408.11 42.07Q405.66 44.14 403.41 45.00Q401.15 45.85 398.56 45.85Q394.29 45.85 391.99 43.76Q389.70 41.67 389.70 38.43Q389.70 36.52 390.56 34.95Q391.43 33.37 392.83 32.42Q394.24 31.47 396.00 30.98Q397.29 30.64 399.90 30.32Q405.22 29.69 407.74 28.81Q407.76 27.91 407.76 27.66Q407.76 24.98 406.52 23.88Q404.83 22.39 401.51 22.39Q398.41 22.39 396.94 23.47Q395.46 24.56 394.75 27.32L390.45 26.73Q391.04 23.97 392.38 22.28Q393.73 20.58 396.26 19.67Q398.80 18.75 402.15 18.75Q405.47 18.75 407.54 19.53Q409.62 20.31 410.60 21.50Q411.57 22.68 411.96 24.49Q412.18 25.61 412.18 28.54L412.18 34.40Q412.18 40.53 412.46 42.15Q412.74 43.77 413.57 45.26L408.98 45.26Q408.30 43.90 408.11 42.07M407.74 32.25Q405.35 33.23 400.56 33.91Q397.85 34.30 396.73 34.79Q395.61 35.28 395.00 36.22Q394.38 37.16 394.38 38.31Q394.38 40.06 395.72 41.24Q397.05 42.41 399.61 42.41Q402.15 42.41 404.13 41.30Q406.10 40.19 407.03 38.26Q407.74 36.77 407.74 33.86L407.74 32.25ZM418.99 45.26L418.99 19.34L422.92 19.34L422.92 22.97Q424.15 21.07 426.17 19.91Q428.20 18.75 430.79 18.75Q433.67 18.75 435.51 19.95Q437.35 21.14 438.11 23.29Q441.19 18.75 446.12 18.75Q449.98 18.75 452.05 20.89Q454.13 23.02 454.13 27.47L454.13 45.26L449.76 45.26L449.76 28.93Q449.76 26.29 449.33 25.13Q448.90 23.97 447.78 23.27Q446.66 22.56 445.14 22.56Q442.41 22.56 440.60 24.38Q438.79 26.20 438.79 30.20L438.79 45.26L434.40 45.26L434.40 28.42Q434.40 25.49 433.33 24.02Q432.25 22.56 429.81 22.56Q427.95 22.56 426.38 23.54Q424.80 24.51 424.10 26.39Q423.39 28.27 423.39 31.81L423.39 45.26L418.99 45.26ZM478.39 36.91L482.93 37.48Q481.86 41.46 478.96 43.65Q476.05 45.85 471.53 45.85Q465.84 45.85 462.51 42.35Q459.18 38.84 459.18 32.52Q459.18 25.98 462.55 22.36Q465.92 18.75 471.29 18.75Q476.49 18.75 479.79 22.29Q483.08 25.83 483.08 32.25Q483.08 32.64 483.06 33.42L463.72 33.42Q463.96 37.70 466.14 39.97Q468.31 42.24 471.56 42.24Q473.97 42.24 475.68 40.97Q477.39 39.70 478.39 36.91M463.96 29.81L478.44 29.81Q478.15 26.54 476.78 24.90Q474.68 22.36 471.34 22.36Q468.31 22.36 466.25 24.39Q464.18 26.42 463.96 29.81ZM489.70 45.26L489.70 40.26L494.70 40.26L494.70 45.26L489.70 45.26ZM519.26 35.77L523.58 36.33Q522.88 40.80 519.96 43.32Q517.04 45.85 512.79 45.85Q507.47 45.85 504.24 42.37Q501.00 38.89 501.00 32.40Q501.00 28.20 502.39 25.05Q503.78 21.90 506.63 20.32Q509.47 18.75 512.82 18.75Q517.04 18.75 519.73 20.89Q522.41 23.02 523.17 26.95L518.90 27.61Q518.29 25 516.74 23.68Q515.19 22.36 512.99 22.36Q509.67 22.36 507.59 24.74Q505.52 27.12 505.52 32.28Q505.52 37.50 507.52 39.87Q509.52 42.24 512.74 42.24Q515.33 42.24 517.07 40.65Q518.80 39.06 519.26 35.77ZM525.71 32.30Q525.71 25.10 529.71 21.63Q533.06 18.75 537.87 18.75Q543.21 18.75 546.61 22.25Q550 25.76 550 31.93Q550 36.94 548.50 39.81Q547.00 42.68 544.13 44.26Q541.26 45.85 537.87 45.85Q532.42 45.85 529.06 42.36Q525.71 38.87 525.71 32.30M530.22 32.30Q530.22 37.28 532.40 39.76Q534.57 42.24 537.87 42.24Q541.14 42.24 543.31 39.75Q545.48 37.26 545.48 32.15Q545.48 27.34 543.30 24.87Q541.11 22.39 537.87 22.39Q534.57 22.39 532.40 24.85Q530.22 27.32 530.22 32.30ZM555.15 45.26L555.15 19.34L559.08 19.34L559.08 22.97Q560.30 21.07 562.33 19.91Q564.36 18.75 566.94 18.75Q569.82 18.75 571.67 19.95Q573.51 21.14 574.27 23.29Q577.34 18.75 582.28 18.75Q586.13 18.75 588.21 20.89Q590.28 23.02 590.28 27.47L590.28 45.26L585.91 45.26L585.91 28.93Q585.91 26.29 585.49 25.13Q585.06 23.97 583.94 23.27Q582.81 22.56 581.30 22.56Q578.56 22.56 576.76 24.38Q574.95 26.20 574.95 30.20L574.95 45.26L570.56 45.26L570.56 28.42Q570.56 25.49 569.48 24.02Q568.41 22.56 565.97 22.56Q564.11 22.56 562.54 23.54Q560.96 24.51 560.25 26.39Q559.55 28.27 559.55 31.81L559.55 45.26L555.15 45.26Z"/></g></g></svg>
</div>
</div>
</section>
</div>