supprime les traces de ScrewFast et supprime les fichiers inutile
|
@ -10,7 +10,7 @@ import react from "@astrojs/react";
|
|||
// https://astro.build/config
|
||||
export default defineConfig({
|
||||
// https://docs.astro.build/en/guides/images/#authorizing-remote-images
|
||||
site: "https://screwfast.uk",
|
||||
site: "https://achat-maison-albi.fr",
|
||||
image: {
|
||||
domains: ["images.unsplash.com"],
|
||||
},
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
import { Image } from "astro:assets";
|
||||
import { LightboxImage } from "@components/LightboxImage";
|
||||
import photoBureau from "@images/grand-bureau-tout-equipe.jpg";
|
||||
import type { image } from "framer-motion/m";
|
||||
---
|
||||
|
||||
<section
|
|
@ -1,60 +0,0 @@
|
|||
---
|
||||
import { Image } from "astro:assets";
|
||||
import product5 from "@images/features-image.avif";
|
||||
|
||||
// Define props from Astro
|
||||
const { title, subTitle, benefits } = Astro.props;
|
||||
|
||||
// Define TypeScript interface for props
|
||||
interface Props {
|
||||
title: string;
|
||||
subTitle?: string;
|
||||
benefits?: Array<string>;
|
||||
}
|
||||
|
||||
// Define SVG marker to be used in the component
|
||||
const ListItemMarker: string = `<svg fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="mt-0.5 h-6 w-6 text-orange-400 dark:text-orange-300 flex-none"><path stroke-linecap="round" stroke-linejoin="round" d="M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z"/></svg>`;
|
||||
---
|
||||
|
||||
<section
|
||||
class="mx-auto max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 2xl:max-w-full"
|
||||
>
|
||||
<!-- Grid -->
|
||||
<div class="lg:grid lg:grid-cols-12 lg:items-center lg:gap-16">
|
||||
<div class="lg:col-span-7">
|
||||
<Image class="rounded-xl" src={product5} alt="Mockup of floating boxes" />
|
||||
</div>
|
||||
<div class="mt-5 sm:mt-10 lg:col-span-5 lg:mt-0">
|
||||
<div class="space-y-6 sm:space-y-8">
|
||||
<div class="space-y-2 md:space-y-4">
|
||||
<h2
|
||||
class="text-balance text-3xl font-bold text-neutral-800 dark:text-neutral-200 lg:text-4xl"
|
||||
>
|
||||
{title}
|
||||
</h2>
|
||||
{
|
||||
subTitle && (
|
||||
<p class="text-pretty text-neutral-600 dark:text-neutral-400">
|
||||
{subTitle}
|
||||
</p>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
{
|
||||
benefits && (
|
||||
<ul class="space-y-2 sm:space-y-4">
|
||||
{benefits.map((item) => (
|
||||
<li class="flex space-x-3">
|
||||
<Fragment set:html={ListItemMarker} />
|
||||
<span class="text-pretty text-base font-medium text-neutral-600 dark:text-neutral-400">
|
||||
{item}
|
||||
</span>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
|
@ -1,119 +0,0 @@
|
|||
---
|
||||
// Import the necessary dependencies.
|
||||
import AuthBtn from "@components/ui/buttons/AuthBtn.astro";
|
||||
import ContactIconBlock from "@components/ui/blocks/ContactIconBlock.astro";
|
||||
import TextInput from "@components/ui/forms/input/TextInput.astro";
|
||||
import EmailContactInput from "@components/ui/forms/input/EmailContactInput.astro";
|
||||
import PhoneInput from "@components/ui/forms/input/PhoneInput.astro";
|
||||
import TextAreaInput from "@components/ui/forms/input/TextAreaInput.astro";
|
||||
import Icon from "@components/ui/icons/Icon.astro";
|
||||
|
||||
// Define the variables that will be used in this component
|
||||
const title: string = "Contactez-nous";
|
||||
const subTitle: string =
|
||||
"Vous avez des questions ou souhaitez discuter d'un projet ? Contactez-nous et laissons-nous élaborer la solution parfaite avec nos outils et services.";
|
||||
const formTitle: string = "Remplissez le formulaire ci-dessous";
|
||||
const formSubTitle: string =
|
||||
"Nous vous répondrons dans un délai de 1 à 2 jours ouvrables.";
|
||||
---
|
||||
|
||||
<!-- Contact Us -->
|
||||
<section class="mx-auto max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14">
|
||||
<div class="mx-auto max-w-2xl lg:max-w-5xl">
|
||||
<div class="text-center">
|
||||
<h1
|
||||
class="text-balance text-2xl font-bold tracking-tight text-neutral-800 dark:text-neutral-200 md:text-4xl md:leading-tight"
|
||||
>
|
||||
{title}
|
||||
</h1>
|
||||
<p class="mt-1 text-pretty text-neutral-600 dark:text-neutral-400">
|
||||
{subTitle}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="mt-12 grid items-center gap-6 lg:grid-cols-2 lg:gap-16">
|
||||
<div class="flex flex-col rounded-xl p-4 sm:p-6 lg:p-8">
|
||||
<h2
|
||||
class="mb-8 text-xl font-bold text-neutral-700 dark:text-neutral-300"
|
||||
>
|
||||
{formTitle}
|
||||
</h2>
|
||||
<!-- Form for user input with various input fields.-->
|
||||
<!-- Each field utilizes a different input component for the specific type of input (text, email, phone, and textarea)-->
|
||||
<form>
|
||||
<div class="grid gap-4">
|
||||
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
||||
<TextInput
|
||||
id="hs-firstname-contacts"
|
||||
label="Prénom"
|
||||
name="hs-firstname-contacts"
|
||||
/>
|
||||
<TextInput
|
||||
id="hs-lastname-contacts"
|
||||
label="Nom"
|
||||
name="hs-firstname-contacts"
|
||||
/>
|
||||
</div>
|
||||
<EmailContactInput id="hs-email-contacts" />
|
||||
<PhoneInput id="hs-phone-number" />
|
||||
<TextAreaInput
|
||||
id="hs-about-contacts"
|
||||
label="Détails"
|
||||
name="hs-about-contacts"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 grid">
|
||||
<AuthBtn title="Envoyer un message" />
|
||||
</div>
|
||||
|
||||
<div class="mt-3 text-center">
|
||||
<p class="text-sm text-neutral-600 dark:text-neutral-400">
|
||||
{formSubTitle}
|
||||
</p>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--ContactIconBlocks are used to display different methods of contacting, including visiting office, email, browsing knowledgebase, and FAQ.-->
|
||||
<div class="divide-y divide-neutral-300 dark:divide-neutral-700">
|
||||
<ContactIconBlock
|
||||
heading="Base de connaissances"
|
||||
content="Parcourez tous nos articles de base de connaissances."
|
||||
isLinkVisible={true}
|
||||
linkTitle="Visiter les guides et tutoriels"
|
||||
linkURL="#"
|
||||
isArrowVisible={true}
|
||||
><Icon name="question" />
|
||||
</ContactIconBlock>
|
||||
|
||||
<ContactIconBlock
|
||||
heading="FAQ"
|
||||
content="Explorez notre FAQ pour des réponses rapides et claires aux questions courantes."
|
||||
isLinkVisible={true}
|
||||
linkTitle="Visiter la FAQ"
|
||||
linkURL="#"
|
||||
isArrowVisible={true}
|
||||
><Icon name="chatBubble" />
|
||||
</ContactIconBlock>
|
||||
|
||||
<ContactIconBlock
|
||||
heading="Visitez notre bureau"
|
||||
content="ScrewFast UK"
|
||||
isAddressVisible={true}
|
||||
addressContent="72 Union Terrace, E10 4PE London"
|
||||
><Icon name="mapPin" />
|
||||
</ContactIconBlock>
|
||||
|
||||
<ContactIconBlock
|
||||
heading="Contactez-nous par e-mail"
|
||||
content="Préférez-vous le texte écrit ? Envoyez-nous un e-mail à"
|
||||
isLinkVisible={true}
|
||||
linkTitle="support@screwfast.uk"
|
||||
linkURL="#"
|
||||
><Icon name="envelopeOpen" />
|
||||
</ContactIconBlock>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
|
@ -3,7 +3,6 @@
|
|||
import { Image } from "astro:assets";
|
||||
import PrimaryCTA from "@components/ui/buttons/PrimaryCTA.astro";
|
||||
import SecondaryCTA from "@components/ui/buttons/SecondaryCTA.astro";
|
||||
import ReviewComponent from "@components/ui/blocks/ReviewComponent.astro";
|
||||
import { LightboxImage } from "../../LightboxImage";
|
||||
|
||||
// Define props from Astro
|
||||
|
@ -14,11 +13,6 @@ const {
|
|||
primaryBtnURL,
|
||||
secondaryBtn,
|
||||
secondaryBtnURL,
|
||||
withReview,
|
||||
avatars,
|
||||
starCount,
|
||||
rating,
|
||||
reviews,
|
||||
src,
|
||||
alt
|
||||
} = Astro.props;
|
||||
|
@ -31,11 +25,6 @@ interface Props {
|
|||
primaryBtnURL?: string;
|
||||
secondaryBtn?: string;
|
||||
secondaryBtnURL?: string;
|
||||
withReview?: boolean;
|
||||
avatars?: Array<string>;
|
||||
starCount?: number;
|
||||
rating?: string;
|
||||
reviews?: string;
|
||||
src?: any;
|
||||
alt?: string;
|
||||
}
|
||||
|
@ -75,11 +64,6 @@ interface Props {
|
|||
}
|
||||
</div>
|
||||
|
||||
<!-- Review Section: This section presents avatars, review ratings and the number of reviews -->
|
||||
{withReview ? (
|
||||
<ReviewComponent avatars={avatars} starCount={starCount} rating={rating} reviews={reviews} />
|
||||
) : ""}
|
||||
|
||||
</div>
|
||||
<!-- Hero Image Section -->
|
||||
<div class="flex w-full">
|
||||
|
|
|
@ -1,16 +0,0 @@
|
|||
---
|
||||
// Import the necessary components from their respective component files
|
||||
import LoginModal from "@components/ui/forms/LoginModal.astro";
|
||||
import RegisterModal from "@components/ui/forms/RegisterModal.astro";
|
||||
import RecoverModal from "@components/ui/forms/RecoverModal.astro";
|
||||
import LoginBtn from "@components/ui/buttons/LoginBtn.astro";
|
||||
---
|
||||
|
||||
<!-- Login Button -->
|
||||
<LoginBtn />
|
||||
<!-- Login Modal -->
|
||||
<LoginModal />
|
||||
<!-- Register Modal -->
|
||||
<RegisterModal />
|
||||
<!-- Password Recovery Modal -->
|
||||
<RecoverModal />
|
|
@ -1,220 +0,0 @@
|
|||
---
|
||||
//Import relevant dependencies
|
||||
import ThemeIcon from "@components/ThemeIcon.astro";
|
||||
import NavLink from "@components/ui/links/NavLink.astro";
|
||||
import MegaMenuLink from "@components/ui/links/MegaMenuLink.astro";
|
||||
import Authentication from "../misc/Authentication.astro";
|
||||
import strings from "@utils/navigation.ts";
|
||||
import BrandLogo from "@components/BrandLogo.astro";
|
||||
import LanguagePicker from "@components/ui/LanguagePicker.astro";
|
||||
|
||||
const homeUrl = "/";
|
||||
---
|
||||
|
||||
<!-- Main header component -->
|
||||
<header
|
||||
class="sticky inset-x-0 top-4 z-50 flex w-full flex-wrap text-sm md:flex-nowrap md:justify-start"
|
||||
>
|
||||
<!-- Navigation container -->
|
||||
<nav
|
||||
class="relative mx-2 w-full rounded-[36px] border border-yellow-100/40 bg-yellow-50/60 px-4 py-3 backdrop-blur-md dark:border-neutral-700/40 dark:bg-neutral-800/80 dark:backdrop-blur-md md:flex md:items-center md:justify-between md:px-6 md:py-0 lg:px-8 xl:mx-auto"
|
||||
aria-label="Global"
|
||||
>
|
||||
<div class="flex items-center justify-between">
|
||||
<!-- Brand logo -->
|
||||
<a
|
||||
class="flex-none rounded-lg text-xl font-bold outline-none ring-zinc-500 focus-visible:ring dark:ring-zinc-200 dark:focus:outline-none"
|
||||
href={homeUrl}
|
||||
aria-label="Brand"
|
||||
>
|
||||
<BrandLogo class="h-auto w-24" />
|
||||
</a>
|
||||
<!-- Collapse toggle for smaller screens -->
|
||||
<div class="ml-auto mr-5 md:hidden">
|
||||
<button
|
||||
type="button"
|
||||
class="hs-collapse-toggle flex h-8 w-8 items-center justify-center rounded-full text-sm font-bold text-neutral-600 transition duration-300 hover:bg-neutral-200 disabled:pointer-events-none disabled:opacity-50 dark:text-neutral-400 dark:hover:bg-neutral-700 dark:focus:outline-none"
|
||||
data-hs-collapse="#navbar-collapse-with-animation"
|
||||
aria-controls="navbar-collapse-with-animation"
|
||||
aria-label="Toggle navigation"
|
||||
>
|
||||
<svg
|
||||
class="h-[1.25rem] w-[1.25rem] flex-shrink-0 hs-collapse-open:hidden"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<line x1="3" x2="21" y1="6" y2="6"></line>
|
||||
<line x1="3" x2="21" y1="12" y2="12"></line>
|
||||
<line x1="3" x2="21" y1="18" y2="18"></line>
|
||||
</svg>
|
||||
<svg
|
||||
class="hidden h-[1.25rem] w-[1.25rem] flex-shrink-0 hs-collapse-open:block"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
>
|
||||
<path d="M18 6 6 18"></path>
|
||||
<path d="m6 6 12 12"></path>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<!-- ThemeIcon component specifically for smaller screens -->
|
||||
<span class="inline-block md:hidden">
|
||||
<ThemeIcon />
|
||||
</span>
|
||||
</div>
|
||||
<!-- Contains navigation links -->
|
||||
<div
|
||||
id="navbar-collapse-with-animation"
|
||||
class="hs-collapse hidden grow basis-full overflow-hidden transition-all duration-300 md:block"
|
||||
>
|
||||
<!-- Navigation links container -->
|
||||
<div
|
||||
class="mt-5 flex flex-col gap-x-0 gap-y-4 md:mt-0 md:flex-row md:items-center md:justify-end md:gap-x-4 md:gap-y-0 md:ps-7 lg:gap-x-7"
|
||||
>
|
||||
<!-- Navigation links and Authentication component -->
|
||||
{
|
||||
strings.navBarLinks.map((link) => {
|
||||
if (link.name === "Services") {
|
||||
return <MegaMenuLink />;
|
||||
} else {
|
||||
return <NavLink url={link.url} name={link.name} />;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
<Authentication />
|
||||
<LanguagePicker />
|
||||
<!-- ThemeIcon component specifically for larger screens -->
|
||||
<span class="hidden md:inline-block">
|
||||
<ThemeIcon />
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
</header>
|
||||
<!-- Theme Appearance script to manage light/dark modes -->
|
||||
<script is:inline>
|
||||
const HSThemeAppearance = {
|
||||
init() {
|
||||
const defaultTheme = "default";
|
||||
let theme = localStorage.getItem("hs_theme") || defaultTheme;
|
||||
|
||||
if (document.querySelector("html").classList.contains("dark")) return;
|
||||
this.setAppearance(theme);
|
||||
},
|
||||
_resetStylesOnLoad() {
|
||||
const $resetStyles = document.createElement("style");
|
||||
$resetStyles.innerText = `*{transition: unset !important;}`;
|
||||
$resetStyles.setAttribute("data-hs-appearance-onload-styles", "");
|
||||
document.head.appendChild($resetStyles);
|
||||
return $resetStyles;
|
||||
},
|
||||
setAppearance(theme, saveInStore = true, dispatchEvent = true) {
|
||||
const $resetStylesEl = this._resetStylesOnLoad();
|
||||
|
||||
if (saveInStore) {
|
||||
localStorage.setItem("hs_theme", theme);
|
||||
}
|
||||
|
||||
if (theme === "auto") {
|
||||
theme = window.matchMedia("(prefers-color-scheme: dark)").matches
|
||||
? "dark"
|
||||
: "default";
|
||||
}
|
||||
|
||||
document.querySelector("html").classList.remove("dark");
|
||||
document.querySelector("html").classList.remove("default");
|
||||
document.querySelector("html").classList.remove("auto");
|
||||
|
||||
document
|
||||
.querySelector("html")
|
||||
.classList.add(this.getOriginalAppearance());
|
||||
|
||||
setTimeout(() => {
|
||||
$resetStylesEl.remove();
|
||||
});
|
||||
|
||||
if (dispatchEvent) {
|
||||
window.dispatchEvent(
|
||||
new CustomEvent("on-hs-appearance-change", { detail: theme })
|
||||
);
|
||||
}
|
||||
},
|
||||
getAppearance() {
|
||||
let theme = this.getOriginalAppearance();
|
||||
if (theme === "auto") {
|
||||
theme = window.matchMedia("(prefers-color-scheme: dark)").matches
|
||||
? "dark"
|
||||
: "default";
|
||||
}
|
||||
return theme;
|
||||
},
|
||||
getOriginalAppearance() {
|
||||
const defaultTheme = "default";
|
||||
return localStorage.getItem("hs_theme") || defaultTheme;
|
||||
},
|
||||
};
|
||||
HSThemeAppearance.init();
|
||||
|
||||
window
|
||||
.matchMedia("(prefers-color-scheme: dark)")
|
||||
.addEventListener("change", () => {
|
||||
if (HSThemeAppearance.getOriginalAppearance() === "auto") {
|
||||
HSThemeAppearance.setAppearance("auto", false);
|
||||
}
|
||||
});
|
||||
|
||||
window.addEventListener("load", () => {
|
||||
const $clickableThemes = document.querySelectorAll(
|
||||
"[data-hs-theme-click-value]"
|
||||
);
|
||||
const $switchableThemes = document.querySelectorAll(
|
||||
"[data-hs-theme-switch]"
|
||||
);
|
||||
|
||||
$clickableThemes.forEach(($item) => {
|
||||
$item.addEventListener("click", () =>
|
||||
HSThemeAppearance.setAppearance(
|
||||
$item.getAttribute("data-hs-theme-click-value"),
|
||||
true,
|
||||
$item
|
||||
)
|
||||
);
|
||||
});
|
||||
|
||||
$switchableThemes.forEach(($item) => {
|
||||
$item.addEventListener("change", (e) => {
|
||||
HSThemeAppearance.setAppearance(e.target.checked ? "dark" : "default");
|
||||
});
|
||||
|
||||
$item.checked = HSThemeAppearance.getAppearance() === "dark";
|
||||
});
|
||||
|
||||
window.addEventListener("on-hs-appearance-change", (e) => {
|
||||
$switchableThemes.forEach(($item) => {
|
||||
$item.checked = e.detail === "dark";
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!--Import the necessary Collapse and Overlay plugins-->
|
||||
<!--https://preline.co/plugins/html/collapse.html-->
|
||||
<!--https://preline.co/plugins/html/overlay.html-->
|
||||
<!--https://preline.co/plugins/html/dropdown.html-->
|
||||
<script>
|
||||
import "@preline/collapse/index.js";
|
||||
import "@preline/overlay/index.js";
|
||||
import "@preline/dropdown/index.js";
|
||||
</script>
|
|
@ -1,72 +0,0 @@
|
|||
---
|
||||
// Import AvatarTestimonialSection component for use in this module
|
||||
import AvatarTestimonialSection from "../../ui/avatars/AvatarTestimonialSection.astro";
|
||||
|
||||
// Define props from Astro
|
||||
const { title, testimonials } = Astro.props;
|
||||
|
||||
// Define TypeScript interface for Testimonial
|
||||
interface Testimonial {
|
||||
content: string;
|
||||
author: string;
|
||||
role: string;
|
||||
avatarSrc: string;
|
||||
avatarAlt: string;
|
||||
}
|
||||
|
||||
// Define TypeScript interface for props
|
||||
interface Props {
|
||||
title: string;
|
||||
testimonials: Testimonial[];
|
||||
}
|
||||
---
|
||||
<!-- Main div that wraps the testimonials section -->
|
||||
<section
|
||||
class="mx-auto max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14 2xl:max-w-full"
|
||||
id="testimonials"
|
||||
>
|
||||
<!-- Title of the testimonials section -->
|
||||
<div class="mb-6 w-3/4 max-w-2xl sm:mb-10 md:mb-16 lg:w-1/2">
|
||||
<h2
|
||||
class="text-balance text-2xl font-bold text-neutral-800 dark:text-neutral-200 sm:text-3xl lg:text-4xl"
|
||||
>
|
||||
{title}
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-6 sm:grid-cols-2 lg:grid-cols-3">
|
||||
<!-- Looping through each testimonial data and rendering it -->
|
||||
{
|
||||
testimonials.map((testimonial) => (
|
||||
<div class="flex h-auto">
|
||||
<div class="flex flex-col rounded-xl bg-neutral-50 dark:bg-neutral-700">
|
||||
<div class="flex-auto p-4 md:p-6">
|
||||
<!-- Testimonial content -->
|
||||
<p class="text-pretty text-base italic text-neutral-600 dark:text-neutral-300 md:text-lg">
|
||||
{testimonial.content}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="rounded-b-xl bg-neutral-300/30 p-4 dark:bg-neutral-900/30 md:px-7">
|
||||
<div class="flex items-center">
|
||||
<AvatarTestimonialSection
|
||||
src={testimonial.avatarSrc}
|
||||
alt={testimonial.avatarAlt}
|
||||
/>
|
||||
|
||||
<div class="ms-3 grow">
|
||||
<p class="text-sm font-bold text-neutral-800 dark:text-neutral-200 sm:text-base">
|
||||
{testimonial.author}
|
||||
</p>
|
||||
<p class="text-xs text-neutral-600 dark:text-neutral-400">
|
||||
{testimonial.role}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</section>
|
|
@ -1,98 +0,0 @@
|
|||
---
|
||||
import { languages } from "@utils//ui";
|
||||
import Icon from "./icons/Icon.astro";
|
||||
---
|
||||
|
||||
<div class="hs-dropdown relative inline-flex">
|
||||
<button
|
||||
id="hs-dropdown-default"
|
||||
type="button"
|
||||
aria-label="Change language"
|
||||
class="hs-dropdown-toggle inline-flex items-center gap-x-2 rounded-lg px-1.5 py-1.5 text-sm font-medium text-neutral-600 outline-none ring-zinc-500 transition duration-300 hover:bg-neutral-200 hover:text-orange-400 dark:border-neutral-700 dark:text-neutral-400 dark:ring-zinc-200 dark:hover:bg-neutral-700 dark:hover:text-orange-300 dark:focus:outline-none"
|
||||
>
|
||||
<Icon name="earth" />
|
||||
<svg
|
||||
class="size-4 hs-dropdown-open:rotate-180"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"><path d="m6 9 6 6 6-6"></path></svg
|
||||
>
|
||||
</button>
|
||||
|
||||
<div
|
||||
class="hs-dropdown-menu duration !left-[20%] !top-[98%] mt-2 hidden !transform-none rounded-lg bg-neutral-50 p-2 opacity-0 shadow-md transition-[opacity,margin] before:absolute before:-top-4 before:start-0 before:h-4 before:w-full after:absolute after:-bottom-4 after:start-0 after:h-4 after:w-full hs-dropdown-open:opacity-100 dark:divide-neutral-700 dark:border dark:border-neutral-700 dark:bg-neutral-800 md:!left-[90%] md:!top-[80%]"
|
||||
aria-labelledby="hs-dropdown-hover-event"
|
||||
>
|
||||
{
|
||||
// Map through the list of languages, creating a link for each language
|
||||
Object.entries(languages).map(([lang, label]) => (
|
||||
<a
|
||||
class="flex items-center gap-x-3.5 rounded-lg px-3 py-2 text-sm text-neutral-800 hover:bg-neutral-100 focus:bg-neutral-100 focus:outline-none dark:text-neutral-400 dark:hover:bg-neutral-700 dark:hover:text-neutral-300 dark:focus:bg-neutral-700"
|
||||
href={`/${lang === "en" ? "" : lang}`}
|
||||
>
|
||||
{label}
|
||||
</a>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--Import the necessary Dropdown plugin-->
|
||||
<!--https://preline.co/plugins/html/dropdown.html-->
|
||||
<script>
|
||||
import "@preline/dropdown/index.js";
|
||||
</script>
|
||||
|
||||
<script>
|
||||
// Type alias for supported languages
|
||||
type TLanguage = "en" | "fr";
|
||||
// array of supported languages
|
||||
const languages: TLanguage[] = ["en", "fr"];
|
||||
|
||||
document.addEventListener("DOMContentLoaded", function () {
|
||||
const languageLinks = document.querySelectorAll(".hs-dropdown-menu a");
|
||||
languageLinks.forEach((element) => {
|
||||
const link = element as HTMLAnchorElement;
|
||||
const lang = link
|
||||
.getAttribute("href")
|
||||
?.replace("/", "")
|
||||
.replace("/", "") as TLanguage;
|
||||
|
||||
link.addEventListener("click", function (event) {
|
||||
event.preventDefault();
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
const pathParts = url.pathname
|
||||
.split("/")
|
||||
.filter((part) => part && !languages.includes(part as TLanguage));
|
||||
|
||||
// Disable the selection of the same language
|
||||
if (lang === url.pathname.split("/")[1]) return;
|
||||
|
||||
// Determine if the current URL already has a language prefix
|
||||
const currentLang = languages.includes(pathParts[0] as TLanguage) ? pathParts[0] : "en";
|
||||
|
||||
// Remove current language prefix from pathParts
|
||||
if (languages.includes(pathParts[0] as TLanguage)) {
|
||||
pathParts.shift();
|
||||
}
|
||||
|
||||
// Determine if we are switching to a different language
|
||||
if (lang !== currentLang) {
|
||||
if (lang !== "en") {
|
||||
// Add the new language prefix for non-English
|
||||
pathParts.unshift(lang);
|
||||
}
|
||||
}
|
||||
|
||||
url.pathname = pathParts.join("/");
|
||||
window.location.href = url.toString();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -1,18 +0,0 @@
|
|||
---
|
||||
import { Image } from "astro:assets";
|
||||
|
||||
const { src, alt } = Astro.props;
|
||||
|
||||
interface Props {
|
||||
src: string;
|
||||
alt: string;
|
||||
}
|
||||
---
|
||||
|
||||
<Image
|
||||
class="inline-block h-8 w-8 rounded-full ring-2 ring-neutral-50 dark:ring-zinc-800"
|
||||
src={src}
|
||||
alt={alt}
|
||||
inferSize
|
||||
loading={"eager"}
|
||||
/>
|
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
const { src, alt } = Astro.props;
|
||||
|
||||
interface Props {
|
||||
src: string;
|
||||
alt: string;
|
||||
}
|
||||
---
|
||||
|
||||
<div class="flex-shrink-0">
|
||||
<img
|
||||
class="size-8 rounded-full sm:h-[2.875rem] sm:w-[2.875rem]"
|
||||
src={src}
|
||||
alt={alt}
|
||||
loading="lazy"
|
||||
/>
|
||||
</div>
|
|
@ -1,84 +0,0 @@
|
|||
---
|
||||
const { title, btnId, btnTitle, url } = Astro.props;
|
||||
|
||||
interface Props {
|
||||
title?: string;
|
||||
btnId: string;
|
||||
btnTitle: string;
|
||||
url: string;
|
||||
}
|
||||
---
|
||||
|
||||
<astro-banner btnId={btnId}>
|
||||
<div
|
||||
class="fixed bottom-0 start-1/2 z-50 mx-auto w-full -translate-x-1/2 transform p-6 sm:max-w-4xl"
|
||||
role="region"
|
||||
aria-label="Informational Banner"
|
||||
>
|
||||
<div
|
||||
class="rounded-xl bg-neutral-800 bg-[url('/banner-pattern.svg')] bg-cover bg-center bg-no-repeat p-4 text-center shadow-sm dark:bg-neutral-200"
|
||||
>
|
||||
<div class="flex items-center justify-center">
|
||||
<div class="ml-auto">
|
||||
{title &&
|
||||
<p
|
||||
class="me-2 inline-block font-medium text-neutral-50 dark:text-neutral-700"
|
||||
>
|
||||
{title}
|
||||
</p>
|
||||
}
|
||||
<a
|
||||
class="group inline-flex items-center gap-x-2 rounded-full border-2 border-neutral-50 backdrop-brightness-75 sm:backdrop-brightness-100 px-3 py-2 text-sm font-semibold text-neutral-50 transition duration-300 hover:border-neutral-100/70 hover:text-neutral-50/70 disabled:pointer-events-none disabled:opacity-50 dark:backdrop-brightness-100 dark:border-neutral-700 dark:text-neutral-700 dark:hover:border-neutral-700/70 dark:hover:text-neutral-800/70 dark:focus:outline-none"
|
||||
href={url}
|
||||
target="_blank"
|
||||
>
|
||||
{btnTitle}
|
||||
<svg
|
||||
class="size-4 flex-shrink-0 transition duration-300 group-hover:translate-x-1"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"><path d="m9 18 6-6-6-6"></path></svg
|
||||
>
|
||||
</a>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
class="ml-auto inline-flex items-center gap-x-2 rounded-full border border-transparent bg-gray-100 p-2 text-sm font-semibold text-gray-800 hover:bg-gray-200 disabled:pointer-events-none disabled:opacity-50 dark:bg-neutral-700 dark:text-neutral-50 dark:hover:bg-neutral-700/80 dark:hover:text-neutral-50 dark:focus:outline-none"
|
||||
id={btnId}
|
||||
>
|
||||
<span class="sr-only">Dismiss</span>
|
||||
<svg
|
||||
class="size-5 flex-shrink-0"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
><path d="M18 6 6 18"></path><path d="m6 6 12 12"></path></svg
|
||||
>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</astro-banner>
|
||||
<script>
|
||||
class AstroBanner extends HTMLElement {
|
||||
connectedCallback() {
|
||||
const btnId = this.getAttribute("btnId");
|
||||
const button = this.querySelector(`#${btnId}`);
|
||||
if (button != null) {
|
||||
button.addEventListener("click", () => this.remove());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
customElements.define("astro-banner", AstroBanner);
|
||||
</script>
|
|
@ -1,61 +0,0 @@
|
|||
---
|
||||
import Avatar from "@components/ui/avatars/Avatar.astro";
|
||||
import FullStar from "@components/ui/stars/FullStar.astro";
|
||||
import HalfStar from "@components/ui/stars/HalfStar.astro";
|
||||
|
||||
const { avatars, starCount = 0, rating, reviews } = Astro.props;
|
||||
|
||||
interface Props {
|
||||
avatars?: Array<string>;
|
||||
starCount?: number;
|
||||
rating?: string;
|
||||
reviews?: string;
|
||||
}
|
||||
---
|
||||
|
||||
<div class="mt-6 lg:mt-10">
|
||||
<div class="py-5">
|
||||
<div class="text-center sm:flex sm:items-center sm:text-start">
|
||||
<div class="flex-shrink-0 pb-5 sm:flex sm:pb-0 sm:pe-5">
|
||||
<!-- Avatar Group -->
|
||||
<div class="flex justify-center -space-x-3">
|
||||
{avatars?.map((src) => <Avatar src={src} alt="Avatar Description" />)}
|
||||
<span
|
||||
class="inline-flex h-8 w-8 items-center justify-center rounded-full bg-zinc-800 ring-2 ring-white dark:bg-zinc-900 dark:ring-zinc-800"
|
||||
>
|
||||
<span class="text-xs font-medium uppercase leading-none text-white"
|
||||
>7k+</span
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="mx-auto h-px w-32 border-t border-neutral-400 dark:border-neutral-500 sm:mx-0 sm:h-8 sm:w-auto sm:border-s sm:border-t-0"
|
||||
>
|
||||
</div>
|
||||
<!-- Review Ratings -->
|
||||
<div class="flex flex-col items-center sm:items-start">
|
||||
<div class="flex items-baseline space-x-1 pt-5 sm:ps-5 sm:pt-0">
|
||||
<div class="flex space-x-1">
|
||||
<!-- Your star ratings -->
|
||||
{
|
||||
Array(starCount)
|
||||
.fill(0)
|
||||
.map((_, i) => <FullStar key={i} />)
|
||||
}
|
||||
<!-- Adding additional half-star -->
|
||||
<HalfStar />
|
||||
</div>
|
||||
<p class="text-neutral-800 dark:text-neutral-200">
|
||||
<Fragment set:html={rating} />
|
||||
</p>
|
||||
</div>
|
||||
<div class="text-sm text-neutral-800 dark:text-neutral-200 sm:ps-5">
|
||||
<p>
|
||||
<Fragment set:html={reviews} />
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,57 +0,0 @@
|
|||
---
|
||||
// Import necessary modules and utilities
|
||||
import { Image } from "astro:assets";
|
||||
import Icon from "@components/ui/icons/Icon.astro";
|
||||
import type { CollectionEntry } from "astro:content";
|
||||
|
||||
const {
|
||||
insightEntry,
|
||||
insightLocale,
|
||||
label = "Lire plus",
|
||||
} = Astro.props;
|
||||
|
||||
interface Props {
|
||||
insightEntry: CollectionEntry<"insights">;
|
||||
insightLocale?: string;
|
||||
label?: string;
|
||||
}
|
||||
---
|
||||
|
||||
<!-- The anchor tag is the root container for the "Insight" card. It links to the insight detail page. -->
|
||||
<a
|
||||
class="group rounded-xl outline-none ring-zinc-500 transition duration-300 focus-visible:ring dark:ring-zinc-200 dark:focus:outline-none"
|
||||
href={insightLocale && insightLocale !== "en"
|
||||
? `/${insightLocale}/insights/${insightEntry.id.replace(/^fr\//, "")}/`
|
||||
: `/insights/${insightEntry.id.replace(/^en\//, "")}/`}
|
||||
>
|
||||
<!-- This is the container for the insight's cover image. -->
|
||||
<div class="relative overflow-hidden rounded-xl pt-[50%] sm:pt-[70%]">
|
||||
<Image
|
||||
class="absolute start-0 top-0 size-full rounded-xl object-cover transition duration-500 ease-in-out group-hover:scale-105"
|
||||
src={insightEntry.data.cardImage}
|
||||
alt={insightEntry.data.cardImageAlt}
|
||||
draggable={"false"}
|
||||
format={"avif"}
|
||||
/>
|
||||
</div>
|
||||
<!-- This is the container for the insight's title and description. -->
|
||||
<div class="mt-7">
|
||||
<!-- The title of the insight -->
|
||||
<h3
|
||||
class="text-xl font-bold text-neutral-800 group-hover:text-neutral-600 dark:text-neutral-200 dark:group-hover:text-neutral-400"
|
||||
>
|
||||
{insightEntry.data.title}
|
||||
</h3>
|
||||
<!-- The description of the insight -->
|
||||
<p class="mt-3 text-neutral-600 dark:text-neutral-400">
|
||||
{insightEntry.data.description}
|
||||
</p>
|
||||
<!-- The "Read More" hyperlink going to the full insight. With an arrow icon -->
|
||||
<p
|
||||
class="mt-5 inline-flex items-center gap-x-1 font-medium text-orange-400 decoration-2 group-hover:underline dark:text-orange-300"
|
||||
>
|
||||
{label}
|
||||
<Icon name="arrowRightStatic" />
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
|
@ -1,45 +0,0 @@
|
|||
---
|
||||
// Import necessary modules and utilities
|
||||
import { Image } from "astro:assets";
|
||||
import Icon from "@components/ui/icons/Icon.astro";
|
||||
import type { CollectionEntry } from "astro:content";
|
||||
|
||||
const { product, productLocale = "" } = Astro.props;
|
||||
|
||||
interface Props {
|
||||
product: CollectionEntry<"products">;
|
||||
productLocale?: string;
|
||||
}
|
||||
|
||||
// Define classes to be used with the Image component
|
||||
const imageClass =
|
||||
"absolute inset-0 h-full w-full object-cover object-center transition duration-[600ms] ease-[cubic-bezier(0.45,0,0.55,1)] group-hover:scale-110";
|
||||
---
|
||||
|
||||
<!-- A clickable card that leads to the details of the product-->
|
||||
<a
|
||||
href={productLocale && productLocale !== "en"
|
||||
? `/${productLocale}/products/${product.id.replace(/^fr\//, "")}/`
|
||||
: `/products/${product.id.replace(/^en\//, "")}/`}
|
||||
data-astro-prefetch
|
||||
class="group relative flex h-48 items-end overflow-hidden rounded-xl shadow-lg outline-none ring-zinc-500 focus-visible:ring dark:ring-zinc-200 dark:focus:outline-none md:h-80"
|
||||
>
|
||||
<!-- The product's main image -->
|
||||
<Image
|
||||
src={product.data.main.imgCard}
|
||||
alt={product.data.main.imgAlt}
|
||||
draggable={"false"}
|
||||
class={imageClass}
|
||||
format={"avif"}
|
||||
/>
|
||||
<!-- An overlay gradient that sits on top of the product image-->
|
||||
<div
|
||||
class="pointer-events-none absolute inset-0 bg-gradient-to-t from-neutral-800 via-transparent to-transparent opacity-50"
|
||||
>
|
||||
</div>
|
||||
<!-- The product's subtitle and the anchor SVG icon-->
|
||||
<span
|
||||
class="relative mb-3 ml-4 inline-block text-sm font-bold text-neutral-50 transition duration-[600ms] ease-[cubic-bezier(0.45,0,0.55,1)] group-hover:scale-110 md:ml-5 md:text-lg"
|
||||
>{product.data.description} <Icon name="openInNew" />
|
||||
</span>
|
||||
</a>
|
|
@ -1,45 +0,0 @@
|
|||
---
|
||||
// Import necessary modules and utilities
|
||||
import { Image } from "astro:assets";
|
||||
import Icon from "@components/ui/icons/Icon.astro";
|
||||
import type { CollectionEntry } from "astro:content";
|
||||
|
||||
const { product, productLocale = "" } = Astro.props;
|
||||
|
||||
interface Props {
|
||||
product: CollectionEntry<"products">;
|
||||
productLocale?: string;
|
||||
}
|
||||
|
||||
// Define classes to be used with the Image component
|
||||
const imageClass =
|
||||
"absolute inset-0 h-full w-full object-cover object-center transition duration-[600ms] ease-[cubic-bezier(0.45,0,0.55,1)] group-hover:scale-110";
|
||||
---
|
||||
|
||||
<!-- The anchor tag is the main container for the product card. When clicked, this leads to the details of the product. -->
|
||||
<a
|
||||
href={productLocale && productLocale !== "en"
|
||||
? `/${productLocale}/products/${product.id.replace(/^fr\//, "")}/`
|
||||
: `/products/${product.id.replace(/^en\//, "")}/`}
|
||||
data-astro-prefetch
|
||||
class="group relative flex h-48 items-end overflow-hidden rounded-lg shadow-xl outline-none ring-zinc-500 focus-visible:ring dark:ring-zinc-200 dark:focus:outline-none md:col-span-2 md:h-80"
|
||||
>
|
||||
<!-- The product's main image -->
|
||||
<Image
|
||||
src={product.data.main.imgCard}
|
||||
alt={product.data.main.imgAlt}
|
||||
draggable={"false"}
|
||||
class={imageClass}
|
||||
format={"avif"}
|
||||
/>
|
||||
<!-- This container includes a gradient overlay over the product's image -->
|
||||
<div
|
||||
class="pointer-events-none absolute inset-0 bg-gradient-to-t from-neutral-800 via-transparent to-transparent opacity-50"
|
||||
>
|
||||
</div>
|
||||
<!-- This container includes product's subtitle and an SVG icon-->
|
||||
<span
|
||||
class="relative mb-3 ml-4 inline-block text-sm font-bold text-neutral-50 transition duration-[600ms] ease-[cubic-bezier(0.45,0,0.55,1)] group-hover:scale-110 md:ml-5 md:text-lg"
|
||||
>{product.data.description} <Icon name="openInNew" /></span
|
||||
>
|
||||
</a>
|
|
@ -1,95 +0,0 @@
|
|||
---
|
||||
import { Image } from "astro:assets";
|
||||
import Icon from "../icons/Icon.astro";
|
||||
import { servicesData, successStoriesData } from "@data/mega_link";
|
||||
---
|
||||
|
||||
<div
|
||||
class="hs-dropdown py-3 [--adaptive:none] [--strategy:static] md:px-3 md:py-4 md:[--strategy:absolute] md:[--trigger:hover]"
|
||||
>
|
||||
<button
|
||||
type="button"
|
||||
class="flex w-full text-base items-center font-medium text-neutral-600 hover:text-neutral-500 dark:text-neutral-400 dark:hover:text-neutral-500"
|
||||
>
|
||||
Services <Icon name="chevronDown" />
|
||||
</button>
|
||||
|
||||
<div
|
||||
class="hs-dropdown-menu start-0 top-full z-10 hidden w-full min-w-60 rounded-2xl bg-neutral-50 py-2 opacity-0 transition-[opacity,margin] duration-[0.1ms] before:absolute before:-top-5 before:start-0 before:h-5 before:w-full hs-dropdown-open:opacity-100 dark:divide-neutral-700 dark:bg-neutral-800 md:p-4 md:shadow-2xl md:duration-[150ms]"
|
||||
>
|
||||
<div class="gap-4 md:grid md:grid-cols-2 lg:grid-cols-3">
|
||||
<div class="mx-1 flex flex-col md:mx-0">
|
||||
{
|
||||
servicesData &&
|
||||
servicesData.slice(0, 3).map((data) => (
|
||||
<a
|
||||
class="group flex gap-x-5 rounded-lg p-4 hover:bg-neutral-100 dark:text-neutral-200 dark:hover:bg-neutral-500/10"
|
||||
href={data.url}
|
||||
>
|
||||
<Icon name={data.icon} class="mt-1 size-5 flex-shrink-0" />
|
||||
<div class="grow">
|
||||
<p class="font-medium text-neutral-800 dark:text-neutral-200">
|
||||
{data.title}
|
||||
</p>
|
||||
<p class="text-sm text-neutral-500 group-hover:text-neutral-800 dark:text-neutral-400 dark:group-hover:text-neutral-200">
|
||||
{data.description}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="mx-1 flex flex-col md:mx-0">
|
||||
{
|
||||
servicesData &&
|
||||
servicesData.slice(3, 6).map((data) => (
|
||||
<a
|
||||
class="group flex gap-x-5 rounded-lg p-4 hover:bg-neutral-100 dark:text-neutral-200 dark:hover:bg-neutral-500/10"
|
||||
href={data.url}
|
||||
>
|
||||
<Icon name={data.icon} class="mt-1 size-5 flex-shrink-0" />
|
||||
<div class="grow">
|
||||
<p class="font-medium text-neutral-800 dark:text-neutral-200">
|
||||
{data.title}
|
||||
</p>
|
||||
<p class="text-sm text-neutral-500 group-hover:text-neutral-800 dark:text-neutral-400 dark:group-hover:text-neutral-200">
|
||||
{data.description}
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
))
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="mx-1 flex flex-col pt-4 md:mx-0 md:pt-0">
|
||||
<span
|
||||
class="text-sm font-semibold uppercase text-neutral-800 dark:text-neutral-200"
|
||||
>Success Stories</span
|
||||
>
|
||||
<a
|
||||
class="group mt-2 flex items-center gap-x-5 rounded-xl p-3 hover:bg-neutral-100 dark:hover:bg-neutral-500/10"
|
||||
href={successStoriesData[0].learnMoreUrl}
|
||||
>
|
||||
<Image
|
||||
src={successStoriesData[0].image}
|
||||
inferSize={true}
|
||||
alt={successStoriesData[0].alt}
|
||||
class="size-32 rounded-lg"
|
||||
/>
|
||||
<div class="grow">
|
||||
<p class="text-sm text-neutral-800 dark:text-neutral-400">
|
||||
{successStoriesData[0].description}
|
||||
</p>
|
||||
<p
|
||||
class="mt-3 inline-flex items-center gap-x-1 text-sm font-medium text-orange-400 decoration-2 hover:underline dark:text-orange-300"
|
||||
>
|
||||
Learn more
|
||||
<Icon name="arrowRight" />
|
||||
</p>
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -1,76 +1,2 @@
|
|||
// https://docs.astro.build/en/guides/content-collections/#defining-collections
|
||||
|
||||
import { z, defineCollection } from 'astro:content';
|
||||
import { glob } from 'astro/loaders';
|
||||
|
||||
const productsCollection = defineCollection({
|
||||
loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/products" }),
|
||||
schema: ({ image }) => z.object({
|
||||
title: z.string(),
|
||||
description: z.string(),
|
||||
main: z.object({
|
||||
id: z.number(),
|
||||
content: z.string(),
|
||||
imgCard: image(),
|
||||
imgMain: image(),
|
||||
imgAlt: z.string(),
|
||||
}),
|
||||
tabs: z.array(
|
||||
z.object({
|
||||
id: z.string(),
|
||||
dataTab: z.string(),
|
||||
title: z.string(),
|
||||
})
|
||||
),
|
||||
longDescription: z.object({
|
||||
title: z.string(),
|
||||
subTitle: z.string(),
|
||||
btnTitle: z.string(),
|
||||
btnURL: z.string(),
|
||||
}),
|
||||
descriptionList: z.array(
|
||||
z.object({
|
||||
title: z.string(),
|
||||
subTitle: z.string(),
|
||||
})
|
||||
),
|
||||
specificationsLeft: z.array(
|
||||
z.object({
|
||||
title: z.string(),
|
||||
subTitle: z.string(),
|
||||
})
|
||||
),
|
||||
specificationsRight: z.array(
|
||||
z.object({
|
||||
title: z.string(),
|
||||
subTitle: z.string(),
|
||||
})
|
||||
).optional(),
|
||||
tableData: z.array(
|
||||
z.object({
|
||||
feature: z.array(z.string()),
|
||||
description: z.array(z.array(z.string())),
|
||||
})
|
||||
).optional(),
|
||||
blueprints: z.object({
|
||||
first: image().optional(),
|
||||
second: image().optional(),
|
||||
}),
|
||||
}),
|
||||
});
|
||||
|
||||
const insightsCollection = defineCollection({
|
||||
loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/insights" }),
|
||||
schema: ({ image }) => z.object ({
|
||||
title: z.string(),
|
||||
description: z.string(),
|
||||
// contents: z.array(z.string()),
|
||||
cardImage: image(),
|
||||
cardImageAlt: z.string(),
|
||||
}),
|
||||
});
|
||||
|
||||
export const collections = {
|
||||
'products': productsCollection,
|
||||
'insights': insightsCollection,
|
||||
};
|
||||
export const collections = {};
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
---
|
||||
title: "L'avenir de la technologie de la construction"
|
||||
description: "Explorez le rôle pionnier de ScrewFast dans la révolution de la construction grâce à des technologies avancées et des solutions innovantes."
|
||||
cardImage: "@/images/insights/insight-1.avif"
|
||||
cardImageAlt: "Vue de dessus de l'agencement des outils mécaniques"
|
||||
---
|
||||
|
||||
Dans le monde de la construction, où l'innovation rencontre la praticité, ScrewFast se dresse comme un phare d'avancées pionnières. Depuis des années, cette entreprise est à la pointe de la révolution de la construction grâce à son engagement indéfectible envers les technologies avancées et les solutions innovantes. Des gratte-ciels aux ponts, ScrewFast a laissé une marque indélébile sur l'industrie, façonnant l'avenir de la construction de manière inimaginable.
|
||||
|
||||
## Un héritage d'innovation
|
||||
|
||||
Fondée avec la vision de redéfinir les normes de la construction, ScrewFast s'est lancée dans un parcours marqué par une innovation incessante. Depuis sa création, l'entreprise n'a cessé de repousser les limites du possible, introduisant des technologies révolutionnaires qui ont transformé la manière dont les structures sont construites.
|
||||
|
||||
## Réinventer les systèmes de fondation
|
||||
|
||||
Au cœur du succès de ScrewFast se trouve son approche révolutionnaire des systèmes de fondation. Traditionnellement, le processus de pose des fondations est fastidieux et chronophage, nécessitant souvent des excavations importantes et une main-d'œuvre manuelle. Cependant, les solutions innovantes de ScrewFast ont totalement changé la donne.
|
||||
|
||||
En utilisant des techniques avancées telles que l'installation de pieux hélicoïdaux, ScrewFast a rationalisé le processus de fondation, réduisant considérablement le temps et les coûts. Ces pieux hélicoïdaux, avec leur conception en forme de vis, offrent une stabilité inégalée et peuvent être installés avec une efficacité remarquable, en faisant le choix privilégié pour des projets de toutes tailles.
|
||||
|
||||
## Adopter la digitalisation
|
||||
|
||||
À une époque dominée par la digitalisation, ScrewFast a pleinement embrassé la technologie, exploitant sa puissance pour améliorer l'efficacité et la précision. Grâce à l'utilisation de logiciels avancés et de techniques de modélisation, l'entreprise a révolutionné les phases de conception et de planification des projets de construction.
|
||||
|
||||
De la modélisation 3D à la modélisation de l'information du bâtiment (BIM), ScrewFast utilise des outils de pointe pour créer des simulations détaillées des structures, permettant une meilleure visualisation et optimisation. Cette approche numérique améliore non seulement la précision des plans de construction, mais permet également une collaboration sans faille entre architectes, ingénieurs et constructeurs.
|
||||
|
||||
## Des solutions durables pour un avenir plus vert
|
||||
|
||||
Dans un monde de plus en plus soucieux de durabilité, ScrewFast a pris des mesures proactives pour minimiser son empreinte environnementale. En donnant la priorité aux matériaux écologiques et aux pratiques de construction durables, l'entreprise mène la charge vers un avenir plus vert.
|
||||
|
||||
Un exemple notable est l'engagement de ScrewFast envers la construction modulaire, une méthode qui consiste à préfabricer des composants de bâtiment hors site et à les assembler sur site. Cette approche réduit non seulement les déchets de construction mais minimise également la perturbation des écosystèmes locaux, en faisant une solution gagnante pour les constructeurs et l'environnement.
|
||||
|
||||
## La route à venir : défis et opportunités
|
||||
|
||||
Alors que ScrewFast continue de repousser les limites de la technologie de la construction, elle fait face à une multitude de défis et d'opportunités à l'horizon. De la navigation dans les obstacles réglementaires à l'adaptation aux tendances de l'industrie en évolution, la route à venir est semée de complexités.
|
||||
|
||||
Cependant, avec son dévouement indéfectible à l'innovation et un bilan de succès, ScrewFast est bien positionnée pour surmonter ces obstacles et continuer à façonner l'avenir de la construction pour les générations à venir. Alors que l'industrie avance vers un avenir de plus en plus numérique et durable, ScrewFast se dresse comme un phare de progrès, ouvrant la voie vers un monde où la construction est non seulement efficace et rentable, mais aussi respectueuse de l'environnement.
|
||||
|
||||
## Conclusion
|
||||
|
||||
Dans le paysage en constante évolution de la technologie de la construction, ScrewFast reste un pionnier, repoussant constamment les limites du possible. Grâce à son engagement envers l'innovation, la digitalisation et la durabilité, l'entreprise a non seulement révolutionné la manière dont les structures sont construites, mais a également établi une nouvelle norme d'excellence dans l'industrie.
|
||||
|
||||
En regardant vers l'avenir, une chose est claire : l'héritage de ScrewFast continuera de façonner le monde de la construction pour les années à venir, inspirant des générations de constructeurs à rêver grand et à repousser les limites du possible. Avec ScrewFast à la tête, l'avenir de la construction n'a jamais été aussi prometteur.
|
|
@ -1,44 +0,0 @@
|
|||
---
|
||||
title: "L'importance de la collaboration"
|
||||
description: "Découvrez comment la collaboration est au cœur de l'approche de construction de ScrewFast, favorisant une communication efficace et un travail d'équipe pour atteindre des résultats exceptionnels."
|
||||
cardImage: "@/images/insights/insight-2.avif"
|
||||
cardImageAlt: "Vue de dessus de l'agencement des outils mécaniques"
|
||||
---
|
||||
|
||||
Dans le domaine de la construction, où les projets impliquent souvent des conceptions complexes, des délais serrés et des défis logistiques compliqués, l'importance de la collaboration ne peut être sous-estimée. Une collaboration efficace n'est pas seulement un aspect souhaitable de la gestion de projet; c'est la pierre angulaire sur laquelle reposent les entreprises de construction réussies. Dans cet article, nous explorons comment la collaboration sert de force motrice à l'approche de construction de ScrewFast, facilitant une communication efficace et un travail d'équipe pour atteindre des résultats exceptionnels.
|
||||
|
||||
## Comprendre ScrewFast : Un aperçu
|
||||
|
||||
Avant d'approfondir les subtilités de la collaboration dans les projets de construction de ScrewFast, il est essentiel de comprendre les antécédents et l'éthique de l'entreprise. ScrewFast est une entreprise de construction renommée pour son approche innovante des solutions de fondation. Spécialisée dans les fondations à pieux hélicoïdaux, ScrewFast s'est imposée comme un leader dans l'industrie de la construction, offrant des solutions de haute qualité et rentables pour une large gamme de projets, des développements à petite échelle aux grandes infrastructures.
|
||||
|
||||
## La culture de collaboration chez ScrewFast
|
||||
|
||||
Au cœur du succès de ScrewFast se trouve une culture qui privilégie la collaboration à chaque étape du processus de construction. De l'initiation à l'achèvement du projet, la collaboration est intégrée dans le fonctionnement de l'entreprise. Contrairement aux modèles hiérarchiques traditionnels courants dans de nombreuses entreprises de construction, ScrewFast favorise un environnement où l'apport de chaque membre de l'équipe est valorisé, quel que soit son rôle ou son ancienneté.
|
||||
|
||||
### Briser les silos : la clé de la collaboration efficace
|
||||
|
||||
L'un des plus grands obstacles à la collaboration dans la construction est la présence de silos au sein des organisations. Les départements opèrent souvent de manière isolée, entraînant des problèmes de communication, des efforts dupliqués et un manque de synergie. ScrewFast relève ce défi de front en brisant les silos et en promouvant la collaboration interfonctionnelle.
|
||||
|
||||
#### Équipes interfonctionnelles : combler le fossé
|
||||
|
||||
ScrewFast forme des équipes interfonctionnelles composées de professionnels issus de divers horizons, y compris des ingénieurs, des architectes, des chefs de projet et des travailleurs de la construction. En réunissant des individus aux expertises et perspectives variées, ScrewFast garantit une résolution complète des problèmes et une prise de décision holistique tout au long du cycle de vie du projet.
|
||||
|
||||
#### Livraison de projet intégrée : une approche unifiée
|
||||
|
||||
La livraison de projet intégrée (IPD) est une autre pierre angulaire de l'éthique collaborative de ScrewFast. Contrairement aux méthodes traditionnelles de livraison de projet où les parties prenantes opèrent dans des silos séparés, l'IPD favorise une approche unifiée où toutes les parties travaillent ensemble dès le début. Cette approche intégrée favorise la transparence, l'efficacité et la responsabilité collective, conduisant finalement à des résultats de projet supérieurs.
|
||||
|
||||
## Stimuler l'innovation grâce à la collaboration
|
||||
|
||||
La collaboration ne consiste pas seulement à améliorer la communication et le travail d'équipe; elle sert également de catalyseur pour l'innovation. Chez ScrewFast, la collaboration alimente une culture d'amélioration continue et de pensée avant-gardiste, favorisant le développement de solutions révolutionnaires qui repoussent les limites de la technologie de la construction.
|
||||
|
||||
### Co-création avec les clients : transformer les idées en réalité
|
||||
|
||||
ScrewFast reconnaît l'importance d'impliquer les clients dans le processus de co-création. En collaborant étroitement avec les clients dès le début du projet, ScrewFast obtient des informations précieuses sur leurs besoins, préférences et défis. Cette approche collaborative permet à ScrewFast de personnaliser ses solutions pour répondre aux exigences spécifiques des clients, ce qui se traduit par une satisfaction client accrue et un succès du projet.
|
||||
|
||||
### Adopter les technologies émergentes
|
||||
|
||||
L'innovation prospère dans les environnements collaboratifs où se croisent des perspectives diverses. Chez ScrewFast, la collaboration s'étend au-delà des équipes internes pour inclure des partenaires externes, notamment des fournisseurs de technologies, des institutions de recherche et le monde universitaire. En forgeant des partenariats stratégiques avec des leaders de l'industrie, ScrewFast reste à la pointe des avancées technologiques, exploitant des outils et des techniques de pointe pour améliorer l'efficacité et les performances de ses projets.
|
||||
|
||||
## Conclusion
|
||||
|
||||
Dans le monde trépidant de la construction, la collaboration n'est pas qu'un mot à la mode; c'est un principe fondamental qui sous-tend le succès. L'approche de construction de ScrewFast illustre le pouvoir transformateur de la collaboration, démontrant comment une communication efficace, un travail d'équipe et une innovation peuvent produire des résultats exceptionnels. Alors que l'industrie de la construction continue d'évoluer, embrasser la collaboration sera essentiel pour relever les défis, saisir les opportunités et offrir des solutions durables qui résistent à l'épreuve du temps.
|
|
@ -1,37 +0,0 @@
|
|||
---
|
||||
title: "L'impact des pratiques durables"
|
||||
description: "Découvrez comment ScrewFast mène la charge en promouvant la durabilité dans l'industrie de la construction"
|
||||
cardImage: "@/images/insights/insight-3.avif"
|
||||
cardImageAlt: "Vue de dessus de l'agencement des outils mécaniques"
|
||||
---
|
||||
|
||||
L'industrie de la construction projette une longue ombre. Bien qu'elle fournisse l'infrastructure essentielle à nos vies, son impact environnemental est indéniable. De l'épuisement des ressources et la pollution à la consommation d'énergie et à la génération de déchets, les pratiques de construction traditionnelles pèsent lourdement sur notre planète. Mais une révolution est en marche, et à l'avant-garde se trouve ScrewFast, une entreprise qui change la donne de manière démonstrative avec son engagement envers des pratiques durables.
|
||||
|
||||
## L'ampleur du défi
|
||||
|
||||
Imaginez ceci : l'industrie de la construction est responsable de 36 % de la consommation énergétique mondiale et de 40 % des émissions totales de CO2 [1]. Et ce n'est pas tout. Les bâtiments et la construction sont des contributeurs majeurs à la génération de déchets solides, représentant jusqu'à 40 %, et consomment 30 % des matières premières mondiales [1]. Ces statistiques dressent un tableau clair : continuer comme avant est tout simplement insoutenable.
|
||||
|
||||
## ScrewFast : construire avec responsabilité
|
||||
|
||||
ScrewFast est une entreprise fondée sur la responsabilité. Ils comprennent le coût environnemental de la construction et prennent des mesures décisives pour changer de cap. Leur engagement envers la durabilité imprègne tous les aspects de leurs opérations, des matériaux qu'ils utilisent aux processus de construction qu'ils mettent en œuvre.
|
||||
|
||||
* **Innovation matérielle :** ScrewFast privilégie l'utilisation de matériaux recyclés et recyclables. Cela réduit non seulement la dépendance aux ressources vierges, mais diminue également la charge environnementale associée à l'extraction des ressources.
|
||||
* **Efficacité énergétique :** ScrewFast défend les méthodes de construction écoénergétiques. Cela peut impliquer l'incorporation de matériaux d'isolation haute performance, l'optimisation de la conception des bâtiments pour la lumière naturelle et la ventilation, ou même l'intégration de sources d'énergie renouvelable comme les panneaux solaires. Le résultat ? Des bâtiments nécessitant moins d'énergie pour fonctionner, entraînant une réduction significative des émissions de gaz à effet de serre.
|
||||
* **Réduction des déchets :** ScrewFast planifie et exécute minutieusement des projets pour minimiser la génération de déchets. Cela peut impliquer l'utilisation de composants préfabriqués, l'emploi de techniques de construction modulaire et la mise en œuvre de programmes rigoureux de tri et de recyclage des déchets. En minimisant les déchets, ScrewFast conserve les ressources et réduit l'impact environnemental associé aux décharges.
|
||||
* **Approvisionnement durable :** ScrewFast adopte une approche responsable de l'approvisionnement en matériaux. Ils privilégient les fournisseurs qui partagent leur engagement envers la durabilité. Cela garantit que l'empreinte environnementale est prise en compte tout au long de la chaîne d'approvisionnement.
|
||||
|
||||
## L'impact du changement
|
||||
|
||||
L'engagement de ScrewFast envers les pratiques durables s'étend bien au-delà des murs de leur entreprise. L'effet d'entraînement de leurs actions est substantiel :
|
||||
|
||||
* **Avantages environnementaux :** En promouvant la conservation des ressources, la réduction de la consommation d'énergie et la minimisation des déchets, ScrewFast contribue de manière significative à une planète plus saine. Cela se traduit par un air plus pur, un climat plus stable et la préservation des ressources naturelles pour les générations futures.
|
||||
* **Avantages économiques :** Les pratiques de construction durables conduisent souvent à des avantages économiques à long terme. Les bâtiments écoénergétiques ont des coûts opérationnels plus bas, et les matériaux durables peuvent parfois être étonnamment compétitifs en termes de coûts. ScrewFast démontre qu'être vert peut aussi être bon pour les résultats financiers.
|
||||
* **Responsabilité sociale :** ScrewFast reconnaît que la durabilité englobe plus que l'environnement. Ils s'engagent à créer des environnements de travail sûrs et sains pour leurs employés et à favoriser des relations positives avec les communautés dans lesquelles ils opèrent.
|
||||
|
||||
## Donner l'exemple
|
||||
|
||||
ScrewFast ne se contente pas de parler, ils agissent. Leur engagement envers la durabilité est évident dans chaque projet qu'ils entreprennent. En montrant les avantages tangibles de la construction durable, ScrewFast inspire un changement de paradigme au sein de l'industrie. Ils ouvrent la voie à un avenir où les bâtiments sont non seulement fonctionnels, mais aussi respectueux de l'environnement.
|
||||
|
||||
## La route à suivre
|
||||
|
||||
L'industrie de la construction est à la croisée des chemins. ScrewFast se dresse comme un phare, éclairant la voie vers un avenir plus durable. En adoptant des pratiques innovantes et en donnant la priorité à la responsabilité environnementale, ScrewFast ne se contente pas de construire des structures ; ils construisent un avenir meilleur. À mesure que de plus en plus d'entreprises emboîtent le pas, l'impact sera profond. Une industrie de la construction plus verte signifie une planète plus saine pour tous.
|
|
@ -1,54 +0,0 @@
|
|||
---
|
||||
title: "SF-AB A765"
|
||||
description: "Ensemble de Vis Assorties"
|
||||
main:
|
||||
id: 2
|
||||
content: |
|
||||
Découvrez l'ensemble de vis assorties SF-AB A765 – la solution ultime pour vos besoins de fixation. Ce set complet comprend une grande variété de vis soigneusement sélectionnées pour aborder divers projets avec facilité et précision.
|
||||
imgCard: "@/images/product-image-2.avif"
|
||||
imgMain: "@/images/product-image-main-2.avif"
|
||||
imgAlt: "Boîtes factices de l'ensemble de vis assorties"
|
||||
tabs:
|
||||
- id: "tabs-with-card-item-1"
|
||||
dataTab: "#tabs-with-card-1"
|
||||
title: "Description"
|
||||
- id: "tabs-with-card-item-2"
|
||||
dataTab: "#tabs-with-card-2"
|
||||
title: "Spécifications"
|
||||
- id: "tabs-with-card-item-3"
|
||||
dataTab: "#tabs-with-card-3"
|
||||
title: "Plans"
|
||||
longDescription:
|
||||
title: "Solutions Polyvalentes de Fixation"
|
||||
subTitle: |
|
||||
L'ensemble de vis assorties SF-AB A765 offre une polyvalence et une commodité inégalées, ce qui en fait le choix idéal pour les amateurs de bricolage et les professionnels. Avec une sélection complète de vis, vous aurez toujours le bon élément de fixation pour chaque tâche.
|
||||
btnTitle: "Contactez les ventes pour en savoir plus"
|
||||
btnURL: "#"
|
||||
descriptionList:
|
||||
- title: "Grande Variété"
|
||||
subTitle: "Comprend une gamme diversifiée de types et de tailles de vis pour s'adapter à diverses applications et matériaux."
|
||||
- title: "Facilité d'Utilisation"
|
||||
subTitle: "Chaque vis est conçue pour une installation facile, garantissant une fixation sans tracas à chaque fois."
|
||||
- title: "Commodité"
|
||||
subTitle: "Élimine le besoin de multiples déplacements au magasin de bricolage, économisant temps et effort sur vos projets."
|
||||
specificationsLeft:
|
||||
- title: "Matériau"
|
||||
subTitle: "Fabriqué à partir de matériaux de haute qualité tels que l'acier inoxydable, assurant durabilité et résistance à la corrosion."
|
||||
- title: "Assortiment"
|
||||
subTitle: "Contient un assortiment généreux de vis, incluant des vis à bois, des vis mécaniques, et des vis pour tôle."
|
||||
- title: "Quantité"
|
||||
subTitle: "Chaque set comprend une quantité suffisante de vis pour gérer une large gamme de projets et de tâches."
|
||||
- title: "Tailles"
|
||||
subTitle: "Disponible en différentes tailles pour s'adapter aux exigences de divers projets, assurant compatibilité et polyvalence."
|
||||
tableData:
|
||||
- feature: ["Spécification", "Valeur"]
|
||||
description:
|
||||
- ["Longueur (mm)", "Divers"]
|
||||
- ["Poids (g)", "N/A"]
|
||||
- ["Matériau", "Acier Inoxydable"]
|
||||
- ["Finition", "Assortie"]
|
||||
- ["Contenu du Pack", "Diverses vis dans un ensemble"]
|
||||
blueprints:
|
||||
first: "@/images/blueprint-1.avif"
|
||||
second: "@/images/blueprint-2.avif"
|
||||
---
|
|
@ -1,55 +0,0 @@
|
|||
---
|
||||
title: "SF-BN B203"
|
||||
description: "Ensemble de boulons à vis et écrous"
|
||||
main:
|
||||
id: 3
|
||||
content: |
|
||||
Découvrez le SF-BN B203 – votre compagnon fiable pour des fixations de qualité professionnelle. Cet ensemble complet comprend une sélection polyvalente de boulons à vis et d'écrous, méticuleusement conçus pour offrir la tenue la plus solide pour vos projets de construction et d'assemblage.
|
||||
imgCard: "@/images/product-image-3.avif"
|
||||
imgMain: "@/images/product-image-main-3.avif"
|
||||
imgAlt: "Maquettes de boîtes d'un ensemble de boulons à vis et écrous"
|
||||
tabs:
|
||||
- id: "tabs-with-card-item-1"
|
||||
dataTab: "#tabs-with-card-1"
|
||||
title: "Description"
|
||||
- id: "tabs-with-card-item-2"
|
||||
dataTab: "#tabs-with-card-2"
|
||||
title: "Spécifications"
|
||||
- id: "tabs-with-card-item-3"
|
||||
dataTab: "#tabs-with-card-3"
|
||||
title: "Plans"
|
||||
longDescription:
|
||||
title: "La force rencontre la précision"
|
||||
subTitle: |
|
||||
L'ensemble de boulons à vis et écrous SF-BN B203 offre une durabilité robuste et une précision pour les professionnels de la construction, garantissant des performances fiables dans chaque application, de l'encadrement de maisons à l'assemblage de machines.
|
||||
btnTitle: "Contactez le service commercial pour en savoir plus"
|
||||
btnURL: "#"
|
||||
descriptionList:
|
||||
- title: "Résistance à la corrosion"
|
||||
subTitle: "Le revêtement en zinc offre non seulement un aspect poli, mais protège également contre la corrosion, garantissant une longue durée de vie."
|
||||
- title: "Sécurité améliorée"
|
||||
subTitle: "Un ajustement sécurisé se traduit par des structures plus sûres avec un risque réduit de défaillance des composants."
|
||||
- title: "Praticité"
|
||||
subTitle: "Cet ensemble tout-en-un signifie que vous avez la bonne taille sous la main, réduisant les retards de projet et les allers-retours supplémentaires au magasin de bricolage."
|
||||
specificationsLeft:
|
||||
- title: "Composition du matériau"
|
||||
subTitle: "Fabriqué à partir d'acier de haute qualité, offrant résistance et fiabilité pour des applications exigeantes."
|
||||
- title: "Finition de surface"
|
||||
subTitle: "Protégé par un revêtement de zinc pour offrir une résistance accrue à la corrosion et une longévité."
|
||||
- title: "Quantité par ensemble"
|
||||
subTitle: "L'ensemble comprend une sélection équilibrée de 25 boulons à vis et 25 écrous assortis."
|
||||
- title: "Assortiment de tailles"
|
||||
subTitle: "Comprend une gamme complète de tailles pour répondre à diverses exigences de projet, garantissant compatibilité et polyvalence."
|
||||
specificationsRight:
|
||||
- title: "Détails du filetage"
|
||||
subTitle: "Conçu avec des filets coupés avec précision pour un ajustement sécurisé et une installation facile."
|
||||
- title: "Propriétés mécaniques"
|
||||
subTitle: "Chaque boulon et écrou est conçu pour répondre à des indices de charge spécifiques ou à des normes de résistance, adaptés aux applications structurelles."
|
||||
- title: "Normes et certifications"
|
||||
subTitle: "Conforme aux normes et certifications industrielles pertinentes, garantissant une qualité et une sécurité constantes."
|
||||
- title: "Applications adaptées"
|
||||
subTitle: "Idéal pour un large éventail d'utilisations, des environnements de construction aux assemblages mécaniques qui nécessitent des joints solides et sécurisés."
|
||||
blueprints:
|
||||
first: "@/images/blueprint-1.avif"
|
||||
second: "@/images/blueprint-2.avif"
|
||||
---
|
|
@ -1,55 +0,0 @@
|
|||
---
|
||||
title: "SF-FN F303"
|
||||
description: "Boulons hexagonaux"
|
||||
main:
|
||||
id: 4
|
||||
content: |
|
||||
Découvrez les boulons hexagonaux SF-FN F303 – le choix parfait pour les applications de fixation lourdes. Conçus avec précision et durabilité, ces boulons hexagonaux offrent la force et la fiabilité dont vous avez besoin pour vos projets les plus exigeants.
|
||||
imgCard: "@/images/product-image-4.avif"
|
||||
imgMain: "@/images/product-image-main-4.avif"
|
||||
imgAlt: "Maquettes de boîtes de boulons hexagonaux"
|
||||
tabs:
|
||||
- id: "tabs-with-card-item-1"
|
||||
dataTab: "#tabs-with-card-1"
|
||||
title: "Description"
|
||||
- id: "tabs-with-card-item-2"
|
||||
dataTab: "#tabs-with-card-2"
|
||||
title: "Spécifications"
|
||||
- id: "tabs-with-card-item-3"
|
||||
dataTab: "#tabs-with-card-3"
|
||||
title: "Plans"
|
||||
longDescription:
|
||||
title: "Solutions de fixation robustes"
|
||||
subTitle: |
|
||||
Les boulons hexagonaux SF-FN F303 sont conçus pour relever les défis de fixation les plus difficiles avec aisance. Que vous travailliez sur des projets de construction ou des machines lourdes, ces boulons hexagonaux offrent la force et la fiabilité nécessaires.
|
||||
btnTitle: "Contactez le service commercial pour en savoir plus"
|
||||
btnURL: "#"
|
||||
descriptionList:
|
||||
- title: "Solidité et durabilité"
|
||||
subTitle: "Fabriqués à partir de matériaux de haute qualité, ces boulons hexagonaux sont conçus pour supporter des charges lourdes et des conditions difficiles."
|
||||
- title: "Ingénierie de précision"
|
||||
subTitle: "Conçus avec des filets coupés avec précision et des spécifications exactes, garantissant un ajustement serré et sécurisé à chaque fois."
|
||||
- title: "Polyvalence"
|
||||
subTitle: "Adaptés à une large gamme d'applications, de la construction aux machines, offrant des solutions de fixation polyvalentes."
|
||||
specificationsLeft:
|
||||
- title: "Matériau"
|
||||
subTitle: "Fabriqués en acier ou en alliage de qualité supérieure, offrant une résistance exceptionnelle et une résistance à la corrosion."
|
||||
- title: "Conception du filetage"
|
||||
subTitle: "Des filets coupés avec précision assurent une adhérence optimale et une fiabilité même dans des environnements à haute contrainte."
|
||||
- title: "Quantité"
|
||||
subTitle: "Chaque ensemble comprend une quantité suffisante de boulons hexagonaux pour divers projets et applications."
|
||||
- title: "Tailles"
|
||||
subTitle: "Disponible dans une gamme de tailles pour répondre aux différentes exigences des projets, garantissant polyvalence et compatibilité."
|
||||
specificationsRight:
|
||||
- title: "Finition"
|
||||
subTitle: "Fini avec un revêtement protecteur pour améliorer la résistance à la corrosion et prolonger la durée de vie."
|
||||
- title: "Capacité de charge"
|
||||
subTitle: "Conçus pour répondre ou dépasser les normes industrielles en matière de capacité de charge, garantissant des performances fiables sous des charges lourdes."
|
||||
- title: "Certifications"
|
||||
subTitle: "Conformes aux normes et certifications industrielles pertinentes, garantissant qualité et fiabilité."
|
||||
- title: "Applications"
|
||||
subTitle: "Idéal pour une utilisation dans la construction, les machines, l'automobile et d'autres applications lourdes nécessitant une fixation solide et fiable."
|
||||
blueprints:
|
||||
first: "@/images/blueprint-1.avif"
|
||||
second: "@/images/blueprint-2.avif"
|
||||
---
|
|
@ -1,55 +0,0 @@
|
|||
---
|
||||
title: "SF-TB T845"
|
||||
description: "Vis à machine"
|
||||
main:
|
||||
id: 1
|
||||
content: |
|
||||
Découvrez le SF-TB T845 – votre solution de prédilection pour la fixation de précision dans les machines et équipements. Cet ensemble complet de vis à machine est méticuleusement conçu pour répondre aux exigences strictes des applications industrielles, garantissant une fixation sécurisée et fiable.
|
||||
imgCard: "@/images/product-image-1.avif"
|
||||
imgMain: "@/images/product-image-main-1.avif"
|
||||
imgAlt: "Maquettes de boîtes de vis à machine"
|
||||
tabs:
|
||||
- id: "tabs-with-card-item-1"
|
||||
dataTab: "#tabs-with-card-1"
|
||||
title: "Description"
|
||||
- id: "tabs-with-card-item-2"
|
||||
dataTab: "#tabs-with-card-2"
|
||||
title: "Spécifications"
|
||||
- id: "tabs-with-card-item-3"
|
||||
dataTab: "#tabs-with-card-3"
|
||||
title: "Plans"
|
||||
longDescription:
|
||||
title: "Solutions de fixation de précision"
|
||||
subTitle: |
|
||||
Les vis à machine SF-TB T845 offrent une précision et une fiabilité inégalées pour les applications industrielles, garantissant un fonctionnement fluide et une longue durée de vie pour vos machines et équipements.
|
||||
btnTitle: "Contactez le service commercial pour en savoir plus"
|
||||
btnURL: "#"
|
||||
descriptionList:
|
||||
- title: "Durabilité"
|
||||
subTitle: "Fabriquées à partir de matériaux de haute qualité, ces vis à machine sont conçues pour résister aux rigueurs des environnements industriels."
|
||||
- title: "Ingénierie de précision"
|
||||
subTitle: "Conçues avec des filets coupés avec précision et des spécifications exactes, garantissant un ajustement serré et sécurisé pour chaque application."
|
||||
- title: "Polyvalence"
|
||||
subTitle: "Adaptées à une large gamme de machines et d'équipements, offrant des solutions de fixation polyvalentes pour divers besoins industriels."
|
||||
specificationsLeft:
|
||||
- title: "Composition du matériau"
|
||||
subTitle: "Construites en acier ou alliage de qualité supérieure pour une résistance et une durabilité exceptionnelles."
|
||||
- title: "Finition de surface"
|
||||
subTitle: "Fini avec un revêtement protecteur pour améliorer la résistance à la corrosion et prolonger la durée de vie."
|
||||
- title: "Quantité par ensemble"
|
||||
subTitle: "Chaque ensemble contient un assortiment complet de vis à machine pour répondre aux divers besoins industriels."
|
||||
- title: "Gamme de tailles"
|
||||
subTitle: "Disponible en différentes tailles et longueurs pour s'adapter aux spécifications des machines et équipements."
|
||||
specificationsRight:
|
||||
- title: "Spécifications du filetage"
|
||||
subTitle: "Des filets conçus avec précision assurent une adhérence optimale et une fiabilité, même dans les environnements à haute vibration."
|
||||
- title: "Capacité de charge"
|
||||
subTitle: "Conçues pour répondre ou dépasser les normes industrielles en matière de capacité de charge, garantissant une opération sûre et fiable."
|
||||
- title: "Certifications"
|
||||
subTitle: "Conformes aux normes et certifications industrielles pertinentes, garantissant qualité et fiabilité."
|
||||
- title: "Applications"
|
||||
subTitle: "Idéal pour une utilisation dans une large gamme de machines industrielles, équipements et assemblages nécessitant une fixation précise et sécurisée."
|
||||
blueprints:
|
||||
first: "@/images/blueprint-1.avif"
|
||||
second: "@/images/blueprint-2.avif"
|
||||
---
|
|
@ -4,19 +4,21 @@ import type { WebPage, WebSite, WithContext } from "schema-dts";
|
|||
export const SITE = {
|
||||
title: "Maison à vendre à Albi",
|
||||
tagline: "La maison familiale par excellence",
|
||||
description: "Belle maison individuelle de 177 m2 dans un écrin de verdure sur un terrain de 980 m2, non-mitoyenne, avec piscine, grande terrasse et garage. Sans vis-à-vis.",
|
||||
description_short: "Belle maison individuelle de 177 m2 dans un écrin de verdure sur un terrain de 980 m2.",
|
||||
description:
|
||||
"Belle maison individuelle de 177 m2 dans un écrin de verdure sur un terrain de 980 m2, non-mitoyenne, avec piscine, grande terrasse et garage. Sans vis-à-vis.",
|
||||
description_short:
|
||||
"Belle maison individuelle de 177 m2 dans un écrin de verdure sur un terrain de 980 m2.",
|
||||
url: "https://achat-maison-albi.fr",
|
||||
author: "Jalil Arfaoui",
|
||||
};
|
||||
|
||||
export const websiteStructuredDescription = {
|
||||
"@type": "WebSite",
|
||||
"url": "https://screwfast.uk",
|
||||
"name": "ScrewFast",
|
||||
"description":
|
||||
"ScrewFast offers top-tier hardware tools and expert construction services to meet all your project needs.",
|
||||
} satisfies WebSite
|
||||
url: "https://achat-maison-albi.fr",
|
||||
name: "Maison indiduelle de 177m2 à vendre à Albi",
|
||||
description:
|
||||
"Situation idéale : Au calme au fond d’une impasse, à moins de 2 km du centre historique, accès rocade à 1 km, tous les commerces, médiathèque et maison de quartier à 500 mètres.",
|
||||
} satisfies WebSite;
|
||||
|
||||
const defaultStructuredData = {
|
||||
"@context": "https://schema.org",
|
||||
|
@ -32,7 +34,7 @@ const defaultStructuredData = {
|
|||
name: SITE.title,
|
||||
description: SITE.description,
|
||||
},
|
||||
} satisfies WithContext<WebPage>
|
||||
} satisfies WithContext<WebPage>;
|
||||
|
||||
export const SEO = {
|
||||
title: SITE.title,
|
||||
|
|
|
@ -1,54 +0,0 @@
|
|||
// Define data structures for services and success stories
|
||||
export const servicesData = [
|
||||
{
|
||||
title: "Explore Advice and Explanations",
|
||||
description:
|
||||
"Dive deep into helpful guides and explanations for all of ScrewFast's features",
|
||||
icon: "guides",
|
||||
url: "#",
|
||||
},
|
||||
{
|
||||
title: "Discover Integrations",
|
||||
description:
|
||||
"Supercharge Your Workflow. Seamless integrations with all your favorite tools",
|
||||
icon: "puzzle",
|
||||
url: "#",
|
||||
},
|
||||
{
|
||||
title: "Expert Services",
|
||||
description: "Go beyond tools with ScrewFast's expert services",
|
||||
icon: "rocket",
|
||||
url: "#",
|
||||
},
|
||||
{
|
||||
title: "Cutting-Edge Tools",
|
||||
description:
|
||||
"Build Smarter, Faster. Experience next-level efficiency with ScrewFast's cutting-edge construction tools",
|
||||
icon: "hammer",
|
||||
url: "#",
|
||||
},
|
||||
{
|
||||
title: "Simple Plans",
|
||||
description:
|
||||
"Boost your efficiency with ScrewFast's straightforward, value-driven plans",
|
||||
icon: "sparks",
|
||||
url: "#",
|
||||
},
|
||||
{
|
||||
title: "Community Forum",
|
||||
description: "Learn, share, and connect with other ScrewFast users",
|
||||
icon: "community",
|
||||
url: "#",
|
||||
},
|
||||
];
|
||||
|
||||
export const successStoriesData = [
|
||||
{
|
||||
image:
|
||||
"https://images.unsplash.com/photo-1544005313-94ddf0286df2?q=80&w=1376&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D8&auto=format&fit=facearea&facepad=2&w=320&h=320&q=80",
|
||||
alt: "Image Description",
|
||||
description:
|
||||
"See how ScrewFast has empowered businesses of all sizes to achieve outstanding results.",
|
||||
learnMoreUrl: "#",
|
||||
},
|
||||
];
|
|
@ -1,38 +0,0 @@
|
|||
{
|
||||
"title": "Simple, Transparent Pricing",
|
||||
"subTitle": "Boost efficiency with ScrewFast's clear, value-driven plans.",
|
||||
"badge": "Best value",
|
||||
"thirdOption": "Enterprise Solutions?",
|
||||
"btnText": "Get a Custom Quote",
|
||||
|
||||
"starterKit": {
|
||||
"name": "Starter Kit",
|
||||
"description": "Best option for DIY projects",
|
||||
"price": "49",
|
||||
"cents": ".00",
|
||||
"billingFrequency": "USD / monthly",
|
||||
"features": [
|
||||
"Key hardware tools",
|
||||
"Access to guides & tutorials",
|
||||
"Standard support"
|
||||
],
|
||||
"purchaseBtnTitle": "Get the Starter Kit",
|
||||
"purchaseLink": "#"
|
||||
},
|
||||
|
||||
"professionalToolbox": {
|
||||
"name": "Professional Toolbox",
|
||||
"description": "Best for large scale uses",
|
||||
"price": "89",
|
||||
"cents": ".00",
|
||||
"billingFrequency": "USD / monthly",
|
||||
"features": [
|
||||
"Premium tool selection",
|
||||
"Priority support",
|
||||
"Exclusive content & deals",
|
||||
"Bulk order discounts"
|
||||
],
|
||||
"purchaseBtnTitle": "Get the Professional Toolbox",
|
||||
"purchaseLink": "#"
|
||||
}
|
||||
}
|
Before Width: | Height: | Size: 185 KiB |
Before Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 107 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 214 KiB |
Before Width: | Height: | Size: 66 KiB |
Before Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 109 KiB |
|
@ -1,8 +0,0 @@
|
|||
<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="-0.00585938" y="-0.000488281" width="512" height="512" rx="100" fill="#262626"/>
|
||||
<rect x="20.9297" y="109.01" width="173.138" height="40.5431" rx="20.2715" transform="rotate(0.0432252 20.9297 109.01)" fill="#FACC15"/>
|
||||
<rect x="100.982" y="183.969" width="173.138" height="40.5431" rx="20.2715" transform="rotate(0.0432252 100.982 183.969)" fill="#FACC15"/>
|
||||
<rect x="181.491" y="259.354" width="173.138" height="40.5431" rx="20.2715" transform="rotate(0.0432252 181.491 259.354)" fill="#FACC15"/>
|
||||
<rect x="261.998" y="334.739" width="62.4311" height="40.5431" rx="20.2715" transform="rotate(0.0432252 261.998 334.739)" fill="#FACC15"/>
|
||||
<path d="M442.513 435.922C445.843 442.651 438.906 449.847 432.059 446.766L355.339 412.235C350.291 409.962 349.021 403.373 352.863 399.387L392.264 358.515C396.106 354.53 402.737 355.557 405.193 360.519L442.513 435.922Z" fill="#FACC15"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 987 B |
Before Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 55 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 192 KiB |
|
@ -1,8 +0,0 @@
|
|||
<svg viewBox="0 0 275 104" width="275" height="104" fill="none" style="height: 1.5rem; margin-bottom: 0.2rem;" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M69.312 69.616C69.312 79.1733 65.984 87.28 59.328 93.936C52.7573 100.592 44.6933 103.92 35.136 103.92C25.4933 103.92 17.344 100.635 10.688 94.064C4.11733 87.408 0.832001 79.2587 0.832001 69.616C0.832001 60.0587 4.16 51.9947 10.816 45.424C17.472 38.768 25.5787 35.44 35.136 35.44C41.1947 35.44 46.8267 36.9333 52.032 39.92V0.623993H69.312V69.616ZM52.032 69.616C52.032 65.008 50.368 61.04 47.04 57.712C43.712 54.384 39.744 52.72 35.136 52.72C30.4427 52.72 26.432 54.384 23.104 57.712C19.776 60.9547 18.112 64.9227 18.112 69.616C18.112 74.3093 19.776 78.32 23.104 81.648C26.432 84.976 30.4427 86.64 35.136 86.64C39.8293 86.64 43.7973 84.976 47.04 81.648C50.368 78.32 52.032 74.3093 52.032 69.616ZM146.562 69.616C146.562 79.1733 143.234 87.28 136.578 93.936C130.007 100.592 121.943 103.92 112.386 103.92C102.743 103.92 94.594 100.635 87.938 94.064C81.3673 87.408 78.082 79.2587 78.082 69.616C78.082 60.0587 81.41 51.9947 88.066 45.424C94.722 38.768 102.829 35.44 112.386 35.44C121.943 35.44 130.007 38.768 136.578 45.424C143.234 51.9947 146.562 60.0587 146.562 69.616ZM129.282 69.616C129.282 65.008 127.618 61.04 124.29 57.712C120.962 54.384 116.994 52.72 112.386 52.72C107.693 52.72 103.682 54.384 100.354 57.712C97.026 60.9547 95.362 64.9227 95.362 69.616C95.362 74.3093 97.026 78.32 100.354 81.648C103.682 84.976 107.693 86.64 112.386 86.64C117.079 86.64 121.047 84.976 124.29 81.648C127.618 78.32 129.282 74.3093 129.282 69.616ZM213.566 94.32C206.91 100.72 199.017 103.92 189.886 103.92C180.243 103.92 172.094 100.635 165.438 94.064C158.867 87.408 155.582 79.2587 155.582 69.616C155.582 60.0587 158.91 51.9947 165.566 45.424C172.222 38.768 180.329 35.44 189.886 35.44C198.59 35.44 206.185 38.384 212.67 44.272L202.302 58.224C198.974 54.5547 194.835 52.72 189.886 52.72C185.193 52.72 181.182 54.384 177.854 57.712C174.526 60.9547 172.862 64.9227 172.862 69.616C172.862 74.3093 174.526 78.32 177.854 81.648C181.182 84.976 185.193 86.64 189.886 86.64C195.006 86.64 199.23 84.6773 202.558 80.752L213.566 94.32ZM274.05 82.416C274.05 86.512 272.685 90.224 269.954 93.552C264.493 100.208 256.727 103.408 246.658 103.152C242.647 103.067 238.253 102.171 233.474 100.464C228.781 98.7573 224.941 96.624 221.954 94.064L231.554 81.648C236.162 86 241.069 88.176 246.274 88.176H246.658C248.791 88.176 250.711 87.792 252.418 87.024C254.637 86 255.746 84.5493 255.746 82.672V82.16C255.49 80.1973 254.167 78.7893 251.778 77.936C250.839 77.7653 248.834 77.3813 245.762 76.784C241.922 76.016 238.679 75.0773 236.034 73.968C228.269 70.64 224.386 64.7947 224.386 56.432C224.386 48.4107 228.354 42.3947 236.29 38.384C239.789 36.592 243.586 35.6533 247.682 35.568C251.949 35.4827 256.386 36.208 260.994 37.744C266.285 39.536 270.039 41.8827 272.258 44.784L260.738 55.152C257.751 52.1653 254.509 50.672 251.01 50.672C245.549 50.672 242.818 52.464 242.818 56.048V56.304C242.818 58.0107 245.037 59.4613 249.474 60.656C249.815 60.7413 252.631 61.296 257.922 62.32C268.674 64.368 274.05 70.9387 274.05 82.032V82.416Z" class="docs-logo-svg" fill="#404040"/>
|
||||
<style>
|
||||
[data-theme="dark"] .docs-logo-svg {
|
||||
fill: #d4d4d4;
|
||||
}
|
||||
</style>
|
||||
</svg>
|
Before Width: | Height: | Size: 3.2 KiB |
|
@ -1,9 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="521" height="309" fill="none">
|
||||
<rect width="78.937" height="18.485" x="269" y="172.911" fill="#facc15" rx="9.242" transform="rotate(-43.075 269 172.911)"/>
|
||||
<rect width="78.937" height="18.485" x="319" y="172.911" fill="#facc15" rx="9.242" transform="rotate(-43.075 319 172.911)"/>
|
||||
<rect width="78.937" height="18.485" x="369.285" y="172.911" fill="#facc15" rx="9.242" transform="rotate(-43.075 369.285 172.911)"/>
|
||||
<rect width="28.464" height="18.485" x="419.57" y="172.911" fill="#facc15" rx="9.242" transform="rotate(-43.075 419.57 172.911)"/>
|
||||
<path fill="#facc15" d="M499.804 146.068c7.03 2.636 6.885 12.63-.219 15.061l-18.951 6.483c-5.238 1.792-10.669-2.15-10.589-7.686l.196-13.514c.081-5.535 5.624-9.318 10.808-7.374l18.755 7.03Z"/>
|
||||
<path fill="#d4d4d4" d="M141.933 101.584c.171 5.803-1.024 10.837-3.584 15.104-5.717 9.387-15.701 14.336-29.952 14.848-6.485.256-13.61-1.323-21.376-4.736l.256-19.328c1.28 1.024 2.944 2.219 4.992 3.584 3.67 2.475 7.808 3.712 12.416 3.712 12.203 0 18.304-4.352 18.304-13.056v-.256c0-4.01-2.219-7.296-6.656-9.856-2.389-1.365-6.827-2.987-13.312-4.864a137.675 137.675 0 0 1-8.32-2.816c-10.496-5.888-15.744-14.421-15.744-25.6v-.768c0-5.12 1.408-9.899 4.224-14.336 2.816-4.523 6.528-8.021 11.136-10.496 4.693-2.56 9.728-3.925 15.104-4.096 7.253-.17 14.08 1.195 20.48 4.096v18.304c-4.693-4.096-10.88-6.144-18.56-6.144-2.816 0-5.419.725-7.808 2.176-3.67 2.219-5.504 5.461-5.504 9.728 0 5.803 4.267 9.984 12.8 12.544 1.536.512 4.565 1.45 9.088 2.816 7.68 2.304 13.184 5.76 16.512 10.368 3.413 4.608 5.248 10.965 5.504 19.072Zm66.758 20.736c-6.656 6.4-14.549 9.6-23.68 9.6-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448 0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984 8.704 0 16.299 2.944 22.784 8.832l-10.368 13.952c-3.328-3.67-7.467-5.504-12.416-5.504-4.693 0-8.704 1.664-12.032 4.992-3.328 3.243-4.992 7.21-4.992 11.904 0 4.693 1.664 8.704 4.992 12.032 3.328 3.328 7.339 4.992 12.032 4.992 5.12 0 9.344-1.963 12.672-5.888l11.008 13.568Zm42.82-41.6c-4.693 0-8.704 1.664-12.032 4.992-3.328 3.243-4.992 7.21-4.992 11.904V130h-17.28V97.616c0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984v17.28Zm77.051 16.896c0 1.707-.128 3.413-.384 5.12H278.13c1.109 3.584 3.157 6.485 6.144 8.704 2.987 2.133 6.357 3.2 10.112 3.2 5.205 0 9.515-2.005 12.928-6.016l10.496 13.952c-6.571 6.229-14.379 9.344-23.424 9.344-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448 0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984s17.621 3.328 24.192 9.984c6.656 6.57 9.984 14.635 9.984 24.192Zm-19.328-7.808c-3.157-6.059-8.107-9.088-14.848-9.088-6.827 0-11.819 3.03-14.976 9.088h29.824Zm145.596 7.936c0 9.643-3.328 17.792-9.984 24.448-6.571 6.571-14.677 9.856-24.32 9.856-9.472 0-17.579-3.413-24.32-10.24-6.741 6.827-14.848 10.24-24.32 10.24-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448V63.568h17.28v34.176c0 4.693 1.664 8.704 4.992 12.032 3.328 3.328 7.339 4.992 12.032 4.992s8.661-1.664 11.904-4.992c3.328-3.328 4.992-7.339 4.992-12.032l.128-34.176h17.28v43.008h-.128c3.328 5.461 8.149 8.192 14.464 8.192 4.693 0 8.661-1.664 11.904-4.992 3.328-3.328 4.992-7.339 4.992-12.032l.128-34.176h17.28v34.176Z"/>
|
||||
<path fill="#d4d4d4" d="M56.064 181.616H26.24V230H8.832V128.624h47.232v14.848H26.24v20.096h29.824v18.048ZM147.389 230h-18.304l-3.712-9.984c-6.827 8.021-15.531 12.032-26.112 12.032-9.557 0-17.664-3.328-24.32-9.984-6.57-6.656-9.856-14.72-9.856-24.192 0-7.253 2.048-13.781 6.144-19.584 4.096-5.888 9.557-10.069 16.384-12.544 4.01-1.451 7.936-2.176 11.776-2.176 7.253 0 13.781 2.091 19.584 6.272 5.888 4.096 10.069 9.557 12.544 16.384L147.389 230Zm-31.104-32.128c0-5.973-2.432-10.624-7.296-13.952-2.816-1.963-6.059-2.944-9.728-2.944-5.973 0-10.581 2.389-13.824 7.168-2.048 2.987-3.072 6.229-3.072 9.728 0 5.888 2.432 10.496 7.296 13.824 2.987 2.048 6.187 3.072 9.6 3.072 4.693 0 8.704-1.621 12.032-4.864 3.328-3.328 4.992-7.339 4.992-12.032Zm92.015 12.544c0 4.096-1.365 7.808-4.096 11.136-5.461 6.656-13.227 9.856-23.296 9.6-4.011-.085-8.405-.981-13.184-2.688-4.693-1.707-8.533-3.84-11.52-6.4l9.6-12.416c4.608 4.352 9.515 6.528 14.72 6.528h.384c2.133 0 4.053-.384 5.76-1.152 2.219-1.024 3.328-2.475 3.328-4.352v-.512c-.256-1.963-1.579-3.371-3.968-4.224-.939-.171-2.944-.555-6.016-1.152-3.84-.768-7.083-1.707-9.728-2.816-7.765-3.328-11.648-9.173-11.648-17.536 0-8.021 3.968-14.037 11.904-18.048 3.499-1.792 7.296-2.731 11.392-2.816 4.267-.085 8.704.64 13.312 2.176 5.291 1.792 9.045 4.139 11.264 7.04l-11.52 10.368c-2.987-2.987-6.229-4.48-9.728-4.48-5.461 0-8.192 1.792-8.192 5.376v.256c0 1.707 2.219 3.157 6.656 4.352.341.085 3.157.64 8.448 1.664 10.752 2.048 16.128 8.619 16.128 19.712v.384ZM251.511 230c-9.557 0-17.664-3.285-24.32-9.856-6.656-6.656-9.984-14.763-9.984-24.32v-67.2h17.28v34.944h17.024v14.72h-17.024v17.536c0 4.693 1.664 8.704 4.992 12.032 3.328 3.243 7.339 4.864 12.032 4.864V230Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.9 KiB |
|
@ -1,9 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="521" height="309" fill="none">
|
||||
<rect width="78.937" height="18.485" x="269" y="172.911" fill="#eab308" rx="9.242" transform="rotate(-43.075 269 172.911)"/>
|
||||
<rect width="78.937" height="18.485" x="319" y="172.911" fill="#eab308" rx="9.242" transform="rotate(-43.075 319 172.911)"/>
|
||||
<rect width="78.937" height="18.485" x="369.285" y="172.911" fill="#eab308" rx="9.242" transform="rotate(-43.075 369.285 172.911)"/>
|
||||
<rect width="28.464" height="18.485" x="419.57" y="172.911" fill="#eab308" rx="9.242" transform="rotate(-43.075 419.57 172.911)"/>
|
||||
<path fill="#eab308" d="M499.804 146.068c7.03 2.636 6.885 12.63-.219 15.061l-18.951 6.483c-5.238 1.792-10.669-2.15-10.589-7.686l.196-13.514c.081-5.535 5.624-9.318 10.808-7.374l18.755 7.03Z"/>
|
||||
<path fill="#404040" d="M141.933 101.584c.171 5.803-1.024 10.837-3.584 15.104-5.717 9.387-15.701 14.336-29.952 14.848-6.485.256-13.61-1.323-21.376-4.736l.256-19.328c1.28 1.024 2.944 2.219 4.992 3.584 3.67 2.475 7.808 3.712 12.416 3.712 12.203 0 18.304-4.352 18.304-13.056v-.256c0-4.01-2.219-7.296-6.656-9.856-2.389-1.365-6.827-2.987-13.312-4.864a137.675 137.675 0 0 1-8.32-2.816c-10.496-5.888-15.744-14.421-15.744-25.6v-.768c0-5.12 1.408-9.899 4.224-14.336 2.816-4.523 6.528-8.021 11.136-10.496 4.693-2.56 9.728-3.925 15.104-4.096 7.253-.17 14.08 1.195 20.48 4.096v18.304c-4.693-4.096-10.88-6.144-18.56-6.144-2.816 0-5.419.725-7.808 2.176-3.67 2.219-5.504 5.461-5.504 9.728 0 5.803 4.267 9.984 12.8 12.544 1.536.512 4.565 1.45 9.088 2.816 7.68 2.304 13.184 5.76 16.512 10.368 3.413 4.608 5.248 10.965 5.504 19.072Zm66.758 20.736c-6.656 6.4-14.549 9.6-23.68 9.6-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448 0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984 8.704 0 16.299 2.944 22.784 8.832l-10.368 13.952c-3.328-3.67-7.467-5.504-12.416-5.504-4.693 0-8.704 1.664-12.032 4.992-3.328 3.243-4.992 7.21-4.992 11.904 0 4.693 1.664 8.704 4.992 12.032 3.328 3.328 7.339 4.992 12.032 4.992 5.12 0 9.344-1.963 12.672-5.888l11.008 13.568Zm42.82-41.6c-4.693 0-8.704 1.664-12.032 4.992-3.328 3.243-4.992 7.21-4.992 11.904V130h-17.28V97.616c0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984v17.28Zm77.051 16.896c0 1.707-.128 3.413-.384 5.12H278.13c1.109 3.584 3.157 6.485 6.144 8.704 2.987 2.133 6.357 3.2 10.112 3.2 5.205 0 9.515-2.005 12.928-6.016l10.496 13.952c-6.571 6.229-14.379 9.344-23.424 9.344-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448 0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984s17.621 3.328 24.192 9.984c6.656 6.57 9.984 14.635 9.984 24.192Zm-19.328-7.808c-3.157-6.059-8.107-9.088-14.848-9.088-6.827 0-11.819 3.03-14.976 9.088h29.824Zm145.596 7.936c0 9.643-3.328 17.792-9.984 24.448-6.571 6.571-14.677 9.856-24.32 9.856-9.472 0-17.579-3.413-24.32-10.24-6.741 6.827-14.848 10.24-24.32 10.24-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448V63.568h17.28v34.176c0 4.693 1.664 8.704 4.992 12.032 3.328 3.328 7.339 4.992 12.032 4.992s8.661-1.664 11.904-4.992c3.328-3.328 4.992-7.339 4.992-12.032l.128-34.176h17.28v43.008h-.128c3.328 5.461 8.149 8.192 14.464 8.192 4.693 0 8.661-1.664 11.904-4.992 3.328-3.328 4.992-7.339 4.992-12.032l.128-34.176h17.28v34.176Z"/>
|
||||
<path fill="#404040" d="M56.064 181.616H26.24V230H8.832V128.624h47.232v14.848H26.24v20.096h29.824v18.048ZM147.389 230h-18.304l-3.712-9.984c-6.827 8.021-15.531 12.032-26.112 12.032-9.557 0-17.664-3.328-24.32-9.984-6.57-6.656-9.856-14.72-9.856-24.192 0-7.253 2.048-13.781 6.144-19.584 4.096-5.888 9.557-10.069 16.384-12.544 4.01-1.451 7.936-2.176 11.776-2.176 7.253 0 13.781 2.091 19.584 6.272 5.888 4.096 10.069 9.557 12.544 16.384L147.389 230Zm-31.104-32.128c0-5.973-2.432-10.624-7.296-13.952-2.816-1.963-6.059-2.944-9.728-2.944-5.973 0-10.581 2.389-13.824 7.168-2.048 2.987-3.072 6.229-3.072 9.728 0 5.888 2.432 10.496 7.296 13.824 2.987 2.048 6.187 3.072 9.6 3.072 4.693 0 8.704-1.621 12.032-4.864 3.328-3.328 4.992-7.339 4.992-12.032Zm92.015 12.544c0 4.096-1.365 7.808-4.096 11.136-5.461 6.656-13.227 9.856-23.296 9.6-4.011-.085-8.405-.981-13.184-2.688-4.693-1.707-8.533-3.84-11.52-6.4l9.6-12.416c4.608 4.352 9.515 6.528 14.72 6.528h.384c2.133 0 4.053-.384 5.76-1.152 2.219-1.024 3.328-2.475 3.328-4.352v-.512c-.256-1.963-1.579-3.371-3.968-4.224-.939-.171-2.944-.555-6.016-1.152-3.84-.768-7.083-1.707-9.728-2.816-7.765-3.328-11.648-9.173-11.648-17.536 0-8.021 3.968-14.037 11.904-18.048 3.499-1.792 7.296-2.731 11.392-2.816 4.267-.085 8.704.64 13.312 2.176 5.291 1.792 9.045 4.139 11.264 7.04l-11.52 10.368c-2.987-2.987-6.229-4.48-9.728-4.48-5.461 0-8.192 1.792-8.192 5.376v.256c0 1.707 2.219 3.157 6.656 4.352.341.085 3.157.64 8.448 1.664 10.752 2.048 16.128 8.619 16.128 19.712v.384ZM251.511 230c-9.557 0-17.664-3.285-24.32-9.856-6.656-6.656-9.984-14.763-9.984-24.32v-67.2h17.28v34.944h17.024v14.72h-17.024v17.536c0 4.693 1.664 8.704 4.992 12.032 3.328 3.243 7.339 4.864 12.032 4.864V230Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.9 KiB |
|
@ -1,9 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" width="521" height="226" fill="none">
|
||||
<rect width="78.937" height="18.485" x="269" y="154.911" fill="#facc15" rx="9.242" transform="rotate(-43.075 269 154.911)"/>
|
||||
<rect width="78.937" height="18.485" x="319" y="154.911" fill="#facc15" rx="9.242" transform="rotate(-43.075 319 154.911)"/>
|
||||
<rect width="78.937" height="18.485" x="369.285" y="154.911" fill="#facc15" rx="9.242" transform="rotate(-43.075 369.285 154.911)"/>
|
||||
<rect width="28.464" height="18.485" x="419.57" y="154.911" fill="#facc15" rx="9.242" transform="rotate(-43.075 419.57 154.911)"/>
|
||||
<path fill="#facc15" d="M499.804 128.068c7.03 2.636 6.885 12.63-.219 15.061l-18.951 6.483c-5.238 1.792-10.669-2.15-10.589-7.686l.196-13.514c.081-5.535 5.624-9.318 10.808-7.374l18.755 7.03Z"/>
|
||||
<path fill="#d4d4d4" d="M141.808 83.584c.171 5.803-1.024 10.837-3.584 15.104-5.717 9.387-15.701 14.336-29.952 14.848-6.485.256-13.61-1.323-21.376-4.736l.256-19.328c1.28 1.024 2.944 2.219 4.992 3.584 3.67 2.475 7.808 3.712 12.416 3.712 12.203 0 18.304-4.352 18.304-13.056v-.256c0-4.01-2.219-7.296-6.656-9.856-2.389-1.365-6.827-2.987-13.312-4.864a137.675 137.675 0 0 1-8.32-2.816c-10.496-5.888-15.744-14.421-15.744-25.6v-.768c0-5.12 1.408-9.899 4.224-14.336 2.816-4.523 6.528-8.021 11.136-10.496 4.693-2.56 9.728-3.925 15.104-4.096 7.253-.17 14.08 1.195 20.48 4.096v18.304c-4.693-4.096-10.88-6.144-18.56-6.144-2.816 0-5.419.725-7.808 2.176-3.67 2.219-5.504 5.461-5.504 9.728 0 5.803 4.267 9.984 12.8 12.544 1.536.512 4.565 1.45 9.088 2.816 7.68 2.304 13.184 5.76 16.512 10.368 3.413 4.608 5.248 10.965 5.504 19.072Zm66.758 20.736c-6.656 6.4-14.549 9.6-23.68 9.6-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448 0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984 8.704 0 16.299 2.944 22.784 8.832l-10.368 13.952c-3.328-3.67-7.467-5.504-12.416-5.504-4.693 0-8.704 1.664-12.032 4.992-3.328 3.243-4.992 7.21-4.992 11.904 0 4.693 1.664 8.704 4.992 12.032 3.328 3.328 7.339 4.992 12.032 4.992 5.12 0 9.344-1.963 12.672-5.888l11.008 13.568Zm42.82-41.6c-4.693 0-8.704 1.664-12.032 4.992-3.328 3.243-4.992 7.21-4.992 11.904V112h-17.28V79.616c0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984v17.28Zm77.051 16.896a34.47 34.47 0 0 1-.384 5.12h-50.048c1.109 3.584 3.157 6.485 6.144 8.704 2.987 2.133 6.357 3.2 10.112 3.2 5.205 0 9.515-2.005 12.928-6.016l10.496 13.952c-6.571 6.229-14.379 9.344-23.424 9.344-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448 0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984s17.621 3.328 24.192 9.984c6.656 6.57 9.984 14.635 9.984 24.192Zm-19.328-7.808c-3.157-6.059-8.107-9.088-14.848-9.088-6.827 0-11.819 3.03-14.976 9.088h29.824Zm145.596 7.936c0 9.643-3.328 17.792-9.984 24.448-6.571 6.571-14.677 9.856-24.32 9.856-9.472 0-17.579-3.413-24.32-10.24-6.741 6.827-14.848 10.24-24.32 10.24-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448V45.568h17.28v34.176c0 4.693 1.664 8.704 4.992 12.032 3.328 3.328 7.339 4.992 12.032 4.992s8.661-1.664 11.904-4.992c3.328-3.328 4.992-7.339 4.992-12.032l.128-34.176h17.28v43.008h-.128c3.328 5.461 8.149 8.192 14.464 8.192 4.693 0 8.661-1.664 11.904-4.992 3.328-3.328 4.992-7.339 4.992-12.032l.128-34.176h17.28v34.176Z"/>
|
||||
<path fill="#d4d4d4" d="M56.064 163.616H26.24V212H8.832V110.624h47.232v14.848H26.24v20.096h29.824v18.048ZM147.389 212h-18.304l-3.712-9.984c-6.827 8.021-15.531 12.032-26.112 12.032-9.557 0-17.664-3.328-24.32-9.984-6.57-6.656-9.856-14.72-9.856-24.192 0-7.253 2.048-13.781 6.144-19.584 4.096-5.888 9.557-10.069 16.384-12.544 4.01-1.451 7.936-2.176 11.776-2.176 7.253 0 13.781 2.091 19.584 6.272 5.888 4.096 10.069 9.557 12.544 16.384L147.389 212Zm-31.104-32.128c0-5.973-2.432-10.624-7.296-13.952-2.816-1.963-6.059-2.944-9.728-2.944-5.973 0-10.581 2.389-13.824 7.168-2.048 2.987-3.072 6.229-3.072 9.728 0 5.888 2.432 10.496 7.296 13.824 2.987 2.048 6.187 3.072 9.6 3.072 4.693 0 8.704-1.621 12.032-4.864 3.328-3.328 4.992-7.339 4.992-12.032Zm92.015 12.544c0 4.096-1.365 7.808-4.096 11.136-5.461 6.656-13.227 9.856-23.296 9.6-4.011-.085-8.405-.981-13.184-2.688-4.693-1.707-8.533-3.84-11.52-6.4l9.6-12.416c4.608 4.352 9.515 6.528 14.72 6.528h.384c2.133 0 4.053-.384 5.76-1.152 2.219-1.024 3.328-2.475 3.328-4.352v-.512c-.256-1.963-1.579-3.371-3.968-4.224-.939-.171-2.944-.555-6.016-1.152-3.84-.768-7.083-1.707-9.728-2.816-7.765-3.328-11.648-9.173-11.648-17.536 0-8.021 3.968-14.037 11.904-18.048 3.499-1.792 7.296-2.731 11.392-2.816 4.267-.085 8.704.64 13.312 2.176 5.291 1.792 9.045 4.139 11.264 7.04l-11.52 10.368c-2.987-2.987-6.229-4.48-9.728-4.48-5.461 0-8.192 1.792-8.192 5.376v.256c0 1.707 2.219 3.157 6.656 4.352.341.085 3.157.64 8.448 1.664 10.752 2.048 16.128 8.619 16.128 19.712v.384ZM251.511 212c-9.557 0-17.664-3.285-24.32-9.856-6.656-6.656-9.984-14.763-9.984-24.32v-67.2h17.28v34.944h17.024v14.72h-17.024v17.536c0 4.693 1.664 8.704 4.992 12.032 3.328 3.243 7.339 4.864 12.032 4.864V212Z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.9 KiB |
|
@ -1,17 +0,0 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 521 226" width="521" height="226" style="height: 2.5rem;" fill="none">
|
||||
<rect width="78.937" height="18.485" x="269" y="154.911" fill="#eab308" rx="9.242" transform="rotate(-43.075 269 154.911)" class="main-logo-screw-svg"/>
|
||||
<rect width="78.937" height="18.485" x="319" y="154.911" fill="#eab308" rx="9.242" transform="rotate(-43.075 319 154.911)" class="main-logo-screw-svg"/>
|
||||
<rect width="78.937" height="18.485" x="369.285" y="154.911" fill="#eab308" rx="9.242" transform="rotate(-43.075 369.285 154.911)" class="main-logo-screw-svg"/>
|
||||
<rect width="28.464" height="18.485" x="419.57" y="154.911" fill="#eab308" rx="9.242" transform="rotate(-43.075 419.57 154.911)" class="main-logo-screw-svg"/>
|
||||
<path fill="#eab308" class="main-logo-screw-svg" d="M499.804 128.068c7.03 2.636 6.885 12.63-.219 15.061l-18.951 6.483c-5.238 1.792-10.669-2.15-10.589-7.686l.196-13.514c.081-5.535 5.624-9.318 10.808-7.374l18.755 7.03Z"/>
|
||||
<path fill="#404040" class="main-logo-svg" d="M141.808 83.584c.171 5.803-1.024 10.837-3.584 15.104-5.717 9.387-15.701 14.336-29.952 14.848-6.485.256-13.61-1.323-21.376-4.736l.256-19.328c1.28 1.024 2.944 2.219 4.992 3.584 3.67 2.475 7.808 3.712 12.416 3.712 12.203 0 18.304-4.352 18.304-13.056v-.256c0-4.01-2.219-7.296-6.656-9.856-2.389-1.365-6.827-2.987-13.312-4.864a137.675 137.675 0 0 1-8.32-2.816c-10.496-5.888-15.744-14.421-15.744-25.6v-.768c0-5.12 1.408-9.899 4.224-14.336 2.816-4.523 6.528-8.021 11.136-10.496 4.693-2.56 9.728-3.925 15.104-4.096 7.253-.17 14.08 1.195 20.48 4.096v18.304c-4.693-4.096-10.88-6.144-18.56-6.144-2.816 0-5.419.725-7.808 2.176-3.67 2.219-5.504 5.461-5.504 9.728 0 5.803 4.267 9.984 12.8 12.544 1.536.512 4.565 1.45 9.088 2.816 7.68 2.304 13.184 5.76 16.512 10.368 3.413 4.608 5.248 10.965 5.504 19.072Zm66.758 20.736c-6.656 6.4-14.549 9.6-23.68 9.6-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448 0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984 8.704 0 16.299 2.944 22.784 8.832l-10.368 13.952c-3.328-3.67-7.467-5.504-12.416-5.504-4.693 0-8.704 1.664-12.032 4.992-3.328 3.243-4.992 7.21-4.992 11.904 0 4.693 1.664 8.704 4.992 12.032 3.328 3.328 7.339 4.992 12.032 4.992 5.12 0 9.344-1.963 12.672-5.888l11.008 13.568Zm42.82-41.6c-4.693 0-8.704 1.664-12.032 4.992-3.328 3.243-4.992 7.21-4.992 11.904V112h-17.28V79.616c0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984v17.28Zm77.051 16.896a34.47 34.47 0 0 1-.384 5.12h-50.048c1.109 3.584 3.157 6.485 6.144 8.704 2.987 2.133 6.357 3.2 10.112 3.2 5.205 0 9.515-2.005 12.928-6.016l10.496 13.952c-6.571 6.229-14.379 9.344-23.424 9.344-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448 0-9.557 3.328-17.621 9.984-24.192 6.656-6.656 14.763-9.984 24.32-9.984s17.621 3.328 24.192 9.984c6.656 6.57 9.984 14.635 9.984 24.192Zm-19.328-7.808c-3.157-6.059-8.107-9.088-14.848-9.088-6.827 0-11.819 3.03-14.976 9.088h29.824Zm145.596 7.936c0 9.643-3.328 17.792-9.984 24.448-6.571 6.571-14.677 9.856-24.32 9.856-9.472 0-17.579-3.413-24.32-10.24-6.741 6.827-14.848 10.24-24.32 10.24-9.643 0-17.792-3.285-24.448-9.856-6.571-6.656-9.856-14.805-9.856-24.448V45.568h17.28v34.176c0 4.693 1.664 8.704 4.992 12.032 3.328 3.328 7.339 4.992 12.032 4.992s8.661-1.664 11.904-4.992c3.328-3.328 4.992-7.339 4.992-12.032l.128-34.176h17.28v43.008h-.128c3.328 5.461 8.149 8.192 14.464 8.192 4.693 0 8.661-1.664 11.904-4.992 3.328-3.328 4.992-7.339 4.992-12.032l.128-34.176h17.28v34.176Z"/>
|
||||
<path fill="#404040" class="main-logo-svg" d="M56.064 163.616H26.24V212H8.832V110.624h47.232v14.848H26.24v20.096h29.824v18.048ZM147.389 212h-18.304l-3.712-9.984c-6.827 8.021-15.531 12.032-26.112 12.032-9.557 0-17.664-3.328-24.32-9.984-6.57-6.656-9.856-14.72-9.856-24.192 0-7.253 2.048-13.781 6.144-19.584 4.096-5.888 9.557-10.069 16.384-12.544 4.01-1.451 7.936-2.176 11.776-2.176 7.253 0 13.781 2.091 19.584 6.272 5.888 4.096 10.069 9.557 12.544 16.384L147.389 212Zm-31.104-32.128c0-5.973-2.432-10.624-7.296-13.952-2.816-1.963-6.059-2.944-9.728-2.944-5.973 0-10.581 2.389-13.824 7.168-2.048 2.987-3.072 6.229-3.072 9.728 0 5.888 2.432 10.496 7.296 13.824 2.987 2.048 6.187 3.072 9.6 3.072 4.693 0 8.704-1.621 12.032-4.864 3.328-3.328 4.992-7.339 4.992-12.032Zm92.015 12.544c0 4.096-1.365 7.808-4.096 11.136-5.461 6.656-13.227 9.856-23.296 9.6-4.011-.085-8.405-.981-13.184-2.688-4.693-1.707-8.533-3.84-11.52-6.4l9.6-12.416c4.608 4.352 9.515 6.528 14.72 6.528h.384c2.133 0 4.053-.384 5.76-1.152 2.219-1.024 3.328-2.475 3.328-4.352v-.512c-.256-1.963-1.579-3.371-3.968-4.224-.939-.171-2.944-.555-6.016-1.152-3.84-.768-7.083-1.707-9.728-2.816-7.765-3.328-11.648-9.173-11.648-17.536 0-8.021 3.968-14.037 11.904-18.048 3.499-1.792 7.296-2.731 11.392-2.816 4.267-.085 8.704.64 13.312 2.176 5.291 1.792 9.045 4.139 11.264 7.04l-11.52 10.368c-2.987-2.987-6.229-4.48-9.728-4.48-5.461 0-8.192 1.792-8.192 5.376v.256c0 1.707 2.219 3.157 6.656 4.352.341.085 3.157.64 8.448 1.664 10.752 2.048 16.128 8.619 16.128 19.712v.384ZM251.511 212c-9.557 0-17.664-3.285-24.32-9.856-6.656-6.656-9.984-14.763-9.984-24.32v-67.2h17.28v34.944h17.024v14.72h-17.024v17.536c0 4.693 1.664 8.704 4.992 12.032 3.328 3.243 7.339 4.864 12.032 4.864V212Z"/>
|
||||
<style>
|
||||
[data-theme="dark"] .main-logo-svg {
|
||||
fill: #d4d4d4;
|
||||
}
|
||||
[data-theme="dark"] .main-logo-screw-svg {
|
||||
fill: #facc15;
|
||||
}
|
||||
</style>
|
||||
</svg>
|
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 153 KiB |
Before Width: | Height: | Size: 69 KiB |
|
@ -3,6 +3,7 @@
|
|||
import MainLayout from "@/layouts/MainLayout.astro";
|
||||
import ContactSection from "@components/sections/misc/ContactSection.astro";
|
||||
import { SITE } from "@data/constants";
|
||||
import { websiteStructuredDescription } from "../data_files/constants";
|
||||
|
||||
const pageTitle: string = `Contact | ${SITE.title}`;
|
||||
---
|
||||
|
@ -13,18 +14,12 @@ const pageTitle: string = `Contact | ${SITE.title}`;
|
|||
structuredData={{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"@id": "https://screwfast.uk/contact",
|
||||
"url": "https://screwfast.uk/contact",
|
||||
"name": "Contact Us | ScrewFast",
|
||||
"@id": "https://achat-maison-albi.fr/contact/",
|
||||
"url": "https://achat-maison-albi.fr/contact/",
|
||||
"name": "Contactez-nous pour acheter une belle maison indivivuelle avec piscine à Albi",
|
||||
"description":
|
||||
"Have questions or want to discuss a project? Reach out, and let's craft the perfect solution with our tools and services.",
|
||||
"isPartOf": {
|
||||
"@type": "WebSite",
|
||||
"url": "https://screwfast.uk",
|
||||
"name": "ScrewFast",
|
||||
"description":
|
||||
"ScrewFast offers top-tier hardware tools and expert construction services to meet all your project needs.",
|
||||
},
|
||||
"Nous sommes joignables par e-mail ou par téléphone",
|
||||
"isPartOf": websiteStructuredDescription,
|
||||
"inLanguage": "fr-FR"
|
||||
}}
|
||||
>
|
||||
|
|
|
@ -6,11 +6,10 @@ import DiagnosticsSection from "../components/sections/landing/DiagnosticsSectio
|
|||
import FeaturesGeneral from "@components/sections/features/FeaturesGeneral.astro";
|
||||
import FeaturesNavs from "@components/sections/features/FeaturesNavs.astro";
|
||||
import TestimonialsSection from "@components/sections/testimonials/TestimonialsSection.astro";
|
||||
import BureauSection from "../components/sections/pricing/BureauSection.astro";
|
||||
import BureauSection from "../components/sections/BureauSection.astro";
|
||||
import FAQ from "@components/sections/misc/FAQ.astro";
|
||||
import faqs from "@data/faqs.json";
|
||||
import features from "@data/features.json";
|
||||
import pricing from "@data/pricing.json";
|
||||
import photoCouloirEnfants from "@images/couloir-acces-espace-enfants.jpg";
|
||||
import photoRenovation2 from "@images/renovation-qualite.jpg";
|
||||
import photoFondDImpasse from "@images/fond-d-impasse-albi.jpg";
|
||||
|
@ -28,9 +27,6 @@ import photoVueZenith from "@images/vue-zenith.jpg";
|
|||
primaryBtnURL="/pieces"
|
||||
secondaryBtn="Nous contacter"
|
||||
secondaryBtnURL="/contact"
|
||||
rating=`<span class="font-bold">4.8</span> / 5`
|
||||
starCount={4}
|
||||
reviews=`From Over <span class="font-bold">12.8k</span> Reviews`
|
||||
src={photoVueZenith}
|
||||
alt="Photo aérienne de la maison"
|
||||
/>
|
||||
|
@ -94,7 +90,7 @@ import photoVueZenith from "@images/vue-zenith.jpg";
|
|||
|
||||
<TestimonialsSection
|
||||
title="La maison en chiffres"
|
||||
subTitle="At ScrewFast, we ensure a swift start with instant account setup. Experience the speed of construction redefined."
|
||||
subTitle="Parce que même quand on aime, il faut compter !"
|
||||
;
|
||||
testimonials={[
|
||||
{
|
||||
|
@ -129,8 +125,7 @@ import photoVueZenith from "@images/vue-zenith.jpg";
|
|||
]}
|
||||
/>
|
||||
|
||||
<BureauSection pricing={pricing} />
|
||||
|
||||
<BureauSection />
|
||||
|
||||
<DiagnosticsSection />
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
import type { APIRoute, ImageMetadata } from "astro";
|
||||
import { getImage } from "astro:assets";
|
||||
import icon from "@images/favicon.png";
|
||||
import maskableIcon from "@images/icon-maskable.png";
|
||||
|
||||
interface Favicon {
|
||||
purpose: "any" | "maskable" | "monochrome";
|
||||
|
@ -16,11 +15,6 @@ const favicons: Favicon[] = [
|
|||
src: icon,
|
||||
sizes,
|
||||
},
|
||||
{
|
||||
purpose: "maskable",
|
||||
src: maskableIcon,
|
||||
sizes,
|
||||
},
|
||||
];
|
||||
|
||||
export const GET: APIRoute = async () => {
|
||||
|
@ -44,8 +38,8 @@ export const GET: APIRoute = async () => {
|
|||
);
|
||||
|
||||
const manifest = {
|
||||
short_name: "ScrewFast",
|
||||
name: "ScrewFast",
|
||||
short_name: "Achat maison Albi",
|
||||
name: "Maison indiduelle de 177m2 à vendre à Albi",
|
||||
icons,
|
||||
display: "minimal-ui",
|
||||
id: "/",
|
||||
|
|
|
@ -11,7 +11,7 @@ import photoChambreEnfantOuest from "@images/chambre-enfant-ouest.jpg";
|
|||
import photoParentale from "@images/chambre-parentale.jpg";
|
||||
import photoChambre2 from "@images/chambre-2.jpg";
|
||||
import { websiteStructuredDescription } from "../data_files/constants";
|
||||
import BureauSection from "../components/sections/pricing/BureauSection.astro";
|
||||
import BureauSection from "../components/sections/BureauSection.astro";
|
||||
|
||||
interface Article {
|
||||
isRightSection: boolean;
|
||||
|
@ -38,9 +38,9 @@ const articles: Article[] = [
|
|||
"Majoritairement de plein pied, la maison est organisée autour de sa grande terrasse orientée plein sud et accessible depuis toutes les pièces de vie, sans vis-à-vis.",
|
||||
single: false,
|
||||
imgOne: photoSalonCheminee,
|
||||
imgOneAlt: "Blueprints and digital tablet with construction plans.",
|
||||
imgOneAlt: "Vue du salon depuis la cuisine, avec la cheminée au fond",
|
||||
imgTwo: photoSalonCuisine,
|
||||
imgTwoAlt: "Person working in the office",
|
||||
imgTwoAlt: "Vue du salon depuis la cheminée, avec la cuisine ouverte au fond",
|
||||
},
|
||||
{
|
||||
isRightSection: false,
|
||||
|
@ -48,7 +48,7 @@ const articles: Article[] = [
|
|||
subTitle:
|
||||
"Refaite en 2017, la cuisine allie plan de travail en bois et nombreux rangements. Elle est équipée de plaques à induction, d’une hotte et d’un four Bosch.",
|
||||
img: photoSalonCheminee,
|
||||
imgAlt: "Blueprints and digital tablet with construction plans.",
|
||||
imgAlt: "Cuisine ouverte, toute équipée",
|
||||
},
|
||||
{
|
||||
isRightSection: true,
|
||||
|
@ -79,9 +79,9 @@ const articles: Article[] = [
|
|||
"Un passage par la salle de jeu permet de rejoindre l’espace enfants : 2 grandes chambres plein sud, reliées par une salle d’eau commune, et par un dégagement qui offre grands placards et toilette. ",
|
||||
single: false,
|
||||
imgOne: photoChambreEnfantOuest,
|
||||
imgOneAlt: "Construction workers orchestrating a project",
|
||||
imgOneAlt: "Photos de la chambre enfant côté ouest, qui donne sur le jardin",
|
||||
imgTwo: photoChambreEnfantEst,
|
||||
imgTwoAlt: "Aerial view of managed construction",
|
||||
imgTwoAlt: "Photo de la chambre enfant côté est, qui donne sur le jardin et l’impasse",
|
||||
},
|
||||
{
|
||||
isRightSection: false,
|
||||
|
|
|
@ -1,32 +1,26 @@
|
|||
// https://docs.astro.build/en/guides/integrations-guide/sitemap/#usage
|
||||
import type { APIRoute } from 'astro';
|
||||
import type { APIRoute } from "astro";
|
||||
|
||||
const robotsTxt = `
|
||||
User-agent: Googlebot
|
||||
Disallow:
|
||||
Allow: /
|
||||
Crawl-delay: 10
|
||||
|
||||
User-agent: Yandex
|
||||
Disallow:
|
||||
Allow: /
|
||||
Crawl-delay: 2
|
||||
|
||||
User-agent: archive.org_bot
|
||||
Disallow:
|
||||
Allow: /
|
||||
Crawl-delay: 2
|
||||
|
||||
User-agent: *
|
||||
Disallow: /
|
||||
|
||||
Sitemap: ${new URL('sitemap-index.xml', import.meta.env.SITE).href}
|
||||
Sitemap: ${new URL("sitemap-index.xml", import.meta.env.SITE).href}
|
||||
`.trim();
|
||||
|
||||
export const GET: APIRoute = () => {
|
||||
return new Response(robotsTxt, {
|
||||
headers: {
|
||||
'Content-Type': 'text/plain; charset=utf-8',
|
||||
"Content-Type": "text/plain; charset=utf-8",
|
||||
},
|
||||
});
|
||||
};
|
|
@ -1,4 +0,0 @@
|
|||
export const languages = {
|
||||
en: "English",
|
||||
fr: "Français",
|
||||
};
|