+
{{ "CHECKOUT.TITLE" | translate }}
Servizio CAD
diff --git a/frontend/src/app/features/checkout/checkout.component.scss b/frontend/src/app/features/checkout/checkout.component.scss
index ac3fdb7..58f6b9c 100644
--- a/frontend/src/app/features/checkout/checkout.component.scss
+++ b/frontend/src/app/features/checkout/checkout.component.scss
@@ -1,3 +1,7 @@
+.checkout-hero {
+ padding-top: calc(var(--space-12) + var(--space-4));
+}
+
.cad-subtitle {
margin: 0;
}
@@ -273,3 +277,9 @@ app-toggle-selector.user-type-selector-compact {
.mb-6 {
margin-bottom: var(--space-6);
}
+
+@media (max-width: 640px) {
+ .checkout-hero {
+ padding-top: calc(var(--space-8) + var(--space-4));
+ }
+}
diff --git a/frontend/src/app/features/home/home.component.html b/frontend/src/app/features/home/home.component.html
index 1775879..be5868a 100644
--- a/frontend/src/app/features/home/home.component.html
+++ b/frontend/src/app/features/home/home.component.html
@@ -1,6 +1,8 @@
-
+
{{ "HOME.HERO_EYEBROW" | translate }}
+
diff --git a/frontend/src/app/features/home/home.component.scss b/frontend/src/app/features/home/home.component.scss
index 58c57d5..e557664 100644
--- a/frontend/src/app/features/home/home.component.scss
+++ b/frontend/src/app/features/home/home.component.scss
@@ -45,6 +45,99 @@
animation: fadeUp 0.8s ease both;
}
+.hero-grid {
+ align-items: start;
+}
+
+.hero-swiss-card {
+ --swiss-red: #d52b1e;
+ align-self: center;
+ justify-self: center;
+ width: min(100%, 340px);
+ padding: 1rem 1.1rem;
+ border: 1px solid var(--color-border);
+ border-left: 4px solid var(--swiss-red);
+ border-radius: 12px;
+ background: #fff;
+ animation: fadeUp 0.85s ease both;
+}
+
+.hero-swiss-head {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ margin-bottom: 0.4rem;
+}
+
+.hero-swiss-emblem {
+ width: 1.3rem;
+ height: 1.3rem;
+ border-radius: 4px;
+ background: var(--swiss-red);
+ display: inline-grid;
+ place-items: center;
+}
+
+.hero-swiss-cross {
+ position: relative;
+ width: 0.86rem;
+ height: 0.86rem;
+ display: block;
+}
+
+.hero-swiss-cross::before,
+.hero-swiss-cross::after {
+ content: "";
+ position: absolute;
+ background: #fff;
+ border-radius: 1px;
+}
+
+.hero-swiss-cross::before {
+ width: 0.28rem;
+ height: 100%;
+ left: calc(50% - 0.14rem);
+ top: 0;
+}
+
+.hero-swiss-cross::after {
+ width: 100%;
+ height: 0.28rem;
+ left: 0;
+ top: calc(50% - 0.14rem);
+}
+
+.hero-swiss-kicker {
+ margin: 0;
+ color: var(--color-text);
+}
+
+.hero-swiss-copy {
+ margin: 0 0 0.7rem;
+ color: var(--color-text);
+ font-weight: 500;
+ line-height: 1.4;
+}
+
+.hero-swiss-locations {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.4rem;
+}
+
+.hero-swiss-chip {
+ display: inline-flex;
+ align-items: center;
+ min-height: 1.75rem;
+ padding: 0.2rem 0.58rem;
+ border-radius: 999px;
+ border: 1px solid rgba(14, 24, 38, 0.14);
+ background: #fff;
+ font-size: 0.84rem;
+ font-weight: 600;
+ color: #2a2f36;
+}
+
.capabilities {
position: relative;
border-bottom: 1px solid var(--color-border);
@@ -165,6 +258,13 @@
}
@media (max-width: 640px) {
+ .hero-swiss-card {
+ align-self: start;
+ justify-self: center;
+ width: min(100%, 340px);
+ margin-top: 1rem;
+ }
+
.shop-gallery {
width: 100%;
max-width: none;
diff --git a/frontend/src/app/features/order/order.component.html b/frontend/src/app/features/order/order.component.html
index 4c31008..59cbdeb 100644
--- a/frontend/src/app/features/order/order.component.html
+++ b/frontend/src/app/features/order/order.component.html
@@ -68,9 +68,12 @@
-
-
-
+
+
-
-
-
-
-
-
-
-
- {{
- itemDisplayName(item)
- }}
-
- {{
- isShopItem(item)
- ? ("ORDER.TYPE_SHOP" | translate)
- : ("ORDER.TYPE_CALCULATOR" | translate)
- }}
-
-
-
-
- {{ "CHECKOUT.QTY" | translate }}: {{ item.quantity }}
-
- {{ "CHECKOUT.MATERIAL" | translate }}:
- {{
- item.materialCode || ("ORDER.NOT_AVAILABLE" | translate)
- }}
-
-
- {{ "SHOP.VARIANT" | translate }}: {{ variantLabel }}
-
-
-
- {{ itemColorLabel(item) }}
-
-
-
-
- {{ item.printTimeSeconds || 0 | number: "1.0-0" }}s |
- {{ item.materialGrams || 0 | number: "1.0-0" }}g
-
-
-
-
- {{ item.lineTotalChf || 0 | currency: "CHF" }}
-
-
-
-
@@ -271,6 +211,70 @@
[currency]="'CHF'"
[totalLabelKey]="'PAYMENT.TOTAL'"
>
+
+
0">
+
+
{{ "ORDER.ITEMS_TITLE" | translate }}
+ {{ (o.items || []).length }}
+
+
+
+
+
+
+ {{
+ itemDisplayName(item)
+ }}
+
+ {{
+ isShopItem(item)
+ ? ("ORDER.TYPE_SHOP" | translate)
+ : ("ORDER.TYPE_CALCULATOR" | translate)
+ }}
+
+
+
+
+ {{ "CHECKOUT.QTY" | translate }}: {{ item.quantity }}
+
+ {{ "CHECKOUT.MATERIAL" | translate }}:
+ {{
+ item.materialCode || ("ORDER.NOT_AVAILABLE" | translate)
+ }}
+
+
+ {{ "SHOP.VARIANT" | translate }}: {{ variantLabel }}
+
+
+
+ {{ itemColorLabel(item) }}
+
+
+
+
+ {{ item.printTimeSeconds || 0 | number: "1.0-0" }}s |
+ {{ item.materialGrams || 0 | number: "1.0-0" }}g
+
+
+
+
+ {{ item.lineTotalChf || 0 | currency: "CHF" }}
+
+
+
+
diff --git a/frontend/src/app/features/order/order.component.scss b/frontend/src/app/features/order/order.component.scss
index ecb216c..fb176e9 100644
--- a/frontend/src/app/features/order/order.component.scss
+++ b/frontend/src/app/features/order/order.component.scss
@@ -10,6 +10,11 @@
margin-bottom: var(--space-6);
}
+.payment-layout--summary-only {
+ grid-template-columns: minmax(0, 440px);
+ justify-content: center;
+}
+
.payment-details {
margin-bottom: var(--space-6);
@@ -119,9 +124,52 @@
top: var(--space-6);
}
+.payment-summary {
+ display: grid;
+ gap: var(--space-6);
+}
+
+.summary-items-section {
+ margin-top: var(--space-6);
+ padding-top: var(--space-5);
+ border-top: 1px solid var(--color-border);
+}
+
+.summary-items-head {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: var(--space-3);
+ margin-bottom: var(--space-4);
+
+ h4 {
+ margin: 0;
+ font-size: 1rem;
+ line-height: 1.2;
+ }
+
+ span {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-width: 1.8rem;
+ min-height: 1.8rem;
+ padding: 0 0.45rem;
+ border-radius: 999px;
+ background: rgba(16, 24, 32, 0.06);
+ color: var(--color-text);
+ font-size: 0.82rem;
+ font-weight: 700;
+ }
+}
+
.order-items {
display: grid;
- gap: var(--space-3);
+ gap: var(--space-2);
+ max-height: 420px;
+ overflow-y: auto;
+ padding-right: var(--space-1);
+ scrollbar-width: thin;
}
.order-item {
@@ -129,7 +177,7 @@
justify-content: space-between;
align-items: flex-start;
gap: var(--space-3);
- padding: var(--space-3);
+ padding: 0.85rem 0.9rem;
border: 1px solid var(--color-border);
border-radius: var(--radius-md);
background: var(--color-bg-card);
@@ -149,7 +197,7 @@
}
.order-item-name {
- font-size: 1rem;
+ font-size: 0.96rem;
line-height: 1.35;
}
@@ -176,7 +224,7 @@
flex-wrap: wrap;
gap: 0.5rem 0.9rem;
color: var(--color-text-muted);
- font-size: 0.92rem;
+ font-size: 0.88rem;
}
.item-color-chip {
@@ -194,13 +242,13 @@
}
.order-item-tech {
- font-size: 0.86rem;
+ font-size: 0.82rem;
color: var(--color-text-muted);
}
.order-item-total {
white-space: nowrap;
- font-size: 1rem;
+ font-size: 0.96rem;
}
.order-summary-meta {
@@ -325,6 +373,10 @@
padding-top: calc(var(--space-8) + var(--space-4));
}
+ .payment-layout--summary-only {
+ grid-template-columns: 1fr;
+ }
+
.status-timeline {
margin-top: var(--space-4);
margin-bottom: var(--space-8);
@@ -362,4 +414,10 @@
.order-summary-meta {
grid-template-columns: 1fr;
}
+
+ .order-items {
+ max-height: none;
+ overflow: visible;
+ padding-right: 0;
+ }
}
diff --git a/frontend/src/app/features/shop/components/product-card/product-card.component.scss b/frontend/src/app/features/shop/components/product-card/product-card.component.scss
index 65885ad..d9845d4 100644
--- a/frontend/src/app/features/shop/components/product-card/product-card.component.scss
+++ b/frontend/src/app/features/shop/components/product-card/product-card.component.scss
@@ -21,7 +21,7 @@
.media {
position: relative;
display: block;
- aspect-ratio: 1 / 1;
+ aspect-ratio: 4 / 3;
background: #f2eee5;
overflow: hidden;
}
diff --git a/frontend/src/app/features/shop/product-detail.component.html b/frontend/src/app/features/shop/product-detail.component.html
index e4fbc8d..65aaf4e 100644
--- a/frontend/src/app/features/shop/product-detail.component.html
+++ b/frontend/src/app/features/shop/product-detail.component.html
@@ -15,18 +15,23 @@
} @else {
@if (product(); as p) {