The following URL (usually /.git/config) is publicly accessible and is leaking source code and repository configuration.
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a6522deaed14f
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/hatmos/sizerlab-portal fetch = +refs/heads/*:refs/remotes/origin/* [gc] auto = 0 [http "https://github.com/"] extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzXzJlTnBQZm10WTBzT3RPQm5hNlkyTnVyT1lQbHdlYjBWQ09aOQ== [branch "main"] remote = origin merge = refs/heads/main
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a6522637e80e9
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/hatmos/sizerlab-portal fetch = +refs/heads/*:refs/remotes/origin/* [gc] auto = 0 [http "https://github.com/"] extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzX25qREViZ0dDcGJDa3oyT1NRcHRtMTVkZnltWWUySTB3TW1XOQ== [branch "main"] remote = origin merge = refs/heads/main
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a65227eb07037
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/hatmos/sizerlab-portal fetch = +refs/heads/*:refs/remotes/origin/* [gc] auto = 0 [http "https://github.com/"] extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzX1p2MHk1WjQwTTZVOUtYRFg4Y21mMjJUOUxNWW5BYTBIWndjaQ== [branch "main"] remote = origin merge = refs/heads/main
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a65222051593c
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/hatmos/sizerlab-portal fetch = +refs/heads/*:refs/remotes/origin/* [gc] auto = 0 [http "https://github.com/"] extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzX3hwMEo1VWJ4RzJJazV3R3VXVm1vbWhIN2lUbHRXdzNpNkJ2TA== [branch "main"] remote = origin merge = refs/heads/main
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a6522b46ab615
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/hatmos/sizerlab-portal fetch = +refs/heads/*:refs/remotes/origin/* [gc] auto = 0 [http "https://github.com/"] extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzX2tkclZWUjJ0TkpJWEF1V2gxZkVZbWIwNXRudGQzUDFJMnRCdg== [branch "main"] remote = origin merge = refs/heads/main
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a6522abde407a
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/hatmos/sizerlab-portal fetch = +refs/heads/*:refs/remotes/origin/* [gc] auto = 0 [http "https://github.com/"] extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzX0hHR3pxZEFYejdjbllINEt5WXdLWWxudGtKakV5MzNnYXN1SQ== [branch "main"] remote = origin merge = refs/heads/main
Severity: medium
Fingerprint: 2580fa947178c88602b1737db148c044b81b03713d63bb82370a6522ae495675
[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://github.com/hatmos/sizerlab-portal fetch = +refs/heads/*:refs/remotes/origin/* [gc] auto = 0 [http "https://github.com/"] extraheader = AUTHORIZATION: basic eC1hY2Nlc3MtdG9rZW46Z2hzX09IVFROZTlkM0FXRjBSTVNxbVo4cEFSY0JjRnYwRDJEMENWNw== [branch "main"] remote = origin merge = refs/heads/main
Open service 20.82.12.44:443 · www.sizerlab.com
2026-01-09 05:47
HTTP/1.1 200 OK
Content-Length: 7743
Connection: close
Content-Type: text/html
Date: Fri, 09 Jan 2026 05:48:42 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "01284120"
Last-Modified: Thu, 04 Dec 2025 21:47:45 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: SizerLab — Configure. Compare. Decide.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>SizerLab — Configure. Compare. Decide.</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<meta name="google-site-verification" content="1yXH3QMecpJYkaKQITyVoauCjSfbU5rmTmAZNu1wA6E" />
<meta name="google-adsense-account" content="ca-pub-7041843328960743">
<link rel="canonical" href="https://www.sizerlab.com/" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.sizerlab.com/" />
<meta property="og:title" content="SizerLab — Configure. Compare. Decide." />
<meta property="og:description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/base.css" />
<link rel="stylesheet" href="assets/css/theme.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flag-icons/css/flag-icons.min.css">
<script src="https://unpkg.com/vue@3" defer></script>
<script src="assets/js/utils.js" defer></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MEGWE2CTZG"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-MEGWE2CTZG');
</script>
</head>
<body>
<div id="app" :class="[{ dark: appTheme === 'dark' }]">
<header class="topbar">
<div class="topbar-left">
<h1 class="app-title">SizerLab</h1>
<span class="app-subtitle">Configure. Compare. Decide.</span>
</div>
<div class="topbar-right">
<label class="field-inline">
<input type="text" v-model="global.client" placeholder="Customer name" class="input" />
</label>
<label class="field-inline">
<input type="date" v-model="global.date" class="input" />
</label>
<button class="btn ghost" @click="toggleTheme">
{{ appTheme === 'light' ? '🌙 Dark' : '☀️ Light' }}
</button>
</div>
</header>
<main class="page" v-if="currentView==='home'">
<section>
<h2 class="section-title">Available configurators</h2>
<p class="muted">Free configurators</p>
<div class="tiles">
<article class="tile" role="button" tabindex="0" @click="open('s2d')" @keydown.enter="open('s2d')"
@keydown.space.prevent="open('s2d')">
<div class="tile-head">
<h3>S2D Calcultator</h3>
</div>
<p class="tile-desc">
Storage Spaces Direct sizing assistant (Hyper-V / Azure Stack HCI / Azure Local) — clear, trustworthy
sizing for Microsoft hyperconverged clusters.
</p>
<div class="hr"></div>
<p class="tile-desc">
Assistant de dimensionnement Storage Spaces Direct (Hyper-V / Azure Stack HCI / Azure Local) — chiffrage
clair et fiable des clusters hyperconvergés Microsoft.
</p>
<div class="hr"></div>
<div class="tile-foot">
<span class="tile-tag">Microsoft Hyper-V</span>
<span class="tile-tag">Azure Local</span>
<span class="tile-tag">Azure Stack HCI</span>
<span class="tile-tag">S2D</span>
</div>
</article>
<article class="tile" role="button" tabindex="0" @click="open('bw')" @keydown.enter="open('bw')"
@keydown.space.prevent="open('bw')">
<div class
Open service 20.82.12.44:443 · www.sizerlab.com
2026-01-02 11:05
HTTP/1.1 200 OK
Content-Length: 7743
Connection: close
Content-Type: text/html
Date: Fri, 02 Jan 2026 11:05:55 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "01284120"
Last-Modified: Thu, 04 Dec 2025 21:47:45 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: SizerLab — Configure. Compare. Decide.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>SizerLab — Configure. Compare. Decide.</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<meta name="google-site-verification" content="1yXH3QMecpJYkaKQITyVoauCjSfbU5rmTmAZNu1wA6E" />
<meta name="google-adsense-account" content="ca-pub-7041843328960743">
<link rel="canonical" href="https://www.sizerlab.com/" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.sizerlab.com/" />
<meta property="og:title" content="SizerLab — Configure. Compare. Decide." />
<meta property="og:description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/base.css" />
<link rel="stylesheet" href="assets/css/theme.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flag-icons/css/flag-icons.min.css">
<script src="https://unpkg.com/vue@3" defer></script>
<script src="assets/js/utils.js" defer></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MEGWE2CTZG"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-MEGWE2CTZG');
</script>
</head>
<body>
<div id="app" :class="[{ dark: appTheme === 'dark' }]">
<header class="topbar">
<div class="topbar-left">
<h1 class="app-title">SizerLab</h1>
<span class="app-subtitle">Configure. Compare. Decide.</span>
</div>
<div class="topbar-right">
<label class="field-inline">
<input type="text" v-model="global.client" placeholder="Customer name" class="input" />
</label>
<label class="field-inline">
<input type="date" v-model="global.date" class="input" />
</label>
<button class="btn ghost" @click="toggleTheme">
{{ appTheme === 'light' ? '🌙 Dark' : '☀️ Light' }}
</button>
</div>
</header>
<main class="page" v-if="currentView==='home'">
<section>
<h2 class="section-title">Available configurators</h2>
<p class="muted">Free configurators</p>
<div class="tiles">
<article class="tile" role="button" tabindex="0" @click="open('s2d')" @keydown.enter="open('s2d')"
@keydown.space.prevent="open('s2d')">
<div class="tile-head">
<h3>S2D Calcultator</h3>
</div>
<p class="tile-desc">
Storage Spaces Direct sizing assistant (Hyper-V / Azure Stack HCI / Azure Local) — clear, trustworthy
sizing for Microsoft hyperconverged clusters.
</p>
<div class="hr"></div>
<p class="tile-desc">
Assistant de dimensionnement Storage Spaces Direct (Hyper-V / Azure Stack HCI / Azure Local) — chiffrage
clair et fiable des clusters hyperconvergés Microsoft.
</p>
<div class="hr"></div>
<div class="tile-foot">
<span class="tile-tag">Microsoft Hyper-V</span>
<span class="tile-tag">Azure Local</span>
<span class="tile-tag">Azure Stack HCI</span>
<span class="tile-tag">S2D</span>
</div>
</article>
<article class="tile" role="button" tabindex="0" @click="open('bw')" @keydown.enter="open('bw')"
@keydown.space.prevent="open('bw')">
<div class
Open service 20.82.12.44:443 · www.sizerlab.com
2025-12-22 21:12
HTTP/1.1 200 OK
Content-Length: 7743
Connection: close
Content-Type: text/html
Date: Mon, 22 Dec 2025 21:12:51 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "01284120"
Last-Modified: Thu, 04 Dec 2025 21:47:45 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: SizerLab — Configure. Compare. Decide.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>SizerLab — Configure. Compare. Decide.</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<meta name="google-site-verification" content="1yXH3QMecpJYkaKQITyVoauCjSfbU5rmTmAZNu1wA6E" />
<meta name="google-adsense-account" content="ca-pub-7041843328960743">
<link rel="canonical" href="https://www.sizerlab.com/" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.sizerlab.com/" />
<meta property="og:title" content="SizerLab — Configure. Compare. Decide." />
<meta property="og:description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/base.css" />
<link rel="stylesheet" href="assets/css/theme.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flag-icons/css/flag-icons.min.css">
<script src="https://unpkg.com/vue@3" defer></script>
<script src="assets/js/utils.js" defer></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MEGWE2CTZG"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-MEGWE2CTZG');
</script>
</head>
<body>
<div id="app" :class="[{ dark: appTheme === 'dark' }]">
<header class="topbar">
<div class="topbar-left">
<h1 class="app-title">SizerLab</h1>
<span class="app-subtitle">Configure. Compare. Decide.</span>
</div>
<div class="topbar-right">
<label class="field-inline">
<input type="text" v-model="global.client" placeholder="Customer name" class="input" />
</label>
<label class="field-inline">
<input type="date" v-model="global.date" class="input" />
</label>
<button class="btn ghost" @click="toggleTheme">
{{ appTheme === 'light' ? '🌙 Dark' : '☀️ Light' }}
</button>
</div>
</header>
<main class="page" v-if="currentView==='home'">
<section>
<h2 class="section-title">Available configurators</h2>
<p class="muted">Free configurators</p>
<div class="tiles">
<article class="tile" role="button" tabindex="0" @click="open('s2d')" @keydown.enter="open('s2d')"
@keydown.space.prevent="open('s2d')">
<div class="tile-head">
<h3>S2D Calcultator</h3>
</div>
<p class="tile-desc">
Storage Spaces Direct sizing assistant (Hyper-V / Azure Stack HCI / Azure Local) — clear, trustworthy
sizing for Microsoft hyperconverged clusters.
</p>
<div class="hr"></div>
<p class="tile-desc">
Assistant de dimensionnement Storage Spaces Direct (Hyper-V / Azure Stack HCI / Azure Local) — chiffrage
clair et fiable des clusters hyperconvergés Microsoft.
</p>
<div class="hr"></div>
<div class="tile-foot">
<span class="tile-tag">Microsoft Hyper-V</span>
<span class="tile-tag">Azure Local</span>
<span class="tile-tag">Azure Stack HCI</span>
<span class="tile-tag">S2D</span>
</div>
</article>
<article class="tile" role="button" tabindex="0" @click="open('bw')" @keydown.enter="open('bw')"
@keydown.space.prevent="open('bw')">
<div class
Open service 20.82.12.44:443 · www.sizerlab.com
2025-12-20 23:09
HTTP/1.1 200 OK
Content-Length: 7743
Connection: close
Content-Type: text/html
Date: Sat, 20 Dec 2025 23:09:34 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "01284120"
Last-Modified: Thu, 04 Dec 2025 21:47:45 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: SizerLab — Configure. Compare. Decide.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>SizerLab — Configure. Compare. Decide.</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<meta name="google-site-verification" content="1yXH3QMecpJYkaKQITyVoauCjSfbU5rmTmAZNu1wA6E" />
<meta name="google-adsense-account" content="ca-pub-7041843328960743">
<link rel="canonical" href="https://www.sizerlab.com/" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.sizerlab.com/" />
<meta property="og:title" content="SizerLab — Configure. Compare. Decide." />
<meta property="og:description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/base.css" />
<link rel="stylesheet" href="assets/css/theme.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flag-icons/css/flag-icons.min.css">
<script src="https://unpkg.com/vue@3" defer></script>
<script src="assets/js/utils.js" defer></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MEGWE2CTZG"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-MEGWE2CTZG');
</script>
</head>
<body>
<div id="app" :class="[{ dark: appTheme === 'dark' }]">
<header class="topbar">
<div class="topbar-left">
<h1 class="app-title">SizerLab</h1>
<span class="app-subtitle">Configure. Compare. Decide.</span>
</div>
<div class="topbar-right">
<label class="field-inline">
<input type="text" v-model="global.client" placeholder="Customer name" class="input" />
</label>
<label class="field-inline">
<input type="date" v-model="global.date" class="input" />
</label>
<button class="btn ghost" @click="toggleTheme">
{{ appTheme === 'light' ? '🌙 Dark' : '☀️ Light' }}
</button>
</div>
</header>
<main class="page" v-if="currentView==='home'">
<section>
<h2 class="section-title">Available configurators</h2>
<p class="muted">Free configurators</p>
<div class="tiles">
<article class="tile" role="button" tabindex="0" @click="open('s2d')" @keydown.enter="open('s2d')"
@keydown.space.prevent="open('s2d')">
<div class="tile-head">
<h3>S2D Calcultator</h3>
</div>
<p class="tile-desc">
Storage Spaces Direct sizing assistant (Hyper-V / Azure Stack HCI / Azure Local) — clear, trustworthy
sizing for Microsoft hyperconverged clusters.
</p>
<div class="hr"></div>
<p class="tile-desc">
Assistant de dimensionnement Storage Spaces Direct (Hyper-V / Azure Stack HCI / Azure Local) — chiffrage
clair et fiable des clusters hyperconvergés Microsoft.
</p>
<div class="hr"></div>
<div class="tile-foot">
<span class="tile-tag">Microsoft Hyper-V</span>
<span class="tile-tag">Azure Local</span>
<span class="tile-tag">Azure Stack HCI</span>
<span class="tile-tag">S2D</span>
</div>
</article>
<article class="tile" role="button" tabindex="0" @click="open('bw')" @keydown.enter="open('bw')"
@keydown.space.prevent="open('bw')">
<div class
Open service 20.82.12.44:443 · www.sizerlab.com
2025-12-19 01:33
HTTP/1.1 200 OK
Content-Length: 7743
Connection: close
Content-Type: text/html
Date: Fri, 19 Dec 2025 01:33:11 GMT
Cache-Control: public, must-revalidate, max-age=30
ETag: "01284120"
Last-Modified: Thu, 04 Dec 2025 21:47:45 GMT
Strict-Transport-Security: max-age=10886400; includeSubDomains; preload
Referrer-Policy: same-origin
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
X-DNS-Prefetch-Control: off
Page title: SizerLab — Configure. Compare. Decide.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>SizerLab — Configure. Compare. Decide.</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<meta name="google-site-verification" content="1yXH3QMecpJYkaKQITyVoauCjSfbU5rmTmAZNu1wA6E" />
<meta name="google-adsense-account" content="ca-pub-7041843328960743">
<link rel="canonical" href="https://www.sizerlab.com/" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.sizerlab.com/" />
<meta property="og:title" content="SizerLab — Configure. Compare. Decide." />
<meta property="og:description"
content="SizerLab propose des configurateurs techniques gratuits (stockage, bande passante, VMware, HPE SimpliVity) pour dimensionner, comparer et décider plus vite." />
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="assets/css/base.css" />
<link rel="stylesheet" href="assets/css/theme.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flag-icons/css/flag-icons.min.css">
<script src="https://unpkg.com/vue@3" defer></script>
<script src="assets/js/utils.js" defer></script>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MEGWE2CTZG"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-MEGWE2CTZG');
</script>
</head>
<body>
<div id="app" :class="[{ dark: appTheme === 'dark' }]">
<header class="topbar">
<div class="topbar-left">
<h1 class="app-title">SizerLab</h1>
<span class="app-subtitle">Configure. Compare. Decide.</span>
</div>
<div class="topbar-right">
<label class="field-inline">
<input type="text" v-model="global.client" placeholder="Customer name" class="input" />
</label>
<label class="field-inline">
<input type="date" v-model="global.date" class="input" />
</label>
<button class="btn ghost" @click="toggleTheme">
{{ appTheme === 'light' ? '🌙 Dark' : '☀️ Light' }}
</button>
</div>
</header>
<main class="page" v-if="currentView==='home'">
<section>
<h2 class="section-title">Available configurators</h2>
<p class="muted">Free configurators</p>
<div class="tiles">
<article class="tile" role="button" tabindex="0" @click="open('s2d')" @keydown.enter="open('s2d')"
@keydown.space.prevent="open('s2d')">
<div class="tile-head">
<h3>S2D Calcultator</h3>
</div>
<p class="tile-desc">
Storage Spaces Direct sizing assistant (Hyper-V / Azure Stack HCI / Azure Local) — clear, trustworthy
sizing for Microsoft hyperconverged clusters.
</p>
<div class="hr"></div>
<p class="tile-desc">
Assistant de dimensionnement Storage Spaces Direct (Hyper-V / Azure Stack HCI / Azure Local) — chiffrage
clair et fiable des clusters hyperconvergés Microsoft.
</p>
<div class="hr"></div>
<div class="tile-foot">
<span class="tile-tag">Microsoft Hyper-V</span>
<span class="tile-tag">Azure Local</span>
<span class="tile-tag">Azure Stack HCI</span>
<span class="tile-tag">S2D</span>
</div>
</article>
<article class="tile" role="button" tabindex="0" @click="open('bw')" @keydown.enter="open('bw')"
@keydown.space.prevent="open('bw')">
<div class