Browse Source

Added QubesOS case study

main
Anxhelo Lushka 2 months ago
parent
commit
7c8d3e957e
No known key found for this signature in database GPG Key ID: C86D6CF1F7FAAA35
  1. 102
      assets/js/before-after-slider.js
  2. 13
      assets/scss/_custom.scss
  3. 4
      config.toml
  4. 6
      content/de/imprint.md
  5. 104
      content/de/work/qubesos.md
  6. 6
      content/en/imprint.md
  7. 104
      content/en/work/qubesos.md
  8. 8
      i18n/de.toml
  9. 6
      i18n/en.toml
  10. 13
      layouts/_default/contact.html
  11. 18
      layouts/partials/noscript.html
  12. 34
      layouts/shortcodes/ba-slider.html
  13. BIN
      static/img/work/qubesos-cover.webp
  14. 1
      static/img/work/qubesos-general-settings-after.svg
  15. BIN
      static/img/work/qubesos-general-settings-after.webp
  16. 1
      static/img/work/qubesos-general-settings-before.svg
  17. BIN
      static/img/work/qubesos-general-settings-before.webp
  18. BIN
      static/img/work/qubesos-icons-after-dark.webp
  19. BIN
      static/img/work/qubesos-icons-after.webp
  20. BIN
      static/img/work/qubesos-icons-before-dark.webp
  21. BIN
      static/img/work/qubesos-icons-before.webp
  22. 6
      static/img/work/qubesos-logo-dark.svg
  23. 6
      static/img/work/qubesos-logo.svg
  24. BIN
      static/img/work/qubesos-logo.webp
  25. 28
      static/img/work/qubesos-qubeicons-after.svg
  26. BIN
      static/img/work/qubesos-qubeicons-after.webp
  27. 125
      static/img/work/qubesos-qubeicons-before.svg
  28. BIN
      static/img/work/qubesos-qubeicons-before.webp
  29. BIN
      static/img/work/qubesos-window-after.webp
  30. BIN
      static/img/work/qubesos-window-before.webp
  31. 7
      static/img/work/qubesos.svg
  32. BIN
      static/img/work/qubesos.webp

102
assets/js/before-after-slider.js

@ -1,21 +1,13 @@
document.addEventListener("DOMContentLoaded", function () {
const toggleSwitch = document.getElementById("view-toggle");
const slider = document.getElementById("slider");
const container = document.querySelector(".ba-slider");
const beforeText = document.getElementById("before-text");
const afterText = document.getElementById("after-text");
// Initialize the state
const initializeState = () => {
slider.value = 0; // Start with "After" at 0%
container.style.setProperty("--position", "0%");
beforeText.classList.add("text-muted");
afterText.classList.remove("text-muted");
toggleSwitch.setAttribute("aria-checked", "true");
};
// Get all instances of the toggle switch, sliders, and containers
const toggleSwitches = document.querySelectorAll(".toggle-input");
const sliders = document.querySelectorAll(".slider");
const containers = document.querySelectorAll(".ba-slider");
const beforeTexts = document.querySelectorAll(".before-text");
const afterTexts = document.querySelectorAll(".after-text");
// Function to animate the slider
const animateSlider = (start, end, duration = 350) => {
const animateSlider = (slider, container, start, end, duration = 350) => {
const stepTime = 10; // Step interval in ms
const steps = duration / stepTime;
const stepValue = (end - start) / steps;
@ -36,33 +28,91 @@ document.addEventListener("DOMContentLoaded", function () {
}, stepTime);
};
// Function to handle slider position when toggling
const handleToggle = () => {
// Function to update the toggle switch based on slider position
const updateToggleFromSlider = (
container,
slider,
toggleSwitch,
beforeText,
afterText
) => {
const position =
parseFloat(container.style.getPropertyValue("--position")) || 0;
if (position === 0 && !toggleSwitch.checked) {
toggleSwitch.checked = true;
afterText.classList.remove("text-muted");
beforeText.classList.add("text-muted");
toggleSwitch.setAttribute("aria-checked", "true");
} else if (position === 100 && toggleSwitch.checked) {
toggleSwitch.checked = false;
afterText.classList.add("text-muted");
beforeText.classList.remove("text-muted");
toggleSwitch.setAttribute("aria-checked", "false");
}
};
// Function to handle toggle switch logic
const handleToggle = (
toggleSwitch,
slider,
container,
beforeText,
afterText
) => {
const isChecked = toggleSwitch.checked;
if (isChecked) {
// Show "After" view
animateSlider(parseFloat(slider.value), 0); // Animate to 0% (After)
animateSlider(slider, container, parseFloat(slider.value), 0); // Animate to 0% (After)
beforeText.classList.add("text-muted");
afterText.classList.remove("text-muted");
toggleSwitch.setAttribute("aria-checked", "true");
} else {
// Show "Before" view
animateSlider(parseFloat(slider.value), 100); // Animate to 100% (Before)
animateSlider(slider, container, parseFloat(slider.value), 100); // Animate to 100% (Before)
afterText.classList.add("text-muted");
beforeText.classList.remove("text-muted");
toggleSwitch.setAttribute("aria-checked", "false");
}
};
// Initialize the state on page load
initializeState();
// Initialize the state for each slider instance
toggleSwitches.forEach((toggleSwitch, index) => {
const slider = sliders[index];
const container = containers[index];
const beforeText = beforeTexts[index];
const afterText = afterTexts[index];
// Add event listener for the switch toggle
toggleSwitch.addEventListener("change", handleToggle);
if (slider && container && beforeText && afterText) {
// Initialize slider position
container.style.setProperty("--position", "0%");
slider.value = 0;
beforeText.classList.add("text-muted");
afterText.classList.remove("text-muted");
toggleSwitch.setAttribute("aria-checked", "true");
// Add event listener for the switch toggle
toggleSwitch.addEventListener("change", () => {
handleToggle(toggleSwitch, slider, container, beforeText, afterText);
});
// Add slider logic (if manual adjustment is still needed)
slider.addEventListener("input", (e) => {
container.style.setProperty("--position", `${e.target.value}%`);
// Add event listener for manual slider input
slider.addEventListener("input", () => {
const value = parseFloat(slider.value);
container.style.setProperty("--position", `${value}%`);
updateToggleFromSlider(
container,
slider,
toggleSwitch,
beforeText,
afterText
);
});
} else {
console.error(
"One or more elements (slider, container, beforeText, afterText) are missing."
);
}
});
});

13
assets/scss/_custom.scss

@ -1854,13 +1854,12 @@ details[open] summary svg {
.image-container {
max-width: 100%;
max-height: 90vh;
aspect-ratio: 1/1;
aspect-ratio: auto;
}
.slider-image {
& figure {
width: 100%;
height: 100%;
padding-block: 0;
}
@ -1897,10 +1896,10 @@ details[open] summary svg {
.slider-line {
position: absolute;
inset: 0;
width: 0.15rem;
width: 0.1rem;
height: 100%;
opacity: 0.4;
background-color: $black;
opacity: 0.3;
background-color: $gray-500;
left: var(--position);
transform: translateX(-50%);
pointer-events: none;
@ -1909,9 +1908,9 @@ details[open] summary svg {
.slider-button {
position: absolute;
background-color: $white;
color: $black;
color: $gray-500;
padding: 0.5rem;
border-radius: 100vw;
border-radius: 0;
display: grid;
place-items: center;
top: 50%;

4
config.toml

@ -84,10 +84,6 @@ pluralizeListTitles = false
name = "github"
url = "https://github.com/uradotdesign"
[[params.social]]
name = "x-twitter"
url = "https://twitter.com/uradotdesign"
[[params.social]]
name = "instagram"
url = "https://instagram.com/uradotdesign"

6
content/de/imprint.md

@ -7,11 +7,13 @@ text = "#FFFFFF"
Ura Design wird betrieben von (Impressum nach § 5 TMG, ebenso verantwortlich für den Inhalt nach § 55 Abs. 2 RStV):
Elio Qoshi
Elio Qoshi\
Ura Design e.K.\
c/o Cultivation Space\
Aufgang 4\
Gottschedstraße 4\
13357 Berlin\
13357 Berlin, Deutschland
Steuernummer: 34/481/01445\
USt.-IDNr: DE357155567

104
content/de/work/qubesos.md

@ -0,0 +1,104 @@
+++
layout = "work/single"
featured = true
theme = "light"
background = "#FFFFFF"
accent = "#005F9C"
text = "#212529"
title = "Qubes OS Usability Audit"
summary = "Qubes OS is renowned for its security, but its complex interface can be a major hurdle for new users. This project aimed to untangle that complexity while preserving the advanced protections that make it one of the most secure systems available."
date = "2025-01-08 12:00:00 +0200"
images = ["img/work/qubesos.webp", "qubesos"]
tags = []
categories = ["Accessibility", "UX Research", "Illustrations"]
[links]
"Qubes OS Website" = "https://www.qubes-os.org/"
+++
{{< figure class="with-js on-light" src="/img/work/qubesos-logo.svg" alt="QubesOS logo" >}}
{{< figure class="with-js on-dark" src="/img/work/qubesos-logo-dark.svg" alt="QubesOS logo" >}}
{{< figure class="no-js" src="/img/work/qubesos-logo.webp" alt="QubesOS logo" >}}
## Qubes OS Mission
Qubes OS is a security-focused operating system that uses virtualization to isolate tasks and applications in separate environments called ‘qubes’. This means that if one qube is compromised, the rest of the system stays secure. Think of it like a digital fortress, where each room is locked and independently secured.
{{< figure src="/img/work/qubesos-cover.webp" alt="QubesOS cover image" >}}
## Our Approach and Objectives
Qubes OS is known for its strong security but faces significant usability challenges. Technical users often bypass the user interface in favor of the command line, limiting its appeal to non-technical users.
We identified journalists as a key user group who need strong security but lack the technical expertise to navigate Qubes OS. For instance, a journalist investigating government corruption may need a secure system to protect sensitive communications but could struggle with the platform’s complexity.
To address these challenges, we focused on improving critical aspects of the user experience: accessibility, visual consistency, clear communication, and intuitive interface design. Our goal was to lower the learning curve and make Qubes OS accessible to a broader range of users without compromising its core strengths.
## Creating an accessible color system
We adopted the [Tailwind CSS](https://tailwindcss.com/docs/customizing-colors) color system, an open-source framework with a diverse palette. This system improves readability, accessibility, and creates a more cohesive, visually appealing UI with improved WCAG 2.2 compliance.
Each qube is identified by a color to help users differentiate them. The previous color scheme lacked sufficient contrast, making text hard to read. We updated the qube window colors using the Tailwind palette to improve readability and color contrast across Windows.
{{< ba-slider
before_light="/img/work/qubesos-window-before.webp"
before_dark="/img/work/qubesos-window-before.webp"
before_nojs="/img/work/qubesos-window-before.webp"
after_light="/img/work/qubesos-window-after.webp"
after_dark="/img/work/qubesos-window-after.webp"
after_nojs="/img/work/qubesos-window-after.webp"
>}}
## Building a consistent icon set
We reviewed the existing Qubes icons, analyzing their usage to understand how they functioned across the platform. This informed our proposal for a new icon set, sourced mostly from lucide.dev under an MIT license, featuring outlined designs with customizable stroke widths.
{{< ba-slider
before_light="/img/work/qubesos-icons-before.webp"
before_dark="/img/work/qubesos-icons-before-dark.webp"
before_nojs="/img/work/qubesos-icons-before-dark.webp"
after_light="/img/work/qubesos-icons-after.webp"
after_dark="/img/work/qubesos-icons-after-dark.webp"
after_nojs="/img/work/qubesos-icons-after-dark.webp"
>}}
While most icons were sourced from Lucide, we redesigned those for specific qube types, as the previous icons didn't align well with pixel grids. The redesign incorporated the updated qube colors and gave the icons a more modern look.
{{< ba-slider
before_light="/img/work/qubesos-qubeicons-before.svg"
before_dark="/img/work/qubesos-qubeicons-before.svg"
before_nojs="/img/work/qubesos-qubeicons-before.webp"
after_light="/img/work/qubesos-qubeicons-after.svg"
after_dark="/img/work/qubesos-qubeicons-after.svg"
after_nojs="/img/work/qubesos-qubeicons-after.webp"
>}}
## Rewriting UX copy
To improve clarity and accessibility, we conducted a copy audit of the Global Configuration settings. We focused on making the text **necessary**, **clear**, **concise**, and **useful**, ensuring it provided essential, actionable information for users. Based on these criteria, we proposed updated text to replace the old content.
## Bringing it all together
For the final step, we took all these elements; the new color system, icon set, and updated text to redesign the global configurations page.
We chose screens from the global configuration settings that showcased the different design patterns that exist across all the screens. This way when the redesign is implemented they have all the different ux patterns documented so they can be applied across the different screens.
{{< ba-slider
before_light="/img/work/qubesos-general-settings-before.svg"
before_dark="/img/work/qubesos-general-settings-before.svg"
before_nojs="/img/work/qubesos-general-settings-before.webp"
after_light="/img/work/qubesos-general-settings-after.svg"
after_dark="/img/work/qubesos-general-settings-after.svg"
after_nojs="/img/work/qubesos-general-settings-after.webp"
>}}
## How we helped
**Improved Accessibility**: The introduction of the Tailwind color system and the update of qube window colors have improved the clarity of text and ensured compliance with WCAG 2.2 standards, making the interface more usable.
**Visual Consistency**: A refreshed logo has resolved inconsistencies in branding across platforms, reinforcing Qubes OS's visual identity.
**Enhanced Iconography**: The redesigned icon set creates a unified, modern look while improving functionality, making navigation and interaction more intuitive for users.
**Clearer UX Copy**: The audit of the Global Configuration settings copy has led to clearer, more concise text, improving user comprehension and facilitating smoother interactions.
**Unified UI/UX Design**: The redesign of the global configuration pages, incorporating new colors, icons, and updated text, has resulted in a cohesive and visually appealing user experience.

6
content/en/imprint.md

@ -7,11 +7,13 @@ text = "#FFFFFF"
Ura Design is operated by (Impressum nach § 5 TMG, ebenso verantwortlich für den Inhalt nach § 55 Abs. 2 RStV):
Elio Qoshi
Elio Qoshi\
Ura Design e.K.\
c/o Cultivation Space\
Aufgang 4\
Gottschedstraße 4\
13357 Berlin\
13357 Berlin, Germany
Tax ID: 34/481/01445\
VAT: DE357155567

104
content/en/work/qubesos.md

@ -0,0 +1,104 @@
+++
layout = "work/single"
featured = true
theme = "light"
background = "#FFFFFF"
accent = "#005F9C"
text = "#212529"
title = "Qubes OS Usability Audit"
summary = "Qubes OS is renowned for its security, but its complex interface can be a major hurdle for new users. This project aimed to untangle that complexity while preserving the advanced protections that make it one of the most secure systems available."
date = "2025-01-08 12:00:00 +0200"
images = ["img/work/qubesos.webp", "qubesos"]
tags = []
categories = ["Accessibility", "UX Research", "Illustrations"]
[links]
"Qubes OS Website" = "https://www.qubes-os.org/"
+++
{{< figure class="with-js on-light" src="/img/work/qubesos-logo.svg" alt="QubesOS logo" >}}
{{< figure class="with-js on-dark" src="/img/work/qubesos-logo-dark.svg" alt="QubesOS logo" >}}
{{< figure class="no-js" src="/img/work/qubesos-logo.webp" alt="QubesOS logo" >}}
## Qubes OS Mission
Qubes OS is a security-focused operating system that uses virtualization to isolate tasks and applications in separate environments called ‘qubes’. This means that if one qube is compromised, the rest of the system stays secure. Think of it like a digital fortress, where each room is locked and independently secured.
{{< figure src="/img/work/qubesos-cover.webp" alt="QubesOS cover image" >}}
## Our Approach and Objectives
Qubes OS is known for its strong security but faces significant usability challenges. Technical users often bypass the user interface in favor of the command line, limiting its appeal to non-technical users.
We identified journalists as a key user group who need strong security but lack the technical expertise to navigate Qubes OS. For instance, a journalist investigating government corruption may need a secure system to protect sensitive communications but could struggle with the platform’s complexity.
To address these challenges, we focused on improving critical aspects of the user experience: accessibility, visual consistency, clear communication, and intuitive interface design. Our goal was to lower the learning curve and make Qubes OS accessible to a broader range of users without compromising its core strengths.
## Creating an accessible color system
We adopted the [Tailwind CSS](https://tailwindcss.com/docs/customizing-colors) color system, an open-source framework with a diverse palette. This system improves readability, accessibility, and creates a more cohesive, visually appealing UI with improved WCAG 2.2 compliance.
Each qube is identified by a color to help users differentiate them. The previous color scheme lacked sufficient contrast, making text hard to read. We updated the qube window colors using the Tailwind palette to improve readability and color contrast across Windows.
{{< ba-slider
before_light="/img/work/qubesos-window-before.webp"
before_dark="/img/work/qubesos-window-before.webp"
before_nojs="/img/work/qubesos-window-before.webp"
after_light="/img/work/qubesos-window-after.webp"
after_dark="/img/work/qubesos-window-after.webp"
after_nojs="/img/work/qubesos-window-after.webp"
>}}
## Building a consistent icon set
We reviewed the existing Qubes icons, analyzing their usage to understand how they functioned across the platform. This informed our proposal for a new icon set, sourced mostly from lucide.dev under an MIT license, featuring outlined designs with customizable stroke widths.
{{< ba-slider
before_light="/img/work/qubesos-icons-before.webp"
before_dark="/img/work/qubesos-icons-before-dark.webp"
before_nojs="/img/work/qubesos-icons-before-dark.webp"
after_light="/img/work/qubesos-icons-after.webp"
after_dark="/img/work/qubesos-icons-after-dark.webp"
after_nojs="/img/work/qubesos-icons-after-dark.webp"
>}}
While most icons were sourced from Lucide, we redesigned those for specific qube types, as the previous icons didn't align well with pixel grids. The redesign incorporated the updated qube colors and gave the icons a more modern look.
{{< ba-slider
before_light="/img/work/qubesos-qubeicons-before.svg"
before_dark="/img/work/qubesos-qubeicons-before.svg"
before_nojs="/img/work/qubesos-qubeicons-before.webp"
after_light="/img/work/qubesos-qubeicons-after.svg"
after_dark="/img/work/qubesos-qubeicons-after.svg"
after_nojs="/img/work/qubesos-qubeicons-after.webp"
>}}
## Rewriting UX copy
To improve clarity and accessibility, we conducted a copy audit of the Global Configuration settings. We focused on making the text **necessary**, **clear**, **concise**, and **useful**, ensuring it provided essential, actionable information for users. Based on these criteria, we proposed updated text to replace the old content.
## Bringing it all together
For the final step, we took all these elements; the new color system, icon set, and updated text to redesign the global configurations page.
We chose screens from the global configuration settings that showcased the different design patterns that exist across all the screens. This way when the redesign is implemented they have all the different ux patterns documented so they can be applied across the different screens.
{{< ba-slider
before_light="/img/work/qubesos-general-settings-before.svg"
before_dark="/img/work/qubesos-general-settings-before.svg"
before_nojs="/img/work/qubesos-general-settings-before.webp"
after_light="/img/work/qubesos-general-settings-after.svg"
after_dark="/img/work/qubesos-general-settings-after.svg"
after_nojs="/img/work/qubesos-general-settings-after.webp"
>}}
## How we helped
**Improved Accessibility**: The introduction of the Tailwind color system and the update of qube window colors have improved the clarity of text and ensured compliance with WCAG 2.2 standards, making the interface more usable.
**Visual Consistency**: A refreshed logo has resolved inconsistencies in branding across platforms, reinforcing Qubes OS's visual identity.
**Enhanced Iconography**: The redesigned icon set creates a unified, modern look while improving functionality, making navigation and interaction more intuitive for users.
**Clearer UX Copy**: The audit of the Global Configuration settings copy has led to clearer, more concise text, improving user comprehension and facilitating smoother interactions.
**Unified UI/UX Design**: The redesign of the global configuration pages, incorporating new colors, icons, and updated text, has resulted in a cohesive and visually appealing user experience.

8
i18n/de.toml

@ -123,7 +123,7 @@ other = "Sign up now and start making a difference"
[faq]
other = "Frequently Asked Questions"
[whatTest]
other = "What Does It Mean to Be a Tester?"
other = "What does it mean to be a tester?"
[whatDescription]
other = "As a tester, you’ll play a crucial role in improving open-source projects. Here’s what you can expect."
@ -133,9 +133,9 @@ other = "Kontakt aufnehmen"
[contactTeam]
other = "Hast Du eine Herausforderung für uns? Setze Dich mit unserem Team in Verbindung, um zu sehen, wie wir helfen können."
[preferCall]
other = "Möchtest Du lieber ein persönliches Gespräch?"
other = "Was unsere Kunden über uns sagen"
[scheduleCall]
other = "Einen Anruf vereinbaren"
other = "Lesen Sie Erfahrungsberichte"
[helpProject]
other = "Können wir Dir bei Deinem Projekt helfen?"
[contactUs]
@ -147,7 +147,7 @@ other = "Wir sind auf"
[letsTalk]
other = "Lass uns reden"
[getInvolved]
other = "Werde Aktiv"
other = "Mach mit"
[researchPanel]
other = "Forschungspanel"

6
i18n/en.toml

@ -124,7 +124,7 @@ other = "Sign up now and start making a difference"
[faq]
other = "Frequently Asked Questions"
[whatTest]
other = "What Does It Mean to Be a Tester?"
other = "What does it mean to be a tester?"
[whatDescription]
other = "As a tester, you’ll play a crucial role in improving open-source projects. Here’s what you can expect."
@ -134,9 +134,9 @@ other = "Get in touch"
[contactTeam]
other = "Have a challenge? Get in touch with our team to discuss how we can help."
[preferCall]
other = "Prefer to talk over a call?"
other = "What our clients say about us"
[scheduleCall]
other = "Schedule a call"
other = "Read testimonials"
[helpProject]
other = "Can we help on your project?"
[contactUs]

13
layouts/_default/contact.html

@ -14,10 +14,12 @@
<div class="row social-links">
<div class="col-xl-4 col-lg-3 col-12 mb-lg-0 mb-5">
<p>Berlin Office</p>
<address>c/o Cultivation Space<br />
<address>Ura Design e.K.<br />
c/o Cultivation Space<br />
Aufgang 4<br />
Gottschedstraße 4<br />
13357 Berlin</address>
13357 Berlin, Germany
</address>
</div>
<div class="col-xl-8 col-lg-9 col-12 mb-lg-0 mb-5">
<div class="row">
@ -30,11 +32,6 @@
<a href="https://github.com/uradotdesign" target="_blank"
rel="noopener noreferrer">UraDotDesign</a>
</div>
<div class="col-xl-4 col-lg-auto col-12 mb-lg-4 mb-5">
<p>Twitter</p>
<a href="https://twitter.com/uradotdesign" target="_blank"
rel="noopener noreferrer">@uradotdesign</a>
</div>
<div class="col-xl-4 col-lg-auto col-12 mb-lg-0 mb-5">
<p>Instagram</p>
<a href="https://instagram.com/uradotdesign" target="_blank"
@ -62,7 +59,7 @@
<div class="col-xl-5 col-lg-7 col-12 px-lg-3 px-0">
<div class="cta-card py-5">
<h2>{{ i18n "preferCall" }}</h2>
<a class="arrow-link" href="https://cal.ura.design/uradotdesign" rel="noopener noreferrer" target="_blank">{{ i18n "scheduleCall" }}{{ partial "fontawesome.html" "solid/arrow-right" }}</a>
<a class="arrow-link" href="{{ "/clients" | absLangURL }}" rel="noopener noreferrer" target="_blank">{{ i18n "scheduleCall" }}{{ partial "fontawesome.html" "solid/arrow-right" }}</a>
</div>
</div>
</div>

18
layouts/partials/noscript.html

@ -140,10 +140,26 @@
display: block !important;
}
.slider,
.slider-line,
.slider-button,
[aria-label="Toggle between Before and After views"],
.image-before.slider-image {
display: none !important;
}
.image-after.slider-image {
& .with-js,
& .no-js.d-block.d-lg-none {
display: none !important;
}
}
@media (min-width: 992px) {
.navbar-toggler.no-js {
display: none !important;
}
}
</style>
</noscript>
</noscript>

34
layouts/shortcodes/ba-slider.html

@ -146,11 +146,10 @@
</div>
</div>
<input id="slider" type="range" min="0" max="100" value="0" aria-label="Adjust before and after view slider"
class="slider" />
<input type="range" min="0" max="100" value="0" aria-label="Adjust before and after view slider" class="slider" />
<div class="slider-line" aria-hidden="true"></div>
<div class="slider-button" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="30" fill="currentColor" viewBox="0 0 256 256">
<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="currentColor" viewBox="0 0 256 256">
<rect width="256" height="256" fill="none"></rect>
<line x1="128" y1="40" x2="128" y2="216" fill="none" stroke="currentColor" stroke-linecap="round"
stroke-linejoin="round" stroke-width="16"></line>
@ -179,33 +178,28 @@ document.addEventListener('DOMContentLoaded', () => {
toolbar.style.justifyContent = 'center';
toolbar.style.gap = '0.5rem';
} else {
console.log('Toolbar not found inside shadow DOM.');
//console.log('Toolbar not found inside shadow DOM.');
}
} else {
console.error('lottie-player element not found.');
//console.error('lottie-player element not found.');
}
});
</script>
<div class="d-flex justify-content-center align-items-center gap-2" role="group" aria-label="Toggle between Before and After views">
<span class="fw-semibold text-muted" id="before-text">Before</span>
<div class="d-flex justify-content-center align-items-center gap-2 toggle-container mb-5" role="group" aria-label="Toggle between Before and After views">
<span class="fw-semibold text-muted before-text">Before</span>
<label class="form-switch position-relative d-inline-block">
<input
type="checkbox"
class="form-check-input visually-hidden"
id="view-toggle"
checked
aria-checked="true"
aria-labelledby="before-text after-text"
aria-describedby="toggle-description"
>
<input
type="checkbox"
class="form-check-input visually-hidden toggle-input"
aria-checked="true"
aria-label="Toggle between Before and After views"
checked="checked"
/>
<span class="switch-slider rounded-pill"></span>
</label>
<span class="fw-semibold" id="after-text">After</span>
<span class="fw-semibold after-text">After</span>
</div>
<p id="toggle-description" class="visually-hidden">
Use this toggle to switch between the Before and After views of the slider.
</p>
{{ $js := resources.Get "js/before-after-slider.js" | resources.Minify }}
<script src="{{ $js.RelPermalink }}"></script>

BIN
static/img/work/qubesos-cover.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

1
static/img/work/qubesos-general-settings-after.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 528 KiB

BIN
static/img/work/qubesos-general-settings-after.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

1
static/img/work/qubesos-general-settings-before.svg

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 382 KiB

BIN
static/img/work/qubesos-general-settings-before.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
static/img/work/qubesos-icons-after-dark.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
static/img/work/qubesos-icons-after.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

BIN
static/img/work/qubesos-icons-before-dark.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

BIN
static/img/work/qubesos-icons-before.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

6
static/img/work/qubesos-logo-dark.svg

@ -0,0 +1,6 @@
<svg width="315" height="94" viewBox="0 0 315 94" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M39.2408 3.10563C37.6044 3.06794 35.9892 3.48256 34.5723 4.30404L4.45969 21.7234C3.10421 22.5072 1.97845 23.6348 1.19561 24.9929C0.412768 26.351 0.000424807 27.8918 0 29.4602V64.3172C0.0020122 65.8841 0.415109 67.423 1.19787 68.7794C1.98064 70.1358 3.10554 71.262 4.45969 72.045L34.5723 89.478C35.9275 90.2623 37.4648 90.6752 39.0297 90.6752C40.5946 90.6752 42.1319 90.2623 43.4871 89.478L73.6044 72.045C74.9577 71.2614 76.0816 70.1349 76.8636 68.7786C77.6455 67.4222 78.0579 65.8837 78.0595 64.3172V29.4602C78.0595 27.8922 77.6479 26.3518 76.8658 24.9937C76.0838 23.6357 74.959 22.5078 73.6044 21.7234L43.4871 4.30404C42.1942 3.55429 40.734 3.1422 39.2408 3.10563ZM39.1441 22.8078C39.9656 22.8267 40.7693 23.0524 41.4811 23.4639L58.0464 33.0462C58.7916 33.4776 59.4104 34.098 59.8406 34.845C60.2708 35.592 60.4972 36.4394 60.4972 37.302V56.4756C60.4956 57.3366 60.2684 58.182 59.8383 58.9273C59.4082 59.6726 58.7902 60.2915 58.0464 60.7222L41.4811 70.3135C40.7361 70.7444 39.891 70.9712 39.0309 70.9712C38.1707 70.9712 37.3257 70.7444 36.5806 70.3135L20.0148 60.7222C19.271 60.2915 18.6532 59.6725 18.2232 58.9272C17.7932 58.1819 17.5661 57.3365 17.5646 56.4756V37.302C17.5645 36.4395 17.7908 35.5921 18.2209 34.8451C18.651 34.0981 19.2697 33.4776 20.0148 33.0462L36.5806 23.4639C37.359 23.0139 38.2457 22.7869 39.1441 22.8078Z" fill="white"/>
<path d="M76.8637 25.0073L59.8339 34.8586C60.2647 35.6051 60.4919 36.452 60.4928 37.3143V56.483C60.4922 57.3448 60.2654 58.1912 59.8354 58.9374C59.4053 59.6836 58.787 60.3033 58.0426 60.7344L41.482 70.3215C40.7389 70.7486 39.8971 70.9732 39.0405 70.9727V90.6753C40.601 90.6758 42.1343 90.2656 43.4871 89.4858L50.1865 85.6082L58.7354 90.5832C62.5591 92.8084 68.7152 92.8084 72.5389 90.5832L76.3616 88.3588C80.1853 86.1337 80.1853 82.5504 76.3616 80.3252L67.8599 75.3776L73.6045 72.0526C74.9578 71.269 76.0818 70.1426 76.8638 68.7862C77.6458 67.4299 78.0582 65.8913 78.0598 64.3248V29.4725C78.0589 27.9047 77.6464 26.3648 76.8637 25.0073Z" fill="white"/>
<path d="M1.2041 24.9925L18.2306 34.8487C18.6601 34.1015 19.2782 33.4806 20.0228 33.0486L36.5858 23.4641C37.3307 23.0339 38.1754 22.8077 39.0351 22.8079C39.8948 22.8082 40.7394 23.0351 41.484 23.4658L58.0481 33.0477C58.7887 33.479 59.4037 34.0973 59.8318 34.8409L76.8549 24.99C76.0751 23.6354 74.9543 22.5097 73.6044 21.7254L43.4826 4.29962C42.1289 3.51682 40.5936 3.1045 39.0307 3.104C37.4678 3.10351 35.9323 3.51486 34.5781 4.29681L4.46482 21.7231C3.11045 22.5076 1.9859 23.6355 1.2041 24.9935V24.9925Z" fill="white"/>
<path d="M126.281 37.2415V58.4227C126.281 61.9281 125.61 64.8368 124.416 67.2234L127.549 70.9525C129.115 72.817 127.922 75.2782 125.535 75.2782H122.776C122.328 75.2782 121.06 74.7562 120.687 74.3087L119.047 72.2204C117.555 72.8916 115.914 73.1899 114.124 73.1899C105.92 73.1899 101.818 67.82 101.818 58.4227V37.2415C101.818 27.8441 105.92 22.9217 114.124 22.9217C122.254 22.9217 126.281 27.8441 126.281 37.2415ZM109.276 37.2415V58.4227C109.276 63.1214 110.768 65.5826 113.677 65.8063L113.304 65.3588C111.738 63.4197 113.005 60.9585 115.392 60.9585H118.077C118.152 60.9585 118.45 60.9585 118.674 61.0331C118.748 60.2873 118.823 59.3923 118.823 58.4227V37.2415C118.823 32.3936 117.331 30.3053 114.124 30.3053C110.917 30.3053 109.276 32.5428 109.276 37.2415ZM131.236 59.4669V25.5321C131.236 24.0405 132.429 22.8472 133.846 22.8472H135.935C137.426 22.8472 138.62 24.0405 138.62 25.5321V59.4669C138.62 63.4197 139.813 65.7318 143.467 65.7318C147.271 65.7318 148.315 63.0468 148.315 59.4669V25.5321C148.315 24.0405 149.509 22.8472 150.926 22.8472H153.014C154.506 22.8472 155.699 24.0405 155.699 25.5321V59.4669C155.699 67.82 152.119 73.1154 143.467 73.1154C134.518 73.1154 131.236 67.3726 131.236 59.4669ZM172.792 73.1899H165.408C163.916 73.1899 162.723 71.9966 162.723 70.505V25.6067C162.723 24.115 163.916 22.9217 165.408 22.9217H172.792C181.518 22.9217 185.396 27.695 185.396 37.316C185.396 44.2522 182.189 48.0558 182.189 48.0558C184.128 50.4425 185.396 54.2461 185.396 58.7956C185.396 68.4167 181.518 73.1899 172.792 73.1899ZM172.792 30.3053H170.181V44.3267H172.792C176.446 44.3267 177.938 42.313 177.938 37.316C177.938 32.3191 176.446 30.3053 172.792 30.3053ZM172.792 51.7104H170.181V65.8063H172.792C176.446 65.8063 177.938 63.7926 177.938 58.7956C177.938 53.7241 176.446 51.7104 172.792 51.7104ZM193.655 22.9217H209.765C211.257 22.9217 212.45 24.115 212.45 25.6067V27.6204C212.45 29.112 211.257 30.3053 209.765 30.3053H198.354V44.3267H207.751C209.243 44.3267 210.436 45.5201 210.436 47.0117V49.0254C210.436 50.517 209.243 51.7104 207.751 51.7104H198.354V65.8063H209.765C211.257 65.8063 212.45 66.9996 212.45 68.4913V70.505C212.45 71.9966 211.257 73.1899 209.765 73.1899H193.655C192.164 73.1899 190.97 71.9966 190.97 70.505V25.6067C190.97 24.115 192.164 22.9217 193.655 22.9217ZM214.934 58.5719V57.6023C214.934 56.1107 216.128 54.9174 217.619 54.9174H219.708C221.125 54.9174 222.393 56.1107 222.393 57.6023V58.5719C222.393 62.1518 223.064 63.8672 224.108 64.7622C224.928 65.5826 226.196 65.7318 227.24 65.7318C230.373 65.7318 232.088 64.3893 232.088 60.4364C232.088 56.9311 228.657 54.1716 225.003 51.3374V51.412C220.081 47.5338 214.934 43.5063 214.934 36.1227C214.934 27.695 219.335 22.8472 227.24 22.8472C235.295 22.8472 239.546 27.9933 239.546 37.4652V38.5094C239.546 40.001 238.353 41.1943 236.861 41.1943H234.773C233.282 41.1943 232.088 40.001 232.088 38.5094V37.4652C232.088 32.5428 230.522 30.3053 227.24 30.3053C224.108 30.3053 222.393 32.0207 222.393 35.899C222.393 39.7027 226.047 42.6114 229.702 45.4455H229.627C234.549 49.2491 239.546 53.0528 239.546 60.2873C239.546 68.6404 235.146 73.1154 227.24 73.1154C219.036 73.1154 214.934 68.3421 214.934 58.5719ZM260.981 36.1973C260.981 27.6204 264.561 22.9217 271.646 22.9217C278.806 22.9217 282.386 27.5458 282.386 36.1973V59.8398C282.386 65.4334 280.969 68.6404 278.881 70.6542C276.793 72.6679 274.108 73.1899 271.646 73.1899C269.26 73.1899 266.575 72.6679 264.487 70.6542C262.398 68.6404 260.981 65.4334 260.981 59.8398V36.1973ZM263.293 59.8398C263.293 67.3726 266.053 70.8779 271.646 70.8779C277.091 70.8779 280 67.5963 280 59.8398V36.1973C280 28.5154 277.24 25.2338 271.646 25.2338C265.978 25.2338 263.293 28.7391 263.293 36.1973V59.8398ZM298.172 49.7712L296.904 49.1746C295.412 48.5779 293.026 47.5338 291.012 45.4455C288.924 43.4318 287.208 40.5976 287.208 36.1973C287.208 28.6645 291.012 22.8472 297.948 22.8472C305.108 22.8472 308.763 27.4712 308.763 36.1973C308.763 36.794 308.24 37.3906 307.569 37.3906C306.898 37.3906 306.376 36.794 306.376 36.1973C306.376 28.6645 303.616 25.1592 297.948 25.1592C292.653 25.1592 289.52 29.7087 289.52 36.1973C289.52 39.7772 290.863 42.1639 292.653 43.8047C294.368 45.4455 296.382 46.415 297.874 47.0117L299.067 47.5338C300.335 48.1304 302.796 49.1 304.884 51.0391C306.973 52.9782 308.763 55.8124 308.763 60.2127C308.763 63.8672 307.793 66.9996 306.078 69.3117C304.138 71.8475 301.453 73.1154 297.948 73.1154C290.788 73.1154 287.208 68.4913 287.208 59.8398C287.208 59.0194 287.581 58.6465 288.402 58.6465C288.998 58.6465 289.52 59.1685 289.52 59.8398C289.52 64.6876 290.788 67.4471 292.429 68.9388C294.07 70.505 296.158 70.8033 297.948 70.8033C303.318 70.8033 306.376 66.8505 306.376 60.2127C306.376 56.6328 304.959 54.2461 303.243 52.6799C302.348 51.9341 301.453 51.3374 300.484 50.8899L298.172 49.7712Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 7.3 KiB

6
static/img/work/qubesos-logo.svg

@ -0,0 +1,6 @@
<svg width="315" height="94" viewBox="0 0 315 94" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M39.2408 3.10563C37.6044 3.06794 35.9892 3.48256 34.5723 4.30404L4.45969 21.7234C3.10421 22.5072 1.97845 23.6348 1.19561 24.9929C0.412768 26.351 0.000424807 27.8918 0 29.4602V64.3172C0.0020122 65.8841 0.415109 67.423 1.19787 68.7794C1.98064 70.1358 3.10554 71.262 4.45969 72.045L34.5723 89.478C35.9275 90.2623 37.4648 90.6752 39.0297 90.6752C40.5946 90.6752 42.1319 90.2623 43.4871 89.478L73.6044 72.045C74.9577 71.2614 76.0816 70.1349 76.8636 68.7786C77.6455 67.4222 78.0579 65.8837 78.0595 64.3172V29.4602C78.0595 27.8922 77.6479 26.3518 76.8658 24.9937C76.0838 23.6356 74.959 22.5078 73.6044 21.7234L43.4871 4.30404C42.1942 3.55429 40.734 3.1422 39.2408 3.10563ZM39.1441 22.8078C39.9656 22.8267 40.7693 23.0524 41.4811 23.4639L58.0464 33.0462C58.7916 33.4776 59.4104 34.098 59.8406 34.845C60.2708 35.592 60.4972 36.4394 60.4972 37.302V56.4756C60.4956 57.3366 60.2684 58.182 59.8383 58.9273C59.4082 59.6726 58.7902 60.2915 58.0464 60.7222L41.4811 70.3135C40.7361 70.7444 39.891 70.9712 39.0309 70.9712C38.1707 70.9712 37.3257 70.7444 36.5806 70.3135L20.0148 60.7222C19.271 60.2915 18.6532 59.6725 18.2232 58.9272C17.7932 58.1819 17.5661 57.3365 17.5646 56.4756V37.302C17.5645 36.4395 17.7908 35.5921 18.2209 34.8451C18.651 34.0981 19.2697 33.4776 20.0148 33.0462L36.5806 23.4639C37.359 23.0139 38.2457 22.7869 39.1441 22.8078Z" fill="#60A5FA"/>
<path d="M76.8637 25.0073L59.8339 34.8586C60.2647 35.6051 60.4919 36.452 60.4928 37.3143V56.483C60.4922 57.3448 60.2654 58.1912 59.8354 58.9374C59.4053 59.6836 58.787 60.3033 58.0426 60.7344L41.482 70.3215C40.7389 70.7486 39.8971 70.9732 39.0405 70.9727V90.6753C40.601 90.6757 42.1343 90.2656 43.4871 89.4858L50.1865 85.6082L58.7354 90.5832C62.5591 92.8084 68.7152 92.8084 72.5389 90.5832L76.3616 88.3588C80.1853 86.1337 80.1853 82.5504 76.3616 80.3252L67.8599 75.3776L73.6045 72.0526C74.9578 71.269 76.0818 70.1426 76.8638 68.7862C77.6458 67.4299 78.0582 65.8913 78.0598 64.3248V29.4725C78.0589 27.9047 77.6464 26.3648 76.8637 25.0073Z" fill="#3B82F6"/>
<path d="M1.2041 24.9925L18.2306 34.8487C18.6601 34.1015 19.2782 33.4806 20.0228 33.0486L36.5858 23.4641C37.3307 23.0339 38.1754 22.8077 39.0351 22.8079C39.8948 22.8082 40.7394 23.0351 41.484 23.4658L58.0481 33.0477C58.7887 33.479 59.4037 34.0973 59.8318 34.8409L76.8549 24.99C76.0751 23.6354 74.9543 22.5097 73.6044 21.7254L43.4826 4.29962C42.1289 3.51682 40.5936 3.1045 39.0307 3.104C37.4678 3.10351 35.9323 3.51486 34.5781 4.29681L4.46482 21.7231C3.11045 22.5076 1.9859 23.6355 1.2041 24.9935V24.9925Z" fill="#93C5FD"/>
<path d="M126.281 37.2415V58.4227C126.281 61.9281 125.61 64.8368 124.416 67.2234L127.549 70.9525C129.115 72.817 127.922 75.2782 125.535 75.2782H122.776C122.328 75.2782 121.06 74.7562 120.687 74.3087L119.047 72.2204C117.555 72.8916 115.914 73.1899 114.124 73.1899C105.92 73.1899 101.818 67.82 101.818 58.4227V37.2415C101.818 27.8441 105.92 22.9217 114.124 22.9217C122.254 22.9217 126.281 27.8441 126.281 37.2415ZM109.276 37.2415V58.4227C109.276 63.1214 110.768 65.5826 113.677 65.8063L113.304 65.3588C111.738 63.4197 113.005 60.9585 115.392 60.9585H118.077C118.152 60.9585 118.45 60.9585 118.674 61.0331C118.748 60.2873 118.823 59.3923 118.823 58.4227V37.2415C118.823 32.3936 117.331 30.3053 114.124 30.3053C110.917 30.3053 109.276 32.5428 109.276 37.2415ZM131.236 59.4669V25.5321C131.236 24.0405 132.429 22.8472 133.846 22.8472H135.935C137.426 22.8472 138.62 24.0405 138.62 25.5321V59.4669C138.62 63.4197 139.813 65.7318 143.467 65.7318C147.271 65.7318 148.315 63.0468 148.315 59.4669V25.5321C148.315 24.0405 149.509 22.8472 150.926 22.8472H153.014C154.506 22.8472 155.699 24.0405 155.699 25.5321V59.4669C155.699 67.82 152.119 73.1154 143.467 73.1154C134.518 73.1154 131.236 67.3726 131.236 59.4669ZM172.792 73.1899H165.408C163.916 73.1899 162.723 71.9966 162.723 70.505V25.6067C162.723 24.115 163.916 22.9217 165.408 22.9217H172.792C181.518 22.9217 185.396 27.695 185.396 37.316C185.396 44.2522 182.189 48.0558 182.189 48.0558C184.128 50.4425 185.396 54.2461 185.396 58.7956C185.396 68.4167 181.518 73.1899 172.792 73.1899ZM172.792 30.3053H170.181V44.3267H172.792C176.446 44.3267 177.938 42.313 177.938 37.316C177.938 32.3191 176.446 30.3053 172.792 30.3053ZM172.792 51.7104H170.181V65.8063H172.792C176.446 65.8063 177.938 63.7926 177.938 58.7956C177.938 53.7241 176.446 51.7104 172.792 51.7104ZM193.655 22.9217H209.765C211.257 22.9217 212.45 24.115 212.45 25.6067V27.6204C212.45 29.112 211.257 30.3053 209.765 30.3053H198.354V44.3267H207.751C209.243 44.3267 210.436 45.5201 210.436 47.0117V49.0254C210.436 50.517 209.243 51.7104 207.751 51.7104H198.354V65.8063H209.765C211.257 65.8063 212.45 66.9996 212.45 68.4913V70.505C212.45 71.9966 211.257 73.1899 209.765 73.1899H193.655C192.164 73.1899 190.97 71.9966 190.97 70.505V25.6067C190.97 24.115 192.164 22.9217 193.655 22.9217ZM214.934 58.5719V57.6023C214.934 56.1107 216.128 54.9174 217.619 54.9174H219.708C221.125 54.9174 222.393 56.1107 222.393 57.6023V58.5719C222.393 62.1518 223.064 63.8672 224.108 64.7622C224.928 65.5826 226.196 65.7318 227.24 65.7318C230.373 65.7318 232.088 64.3893 232.088 60.4364C232.088 56.9311 228.657 54.1716 225.003 51.3374V51.412C220.081 47.5338 214.934 43.5063 214.934 36.1227C214.934 27.695 219.335 22.8472 227.24 22.8472C235.295 22.8472 239.546 27.9933 239.546 37.4652V38.5094C239.546 40.001 238.353 41.1943 236.861 41.1943H234.773C233.282 41.1943 232.088 40.001 232.088 38.5094V37.4652C232.088 32.5428 230.522 30.3053 227.24 30.3053C224.108 30.3053 222.393 32.0207 222.393 35.899C222.393 39.7027 226.047 42.6114 229.702 45.4455H229.627C234.549 49.2491 239.546 53.0528 239.546 60.2873C239.546 68.6404 235.146 73.1154 227.24 73.1154C219.036 73.1154 214.934 68.3421 214.934 58.5719ZM260.981 36.1973C260.981 27.6204 264.561 22.9217 271.646 22.9217C278.806 22.9217 282.386 27.5458 282.386 36.1973V59.8398C282.386 65.4334 280.969 68.6404 278.881 70.6542C276.793 72.6679 274.108 73.1899 271.646 73.1899C269.26 73.1899 266.575 72.6679 264.487 70.6542C262.398 68.6404 260.981 65.4334 260.981 59.8398V36.1973ZM263.293 59.8398C263.293 67.3726 266.053 70.8779 271.646 70.8779C277.091 70.8779 280 67.5963 280 59.8398V36.1973C280 28.5154 277.24 25.2338 271.646 25.2338C265.978 25.2338 263.293 28.7391 263.293 36.1973V59.8398ZM298.172 49.7712L296.904 49.1746C295.412 48.5779 293.026 47.5338 291.012 45.4455C288.924 43.4318 287.208 40.5976 287.208 36.1973C287.208 28.6645 291.012 22.8472 297.948 22.8472C305.108 22.8472 308.763 27.4712 308.763 36.1973C308.763 36.794 308.24 37.3906 307.569 37.3906C306.898 37.3906 306.376 36.794 306.376 36.1973C306.376 28.6645 303.616 25.1592 297.948 25.1592C292.653 25.1592 289.52 29.7087 289.52 36.1973C289.52 39.7772 290.863 42.1639 292.653 43.8047C294.368 45.4455 296.382 46.415 297.874 47.0117L299.067 47.5338C300.335 48.1304 302.796 49.1 304.884 51.0391C306.973 52.9782 308.763 55.8124 308.763 60.2127C308.763 63.8672 307.793 66.9996 306.078 69.3117C304.138 71.8475 301.453 73.1154 297.948 73.1154C290.788 73.1154 287.208 68.4913 287.208 59.8398C287.208 59.0194 287.581 58.6465 288.402 58.6465C288.998 58.6465 289.52 59.1685 289.52 59.8398C289.52 64.6876 290.788 67.4471 292.429 68.9388C294.07 70.505 296.158 70.8033 297.948 70.8033C303.318 70.8033 306.376 66.8505 306.376 60.2127C306.376 56.6328 304.959 54.2461 303.243 52.6799C302.348 51.9341 301.453 51.3374 300.484 50.8899L298.172 49.7712Z" fill="#323232"/>
</svg>

After

Width:  |  Height:  |  Size: 7.3 KiB

BIN
static/img/work/qubesos-logo.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

28
static/img/work/qubesos-qubeicons-after.svg

@ -0,0 +1,28 @@
<svg width="420" height="80" viewBox="0 0 420 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<mask id="mask0_5794_1567" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="45" y="16" width="42" height="48">
<path d="M87.0002 49.6787V30.3214C87.0002 28.886 86.2311 27.5606 84.9847 26.8484L67.9846 17.1341C66.7548 16.4314 65.2452 16.4314 64.0155 17.1341L47.0154 26.8484C45.7691 27.5606 45 28.886 45 30.3214V49.6786C45 51.1141 45.7692 52.4395 47.0155 53.1516L64.0157 62.8659C65.2454 63.5686 66.755 63.5686 67.9847 62.8659L84.9848 53.1516C86.2311 52.4395 87.0002 51.1141 87.0002 49.6787Z" fill="#DC2626"/>
</mask>
<g mask="url(#mask0_5794_1567)">
<path d="M87.0002 49.6787V30.3214C87.0002 28.886 86.2311 27.5606 84.9847 26.8484L67.9846 17.1341C66.7548 16.4314 65.2452 16.4314 64.0155 17.1341L47.0154 26.8484C45.7691 27.5606 45 28.886 45 30.3214V49.6786C45 51.1141 45.7692 52.4395 47.0155 53.1516L64.0157 62.8659C65.2454 63.5686 66.755 63.5686 67.9847 62.8659L84.9848 53.1516C86.2311 52.4395 87.0002 51.1141 87.0002 49.6787Z" fill="#EF4444"/>
<path d="M45 49.6787C45 51.1141 45.7692 52.4395 47.0155 53.1516L64.055 62.8885C64.9217 63.3837 66 62.7579 66 61.7597V42.3213C66 40.8859 65.2308 39.5605 63.9845 38.8484L46.945 29.1115C46.0783 28.6163 45 29.2421 45 30.2402V49.6787Z" fill="#991B1B"/>
</g>
<path d="M141 40.8393V31.1607C141 30.4429 140.616 29.7802 139.992 29.4242L131.492 24.567C130.877 24.2157 130.123 24.2157 129.508 24.567L121.008 29.4242C120.385 29.7802 120 30.4429 120 31.1606V40.8393C120 41.557 120.385 42.2197 121.008 42.5758L129.508 47.4329C130.123 47.7842 130.878 47.7842 131.492 47.4329L139.992 42.5758C140.616 42.2197 141 41.557 141 40.8393Z" fill="#EF4444"/>
<path d="M120 40.8393C120 41.557 120.385 42.2197 121.008 42.5758L129.528 47.4442C129.961 47.6918 130.5 47.3789 130.5 46.8798V37.1606C130.5 36.4429 130.115 35.7802 129.492 35.4241L120.972 30.5557C120.539 30.3081 120 30.621 120 31.1201V40.8393Z" fill="#991B1B"/>
<path d="M157 49.8393V40.1607C157 39.4429 156.616 38.7802 155.992 38.4242L147.492 33.567C146.877 33.2157 146.123 33.2157 145.508 33.567L137.008 38.4242C136.385 38.7802 136 39.4429 136 40.1606V49.8393C136 50.557 136.385 51.2197 137.008 51.5758L145.508 56.4329C146.123 56.7842 146.878 56.7842 147.492 56.4329L155.992 51.5758C156.616 51.2197 157 50.557 157 49.8393Z" fill="#FECACA"/>
<path d="M136 49.8393C136 50.557 136.385 51.2197 137.008 51.5758L145.528 56.4442C145.961 56.6918 146.5 56.3789 146.5 55.8798V46.1606C146.5 45.4429 146.115 44.7802 145.492 44.4241L136.972 39.5557C136.539 39.3081 136 39.621 136 40.1201V49.8393Z" fill="#FCA5A5"/>
<mask id="mask1_5794_1567" style="mask-type:alpha" maskUnits="userSpaceOnUse" x="189" y="16" width="42" height="48">
<path d="M231 49.6787V30.3214C231 28.886 230.231 27.5606 228.985 26.8484L211.985 17.1341C210.755 16.4314 209.245 16.4314 208.015 17.1341L191.015 26.8484C189.769 27.5606 189 28.886 189 30.3214V49.6786C189 51.1141 189.769 52.4395 191.015 53.1516L208.016 62.8659C209.245 63.5686 210.755 63.5686 211.985 62.8659L228.985 53.1516C230.231 52.4395 231 51.1141 231 49.6787Z" fill="#DC2626"/>
</mask>
<g mask="url(#mask1_5794_1567)">
<path d="M231 49.6787V30.3214C231 28.886 230.231 27.5606 228.985 26.8484L211.985 17.1341C210.755 16.4314 209.245 16.4314 208.015 17.1341L191.015 26.8484C189.769 27.5606 189 28.886 189 30.3214V49.6786C189 51.1141 189.769 52.4395 191.015 53.1516L208.016 62.8659C209.245 63.5686 210.755 63.5686 211.985 62.8659L228.985 53.1516C230.231 52.4395 231 51.1141 231 49.6787Z" fill="#EF4444"/>
<path d="M189 49.6787C189 51.1141 189.769 52.4395 191.015 53.1516L208.055 62.8885C208.922 63.3837 210 62.7579 210 61.7597V42.3213C210 40.8859 209.231 39.5605 207.985 38.8484L190.945 29.1115C190.078 28.6163 189 29.2421 189 30.2402V49.6787Z" fill="#FECACA"/>
<path d="M201.952 51.4009L197.007 48.5751C196.384 48.219 196 47.5563 196 46.8386L196 41.2053C196 40.6678 196.58 40.3308 197.047 40.5975L201.992 43.4234C202.615 43.7795 203 44.4421 203 45.1598L203 50.7931C203 51.3306 202.419 51.6675 201.952 51.4009Z" fill="#991B1B"/>
</g>
<path d="M302.5 30.3213V49.6785C302.5 50.9345 301.827 52.0942 300.737 52.7174L283.737 62.4316C282.661 63.0465 281.34 63.0465 280.264 62.4316L263.264 52.7174C262.173 52.0942 261.5 50.9345 261.5 49.6785V30.3213C261.5 29.0653 262.173 27.9056 263.264 27.2824L280.264 17.5681C281.34 16.9533 282.66 16.9533 283.736 17.5681L300.737 27.2824C301.827 27.9056 302.5 29.0653 302.5 30.3213Z" stroke="#EF4444"/>
<path d="M296 46.0654V33.9344C296 32.7382 295.359 31.6337 294.32 31.0402L283.654 24.945C282.629 24.3594 281.371 24.3594 280.346 24.945L269.68 31.0402C268.641 31.6337 268 32.7382 268 33.9344V46.0654C268 47.2615 268.641 48.366 269.68 48.9595L280.346 55.0547C281.371 55.6402 282.629 55.6402 283.654 55.0547L294.32 48.9595C295.359 48.366 296 47.2616 296 46.0654Z" fill="#EF4444"/>
<path d="M268 46.0654C268 47.2616 268.641 48.366 269.68 48.9595L280.379 55.0735C281.101 55.4862 282 54.9647 282 54.1329V41.9343C282 40.7381 281.359 39.6336 280.32 39.0401L269.621 32.9261C268.899 32.5135 268 33.0349 268 33.8667V46.0654Z" fill="#991B1B"/>
<path d="M357 40.8393V31.1607C357 30.4429 356.616 29.7802 355.992 29.4242L347.492 24.567C346.877 24.2157 346.123 24.2157 345.508 24.567L337.008 29.4242C336.385 29.7802 336 30.4429 336 31.1606V40.8393C336 41.557 336.385 42.2197 337.008 42.5758L345.508 47.4329C346.123 47.7842 346.878 47.7842 347.492 47.4329L355.992 42.5758C356.616 42.2197 357 41.557 357 40.8393Z" fill="#FECACA"/>
<path d="M336 40.8393C336 41.557 336.385 42.2197 337.008 42.5758L345.528 47.4442C345.961 47.6918 346.5 47.3789 346.5 46.8798V37.1606C346.5 36.4429 346.115 35.7802 345.492 35.4241L336.972 30.5557C336.539 30.3081 336 30.621 336 31.1201V40.8393Z" fill="#FCA5A5"/>
<path d="M373 49.8393V40.1607C373 39.4429 372.616 38.7802 371.992 38.4242L363.492 33.567C362.877 33.2157 362.123 33.2157 361.508 33.567L353.008 38.4242C352.385 38.7802 352 39.4429 352 40.1606V49.8393C352 50.557 352.385 51.2197 353.008 51.5758L361.508 56.4329C362.123 56.7842 362.878 56.7842 363.492 56.4329L371.992 51.5758C372.616 51.2197 373 50.557 373 49.8393Z" fill="#EF4444"/>
<path d="M352 49.8393C352 50.557 352.385 51.2197 353.008 51.5758L361.528 56.4442C361.961 56.6918 362.5 56.3789 362.5 55.8798V46.1606C362.5 45.4429 362.115 44.7802 361.492 44.4241L352.972 39.5557C352.539 39.3081 352 39.621 352 40.1201V49.8393Z" fill="#991B1B"/>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

BIN
static/img/work/qubesos-qubeicons-after.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

125
static/img/work/qubesos-qubeicons-before.svg

@ -0,0 +1,125 @@
<svg width="420" height="80" viewBox="0 0 420 80" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_5794_1367)">
<mask id="mask0_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="47" y="17" width="41" height="46">
<path d="M47.2646 17.0381H87.0937V62.6395H47.2646V17.0381Z" fill="white"/>
</mask>
<g mask="url(#mask0_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M65.8598 17.5841L57.6368 22.3311L49.4148 27.0791C48.7878 27.4401 48.2798 27.9551 47.9278 28.5611C47.5768 29.1661 47.3808 29.8611 47.3758 30.5851L47.3198 39.9351L47.2647 49.2851C47.2598 50.0221 47.4548 50.7311 47.8108 51.3481C48.1668 51.9641 48.6838 52.4871 49.3238 52.8521L57.4488 57.4791L65.5738 62.1051C66.2028 62.4641 66.9038 62.6421 67.6038 62.6401C68.3038 62.6381 69.0028 62.4551 69.6298 62.0931L77.2858 57.5721L84.9428 53.0521C85.5688 52.6891 86.1048 52.0901 86.4848 51.4001C86.8648 50.7101 87.0888 49.9301 87.0938 49.2051L87.0928 39.8551L87.0918 30.5061C87.0958 29.7691 86.9578 28.9181 86.6588 28.1591C86.3598 27.4011 85.8998 26.7361 85.2588 26.3721L77.5878 21.9721L69.9158 17.5721C69.2868 17.2131 68.5858 17.0361 67.8858 17.0381C67.1858 17.0401 66.4868 17.2221 65.8598 17.5841Z" fill="#64120F"/>
</g>
<mask id="mask1_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="45" y="17" width="41" height="46">
<path d="M45 17.001H85.96V62.602H45V17.001Z" fill="white"/>
</mask>
<g mask="url(#mask1_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M63.5951 17.547L55.3721 22.295L47.1501 27.042C46.5231 27.404 46.0151 27.919 45.6641 28.523C45.3121 29.129 45.1161 29.824 45.1121 30.547L45.0561 39.898L45.0001 49.248C44.9961 49.985 45.1901 50.694 45.5461 51.31C45.9021 51.926 46.4191 52.45 47.0591 52.815L55.1841 57.441L63.3101 62.068C63.9391 62.426 64.6391 62.604 65.3391 62.602C66.0391 62.6 66.7391 62.418 67.3661 62.056L75.5881 57.308L83.8111 52.561C84.4381 52.2 84.9451 51.685 85.2971 51.08C85.6491 50.474 85.8451 49.779 85.8491 49.055L85.9051 39.705L85.9602 30.355C85.9651 29.618 85.7701 28.909 85.4141 28.293C85.0581 27.676 84.5411 27.153 83.9011 26.789L75.7761 22.162L67.6511 17.535C67.0221 17.176 66.3221 16.999 65.6211 17.001C64.9221 17.003 64.2221 17.185 63.5951 17.547Z" fill="#D62821"/>
</g>
<mask id="mask2_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="45" y="28" width="21" height="35">
<path d="M45 28.665H65.6329V62.59H45V28.665Z" fill="white"/>
</mask>
<g mask="url(#mask2_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M45.5986 28.674C45.9046 28.694 46.1976 28.746 46.4836 28.833C46.7696 28.92 47.0486 29.042 47.3236 29.198L55.4486 33.825L63.5736 38.452C64.2136 38.817 64.7306 39.34 65.0866 39.956C65.4426 40.572 65.6366 41.282 65.6327 42.019L65.5776 51.369L65.5216 60.719C65.5196 61.051 65.4766 61.376 65.3976 61.691C65.3186 62.004 65.2026 62.307 65.0536 62.59L64.9336 62.58L64.8146 62.57C64.5546 62.536 64.2956 62.479 64.0436 62.395C63.7906 62.311 63.5456 62.202 63.3096 62.068L55.1836 57.441L47.0586 52.815C46.4186 52.449 45.9016 51.926 45.5456 51.31C45.1896 50.694 44.9956 49.985 44.9996 49.247L45.0556 39.898L45.1116 30.547C45.1136 30.186 45.1446 29.866 45.2196 29.562C45.2946 29.257 45.4136 28.967 45.5896 28.665L45.5936 28.669L45.5986 28.674Z" fill="#64120F"/>
</g>
</g>
<g clip-path="url(#clip1_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M129.253 17.4076L123.509 20.7236L117.766 24.0406C117.328 24.2936 116.973 24.6526 116.728 25.0746C116.482 25.4976 116.345 25.9836 116.342 26.4896L116.303 33.0196L116.264 39.5516C116.261 40.0656 116.397 40.5616 116.646 40.9916C116.894 41.4226 117.255 41.7886 117.703 42.0426L123.378 45.2746L129.053 48.5066C129.493 48.7566 129.982 48.8816 130.471 48.8796C130.96 48.8786 131.448 48.7506 131.886 48.4986L137.234 45.3406L142.582 42.1816C143.02 41.9296 143.394 41.5116 143.66 41.0286C143.925 40.5466 144.082 40.0016 144.085 39.4956L144.084 32.9656V26.4336C144.086 25.9196 143.99 25.3246 143.781 24.7956C143.572 24.2656 143.251 23.8016 142.803 23.5466L137.445 20.4726L132.086 17.3996C131.647 17.1486 131.157 17.0246 130.669 17.0266C130.179 17.0276 129.691 17.1546 129.253 17.4076Z" fill="#64120F"/>
<mask id="mask3_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="115" y="17" width="29" height="32">
<path d="M115 17.0002H143.612V48.8532H115V17.0002Z" fill="white"/>
</mask>
<g mask="url(#mask3_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M127.989 17.3812L122.245 20.6972L116.502 24.0142C116.064 24.2672 115.709 24.6262 115.464 25.0482C115.218 25.4712 115.081 25.9572 115.078 26.4632L115.039 32.9932L115 39.5252C114.997 40.0392 115.133 40.5352 115.382 40.9652C115.63 41.3962 115.991 41.7622 116.439 42.0162L122.114 45.2482L127.789 48.4802C128.229 48.7302 128.718 48.8552 129.207 48.8532C129.696 48.8522 130.185 48.7242 130.622 48.4722L136.366 45.1552L142.11 41.8392C142.548 41.5862 142.902 41.2272 143.148 40.8042C143.394 40.3822 143.531 39.8962 143.533 39.3902L143.572 32.8592L143.612 26.3282C143.614 25.8142 143.478 25.3182 143.23 24.8872C142.981 24.4572 142.62 24.0912 142.173 23.8362L136.497 20.6052L130.822 17.3732C130.383 17.1222 129.893 16.9982 129.405 17.0002C128.915 17.0012 128.427 17.1282 127.989 17.3812Z" fill="#D62821"/>
</g>
<mask id="mask4_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="115" y="17" width="29" height="32">
<path d="M115 17.0002H143.612V48.8532H115V17.0002Z" fill="white"/>
</mask>
<g mask="url(#mask4_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M115.419 25.1546C115.632 25.1676 115.837 25.2046 116.037 25.2646C116.237 25.3266 116.431 25.4116 116.623 25.5206L122.299 28.7526L127.974 31.9846C128.421 32.2386 128.783 32.6046 129.031 33.0356C129.28 33.4656 129.416 33.9616 129.413 34.4756L129.374 41.0076L129.335 47.5376C129.334 47.7696 129.304 47.9976 129.249 48.2166C129.193 48.4356 129.112 48.6466 129.008 48.8446L128.925 48.8386L128.841 48.8306C128.659 48.8076 128.479 48.7666 128.303 48.7086C128.127 48.6496 127.955 48.5736 127.79 48.4796L122.114 45.2486L116.439 42.0156C115.992 41.7616 115.63 41.3956 115.382 40.9656C115.133 40.5356 114.998 40.0396 115.001 39.5246L115.04 32.9936L115.078 26.4636C115.08 26.2106 115.102 25.9866 115.154 25.7736C115.207 25.5616 115.289 25.3586 115.412 25.1476L115.416 25.1506L115.419 25.1546Z" fill="#64120F"/>
</g>
<g style="mix-blend-mode:multiply" opacity="0.35">
<mask id="mask5_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="134" y="31" width="29" height="33">
<g style="mix-blend-mode:multiply" opacity="0.35">
<path d="M134.201 31.7766H162.022V63.6295H134.201V31.7766Z" fill="white"/>
</g>
</mask>
<g mask="url(#mask5_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M147.19 32.1576L141.446 35.4736L135.703 38.7906C135.265 39.0436 134.91 39.4026 134.665 39.8246C134.419 40.2476 134.282 40.7336 134.279 41.2396L134.24 47.7696L134.201 54.3016C134.198 54.8156 134.334 55.3116 134.583 55.7416C134.831 56.1726 135.192 56.5386 135.64 56.7926L141.315 60.0246L146.99 63.2566C147.43 63.5066 147.919 63.6316 148.408 63.6296C148.897 63.6286 149.385 63.5006 149.823 63.2486L155.171 60.0906L160.519 56.9316C160.957 56.6796 161.331 56.2616 161.597 55.7786C161.862 55.2966 162.019 54.7516 162.022 54.2456L162.021 47.7156V41.1836C162.023 40.6696 161.927 40.0746 161.718 39.5456C161.509 39.0156 161.188 38.5516 160.74 38.2966L155.382 35.2226L150.023 32.1496C149.584 31.8986 149.094 31.7746 148.606 31.7766C148.116 31.7776 147.628 31.9046 147.19 32.1576Z" fill="#64120F"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M140.182 35.4472L134.439 38.7642C134.001 39.0172 133.646 39.3762 133.401 39.7982C133.155 40.2212 133.018 40.7072 133.015 41.2132L132.976 47.7432L132.937 54.2752C132.934 54.7892 133.07 55.2852 133.319 55.7152C133.567 56.1462 133.928 56.5122 134.376 56.7662L140.051 59.9982L145.726 63.2302C146.166 63.4802 146.655 63.6052 147.144 63.6033C147.633 63.6022 148.122 63.4742 148.559 63.2222L154.303 59.9052L160.047 56.5892C160.485 56.3362 160.839 55.9772 161.085 55.5542C161.331 55.1322 161.468 54.6462 161.47 54.1402L161.509 47.6092L161.549 41.0782C161.551 40.5642 161.415 40.0682 161.167 39.6372C160.918 39.2072 160.557 38.8412 160.11 38.5862L154.434 35.3552L148.759 32.1232C148.32 31.8722 147.83 31.7482 147.342 31.7502C146.852 31.7512 146.364 31.8782 145.926 32.1312L140.182 35.4472Z" fill="#D62821"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M133.356 39.9046C133.569 39.9176 133.774 39.9546 133.974 40.0146C134.174 40.0766 134.368 40.1616 134.56 40.2706L140.236 43.5026L145.911 46.7346C146.358 46.9886 146.72 47.3546 146.968 47.7856C147.217 48.2156 147.353 48.7116 147.35 49.2256L147.311 55.7576L147.272 62.2876C147.271 62.5196 147.241 62.7476 147.186 62.9666C147.13 63.1856 147.049 63.3966 146.945 63.5946L146.862 63.5886L146.778 63.5806C146.596 63.5576 146.416 63.5166 146.24 63.4586C146.064 63.3996 145.892 63.3236 145.727 63.2296L140.051 59.9986L134.376 56.7656C133.929 56.5116 133.567 56.1456 133.319 55.7156C133.07 55.2856 132.935 54.7896 132.938 54.2746L132.977 47.7436L133.015 41.2136C133.017 40.9606 133.039 40.7366 133.091 40.5236C133.144 40.3116 133.226 40.1086 133.349 39.8976L133.353 39.9006L133.356 39.9046Z" fill="#64120F"/>
</g>
</g>
<g filter="url(#filter0_d_5794_1367)">
<path d="M226.898 25.8078C228.713 26.857 229.832 28.7951 229.832 30.8921V49.0239C229.832 51.1448 228.702 53.1026 226.865 54.163L211.22 63.1994C209.372 64.2669 207.713 59.7952 205.864 58.7277L195.483 52.8039C193.557 51.6928 197.794 49.6814 197.794 47.4578L194.476 33.85L190.971 30.7445C190.971 29.1454 187.981 28.4546 189.366 27.6543C189.366 27.6543 190.105 25.497 191.614 24.6264L205.096 16.8418C207.036 15.7194 209.428 15.7194 211.37 16.8418L226.898 25.8078Z" fill="black"/>
</g>
<path d="M226.898 25.8078C228.713 26.857 229.832 28.7951 229.832 30.8921V49.0239C229.832 51.1448 228.702 53.1026 226.865 54.163L211.22 63.1994C209.372 64.2669 207.713 59.7952 205.864 58.7277L195.483 52.8039C193.557 51.6928 197.794 49.6814 197.794 47.4578L194.476 33.85L190.971 30.7445C190.971 29.1454 187.981 28.4546 189.366 27.6543C189.366 27.6543 190.105 25.497 191.614 24.6264L205.096 16.8418C207.036 15.7194 209.428 15.7194 211.37 16.8418L226.898 25.8078Z" fill="#D42C27"/>
<mask id="mask6_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="189" y="25" width="25" height="39">
<path d="M190.366 25.8048C190.026 26.4622 189.034 26.8711 189.032 29.0891V29.5962V48.3685C189.032 49.5534 189.349 50.692 189.92 51.6731C190.45 52.5834 191.199 53.3578 192.12 53.9083L207.499 63.1038C208.825 63.793 209.666 63.9895 210.306 63.9996H210.412C210.984 63.9909 211.4 63.8363 211.881 63.7771C212.789 63.0243 213.032 61.1054 213.032 60.0738V41.4474C213.032 40.2886 212.713 39.1789 212.137 38.2325L211.908 37.9493C211.411 37.1344 210.728 36.4393 209.893 35.9423L194.487 26.7281C193.718 26.2686 192.52 25.5982 191.375 25.5996C191.03 25.5996 190.688 25.6603 190.366 25.8048Z" fill="white"/>
</mask>
<g mask="url(#mask6_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M190.366 25.8048C190.026 26.4622 189.034 26.8711 189.032 29.0891V29.5962V48.3685C189.032 49.5534 189.349 50.692 189.92 51.6731C190.45 52.5834 191.199 53.3578 192.12 53.9083L207.499 63.1038C208.825 63.793 209.666 63.9895 210.306 63.9996H210.412C210.984 63.9909 211.4 63.8363 211.881 63.7771C212.789 63.0243 213.032 61.1054 213.032 60.0738V41.4474C213.032 40.2886 212.713 39.1789 212.137 38.2325L211.908 37.9493C211.411 37.1344 210.728 36.4393 209.893 35.9423L194.487 26.7281C193.718 26.2686 192.52 25.5982 191.375 25.5996C191.03 25.5996 190.688 25.6603 190.366 25.8048Z" fill="url(#paint0_linear_5794_1367)"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M205.552 51.9132C205.09 51.9618 204.764 52.182 203.586 51.651L196.968 48.2345C196.556 48.0201 196.219 47.7188 195.981 47.3642C195.725 46.981 195.583 46.5377 195.583 46.0763L195.595 39.1566L195.485 38.1095C195.486 37.2459 195.931 37.0867 196.085 36.8302C196.71 36.5852 197.484 36.958 197.933 37.1906L204.674 41.4635C205.048 41.657 205.355 41.9277 205.578 42.2452L205.68 42.3558C205.938 42.7237 206.083 43.1565 206.083 43.6083L206.069 50.4699C206.069 50.8722 205.973 51.6186 205.565 51.9132" fill="#641312"/>
<g clip-path="url(#clip2_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M281.253 25.0374L275.509 28.3534L269.766 31.6704C269.328 31.9234 268.973 32.2824 268.728 32.7044C268.482 33.1274 268.345 33.6134 268.342 34.1194L268.303 40.6494L268.264 47.1814C268.261 47.6954 268.397 48.1914 268.646 48.6214C268.894 49.0524 269.255 49.4184 269.703 49.6724L275.378 52.9044L281.053 56.1364C281.493 56.3864 281.982 56.5114 282.471 56.5094C282.96 56.5084 283.448 56.3804 283.886 56.1284L289.234 52.9704L294.582 49.8114C295.02 49.5594 295.394 49.1414 295.66 48.6584C295.925 48.1764 296.082 47.6314 296.085 47.1254L296.084 40.5954V34.0634C296.086 33.5494 295.99 32.9544 295.781 32.4254C295.572 31.8954 295.251 31.4314 294.803 31.1764L289.445 28.1024L284.086 25.0294C283.647 24.7784 283.157 24.6544 282.669 24.6563C282.179 24.6574 281.691 24.7844 281.253 25.0374Z" fill="#64120F"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M274.245 28.327L268.502 31.644C268.064 31.897 267.709 32.256 267.464 32.678C267.218 33.101 267.081 33.587 267.078 34.093L267.039 40.623L267 47.155C266.997 47.669 267.133 48.165 267.382 48.595C267.63 49.026 267.991 49.392 268.439 49.646L274.114 52.878L279.789 56.11C280.229 56.36 280.718 56.485 281.207 56.483C281.696 56.482 282.185 56.354 282.622 56.102L288.366 52.785L294.11 49.469C294.548 49.216 294.902 48.857 295.148 48.434C295.394 48.012 295.531 47.526 295.533 47.02L295.572 40.489L295.612 33.958C295.614 33.444 295.478 32.948 295.23 32.517C294.981 32.087 294.62 31.721 294.173 31.466L288.497 28.235L282.822 25.003C282.383 24.752 281.893 24.628 281.405 24.6299C280.915 24.631 280.427 24.758 279.989 25.011L274.245 28.327Z" fill="#D62821"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M267.419 32.7844C267.632 32.7974 267.837 32.8344 268.037 32.8944C268.237 32.9564 268.431 33.0414 268.623 33.1504L274.299 36.3824L279.974 39.6144C280.421 39.8684 280.783 40.2344 281.031 40.6654C281.28 41.0954 281.416 41.5914 281.413 42.1054L281.374 48.6374L281.335 55.1674C281.334 55.3994 281.304 55.6274 281.249 55.8464C281.193 56.0654 281.112 56.2764 281.008 56.4744L280.925 56.4684L280.841 56.4604C280.659 56.4374 280.479 56.3964 280.303 56.3384C280.127 56.2794 279.955 56.2034 279.79 56.1094L274.114 52.8784L268.439 49.6454C267.992 49.3914 267.63 49.0254 267.382 48.5954C267.133 48.1654 266.998 47.6694 267.001 47.1544L267.04 40.6234L267.078 34.0934C267.08 33.8404 267.102 33.6164 267.154 33.4034C267.207 33.1914 267.289 32.9884 267.412 32.7774L267.416 32.7804L267.419 32.7844Z" fill="#64120F"/>
<path d="M258.2 31L282 16.2L305.8 31V50L282 64L258.2 50V31Z" stroke="#D62821"/>
</g>
<g clip-path="url(#clip3_5794_1367)">
<g opacity="0.347982">
<path fill-rule="evenodd" clip-rule="evenodd" d="M345.253 17.4076L339.509 20.7236L333.766 24.0406C333.328 24.2936 332.973 24.6526 332.728 25.0746C332.482 25.4976 332.345 25.9836 332.342 26.4896L332.303 33.0196L332.264 39.5516C332.261 40.0656 332.397 40.5616 332.646 40.9916C332.894 41.4226 333.255 41.7886 333.703 42.0426L339.378 45.2746L345.053 48.5066C345.493 48.7566 345.982 48.8816 346.471 48.8796C346.96 48.8786 347.448 48.7506 347.886 48.4986L353.234 45.3406L358.582 42.1816C359.02 41.9296 359.394 41.5116 359.66 41.0286C359.925 40.5466 360.082 40.0016 360.085 39.4956L360.084 32.9656V26.4336C360.086 25.9196 359.99 25.3246 359.781 24.7956C359.572 24.2656 359.251 23.8016 358.803 23.5466L353.445 20.4726L348.086 17.3996C347.647 17.1486 347.157 17.0246 346.669 17.0266C346.179 17.0276 345.691 17.1546 345.253 17.4076Z" fill="#64120F"/>
<mask id="mask7_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="331" y="17" width="29" height="32">
<g opacity="0.347982">
<path d="M331 17.0002H359.612V48.8532H331V17.0002Z" fill="white"/>
</g>
</mask>
<g mask="url(#mask7_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M343.989 17.3812L338.245 20.6972L332.502 24.0142C332.064 24.2672 331.709 24.6262 331.464 25.0482C331.218 25.4712 331.081 25.9572 331.078 26.4632L331.039 32.9932L331 39.5252C330.997 40.0392 331.133 40.5352 331.382 40.9652C331.63 41.3962 331.991 41.7622 332.439 42.0162L338.114 45.2482L343.789 48.4802C344.229 48.7302 344.718 48.8552 345.207 48.8532C345.696 48.8522 346.185 48.7242 346.622 48.4722L352.366 45.1552L358.11 41.8392C358.548 41.5862 358.902 41.2272 359.148 40.8042C359.394 40.3822 359.531 39.8962 359.533 39.3902L359.572 32.8592L359.612 26.3282C359.614 25.8142 359.478 25.3182 359.23 24.8872C358.981 24.4572 358.62 24.0912 358.173 23.8362L352.497 20.6052L346.822 17.3732C346.383 17.1222 345.893 16.9982 345.405 17.0002C344.915 17.0012 344.427 17.1282 343.989 17.3812Z" fill="#D62821"/>
</g>
<mask id="mask8_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="331" y="17" width="29" height="32">
<g opacity="0.347982">
<path d="M331 17.0002H359.612V48.8532H331V17.0002Z" fill="white"/>
</g>
</mask>
<g mask="url(#mask8_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M331.419 25.1546C331.632 25.1676 331.837 25.2046 332.037 25.2646C332.237 25.3266 332.431 25.4116 332.623 25.5206L338.299 28.7526L343.974 31.9846C344.421 32.2386 344.783 32.6046 345.031 33.0356C345.28 33.4656 345.416 33.9616 345.413 34.4756L345.374 41.0076L345.335 47.5376C345.334 47.7696 345.304 47.9976 345.249 48.2166C345.193 48.4356 345.112 48.6466 345.008 48.8446L344.925 48.8386L344.841 48.8306C344.659 48.8076 344.479 48.7666 344.303 48.7086C344.127 48.6496 343.955 48.5736 343.79 48.4796L338.114 45.2486L332.439 42.0156C331.992 41.7616 331.63 41.3956 331.382 40.9656C331.133 40.5356 330.998 40.0396 331.001 39.5246L331.04 32.9936L331.078 26.4636C331.08 26.2106 331.102 25.9866 331.154 25.7736C331.207 25.5616 331.289 25.3586 331.412 25.1476L331.416 25.1506L331.419 25.1546Z" fill="#64120F"/>
</g>
</g>
<g style="mix-blend-mode:multiply">
<mask id="mask9_5794_1367" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="350" y="31" width="29" height="33">
<g style="mix-blend-mode:multiply">
<path d="M350.201 31.7766H378.022V63.6295H350.201V31.7766Z" fill="white"/>
</g>
</mask>
<g mask="url(#mask9_5794_1367)">
<path fill-rule="evenodd" clip-rule="evenodd" d="M363.19 32.1576L357.446 35.4736L351.703 38.7906C351.265 39.0436 350.91 39.4026 350.665 39.8246C350.419 40.2476 350.282 40.7336 350.279 41.2396L350.24 47.7696L350.201 54.3016C350.198 54.8156 350.334 55.3116 350.583 55.7416C350.831 56.1726 351.192 56.5386 351.64 56.7926L357.315 60.0246L362.99 63.2566C363.43 63.5066 363.919 63.6316 364.408 63.6296C364.897 63.6286 365.385 63.5006 365.823 63.2486L371.171 60.0906L376.519 56.9316C376.957 56.6796 377.331 56.2616 377.597 55.7786C377.862 55.2966 378.019 54.7516 378.022 54.2456L378.021 47.7156V41.1836C378.023 40.6696 377.927 40.0746 377.718 39.5456C377.509 39.0156 377.188 38.5516 376.74 38.2966L371.382 35.2226L366.023 32.1496C365.584 31.8986 365.094 31.7746 364.606 31.7766C364.116 31.7776 363.628 31.9046 363.19 32.1576Z" fill="#64120F"/>
</g>
<path fill-rule="evenodd" clip-rule="evenodd" d="M356.182 35.4472L350.439 38.7642C350.001 39.0172 349.646 39.3762 349.401 39.7982C349.155 40.2212 349.018 40.7072 349.015 41.2132L348.976 47.7432L348.937 54.2752C348.934 54.7892 349.07 55.2852 349.319 55.7152C349.567 56.1462 349.928 56.5122 350.376 56.7662L356.051 59.9982L361.726 63.2302C362.166 63.4802 362.655 63.6052 363.144 63.6033C363.633 63.6022 364.122 63.4742 364.559 63.2222L370.303 59.9052L376.047 56.5892C376.485 56.3362 376.839 55.9772 377.085 55.5542C377.331 55.1322 377.468 54.6462 377.47 54.1402L377.509 47.6092L377.549 41.0782C377.551 40.5642 377.415 40.0682 377.167 39.6372C376.918 39.2072 376.557 38.8412 376.11 38.5862L370.434 35.3552L364.759 32.1232C364.32 31.8722 363.83 31.7482 363.342 31.7502C362.852 31.7512 362.364 31.8782 361.926 32.1312L356.182 35.4472Z" fill="#D62821"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M349.356 39.9046C349.569 39.9176 349.774 39.9546 349.974 40.0146C350.174 40.0766 350.368 40.1616 350.56 40.2706L356.236 43.5026L361.911 46.7346C362.358 46.9886 362.72 47.3546 362.968 47.7856C363.217 48.2156 363.353 48.7116 363.35 49.2256L363.311 55.7576L363.272 62.2876C363.271 62.5196 363.241 62.7476 363.186 62.9666C363.13 63.1856 363.049 63.3966 362.945 63.5946L362.862 63.5886L362.778 63.5806C362.596 63.5576 362.416 63.5166 362.24 63.4586C362.064 63.3996 361.892 63.3236 361.727 63.2296L356.051 59.9986L350.376 56.7656C349.929 56.5116 349.567 56.1456 349.319 55.7156C349.07 55.2856 348.935 54.7896 348.938 54.2746L348.977 47.7436L349.015 41.2136C349.017 40.9606 349.039 40.7366 349.091 40.5236C349.144 40.3116 349.226 40.1086 349.349 39.8976L349.353 39.9006L349.356 39.9046Z" fill="#64120F"/>
</g>
</g>
<defs>
<filter id="filter0_d_5794_1367" x="189" y="16" width="41.832" height="47.3628" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dx="1"/>
<feColorMatrix type="matrix" values="0 0 0 0 0.392157 0 0 0 0 0.0745098 0 0 0 0 0.0705882 0 0 0 1 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_5794_1367"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect1_dropShadow_5794_1367" result="shape"/>
</filter>
<linearGradient id="paint0_linear_5794_1367" x1="951.919" y1="2619.29" x2="2180.18" y2="1884.84" gradientUnits="userSpaceOnUse">
<stop stop-color="#FBB6AA"/>
<stop offset="1" stop-color="#F6CFC6"/>
</linearGradient>
<clipPath id="clip0_5794_1367">
<rect width="48" height="48" fill="white" transform="translate(42 16)"/>
</clipPath>
<clipPath id="clip1_5794_1367">
<rect width="48" height="48" fill="white" transform="translate(114 16)"/>
</clipPath>
<clipPath id="clip2_5794_1367">
<rect width="48" height="48" fill="white" transform="translate(258 16)"/>
</clipPath>
<clipPath id="clip3_5794_1367">
<rect width="48" height="48" fill="white" transform="translate(330 16)"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

BIN
static/img/work/qubesos-qubeicons-before.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
static/img/work/qubesos-window-after.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
static/img/work/qubesos-window-before.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

7
static/img/work/qubesos.svg

@ -0,0 +1,7 @@
<svg width="800" height="450" viewBox="0 0 800 450" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="800" height="450" fill="#E4F0FB"/>
<path d="M197.346 145.004C194.538 144.939 191.766 145.651 189.334 147.061L137.654 176.956C135.328 178.302 133.395 180.237 132.052 182.568C130.708 184.899 130.001 187.543 130 190.235V250.057C130.003 252.747 130.712 255.388 132.056 257.716C133.399 260.043 135.33 261.976 137.654 263.32L189.334 293.239C191.66 294.585 194.298 295.294 196.984 295.294C199.67 295.294 202.308 294.585 204.634 293.239L256.322 263.32C258.645 261.975 260.574 260.042 261.916 257.714C263.258 255.386 263.966 252.746 263.968 250.057V190.235C263.968 187.544 263.262 184.9 261.92 182.569C260.578 180.238 258.647 178.303 256.322 176.956L204.634 147.061C202.415 145.774 199.909 145.067 197.346 145.004ZM197.18 178.818C198.59 178.85 199.97 179.237 201.191 179.944L229.621 196.389C230.9 197.129 231.962 198.194 232.7 199.476C233.439 200.758 233.827 202.213 233.827 203.693V236.599C233.825 238.077 233.435 239.528 232.697 240.807C231.958 242.086 230.898 243.148 229.621 243.887L201.191 260.348C199.913 261.088 198.462 261.477 196.986 261.477C195.51 261.477 194.06 261.088 192.781 260.348L164.35 243.887C163.074 243.148 162.013 242.086 161.275 240.807C160.537 239.528 160.147 238.077 160.145 236.599V203.693C160.145 202.213 160.533 200.758 161.271 199.476C162.01 198.194 163.071 197.13 164.35 196.389L192.781 179.944C194.117 179.171 195.639 178.782 197.18 178.818Z" fill="#60A5FA"/>
<path d="M261.916 182.592L232.689 199.499C233.429 200.78 233.819 202.234 233.82 203.714V236.612C233.819 238.091 233.43 239.544 232.692 240.824C231.954 242.105 230.893 243.169 229.615 243.908L201.193 260.362C199.918 261.095 198.473 261.48 197.003 261.48V295.294C199.681 295.295 202.313 294.591 204.634 293.252L216.132 286.598L230.804 295.136C237.366 298.955 247.932 298.955 254.494 295.136L261.055 291.318C267.617 287.499 267.617 281.35 261.055 277.531L246.464 269.04L256.323 263.333C258.645 261.988 260.574 260.055 261.916 257.727C263.259 255.399 263.966 252.759 263.969 250.07V190.256C263.968 187.565 263.26 184.922 261.916 182.592Z" fill="#3B82F6"/>
<path d="M132.066 182.567L161.288 199.482C162.025 198.2 163.086 197.134 164.364 196.393L192.79 179.944C194.068 179.205 195.518 178.817 196.993 178.818C198.469 178.818 199.918 179.207 201.196 179.947L229.624 196.391C230.895 197.132 231.951 198.193 232.685 199.469L261.901 182.562C260.563 180.238 258.639 178.306 256.322 176.96L204.626 147.053C202.303 145.709 199.668 145.002 196.986 145.001C194.303 145 191.668 145.706 189.344 147.048L137.663 176.956C135.338 178.302 133.408 180.238 132.066 182.569V182.567Z" fill="#93C5FD"/>
<path d="M346.728 203.304V239.656C346.728 245.672 345.576 250.664 343.528 254.76L348.904 261.16C351.592 264.36 349.544 268.584 345.448 268.584H340.712C339.944 268.584 337.768 267.688 337.128 266.92L334.312 263.336C331.752 264.488 328.936 265 325.864 265C311.784 265 304.744 255.784 304.744 239.656V203.304C304.744 187.176 311.784 178.728 325.864 178.728C339.816 178.728 346.728 187.176 346.728 203.304ZM317.544 203.304V239.656C317.544 247.72 320.104 251.944 325.096 252.328L324.456 251.56C321.768 248.232 323.944 244.008 328.04 244.008H332.648C332.776 244.008 333.288 244.008 333.672 244.136C333.8 242.856 333.928 241.32 333.928 239.656V203.304C333.928 194.984 331.368 191.4 325.864 191.4C320.36 191.4 317.544 195.24 317.544 203.304ZM355.232 241.448V183.208C355.232 180.648 357.28 178.6 359.712 178.6H363.296C365.856 178.6 367.904 180.648 367.904 183.208V241.448C367.904 248.232 369.952 252.2 376.224 252.2C382.752 252.2 384.544 247.592 384.544 241.448V183.208C384.544 180.648 386.592 178.6 389.024 178.6H392.608C395.168 178.6 397.216 180.648 397.216 183.208V241.448C397.216 255.784 391.072 264.872 376.224 264.872C360.864 264.872 355.232 255.016 355.232 241.448ZM426.551 265H413.879C411.319 265 409.271 262.952 409.271 260.392V183.336C409.271 180.776 411.319 178.728 413.879 178.728H426.551C441.527 178.728 448.183 186.92 448.183 203.432C448.183 215.336 442.679 221.864 442.679 221.864C446.007 225.96 448.183 232.488 448.183 240.296C448.183 256.808 441.527 265 426.551 265ZM426.551 191.4H422.071V215.464H426.551C432.823 215.464 435.383 212.008 435.383 203.432C435.383 194.856 432.823 191.4 426.551 191.4ZM426.551 228.136H422.071V252.328H426.551C432.823 252.328 435.383 248.872 435.383 240.296C435.383 231.592 432.823 228.136 426.551 228.136ZM462.358 178.728H490.006C492.566 178.728 494.614 180.776 494.614 183.336V186.792C494.614 189.352 492.566 191.4 490.006 191.4H470.422V215.464H486.55C489.11 215.464 491.158 217.512 491.158 220.072V223.528C491.158 226.088 489.11 228.136 486.55 228.136H470.422V252.328H490.006C492.566 252.328 494.614 254.376 494.614 256.936V260.392C494.614 262.952 492.566 265 490.006 265H462.358C459.798 265 457.75 262.952 457.75 260.392V183.336C457.75 180.776 459.798 178.728 462.358 178.728ZM498.878 239.912V238.248C498.878 235.688 500.926 233.64 503.486 233.64H507.07C509.502 233.64 511.678 235.688 511.678 238.248V239.912C511.678 246.056 512.83 249 514.622 250.536C516.03 251.944 518.206 252.2 519.998 252.2C525.374 252.2 528.318 249.896 528.318 243.112C528.318 237.096 522.43 232.36 516.158 227.496V227.624C507.71 220.968 498.878 214.056 498.878 201.384C498.878 186.92 506.43 178.6 519.998 178.6C533.822 178.6 541.118 187.432 541.118 203.688V205.48C541.118 208.04 539.07 210.088 536.51 210.088H532.926C530.366 210.088 528.318 208.04 528.318 205.48V203.688C528.318 195.24 525.63 191.4 519.998 191.4C514.622 191.4 511.678 194.344 511.678 201C511.678 207.528 517.95 212.52 524.222 217.384H524.094C532.542 223.912 541.118 230.44 541.118 242.856C541.118 257.192 533.566 264.872 519.998 264.872C505.918 264.872 498.878 256.68 498.878 239.912ZM577.905 201.512C577.905 186.792 584.049 178.728 596.209 178.728C608.497 178.728 614.641 186.664 614.641 201.512V242.088C614.641 251.688 612.209 257.192 608.625 260.648C605.041 264.104 600.433 265 596.209 265C592.113 265 587.505 264.104 583.921 260.648C580.337 257.192 577.905 251.688 577.905 242.088V201.512ZM581.873 242.088C581.873 255.016 586.609 261.032 596.209 261.032C605.553 261.032 610.545 255.4 610.545 242.088V201.512C610.545 188.328 605.809 182.696 596.209 182.696C586.481 182.696 581.873 188.712 581.873 201.512V242.088ZM641.733 224.808L639.557 223.784C636.997 222.76 632.901 220.968 629.445 217.384C625.861 213.928 622.917 209.064 622.917 201.512C622.917 188.584 629.445 178.6 641.349 178.6C653.637 178.6 659.909 186.536 659.909 201.512C659.909 202.536 659.013 203.56 657.861 203.56C656.709 203.56 655.813 202.536 655.813 201.512C655.813 188.584 651.077 182.568 641.349 182.568C632.261 182.568 626.885 190.376 626.885 201.512C626.885 207.656 629.189 211.752 632.261 214.568C635.205 217.384 638.661 219.048 641.221 220.072L643.269 220.968C645.445 221.992 649.669 223.656 653.253 226.984C656.837 230.312 659.909 235.176 659.909 242.728C659.909 249 658.245 254.376 655.301 258.344C651.973 262.696 647.365 264.872 641.349 264.872C629.061 264.872 622.917 256.936 622.917 242.088C622.917 240.68 623.557 240.04 624.965 240.04C625.989 240.04 626.885 240.936 626.885 242.088C626.885 250.408 629.061 255.144 631.877 257.704C634.693 260.392 638.277 260.904 641.349 260.904C650.565 260.904 655.813 254.12 655.813 242.728C655.813 236.584 653.381 232.488 650.437 229.8C648.901 228.52 647.365 227.496 645.701 226.728L641.733 224.808Z" fill="#323232"/>
</svg>

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
static/img/work/qubesos.webp

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Loading…
Cancel
Save