Compare commits

..

5 Commits

Author SHA1 Message Date
Loretta a29035b196 Merge branch 'main' into FruitBank_v0.0.8.0 2026-03-28 16:22:21 +01:00
Loretta 2303cc5736 Update DLL HintPaths to use $(Configuration); prod DB switch
Replaced hardcoded Debug paths in all .csproj files with $(Configuration) for AyCode and FruitBank DLL references, enabling correct DLL resolution for any build configuration. Switched appsettings.json connection string to use the FruitBank_PROD database. Added a null check for StockTaking in StockSignalREndpointServer.cs to prevent possible null reference exceptions. Noted some encoding issues in .csproj comments and copyright fields. No other functional changes.
2026-03-24 18:30:42 +01:00
Loretta f5ff1e1ded Add serialization attributes and update to PROD config
Annotated core entities with AcBinarySerializable and ToonDescription for improved serialization and documentation. Updated appsettings.json to use the production database. Changed solution file to target Visual Studio 17. Added necessary using statements and metadata for entity classes.
2026-03-20 17:06:48 +01:00
Adam d3180c8c45 Merge branch 'main' of https://git.aycode.com/Adam/FruitBank 2026-03-10 18:10:21 +01:00
Adam e642d196e9 targonca 2026-03-10 18:10:04 +01:00
131 changed files with 533 additions and 126 deletions

View File

@ -1,7 +1,7 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 18 # Visual Studio Version 17
VisualStudioVersion = 18.0.11222.15 VisualStudioVersion = 17.14.36804.6
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{E4ACA93B-D3DE-4557-B069-F1DB42925A4B}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Libraries", "Libraries", "{E4ACA93B-D3DE-4557-B069-F1DB42925A4B}"
EndProject EndProject

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Copyright>Copyright © Nop Solutions, Ltd</Copyright> <Copyright>Copyright © Nop Solutions, Ltd</Copyright>
<Company>Nop Solutions, Ltd</Company> <Company>Nop Solutions, Ltd</Company>
<Authors>Nop Solutions, Ltd</Authors> <Authors>Nop Solutions, Ltd</Authors>
<Version>4.80</Version> <Version>4.80</Version>
@ -34,10 +34,10 @@
<ItemGroup> <ItemGroup>
<Reference Include="AyCode.Core"> <Reference Include="AyCode.Core">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Interfaces"> <Reference Include="AyCode.Interfaces">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Interfaces.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Interfaces.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Copyright>Copyright © Nop Solutions, Ltd</Copyright> <Copyright>Copyright © Nop Solutions, Ltd</Copyright>
<Company>Nop Solutions, Ltd</Company> <Company>Nop Solutions, Ltd</Company>
<Authors>Nop Solutions, Ltd</Authors> <Authors>Nop Solutions, Ltd</Authors>
<Version>4.80</Version> <Version>4.80</Version>
@ -30,10 +30,10 @@
<ItemGroup> <ItemGroup>
<Reference Include="AyCode.Core"> <Reference Include="AyCode.Core">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Interfaces"> <Reference Include="AyCode.Interfaces">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Interfaces.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Interfaces.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Copyright>Copyright © Nop Solutions, Ltd</Copyright> <Copyright>Copyright © Nop Solutions, Ltd</Copyright>
<Company>Nop Solutions, Ltd</Company> <Company>Nop Solutions, Ltd</Company>
<Authors>Nop Solutions, Ltd</Authors> <Authors>Nop Solutions, Ltd</Authors>
<Version>4.80</Version> <Version>4.80</Version>
@ -36,10 +36,10 @@
<ItemGroup> <ItemGroup>
<Reference Include="AyCode.Core"> <Reference Include="AyCode.Core">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Interfaces"> <Reference Include="AyCode.Interfaces">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Interfaces.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Interfaces.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<Copyright>Copyright © Nop Solutions, Ltd</Copyright> <Copyright>Copyright © Nop Solutions, Ltd</Copyright>
<Company>Nop Solutions, Ltd</Company> <Company>Nop Solutions, Ltd</Company>
<Authors>Nop Solutions, Ltd</Authors> <Authors>Nop Solutions, Ltd</Authors>
<Version>4.80</Version> <Version>4.80</Version>
@ -27,10 +27,10 @@
<ItemGroup> <ItemGroup>
<Reference Include="AyCode.Core"> <Reference Include="AyCode.Core">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Interfaces"> <Reference Include="AyCode.Interfaces">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Interfaces.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Interfaces.dll</HintPath>
</Reference> </Reference>
</ItemGroup> </ItemGroup>

View File

@ -1,6 +1,6 @@
{ {
"ConnectionStrings": { "ConnectionStrings": {
"ConnectionString": "Data Source=195.26.231.218;Initial Catalog=FruitBank_DEV;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=v6f_?xNfg9N1;Trust Server Certificate=True", "ConnectionString": "Data Source=195.26.231.218;Initial Catalog=FruitBank_PROD;Integrated Security=False;Persist Security Info=False;User ID=sa;Password=v6f_?xNfg9N1;Trust Server Certificate=True",
"DataProvider": "sqlserver", "DataProvider": "sqlserver",
"SQLCommandTimeout": null, "SQLCommandTimeout": null,
"WithNoLock": false "WithNoLock": false

View File

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk.Web"> <Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup> <PropertyGroup>
<Copyright>Copyright © Nop Solutions, Ltd</Copyright> <Copyright>Copyright © Nop Solutions, Ltd</Copyright>
<Company>Nop Solutions, Ltd</Company> <Company>Nop Solutions, Ltd</Company>
<Authors>Nop Solutions, Ltd</Authors> <Authors>Nop Solutions, Ltd</Authors>
<Version>4.80</Version> <Version>4.80</Version>
@ -57,31 +57,31 @@
<PackageReference Include="MessagePack" Version="3.1.4" /> <PackageReference Include="MessagePack" Version="3.1.4" />
<PackageReference Include="PdfPig" Version="0.1.11" /> <PackageReference Include="PdfPig" Version="0.1.11" />
<Reference Include="AyCode.Core"> <Reference Include="AyCode.Core">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Core.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Core.Server"> <Reference Include="AyCode.Core.Server">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Core.Server.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Core.Server.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Entities"> <Reference Include="AyCode.Entities">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Entities.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Entities.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Entities.Server"> <Reference Include="AyCode.Entities.Server">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Entities.Server.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Entities.Server.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Interfaces"> <Reference Include="AyCode.Interfaces">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Interfaces.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Interfaces.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Interfaces.Server"> <Reference Include="AyCode.Interfaces.Server">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Interfaces.Server.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Interfaces.Server.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Services"> <Reference Include="AyCode.Services">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Services.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Services.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Services.Server"> <Reference Include="AyCode.Services.Server">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Services.Server.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Services.Server.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Utils"> <Reference Include="AyCode.Utils">
<HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\Debug\net9.0\AyCode.Utils.dll</HintPath> <HintPath>..\..\..\..\..\Aycode\Source\AyCode.Core\AyCode.Services.Server\bin\FruitBank\$(Configuration)\net9.0\AyCode.Utils.dll</HintPath>
</Reference> </Reference>
<None Update="Areas\Admin\sitemap.config"> <None Update="Areas\Admin\sitemap.config">
@ -94,7 +94,7 @@
https://github.com/aspnet/websdk/commit/7e6b193ddcf1eec5c0a88a9748c626775555273e#diff-edf5a48ed0d4aa5a4289cb857bf46a04 https://github.com/aspnet/websdk/commit/7e6b193ddcf1eec5c0a88a9748c626775555273e#diff-edf5a48ed0d4aa5a4289cb857bf46a04
Therefore, we restore the standard configuration behavior (there was no copy to the output directory) Therefore, we restore the standard configuration behavior (there was no copy to the output directory)
in order to avoid the "Duplicate dll" error during publication. in order to avoid the "Duplicate dll" error during publication.
We can also use “ExcludeConfigFilesFromBuildOutput” according to https://github.com/aspnet/AspNetCore/issues/14017 --> We can also use “ExcludeConfigFilesFromBuildOutput” according to https://github.com/aspnet/AspNetCore/issues/14017 -->
<Content Update="**\*.config;**\*.json" CopyToOutputDirectory="Never" CopyToPublishDirectory="PreserveNewest" /> <Content Update="**\*.config;**\*.json" CopyToOutputDirectory="Never" CopyToPublishDirectory="PreserveNewest" />
</ItemGroup> </ItemGroup>

View File

@ -7539,9 +7539,28 @@ html.lenis, html.lenis body {
============================================= */ ============================================= */
.section-forklift { .section-forklift {
position: relative; position: relative;
overflow: hidden; background: #1d4223;
background: var(--dark); margin-bottom: 0;
min-height: 100vh; overflow-x: clip;
}
/* Kill default nopCommerce spacing after forklift so it touches the footer */
.html-home-page .page.home-page {
margin-bottom: 0;
}
.html-home-page .center-1 {
margin-bottom: 0;
}
.html-home-page .page-body {
margin-bottom: 0;
padding-bottom: 0;
}
.html-home-page .master-wrapper-content {
margin-bottom: 0;
padding-bottom: 0;
}
.html-home-page .master-column-wrapper {
margin-bottom: 0;
} }
.forklift-scroll-container { .forklift-scroll-container {
@ -7561,15 +7580,19 @@ html.lenis, html.lenis body {
} }
.forklift-visual { .forklift-visual {
flex: 1; flex: 1 1 50%;
max-width: 500px; max-width: 50%;
display: flex; display: flex;
align-items: flex-end; align-items: center;
justify-content: center; justify-content: center;
height: 70vh;
position: relative; position: relative;
} }
#forkliftCanvas {
width: 100%;
height: auto;
}
.forklift-body { .forklift-body {
position: relative; position: relative;
width: 200px; width: 200px;
@ -7647,47 +7670,238 @@ html.lenis, html.lenis body {
} }
.stats-panel { .stats-panel {
flex: 1; flex: 1 1 40%;
max-width: 500px; max-width: 440px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 40px; gap: 48px;
} }
.stat-item { .stat-item {
opacity: 0; opacity: 0;
transform: translateY(40px); transform: translateY(40px);
position: relative;
padding-left: 24px;
border-left: 3px solid var(--active-color);
} }
.stat-number { .stat-number {
font-family: 'Playfair Display', serif; font-family: 'Playfair Display', serif;
font-size: clamp(36px, 5vw, 64px); font-size: clamp(40px, 5.5vw, 72px);
font-weight: 700; font-weight: 700;
color: var(--active-color); color: #fff;
line-height: 1; line-height: 1;
margin-bottom: 6px; margin-bottom: 8px;
letter-spacing: -1px;
}
.stat-number .stat-counter {
color: var(--active-color);
} }
.stat-label { .stat-label {
font-size: clamp(14px, 1.8vw, 18px); font-family: 'DM Sans', sans-serif;
color: rgba(255,255,255,0.6); font-size: clamp(14px, 1.6vw, 17px);
letter-spacing: 1px; color: rgba(255,255,255,0.45);
letter-spacing: 2px;
text-transform: uppercase;
} }
/* ============================================= /* =============================================
HOMEPAGE PRODUCTS SECTION (warm bg) IMPORT CATEGORIES SECTION
============================================= */ ============================================= */
.homepage-products-section { .fb-categories {
background: var(--warm-bg); background: var(--warm-bg);
position: relative; position: relative;
z-index: 5; z-index: 5;
padding: 60px 0 40px; padding: 80px 0 100px;
} }
/* Product cards need white bg to match photo backgrounds */ .fb-categories-header {
.homepage-products-section .item-box { text-align: center;
background: #fff; margin-bottom: 50px;
padding: 0 20px;
}
.fb-categories-header h2 {
font-family: 'Playfair Display', serif;
font-size: clamp(28px, 4vw, 48px);
font-weight: 700;
color: var(--dark);
margin-bottom: 12px;
}
.fb-categories-header h2 em {
color: var(--theme-color);
font-style: italic;
}
.fb-categories-header p {
font-size: clamp(15px, 1.8vw, 18px);
color: var(--text-muted);
}
/* 3×2 grid */
.fb-cat-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
max-width: 1600px;
margin: 0 auto;
padding: 0 clamp(20px, 3vw, 48px);
}
/* Individual card */
.fb-cat-card {
position: relative;
border-radius: 16px;
overflow: hidden;
aspect-ratio: 4 / 3;
display: block;
cursor: pointer;
text-decoration: none;
}
.fb-cat-card img {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
transition: transform 0.6s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}
.fb-cat-card:hover img {
transform: scale(1.08);
}
/* Bottom label — always visible */
.fb-cat-label {
position: absolute;
bottom: 0;
left: 0;
right: 0;
padding: 20px 24px;
background: linear-gradient(to top, rgba(0,0,0,0.7) 0%, rgba(0,0,0,0) 100%);
transition: opacity 0.35s ease;
}
.fb-cat-label h3 {
font-family: 'Playfair Display', serif;
font-size: clamp(18px, 2vw, 24px);
font-weight: 600;
color: #fff;
line-height: 1.3;
}
.fb-cat-label h3 span {
display: block;
font-family: 'DM Sans', sans-serif;
font-size: 12px;
font-weight: 500;
letter-spacing: 2px;
text-transform: uppercase;
color: var(--active-color);
margin-top: 4px;
}
/* Hover overlay with product list */
.fb-cat-hover {
position: absolute;
inset: 0;
background: rgba(26, 60, 34, 0.92);
display: flex;
flex-direction: column;
justify-content: center;
padding: 28px 32px;
opacity: 0;
transition: opacity 0.35s ease;
}
.fb-cat-card:hover .fb-cat-hover {
opacity: 1;
}
.fb-cat-card:hover .fb-cat-label {
opacity: 0;
}
.fb-cat-hover h3 {
font-family: 'Playfair Display', serif;
font-size: clamp(18px, 2vw, 24px);
font-weight: 600;
color: #fff;
margin-bottom: 16px;
line-height: 1.3;
}
.fb-cat-hover h3 span {
display: block;
font-family: 'DM Sans', sans-serif;
font-size: 11px;
font-weight: 500;
letter-spacing: 2px;
text-transform: uppercase;
color: var(--active-color);
margin-top: 4px;
}
.fb-cat-hover ul {
list-style: none;
padding: 0;
margin: 0;
display: flex;
flex-direction: column;
gap: 6px;
}
.fb-cat-hover ul li {
font-family: 'DM Sans', sans-serif;
font-size: 14px;
color: rgba(255,255,255,0.7);
padding-left: 16px;
position: relative;
}
.fb-cat-hover ul li::before {
content: '';
position: absolute;
left: 0;
top: 50%;
width: 6px;
height: 6px;
border-radius: 50%;
background: var(--active-color);
transform: translateY(-50%);
}
/* Tablet: 2 columns */
@media (max-width: 1024px) {
.fb-cat-grid {
grid-template-columns: repeat(2, 1fr);
gap: 16px;
}
}
/* Mobile: 1 column, taller cards */
@media (max-width: 600px) {
.fb-cat-grid {
grid-template-columns: 1fr;
gap: 14px;
padding: 0 16px;
}
.fb-cat-card {
aspect-ratio: 16 / 10;
}
.fb-categories {
padding: 60px 0 70px;
}
.fb-categories-header {
margin-bottom: 32px;
}
} }
/* ============================================= /* =============================================
@ -8047,11 +8261,6 @@ html.lenis, html.lenis body {
transform: translateY(50px); transform: translateY(50px);
} }
/* Prevent horizontal scrollbar from slide-in animations */
.html-home-page .master-wrapper-content {
overflow-x: hidden;
}
/* ============================================= /* =============================================
MOBILE VAULT + FORKLIFT MOBILE VAULT + FORKLIFT
============================================= */ ============================================= */
@ -8084,17 +8293,22 @@ html.lenis, html.lenis body {
} }
.forklift-visual { .forklift-visual {
height: 40vh; flex: 1 1 100%;
max-width: 300px; max-width: 120%;
width: 120%;
margin-left: -10%;
margin-right: -10%;
} }
.stats-panel { .stats-panel {
gap: 24px; gap: 32px;
text-align: center; text-align: left;
max-width: 100%;
padding: 0 20px;
} }
.forklift-body { .stat-item {
transform: scale(0.7); padding-left: 18px;
} }
/* Product cards mobile */ /* Product cards mobile */

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 160 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 158 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 153 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Some files were not shown because too many files have changed in this diff Show More