<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Vestra Transmissions</title>
    <link>https://vestracorp.com/news/</link>
    <atom:link href="https://vestracorp.com/news/rss.xml" rel="self" type="application/rss+xml"/>
    <description>News from Vestra: what we ship, how we run it and what comes next.</description>
    <language>en-gb</language>
    <copyright>© 2026 Vestra</copyright>
    <lastBuildDate>Wed, 14 Oct 2026 23:00:00 GMT</lastBuildDate>
    <image>
      <url>https://vestracorp.com/static/img/apple-touch-icon.png</url>
      <title>Vestra Transmissions</title>
      <link>https://vestracorp.com/news/</link>
    </image>
    <item>
      <title>Vestra One</title>
      <link>https://vestracorp.com/news/vestra-one/</link>
      <guid isPermaLink="true">https://vestracorp.com/news/vestra-one/</guid>
      <pubDate>Wed, 14 Oct 2026 23:00:00 GMT</pubDate>
      <dc:creator>Vestra</dc:creator>
      <category>Product</category>
      <description>One membership across Vestra: 50% off a hosting plan (up to £5 a month), Vestra VPN on up to three devices and 50 GB of Vestra Drive, for £5.99 a month or £59.90 a year.</description>
      <content:encoded><![CDATA[<section class="launch-section launch-intro">
<p>Vestra One is a membership that brings three things together: a discount on your hosting, Vestra VPN and more room on Vestra Drive. It costs £5.99 a month or £59.90 a year, in pounds with no VAT added, and you manage all of it from Vestra Console, next to your servers and your bills.</p>
</section>
<section class="launch-section" aria-labelledby="what-s-in-it">
<h2 id="what-s-in-it"><a class="anchor" href="https://vestracorp.com/news/vestra-one/#what-s-in-it" aria-hidden="true" tabindex="-1">#</a>What’s in it</h2>
<ul>
<li><strong>50% off one hosting plan.</strong> A game server or a VPS, up to £5 off a month. Storage add-ons stay at full price.</li>
<li><strong>Vestra VPN.</strong> WireGuard on up to three devices, up to 100 Mbit/s, with 200 GB of traffic a month.</li>
<li><strong>50 GB of Vestra Drive.</strong> Up from the 5 GB every Drive account gets for free.</li>
</ul>
<p>The yearly price is what ten monthly payments would cost, so two months are free.</p>
</section>
<section class="launch-section" aria-labelledby="what-it-costs">
<h2 id="what-it-costs"><a class="anchor" href="https://vestracorp.com/news/vestra-one/#what-it-costs" aria-hidden="true" tabindex="-1">#</a>What it costs</h2>
<p>The discount comes off a plan you already pay for, so what Vestra One really costs depends on that plan. Pro is a £9.99 game server. The discount on it is £5.00 a month, so the membership adds 99p a month to your bills. On the yearly plan, a year of discount (£60.00) is slightly more than the membership (£59.90). On Tiny, the discount is £1.00, so the membership adds £4.99 a month.</p>
<figure class="c c-wide c-onecalc" data-onecalc data-one-month="599" data-one-year="5990" aria-labelledby="onecalc-1-h">
<h3 class="c-onecalc-title" id="onecalc-1-h">What Vestra One costs you</h3>
<div class="table-wrap"><table class="c-onecalc-tbl">
<thead><tr><th scope="col">Hosting plan</th><th scope="col">Plan price</th><th scope="col">Discount</th><th scope="col">Plan with discount</th><th scope="col">Vestra One after the discount, monthly</th><th scope="col">Yearly</th></tr></thead>
<tbody>
<tr data-plan="None" data-group="" data-pence="0"><th scope="row">No hosting plan</th><td>–</td><td>–</td><td>–</td><td>£5.99 a month</td><td>£59.90 a year</td></tr>
<tr data-plan="Tiny" data-group="Game server" data-pence="199"><th scope="row">Tiny (game server)</th><td>£1.99</td><td>−£1.00</td><td>£0.99</td><td>£4.99 a month</td><td>£47.90 a year</td></tr>
<tr data-plan="Starter" data-group="Game server" data-pence="499"><th scope="row">Starter (game server)</th><td>£4.99</td><td>−£2.50</td><td>£2.49</td><td>£3.49 a month</td><td>£29.90 a year</td></tr>
<tr data-plan="Pro" data-group="Game server" data-pence="999" data-default><th scope="row">Pro (game server)</th><td>£9.99</td><td>−£5.00</td><td>£4.99</td><td>£0.99 a month</td><td>£0.10 a year less than without it</td></tr>
<tr data-plan="Enterprise" data-group="Game server" data-pence="1999"><th scope="row">Enterprise (game server)</th><td>£19.99</td><td>−£5.00</td><td>£14.99</td><td>£0.99 a month</td><td>£0.10 a year less than without it</td></tr>
<tr data-plan="VPS S" data-group="VPS" data-pence="299"><th scope="row">VPS S</th><td>£2.99</td><td>−£1.50</td><td>£1.49</td><td>£4.49 a month</td><td>£41.90 a year</td></tr>
<tr data-plan="VPS M" data-group="VPS" data-pence="499"><th scope="row">VPS M</th><td>£4.99</td><td>−£2.50</td><td>£2.49</td><td>£3.49 a month</td><td>£29.90 a year</td></tr>
<tr data-plan="VPS L" data-group="VPS" data-pence="999"><th scope="row">VPS L</th><td>£9.99</td><td>−£5.00</td><td>£4.99</td><td>£0.99 a month</td><td>£0.10 a year less than without it</td></tr>
</tbody>
</table></div>
<figcaption class="c-note">Monthly plan prices without storage add-ons, in GBP with no VAT added. The discount is 50% of the plan price, up to £5 a month, on one plan.</figcaption>
</figure>
<p>The discount goes on one plan at a time. If you have one plan, it goes there automatically. If you have more than one, you choose in Console, or tick the Vestra One box when you order a new plan. You can move it once a calendar month, and the change applies from that plan’s next invoice.</p>
</section>
<section class="launch-section" aria-labelledby="the-vpn">
<h2 id="the-vpn"><a class="anchor" href="https://vestracorp.com/news/vestra-one/#the-vpn" aria-hidden="true" tabindex="-1">#</a>The VPN</h2>
<p>Vestra VPN runs WireGuard on our server in Helsinki, Finland. To add a device, open Console and you get a configuration file or a QR code for the WireGuard app. We show you the device’s private key once and don’t keep it. Up to three devices can be connected at a time. They share up to 100 Mbit/s and 200 GB of traffic each calendar month. We email you at 80%, and at 200 GB the VPN pauses until the 1st of the next month.</p>
<p>The list of what we keep is short. We don’t record the sites you visit, your DNS queries, the content of your traffic, when you connect or the address you connect from. We do keep three things:</p>
<ul>
<li>the names and public keys of your devices;</li>
<li>one data total a month;</li>
<li>which port range on our shared IPv4 address, and which IPv6 address, your account held, and when.</li>
</ul>
<p>The last record is there for abuse reports. If someone reports our address with a port and a time, we can tell which account it was. We keep it for 365 days after your VPN account is deleted. Every staff lookup is recorded, and those records are kept for 12 months.</p>
<p>Your IPv6 address stays the same for as long as your VPN account exists, which matters if you use a VPN so that sites can’t tell your visits apart. When your membership ends, the account is deleted and the address is held back from everyone for 72 hours. If you rejoin, you get an address that’s free at that moment: never your old one within those 72 hours, and after that it may or may not be the same one.</p>
<p>Peer-to-peer traffic is allowed. Sharing infringing material over it is not, and complaints traced to your account can get your VPN switched off. The <a href="https://privacy.vestra.lol/#vestra-vpn" rel="noopener">privacy policy</a> and the <a href="https://legal.vestra.lol/#vestra-vpn" rel="noopener">terms</a> have the details.</p>
</section>
<section class="launch-section" aria-labelledby="vestra-drive">
<h2 id="vestra-drive"><a class="anchor" href="https://vestracorp.com/news/vestra-one/#vestra-drive" aria-hidden="true" tabindex="-1">#</a>Vestra Drive</h2>
<p>To get the extra space, link your Drive account in Console. You enter your Drive username, upload a small file named with the code Console gives you, and press Verify. Your Drive then goes from 5 GB to 50 GB. Your files stay on our Drive server in Nuremberg, Germany, which is backed up and encrypted every night.</p>
</section>
<section class="launch-section" aria-labelledby="cancelling">
<h2 id="cancelling"><a class="anchor" href="https://vestracorp.com/news/vestra-one/#cancelling" aria-hidden="true" tabindex="-1">#</a>Cancelling</h2>
<p>You can cancel at any time in Console. Everything keeps working until the end of the month or year you’ve paid for, and you can change your mind before then. Once the membership ends, the hosting discount stops from your plan’s next invoice, your VPN account and its devices are deleted, and Drive goes back to 5 GB.</p>
<p>If you’re using more than 5 GB when that happens, your Drive becomes read-only for 30 days. You can still open, download and delete files, but you can’t upload. We email you when the membership ends, a week before the 30 days are up, and on the last day. After that, your newest files are deleted until you’re back within 5 GB. If you rejoin within the 30 days, nothing is deleted.</p>
<p>If a payment fails, everything keeps working for 7 days while you update your card. After that, the VPN pauses, Drive goes back to 5 GB and the discount comes off future hosting invoices until the payment goes through. Nothing is deleted while a membership is paused.</p>
</section>
<section class="launch-section" aria-labelledby="limited-places">
<h2 id="limited-places"><a class="anchor" href="https://vestracorp.com/news/vestra-one/#limited-places" aria-hidden="true" tabindex="-1">#</a>Limited places</h2>
<p>The VPN has a fixed number of places, and we only sell as many memberships as there are places. When they’re all taken, you can join the waitlist on the join page and we’ll email you when places open. The waitlist is free, and joining it doesn’t reserve a place.</p>
</section>
<section class="launch-section" aria-labelledby="getting-it">
<h2 id="getting-it"><a class="anchor" href="https://vestracorp.com/news/vestra-one/#getting-it" aria-hidden="true" tabindex="-1">#</a>Getting it</h2>
<p>Join at <a href="https://billing.vestra.systems/one" rel="noopener">billing.vestra.systems/one</a> with your Vestra Passport account and choose monthly or yearly. You’ll then find everything under Vestra One in <a href="https://robot.vestra.systems/one" rel="noopener">Vestra Console</a>. The full details are on <a href="https://vestra.systems/one/" rel="noopener">vestra.systems/one</a>.</p>
<p>Questions before you join? Write to <a href="mailto:support@vestracorp.com">support@vestracorp.com</a> or ask us on <a href="https://discord.vestra.lol" rel="noopener">Discord</a>.</p>
</section>
]]></content:encoded>
      <enclosure url="https://vestracorp.com/news/vestra-one/og.jpg?v=6b076f4195" type="image/jpeg" length="33530"/>
    </item>
    <item>
      <title>Veriwell</title>
      <link>https://vestracorp.com/news/veriwell/</link>
      <guid isPermaLink="true">https://vestracorp.com/news/veriwell/</guid>
      <pubDate>Wed, 14 Oct 2026 23:00:00 GMT</pubDate>
      <dc:creator>Veriwell team</dc:creator>
      <category>Product</category>
      <description>Veriwell is our age check for UK websites: a passport or photocard licence, then a short guided selfie. The website gets a yes or a no. Photos and dates of birth are never stored.</description>
      <content:encoded><![CDATA[<section class="launch-section launch-intro">
<p>Veriwell is our age check for websites in the UK. You show a UK passport or a DVLA photocard driving licence to your phone’s camera, follow a short guided selfie, and the website you came from gets a yes or a no to the age it asked about. Not your name, not your date of birth, not a copy of your document.</p>
<p>More UK websites now have to check that their visitors are old enough. We built Veriwell to make that check quick for the person doing it, and to leave as little behind as possible once it’s done.</p>
</section>
<section class="launch-section" aria-labelledby="how-it-works">
<h2 id="how-it-works"><a class="anchor" href="https://vestracorp.com/news/veriwell/#how-it-works" aria-hidden="true" tabindex="-1">#</a>How it works</h2>
<p>Start on a computer and Veriwell shows a QR code: scan it, and the check carries on on your phone while the page on your computer waits for the result. On a phone, it starts straight away. A session lasts at most 10 minutes.</p>
<figure class="c c-wide c-vwf" data-vwf aria-label="The check, step by step">
<p class="vwf-head">The check, step by step</p>
<ol class="vwf-steps">
<li class="vwf-step" id="vwf-1-0" data-kind="qr" data-title="Scan the code">
<div class="vwf-device"><div class="vwf-desk" aria-hidden="true"><div class="vwf-browser"><div class="vwf-bbar"><i></i><i></i><i></i><span>veriwell.xyz</span></div><div class="vwf-bpage"><img class="vwf-l-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><div class="vwf-l-card"><div class="vwf-l-plate"><svg class="vwf-qr" viewBox="0 0 25 25" shape-rendering="crispEdges" role="img" aria-label="QR code for https://veriwell.xyz/demo"><path fill="#fff" d="M0 0h25v25H0z"/><path fill="#000" d="M0 0h1v1h-1zM1 0h1v1h-1zM2 0h1v1h-1zM3 0h1v1h-1zM4 0h1v1h-1zM5 0h1v1h-1zM6 0h1v1h-1zM8 0h1v1h-1zM10 0h1v1h-1zM11 0h1v1h-1zM12 0h1v1h-1zM18 0h1v1h-1zM19 0h1v1h-1zM20 0h1v1h-1zM21 0h1v1h-1zM22 0h1v1h-1zM23 0h1v1h-1zM24 0h1v1h-1zM0 1h1v1h-1zM6 1h1v1h-1zM8 1h1v1h-1zM12 1h1v1h-1zM13 1h1v1h-1zM14 1h1v1h-1zM18 1h1v1h-1zM24 1h1v1h-1zM0 2h1v1h-1zM2 2h1v1h-1zM3 2h1v1h-1zM4 2h1v1h-1zM6 2h1v1h-1zM8 2h1v1h-1zM10 2h1v1h-1zM13 2h1v1h-1zM18 2h1v1h-1zM20 2h1v1h-1zM21 2h1v1h-1zM22 2h1v1h-1zM24 2h1v1h-1zM0 3h1v1h-1zM2 3h1v1h-1zM3 3h1v1h-1zM4 3h1v1h-1zM6 3h1v1h-1zM9 3h1v1h-1zM10 3h1v1h-1zM11 3h1v1h-1zM12 3h1v1h-1zM13 3h1v1h-1zM15 3h1v1h-1zM16 3h1v1h-1zM18 3h1v1h-1zM20 3h1v1h-1zM21 3h1v1h-1zM22 3h1v1h-1zM24 3h1v1h-1zM0 4h1v1h-1zM2 4h1v1h-1zM3 4h1v1h-1zM4 4h1v1h-1zM6 4h1v1h-1zM8 4h1v1h-1zM9 4h1v1h-1zM10 4h1v1h-1zM11 4h1v1h-1zM13 4h1v1h-1zM18 4h1v1h-1zM20 4h1v1h-1zM21 4h1v1h-1zM22 4h1v1h-1zM24 4h1v1h-1zM0 5h1v1h-1zM6 5h1v1h-1zM10 5h1v1h-1zM12 5h1v1h-1zM16 5h1v1h-1zM18 5h1v1h-1zM24 5h1v1h-1zM0 6h1v1h-1zM1 6h1v1h-1zM2 6h1v1h-1zM3 6h1v1h-1zM4 6h1v1h-1zM5 6h1v1h-1zM6 6h1v1h-1zM8 6h1v1h-1zM10 6h1v1h-1zM12 6h1v1h-1zM14 6h1v1h-1zM16 6h1v1h-1zM18 6h1v1h-1zM19 6h1v1h-1zM20 6h1v1h-1zM21 6h1v1h-1zM22 6h1v1h-1zM23 6h1v1h-1zM24 6h1v1h-1zM11 7h1v1h-1zM13 7h1v1h-1zM16 7h1v1h-1zM0 8h1v1h-1zM3 8h1v1h-1zM4 8h1v1h-1zM5 8h1v1h-1zM6 8h1v1h-1zM7 8h1v1h-1zM8 8h1v1h-1zM9 8h1v1h-1zM11 8h1v1h-1zM12 8h1v1h-1zM14 8h1v1h-1zM16 8h1v1h-1zM17 8h1v1h-1zM20 8h1v1h-1zM22 8h1v1h-1zM23 8h1v1h-1zM24 8h1v1h-1zM3 9h1v1h-1zM5 9h1v1h-1zM7 9h1v1h-1zM10 9h1v1h-1zM13 9h1v1h-1zM15 9h1v1h-1zM19 9h1v1h-1zM20 9h1v1h-1zM21 9h1v1h-1zM22 9h1v1h-1zM23 9h1v1h-1zM0 10h1v1h-1zM1 10h1v1h-1zM3 10h1v1h-1zM5 10h1v1h-1zM6 10h1v1h-1zM8 10h1v1h-1zM9 10h1v1h-1zM10 10h1v1h-1zM12 10h1v1h-1zM13 10h1v1h-1zM14 10h1v1h-1zM15 10h1v1h-1zM18 10h1v1h-1zM21 10h1v1h-1zM24 10h1v1h-1zM0 11h1v1h-1zM1 11h1v1h-1zM4 11h1v1h-1zM8 11h1v1h-1zM10 11h1v1h-1zM11 11h1v1h-1zM12 11h1v1h-1zM18 11h1v1h-1zM19 11h1v1h-1zM21 11h1v1h-1zM22 11h1v1h-1zM23 11h1v1h-1zM24 11h1v1h-1zM1 12h1v1h-1zM3 12h1v1h-1zM5 12h1v1h-1zM6 12h1v1h-1zM8 12h1v1h-1zM9 12h1v1h-1zM12 12h1v1h-1zM14 12h1v1h-1zM16 12h1v1h-1zM18 12h1v1h-1zM24 12h1v1h-1zM0 13h1v1h-1zM1 13h1v1h-1zM3 13h1v1h-1zM4 13h1v1h-1zM7 13h1v1h-1zM8 13h1v1h-1zM9 13h1v1h-1zM10 13h1v1h-1zM14 13h1v1h-1zM15 13h1v1h-1zM16 13h1v1h-1zM17 13h1v1h-1zM20 13h1v1h-1zM23 13h1v1h-1zM0 14h1v1h-1zM1 14h1v1h-1zM3 14h1v1h-1zM6 14h1v1h-1zM7 14h1v1h-1zM8 14h1v1h-1zM9 14h1v1h-1zM10 14h1v1h-1zM11 14h1v1h-1zM12 14h1v1h-1zM14 14h1v1h-1zM15 14h1v1h-1zM18 14h1v1h-1zM20 14h1v1h-1zM21 14h1v1h-1zM22 14h1v1h-1zM23 14h1v1h-1zM24 14h1v1h-1zM0 15h1v1h-1zM2 15h1v1h-1zM4 15h1v1h-1zM7 15h1v1h-1zM9 15h1v1h-1zM10 15h1v1h-1zM11 15h1v1h-1zM19 15h1v1h-1zM21 15h1v1h-1zM22 15h1v1h-1zM24 15h1v1h-1zM0 16h1v1h-1zM2 16h1v1h-1zM3 16h1v1h-1zM4 16h1v1h-1zM5 16h1v1h-1zM6 16h1v1h-1zM8 16h1v1h-1zM10 16h1v1h-1zM12 16h1v1h-1zM13 16h1v1h-1zM15 16h1v1h-1zM16 16h1v1h-1zM17 16h1v1h-1zM18 16h1v1h-1zM19 16h1v1h-1zM20 16h1v1h-1zM22 16h1v1h-1zM23 16h1v1h-1zM8 17h1v1h-1zM11 17h1v1h-1zM12 17h1v1h-1zM16 17h1v1h-1zM20 17h1v1h-1zM22 17h1v1h-1zM23 17h1v1h-1zM0 18h1v1h-1zM1 18h1v1h-1zM2 18h1v1h-1zM3 18h1v1h-1zM4 18h1v1h-1zM5 18h1v1h-1zM6 18h1v1h-1zM8 18h1v1h-1zM10 18h1v1h-1zM11 18h1v1h-1zM13 18h1v1h-1zM16 18h1v1h-1zM18 18h1v1h-1zM20 18h1v1h-1zM24 18h1v1h-1zM0 19h1v1h-1zM6 19h1v1h-1zM8 19h1v1h-1zM9 19h1v1h-1zM11 19h1v1h-1zM13 19h1v1h-1zM14 19h1v1h-1zM15 19h1v1h-1zM16 19h1v1h-1zM20 19h1v1h-1zM23 19h1v1h-1zM24 19h1v1h-1zM0 20h1v1h-1zM2 20h1v1h-1zM3 20h1v1h-1zM4 20h1v1h-1zM6 20h1v1h-1zM8 20h1v1h-1zM9 20h1v1h-1zM10 20h1v1h-1zM11 20h1v1h-1zM12 20h1v1h-1zM14 20h1v1h-1zM15 20h1v1h-1zM16 20h1v1h-1zM17 20h1v1h-1zM18 20h1v1h-1zM19 20h1v1h-1zM20 20h1v1h-1zM0 21h1v1h-1zM2 21h1v1h-1zM3 21h1v1h-1zM4 21h1v1h-1zM6 21h1v1h-1zM8 21h1v1h-1zM10 21h1v1h-1zM11 21h1v1h-1zM14 21h1v1h-1zM15 21h1v1h-1zM17 21h1v1h-1zM18 21h1v1h-1zM23 21h1v1h-1zM24 21h1v1h-1zM0 22h1v1h-1zM2 22h1v1h-1zM3 22h1v1h-1zM4 22h1v1h-1zM6 22h1v1h-1zM9 22h1v1h-1zM11 22h1v1h-1zM17 22h1v1h-1zM20 22h1v1h-1zM21 22h1v1h-1zM22 22h1v1h-1zM23 22h1v1h-1zM24 22h1v1h-1zM0 23h1v1h-1zM6 23h1v1h-1zM9 23h1v1h-1zM10 23h1v1h-1zM11 23h1v1h-1zM14 23h1v1h-1zM15 23h1v1h-1zM17 23h1v1h-1zM19 23h1v1h-1zM20 23h1v1h-1zM22 23h1v1h-1zM23 23h1v1h-1zM24 23h1v1h-1zM0 24h1v1h-1zM1 24h1v1h-1zM2 24h1v1h-1zM3 24h1v1h-1zM4 24h1v1h-1zM5 24h1v1h-1zM6 24h1v1h-1zM8 24h1v1h-1zM12 24h1v1h-1zM16 24h1v1h-1zM18 24h1v1h-1zM21 24h1v1h-1zM24 24h1v1h-1z"/></svg></div><p class="vwf-l-badge">Ready to scan</p><p class="vwf-l-h">Scan with your phone</p><p class="vwf-l-s">Continue on this device</p></div></div></div><div class="vwf-phone is-mini"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-cam is-full is-scan"><div class="vwf-scan-view"><div class="vwf-scan-plate"><svg class="vwf-qr is-cam" viewBox="0 0 25 25" shape-rendering="crispEdges" role="img" aria-label="QR code for https://veriwell.xyz/demo"><path fill="#fff" d="M0 0h25v25H0z"/><path fill="#000" d="M0 0h1v1h-1zM1 0h1v1h-1zM2 0h1v1h-1zM3 0h1v1h-1zM4 0h1v1h-1zM5 0h1v1h-1zM6 0h1v1h-1zM8 0h1v1h-1zM10 0h1v1h-1zM11 0h1v1h-1zM12 0h1v1h-1zM18 0h1v1h-1zM19 0h1v1h-1zM20 0h1v1h-1zM21 0h1v1h-1zM22 0h1v1h-1zM23 0h1v1h-1zM24 0h1v1h-1zM0 1h1v1h-1zM6 1h1v1h-1zM8 1h1v1h-1zM12 1h1v1h-1zM13 1h1v1h-1zM14 1h1v1h-1zM18 1h1v1h-1zM24 1h1v1h-1zM0 2h1v1h-1zM2 2h1v1h-1zM3 2h1v1h-1zM4 2h1v1h-1zM6 2h1v1h-1zM8 2h1v1h-1zM10 2h1v1h-1zM13 2h1v1h-1zM18 2h1v1h-1zM20 2h1v1h-1zM21 2h1v1h-1zM22 2h1v1h-1zM24 2h1v1h-1zM0 3h1v1h-1zM2 3h1v1h-1zM3 3h1v1h-1zM4 3h1v1h-1zM6 3h1v1h-1zM9 3h1v1h-1zM10 3h1v1h-1zM11 3h1v1h-1zM12 3h1v1h-1zM13 3h1v1h-1zM15 3h1v1h-1zM16 3h1v1h-1zM18 3h1v1h-1zM20 3h1v1h-1zM21 3h1v1h-1zM22 3h1v1h-1zM24 3h1v1h-1zM0 4h1v1h-1zM2 4h1v1h-1zM3 4h1v1h-1zM4 4h1v1h-1zM6 4h1v1h-1zM8 4h1v1h-1zM9 4h1v1h-1zM10 4h1v1h-1zM11 4h1v1h-1zM13 4h1v1h-1zM18 4h1v1h-1zM20 4h1v1h-1zM21 4h1v1h-1zM22 4h1v1h-1zM24 4h1v1h-1zM0 5h1v1h-1zM6 5h1v1h-1zM10 5h1v1h-1zM12 5h1v1h-1zM16 5h1v1h-1zM18 5h1v1h-1zM24 5h1v1h-1zM0 6h1v1h-1zM1 6h1v1h-1zM2 6h1v1h-1zM3 6h1v1h-1zM4 6h1v1h-1zM5 6h1v1h-1zM6 6h1v1h-1zM8 6h1v1h-1zM10 6h1v1h-1zM12 6h1v1h-1zM14 6h1v1h-1zM16 6h1v1h-1zM18 6h1v1h-1zM19 6h1v1h-1zM20 6h1v1h-1zM21 6h1v1h-1zM22 6h1v1h-1zM23 6h1v1h-1zM24 6h1v1h-1zM11 7h1v1h-1zM13 7h1v1h-1zM16 7h1v1h-1zM0 8h1v1h-1zM3 8h1v1h-1zM4 8h1v1h-1zM5 8h1v1h-1zM6 8h1v1h-1zM7 8h1v1h-1zM8 8h1v1h-1zM9 8h1v1h-1zM11 8h1v1h-1zM12 8h1v1h-1zM14 8h1v1h-1zM16 8h1v1h-1zM17 8h1v1h-1zM20 8h1v1h-1zM22 8h1v1h-1zM23 8h1v1h-1zM24 8h1v1h-1zM3 9h1v1h-1zM5 9h1v1h-1zM7 9h1v1h-1zM10 9h1v1h-1zM13 9h1v1h-1zM15 9h1v1h-1zM19 9h1v1h-1zM20 9h1v1h-1zM21 9h1v1h-1zM22 9h1v1h-1zM23 9h1v1h-1zM0 10h1v1h-1zM1 10h1v1h-1zM3 10h1v1h-1zM5 10h1v1h-1zM6 10h1v1h-1zM8 10h1v1h-1zM9 10h1v1h-1zM10 10h1v1h-1zM12 10h1v1h-1zM13 10h1v1h-1zM14 10h1v1h-1zM15 10h1v1h-1zM18 10h1v1h-1zM21 10h1v1h-1zM24 10h1v1h-1zM0 11h1v1h-1zM1 11h1v1h-1zM4 11h1v1h-1zM8 11h1v1h-1zM10 11h1v1h-1zM11 11h1v1h-1zM12 11h1v1h-1zM18 11h1v1h-1zM19 11h1v1h-1zM21 11h1v1h-1zM22 11h1v1h-1zM23 11h1v1h-1zM24 11h1v1h-1zM1 12h1v1h-1zM3 12h1v1h-1zM5 12h1v1h-1zM6 12h1v1h-1zM8 12h1v1h-1zM9 12h1v1h-1zM12 12h1v1h-1zM14 12h1v1h-1zM16 12h1v1h-1zM18 12h1v1h-1zM24 12h1v1h-1zM0 13h1v1h-1zM1 13h1v1h-1zM3 13h1v1h-1zM4 13h1v1h-1zM7 13h1v1h-1zM8 13h1v1h-1zM9 13h1v1h-1zM10 13h1v1h-1zM14 13h1v1h-1zM15 13h1v1h-1zM16 13h1v1h-1zM17 13h1v1h-1zM20 13h1v1h-1zM23 13h1v1h-1zM0 14h1v1h-1zM1 14h1v1h-1zM3 14h1v1h-1zM6 14h1v1h-1zM7 14h1v1h-1zM8 14h1v1h-1zM9 14h1v1h-1zM10 14h1v1h-1zM11 14h1v1h-1zM12 14h1v1h-1zM14 14h1v1h-1zM15 14h1v1h-1zM18 14h1v1h-1zM20 14h1v1h-1zM21 14h1v1h-1zM22 14h1v1h-1zM23 14h1v1h-1zM24 14h1v1h-1zM0 15h1v1h-1zM2 15h1v1h-1zM4 15h1v1h-1zM7 15h1v1h-1zM9 15h1v1h-1zM10 15h1v1h-1zM11 15h1v1h-1zM19 15h1v1h-1zM21 15h1v1h-1zM22 15h1v1h-1zM24 15h1v1h-1zM0 16h1v1h-1zM2 16h1v1h-1zM3 16h1v1h-1zM4 16h1v1h-1zM5 16h1v1h-1zM6 16h1v1h-1zM8 16h1v1h-1zM10 16h1v1h-1zM12 16h1v1h-1zM13 16h1v1h-1zM15 16h1v1h-1zM16 16h1v1h-1zM17 16h1v1h-1zM18 16h1v1h-1zM19 16h1v1h-1zM20 16h1v1h-1zM22 16h1v1h-1zM23 16h1v1h-1zM8 17h1v1h-1zM11 17h1v1h-1zM12 17h1v1h-1zM16 17h1v1h-1zM20 17h1v1h-1zM22 17h1v1h-1zM23 17h1v1h-1zM0 18h1v1h-1zM1 18h1v1h-1zM2 18h1v1h-1zM3 18h1v1h-1zM4 18h1v1h-1zM5 18h1v1h-1zM6 18h1v1h-1zM8 18h1v1h-1zM10 18h1v1h-1zM11 18h1v1h-1zM13 18h1v1h-1zM16 18h1v1h-1zM18 18h1v1h-1zM20 18h1v1h-1zM24 18h1v1h-1zM0 19h1v1h-1zM6 19h1v1h-1zM8 19h1v1h-1zM9 19h1v1h-1zM11 19h1v1h-1zM13 19h1v1h-1zM14 19h1v1h-1zM15 19h1v1h-1zM16 19h1v1h-1zM20 19h1v1h-1zM23 19h1v1h-1zM24 19h1v1h-1zM0 20h1v1h-1zM2 20h1v1h-1zM3 20h1v1h-1zM4 20h1v1h-1zM6 20h1v1h-1zM8 20h1v1h-1zM9 20h1v1h-1zM10 20h1v1h-1zM11 20h1v1h-1zM12 20h1v1h-1zM14 20h1v1h-1zM15 20h1v1h-1zM16 20h1v1h-1zM17 20h1v1h-1zM18 20h1v1h-1zM19 20h1v1h-1zM20 20h1v1h-1zM0 21h1v1h-1zM2 21h1v1h-1zM3 21h1v1h-1zM4 21h1v1h-1zM6 21h1v1h-1zM8 21h1v1h-1zM10 21h1v1h-1zM11 21h1v1h-1zM14 21h1v1h-1zM15 21h1v1h-1zM17 21h1v1h-1zM18 21h1v1h-1zM23 21h1v1h-1zM24 21h1v1h-1zM0 22h1v1h-1zM2 22h1v1h-1zM3 22h1v1h-1zM4 22h1v1h-1zM6 22h1v1h-1zM9 22h1v1h-1zM11 22h1v1h-1zM17 22h1v1h-1zM20 22h1v1h-1zM21 22h1v1h-1zM22 22h1v1h-1zM23 22h1v1h-1zM24 22h1v1h-1zM0 23h1v1h-1zM6 23h1v1h-1zM9 23h1v1h-1zM10 23h1v1h-1zM11 23h1v1h-1zM14 23h1v1h-1zM15 23h1v1h-1zM17 23h1v1h-1zM19 23h1v1h-1zM20 23h1v1h-1zM22 23h1v1h-1zM23 23h1v1h-1zM24 23h1v1h-1zM0 24h1v1h-1zM1 24h1v1h-1zM2 24h1v1h-1zM3 24h1v1h-1zM4 24h1v1h-1zM5 24h1v1h-1zM6 24h1v1h-1zM8 24h1v1h-1zM12 24h1v1h-1zM16 24h1v1h-1zM18 24h1v1h-1zM21 24h1v1h-1zM24 24h1v1h-1z"/></svg></div><span class="vwf-found"></span></div><p class="vwf-pill is-link"><span>veriwell.xyz</span></p></div></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">1<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Scan the code</h3><p>On a computer, the page shows a QR code. Scan it with your phone, or carry on at the computer if it has a camera. Each code works once.</p>
</div>
</li>
<li class="vwf-step" id="vwf-1-1" data-kind="consent" data-title="Agree first">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>9:52 left</span></p><ol><li class="is-on"><i></i>Consent</li><li class=""><i></i>Document</li><li class=""><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Consent</p><p class="vwf-h">UK age assurance</p>
<p class="vwf-p">Veriwell checks whether you are 18 or over using a <b>UK passport</b> or a <b>DVLA-issued UK photocard driving licence</b> only, then a short face check.</p>
<ol class="vwf-ol"><li>1. Choose your UK ID type</li><li>2. Capture the document clearly in the frame</li><li>3. Complete the guided face checks</li></ol>
<p class="vwf-agree"><span class="vwf-box"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span>I am using my own UK document and consent to this age check.</p>
<p class="vwf-btn">Continue</p></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">2<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Agree first</h3><p>Veriwell says what it checks and which documents it takes. The camera only starts once you’ve agreed.</p>
</div>
</li>
<li class="vwf-step" id="vwf-1-2" data-kind="choose" data-title="Choose your document">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>9:40 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-on"><i></i>Document</li><li class=""><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">UK documents only</p><p class="vwf-h">Which ID will you use?</p>
<p class="vwf-p">This is a UK-only age assurance check. Choose the document you have with you now.</p>
<div class="vwf-opt is-picked"><span class="vwf-glyph"><svg viewBox="0 0 48 48" aria-hidden="true" focusable="false" fill="none"><rect x="10" y="6" width="28" height="36" rx="3.5" stroke="currentColor" stroke-width="2.2"/><path d="M10 14h28" stroke="currentColor" stroke-width="2.2"/><circle cx="24" cy="26" r="6.5" stroke="currentColor" stroke-width="2"/><path d="M18.5 33.5c1.6-2.4 3.8-3.6 5.5-3.6s3.9 1.2 5.5 3.6" stroke="currentColor" stroke-width="2" stroke-linecap="round"/></svg></span><span><b>UK Passport</b><small>Photo page with the MRZ at the bottom</small></span></div>
<div class="vwf-opt"><span class="vwf-glyph"><svg viewBox="0 0 48 48" aria-hidden="true" focusable="false" fill="none"><rect x="6" y="12" width="36" height="24" rx="3.5" stroke="currentColor" stroke-width="2.2"/><rect x="11" y="17" width="10" height="12" rx="2" stroke="currentColor" stroke-width="1.8"/><path d="M25 19h12M25 24h10M25 29h8" stroke="currentColor" stroke-width="1.8" stroke-linecap="round"/></svg></span><span><b>UK Driving Licence</b><small>DVLA-issued photocard only – not the paper counterpart</small></span></div></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">3<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Choose your document</h3><p>A UK passport, using the photo page, or a DVLA photocard driving licence. The paper counterpart isn’t accepted.</p>
</div>
</li>
<li class="vwf-step" id="vwf-1-3" data-kind="frame" data-title="Frame it">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>9:21 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-on"><i></i>Document</li><li class=""><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Step 1 of 2 · document validation</p><p class="vwf-h">Frame your UK Passport</p>
<div class="vwf-cam is-doc is-frame"><span class="vwf-sound"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></span><div class="vwf-docwrap"><svg class="vwf-doc" viewBox="-180 -130 360 260" aria-hidden="true" focusable="false"><clipPath id="vwf-1-3-art-clip"><rect x="-170" y="-120" width="340" height="240" rx="16"/></clipPath>
<rect class="vw-doc-card" x="-170" y="-120" width="340" height="240" rx="16"/>
<g clip-path="url(#vwf-1-3-art-clip)">
<rect class="vw-doc-band" x="-170" y="-120" width="340" height="18"/>
<rect class="vw-doc-photo" x="-150" y="-84" width="88" height="114" rx="8"/>
<circle class="vw-doc-person" cx="-106" cy="-46" r="19"/>
<path class="vw-doc-person" d="M-137 28c5-21 17-30 31-30s26 9 31 30"/>
<rect class="vw-doc-lab" x="-44" y="-80" width="38" height="4" rx="2"/><rect class="vw-doc-val" x="-44" y="-72" width="112" height="7" rx="3.5"/><rect class="vw-doc-lab" x="-44" y="-56" width="38" height="4" rx="2"/><rect class="vw-doc-val" x="-44" y="-48" width="150" height="7" rx="3.5"/><rect class="vw-doc-lab" x="-44" y="-32" width="38" height="4" rx="2"/><rect class="vw-doc-val" x="-44" y="-24" width="96" height="7" rx="3.5"/><rect class="vw-doc-lab" x="-44" y="-8" width="38" height="4" rx="2"/><rect class="vw-doc-val" x="-44" y="0" width="128" height="7" rx="3.5"/>
<rect class="vw-doc-mrzbg" x="-160" y="48" width="320" height="60" rx="6"/>
<text class="vw-mrz" x="-150" y="72" textLength="300" lengthAdjust="spacingAndGlyphs">P&lt;GBRSPECIMEN&lt;&lt;SPECIMEN&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</text>
<text class="vw-mrz" x="-150" y="96" textLength="300" lengthAdjust="spacingAndGlyphs">000000000&lt;0GBR0001019X3001012&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;00</text>
<rect class="vw-scan" data-vw-scan x="-170" y="-150" width="340" height="44" fill="url(#vwf-1-3-art-scan)"/>
<rect class="vw-flash" data-vw-flash x="-170" y="-120" width="340" height="240"/>
</g>
<linearGradient id="vwf-1-3-art-scan" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#22d3ee" stop-opacity="0"/><stop offset="0.75" stop-color="#2563eb" stop-opacity="0.16"/><stop offset="1" stop-color="#2563eb" stop-opacity="0.7"/></linearGradient>
</svg><span class="vwf-glare"></span></div><span class="vwf-guide"></span><p class="vwf-pill vwf-msgs"><span class="vwf-stack"><span class="vwf-msg is-a">Fill the guide with your document</span><span class="vwf-msg is-b">Tilt to reduce glare</span><span class="vwf-msg is-c">Looking good – hold still</span></span><small>Show the photo page with the MRZ visible</small></p></div>
<p class="vwf-btn is-off">Validate document</p></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">4<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Frame it</h3><p>Your phone looks at every frame as you hold the document up: is it in the guide, sharp, bright enough, steady and free of glare? The advice is plain, like “Tilt to reduce glare”.</p>
</div>
</li>
<li class="vwf-step" id="vwf-1-4" data-kind="capture" data-title="Hold still">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>9:14 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-on"><i></i>Document</li><li class=""><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Step 1 of 2 · document validation</p><p class="vwf-h">Frame your UK Passport</p>
<div class="vwf-cam is-doc is-capture"><span class="vwf-sound"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></span><div class="vwf-docwrap"><svg class="vwf-doc" viewBox="-180 -130 360 260" aria-hidden="true" focusable="false"><clipPath id="vwf-1-4-art-clip"><rect x="-170" y="-120" width="340" height="240" rx="16"/></clipPath>
<rect class="vw-doc-card" x="-170" y="-120" width="340" height="240" rx="16"/>
<g clip-path="url(#vwf-1-4-art-clip)">
<rect class="vw-doc-band" x="-170" y="-120" width="340" height="18"/>
<rect class="vw-doc-photo" x="-150" y="-84" width="88" height="114" rx="8"/>
<circle class="vw-doc-person" cx="-106" cy="-46" r="19"/>
<path class="vw-doc-person" d="M-137 28c5-21 17-30 31-30s26 9 31 30"/>
<rect class="vw-doc-lab" x="-44" y="-80" width="38" height="4" rx="2"/><rect class="vw-doc-val" x="-44" y="-72" width="112" height="7" rx="3.5"/><rect class="vw-doc-lab" x="-44" y="-56" width="38" height="4" rx="2"/><rect class="vw-doc-val" x="-44" y="-48" width="150" height="7" rx="3.5"/><rect class="vw-doc-lab" x="-44" y="-32" width="38" height="4" rx="2"/><rect class="vw-doc-val" x="-44" y="-24" width="96" height="7" rx="3.5"/><rect class="vw-doc-lab" x="-44" y="-8" width="38" height="4" rx="2"/><rect class="vw-doc-val" x="-44" y="0" width="128" height="7" rx="3.5"/>
<rect class="vw-doc-mrzbg" x="-160" y="48" width="320" height="60" rx="6"/>
<text class="vw-mrz" x="-150" y="72" textLength="300" lengthAdjust="spacingAndGlyphs">P&lt;GBRSPECIMEN&lt;&lt;SPECIMEN&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;</text>
<text class="vw-mrz" x="-150" y="96" textLength="300" lengthAdjust="spacingAndGlyphs">000000000&lt;0GBR0001019X3001012&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;00</text>
<rect class="vw-scan" data-vw-scan x="-170" y="-150" width="340" height="44" fill="url(#vwf-1-4-art-scan)"/>
<rect class="vw-flash" data-vw-flash x="-170" y="-120" width="340" height="240"/>
</g>
<linearGradient id="vwf-1-4-art-scan" x1="0" y1="0" x2="0" y2="1"><stop offset="0" stop-color="#22d3ee" stop-opacity="0"/><stop offset="0.75" stop-color="#2563eb" stop-opacity="0.16"/><stop offset="1" stop-color="#2563eb" stop-opacity="0.7"/></linearGradient>
</svg><span class="vwf-glare"></span></div><span class="vwf-guide"></span><p class="vwf-pill vwf-count"><span class="vwf-n">Hold still · capturing in <span class="vwf-stack is-inline"><i>3</i><i>2</i><i>1</i></span></span><small>Show the photo page with the MRZ visible</small></p><p class="vwf-captured"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg><span>Frame captured</span></p></div>
<p class="vwf-btn">Validate document</p></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">5<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Hold still</h3><p>When it looks right, hold still for a moment and it takes the photo by itself. There’s a Capture now button too. Then you send it to be checked.</p>

<ul class="vwf-cues"><li class="is-tick"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="2.4" fill="currentColor"/><circle cx="8" cy="8" r="5.6" fill="none" stroke="currentColor" stroke-width="1.2" opacity=".5"/></svg><span>A tick when the hold starts</span></li><li class="is-shutter"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><rect x="2" y="4.5" width="12" height="8.5" rx="2" fill="none" stroke="currentColor" stroke-width="1.4"/><circle cx="8" cy="8.7" r="2.3" fill="none" stroke="currentColor" stroke-width="1.4"/><path d="M5.5 4.5 6.5 3h3l1 1.5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/></svg><span>A shutter sound on capture</span></li><li class="is-buzz"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><rect x="5" y="2" width="6" height="12" rx="1.6" fill="none" stroke="currentColor" stroke-width="1.4"/><path d="M2.6 5.5v5M13.4 5.5v5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>A short vibration, where supported</span></li></ul></div>
</li>
<li class="vwf-step" id="vwf-1-5" data-kind="centre" data-title="Look straight ahead">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>8:47 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-done"><i></i>Document</li><li class="is-on"><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Step 2 of 2 · face and liveness</p><p class="vwf-h">Follow the automatic checks</p>
<div class="vwf-cam is-face is-centre"><span class="vwf-sound"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></span><svg class="vwf-face" data-pose="centre" viewBox="-150 -190 300 380" aria-hidden="true" focusable="false"><clipPath id="vwf-1-5-art-clip"><ellipse rx="119" ry="151"/></clipPath>
<ellipse class="vw-ring-bg" rx="120" ry="152"/>
<g clip-path="url(#vwf-1-5-art-clip)">
<path class="vw-body" d="M-140 170C-128 122-80 106-36 98M140 170C128 122 80 106 36 98"/>
<g data-vw-head>
<path class="vw-neck" d="M-24 70v28M24 70v28"/>
<ellipse class="vw-skull" cx="0" cy="-14" rx="70" ry="92"/>
<g class="vw-lms"><circle class="vw-lm" cx="70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="-70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="-36.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="68.0" cy="-36.0" r="2.3"/></g>
<g data-vw-feat>
<path class="vw-brow" d="M-45 -40q15-9 30-1M15 -41q15-8 30 1"/>
<g data-vw-eye="l"><ellipse class="vw-eye" cx="-30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="-30" cy="-22" r="3.2"/></g>
<g data-vw-eye="r"><ellipse class="vw-eye" cx="30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="30" cy="-22" r="3.2"/></g>
<path class="vw-nose" d="M2 -12C1 4-5 12-8 19c5 3 12 3 16 0"/>
<path class="vw-mouth" data-vw-mouth="n" d="M-21 46q21 6 42 0"/>
<path class="vw-mouth" data-vw-mouth="s" d="M-27 40q27 26 54 0" opacity="0"/>
<g class="vw-lms"><circle class="vw-lm" cx="-18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="-36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="0.0" cy="-12.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="0.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="12.0" r="2.3"/><circle class="vw-lm" cx="-9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="0.0" cy="53.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="-22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="41.1" r="2.3"/><circle class="vw-lm" cx="-0.0" cy="39.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="41.1" r="2.3"/></g>
</g>
</g>
</g>
<ellipse class="vw-ring" data-vw-ring rx="120" ry="152"/>
<g class="vw-cue" data-vw-cue transform="translate(104 -142)" opacity="0"><path class="vw-cue-spk" d="M-9 -4h5l7-6v20l-7-6h-5z"/><path class="vw-cue-wave" d="M7 -4q4 4 0 8M11 -8q8 8 0 16"/></g>
</svg><p class="vwf-pill"><span>Centre your face</span><small class="is-ok">Hold still · capturing in 1</small></p></div>
<div class="vwf-chips"><span class="is-on">Centre your face</span><span class="">Turn to one side</span><span class="">Turn to the other side</span><span class="">Blink both eyes</span><span class="">Smile</span></div></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">6<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Look straight ahead</h3><p>Next, the front camera and five short poses, always in the same order. Each one is captured by itself once your phone sees it.</p>

<ul class="vwf-cues"><li class="is-voice"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5M12.8 3.6q3.6 4.4 0 8.8" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>Spoken: “Look straight at the camera and hold still.”</span></li><li class="is-tick"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="2.4" fill="currentColor"/><circle cx="8" cy="8" r="5.6" fill="none" stroke="currentColor" stroke-width="1.2" opacity=".5"/></svg><span>A tick when the pose is found</span></li><li class="is-chime"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M6 12.5V3.5l7-1.5v9" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/><circle cx="4.6" cy="12.4" r="1.9" fill="currentColor"/><circle cx="11.6" cy="11" r="1.9" fill="currentColor"/></svg><span>A chime when it’s captured</span></li><li class="is-buzz"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><rect x="5" y="2" width="6" height="12" rx="1.6" fill="none" stroke="currentColor" stroke-width="1.4"/><path d="M2.6 5.5v5M13.4 5.5v5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>A short vibration, where the phone supports it</span></li></ul></div>
</li>
<li class="vwf-step" id="vwf-1-6" data-kind="left" data-title="Turn to one side">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>8:40 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-done"><i></i>Document</li><li class="is-on"><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Step 2 of 2 · face and liveness</p><p class="vwf-h">Follow the automatic checks</p>
<div class="vwf-cam is-face is-left"><span class="vwf-sound"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></span><svg class="vwf-face" data-pose="left" viewBox="-150 -190 300 380" aria-hidden="true" focusable="false"><clipPath id="vwf-1-6-art-clip"><ellipse rx="119" ry="151"/></clipPath>
<ellipse class="vw-ring-bg" rx="120" ry="152"/>
<g clip-path="url(#vwf-1-6-art-clip)">
<path class="vw-body" d="M-140 170C-128 122-80 106-36 98M140 170C128 122 80 106 36 98"/>
<g data-vw-head>
<path class="vw-neck" d="M-24 70v28M24 70v28"/>
<ellipse class="vw-skull" cx="0" cy="-14" rx="70" ry="92"/>
<g class="vw-lms"><circle class="vw-lm" cx="70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="-70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="-36.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="68.0" cy="-36.0" r="2.3"/></g>
<g data-vw-feat>
<path class="vw-brow" d="M-45 -40q15-9 30-1M15 -41q15-8 30 1"/>
<g data-vw-eye="l"><ellipse class="vw-eye" cx="-30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="-30" cy="-22" r="3.2"/></g>
<g data-vw-eye="r"><ellipse class="vw-eye" cx="30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="30" cy="-22" r="3.2"/></g>
<path class="vw-nose" d="M2 -12C1 4-5 12-8 19c5 3 12 3 16 0"/>
<path class="vw-mouth" data-vw-mouth="n" d="M-21 46q21 6 42 0"/>
<path class="vw-mouth" data-vw-mouth="s" d="M-27 40q27 26 54 0" opacity="0"/>
<g class="vw-lms"><circle class="vw-lm" cx="-18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="-36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="0.0" cy="-12.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="0.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="12.0" r="2.3"/><circle class="vw-lm" cx="-9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="0.0" cy="53.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="-22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="41.1" r="2.3"/><circle class="vw-lm" cx="-0.0" cy="39.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="41.1" r="2.3"/></g>
</g>
</g>
</g>
<ellipse class="vw-ring" data-vw-ring rx="120" ry="152"/>
<g class="vw-cue" data-vw-cue transform="translate(104 -142)" opacity="0"><path class="vw-cue-spk" d="M-9 -4h5l7-6v20l-7-6h-5z"/><path class="vw-cue-wave" d="M7 -4q4 4 0 8M11 -8q8 8 0 16"/></g>
</svg><p class="vwf-pill"><span>Turn to one side</span><small class="is-ok">Hold still · capturing in 1</small></p></div>
<div class="vwf-chips"><span class="is-done">✓ Centre your face</span><span class="is-on">Turn to one side</span><span class="">Turn to the other side</span><span class="">Blink both eyes</span><span class="">Smile</span></div></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">7<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Turn to one side</h3><p>Either side first. Turning means looking away from the screen, which is why every step has sound.</p>

<ul class="vwf-cues"><li class="is-voice"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5M12.8 3.6q3.6 4.4 0 8.8" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>Spoken: “Turn your head to one side.”</span></li><li class="is-tick"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="2.4" fill="currentColor"/><circle cx="8" cy="8" r="5.6" fill="none" stroke="currentColor" stroke-width="1.2" opacity=".5"/></svg><span>A tick when the pose is found</span></li><li class="is-chime"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M6 12.5V3.5l7-1.5v9" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/><circle cx="4.6" cy="12.4" r="1.9" fill="currentColor"/><circle cx="11.6" cy="11" r="1.9" fill="currentColor"/></svg><span>A chime when it’s captured</span></li><li class="is-buzz"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><rect x="5" y="2" width="6" height="12" rx="1.6" fill="none" stroke="currentColor" stroke-width="1.4"/><path d="M2.6 5.5v5M13.4 5.5v5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>A short vibration, where the phone supports it</span></li></ul></div>
</li>
<li class="vwf-step" id="vwf-1-7" data-kind="right" data-title="Turn the other way">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>8:34 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-done"><i></i>Document</li><li class="is-on"><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Step 2 of 2 · face and liveness</p><p class="vwf-h">Follow the automatic checks</p>
<div class="vwf-cam is-face is-right"><span class="vwf-sound"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></span><svg class="vwf-face" data-pose="right" viewBox="-150 -190 300 380" aria-hidden="true" focusable="false"><clipPath id="vwf-1-7-art-clip"><ellipse rx="119" ry="151"/></clipPath>
<ellipse class="vw-ring-bg" rx="120" ry="152"/>
<g clip-path="url(#vwf-1-7-art-clip)">
<path class="vw-body" d="M-140 170C-128 122-80 106-36 98M140 170C128 122 80 106 36 98"/>
<g data-vw-head>
<path class="vw-neck" d="M-24 70v28M24 70v28"/>
<ellipse class="vw-skull" cx="0" cy="-14" rx="70" ry="92"/>
<g class="vw-lms"><circle class="vw-lm" cx="70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="-70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="-36.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="68.0" cy="-36.0" r="2.3"/></g>
<g data-vw-feat>
<path class="vw-brow" d="M-45 -40q15-9 30-1M15 -41q15-8 30 1"/>
<g data-vw-eye="l"><ellipse class="vw-eye" cx="-30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="-30" cy="-22" r="3.2"/></g>
<g data-vw-eye="r"><ellipse class="vw-eye" cx="30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="30" cy="-22" r="3.2"/></g>
<path class="vw-nose" d="M2 -12C1 4-5 12-8 19c5 3 12 3 16 0"/>
<path class="vw-mouth" data-vw-mouth="n" d="M-21 46q21 6 42 0"/>
<path class="vw-mouth" data-vw-mouth="s" d="M-27 40q27 26 54 0" opacity="0"/>
<g class="vw-lms"><circle class="vw-lm" cx="-18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="-36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="0.0" cy="-12.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="0.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="12.0" r="2.3"/><circle class="vw-lm" cx="-9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="0.0" cy="53.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="-22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="41.1" r="2.3"/><circle class="vw-lm" cx="-0.0" cy="39.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="41.1" r="2.3"/></g>
</g>
</g>
</g>
<ellipse class="vw-ring" data-vw-ring rx="120" ry="152"/>
<g class="vw-cue" data-vw-cue transform="translate(104 -142)" opacity="0"><path class="vw-cue-spk" d="M-9 -4h5l7-6v20l-7-6h-5z"/><path class="vw-cue-wave" d="M7 -4q4 4 0 8M11 -8q8 8 0 16"/></g>
</svg><p class="vwf-pill"><span>Turn to the other side</span><small class="is-ok">Hold still · capturing in 1</small></p></div>
<div class="vwf-chips"><span class="is-done">✓ Centre your face</span><span class="is-done">✓ Turn to one side</span><span class="is-on">Turn to the other side</span><span class="">Blink both eyes</span><span class="">Smile</span></div></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">8<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Turn the other way</h3><p>Then the opposite side.</p>

<ul class="vwf-cues"><li class="is-voice"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5M12.8 3.6q3.6 4.4 0 8.8" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>Spoken: “Now turn your head the other way.”</span></li><li class="is-tick"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="2.4" fill="currentColor"/><circle cx="8" cy="8" r="5.6" fill="none" stroke="currentColor" stroke-width="1.2" opacity=".5"/></svg><span>A tick when the pose is found</span></li><li class="is-chime"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M6 12.5V3.5l7-1.5v9" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/><circle cx="4.6" cy="12.4" r="1.9" fill="currentColor"/><circle cx="11.6" cy="11" r="1.9" fill="currentColor"/></svg><span>A chime when it’s captured</span></li><li class="is-buzz"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><rect x="5" y="2" width="6" height="12" rx="1.6" fill="none" stroke="currentColor" stroke-width="1.4"/><path d="M2.6 5.5v5M13.4 5.5v5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>A short vibration, where the phone supports it</span></li></ul></div>
</li>
<li class="vwf-step" id="vwf-1-8" data-kind="blink" data-title="Blink">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>8:29 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-done"><i></i>Document</li><li class="is-on"><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Step 2 of 2 · face and liveness</p><p class="vwf-h">Follow the automatic checks</p>
<div class="vwf-cam is-face is-blink"><span class="vwf-sound"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></span><svg class="vwf-face" data-pose="blink" viewBox="-150 -190 300 380" aria-hidden="true" focusable="false"><clipPath id="vwf-1-8-art-clip"><ellipse rx="119" ry="151"/></clipPath>
<ellipse class="vw-ring-bg" rx="120" ry="152"/>
<g clip-path="url(#vwf-1-8-art-clip)">
<path class="vw-body" d="M-140 170C-128 122-80 106-36 98M140 170C128 122 80 106 36 98"/>
<g data-vw-head>
<path class="vw-neck" d="M-24 70v28M24 70v28"/>
<ellipse class="vw-skull" cx="0" cy="-14" rx="70" ry="92"/>
<g class="vw-lms"><circle class="vw-lm" cx="70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="-70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="-36.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="68.0" cy="-36.0" r="2.3"/></g>
<g data-vw-feat>
<path class="vw-brow" d="M-45 -40q15-9 30-1M15 -41q15-8 30 1"/>
<g data-vw-eye="l"><ellipse class="vw-eye" cx="-30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="-30" cy="-22" r="3.2"/></g>
<g data-vw-eye="r"><ellipse class="vw-eye" cx="30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="30" cy="-22" r="3.2"/></g>
<path class="vw-nose" d="M2 -12C1 4-5 12-8 19c5 3 12 3 16 0"/>
<path class="vw-mouth" data-vw-mouth="n" d="M-21 46q21 6 42 0"/>
<path class="vw-mouth" data-vw-mouth="s" d="M-27 40q27 26 54 0" opacity="0"/>
<g class="vw-lms"><circle class="vw-lm" cx="-18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="-36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="0.0" cy="-12.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="0.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="12.0" r="2.3"/><circle class="vw-lm" cx="-9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="0.0" cy="53.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="-22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="41.1" r="2.3"/><circle class="vw-lm" cx="-0.0" cy="39.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="41.1" r="2.3"/></g>
</g>
</g>
</g>
<ellipse class="vw-ring" data-vw-ring rx="120" ry="152"/>
<g class="vw-cue" data-vw-cue transform="translate(104 -142)" opacity="0"><path class="vw-cue-spk" d="M-9 -4h5l7-6v20l-7-6h-5z"/><path class="vw-cue-wave" d="M7 -4q4 4 0 8M11 -8q8 8 0 16"/></g>
</svg><p class="vwf-pill"><span>Blink both eyes</span><small class="is-ok">Hold still · capturing in 1</small></p></div>
<div class="vwf-chips"><span class="is-done">✓ Centre your face</span><span class="is-done">✓ Turn to one side</span><span class="is-done">✓ Turn to the other side</span><span class="is-on">Blink both eyes</span><span class="">Smile</span></div></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">9<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Blink</h3><p>Both eyes.</p>

<ul class="vwf-cues"><li class="is-voice"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5M12.8 3.6q3.6 4.4 0 8.8" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>Spoken: “Blink both eyes.”</span></li><li class="is-tick"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="2.4" fill="currentColor"/><circle cx="8" cy="8" r="5.6" fill="none" stroke="currentColor" stroke-width="1.2" opacity=".5"/></svg><span>A tick when the pose is found</span></li><li class="is-chime"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M6 12.5V3.5l7-1.5v9" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/><circle cx="4.6" cy="12.4" r="1.9" fill="currentColor"/><circle cx="11.6" cy="11" r="1.9" fill="currentColor"/></svg><span>A chime when it’s captured</span></li><li class="is-buzz"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><rect x="5" y="2" width="6" height="12" rx="1.6" fill="none" stroke="currentColor" stroke-width="1.4"/><path d="M2.6 5.5v5M13.4 5.5v5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>A short vibration, where the phone supports it</span></li></ul></div>
</li>
<li class="vwf-step" id="vwf-1-9" data-kind="smile" data-title="Smile">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>8:25 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-done"><i></i>Document</li><li class="is-on"><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Step 2 of 2 · face and liveness</p><p class="vwf-h">Follow the automatic checks</p>
<div class="vwf-cam is-face is-smile"><span class="vwf-sound"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></span><svg class="vwf-face" data-pose="smile" viewBox="-150 -190 300 380" aria-hidden="true" focusable="false"><clipPath id="vwf-1-9-art-clip"><ellipse rx="119" ry="151"/></clipPath>
<ellipse class="vw-ring-bg" rx="120" ry="152"/>
<g clip-path="url(#vwf-1-9-art-clip)">
<path class="vw-body" d="M-140 170C-128 122-80 106-36 98M140 170C128 122 80 106 36 98"/>
<g data-vw-head>
<path class="vw-neck" d="M-24 70v28M24 70v28"/>
<ellipse class="vw-skull" cx="0" cy="-14" rx="70" ry="92"/>
<g class="vw-lms"><circle class="vw-lm" cx="70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="-70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="-36.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="68.0" cy="-36.0" r="2.3"/></g>
<g data-vw-feat>
<path class="vw-brow" d="M-45 -40q15-9 30-1M15 -41q15-8 30 1"/>
<g data-vw-eye="l"><ellipse class="vw-eye" cx="-30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="-30" cy="-22" r="3.2"/></g>
<g data-vw-eye="r"><ellipse class="vw-eye" cx="30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="30" cy="-22" r="3.2"/></g>
<path class="vw-nose" d="M2 -12C1 4-5 12-8 19c5 3 12 3 16 0"/>
<path class="vw-mouth" data-vw-mouth="n" d="M-21 46q21 6 42 0"/>
<path class="vw-mouth" data-vw-mouth="s" d="M-27 40q27 26 54 0" opacity="0"/>
<g class="vw-lms"><circle class="vw-lm" cx="-18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="-36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="0.0" cy="-12.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="0.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="12.0" r="2.3"/><circle class="vw-lm" cx="-9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="0.0" cy="53.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="-22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="41.1" r="2.3"/><circle class="vw-lm" cx="-0.0" cy="39.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="41.1" r="2.3"/></g>
</g>
</g>
</g>
<ellipse class="vw-ring" data-vw-ring rx="120" ry="152"/>
<g class="vw-cue" data-vw-cue transform="translate(104 -142)" opacity="0"><path class="vw-cue-spk" d="M-9 -4h5l7-6v20l-7-6h-5z"/><path class="vw-cue-wave" d="M7 -4q4 4 0 8M11 -8q8 8 0 16"/></g>
</svg><p class="vwf-pill"><span>Smile</span><small class="is-ok">Hold still · capturing in 1</small></p></div>
<div class="vwf-chips"><span class="is-done">✓ Centre your face</span><span class="is-done">✓ Turn to one side</span><span class="is-done">✓ Turn to the other side</span><span class="is-done">✓ Blink both eyes</span><span class="is-on">Smile</span></div></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">10<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Smile</h3><p>The last pose. The five photos go to our server together.</p>

<ul class="vwf-cues"><li class="is-voice"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5M12.8 3.6q3.6 4.4 0 8.8" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>Spoken: “And smile.”</span></li><li class="is-tick"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="2.4" fill="currentColor"/><circle cx="8" cy="8" r="5.6" fill="none" stroke="currentColor" stroke-width="1.2" opacity=".5"/></svg><span>A tick when the pose is found</span></li><li class="is-chime"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M6 12.5V3.5l7-1.5v9" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/><circle cx="4.6" cy="12.4" r="1.9" fill="currentColor"/><circle cx="11.6" cy="11" r="1.9" fill="currentColor"/></svg><span>A chime when it’s captured</span></li><li class="is-buzz"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><rect x="5" y="2" width="6" height="12" rx="1.6" fill="none" stroke="currentColor" stroke-width="1.4"/><path d="M2.6 5.5v5M13.4 5.5v5" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg><span>A short vibration, where the phone supports it</span></li></ul></div>
</li>
<li class="vwf-step" id="vwf-1-10" data-kind="checking" data-title="Checked on our server">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"><span class="vwf-cancel">✕ Cancel</span></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>8:20 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-done"><i></i>Document</li><li class="is-on"><i></i>Liveness</li><li class=""><i></i>Result</li></ol></div><div class="vwf-card"><p class="vwf-k">Step 2 of 2 · face and liveness</p><p class="vwf-h">Follow the automatic checks</p>
<div class="vwf-cam is-face is-checking"><span class="vwf-sound"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2.5 6h2.5l3.5-3v10l-3.5-3H2.5z" fill="currentColor"/><path d="M11 5.5q2 2.5 0 5" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg></span><svg class="vwf-face" data-pose="smile" viewBox="-150 -190 300 380" aria-hidden="true" focusable="false"><clipPath id="vwf-1-10-art-clip"><ellipse rx="119" ry="151"/></clipPath>
<ellipse class="vw-ring-bg" rx="120" ry="152"/>
<g clip-path="url(#vwf-1-10-art-clip)">
<path class="vw-body" d="M-140 170C-128 122-80 106-36 98M140 170C128 122 80 106 36 98"/>
<g data-vw-head>
<path class="vw-neck" d="M-24 70v28M24 70v28"/>
<ellipse class="vw-skull" cx="0" cy="-14" rx="70" ry="92"/>
<g class="vw-lms"><circle class="vw-lm" cx="70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="77.3" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="72.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="61.7" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="47.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="28.8" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="8.0" r="2.3"/><circle class="vw-lm" cx="-70.0" cy="-14.0" r="2.3"/><circle class="vw-lm" cx="-68.0" cy="-36.0" r="2.3"/><circle class="vw-lm" cx="-62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="-52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="-39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="-24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="-8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="8.4" cy="-105.3" r="2.3"/><circle class="vw-lm" cx="24.8" cy="-100.0" r="2.3"/><circle class="vw-lm" cx="39.8" cy="-89.7" r="2.3"/><circle class="vw-lm" cx="52.4" cy="-75.0" r="2.3"/><circle class="vw-lm" cx="62.0" cy="-56.8" r="2.3"/><circle class="vw-lm" cx="68.0" cy="-36.0" r="2.3"/></g>
<g data-vw-feat>
<path class="vw-brow" d="M-45 -40q15-9 30-1M15 -41q15-8 30 1"/>
<g data-vw-eye="l"><ellipse class="vw-eye" cx="-30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="-30" cy="-22" r="3.2"/></g>
<g data-vw-eye="r"><ellipse class="vw-eye" cx="30" cy="-22" rx="12" ry="5.5"/><circle class="vw-pupil" cx="30" cy="-22" r="3.2"/></g>
<path class="vw-nose" d="M2 -12C1 4-5 12-8 19c5 3 12 3 16 0"/>
<path class="vw-mouth" data-vw-mouth="n" d="M-21 46q21 6 42 0"/>
<path class="vw-mouth" data-vw-mouth="s" d="M-27 40q27 26 54 0" opacity="0"/>
<g class="vw-lms"><circle class="vw-lm" cx="-18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="-42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="-36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="42.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-17.2" r="2.3"/><circle class="vw-lm" cx="18.0" cy="-22.0" r="2.3"/><circle class="vw-lm" cx="24.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="36.0" cy="-26.8" r="2.3"/><circle class="vw-lm" cx="-44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="-36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="-15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="15.7" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="23.9" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="36.1" cy="-43.7" r="2.3"/><circle class="vw-lm" cx="44.3" cy="-41.2" r="2.3"/><circle class="vw-lm" cx="0.0" cy="-12.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="0.0" r="2.3"/><circle class="vw-lm" cx="0.0" cy="12.0" r="2.3"/><circle class="vw-lm" cx="-9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="9.0" cy="20.0" r="2.3"/><circle class="vw-lm" cx="22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="0.0" cy="53.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="50.9" r="2.3"/><circle class="vw-lm" cx="-22.0" cy="46.0" r="2.3"/><circle class="vw-lm" cx="-15.6" cy="41.1" r="2.3"/><circle class="vw-lm" cx="-0.0" cy="39.0" r="2.3"/><circle class="vw-lm" cx="15.6" cy="41.1" r="2.3"/></g>
</g>
</g>
</g>
<ellipse class="vw-ring" data-vw-ring rx="120" ry="152"/>
<g class="vw-cue" data-vw-cue transform="translate(104 -142)" opacity="0"><path class="vw-cue-spk" d="M-9 -4h5l7-6v20l-7-6h-5z"/><path class="vw-cue-wave" d="M7 -4q4 4 0 8M11 -8q8 8 0 16"/></g>
</svg><p class="vwf-pill"><span>Submitting checks</span></p></div>
<div class="vwf-chips"><span class="is-done">✓ Centre your face</span><span class="is-done">✓ Turn to one side</span><span class="is-done">✓ Turn to the other side</span><span class="is-done">✓ Blink both eyes</span><span class="is-done">✓ Smile</span></div><p class="vwf-wait"><span class="vwf-spin"></span>Analysing liveness and face match…</p></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">11<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Checked on our server</h3><p>Our server reads the document, works out your age, checks that a real person is in front of the camera, and compares your face with the photo on the document.</p>
</div>
</li>
<li class="vwf-step" id="vwf-1-11" data-kind="result" data-title="Done">
<div class="vwf-device"><div class="vwf-phone" aria-hidden="true"><div class="vwf-screen"><div class="vwf-sb"><span>9:41</span><span class="vwf-sb-i"><i></i><i></i><i></i></span></div><div class="vwf-top"><img class="vwf-mark" src="https://vestracorp.com/news/assets/veriwell-wordmark.webp?v=ed74f04184" alt="Veriwell" width="1193" height="313" decoding="async" loading="lazy"></div>
<div class="vwf-prog"><p><span>UK age assurance</span><span>8:11 left</span></p><ol><li class="is-done"><i></i>Consent</li><li class="is-done"><i></i>Document</li><li class="is-done"><i></i>Liveness</li><li class="is-on"><i></i>Result</li></ol></div><div class="vwf-card vwf-done"><span class="vwf-ok"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M3.5 8.5 6.5 11.5 12.5 4.5" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></span><p class="vwf-h">You meet the 18+ requirement</p>
<p class="vwf-p">The result has been sent to the website.</p><p class="vwf-btn is-dark">Return to website</p>
<div class="vwf-sid"><small>Session ID</small><code>Qm7xT2vR9kLp4sWz8NcY1aHd6JfE</code></div></div></div></div></div>
<div class="vwf-text"><p class="vwf-num">12<span class="vwf-of"> of 12</span></p><h3 class="vwf-title">Done</h3><p>You see the result on your phone, and the website gets it too. One tap takes you back.</p>

<ul class="vwf-cues"><li class="is-chime"><svg viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M6 12.5V3.5l7-1.5v9" fill="none" stroke="currentColor" stroke-width="1.4" stroke-linejoin="round"/><circle cx="4.6" cy="12.4" r="1.9" fill="currentColor"/><circle cx="11.6" cy="11" r="1.9" fill="currentColor"/></svg><span>A sound for the result</span></li></ul></div>
</li>
</ol>
<figcaption class="c-note">The flow as it appears on a phone, simplified. The words on screen and the spoken prompts are the real ones.</figcaption>
</figure>
</section>
<section class="launch-section" aria-labelledby="on-your-phone">
<h2 id="on-your-phone"><a class="anchor" href="https://vestracorp.com/news/veriwell/#on-your-phone" aria-hidden="true" tabindex="-1">#</a>On your phone</h2>
<p>Everything that guides you runs on your phone. Framing a document uses simple measurements of each camera frame: sharpness, brightness, glare, edges and movement. The face poses use Google’s MediaPipe Face Landmarker, running in the browser, to see where your face is and whether you’ve turned, blinked or smiled.</p>
<p>None of that decides anything. Code on a phone can be changed and a camera can be faked, so the phone only helps you take good photos. The checks that count happen on our servers, on the photos you send.</p>
<p>Sound matters more than you’d think. Turning your head means looking away from the screen, so every step has a cue: a tick when the pose is found, a chime when it’s captured, and a short spoken prompt for what to do next. Phones that support it vibrate too; iPhones don’t allow it for web pages. Sound is on to start with, and there’s a mute button on the camera view that remembers your choice.</p>
</section>
<section class="launch-section" aria-labelledby="what-the-website-gets">
<h2 id="what-the-website-gets"><a class="anchor" href="https://vestracorp.com/news/veriwell/#what-the-website-gets" aria-hidden="true" tabindex="-1">#</a>What the website gets</h2>
<p>When the check finishes, the website gets a short result: whether you meet the age it asked for, which age that was, whether the check passed, when it finished, and reference numbers to match it to your visit. That’s sent encrypted, so only the website’s own server can read it. If the website looks the check up through our API, it also sees which type of document you used.</p>
<p>It never gets your name, your date of birth, your document number or any photo.</p>
<figure class="c c-wide c-vwd" data-vwd id="vwd-2">
<div class="vwd-head"><p class="vwd-title">Where each piece goes</p><ul class="vwd-views"><li class="vwd-view" data-view="website"><p class="vwd-view-name">The website gets</p><p class="vwd-view-text">A yes or a no for the age it asked about, and enough to match it to the right visit.</p></li><li class="vwd-view" data-view="kept"><p class="vwd-view-name">Veriwell keeps</p><p class="vwd-view-text">A short record of the check, deleted after 7 days. The face template lasts minutes, in memory.</p></li><li class="vwd-view" data-view="never"><p class="vwd-view-name">Never kept</p><p class="vwd-view-text">Your photos, your date of birth, your name and your document number.</p></li></ul></div>
<ul class="vwd-items">
<li class="vwd-item" data-b="website kept"><p class="vwd-name">Over the age, yes or no</p><ul class="vwd-badges"><li class="is-website">Sent to the website</li><li class="is-kept">Kept: 7 days</li></ul><p class="vwd-detail">The answer to the one question the website asked.</p></li>
<li class="vwd-item" data-b="website kept"><p class="vwd-name">The age it asked about</p><ul class="vwd-badges"><li class="is-website">Sent to the website</li><li class="is-kept">Kept: 7 days</li></ul><p class="vwd-detail">18 unless the website chooses another age, from 16 to 25.</p></li>
<li class="vwd-item" data-b="website kept"><p class="vwd-name">Passed or failed, and when</p><ul class="vwd-badges"><li class="is-website">Sent to the website</li><li class="is-kept">Kept: 7 days</li></ul><p class="vwd-detail">Whether the whole check passed, and the time it finished.</p></li>
<li class="vwd-item" data-b="website kept"><p class="vwd-name">Session ID</p><ul class="vwd-badges"><li class="is-website">Sent to the website</li><li class="is-kept">Kept: 7 days</li></ul><p class="vwd-detail">A random reference for this check. It’s on your result screen too, so you can delete the record.</p></li>
<li class="vwd-item" data-b="website kept"><p class="vwd-name">Document type</p><ul class="vwd-badges"><li class="is-website">Sent to the website</li><li class="is-kept">Kept: 7 days</li></ul><p class="vwd-detail">Passport or driving licence. The website sees it only if it looks the check up through the API.</p></li>
<li class="vwd-item" data-b="kept"><p class="vwd-name">The result of each check</p><ul class="vwd-badges"><li class="is-no">Not sent to the website</li><li class="is-kept">Kept: 7 days</li></ul><p class="vwd-detail">Whether the document was valid and in date, and whether the face checks passed.</p></li>
<li class="vwd-item" data-b="kept"><p class="vwd-name">When you agreed</p><ul class="vwd-badges"><li class="is-no">Not sent to the website</li><li class="is-kept">Kept: 7 days</li></ul><p class="vwd-detail">The time you gave consent, and which version of the notice you agreed to.</p></li>
<li class="vwd-item" data-b="kept"><p class="vwd-name">Face template</p><ul class="vwd-badges"><li class="is-no">Not sent to the website</li><li class="is-kept">Kept: up to 5 minutes, in memory</li></ul><p class="vwd-detail">Numbers describing the face on your document, used to compare with your selfie. Deleted as soon as that comparison runs.</p></li>
<li class="vwd-item" data-b="never"><p class="vwd-name">Document photo</p><ul class="vwd-badges"><li class="is-no">Not sent to the website</li><li class="is-never">Never stored</li></ul><p class="vwd-detail">Checked in memory on our server, then discarded. Never written to disk or to a log.</p></li>
<li class="vwd-item" data-b="never"><p class="vwd-name">Selfie photos</p><ul class="vwd-badges"><li class="is-no">Not sent to the website</li><li class="is-never">Never stored</li></ul><p class="vwd-detail">The five poses. Checked in memory, then discarded.</p></li>
<li class="vwd-item" data-b="never"><p class="vwd-name">Date of birth</p><ul class="vwd-badges"><li class="is-no">Not sent to the website</li><li class="is-never">Never stored</li></ul><p class="vwd-detail">Read from the document to work out your age on the day, by UK date, then dropped.</p></li>
<li class="vwd-item" data-b="never"><p class="vwd-name">Name and document number</p><ul class="vwd-badges"><li class="is-no">Not sent to the website</li><li class="is-never">Never stored</li></ul><p class="vwd-detail">Neither is stored, and neither is ever sent to the website.</p></li>
</ul>
<figcaption class="c-note">From Veriwell’s code and settings, October 2026.</figcaption>
</figure>
</section>
<section class="launch-section" aria-labelledby="what-we-keep">
<h2 id="what-we-keep"><a class="anchor" href="https://vestracorp.com/news/veriwell/#what-we-keep" aria-hidden="true" tabindex="-1">#</a>What we keep</h2>
<p>As little as we can, for as short a time as we can. Veriwell runs on Vestra’s own servers in Germany.</p>
<figure class="c c-timeline"><ol class="c-steps"><li class="c-step"><p class="c-step-when">During the check</p><div class="c-step-text"><p class="c-step-what">Photos are held in memory only</p><p class="c-step-detail">Never written to disk, to logs or to the database, and discarded once checked.</p></div></li><li class="c-step"><p class="c-step-when">Up to 5 minutes</p><div class="c-step-text"><p class="c-step-what">The face template is deleted</p><p class="c-step-detail">As soon as your selfie has been compared with it, or after five minutes if that never happens.</p></div></li><li class="c-step"><p class="c-step-when">10 minutes</p><div class="c-step-text"><p class="c-step-what">An unfinished session ends</p><p class="c-step-detail">It expires by itself, and its links stop working.</p></div></li><li class="c-step"><p class="c-step-when">7 days</p><div class="c-step-text"><p class="c-step-what">The session record is deleted</p><p class="c-step-detail">The yes or no, the age asked about, the document type, each check’s result and when you agreed.</p></div></li><li class="c-step"><p class="c-step-when">Any time</p><div class="c-step-text"><p class="c-step-what">You can delete it yourself</p><p class="c-step-detail">Enter the session ID from your result screen at <a href="https://veriwell.xyz/delete-my-data" rel="noopener">veriwell.xyz/delete-my-data</a>.</p></div></li></ol></figure>
</section>
<section class="launch-section" aria-labelledby="for-developers">
<h2 id="for-developers"><a class="anchor" href="https://vestracorp.com/news/veriwell/#for-developers" aria-hidden="true" tabindex="-1">#</a>For developers</h2>
<p>Veriwell is an API. Your server opens a session with the age it needs, sends the person to the link it gets back, and receives the result at a callback address you’ve approved in advance. The result is encrypted with your API secret using AES-256-GCM, and if your server doesn’t answer, delivery is retried with growing gaps. You can also look up a session with your API key.</p>
<p>The <a href="https://veriwell.xyz/developers" rel="noopener">developer portal</a> has API keys you can name and revoke, your usage, delivery logs and the <a href="https://veriwell.xyz/developers/docs" rel="noopener">documentation</a>. The free plan includes 1,000 units a month: a passed check uses one, a failed check half, and an abandoned one none. Developers pass a Veriwell age check themselves before they can use the portal.</p>
</section>
<section class="launch-section" aria-labelledby="open-source">
<h2 id="open-source"><a class="anchor" href="https://vestracorp.com/news/veriwell/#open-source" aria-hidden="true" tabindex="-1">#</a>Open source</h2>
<p>The camera side of Veriwell is open source. <a href="https://github.com/vestra-corp/veriwell-capture" rel="noopener">veriwell-capture</a>, the browser toolkit for document and selfie capture, with its guidance, sound cues and passport MRZ parser, is on GitHub under the Apache License 2.0. <a href="https://vestracorp.com/news/introducing-veriwell-capture/">Read more about it</a>.</p>
</section>
<section class="launch-section" aria-labelledby="try-it">
<h2 id="try-it"><a class="anchor" href="https://vestracorp.com/news/veriwell/#try-it" aria-hidden="true" tabindex="-1">#</a>Try it</h2>
<p>The <a href="https://veriwell.xyz/demo" rel="noopener">demo</a> runs the whole check, end to end, with the same server checks: choose an age, scan the code and use your own document. The session expires after 10 minutes, and the camera starts only once you’ve agreed on your phone.</p>
<div class="c c-callout is-note" role="note"><svg class="c-callout-icon" viewBox="0 0 20 20" aria-hidden="true" focusable="false"><circle cx="10" cy="10" r="7.25" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M10 9.2v4.4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><circle cx="10" cy="6.5" r=".95" fill="currentColor"/></svg><div class="c-callout-body"><p class="visually-hidden">Note</p><p class="c-callout-title">What Veriwell doesn’t do</p><p>It reads the document and checks the person in front of the camera; it doesn’t read passport chips or check documents against the issuer’s records. It doesn’t claim to make a website compliant with the Online Safety Act or any other law: that’s for each website to judge. It’s new, and we’ll keep improving it; feedback is welcome at <a href="mailto:support@vestracorp.com">support@vestracorp.com</a>.</p>
</div></div>
</section>
]]></content:encoded>
      <enclosure url="https://vestracorp.com/news/veriwell/og.jpg?v=68072c9205" type="image/jpeg" length="36950"/>
    </item>
    <item>
      <title>Daily backups for every game server</title>
      <link>https://vestracorp.com/news/daily-game-server-backups/</link>
      <guid isPermaLink="true">https://vestracorp.com/news/daily-game-server-backups/</guid>
      <pubDate>Wed, 14 Oct 2026 23:00:00 GMT</pubDate>
      <dc:creator>Vestra Hosting</dc:creator>
      <category>Product</category>
      <description>Every game server on Vestra Hosting is now backed up every night, stored off-site and restorable from the panel. On every plan, at no extra cost.</description>
      <content:encoded><![CDATA[<p>Since 15 October, every game server on Vestra Hosting is backed up automatically, every night. It’s included on every plan, Tiny, Starter, Pro and Enterprise, at no extra cost, and you can restore a backup yourself from the <a href="https://dash.vestra.systems" rel="noopener">game panel</a> whenever you need to.</p>
<p>A broken update, a mod that clears a map, a config change you’d rather not have made: these things happen. They shouldn’t cost you a world or a community you’ve spent months building.</p>
<h2 id="what-you-get"><a class="anchor" href="https://vestracorp.com/news/daily-game-server-backups/#what-you-get" aria-hidden="true" tabindex="-1">#</a>What you get</h2>
<figure class="c c-restorepoints" data-restorepoints>
<div class="rp-grid">
<div class="rp-group">
<p class="rp-title">Automatic, every night</p>
<ol class="rp-list"><li class="rp-point"><span class="rp-dot" aria-hidden="true"></span><span class="rp-when">Today</span><span class="rp-note">Newest</span></li><li class="rp-point"><span class="rp-dot" aria-hidden="true"></span><span class="rp-when">Yesterday</span></li><li class="rp-point is-oldest"><span class="rp-dot" aria-hidden="true"></span><span class="rp-when">2 days ago</span><span class="rp-note">Replaced by tomorrow’s</span></li></ol>
<p class="rp-sub">The three most recent are kept. You can’t delete these, and they don’t use your manual slots.</p>
</div>
<div class="rp-group is-manual">
<p class="rp-title">Manual, whenever you like</p>
<ul class="rp-list"><li class="rp-point is-manual"><span class="rp-dot" aria-hidden="true"></span><span class="rp-when">Before the big update</span><span class="rp-note">Kept until you replace it</span></li></ul>
<p class="rp-sub">1 slot on Tiny, Starter and Pro; 3 on Enterprise.</p>
</div>
</div>

</figure>
<ul>
<li><strong>Three automatic backups.</strong> Every night we back up your server and keep the three most recent, so you can go back up to three days. They don’t use your manual slots, and they can’t be deleted, so they’re there when you need them.</li>
<li><strong>Manual backups for big changes.</strong> About to install a big update or a new mod pack? Take a backup first. You get one manual slot on Tiny, Starter and Pro, and three on Enterprise. A manual backup is kept until you replace it.</li>
<li><strong>Restore it yourself.</strong> Pick a backup in the panel and restore it, at any time. You don’t need to ask us first.</li>
</ul>
<h2 id="smart-about-what-it-saves"><a class="anchor" href="https://vestracorp.com/news/daily-game-server-backups/#smart-about-what-it-saves" aria-hidden="true" tabindex="-1">#</a>Smart about what it saves</h2>
<p>Most of a game server’s folder is files that come back on their own: the game itself, Steam files, caches and logs. Backing those up would make every backup bigger and slower without making it any more useful. So backups keep what’s yours (worlds and saves, addons, plugins, mods, resources, configs and data) and skip what reinstalls itself.</p>
<figure class="c c-backups" data-backups>
<div class="bx-head"><p class="bx-title">What gets backed up</p><ul class="bx-legend" aria-hidden="true"><li class="is-keep"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg>Backed up</li><li class="is-skip"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg>Skipped</li></ul></div>
<div class="bx-panels">
<section class="bx-panel" id="bx-1-0" aria-labelledby="bx-1-0-h" data-label="Garry’s Mod" data-game="gmod">
<h3 class="bx-game" id="bx-1-0-h">Garry’s Mod</h3>
<p class="visually-hidden">7 items kept, 7 skipped.</p>
<ul class="bx-tree"><li class="bx-row is-dir" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2 4.5h4.2l1.4 1.5H14v6.5H2z"/></svg><code class="bx-name">garrysmod/</code></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">addons/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Your addons</span></span></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">gamemodes/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Gamemodes</span></span></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">maps/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Custom maps</span></span></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">lua/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Server Lua</span></span></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">cfg/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Server config</span></span></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">data/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Addon and player data</span></span></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">sv.db</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Server data (a local file, not MySQL)</span></span></li><li class="bx-row is-skip" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">cache/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Cache</span></span></li><li class="bx-row is-skip" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">download/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Downloads again</span></span></li><li class="bx-row is-skip" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">logs/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Logs</span></span></li><li class="bx-row is-skip" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">garrysmod_*.vpk</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Game files</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">sourceengine/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Engine files</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">platform/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Engine files</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">steamcmd/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Steam files</span></span></li></ul>
<div class="bx-size" style="--share:0.1818">
<p class="bx-size-label">A real Garry’s Mod server on our hosting</p>
<div class="bx-bar-row"><span class="bx-bar-name">Whole server</span><span class="bx-bar"><span class="bx-bar-fill is-full"></span></span><span class="bx-bar-val">about 11 GB</span></div>
<div class="bx-bar-row"><span class="bx-bar-name">Backed up</span><span class="bx-bar"><span class="bx-bar-fill is-kept"></span></span><span class="bx-bar-val">about 2 GB</span></div>
</div>
</section>
<section class="bx-panel" id="bx-1-1" aria-labelledby="bx-1-1-h" data-label="FiveM" data-game="fivem">
<h3 class="bx-game" id="bx-1-1-h">FiveM</h3>
<p class="visually-hidden">3 items kept, 5 skipped.</p>
<ul class="bx-tree"><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">resources/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Your resources</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">server.cfg</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Server config</span></span></li><li class="bx-row is-dir" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2 4.5h4.2l1.4 1.5H14v6.5H2z"/></svg><code class="bx-name">txData/</code></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">default/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">txAdmin data</span></span></li><li class="bx-row is-skip" data-d="2"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">cache/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Cache</span></span></li><li class="bx-row is-skip" data-d="2"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">logs/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Logs</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">alpine/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Server artifacts</span></span></li><li class="bx-row is-dir" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2 4.5h4.2l1.4 1.5H14v6.5H2z"/></svg><code class="bx-name">cache/</code></li><li class="bx-row is-skip" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">files/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Cache</span></span></li><li class="bx-row is-skip" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">data/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Cache</span></span></li></ul>

</section>
<section class="bx-panel" id="bx-1-2" aria-labelledby="bx-1-2-h" data-label="Minecraft" data-game="minecraft">
<h3 class="bx-game" id="bx-1-2-h">Minecraft</h3>
<p class="visually-hidden">9 items kept, 5 skipped.</p>
<ul class="bx-tree"><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">world/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Your world</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">world_nether/</code><span class="bx-why"><span class="visually-hidden">Kept</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">world_the_end/</code><span class="bx-why"><span class="visually-hidden">Kept</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">plugins/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Plugins and their data</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">mods/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Mods, on modded servers</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">config/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Configs</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">server.properties</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Settings</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">ops.json</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Operators</span></span></li><li class="bx-row is-keep" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">whitelist.json</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Whitelist</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">libraries/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Server libraries</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">versions/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Server jars</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">cache/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Cache</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">logs/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Logs</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">crash-reports/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Crash reports</span></span></li></ul>

</section>
<section class="bx-panel" id="bx-1-3" aria-labelledby="bx-1-3-h" data-label="Rust" data-game="rust">
<h3 class="bx-game" id="bx-1-3-h">Rust</h3>
<p class="visually-hidden">4 items kept, 4 skipped.</p>
<ul class="bx-tree"><li class="bx-row is-dir" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2 4.5h4.2l1.4 1.5H14v6.5H2z"/></svg><code class="bx-name">server/</code></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">my_server/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Map saves, player data, config</span></span></li><li class="bx-row is-dir" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><path d="M2 4.5h4.2l1.4 1.5H14v6.5H2z"/></svg><code class="bx-name">oxide/</code></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">plugins/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Plugins</span></span></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">config/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Plugin config</span></span></li><li class="bx-row is-keep" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="7"/><path d="m4.9 8.2 2.1 2.1 4.1-4.4"/></svg><code class="bx-name">data/</code><span class="bx-why"><span class="visually-hidden">Kept: </span><span class="bx-note">Plugin data</span></span></li><li class="bx-row is-skip" data-d="1"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">logs/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Logs</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">RustDedicated_Data/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Game files</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">Bundles/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Game files</span></span></li><li class="bx-row is-skip" data-d="0"><svg class="bx-mark" viewBox="0 0 16 16" aria-hidden="true" focusable="false"><circle cx="8" cy="8" r="6.5"/><path d="M5.2 8h5.6"/></svg><code class="bx-name">steamapps/</code><span class="bx-why"><span class="visually-hidden">Skipped: </span><span class="bx-tag">Reinstalls itself</span><span class="bx-note">Steam files</span></span></li></ul>

</section>
</div>
<figcaption class="c-note">Simplified folder trees for typical servers. Your own server’s list is in its <code>.pteroignore</code> file.</figcaption>
</figure>
<p>Here’s what that looks like in practice. One large Garry’s Mod server on our hosting is about 11 GB on disk; its backup is about 2 GB, and that 2 GB is the part that matters. Another, at 6.8 GB, backs up about 300 MB.</p>
<p>You’re in control of the list. It lives in a file called <code>.pteroignore</code> in your server folder, one line for each thing that’s skipped. If you keep something important in a folder we skip, delete that line and it will be backed up from then on.</p>
<h2 id="off-site-and-checked"><a class="anchor" href="https://vestracorp.com/news/daily-game-server-backups/#off-site-and-checked" aria-hidden="true" tabindex="-1">#</a>Off-site, and checked</h2>
<p>Backups don’t sit on the machine that runs your server. They’re stored, encrypted, on separate backup storage with Hetzner in Germany. Each of the machines that runs game servers can only reach its own backup area: one can’t touch another’s backups, or the backups we keep of Vestra’s own systems.</p>
<p>Every day an automatic check confirms that every server got its backup, and alerts our team if one was missed or failed. We also restore backups from time to time as a test, to make sure they work when you need them.</p>
<h2 id="what-isn-t-included"><a class="anchor" href="https://vestracorp.com/news/daily-game-server-backups/#what-isn-t-included" aria-hidden="true" tabindex="-1">#</a>What isn’t included</h2>
<div class="c c-callout is-note" role="note"><svg class="c-callout-icon" viewBox="0 0 20 20" aria-hidden="true" focusable="false"><circle cx="10" cy="10" r="7.25" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M10 9.2v4.4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><circle cx="10" cy="6.5" r=".95" fill="currentColor"/></svg><div class="c-callout-body"><p class="visually-hidden">Note</p><p class="c-callout-title">Databases aren’t in these backups</p><p>If your server uses a MySQL database attached to it in the panel, for player data, economies, bans or anything else, it isn’t part of these backups. We back up our database servers separately, but those backups can’t be restored from the panel. Please export anything important from your database regularly and keep a copy yourself.</p>
</div></div>
<p>The same goes for anything you couldn’t replace: daily backups make losing it much less likely, but a copy of your own is still the safest place for it.</p>
<h2 id="where-to-find-it"><a class="anchor" href="https://vestracorp.com/news/daily-game-server-backups/#where-to-find-it" aria-hidden="true" tabindex="-1">#</a>Where to find it</h2>
<p>Backups are in the <a href="https://dash.vestra.systems" rel="noopener">game panel</a>, under Backups for each of your servers. The <a href="https://vestra.systems/#plans-section" rel="noopener">plans on our pricing page</a> now list backups too, and there’s a short note in the <a href="https://vestracorp.com/news/changelog/">changelog</a>. For the bigger picture of how we look after our own systems, see <a href="https://vestracorp.com/news/how-we-protect-your-data/">how we protect your data</a>.</p>
<p>Questions are welcome on <a href="https://discord.vestra.lol" rel="noopener">Discord</a> or in a ticket.</p>
]]></content:encoded>
      <enclosure url="https://vestracorp.com/news/daily-game-server-backups/og.jpg?v=da843f65b1" type="image/jpeg" length="72857"/>
    </item>
    <item>
      <title>Vestra Hyperion</title>
      <link>https://vestracorp.com/news/vestra-hyperion/</link>
      <guid isPermaLink="true">https://vestracorp.com/news/vestra-hyperion/</guid>
      <pubDate>Wed, 14 Oct 2026 23:00:00 GMT</pubDate>
      <dc:creator>Vestra</dc:creator>
      <category>Product</category>
      <description>Hyperion is Vestra’s AI anticheat. It reads how a player’s aim moves, one server tick at a time, and passes anything that doesn’t look human to a person to review.</description>
      <content:encoded><![CDATA[<section class="launch-section launch-intro">
<p>Vestra Hyperion is our AI anticheat. We build it in-house and it is in active development. The current release is Hyperion 1.2R, and we are testing it on our own Garry’s Mod server, where it helps our moderators decide what to look at. People make every decision.</p>
<p>Hyperion works from the server’s side, using what a player’s game already sends. For each shot, it looks at how the aim moved around it and asks one question: is this something a human hand produced?</p>
</section>
<section class="launch-section" aria-labelledby="why-aim-data">
<h2 id="why-aim-data"><a class="anchor" href="https://vestracorp.com/news/vestra-hyperion/#why-aim-data" aria-hidden="true" tabindex="-1">#</a>Why aim data</h2>
<p>A small addon on our server records every command a player’s game sends, 22 times a second: the mouse input, where the view points, and where the targets were at that moment, after the server’s usual lag compensation. Around each shot, Hyperion looks at the few seconds before it and a moment after.</p>
<figure class="c c-wide c-stats" data-stats><ul class="c-stats-list" data-n="3"><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">22</span><span aria-hidden="true" data-count>22</span></span><span class="c-stat-label">Commands a second, every one recorded</span></li><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">45 ms</span><span aria-hidden="true" data-count>45 ms</span></span><span class="c-stat-label">How long one command lasts</span></li><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">83 ms</span><span aria-hidden="true" data-count>83 ms</span></span><span class="c-stat-label">Between frames of a 12 fps video</span></li></ul><figcaption class="c-note">The moment that gives a cheat away can be a single command, shorter than one frame of video.</figcaption></figure>
<p>Why not just watch the video? Because the decisive moment is often a single command, about 45 ms on a 22-tick server. A 12 fps clip shows a new frame every 83 ms, so that moment can fall between two frames and never be seen at all.</p>
<p>Video still has its place. Hyperion also has a video model that scores gameplay clips from several viewpoints, and we use it alongside the aim data, for clips and for reviews.</p>
</section>
<section class="launch-section" aria-labelledby="what-it-looks-for">
<h2 id="what-it-looks-for"><a class="anchor" href="https://vestracorp.com/news/vestra-hyperion/#what-it-looks-for" aria-hidden="true" tabindex="-1">#</a>What it looks for</h2>
<p>Hyperion looks for three kinds of cheat, and each leaves a different mark in the commands. Below, each one is played back at 22 ticks a second.</p>
<figure class="c c-wide c-aim" data-aim data-ticks="36">
<div class="c-aim-head"><p class="c-aim-title">How Hyperion sees it</p><p class="c-aim-label">Illustration</p></div>
<div class="c-aim-panels">
<section class="c-aim-panel" id="aim-1-0" aria-labelledby="aim-1-0-h" data-kind="human" data-label="Human">
<h3 class="c-aim-name" id="aim-1-0-h">Human</h3>
<div class="c-aim-grid"><div class="c-aim-fig"><svg class="c-aim-view" viewBox="0 40 600 270" aria-hidden="true" focusable="false"><defs><pattern id="aim-1-0-grid" width="40" height="40" patternUnits="userSpaceOnUse"><circle cx="20" cy="20" r="0.9"/></pattern></defs><rect class="c-aim-bg" y="40" width="600" height="270" fill="url(#aim-1-0-grid)"/><g class="c-aim-target" data-pos="452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152 452,152" transform="translate(452 152)"><circle r="17"/></g><line class="c-aim-seg" data-t="1" x1="77.3" y1="268.2" x2="77.3" y2="267.6"/><line class="c-aim-seg" data-t="2" x1="77.3" y1="267.6" x2="77.6" y2="267.3"/><line class="c-aim-seg" data-t="3" x1="77.6" y1="267.3" x2="81.5" y2="267"/><line class="c-aim-seg" data-t="4" x1="81.5" y1="267" x2="102.1" y2="265.9"/><line class="c-aim-seg" data-t="5" x1="102.1" y1="265.9" x2="147.8" y2="262.2"/><line class="c-aim-seg" data-t="6" x1="147.8" y1="262.2" x2="211.8" y2="249.2"/><line class="c-aim-seg" data-t="7" x1="211.8" y1="249.2" x2="286.5" y2="231.2"/><line class="c-aim-seg" data-t="8" x1="286.5" y1="231.2" x2="360.1" y2="205.2"/><line class="c-aim-seg" data-t="9" x1="360.1" y1="205.2" x2="420.3" y2="179.8"/><line class="c-aim-seg" data-t="10" x1="420.3" y1="179.8" x2="461.7" y2="162.1"/><line class="c-aim-seg" data-t="11" x1="461.7" y1="162.1" x2="479.6" y2="153.7"/><line class="c-aim-seg" data-t="12" x1="479.6" y1="153.7" x2="484.3" y2="150.7"/><line class="c-aim-seg" data-t="13" x1="484.3" y1="150.7" x2="464.8" y2="152.8"/><line class="c-aim-seg" data-t="14" x1="464.8" y1="152.8" x2="452.9" y2="153.5"/><line class="c-aim-seg" data-t="15" x1="452.9" y1="153.5" x2="447.5" y2="153.4"/><line class="c-aim-seg" data-t="16" x1="447.5" y1="153.4" x2="448.4" y2="154"/><line class="c-aim-seg" data-t="17" x1="448.4" y1="154" x2="451.1" y2="154.1"/><line class="c-aim-seg" data-t="18" x1="451.1" y1="154.1" x2="452.3" y2="147.5"/><line class="c-aim-seg" data-t="19" x1="452.3" y1="147.5" x2="452.5" y2="145.1"/><line class="c-aim-seg" data-t="20" x1="452.5" y1="145.1" x2="453.1" y2="147.3"/><line class="c-aim-seg" data-t="21" x1="453.1" y1="147.3" x2="452.9" y2="150.2"/><line class="c-aim-seg" data-t="22" x1="452.9" y1="150.2" x2="451.8" y2="151.2"/><line class="c-aim-seg" data-t="23" x1="451.8" y1="151.2" x2="450.6" y2="152.1"/><line class="c-aim-seg" data-t="24" x1="450.6" y1="152.1" x2="450.9" y2="152"/><line class="c-aim-seg" data-t="25" x1="450.9" y1="152" x2="452.3" y2="152.2"/><line class="c-aim-seg" data-t="26" x1="452.3" y1="152.2" x2="452" y2="151.7"/><line class="c-aim-seg" data-t="27" x1="452" y1="151.7" x2="453" y2="152.1"/><line class="c-aim-seg" data-t="28" x1="453" y1="152.1" x2="452.1" y2="152.8"/><line class="c-aim-seg" data-t="29" x1="452.1" y1="152.8" x2="451.8" y2="152.6"/><line class="c-aim-seg" data-t="30" x1="451.8" y1="152.6" x2="452.9" y2="152.4"/><line class="c-aim-seg" data-t="31" x1="452.9" y1="152.4" x2="453.1" y2="152"/><line class="c-aim-seg" data-t="32" x1="453.1" y1="152" x2="452.9" y2="151.5"/><line class="c-aim-seg" data-t="33" x1="452.9" y1="151.5" x2="453" y2="151.3"/><line class="c-aim-seg" data-t="34" x1="453" y1="151.3" x2="453.6" y2="152.3"/><line class="c-aim-seg" data-t="35" x1="453.6" y1="152.3" x2="452.5" y2="152.8"/><circle class="c-aim-dot" data-t="0" cx="77.3" cy="268.2" r="2.3"/><circle class="c-aim-dot" data-t="1" cx="77.3" cy="267.6" r="2.3"/><circle class="c-aim-dot" data-t="2" cx="77.6" cy="267.3" r="2.3"/><circle class="c-aim-dot" data-t="3" cx="81.5" cy="267" r="2.3"/><circle class="c-aim-dot" data-t="4" cx="102.1" cy="265.9" r="2.3"/><circle class="c-aim-dot" data-t="5" cx="147.8" cy="262.2" r="2.3"/><circle class="c-aim-dot" data-t="6" cx="211.8" cy="249.2" r="2.3"/><circle class="c-aim-dot" data-t="7" cx="286.5" cy="231.2" r="2.3"/><circle class="c-aim-dot" data-t="8" cx="360.1" cy="205.2" r="2.3"/><circle class="c-aim-dot" data-t="9" cx="420.3" cy="179.8" r="2.3"/><circle class="c-aim-dot" data-t="10" cx="461.7" cy="162.1" r="2.3"/><circle class="c-aim-dot" data-t="11" cx="479.6" cy="153.7" r="2.3"/><circle class="c-aim-dot" data-t="12" cx="484.3" cy="150.7" r="2.3"/><circle class="c-aim-dot" data-t="13" cx="464.8" cy="152.8" r="2.3"/><circle class="c-aim-dot" data-t="14" cx="452.9" cy="153.5" r="2.3"/><circle class="c-aim-dot" data-t="15" cx="447.5" cy="153.4" r="2.3"/><circle class="c-aim-dot" data-t="16" cx="448.4" cy="154" r="2.3"/><circle class="c-aim-dot" data-t="17" cx="451.1" cy="154.1" r="2.3"/><circle class="c-aim-dot" data-t="18" cx="452.3" cy="147.5" r="2.3"/><circle class="c-aim-dot" data-t="19" cx="452.5" cy="145.1" r="2.3"/><circle class="c-aim-dot" data-t="20" cx="453.1" cy="147.3" r="2.3"/><circle class="c-aim-dot" data-t="21" cx="452.9" cy="150.2" r="2.3"/><circle class="c-aim-dot" data-t="22" cx="451.8" cy="151.2" r="2.3"/><circle class="c-aim-dot" data-t="23" cx="450.6" cy="152.1" r="2.3"/><circle class="c-aim-dot" data-t="24" cx="450.9" cy="152" r="2.3"/><circle class="c-aim-dot" data-t="25" cx="452.3" cy="152.2" r="2.3"/><circle class="c-aim-dot" data-t="26" cx="452" cy="151.7" r="2.3"/><circle class="c-aim-dot" data-t="27" cx="453" cy="152.1" r="2.3"/><circle class="c-aim-dot" data-t="28" cx="452.1" cy="152.8" r="2.3"/><circle class="c-aim-dot" data-t="29" cx="451.8" cy="152.6" r="2.3"/><circle class="c-aim-dot" data-t="30" cx="452.9" cy="152.4" r="2.3"/><circle class="c-aim-dot" data-t="31" cx="453.1" cy="152" r="2.3"/><circle class="c-aim-dot" data-t="32" cx="452.9" cy="151.5" r="2.3"/><circle class="c-aim-dot" data-t="33" cx="453" cy="151.3" r="2.3"/><circle class="c-aim-dot" data-t="34" cx="453.6" cy="152.3" r="2.3"/><circle class="c-aim-dot" data-t="35" cx="452.5" cy="152.8" r="2.3"/><g class="c-aim-shot" data-t="17"><circle cx="451.1" cy="154.1" r="9"/><line x1="451.1" y1="141.1" x2="451.1" y2="135.1"/><line x1="451.1" y1="167.1" x2="451.1" y2="173.1"/><line x1="438.1" y1="154.1" x2="432.1" y2="154.1"/><line x1="464.1" y1="154.1" x2="470.1" y2="154.1"/></g><g class="c-aim-xhair" data-pos="77.3,268.2 77.3,267.6 77.6,267.3 81.5,267 102.1,265.9 147.8,262.2 211.8,249.2 286.5,231.2 360.1,205.2 420.3,179.8 461.7,162.1 479.6,153.7 484.3,150.7 464.8,152.8 452.9,153.5 447.5,153.4 448.4,154 451.1,154.1 452.3,147.5 452.5,145.1 453.1,147.3 452.9,150.2 451.8,151.2 450.6,152.1 450.9,152 452.3,152.2 452,151.7 453,152.1 452.1,152.8 451.8,152.6 452.9,152.4 453.1,152 452.9,151.5 453,151.3 453.6,152.3 452.5,152.8" transform="translate(452.5 152.8)"><path d="M-5 0h-8M5 0h8M0-5v-8M0 5v8"/><circle r="1.6"/></g></svg><div class="c-aim-lanes" aria-hidden="true"><div class="c-aim-lane"><span class="c-aim-lane-name">Mouse input</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect data-t="0" x="2" y="16.8" width="6" height="1.2"/><rect data-t="1" x="12" y="16.6" width="6" height="1.4"/><rect data-t="2" x="22" y="16.8" width="6" height="1.2"/><rect data-t="3" x="32" y="14.4" width="6" height="3.6"/><rect data-t="4" x="42" y="9.8" width="6" height="8.2"/><rect data-t="5" x="52" y="5.7" width="6" height="12.3"/><rect data-t="6" x="62" y="3.4" width="6" height="14.6"/><rect data-t="7" x="72" y="2.1" width="6" height="15.9"/><rect data-t="8" x="82" y="2" width="6" height="16"/><rect data-t="9" x="92" y="3.4" width="6" height="14.6"/><rect data-t="10" x="102" y="5.9" width="6" height="12.1"/><rect data-t="11" x="112" y="9.9" width="6" height="8.1"/><rect data-t="12" x="122" y="13.7" width="6" height="4.3"/><rect data-t="13" x="132" y="10" width="6" height="8"/><rect data-t="14" x="142" y="11.7" width="6" height="6.3"/><rect data-t="15" x="152" y="13.8" width="6" height="4.2"/><rect data-t="16" x="162" y="16.1" width="6" height="1.9"/><rect data-t="17" x="172" y="15" width="6" height="3"/><rect data-t="18" x="182" y="13.3" width="6" height="4.7"/><rect data-t="19" x="192" y="15.2" width="6" height="2.8"/><rect data-t="20" x="202" y="15.2" width="6" height="2.8"/><rect data-t="21" x="212" y="14.9" width="6" height="3.1"/><rect data-t="22" x="222" y="15.8" width="6" height="2.2"/><rect data-t="23" x="232" y="15.8" width="6" height="2.2"/><rect data-t="24" x="242" y="16.8" width="6" height="1.2"/><rect data-t="25" x="252" y="15.8" width="6" height="2.2"/><rect data-t="26" x="262" y="16.6" width="6" height="1.4"/><rect data-t="27" x="272" y="16.2" width="6" height="1.8"/><rect data-t="28" x="282" y="16" width="6" height="2"/><rect data-t="29" x="292" y="16.8" width="6" height="1.2"/><rect data-t="30" x="302" y="16.2" width="6" height="1.8"/><rect data-t="31" x="312" y="16.7" width="6" height="1.3"/><rect data-t="32" x="322" y="16.8" width="6" height="1.2"/><rect data-t="33" x="332" y="16.8" width="6" height="1.2"/><rect data-t="34" x="342" y="16" width="6" height="2"/><rect data-t="35" x="352" y="16" width="6" height="2"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">View</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect data-t="0" x="2" y="16.8" width="6" height="1.2"/><rect data-t="1" x="12" y="16.6" width="6" height="1.4"/><rect data-t="2" x="22" y="16.8" width="6" height="1.2"/><rect data-t="3" x="32" y="14.4" width="6" height="3.6"/><rect data-t="4" x="42" y="9.8" width="6" height="8.2"/><rect data-t="5" x="52" y="5.7" width="6" height="12.3"/><rect data-t="6" x="62" y="3.4" width="6" height="14.6"/><rect data-t="7" x="72" y="2.1" width="6" height="15.9"/><rect data-t="8" x="82" y="2" width="6" height="16"/><rect data-t="9" x="92" y="3.4" width="6" height="14.6"/><rect data-t="10" x="102" y="5.9" width="6" height="12.1"/><rect data-t="11" x="112" y="9.9" width="6" height="8.1"/><rect data-t="12" x="122" y="13.7" width="6" height="4.3"/><rect data-t="13" x="132" y="10" width="6" height="8"/><rect data-t="14" x="142" y="11.7" width="6" height="6.3"/><rect data-t="15" x="152" y="13.8" width="6" height="4.2"/><rect data-t="16" x="162" y="16.1" width="6" height="1.9"/><rect data-t="17" x="172" y="15" width="6" height="3"/><rect data-t="18" x="182" y="13.3" width="6" height="4.7"/><rect data-t="19" x="192" y="15.2" width="6" height="2.8"/><rect data-t="20" x="202" y="15.2" width="6" height="2.8"/><rect data-t="21" x="212" y="14.9" width="6" height="3.1"/><rect data-t="22" x="222" y="15.8" width="6" height="2.2"/><rect data-t="23" x="232" y="15.8" width="6" height="2.2"/><rect data-t="24" x="242" y="16.8" width="6" height="1.2"/><rect data-t="25" x="252" y="15.8" width="6" height="2.2"/><rect data-t="26" x="262" y="16.6" width="6" height="1.4"/><rect data-t="27" x="272" y="16.2" width="6" height="1.8"/><rect data-t="28" x="282" y="16" width="6" height="2"/><rect data-t="29" x="292" y="16.8" width="6" height="1.2"/><rect data-t="30" x="302" y="16.2" width="6" height="1.8"/><rect data-t="31" x="312" y="16.7" width="6" height="1.3"/><rect data-t="32" x="322" y="16.8" width="6" height="1.2"/><rect data-t="33" x="332" y="16.8" width="6" height="1.2"/><rect data-t="34" x="342" y="16" width="6" height="2"/><rect data-t="35" x="352" y="16" width="6" height="2"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">On target</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect class="is-on" data-t="10" x="100" y="4" width="10" height="10"/><rect class="is-on" data-t="13" x="130" y="4" width="10" height="10"/><rect class="is-on" data-t="14" x="140" y="4" width="10" height="10"/><rect class="is-on" data-t="15" x="150" y="4" width="10" height="10"/><rect class="is-on" data-t="16" x="160" y="4" width="10" height="10"/><rect class="is-on" data-t="17" x="170" y="4" width="10" height="10"/><rect class="is-on" data-t="18" x="180" y="4" width="10" height="10"/><rect class="is-on" data-t="19" x="190" y="4" width="10" height="10"/><rect class="is-on" data-t="20" x="200" y="4" width="10" height="10"/><rect class="is-on" data-t="21" x="210" y="4" width="10" height="10"/><rect class="is-on" data-t="22" x="220" y="4" width="10" height="10"/><rect class="is-on" data-t="23" x="230" y="4" width="10" height="10"/><rect class="is-on" data-t="24" x="240" y="4" width="10" height="10"/><rect class="is-on" data-t="25" x="250" y="4" width="10" height="10"/><rect class="is-on" data-t="26" x="260" y="4" width="10" height="10"/><rect class="is-on" data-t="27" x="270" y="4" width="10" height="10"/><rect class="is-on" data-t="28" x="280" y="4" width="10" height="10"/><rect class="is-on" data-t="29" x="290" y="4" width="10" height="10"/><rect class="is-on" data-t="30" x="300" y="4" width="10" height="10"/><rect class="is-on" data-t="31" x="310" y="4" width="10" height="10"/><rect class="is-on" data-t="32" x="320" y="4" width="10" height="10"/><rect class="is-on" data-t="33" x="330" y="4" width="10" height="10"/><rect class="is-on" data-t="34" x="340" y="4" width="10" height="10"/><rect class="is-on" data-t="35" x="350" y="4" width="10" height="10"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">Shot</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect class="is-shot" data-t="17" x="172" y="0" width="6" height="18"/></svg></span></div><div class="c-aim-lane c-aim-axis-row"><span class="c-aim-lane-name"></span><span class="c-aim-axis"><span style="left:0%">0</span><span style="left:30.6%">0.5 s</span><span style="left:61.1%">1 s</span><span style="left:91.7%">1.5 s</span></span></div></div></div><div class="c-aim-text"><p>A real flick. The view follows the mouse, overshoots a little and corrects. The shot comes a beat after the crosshair settles: human reaction time is typically around 150 ms or more.</p>
</div></div>
</section>
<section class="c-aim-panel" id="aim-1-1" aria-labelledby="aim-1-1-h" data-kind="aimbot" data-label="Aimbot">
<h3 class="c-aim-name" id="aim-1-1-h">Aimbot</h3>
<div class="c-aim-grid"><div class="c-aim-fig"><svg class="c-aim-view" viewBox="0 40 600 270" aria-hidden="true" focusable="false"><defs><pattern id="aim-1-1-grid" width="40" height="40" patternUnits="userSpaceOnUse"><circle cx="20" cy="20" r="0.9"/></pattern></defs><rect class="c-aim-bg" y="40" width="600" height="270" fill="url(#aim-1-1-grid)"/><circle class="c-aim-trail" data-t="0" cx="392" cy="178" r="1.6"/><circle class="c-aim-trail" data-t="2" cx="396.2" cy="177.1" r="1.6"/><circle class="c-aim-trail" data-t="4" cx="400.4" cy="176.2" r="1.6"/><circle class="c-aim-trail" data-t="6" cx="404.6" cy="175.3" r="1.6"/><circle class="c-aim-trail" data-t="8" cx="408.8" cy="174.4" r="1.6"/><circle class="c-aim-trail" data-t="10" cx="413" cy="173.5" r="1.6"/><circle class="c-aim-trail" data-t="12" cx="417.2" cy="172.6" r="1.6"/><circle class="c-aim-trail" data-t="14" cx="421.4" cy="171.7" r="1.6"/><circle class="c-aim-trail" data-t="16" cx="425.6" cy="170.8" r="1.6"/><circle class="c-aim-trail" data-t="18" cx="429.8" cy="169.9" r="1.6"/><circle class="c-aim-trail" data-t="20" cx="434" cy="169" r="1.6"/><circle class="c-aim-trail" data-t="22" cx="438.2" cy="168.1" r="1.6"/><circle class="c-aim-trail" data-t="24" cx="442.4" cy="167.2" r="1.6"/><circle class="c-aim-trail" data-t="26" cx="446.6" cy="166.3" r="1.6"/><circle class="c-aim-trail" data-t="28" cx="450.8" cy="165.4" r="1.6"/><circle class="c-aim-trail" data-t="30" cx="455" cy="164.5" r="1.6"/><circle class="c-aim-trail" data-t="32" cx="459.2" cy="163.6" r="1.6"/><circle class="c-aim-trail" data-t="34" cx="463.4" cy="162.7" r="1.6"/><g class="c-aim-target" data-pos="392,178 394.1,177.6 396.2,177.1 398.3,176.7 400.4,176.2 402.5,175.8 404.6,175.3 406.7,174.9 408.8,174.4 410.9,174 413,173.5 415.1,173.1 417.2,172.6 419.3,172.2 421.4,171.7 423.5,171.3 425.6,170.8 427.7,170.4 429.8,169.9 431.9,169.5 434,169 436.1,168.6 438.2,168.1 440.3,167.7 442.4,167.2 444.5,166.8 446.6,166.3 448.7,165.9 450.8,165.4 452.9,165 455,164.5 457.1,164.1 459.2,163.6 461.3,163.2 463.4,162.7 465.5,162.3" transform="translate(465.5 162.3)"><circle r="17"/></g><line class="c-aim-mouse" data-t="1" x1="144.9" y1="109.7" x2="150.8" y2="111.2"/><line class="c-aim-mouse" data-t="2" x1="150.8" y1="111.2" x2="156.8" y2="112.9"/><line class="c-aim-mouse" data-t="3" x1="156.8" y1="112.9" x2="163" y2="114.6"/><line class="c-aim-mouse" data-t="4" x1="163" y1="114.6" x2="168.6" y2="116.7"/><line class="c-aim-mouse" data-t="5" x1="168.6" y1="116.7" x2="175" y2="119.5"/><line class="c-aim-mouse" data-t="6" x1="175" y1="119.5" x2="180.7" y2="122.7"/><line class="c-aim-mouse" data-t="7" x1="180.7" y1="122.7" x2="186.5" y2="125.4"/><line class="c-aim-mouse" data-t="8" x1="186.5" y1="125.4" x2="192.3" y2="127.9"/><line class="c-aim-mouse" data-t="9" x1="192.3" y1="127.9" x2="198.2" y2="129.7"/><line class="c-aim-mouse" data-t="10" x1="198.2" y1="129.7" x2="201.3" y2="133.8"/><line class="c-aim-mouse" data-t="11" x1="201.3" y1="133.8" x2="204" y2="137.7"/><line class="c-aim-mouse" data-t="12" x1="204" y1="137.7" x2="206.8" y2="141.4"/><line class="c-aim-mouse" data-t="13" x1="206.8" y1="141.4" x2="209.5" y2="144.3"/><line class="c-aim-mouse" data-t="14" x1="209.5" y1="144.3" x2="212.2" y2="147"/><line class="c-aim-mouse" data-t="15" x1="212.2" y1="147" x2="214.8" y2="150.5"/><line class="c-aim-mouse" data-t="16" x1="214.8" y1="150.5" x2="216.8" y2="153.9"/><line class="c-aim-mouse" data-t="17" x1="216.8" y1="153.9" x2="219.1" y2="156.8"/><line class="c-aim-mouse" data-t="18" x1="219.1" y1="156.8" x2="221.5" y2="159.1"/><line class="c-aim-mouse" data-t="19" x1="221.5" y1="159.1" x2="222.9" y2="160.9"/><line class="c-aim-mouse" data-t="20" x1="222.9" y1="160.9" x2="224.2" y2="162.7"/><line class="c-aim-mouse" data-t="21" x1="224.2" y1="162.7" x2="225.3" y2="164.4"/><line class="c-aim-mouse" data-t="22" x1="225.3" y1="164.4" x2="226" y2="166.1"/><line class="c-aim-mouse" data-t="23" x1="226" y1="166.1" x2="227.2" y2="167.7"/><line class="c-aim-mouse" data-t="24" x1="227.2" y1="167.7" x2="228" y2="169"/><line class="c-aim-mouse" data-t="25" x1="228" y1="169" x2="228.7" y2="170.6"/><line class="c-aim-mouse" data-t="26" x1="228.7" y1="170.6" x2="229.5" y2="172.7"/><line class="c-aim-mouse" data-t="27" x1="229.5" y1="172.7" x2="230" y2="174.7"/><line class="c-aim-mouse" data-t="28" x1="230" y1="174.7" x2="231" y2="176"/><line class="c-aim-mouse" data-t="29" x1="231" y1="176" x2="231.9" y2="177"/><line class="c-aim-mouse" data-t="30" x1="231.9" y1="177" x2="232.6" y2="177.4"/><line class="c-aim-mouse" data-t="31" x1="232.6" y1="177.4" x2="233.8" y2="177.4"/><line class="c-aim-mouse" data-t="32" x1="233.8" y1="177.4" x2="234.8" y2="177.6"/><line class="c-aim-mouse" data-t="33" x1="234.8" y1="177.6" x2="235.7" y2="178.2"/><line class="c-aim-mouse" data-t="34" x1="235.7" y1="178.2" x2="236.5" y2="178.4"/><line class="c-aim-mouse" data-t="35" x1="236.5" y1="178.4" x2="237.6" y2="178.1"/><circle class="c-aim-mdot" data-t="0" cx="144.9" cy="109.7" r="1.7"/><circle class="c-aim-mdot" data-t="1" cx="150.8" cy="111.2" r="1.7"/><circle class="c-aim-mdot" data-t="2" cx="156.8" cy="112.9" r="1.7"/><circle class="c-aim-mdot" data-t="3" cx="163" cy="114.6" r="1.7"/><circle class="c-aim-mdot" data-t="4" cx="168.6" cy="116.7" r="1.7"/><circle class="c-aim-mdot" data-t="5" cx="175" cy="119.5" r="1.7"/><circle class="c-aim-mdot" data-t="6" cx="180.7" cy="122.7" r="1.7"/><circle class="c-aim-mdot" data-t="7" cx="186.5" cy="125.4" r="1.7"/><circle class="c-aim-mdot" data-t="8" cx="192.3" cy="127.9" r="1.7"/><circle class="c-aim-mdot" data-t="9" cx="198.2" cy="129.7" r="1.7"/><circle class="c-aim-mdot" data-t="10" cx="201.3" cy="133.8" r="1.7"/><circle class="c-aim-mdot" data-t="11" cx="204" cy="137.7" r="1.7"/><circle class="c-aim-mdot" data-t="12" cx="206.8" cy="141.4" r="1.7"/><circle class="c-aim-mdot" data-t="13" cx="209.5" cy="144.3" r="1.7"/><circle class="c-aim-mdot" data-t="14" cx="212.2" cy="147" r="1.7"/><circle class="c-aim-mdot" data-t="15" cx="214.8" cy="150.5" r="1.7"/><circle class="c-aim-mdot" data-t="16" cx="216.8" cy="153.9" r="1.7"/><circle class="c-aim-mdot" data-t="17" cx="219.1" cy="156.8" r="1.7"/><circle class="c-aim-mdot" data-t="18" cx="221.5" cy="159.1" r="1.7"/><circle class="c-aim-mdot" data-t="19" cx="222.9" cy="160.9" r="1.7"/><circle class="c-aim-mdot" data-t="20" cx="224.2" cy="162.7" r="1.7"/><circle class="c-aim-mdot" data-t="21" cx="225.3" cy="164.4" r="1.7"/><circle class="c-aim-mdot" data-t="22" cx="226" cy="166.1" r="1.7"/><circle class="c-aim-mdot" data-t="23" cx="227.2" cy="167.7" r="1.7"/><circle class="c-aim-mdot" data-t="24" cx="228" cy="169" r="1.7"/><circle class="c-aim-mdot" data-t="25" cx="228.7" cy="170.6" r="1.7"/><circle class="c-aim-mdot" data-t="26" cx="229.5" cy="172.7" r="1.7"/><circle class="c-aim-mdot" data-t="27" cx="230" cy="174.7" r="1.7"/><circle class="c-aim-mdot" data-t="28" cx="231" cy="176" r="1.7"/><circle class="c-aim-mdot" data-t="29" cx="231.9" cy="177" r="1.7"/><circle class="c-aim-mdot" data-t="30" cx="232.6" cy="177.4" r="1.7"/><circle class="c-aim-mdot" data-t="31" cx="233.8" cy="177.4" r="1.7"/><circle class="c-aim-mdot" data-t="32" cx="234.8" cy="177.6" r="1.7"/><circle class="c-aim-mdot" data-t="33" cx="235.7" cy="178.2" r="1.7"/><circle class="c-aim-mdot" data-t="34" cx="236.5" cy="178.4" r="1.7"/><circle class="c-aim-mdot" data-t="35" cx="237.6" cy="178.1" r="1.7"/><line class="c-aim-seg" data-t="1" x1="144.9" y1="109.7" x2="150.8" y2="111.2"/><line class="c-aim-seg" data-t="2" x1="150.8" y1="111.2" x2="156.8" y2="112.9"/><line class="c-aim-seg" data-t="3" x1="156.8" y1="112.9" x2="163" y2="114.6"/><line class="c-aim-seg" data-t="4" x1="163" y1="114.6" x2="168.6" y2="116.7"/><line class="c-aim-seg" data-t="5" x1="168.6" y1="116.7" x2="175" y2="119.5"/><line class="c-aim-seg" data-t="6" x1="175" y1="119.5" x2="180.7" y2="122.7"/><line class="c-aim-seg" data-t="7" x1="180.7" y1="122.7" x2="186.5" y2="125.4"/><line class="c-aim-seg" data-t="8" x1="186.5" y1="125.4" x2="192.3" y2="127.9"/><line class="c-aim-seg" data-t="9" x1="192.3" y1="127.9" x2="198.2" y2="129.7"/><line class="c-aim-seg is-signal" data-t="10" x1="198.2" y1="129.7" x2="230" y2="136.2"/><line class="c-aim-seg is-signal" data-t="11" x1="230" y1="136.2" x2="383" y2="166.6"/><line class="c-aim-seg is-signal" data-t="12" x1="383" y1="166.6" x2="417.2" y2="172.6"/><line class="c-aim-seg is-signal" data-t="13" x1="417.2" y1="172.6" x2="419.3" y2="172.2"/><line class="c-aim-seg is-signal" data-t="14" x1="419.3" y1="172.2" x2="421.4" y2="171.7"/><line class="c-aim-seg is-signal" data-t="15" x1="421.4" y1="171.7" x2="423.5" y2="171.3"/><line class="c-aim-seg is-signal" data-t="16" x1="423.5" y1="171.3" x2="425.6" y2="170.8"/><line class="c-aim-seg is-signal" data-t="17" x1="425.6" y1="170.8" x2="427.7" y2="170.4"/><line class="c-aim-seg is-signal" data-t="18" x1="427.7" y1="170.4" x2="429.8" y2="169.9"/><line class="c-aim-seg is-signal" data-t="19" x1="429.8" y1="169.9" x2="431.9" y2="169.5"/><line class="c-aim-seg is-signal" data-t="20" x1="431.9" y1="169.5" x2="434" y2="169"/><line class="c-aim-seg is-signal" data-t="21" x1="434" y1="169" x2="436.1" y2="168.6"/><line class="c-aim-seg is-signal" data-t="22" x1="436.1" y1="168.6" x2="438.2" y2="168.1"/><line class="c-aim-seg is-signal" data-t="23" x1="438.2" y1="168.1" x2="440.3" y2="167.7"/><line class="c-aim-seg is-signal" data-t="24" x1="440.3" y1="167.7" x2="442.4" y2="167.2"/><line class="c-aim-seg is-signal" data-t="25" x1="442.4" y1="167.2" x2="444.5" y2="166.8"/><line class="c-aim-seg is-signal" data-t="26" x1="444.5" y1="166.8" x2="446.6" y2="166.3"/><line class="c-aim-seg is-signal" data-t="27" x1="446.6" y1="166.3" x2="448.7" y2="165.9"/><line class="c-aim-seg is-signal" data-t="28" x1="448.7" y1="165.9" x2="450.8" y2="165.4"/><line class="c-aim-seg is-signal" data-t="29" x1="450.8" y1="165.4" x2="452.9" y2="165"/><line class="c-aim-seg is-signal" data-t="30" x1="452.9" y1="165" x2="455" y2="164.5"/><line class="c-aim-seg is-signal" data-t="31" x1="455" y1="164.5" x2="457.1" y2="164.1"/><line class="c-aim-seg is-signal" data-t="32" x1="457.1" y1="164.1" x2="459.2" y2="163.6"/><line class="c-aim-seg is-signal" data-t="33" x1="459.2" y1="163.6" x2="461.3" y2="163.2"/><line class="c-aim-seg is-signal" data-t="34" x1="461.3" y1="163.2" x2="463.4" y2="162.7"/><line class="c-aim-seg is-signal" data-t="35" x1="463.4" y1="162.7" x2="465.5" y2="162.3"/><circle class="c-aim-dot" data-t="0" cx="144.9" cy="109.7" r="2.3"/><circle class="c-aim-dot" data-t="1" cx="150.8" cy="111.2" r="2.3"/><circle class="c-aim-dot" data-t="2" cx="156.8" cy="112.9" r="2.3"/><circle class="c-aim-dot" data-t="3" cx="163" cy="114.6" r="2.3"/><circle class="c-aim-dot" data-t="4" cx="168.6" cy="116.7" r="2.3"/><circle class="c-aim-dot" data-t="5" cx="175" cy="119.5" r="2.3"/><circle class="c-aim-dot" data-t="6" cx="180.7" cy="122.7" r="2.3"/><circle class="c-aim-dot" data-t="7" cx="186.5" cy="125.4" r="2.3"/><circle class="c-aim-dot" data-t="8" cx="192.3" cy="127.9" r="2.3"/><circle class="c-aim-dot" data-t="9" cx="198.2" cy="129.7" r="2.3"/><circle class="c-aim-dot is-signal" data-t="10" cx="230" cy="136.2" r="2.3"/><circle class="c-aim-dot is-signal" data-t="11" cx="383" cy="166.6" r="2.3"/><circle class="c-aim-dot is-signal" data-t="12" cx="417.2" cy="172.6" r="2.3"/><circle class="c-aim-dot is-signal" data-t="13" cx="419.3" cy="172.2" r="2.3"/><circle class="c-aim-dot is-signal" data-t="14" cx="421.4" cy="171.7" r="2.3"/><circle class="c-aim-dot is-signal" data-t="15" cx="423.5" cy="171.3" r="2.3"/><circle class="c-aim-dot is-signal" data-t="16" cx="425.6" cy="170.8" r="2.3"/><circle class="c-aim-dot is-signal" data-t="17" cx="427.7" cy="170.4" r="2.3"/><circle class="c-aim-dot is-signal" data-t="18" cx="429.8" cy="169.9" r="2.3"/><circle class="c-aim-dot is-signal" data-t="19" cx="431.9" cy="169.5" r="2.3"/><circle class="c-aim-dot is-signal" data-t="20" cx="434" cy="169" r="2.3"/><circle class="c-aim-dot is-signal" data-t="21" cx="436.1" cy="168.6" r="2.3"/><circle class="c-aim-dot is-signal" data-t="22" cx="438.2" cy="168.1" r="2.3"/><circle class="c-aim-dot is-signal" data-t="23" cx="440.3" cy="167.7" r="2.3"/><circle class="c-aim-dot is-signal" data-t="24" cx="442.4" cy="167.2" r="2.3"/><circle class="c-aim-dot is-signal" data-t="25" cx="444.5" cy="166.8" r="2.3"/><circle class="c-aim-dot is-signal" data-t="26" cx="446.6" cy="166.3" r="2.3"/><circle class="c-aim-dot is-signal" data-t="27" cx="448.7" cy="165.9" r="2.3"/><circle class="c-aim-dot is-signal" data-t="28" cx="450.8" cy="165.4" r="2.3"/><circle class="c-aim-dot is-signal" data-t="29" cx="452.9" cy="165" r="2.3"/><circle class="c-aim-dot is-signal" data-t="30" cx="455" cy="164.5" r="2.3"/><circle class="c-aim-dot is-signal" data-t="31" cx="457.1" cy="164.1" r="2.3"/><circle class="c-aim-dot is-signal" data-t="32" cx="459.2" cy="163.6" r="2.3"/><circle class="c-aim-dot is-signal" data-t="33" cx="461.3" cy="163.2" r="2.3"/><circle class="c-aim-dot is-signal" data-t="34" cx="463.4" cy="162.7" r="2.3"/><circle class="c-aim-dot is-signal" data-t="35" cx="465.5" cy="162.3" r="2.3"/><g class="c-aim-shot" data-t="15"><circle cx="423.5" cy="171.3" r="9"/><line x1="423.5" y1="158.3" x2="423.5" y2="152.3"/><line x1="423.5" y1="184.3" x2="423.5" y2="190.3"/><line x1="410.5" y1="171.3" x2="404.5" y2="171.3"/><line x1="436.5" y1="171.3" x2="442.5" y2="171.3"/></g><g class="c-aim-xhair" data-pos="144.9,109.7 150.8,111.2 156.8,112.9 163,114.6 168.6,116.7 175,119.5 180.7,122.7 186.5,125.4 192.3,127.9 198.2,129.7 230,136.2 383,166.6 417.2,172.6 419.3,172.2 421.4,171.7 423.5,171.3 425.6,170.8 427.7,170.4 429.8,169.9 431.9,169.5 434,169 436.1,168.6 438.2,168.1 440.3,167.7 442.4,167.2 444.5,166.8 446.6,166.3 448.7,165.9 450.8,165.4 452.9,165 455,164.5 457.1,164.1 459.2,163.6 461.3,163.2 463.4,162.7 465.5,162.3" transform="translate(465.5 162.3)"><path d="M-5 0h-8M5 0h8M0-5v-8M0 5v8"/><circle r="1.6"/></g></svg><div class="c-aim-lanes" aria-hidden="true"><div class="c-aim-lane"><span class="c-aim-lane-name">Mouse input</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect data-t="0" x="2" y="16.8" width="6" height="1.2"/><rect data-t="1" x="12" y="14.9" width="6" height="3.1"/><rect data-t="2" x="22" y="14.8" width="6" height="3.2"/><rect data-t="3" x="32" y="14.7" width="6" height="3.3"/><rect data-t="4" x="42" y="14.9" width="6" height="3.1"/><rect data-t="5" x="52" y="14.6" width="6" height="3.4"/><rect data-t="6" x="62" y="14.7" width="6" height="3.3"/><rect data-t="7" x="72" y="14.8" width="6" height="3.2"/><rect data-t="8" x="82" y="14.8" width="6" height="3.2"/><rect data-t="9" x="92" y="14.8" width="6" height="3.2"/><rect data-t="10" x="102" y="15.1" width="6" height="2.9"/><rect data-t="11" x="112" y="15.2" width="6" height="2.8"/><rect data-t="12" x="122" y="15.2" width="6" height="2.8"/><rect data-t="13" x="132" y="15.5" width="6" height="2.5"/><rect data-t="14" x="142" y="15.5" width="6" height="2.5"/><rect data-t="15" x="152" y="15.3" width="6" height="2.7"/><rect data-t="16" x="162" y="15.5" width="6" height="2.5"/><rect data-t="17" x="172" y="15.5" width="6" height="2.5"/><rect data-t="18" x="182" y="15.7" width="6" height="2.3"/><rect data-t="19" x="192" y="16.1" width="6" height="1.9"/><rect data-t="20" x="202" y="16.1" width="6" height="1.9"/><rect data-t="21" x="212" y="16.1" width="6" height="1.9"/><rect data-t="22" x="222" y="16.3" width="6" height="1.7"/><rect data-t="23" x="232" y="16.2" width="6" height="1.8"/><rect data-t="24" x="242" y="16.4" width="6" height="1.6"/><rect data-t="25" x="252" y="16.3" width="6" height="1.7"/><rect data-t="26" x="262" y="16" width="6" height="2"/><rect data-t="27" x="272" y="16.2" width="6" height="1.8"/><rect data-t="28" x="282" y="16.4" width="6" height="1.6"/><rect data-t="29" x="292" y="16.5" width="6" height="1.5"/><rect data-t="30" x="302" y="16.8" width="6" height="1.2"/><rect data-t="31" x="312" y="16.6" width="6" height="1.4"/><rect data-t="32" x="322" y="16.7" width="6" height="1.3"/><rect data-t="33" x="332" y="16.7" width="6" height="1.3"/><rect data-t="34" x="342" y="16.8" width="6" height="1.2"/><rect data-t="35" x="352" y="16.6" width="6" height="1.4"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">View</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect data-t="0" x="2" y="16.8" width="6" height="1.2"/><rect data-t="1" x="12" y="14.9" width="6" height="3.1"/><rect data-t="2" x="22" y="14.8" width="6" height="3.2"/><rect data-t="3" x="32" y="14.7" width="6" height="3.3"/><rect data-t="4" x="42" y="14.9" width="6" height="3.1"/><rect data-t="5" x="52" y="14.6" width="6" height="3.4"/><rect data-t="6" x="62" y="14.7" width="6" height="3.3"/><rect data-t="7" x="72" y="14.8" width="6" height="3.2"/><rect data-t="8" x="82" y="14.8" width="6" height="3.2"/><rect data-t="9" x="92" y="14.8" width="6" height="3.2"/><rect class="is-signal" data-t="10" x="102" y="10.7" width="6" height="7.3"/><rect class="is-signal" data-t="11" x="112" y="2" width="6" height="16"/><rect class="is-signal" data-t="12" x="122" y="10.4" width="6" height="7.6"/><rect class="is-signal" data-t="13" x="132" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="14" x="142" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="15" x="152" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="16" x="162" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="17" x="172" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="18" x="182" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="19" x="192" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="20" x="202" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="21" x="212" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="22" x="222" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="23" x="232" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="24" x="242" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="25" x="252" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="26" x="262" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="27" x="272" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="28" x="282" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="29" x="292" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="30" x="302" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="31" x="312" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="32" x="322" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="33" x="332" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="34" x="342" y="16.1" width="6" height="1.9"/><rect class="is-signal" data-t="35" x="352" y="16.1" width="6" height="1.9"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">On target</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect class="is-on" data-t="12" x="120" y="4" width="10" height="10"/><rect class="is-on" data-t="13" x="130" y="4" width="10" height="10"/><rect class="is-on" data-t="14" x="140" y="4" width="10" height="10"/><rect class="is-on" data-t="15" x="150" y="4" width="10" height="10"/><rect class="is-on" data-t="16" x="160" y="4" width="10" height="10"/><rect class="is-on" data-t="17" x="170" y="4" width="10" height="10"/><rect class="is-on" data-t="18" x="180" y="4" width="10" height="10"/><rect class="is-on" data-t="19" x="190" y="4" width="10" height="10"/><rect class="is-on" data-t="20" x="200" y="4" width="10" height="10"/><rect class="is-on" data-t="21" x="210" y="4" width="10" height="10"/><rect class="is-on" data-t="22" x="220" y="4" width="10" height="10"/><rect class="is-on" data-t="23" x="230" y="4" width="10" height="10"/><rect class="is-on" data-t="24" x="240" y="4" width="10" height="10"/><rect class="is-on" data-t="25" x="250" y="4" width="10" height="10"/><rect class="is-on" data-t="26" x="260" y="4" width="10" height="10"/><rect class="is-on" data-t="27" x="270" y="4" width="10" height="10"/><rect class="is-on" data-t="28" x="280" y="4" width="10" height="10"/><rect class="is-on" data-t="29" x="290" y="4" width="10" height="10"/><rect class="is-on" data-t="30" x="300" y="4" width="10" height="10"/><rect class="is-on" data-t="31" x="310" y="4" width="10" height="10"/><rect class="is-on" data-t="32" x="320" y="4" width="10" height="10"/><rect class="is-on" data-t="33" x="330" y="4" width="10" height="10"/><rect class="is-on" data-t="34" x="340" y="4" width="10" height="10"/><rect class="is-on" data-t="35" x="350" y="4" width="10" height="10"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">Shot</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect class="is-shot" data-t="15" x="152" y="0" width="6" height="18"/></svg></span></div><div class="c-aim-lane c-aim-axis-row"><span class="c-aim-lane-name"></span><span class="c-aim-axis"><span style="left:0%">0</span><span style="left:30.6%">0.5 s</span><span style="left:61.1%">1 s</span><span style="left:91.7%">1.5 s</span></span></div></div></div><div class="c-aim-text"><p>The view moves without mouse input to match. It lands on the target too smoothly and too exactly, then stays locked on while the hand barely moves.</p>
</div></div>
</section>
<section class="c-aim-panel" id="aim-1-2" aria-labelledby="aim-1-2-h" data-kind="triggerbot" data-label="Triggerbot">
<h3 class="c-aim-name" id="aim-1-2-h">Triggerbot</h3>
<div class="c-aim-grid"><div class="c-aim-fig"><svg class="c-aim-view" viewBox="0 40 600 270" aria-hidden="true" focusable="false"><defs><pattern id="aim-1-2-grid" width="40" height="40" patternUnits="userSpaceOnUse"><circle cx="20" cy="20" r="0.9"/></pattern></defs><rect class="c-aim-bg" y="40" width="600" height="270" fill="url(#aim-1-2-grid)"/><g class="c-aim-target" data-pos="438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172 438,172" transform="translate(438 172)"><circle r="17"/></g><line class="c-aim-seg" data-t="1" x1="186.8" y1="240.6" x2="195.8" y2="238.8"/><line class="c-aim-seg" data-t="2" x1="195.8" y1="238.8" x2="205.6" y2="235.2"/><line class="c-aim-seg" data-t="3" x1="205.6" y1="235.2" x2="214.6" y2="231.7"/><line class="c-aim-seg" data-t="4" x1="214.6" y1="231.7" x2="222.7" y2="228.2"/><line class="c-aim-seg" data-t="5" x1="222.7" y1="228.2" x2="231.5" y2="225.8"/><line class="c-aim-seg" data-t="6" x1="231.5" y1="225.8" x2="241.7" y2="222.4"/><line class="c-aim-seg" data-t="7" x1="241.7" y1="222.4" x2="251.6" y2="218.8"/><line class="c-aim-seg" data-t="8" x1="251.6" y1="218.8" x2="259" y2="215"/><line class="c-aim-seg" data-t="9" x1="259" y1="215" x2="270" y2="212.3"/><line class="c-aim-seg" data-t="10" x1="270" y1="212.3" x2="279.7" y2="212.4"/><line class="c-aim-seg" data-t="11" x1="279.7" y1="212.4" x2="288.3" y2="208.7"/><line class="c-aim-seg" data-t="12" x1="288.3" y1="208.7" x2="298.5" y2="206.2"/><line class="c-aim-seg" data-t="13" x1="298.5" y1="206.2" x2="307.2" y2="204.1"/><line class="c-aim-seg" data-t="14" x1="307.2" y1="204.1" x2="318.3" y2="200.8"/><line class="c-aim-seg" data-t="15" x1="318.3" y1="200.8" x2="327.5" y2="198.1"/><line class="c-aim-seg" data-t="16" x1="327.5" y1="198.1" x2="336.7" y2="195.1"/><line class="c-aim-seg" data-t="17" x1="336.7" y1="195.1" x2="345.6" y2="194.2"/><line class="c-aim-seg" data-t="18" x1="345.6" y1="194.2" x2="354.8" y2="191.3"/><line class="c-aim-seg" data-t="19" x1="354.8" y1="191.3" x2="363.7" y2="189.4"/><line class="c-aim-seg" data-t="20" x1="363.7" y1="189.4" x2="373.4" y2="184.8"/><line class="c-aim-seg" data-t="21" x1="373.4" y1="184.8" x2="384" y2="183.1"/><line class="c-aim-seg" data-t="22" x1="384" y1="183.1" x2="394.7" y2="179.4"/><line class="c-aim-seg" data-t="23" x1="394.7" y1="179.4" x2="406.6" y2="175.9"/><line class="c-aim-seg" data-t="24" x1="406.6" y1="175.9" x2="416.2" y2="173.3"/><line class="c-aim-seg" data-t="25" x1="416.2" y1="173.3" x2="423.1" y2="169.8"/><line class="c-aim-seg" data-t="26" x1="423.1" y1="169.8" x2="426.9" y2="165.5"/><line class="c-aim-seg" data-t="27" x1="426.9" y1="165.5" x2="428" y2="160.9"/><line class="c-aim-seg" data-t="28" x1="428" y1="160.9" x2="429.9" y2="162.4"/><line class="c-aim-seg" data-t="29" x1="429.9" y1="162.4" x2="434.3" y2="164.3"/><line class="c-aim-seg" data-t="30" x1="434.3" y1="164.3" x2="437.4" y2="167.1"/><line class="c-aim-seg" data-t="31" x1="437.4" y1="167.1" x2="440.1" y2="167"/><line class="c-aim-seg" data-t="32" x1="440.1" y1="167" x2="442.1" y2="166.1"/><line class="c-aim-seg" data-t="33" x1="442.1" y1="166.1" x2="446.6" y2="166.2"/><line class="c-aim-seg" data-t="34" x1="446.6" y1="166.2" x2="449.2" y2="164.9"/><line class="c-aim-seg" data-t="35" x1="449.2" y1="164.9" x2="451.3" y2="162.3"/><circle class="c-aim-dot" data-t="0" cx="186.8" cy="240.6" r="2.3"/><circle class="c-aim-dot" data-t="1" cx="195.8" cy="238.8" r="2.3"/><circle class="c-aim-dot" data-t="2" cx="205.6" cy="235.2" r="2.3"/><circle class="c-aim-dot" data-t="3" cx="214.6" cy="231.7" r="2.3"/><circle class="c-aim-dot" data-t="4" cx="222.7" cy="228.2" r="2.3"/><circle class="c-aim-dot" data-t="5" cx="231.5" cy="225.8" r="2.3"/><circle class="c-aim-dot" data-t="6" cx="241.7" cy="222.4" r="2.3"/><circle class="c-aim-dot" data-t="7" cx="251.6" cy="218.8" r="2.3"/><circle class="c-aim-dot" data-t="8" cx="259" cy="215" r="2.3"/><circle class="c-aim-dot" data-t="9" cx="270" cy="212.3" r="2.3"/><circle class="c-aim-dot" data-t="10" cx="279.7" cy="212.4" r="2.3"/><circle class="c-aim-dot" data-t="11" cx="288.3" cy="208.7" r="2.3"/><circle class="c-aim-dot" data-t="12" cx="298.5" cy="206.2" r="2.3"/><circle class="c-aim-dot" data-t="13" cx="307.2" cy="204.1" r="2.3"/><circle class="c-aim-dot" data-t="14" cx="318.3" cy="200.8" r="2.3"/><circle class="c-aim-dot" data-t="15" cx="327.5" cy="198.1" r="2.3"/><circle class="c-aim-dot" data-t="16" cx="336.7" cy="195.1" r="2.3"/><circle class="c-aim-dot" data-t="17" cx="345.6" cy="194.2" r="2.3"/><circle class="c-aim-dot" data-t="18" cx="354.8" cy="191.3" r="2.3"/><circle class="c-aim-dot" data-t="19" cx="363.7" cy="189.4" r="2.3"/><circle class="c-aim-dot" data-t="20" cx="373.4" cy="184.8" r="2.3"/><circle class="c-aim-dot" data-t="21" cx="384" cy="183.1" r="2.3"/><circle class="c-aim-dot" data-t="22" cx="394.7" cy="179.4" r="2.3"/><circle class="c-aim-dot" data-t="23" cx="406.6" cy="175.9" r="2.3"/><circle class="c-aim-dot" data-t="24" cx="416.2" cy="173.3" r="2.3"/><circle class="c-aim-dot" data-t="25" cx="423.1" cy="169.8" r="2.3"/><circle class="c-aim-dot" data-t="26" cx="426.9" cy="165.5" r="2.3"/><circle class="c-aim-dot" data-t="27" cx="428" cy="160.9" r="2.3"/><circle class="c-aim-dot" data-t="28" cx="429.9" cy="162.4" r="2.3"/><circle class="c-aim-dot" data-t="29" cx="434.3" cy="164.3" r="2.3"/><circle class="c-aim-dot" data-t="30" cx="437.4" cy="167.1" r="2.3"/><circle class="c-aim-dot" data-t="31" cx="440.1" cy="167" r="2.3"/><circle class="c-aim-dot" data-t="32" cx="442.1" cy="166.1" r="2.3"/><circle class="c-aim-dot" data-t="33" cx="446.6" cy="166.2" r="2.3"/><circle class="c-aim-dot" data-t="34" cx="449.2" cy="164.9" r="2.3"/><circle class="c-aim-dot" data-t="35" cx="451.3" cy="162.3" r="2.3"/><g class="c-aim-shot is-signal" data-t="25"><circle cx="423.1" cy="169.8" r="9"/><line x1="423.1" y1="156.8" x2="423.1" y2="150.8"/><line x1="423.1" y1="182.8" x2="423.1" y2="188.8"/><line x1="410.1" y1="169.8" x2="404.1" y2="169.8"/><line x1="436.1" y1="169.8" x2="442.1" y2="169.8"/></g><g class="c-aim-xhair" data-pos="186.8,240.6 195.8,238.8 205.6,235.2 214.6,231.7 222.7,228.2 231.5,225.8 241.7,222.4 251.6,218.8 259,215 270,212.3 279.7,212.4 288.3,208.7 298.5,206.2 307.2,204.1 318.3,200.8 327.5,198.1 336.7,195.1 345.6,194.2 354.8,191.3 363.7,189.4 373.4,184.8 384,183.1 394.7,179.4 406.6,175.9 416.2,173.3 423.1,169.8 426.9,165.5 428,160.9 429.9,162.4 434.3,164.3 437.4,167.1 440.1,167 442.1,166.1 446.6,166.2 449.2,164.9 451.3,162.3" transform="translate(451.3 162.3)"><path d="M-5 0h-8M5 0h8M0-5v-8M0 5v8"/><circle r="1.6"/></g></svg><div class="c-aim-lanes" aria-hidden="true"><div class="c-aim-lane"><span class="c-aim-lane-name">Mouse input</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect data-t="0" x="2" y="16.8" width="6" height="1.2"/><rect data-t="1" x="12" y="4.2" width="6" height="13.8"/><rect data-t="2" x="22" y="3.3" width="6" height="14.7"/><rect data-t="3" x="32" y="3.9" width="6" height="14.1"/><rect data-t="4" x="42" y="4.6" width="6" height="13.4"/><rect data-t="5" x="52" y="4.2" width="6" height="13.8"/><rect data-t="6" x="62" y="3.1" width="6" height="14.9"/><rect data-t="7" x="72" y="3.3" width="6" height="14.7"/><rect data-t="8" x="82" y="4.9" width="6" height="13.1"/><rect data-t="9" x="92" y="2.7" width="6" height="15.3"/><rect data-t="10" x="102" y="3.8" width="6" height="14.2"/><rect data-t="11" x="112" y="4.2" width="6" height="13.8"/><rect data-t="12" x="122" y="3.2" width="6" height="14.8"/><rect data-t="13" x="132" y="4.4" width="6" height="13.6"/><rect data-t="14" x="142" y="2.5" width="6" height="15.5"/><rect data-t="15" x="152" y="4" width="6" height="14"/><rect data-t="16" x="162" y="3.9" width="6" height="14.1"/><rect data-t="17" x="172" y="4.4" width="6" height="13.6"/><rect data-t="18" x="182" y="3.9" width="6" height="14.1"/><rect data-t="19" x="192" y="4.3" width="6" height="13.7"/><rect data-t="20" x="202" y="3.1" width="6" height="14.9"/><rect data-t="21" x="212" y="3.1" width="6" height="14.9"/><rect data-t="22" x="222" y="2.7" width="6" height="15.3"/><rect data-t="23" x="232" y="2" width="6" height="16"/><rect data-t="24" x="242" y="3.7" width="6" height="14.3"/><rect data-t="25" x="252" y="5.3" width="6" height="12.7"/><rect data-t="26" x="262" y="7.1" width="6" height="10.9"/><rect data-t="27" x="272" y="8.1" width="6" height="9.9"/><rect data-t="28" x="282" y="10.9" width="6" height="7.1"/><rect data-t="29" x="292" y="8" width="6" height="10"/><rect data-t="30" x="302" y="8.7" width="6" height="9.3"/><rect data-t="31" x="312" y="10.5" width="6" height="7.5"/><rect data-t="32" x="322" y="11.2" width="6" height="6.8"/><rect data-t="33" x="332" y="8.3" width="6" height="9.7"/><rect data-t="34" x="342" y="10.4" width="6" height="7.6"/><rect data-t="35" x="352" y="9.6" width="6" height="8.4"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">View</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect data-t="0" x="2" y="16.8" width="6" height="1.2"/><rect data-t="1" x="12" y="4.2" width="6" height="13.8"/><rect data-t="2" x="22" y="3.3" width="6" height="14.7"/><rect data-t="3" x="32" y="3.9" width="6" height="14.1"/><rect data-t="4" x="42" y="4.6" width="6" height="13.4"/><rect data-t="5" x="52" y="4.2" width="6" height="13.8"/><rect data-t="6" x="62" y="3.1" width="6" height="14.9"/><rect data-t="7" x="72" y="3.3" width="6" height="14.7"/><rect data-t="8" x="82" y="4.9" width="6" height="13.1"/><rect data-t="9" x="92" y="2.7" width="6" height="15.3"/><rect data-t="10" x="102" y="3.8" width="6" height="14.2"/><rect data-t="11" x="112" y="4.2" width="6" height="13.8"/><rect data-t="12" x="122" y="3.2" width="6" height="14.8"/><rect data-t="13" x="132" y="4.4" width="6" height="13.6"/><rect data-t="14" x="142" y="2.5" width="6" height="15.5"/><rect data-t="15" x="152" y="4" width="6" height="14"/><rect data-t="16" x="162" y="3.9" width="6" height="14.1"/><rect data-t="17" x="172" y="4.4" width="6" height="13.6"/><rect data-t="18" x="182" y="3.9" width="6" height="14.1"/><rect data-t="19" x="192" y="4.3" width="6" height="13.7"/><rect data-t="20" x="202" y="3.1" width="6" height="14.9"/><rect data-t="21" x="212" y="3.1" width="6" height="14.9"/><rect data-t="22" x="222" y="2.7" width="6" height="15.3"/><rect data-t="23" x="232" y="2" width="6" height="16"/><rect data-t="24" x="242" y="3.7" width="6" height="14.3"/><rect data-t="25" x="252" y="5.3" width="6" height="12.7"/><rect data-t="26" x="262" y="7.1" width="6" height="10.9"/><rect data-t="27" x="272" y="8.1" width="6" height="9.9"/><rect data-t="28" x="282" y="10.9" width="6" height="7.1"/><rect data-t="29" x="292" y="8" width="6" height="10"/><rect data-t="30" x="302" y="8.7" width="6" height="9.3"/><rect data-t="31" x="312" y="10.5" width="6" height="7.5"/><rect data-t="32" x="322" y="11.2" width="6" height="6.8"/><rect data-t="33" x="332" y="8.3" width="6" height="9.7"/><rect data-t="34" x="342" y="10.4" width="6" height="7.6"/><rect data-t="35" x="352" y="9.6" width="6" height="8.4"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">On target</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect class="is-on" data-t="25" x="250" y="4" width="10" height="10"/><rect class="is-on" data-t="26" x="260" y="4" width="10" height="10"/><rect class="is-on" data-t="27" x="270" y="4" width="10" height="10"/><rect class="is-on" data-t="28" x="280" y="4" width="10" height="10"/><rect class="is-on" data-t="29" x="290" y="4" width="10" height="10"/><rect class="is-on" data-t="30" x="300" y="4" width="10" height="10"/><rect class="is-on" data-t="31" x="310" y="4" width="10" height="10"/><rect class="is-on" data-t="32" x="320" y="4" width="10" height="10"/><rect class="is-on" data-t="33" x="330" y="4" width="10" height="10"/><rect class="is-on" data-t="34" x="340" y="4" width="10" height="10"/><rect class="is-on" data-t="35" x="350" y="4" width="10" height="10"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">Shot</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect class="is-ghost" data-t="29" x="292.5" y="1.5" width="5" height="15"/><rect class="is-shot is-signal" data-t="25" x="252" y="0" width="6" height="18"/></svg></span></div><div class="c-aim-lane c-aim-axis-row"><span class="c-aim-lane-name"></span><span class="c-aim-axis"><span style="left:0%">0</span><span style="left:30.6%">0.5 s</span><span style="left:61.1%">1 s</span><span style="left:91.7%">1.5 s</span></span></div></div></div><div class="c-aim-text"><p>The shot fires on the same tick the crosshair reaches the target. A person needs around 150 ms or more to react; the faint mark in the Shot lane is roughly where a human shot would come.</p>
</div></div>
</section>
<section class="c-aim-panel" id="aim-1-3" aria-labelledby="aim-1-3-h" data-kind="silent" data-label="Silent aim">
<h3 class="c-aim-name" id="aim-1-3-h">Silent aim</h3>
<div class="c-aim-grid"><div class="c-aim-fig"><svg class="c-aim-view" viewBox="0 40 600 270" aria-hidden="true" focusable="false"><defs><pattern id="aim-1-3-grid" width="40" height="40" patternUnits="userSpaceOnUse"><circle cx="20" cy="20" r="0.9"/></pattern></defs><rect class="c-aim-bg" y="40" width="600" height="270" fill="url(#aim-1-3-grid)"/><g class="c-aim-target" data-pos="448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184 448,184" transform="translate(448 184)"><circle r="17"/></g><line class="c-aim-seg" data-t="1" x1="213.4" y1="132.3" x2="213.7" y2="132.3"/><line class="c-aim-seg" data-t="2" x1="213.7" y1="132.3" x2="214.2" y2="131.8"/><line class="c-aim-seg" data-t="3" x1="214.2" y1="131.8" x2="216.3" y2="131.6"/><line class="c-aim-seg" data-t="4" x1="216.3" y1="131.6" x2="215.8" y2="131.1"/><line class="c-aim-seg" data-t="5" x1="215.8" y1="131.1" x2="215.8" y2="131.2"/><line class="c-aim-seg" data-t="6" x1="215.8" y1="131.2" x2="215.8" y2="131.3"/><line class="c-aim-seg" data-t="7" x1="215.8" y1="131.3" x2="216" y2="132.7"/><line class="c-aim-seg" data-t="8" x1="216" y1="132.7" x2="217.3" y2="132.6"/><line class="c-aim-seg" data-t="9" x1="217.3" y1="132.6" x2="216.9" y2="132.3"/><line class="c-aim-seg" data-t="10" x1="216.9" y1="132.3" x2="217.7" y2="131.9"/><line class="c-aim-seg" data-t="11" x1="217.7" y1="131.9" x2="218" y2="131.1"/><line class="c-aim-seg" data-t="12" x1="218" y1="131.1" x2="217.3" y2="131.7"/><line class="c-aim-seg" data-t="13" x1="217.3" y1="131.7" x2="217.8" y2="130.9"/><line class="c-aim-seg" data-t="14" x1="217.8" y1="130.9" x2="219.8" y2="132.6"/><line class="c-aim-seg" data-t="15" x1="219.8" y1="132.6" x2="219.3" y2="131.8"/><line class="c-aim-seg" data-t="16" x1="219.3" y1="131.8" x2="219.8" y2="131.4"/><line class="c-aim-seg" data-t="17" x1="219.8" y1="131.4" x2="218.8" y2="131.5"/><line class="c-aim-seg" data-t="18" x1="218.8" y1="131.5" x2="221" y2="131.6"/><line class="c-aim-seg" data-t="19" x1="221" y1="131.6" x2="221.1" y2="131.4"/><line class="c-aim-seg" data-t="20" x1="221.1" y1="131.4" x2="220.4" y2="131.9"/><line class="c-aim-seg" data-t="21" x1="220.4" y1="131.9" x2="221" y2="133.1"/><line class="c-aim-seg" data-t="22" x1="221" y1="133.1" x2="222.3" y2="133.3"/><line class="c-aim-seg" data-t="23" x1="222.3" y1="133.3" x2="222.4" y2="132.8"/><line class="c-aim-seg" data-t="24" x1="222.4" y1="132.8" x2="221.4" y2="132.6"/><line class="c-aim-seg" data-t="25" x1="221.4" y1="132.6" x2="222" y2="132.1"/><line class="c-aim-seg" data-t="26" x1="222" y1="132.1" x2="224" y2="130.4"/><line class="c-aim-seg" data-t="27" x1="224" y1="130.4" x2="222.5" y2="131.8"/><line class="c-aim-seg" data-t="28" x1="222.5" y1="131.8" x2="223.2" y2="131.4"/><line class="c-aim-seg" data-t="29" x1="223.2" y1="131.4" x2="225.4" y2="133"/><line class="c-aim-seg" data-t="30" x1="225.4" y1="133" x2="225.7" y2="132.9"/><line class="c-aim-seg" data-t="31" x1="225.7" y1="132.9" x2="225" y2="131.5"/><line class="c-aim-seg" data-t="32" x1="225" y1="131.5" x2="223.9" y2="132.7"/><line class="c-aim-seg" data-t="33" x1="223.9" y1="132.7" x2="224.5" y2="132.7"/><line class="c-aim-seg" data-t="34" x1="224.5" y1="132.7" x2="225.4" y2="132.2"/><line class="c-aim-seg" data-t="35" x1="225.4" y1="132.2" x2="225.1" y2="132.5"/><circle class="c-aim-dot" data-t="0" cx="213.4" cy="132.3" r="2.3"/><circle class="c-aim-dot" data-t="1" cx="213.7" cy="132.3" r="2.3"/><circle class="c-aim-dot" data-t="2" cx="214.2" cy="131.8" r="2.3"/><circle class="c-aim-dot" data-t="3" cx="216.3" cy="131.6" r="2.3"/><circle class="c-aim-dot" data-t="4" cx="215.8" cy="131.1" r="2.3"/><circle class="c-aim-dot" data-t="5" cx="215.8" cy="131.2" r="2.3"/><circle class="c-aim-dot" data-t="6" cx="215.8" cy="131.3" r="2.3"/><circle class="c-aim-dot" data-t="7" cx="216" cy="132.7" r="2.3"/><circle class="c-aim-dot" data-t="8" cx="217.3" cy="132.6" r="2.3"/><circle class="c-aim-dot" data-t="9" cx="216.9" cy="132.3" r="2.3"/><circle class="c-aim-dot" data-t="10" cx="217.7" cy="131.9" r="2.3"/><circle class="c-aim-dot" data-t="11" cx="218" cy="131.1" r="2.3"/><circle class="c-aim-dot" data-t="12" cx="217.3" cy="131.7" r="2.3"/><circle class="c-aim-dot" data-t="13" cx="217.8" cy="130.9" r="2.3"/><circle class="c-aim-dot" data-t="14" cx="219.8" cy="132.6" r="2.3"/><circle class="c-aim-dot" data-t="15" cx="219.3" cy="131.8" r="2.3"/><circle class="c-aim-dot" data-t="16" cx="219.8" cy="131.4" r="2.3"/><circle class="c-aim-dot" data-t="17" cx="218.8" cy="131.5" r="2.3"/><circle class="c-aim-dot" data-t="18" cx="221" cy="131.6" r="2.3"/><circle class="c-aim-dot" data-t="19" cx="221.1" cy="131.4" r="2.3"/><circle class="c-aim-dot" data-t="20" cx="220.4" cy="131.9" r="2.3"/><circle class="c-aim-dot" data-t="21" cx="221" cy="133.1" r="2.3"/><circle class="c-aim-dot" data-t="22" cx="222.3" cy="133.3" r="2.3"/><circle class="c-aim-dot" data-t="23" cx="222.4" cy="132.8" r="2.3"/><circle class="c-aim-dot" data-t="24" cx="221.4" cy="132.6" r="2.3"/><circle class="c-aim-dot" data-t="25" cx="222" cy="132.1" r="2.3"/><circle class="c-aim-dot" data-t="26" cx="224" cy="130.4" r="2.3"/><circle class="c-aim-dot" data-t="27" cx="222.5" cy="131.8" r="2.3"/><circle class="c-aim-dot" data-t="28" cx="223.2" cy="131.4" r="2.3"/><circle class="c-aim-dot" data-t="29" cx="225.4" cy="133" r="2.3"/><circle class="c-aim-dot" data-t="30" cx="225.7" cy="132.9" r="2.3"/><circle class="c-aim-dot" data-t="31" cx="225" cy="131.5" r="2.3"/><circle class="c-aim-dot" data-t="32" cx="223.9" cy="132.7" r="2.3"/><circle class="c-aim-dot" data-t="33" cx="224.5" cy="132.7" r="2.3"/><circle class="c-aim-dot" data-t="34" cx="225.4" cy="132.2" r="2.3"/><circle class="c-aim-dot" data-t="35" cx="225.1" cy="132.5" r="2.3"/><g class="c-aim-shot is-signal" data-t="16"><path d="M219.8,131.4 Q343.9,61.4 448,184"/><circle cx="448" cy="184" r="9"/><line x1="448" y1="171" x2="448" y2="165"/><line x1="448" y1="197" x2="448" y2="203"/><line x1="435" y1="184" x2="429" y2="184"/><line x1="461" y1="184" x2="467" y2="184"/></g><g class="c-aim-xhair" data-pos="213.4,132.3 213.7,132.3 214.2,131.8 216.3,131.6 215.8,131.1 215.8,131.2 215.8,131.3 216,132.7 217.3,132.6 216.9,132.3 217.7,131.9 218,131.1 217.3,131.7 217.8,130.9 219.8,132.6 219.3,131.8 219.8,131.4 218.8,131.5 221,131.6 221.1,131.4 220.4,131.9 221,133.1 222.3,133.3 222.4,132.8 221.4,132.6 222,132.1 224,130.4 222.5,131.8 223.2,131.4 225.4,133 225.7,132.9 225,131.5 223.9,132.7 224.5,132.7 225.4,132.2 225.1,132.5" transform="translate(225.1 132.5)"><path d="M-5 0h-8M5 0h8M0-5v-8M0 5v8"/><circle r="1.6"/></g></svg><div class="c-aim-lanes" aria-hidden="true"><div class="c-aim-lane"><span class="c-aim-lane-name">Mouse input</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect data-t="0" x="2" y="16.8" width="6" height="1.2"/><rect data-t="1" x="12" y="12.7" width="6" height="5.3"/><rect data-t="2" x="22" y="9.8" width="6" height="8.2"/><rect data-t="3" x="32" y="3.9" width="6" height="14.1"/><rect data-t="4" x="42" y="9.9" width="6" height="8.1"/><rect data-t="5" x="52" y="14.8" width="6" height="3.2"/><rect data-t="6" x="62" y="15.1" width="6" height="2.9"/><rect data-t="7" x="72" y="6.3" width="6" height="11.7"/><rect data-t="8" x="82" y="6.5" width="6" height="11.5"/><rect data-t="9" x="92" y="10.9" width="6" height="7.1"/><rect data-t="10" x="102" y="8.4" width="6" height="9.6"/><rect data-t="11" x="112" y="9" width="6" height="9"/><rect data-t="12" x="122" y="8.5" width="6" height="9.5"/><rect data-t="13" x="132" y="8.4" width="6" height="9.6"/><rect data-t="14" x="142" y="2.4" width="6" height="15.6"/><rect data-t="15" x="152" y="8.9" width="6" height="9.1"/><rect data-t="16" x="162" y="10.1" width="6" height="7.9"/><rect data-t="17" x="172" y="8" width="6" height="10"/><rect data-t="18" x="182" y="3.4" width="6" height="14.6"/><rect data-t="19" x="192" y="13.4" width="6" height="4.6"/><rect data-t="20" x="202" y="8.9" width="6" height="9.1"/><rect data-t="21" x="212" y="6.6" width="6" height="11.4"/><rect data-t="22" x="222" y="6.8" width="6" height="11.2"/><rect data-t="23" x="232" y="10.8" width="6" height="7.2"/><rect data-t="24" x="242" y="8" width="6" height="10"/><rect data-t="25" x="252" y="9.4" width="6" height="8.6"/><rect data-t="26" x="262" y="2.2" width="6" height="15.8"/><rect data-t="27" x="272" y="3.9" width="6" height="14.1"/><rect data-t="28" x="282" y="9.2" width="6" height="8.8"/><rect data-t="29" x="292" y="2" width="6" height="16"/><rect data-t="30" x="302" y="12.9" width="6" height="5.1"/><rect data-t="31" x="312" y="5.9" width="6" height="12.1"/><rect data-t="32" x="322" y="5.6" width="6" height="12.4"/><rect data-t="33" x="332" y="10.3" width="6" height="7.7"/><rect data-t="34" x="342" y="8" width="6" height="10"/><rect data-t="35" x="352" y="11.4" width="6" height="6.6"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">View</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect data-t="0" x="2" y="16.8" width="6" height="1.2"/><rect data-t="1" x="12" y="12.7" width="6" height="5.3"/><rect data-t="2" x="22" y="9.8" width="6" height="8.2"/><rect data-t="3" x="32" y="3.9" width="6" height="14.1"/><rect data-t="4" x="42" y="9.9" width="6" height="8.1"/><rect data-t="5" x="52" y="14.8" width="6" height="3.2"/><rect data-t="6" x="62" y="15.1" width="6" height="2.9"/><rect data-t="7" x="72" y="6.3" width="6" height="11.7"/><rect data-t="8" x="82" y="6.5" width="6" height="11.5"/><rect data-t="9" x="92" y="10.9" width="6" height="7.1"/><rect data-t="10" x="102" y="8.4" width="6" height="9.6"/><rect data-t="11" x="112" y="9" width="6" height="9"/><rect data-t="12" x="122" y="8.5" width="6" height="9.5"/><rect data-t="13" x="132" y="8.4" width="6" height="9.6"/><rect data-t="14" x="142" y="2.4" width="6" height="15.6"/><rect data-t="15" x="152" y="8.9" width="6" height="9.1"/><rect data-t="16" x="162" y="10.1" width="6" height="7.9"/><rect data-t="17" x="172" y="8" width="6" height="10"/><rect data-t="18" x="182" y="3.4" width="6" height="14.6"/><rect data-t="19" x="192" y="13.4" width="6" height="4.6"/><rect data-t="20" x="202" y="8.9" width="6" height="9.1"/><rect data-t="21" x="212" y="6.6" width="6" height="11.4"/><rect data-t="22" x="222" y="6.8" width="6" height="11.2"/><rect data-t="23" x="232" y="10.8" width="6" height="7.2"/><rect data-t="24" x="242" y="8" width="6" height="10"/><rect data-t="25" x="252" y="9.4" width="6" height="8.6"/><rect data-t="26" x="262" y="2.2" width="6" height="15.8"/><rect data-t="27" x="272" y="3.9" width="6" height="14.1"/><rect data-t="28" x="282" y="9.2" width="6" height="8.8"/><rect data-t="29" x="292" y="2" width="6" height="16"/><rect data-t="30" x="302" y="12.9" width="6" height="5.1"/><rect data-t="31" x="312" y="5.9" width="6" height="12.1"/><rect data-t="32" x="322" y="5.6" width="6" height="12.4"/><rect data-t="33" x="332" y="10.3" width="6" height="7.7"/><rect data-t="34" x="342" y="8" width="6" height="10"/><rect data-t="35" x="352" y="11.4" width="6" height="6.6"/></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">On target</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"></svg></span></div><div class="c-aim-lane"><span class="c-aim-lane-name">Shot</span><span class="c-aim-lane-strip"><svg viewBox="0 0 360 18" preserveAspectRatio="none" focusable="false"><rect class="is-shot is-signal" data-t="16" x="162" y="0" width="6" height="18"/></svg></span></div><div class="c-aim-lane c-aim-axis-row"><span class="c-aim-lane-name"></span><span class="c-aim-axis"><span style="left:0%">0</span><span style="left:30.6%">0.5 s</span><span style="left:61.1%">1 s</span><span style="left:91.7%">1.5 s</span></span></div></div></div><div class="c-aim-text"><p>The view the player sees never moves onto the target, yet the shot goes there anyway.</p>
</div></div>
</section>
</div>
<ul class="c-aim-legend">
<li><svg class="c-aim-sw is-view" viewBox="0 0 24 12" aria-hidden="true" focusable="false"><line x1="2" y1="6" x2="22" y2="6"/><circle cx="4" cy="6" r="2"/><circle cx="12" cy="6" r="2"/><circle cx="20" cy="6" r="2"/></svg>Where the view points, one dot per tick</li>
<li><svg class="c-aim-sw is-mouse" viewBox="0 0 24 12" aria-hidden="true" focusable="false"><line x1="2" y1="6" x2="22" y2="6"/></svg>Mouse input, where it differs</li>
<li><svg class="c-aim-sw is-signal" viewBox="0 0 24 12" aria-hidden="true" focusable="false"><line x1="2" y1="6" x2="22" y2="6"/><circle cx="12" cy="6" r="2.4"/></svg>What gives it away</li>
</ul>
<figcaption class="c-note">A simplified illustration of the ideas. Not real data, and not how Hyperion measures them or where it draws the line.</figcaption>
</figure>
<p>Real play is messier than any illustration, which is why no single sign decides anything.</p>
</section>
<section class="launch-section" aria-labelledby="where-it-is-today">
<h2 id="where-it-is-today"><a class="anchor" href="https://vestracorp.com/news/vestra-hyperion/#where-it-is-today" aria-hidden="true" tabindex="-1">#</a>Where it is today</h2>
<p>Hyperion is early and improving quickly. We’re testing it on our own server, measuring how often it catches cheating and how often it flags clean play, and tightening both with every release. We’ll publish those numbers once we’ve tested it at a scale we’re confident in, rather than quote figures from a handful of early runs.</p>
<p>Each moment is scored by a neural network and gradient-boosted decision trees working together, at two levels: <strong>review</strong>, where a person takes a look, and <strong>alert</strong>, where Hyperion is more confident.</p>
<div class="c c-callout is-note" role="note"><svg class="c-callout-icon" viewBox="0 0 20 20" aria-hidden="true" focusable="false"><circle cx="10" cy="10" r="7.25" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M10 9.2v4.4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><circle cx="10" cy="6.5" r=".95" fill="currentColor"/></svg><div class="c-callout-body"><p class="visually-hidden">Note</p><p class="c-callout-title">What a score means</p><p>A score ranks moments for a person to look at first. It is not the probability that someone cheated.</p>
</div></div>
<p>No anticheat is perfect, and Hyperion isn’t either. That’s why a person looks at every flag.</p>
</section>
<section class="launch-section" aria-labelledby="a-person-decides">
<h2 id="a-person-decides"><a class="anchor" href="https://vestracorp.com/news/vestra-hyperion/#a-person-decides" aria-hidden="true" tabindex="-1">#</a>A person decides</h2>
<p>Hyperion never bans anyone automatically. Every flag goes to a person.</p>
<figure class="c c-timeline"><ol class="c-steps"><li class="c-step"><p class="c-step-when">Flag</p><div class="c-step-text"><p class="c-step-what">Hyperion flags a moment</p><p class="c-step-detail">At review or alert level.</p></div></li><li class="c-step"><p class="c-step-when">Review</p><div class="c-step-text"><p class="c-step-what">A person looks</p><p class="c-step-detail">The aim data for that moment, alongside the clip.</p></div></li><li class="c-step"><p class="c-step-when">Decision</p><div class="c-step-text"><p class="c-step-what">The reviewer decides</p><p class="c-step-detail">Not the model. A flag is a reason to look, never a verdict.</p></div></li></ol></figure>
</section>
<section class="launch-section" aria-labelledby="built-to-run-lean">
<h2 id="built-to-run-lean"><a class="anchor" href="https://vestracorp.com/news/vestra-hyperion/#built-to-run-lean" aria-hidden="true" tabindex="-1">#</a>Built to run lean</h2>
<p>Hyperion runs on processors alone, with no graphics card, on a modest server with capped processing power and memory. Its models are loaded in a safe mode that can’t run code, so a model file can only ever be a model.</p>
</section>
<section class="launch-section" aria-labelledby="what-s-next">
<h2 id="what-s-next"><a class="anchor" href="https://vestracorp.com/news/vestra-hyperion/#what-s-next" aria-hidden="true" tabindex="-1">#</a>What’s next</h2>
<p>Hyperion is in active development. 1.2R replaced 1.2RC, and testing on our own server continues. Garry’s Mod is the first game. Others may follow, but we won’t name games or dates until they are ready. We’ll post here when there is something new to show.</p>
</section>
<section class="launch-section" aria-labelledby="get-in-touch">
<h2 id="get-in-touch"><a class="anchor" href="https://vestracorp.com/news/vestra-hyperion/#get-in-touch" aria-hidden="true" tabindex="-1">#</a>Get in touch</h2>
<p>Run a Garry’s Mod server? We’d like to hear from server owners who would want to take part in voluntary, opt-in testing and data collection as Hyperion develops. Email <a href="mailto:support@vestracorp.com">support@vestracorp.com</a>.</p>
</section>
]]></content:encoded>
      <enclosure url="https://vestracorp.com/news/vestra-hyperion/og.jpg?v=59c7d19f76" type="image/jpeg" length="40088"/>
    </item>
    <item>
      <title>Meet Kite</title>
      <link>https://vestracorp.com/news/meet-kite/</link>
      <guid isPermaLink="true">https://vestracorp.com/news/meet-kite/</guid>
      <pubDate>Wed, 14 Oct 2026 23:00:00 GMT</pubDate>
      <dc:creator>Vestra</dc:creator>
      <category>Product</category>
      <description>Kite is the personal assistant inside VestraAI. Tell it what you need in plain words, and it reminds you, runs regular tasks, keeps your lists and watches for things.</description>
      <content:encoded><![CDATA[<section class="launch-section launch-intro">
<p>Kite is the personal assistant inside VestraAI. An ordinary chat is for questions. Kite is for the things you would otherwise have to remember: it sets reminders, runs tasks on a schedule, keeps your lists and keeps an eye on things, then tells you when there is something to know.</p>
<p>Open it from <strong>Talk to Kite</strong> at the top of the sidebar, and talk to it the way you would text someone who has worked with you for years. There are no commands to learn.</p>
<figure class="c c-quote"><blockquote><p>I’ve used Kite every day since it launched, and it has made my daily routine noticeably faster. I no longer skim long articles to find out what happened overnight, the day before or over the week. Every morning at 8am, Kite sends me a digest of tech and general news, and it’s been exactly what I need. I’ve used VestraAI at school too, and it’s been brilliant.</p>
</blockquote><figcaption>Magon, CEO, Vestra</figcaption></figure>
</section>
<section class="launch-section" aria-labelledby="at-a-glance">
<h2 id="at-a-glance"><a class="anchor" href="https://vestracorp.com/news/meet-kite/#at-a-glance" aria-hidden="true" tabindex="-1">#</a>At a glance</h2>
<figure class="c c-wide c-stats" data-stats><ul class="c-stats-list" data-n="4"><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">1</span><span aria-hidden="true" data-count>1</span></span><span class="c-stat-label">Ongoing conversation, so Kite keeps the thread</span></li><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">2</span><span aria-hidden="true" data-count>2</span></span><span class="c-stat-label">Kinds of Kite: reminders, and tasks Kite carries out for you</span></li><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">3</span><span aria-hidden="true" data-count>3</span></span><span class="c-stat-label">Ways to hear back: every time, only when it finds something, or once and then stop</span></li><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">5</span><span aria-hidden="true" data-count>5</span></span><span class="c-stat-label">Ways to schedule one: once, every few minutes or hours, daily, weekdays or weekly</span></li></ul><figcaption class="c-note">Anything you ask Kite to do later, or on a schedule, is called a Kite.</figcaption></figure>
</section>
<section class="launch-section" aria-labelledby="just-say-it">
<h2 id="just-say-it"><a class="anchor" href="https://vestracorp.com/news/meet-kite/#just-say-it" aria-hidden="true" tabindex="-1">#</a>Just say it</h2>
<p>Short and casual works best. Kite picks sensible defaults (mornings are 8am, “weekly” means Monday at 9am) and tells you what it chose, so you can change it. The replies below are illustrative; Kite’s wording varies.</p>
<div class="c c-tabs" data-ctabs>
<section class="c-tabpanel" id="tabs-1-0" aria-labelledby="tabs-1-0-h"><h3 class="c-tabpanel-title" id="tabs-1-0-h">Reminders</h3><div class="c-chat">
<div class="c-chat-prompt"><p class="visually-hidden">Prompt</p><p>remind me to call Mum at 6</p>
</div>
<div class="c-chat-response"><p class="visually-hidden">Response</p><p>Done. I’ll remind you to call Mum at 18:00 today.</p>
</div>
</div></section>
<section class="c-tabpanel" id="tabs-1-1" aria-labelledby="tabs-1-1-h"><h3 class="c-tabpanel-title" id="tabs-1-1-h">Repeating</h3><div class="c-chat">
<div class="c-chat-prompt"><p class="visually-hidden">Prompt</p><p>ping me every 2 hours to drink water</p>
</div>
<div class="c-chat-response"><p class="visually-hidden">Response</p><p>Set: a reminder to drink water every 2 hours. Say “stop the water reminders” when you’ve had enough.</p>
</div>
</div></section>
<section class="c-tabpanel" id="tabs-1-2" aria-labelledby="tabs-1-2-h"><h3 class="c-tabpanel-title" id="tabs-1-2-h">Digests</h3><div class="c-chat">
<div class="c-chat-prompt"><p class="visually-hidden">Prompt</p><p>send me tech news every Friday at 5</p>
</div>
<div class="c-chat-response"><p class="visually-hidden">Response</p><p>Your tech digest is set for Fridays at 17:00. Each week I’ll look up what’s new and write you a short round-up.</p>
</div>
</div></section>
<section class="c-tabpanel" id="tabs-1-3" aria-labelledby="tabs-1-3-h"><h3 class="c-tabpanel-title" id="tabs-1-3-h">Watchers</h3><div class="c-chat">
<div class="c-chat-prompt"><p class="visually-hidden">Prompt</p><p>let me know if bitcoin drops under 50k</p>
</div>
<div class="c-chat-response"><p class="visually-hidden">Response</p><p>I’ll check every hour and message you only if it drops below 50,000. Until then you won’t hear from me about it.</p>
</div>
</div></section>
<section class="c-tabpanel" id="tabs-1-4" aria-labelledby="tabs-1-4-h"><h3 class="c-tabpanel-title" id="tabs-1-4-h">Lists</h3><div class="c-chat">
<div class="c-chat-prompt"><p class="visually-hidden">Prompt</p><p>add eggs, milk and bread to groceries</p>
</div>
<div class="c-chat-response"><p class="visually-hidden">Response</p><p>Added eggs, milk and bread to your groceries list. Ask “what’s on my list?” any time, or tell me to cross things off.</p>
</div>
</div></section>
</div>
<p>Correct it casually (“no, make it 7”, “actually, weekdays only”), and ask “what Kites do I have?” to see everything it is doing for you. Results land in your inbox in VestraAI. Turn on notifications to get them even when VestraAI is closed, or have any Kite emailed to you as well.</p>
<p>On paid plans, Kite also has a private cloud computer for sums, data, charts and files: “turn this table into a spreadsheet”. Every script is checked before it runs. And on a voice call, you can simply ask for a reminder out loud.</p>
</section>
<section class="launch-section" aria-labelledby="a-day-with-kite">
<h2 id="a-day-with-kite"><a class="anchor" href="https://vestracorp.com/news/meet-kite/#a-day-with-kite" aria-hidden="true" tabindex="-1">#</a>A day with Kite</h2>
<figure class="c c-timeline"><ol class="c-steps"><li class="c-step"><p class="c-step-when">08:00</p><div class="c-step-text"><p class="c-step-what">Weekday briefing</p><p class="c-step-detail">The weather for your city and the top news.</p></div></li><li class="c-step"><p class="c-step-when">10:00</p><div class="c-step-text"><p class="c-step-what">Water</p><p class="c-step-detail">The first of the two-hourly reminders.</p></div></li><li class="c-step"><p class="c-step-when">13:15</p><div class="c-step-text"><p class="c-step-what">One message, two jobs</p><p class="c-step-detail">“Add eggs to groceries and remind me to shop at 5:30” adds the item and sets the reminder.</p></div></li><li class="c-step"><p class="c-step-when">17:00</p><div class="c-step-text"><p class="c-step-what">Friday digest</p><p class="c-step-detail">Kite looks up the week’s tech news and writes it up for you.</p></div></li><li class="c-step"><p class="c-step-when">17:30</p><div class="c-step-text"><p class="c-step-what">Shopping</p><p class="c-step-detail">The reminder arrives, and “what’s on my list?” reads it back.</p></div></li><li class="c-step"><p class="c-step-when">All day</p><div class="c-step-text"><p class="c-step-what">Watcher</p><p class="c-step-detail">Checks the price every hour and stays quiet unless it drops.</p></div></li></ol><figcaption class="c-note">An illustrative Friday, not a real account.</figcaption></figure>
</section>
<section class="launch-section" aria-labelledby="asks-first">
<h2 id="asks-first"><a class="anchor" href="https://vestracorp.com/news/meet-kite/#asks-first" aria-hidden="true" tabindex="-1">#</a>Asks first</h2>
<p>Kite does things for you, so it follows clear rules about when.</p>
<figure class="c c-wide c-pricing"><div class="table-wrap"><table class="c-pricing-table">
<thead><tr><th scope="col">What Kite is doing</th><th scope="col">For example</th><th scope="col">When it happens</th></tr></thead>
<tbody>
<tr><th scope="row">Looking something up</th><td data-label="For example">A web search, a page, the weather, your Kites</td><td data-label="When it happens">Straight away</td></tr>
<tr><th scope="row">Changing your own things in VestraAI</th><td data-label="For example">A Kite, a list, a memory</td><td data-label="When it happens">Straight away, with a card under the reply. Many can be undone from the card.</td></tr>
<tr class="is-highlight"><th scope="row">Working on a website for you</th><td data-label="For example">Finding the cheapest flight on a given day</td><td data-label="When it happens">Only after you tap Approve, every time</td></tr>
</tbody>
</table></div></figure>
<p>On a website, Kite uses a real browser. The Approve card says which site and what for; once you approve, it works only on that site, and you can watch it in the browser panel.</p>
<p>Scheduled Kites run while you are away, so they can do less: they look things up and update your lists, and nothing that needs your approval is ever offered to them.</p>
<p>The cards under each reply show what actually happened: a reminder set, a list changed, a site approved. If there is no card, it didn’t happen.</p>
</section>
<section class="launch-section" aria-labelledby="memory-and-privacy">
<h2 id="memory-and-privacy"><a class="anchor" href="https://vestracorp.com/news/meet-kite/#memory-and-privacy" aria-hidden="true" tabindex="-1">#</a>Memory and privacy</h2>
<p>Tell Kite about yourself and it uses that from then on: “my name’s Sam, I work nights”, “I live in Leeds”, “I’m vegetarian”, “keep replies short”. When it picks things up on its own, it sticks to lasting facts such as your city or your job, and leaves out sensitive topics such as health, religion, politics and money.</p>
<p>You decide what it keeps. In <strong>Settings → Memory</strong> you can see everything it remembers, delete one thing or clear the lot, or switch memory off so that nothing new is saved.</p>
<ul>
<li>VestraAI, Kite included, runs on Vestra’s servers in Germany.</li>
<li>Your Kite conversation is saved to your account, like your other chats. <strong>Delete all data</strong> in Settings removes your chats, settings and memories from your device and from our servers.</li>
<li>Kite emails only you, at your own address, and only when you have asked it to.</li>
<li>It can’t send texts or messages for you, email anyone as you, or log in to websites for you.</li>
</ul>
</section>
<section class="launch-section" aria-labelledby="runs-on-robot-1-1">
<h2 id="runs-on-robot-1-1"><a class="anchor" href="https://vestracorp.com/news/meet-kite/#runs-on-robot-1-1" aria-hidden="true" tabindex="-1">#</a>Runs on Robot 1.1</h2>
<p>Kite runs on <a href="https://vestracorp.com/news/vestra-robot-1-1/">Vestra Robot 1.1</a>, the new model behind VestraAI, which has replaced Robot 1.0. In our early internal testing it is more capable than Robot 1.0, and its answers are about a quarter of the length. That matters most here: Kite’s messages arrive while you are busy, so they should say what you need and stop.</p>
</section>
<section class="launch-section" aria-labelledby="coming-soon-gmail-and-calendar">
<h2 id="coming-soon-gmail-and-calendar"><a class="anchor" href="https://vestracorp.com/news/meet-kite/#coming-soon-gmail-and-calendar" aria-hidden="true" tabindex="-1">#</a>Coming soon: Gmail and Calendar</h2>
<p>Kite will be able to look through your Gmail and your Google Calendar, so you can ask “did the venue reply?” or “what’s on tomorrow?”. It will only read, never send or change anything, and it will ask before every look-up, like everything else Kite does on your behalf. We’ll announce it here when it’s ready.</p>
</section>
<section class="launch-section" aria-labelledby="try-it">
<h2 id="try-it"><a class="anchor" href="https://vestracorp.com/news/meet-kite/#try-it" aria-hidden="true" tabindex="-1">#</a>Try it</h2>
<p>Open <a href="https://ai.vestra.systems" rel="noopener">VestraAI</a>, choose <strong>Talk to Kite</strong> at the top of the sidebar, and tell it one thing you would rather not have to remember. Questions and feedback are welcome at <a href="mailto:support@vestracorp.com">support@vestracorp.com</a>.</p>
</section>
]]></content:encoded>
      <enclosure url="https://vestracorp.com/news/meet-kite/og.jpg?v=7e656087c0" type="image/jpeg" length="72730"/>
    </item>
    <item>
      <title>Vestra Robot 1.1</title>
      <link>https://vestracorp.com/news/vestra-robot-1-1/</link>
      <guid isPermaLink="true">https://vestracorp.com/news/vestra-robot-1-1/</guid>
      <pubDate>Wed, 14 Oct 2026 23:00:00 GMT</pubDate>
      <dc:creator>Vestra</dc:creator>
      <category>Product</category>
      <description>Vestra Robot 1.1 is the new model behind VestraAI. In early internal testing it is about 46% more capable than Robot 1.0, and its answers are about a quarter of the length.</description>
      <content:encoded><![CDATA[<section class="launch-section launch-intro">
<p>Vestra Robot 1.1 is the new model behind VestraAI. It answers more questions well than Robot 1.0 did, and it stops when it has answered them. Robot 1.0 had a habit of long, padded replies; Robot 1.1 says the useful part and leaves the rest out.</p>
<figure class="c c-quote"><blockquote><p>Vestra Robot 1.1 is our most capable model yet. We’ve sharpened its reasoning, fine-tuned it to hold up under the most demanding work, and engineered it so that it simply works. On our own benchmark suite it does markedly better than our previous model while writing far fewer tokens, with the same context and the same load.</p>
</blockquote><figcaption>Magon, CEO, Vestra</figcaption></figure>
<div class="c c-callout is-note" role="note"><svg class="c-callout-icon" viewBox="0 0 20 20" aria-hidden="true" focusable="false"><circle cx="10" cy="10" r="7.25" fill="none" stroke="currentColor" stroke-width="1.5"/><path d="M10 9.2v4.4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><circle cx="10" cy="6.5" r=".95" fill="currentColor"/></svg><div class="c-callout-body"><p class="visually-hidden">Note</p><p class="c-callout-title">About these numbers</p><p>The figures on this page come from early internal testing. They are preliminary and may change as we test further. We’ll update this page if they do.</p>
</div></div>
</section>
<section class="launch-section" aria-labelledby="at-a-glance">
<h2 id="at-a-glance"><a class="anchor" href="https://vestracorp.com/news/vestra-robot-1-1/#at-a-glance" aria-hidden="true" tabindex="-1">#</a>At a glance</h2>
<figure class="c c-wide c-stats" data-stats><ul class="c-stats-list" data-n="3"><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">~46%</span><span aria-hidden="true" data-count>~46%</span></span><span class="c-stat-label">More capable than Robot 1.0 on our internal evaluations</span></li><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">~4×</span><span aria-hidden="true" data-count>~4×</span></span><span class="c-stat-label">Fewer output tokens in a typical answer</span></li><li class="c-stat"><span class="c-stat-value"><span class="visually-hidden">~5–6×</span><span aria-hidden="true">~5–6×</span></span><span class="c-stat-label">Capability per output token, derived from the two estimates</span></li></ul><figcaption class="c-note">Early internal estimates. Preliminary, and may change.</figcaption></figure>
</section>
<section class="launch-section" aria-labelledby="more-capable-less-to-read">
<h2 id="more-capable-less-to-read"><a class="anchor" href="https://vestracorp.com/news/vestra-robot-1-1/#more-capable-less-to-read" aria-hidden="true" tabindex="-1">#</a>More capable, less to read</h2>
<p>On our internal evaluations, Robot 1.1 scores about 46% higher than Robot 1.0. Over the same questions, its answers use about a quarter of the output tokens. Put together, that is roughly five to six times as much capability for each token it writes.</p>
<figure class="c c-wide c-bench" data-bench>
<div class="c-bench-head"><p class="c-bench-title">Robot 1.1 and Robot 1.0, early internal estimates</p></div>
<div class="c-bench-panels">
<div class="c-bench-panel" id="bench-1-0" data-label="Capability">
<p class="c-bench-metric">Capability</p>
<ul class="c-bars"><li class="c-bar is-ours"><span class="c-bar-name">Robot 1.1</span><span class="c-bar-track"><span class="c-bar-fill" style="--v:0.9733"></span></span><span class="c-bar-value">146</span></li><li class="c-bar"><span class="c-bar-name">Robot 1.0</span><span class="c-bar-track"><span class="c-bar-fill" style="--v:0.6667"></span></span><span class="c-bar-value">100</span></li></ul>
</div>
<div class="c-bench-panel" id="bench-1-1" data-label="Length">
<p class="c-bench-metric">Length</p>
<ul class="c-bars"><li class="c-bar is-ours"><span class="c-bar-name">Robot 1.1</span><span class="c-bar-track"><span class="c-bar-fill" style="--v:0.2500"></span></span><span class="c-bar-value">25%</span></li><li class="c-bar"><span class="c-bar-name">Robot 1.0</span><span class="c-bar-track"><span class="c-bar-fill" style="--v:1.0000"></span></span><span class="c-bar-value">100%</span></li></ul>
</div>
<div class="c-bench-panel" id="bench-1-2" data-label="Per token">
<p class="c-bench-metric">Per token</p>
<ul class="c-bars"><li class="c-bar is-ours"><span class="c-bar-name">Robot 1.1</span><span class="c-bar-track"><span class="c-bar-fill" style="--v:0.9667"></span></span><span class="c-bar-value">5.8×</span></li><li class="c-bar"><span class="c-bar-name">Robot 1.0</span><span class="c-bar-track"><span class="c-bar-fill" style="--v:0.1667"></span></span><span class="c-bar-value">1×</span></li></ul>
</div>
</div>
<details class="c-bench-table"><summary>Show as a table</summary><div class="table-wrap"><table class="c-bench-tbl">
<thead><tr><th scope="col">Model</th><th scope="col">Capability</th><th scope="col">Length</th><th scope="col">Per token</th></tr></thead>
<tbody><tr><th scope="row">Robot 1.1</th><td>146</td><td>25%</td><td>5.8×</td></tr><tr><th scope="row">Robot 1.0</th><td>100</td><td>100%</td><td>1×</td></tr></tbody>
</table></div></details>
<figcaption class="c-note"><strong>Capability</strong> is an index of our internal evaluations, with Robot 1.0 at 100. <strong>Length</strong> is the average number of output tokens per answer, relative to Robot 1.0 (shorter is better here). <strong>Per token</strong> is capability per output token, derived by dividing one by the other (1.46 ÷ 0.25 ≈ 5.8), so it carries the uncertainty of both. All figures are early internal estimates and may change.</figcaption>
</figure>
<p>We measured both models on our own benchmark suite, with the same context length and under the same load. Robot 1.0 was built on Ornith 1.0 9B; Robot 1.1 is fine-tuned from Qwen 3.8 27B, a newer and larger base model. </p>
</section>
<section class="launch-section" aria-labelledby="same-question-two-answers">
<h2 id="same-question-two-answers"><a class="anchor" href="https://vestracorp.com/news/vestra-robot-1-1/#same-question-two-answers" aria-hidden="true" tabindex="-1">#</a>Same question, two answers</h2>
<p>Shorter isn’t the goal on its own. The point is that the useful part arrives first, and there’s less to read past to find it. Both answers below are written out at the same speed, so you can see how much sooner the second one is done.</p>
<figure class="c c-wide c-answers" data-answers>
<div class="c-answers-q"><p class="c-answers-label">Illustrative example</p><p class="c-answers-question">My Minecraft server lags every evening when more players join. What should I check first?</p></div>
<div class="c-answers-grid">
<section class="c-answer" aria-labelledby="answers-2-0">
<div class="c-answer-head"><h3 class="c-answer-name" id="answers-2-0">Robot 1.0 style</h3><p class="c-answer-count"><span data-tokens="388">388</span> tokens</p></div>
<div class="c-answer-body"><p>Great question! Server lag can be really frustrating, and there are many possible causes. Before we dive in, it’s important to understand that lag can come from lots of different places, including your server’s hardware, your network, your plugins, and even your players’ own internet connections. Let’s go through some of the most common causes in detail.</p>
<ol>
<li><strong>Check your server’s performance.</strong> Performance is one of the most important things to look at. You can use tools such as spark or timings to see how your server is performing. These tools can show you which parts of your server are using the most resources, which can help you find the cause.</li>
<li><strong>Check your RAM.</strong> RAM is very important for Minecraft servers. If your server doesn’t have enough RAM, it may lag. However, giving your server too much RAM can also cause problems in some cases, so it’s important to find the right balance for your server.</li>
<li><strong>Check your plugins and mods.</strong> Some plugins and mods can use a lot of resources. Try removing plugins one at a time to see whether the lag improves.</li>
<li><strong>Check your view distance.</strong> A high view distance means the server has to load more chunks, which can cause lag, especially with more players online.</li>
<li><strong>Check your players’ connections.</strong> Sometimes lag is caused by players’ own internet connections rather than by the server itself.</li>
</ol>
<p>In summary, there are many possible causes of server lag, and the best approach is to investigate each one carefully. I hope this helps! Let me know if you have any other questions, and good luck with your server!</p>
</div>
</section>
<section class="c-answer is-ours" aria-labelledby="answers-2-1">
<div class="c-answer-head"><h3 class="c-answer-name" id="answers-2-1">Robot 1.1</h3><p class="c-answer-count"><span data-tokens="91">91</span> tokens</p></div>
<div class="c-answer-body"><p>Run <code>/spark profiler</code> during the slowdown and check MSPT (milliseconds per tick).</p>
<ul>
<li><strong>Over 50 ms:</strong> the server can’t keep up. The profile shows why: usually entities, a heavy plugin or a high <code>simulation-distance</code> (try 6).</li>
<li><strong>Under 50 ms:</strong> the lag is network-side, not the server.</li>
</ul>
<p>If MSPT is high and nothing in the profile stands out, the server needs more CPU than its plan has.</p>
</div>
</section>
</div>
<figcaption class="c-note">Illustrative example, written to show the difference in style; not a transcript. Token counts are estimates (about four characters a token).</figcaption>
</figure>
</section>
<section class="launch-section" aria-labelledby="available-now">
<h2 id="available-now"><a class="anchor" href="https://vestracorp.com/news/vestra-robot-1-1/#available-now" aria-hidden="true" tabindex="-1">#</a>Available now</h2>
<p>Robot 1.1 is live today, and it has replaced Robot 1.0, which is now retired.</p>
<figure class="c c-wide c-pricing"><div class="table-wrap"><table class="c-pricing-table">
<thead><tr><th scope="col">Where</th><th scope="col">Robot 1.1</th><th scope="col">What you need to do</th></tr></thead>
<tbody>
<tr class="is-highlight"><th scope="row">VestraAI</th><td data-label="Robot 1.1">Live now: chat, Kite and voice calls</td><td data-label="What you need to do">Nothing. You’re already using it.</td></tr>
<tr><th scope="row">Vestra AI API</th><td data-label="Robot 1.1">Live now on <a href="https://platform.vestra.systems" rel="noopener">Vestra Platform</a></td><td data-label="What you need to do">Nothing. Requests now go to Robot 1.1; keys, usage and plans are managed on Vestra Platform.</td></tr>
<tr><th scope="row">Robot 1.0</th><td data-label="Robot 1.1">Retired</td><td data-label="What you need to do">Nothing. It has been replaced everywhere.</td></tr>
</tbody>
</table></div></figure>
</section>
<section class="launch-section" aria-labelledby="kite-runs-on-robot-1-1">
<h2 id="kite-runs-on-robot-1-1"><a class="anchor" href="https://vestracorp.com/news/vestra-robot-1-1/#kite-runs-on-robot-1-1" aria-hidden="true" tabindex="-1">#</a>Kite runs on Robot 1.1</h2>
<p>Kite, the personal assistant inside VestraAI, now runs on Robot 1.1 too. It sets reminders, runs recurring tasks such as a weekly news digest, keeps your lists and watches for things so it only messages you when they happen. Shorter, more accurate answers matter most there: Kite’s messages arrive while you’re busy, so they should say what you need and stop.</p>
</section>
<section class="launch-section" aria-labelledby="what-hasn-t-changed">
<h2 id="what-hasn-t-changed"><a class="anchor" href="https://vestracorp.com/news/vestra-robot-1-1/#what-hasn-t-changed" aria-hidden="true" tabindex="-1">#</a>What hasn’t changed</h2>
<p>VestraAI still runs on Vestra’s servers in Germany, and your conversations are saved to your account as before, where you can delete them at any time. There’s nothing to update or switch on: Robot 1.1 is already the model behind VestraAI.</p>
</section>
<section class="launch-section" aria-labelledby="try-it">
<h2 id="try-it"><a class="anchor" href="https://vestracorp.com/news/vestra-robot-1-1/#try-it" aria-hidden="true" tabindex="-1">#</a>Try it</h2>
<p>Robot 1.1 is in <a href="https://ai.vestra.systems" rel="noopener">VestraAI</a> today, and on <a href="https://platform.vestra.systems" rel="noopener">Vestra Platform</a> for developers. Questions, and examples where it gets something wrong, are welcome at <a href="mailto:support@vestracorp.com">support@vestracorp.com</a>.</p>
<p><em>Figures on this page are early internal estimates. They are preliminary and may change.</em></p>
</section>
]]></content:encoded>
      <enclosure url="https://vestracorp.com/news/vestra-robot-1-1/og.jpg?v=2d6f3d2b88" type="image/jpeg" length="63212"/>
    </item>
    <item>
      <title>Introducing veriwell-capture</title>
      <link>https://vestracorp.com/news/introducing-veriwell-capture/</link>
      <guid isPermaLink="true">https://vestracorp.com/news/introducing-veriwell-capture/</guid>
      <pubDate>Tue, 13 Oct 2026 23:00:00 GMT</pubDate>
      <dc:creator>Veriwell team</dc:creator>
      <category>Open source</category>
      <description>We’ve open-sourced the camera layer from Veriwell: a browser toolkit for ID document and selfie capture that runs on the device. Apache-2.0, on GitHub now.</description>
      <content:encoded><![CDATA[<p>Today we’re publishing <strong>veriwell-capture</strong>, the browser toolkit behind the camera steps in Veriwell, our identity verification service. It handles the part of an ID check that people actually see: holding a passport up to a camera, getting a sharp photo without glare, and following a few head movements for a selfie. It’s released under the Apache License 2.0, and the code is at <a href="https://github.com/vestra-corp/veriwell-capture" rel="noopener">github.com/vestra-corp/veriwell-capture</a>.</p>
<h2 id="why-we-re-publishing-it"><a class="anchor" href="https://vestracorp.com/news/introducing-veriwell-capture/#why-we-re-publishing-it" aria-hidden="true" tabindex="-1">#</a>Why we’re publishing it</h2>
<p>Most of the friction in identity checks happens before any verification starts. The photo is blurred, a light bounces off the laminate, the card is half out of frame, and the person tries again or gives up. Getting capture right is mainly a user experience problem, and it’s the same problem for every team that builds one of these flows. We’d rather share our answer than have everyone rebuild it from scratch.</p>
<h2 id="what-s-in-it"><a class="anchor" href="https://vestracorp.com/news/introducing-veriwell-capture/#what-s-in-it" aria-hidden="true" tabindex="-1">#</a>What’s in it</h2>
<ul>
<li><strong>Document capture.</strong> Maps the on-screen guide onto the camera frame, even when the preview is cropped to fill the screen. Scores blur, glare, edges, brightness and hand shake, notices when a face is held up instead of a card, and captures automatically after a steady hold. The guidance is plain: “Tilt to reduce glare”, not an error code.</li>
<li><strong>Guided face poses.</strong> Centre, turn left and right, blink and smile, using Google’s MediaPipe Face Landmarker in the browser. The hold timer tolerates a momentary flicker instead of starting again.</li>
<li><strong>Feedback cues.</strong> Synthesised tones, short spoken prompts and vibration, with a mute switch that is remembered.</li>
<li><strong>MRZ parsing.</strong> Reads the machine-readable zone on passports (ICAO 9303) with strict check digits, plus the dates on UK photocard driving licences.</li>
<li><strong>Camera helpers.</strong> Sensible fallbacks when a camera rejects the preferred settings, inline playback on iOS, and error messages written for people rather than developers.</li>
</ul>
<p>The core has no framework dependency. Optional React hooks are included for teams that want them.</p>
<h2 id="sound-because-you-can-t-see-the-screen"><a class="anchor" href="https://vestracorp.com/news/introducing-veriwell-capture/#sound-because-you-can-t-see-the-screen" aria-hidden="true" tabindex="-1">#</a>Sound, because you can’t see the screen</h2>
<p>Turning your head means looking away from the screen, so a visual prompt telling you to hold still arrives at exactly the moment you can’t see it. So every step has a sound. A soft tick says the toolkit has locked on, a rising chime says the step is captured, and a short spoken prompt tells you what to do next. On phones that support it, there’s a brief vibration too. Safari on iOS doesn’t support vibration, so there it’s sound only. If you’d rather work in silence, mute it once and it stays muted.</p>
<h2 id="strict-about-passports"><a class="anchor" href="https://vestracorp.com/news/introducing-veriwell-capture/#strict-about-passports" aria-hidden="true" tabindex="-1">#</a>Strict about passports</h2>
<p>The two lines of characters at the bottom of a passport’s photo page carry check digits: small sums that confirm the document number, date of birth and expiry date were read correctly. By default, the parser accepts a reading only when every check digit passes.</p>
<p>There is a relaxed mode, for live “we can read it” feedback while someone is still lining up the document. It’s opt-in and documented as such. Either way, check digits catch misreads, not forgeries. Anyone can calculate them.</p>
<h2 id="on-the-device-and-not-a-security-boundary"><a class="anchor" href="https://vestracorp.com/news/introducing-veriwell-capture/#on-the-device-and-not-a-security-boundary" aria-hidden="true" tabindex="-1">#</a>On the device, and not a security boundary</h2>
<p>Every check runs in the browser on a small, downscaled copy of the camera frame. The library uploads nothing on its own: you decide which captured photos, if any, leave the device. By default the face model is fetched from public CDNs, and you can host those files yourself instead.</p>
<p>Just as important is what the toolkit cannot do. Code running in someone’s browser can’t prove that a document is genuine or that a live person is in front of the camera. JavaScript can be modified, cameras can be virtual and video can be replayed. So treat every quality score, ready flag and parsed field as a hint for the person holding the phone, never as a verdict.</p>
<p>In Veriwell, the decisions that matter, such as document checks, liveness and face matching, happen on our servers, on the uploaded images, against our own thresholds. If you build on veriwell-capture, do the same.</p>
<h2 id="get-it"><a class="anchor" href="https://vestracorp.com/news/introducing-veriwell-capture/#get-it" aria-hidden="true" tabindex="-1">#</a>Get it</h2>
<p>The source, documentation and a plain HTML demo are on <a href="https://github.com/vestra-corp/veriwell-capture" rel="noopener">GitHub</a>. It works in recent versions of Chrome, Edge, Firefox and Safari on desktop, Android and iOS. Camera access needs HTTPS.</p>
<p>Issues and pull requests are welcome. Please report security problems privately, as described in the repository’s security policy. veriwell-capture is made by the team behind <a href="https://veriwell.xyz" rel="noopener">Veriwell</a>.</p>
]]></content:encoded>
      <enclosure url="https://vestracorp.com/news/introducing-veriwell-capture/og.jpg?v=8de89b73c0" type="image/jpeg" length="61207"/>
    </item>
    <item>
      <title>How we protect your data</title>
      <link>https://vestracorp.com/news/how-we-protect-your-data/</link>
      <guid isPermaLink="true">https://vestracorp.com/news/how-we-protect-your-data/</guid>
      <pubDate>Tue, 13 Oct 2026 23:00:00 GMT</pubDate>
      <dc:creator>Vestra Engineering</dc:creator>
      <category>Engineering</category>
      <description>Nightly encrypted backups in two countries, a live standby in Helsinki, restore tests every week, and erasure requests that survive a restore. Here’s how it fits together.</description>
      <content:encoded><![CDATA[<p>If one of our servers fails badly, the question that matters is simple: what do you lose? This is how we keep that answer small, and what we’re adding next. It covers the data we hold to run Vestra: your account, billing, support tickets, and the configuration of the servers that run it all.</p>
<h2 id="every-night-encrypted"><a class="anchor" href="https://vestracorp.com/news/how-we-protect-your-data/#every-night-encrypted" aria-hidden="true" tabindex="-1">#</a>Every night, encrypted</h2>
<p>Every night we back up our databases and the configuration of our servers. Each backup is encrypted with <a href="https://age-encryption.org" rel="noopener">age</a>, a modern, well-reviewed encryption tool, before it leaves the machine it was made on. The places we store backups only ever see encrypted files, and the key that opens them is not kept with them.</p>
<h2 id="two-copies-in-two-countries"><a class="anchor" href="https://vestracorp.com/news/how-we-protect-your-data/#two-copies-in-two-countries" aria-hidden="true" tabindex="-1">#</a>Two copies, in two countries</h2>
<p>Each night’s backup is stored in two places, both away from our main servers: a Hetzner Storage Box in Germany, and our standby server in Helsinki, Finland. They’re separate sites in separate countries, so a fault, fire or outage at one of them doesn’t take the backups with it. We keep 30 days of nightly backups and then delete the oldest.</p>
<h2 id="a-live-copy-in-helsinki"><a class="anchor" href="https://vestracorp.com/news/how-we-protect-your-data/#a-live-copy-in-helsinki" aria-hidden="true" tabindex="-1">#</a>A live copy in Helsinki</h2>
<p>A backup is a picture of last night. Between backups, the standby in Helsinki keeps a live replica of our main databases (accounts, billing and the rest of the core services), updated as changes happen over an encrypted connection. If our main database server failed, we’d have a copy that is moments behind rather than hours.</p>
<p>A replica faithfully copies mistakes as well as good changes, which is why it sits alongside the nightly backups rather than replacing them.</p>
<h2 id="backups-we-actually-restore"><a class="anchor" href="https://vestracorp.com/news/how-we-protect-your-data/#backups-we-actually-restore" aria-hidden="true" tabindex="-1">#</a>Backups we actually restore</h2>
<p>A backup that has never been restored is a hope, not a plan. Every week an automated job takes a recent backup, decrypts it, restores it into a separate, throwaway database and checks that the data is there and readable. If any step fails, we’re alerted.</p>
<h2 id="checked-every-day"><a class="anchor" href="https://vestracorp.com/news/how-we-protect-your-data/#checked-every-day" aria-hidden="true" tabindex="-1">#</a>Checked every day</h2>
<p>A daily health check looks at the things that tend to fail quietly: certificates close to expiry, services that have stopped, and backups that didn’t run or didn’t reach off-site storage. Anything wrong raises an alert to the team. Separately, our monitoring watches our services around the clock, including from outside our main network, and <a href="https://vestrahosting.instatus.com" rel="noopener">live status</a> is public.</p>
<h2 id="deleting-means-deleted-even-after-a-restore"><a class="anchor" href="https://vestracorp.com/news/how-we-protect-your-data/#deleting-means-deleted-even-after-a-restore" aria-hidden="true" tabindex="-1">#</a>Deleting means deleted, even after a restore</h2>
<p>Under UK GDPR you can ask us to erase your account. Removing it from our live systems is the easy part. Backups are harder: restoring an older backup could quietly bring an erased account back.</p>
<p>So we keep a minimal record of each erasure, holding only what’s needed to repeat it. After any restore, every erasure made since that backup was taken is applied again before the restored system goes back into service. And as old backups expire, the copies in them go too: within 40 days, nothing of an erased account remains in our backups.</p>
<h2 id="what-isn-t-covered-yet"><a class="anchor" href="https://vestracorp.com/news/how-we-protect-your-data/#what-isn-t-covered-yet" aria-hidden="true" tabindex="-1">#</a>What isn’t covered yet</h2>
<p>These backups protect our systems: accounts, billing, tickets and configuration. The files on your own game server or VPS are not part of them today. Until that changes, please keep your own copies of anything that matters.</p>
<h2 id="coming-next-game-server-backups"><a class="anchor" href="https://vestracorp.com/news/how-we-protect-your-data/#coming-next-game-server-backups" aria-hidden="true" tabindex="-1">#</a>Coming next: game-server backups</h2>
<p><strong>Update, 15 October 2026:</strong> game-server backups are now live on every plan, at no extra cost. We back up your server every day and keep the three most recent, and you can restore them yourself from the panel. You also get manual backups for a copy before a big update or a new mod pack: one on Tiny, Starter and Pro, and three on Enterprise. Databases aren’t included, so please still keep your own copy of anything you can’t replace. Details are in the <a href="https://vestracorp.com/news/changelog/">changelog</a>.</p>
<p>Questions about any of this are welcome at <a href="mailto:dpo@vestracorp.com">dpo@vestracorp.com</a>.</p>
]]></content:encoded>
      <enclosure url="https://vestracorp.com/news/how-we-protect-your-data/og.jpg?v=4da2ffe731" type="image/jpeg" length="48542"/>
    </item>
  </channel>
</rss>
