Index: src/main/java/mk/ukim/finki/synergymed/exceptions/NotEnoughMedicineInStockException.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/exceptions/NotEnoughMedicineInStockException.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
+++ src/main/java/mk/ukim/finki/synergymed/exceptions/NotEnoughMedicineInStockException.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -0,0 +1,4 @@
+package mk.ukim.finki.synergymed.exceptions;
+
+public class NotEnoughMedicineInStockException extends RuntimeException{
+}
Index: src/main/java/mk/ukim/finki/synergymed/models/ShoppingcartBrandedmedicineId.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/ShoppingcartBrandedmedicineId.java	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/java/mk/ukim/finki/synergymed/models/ShoppingcartBrandedmedicineId.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -3,4 +3,5 @@
 import jakarta.persistence.Column;
 import jakarta.persistence.Embeddable;
+import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
@@ -13,4 +14,5 @@
 @Setter
 @Embeddable
+@AllArgsConstructor
 public class ShoppingcartBrandedmedicineId implements Serializable {
     private static final long serialVersionUID = -1731196071675375973L;
@@ -20,4 +22,6 @@
     @Column(name = "branded_medicine_id", nullable = false)
     private Integer brandedMedicineId;
+
+    public ShoppingcartBrandedmedicineId(){}
 
     @Override
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ClientRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ClientRepository.java	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ClientRepository.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.synergymed.models.Client;
+import mk.ukim.finki.synergymed.models.User;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
@@ -7,4 +8,5 @@
 
 import java.util.List;
+import java.util.Optional;
 
 public interface ClientRepository extends JpaRepository<Client, Integer> {
@@ -16,3 +18,5 @@
     List<Client> findClientsWithoutHealthProfileByName(@Param("searchTerm") String searchTerm);
 
+    Optional<Client> findByUsers(User user);
+
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartBrandedmedicineRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartBrandedmedicineRepository.java	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartBrandedmedicineRepository.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -1,8 +1,13 @@
 package mk.ukim.finki.synergymed.repositories;
 
+import mk.ukim.finki.synergymed.models.Shoppingcart;
 import mk.ukim.finki.synergymed.models.ShoppingcartBrandedmedicine;
 import mk.ukim.finki.synergymed.models.ShoppingcartBrandedmedicineId;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface ShoppingcartBrandedmedicineRepository extends JpaRepository<ShoppingcartBrandedmedicine, ShoppingcartBrandedmedicineId> {
+    List<ShoppingcartBrandedmedicine> findAllByShoppingCart(Shoppingcart cart);
+    void deleteAllByShoppingCart(Shoppingcart cart);
 }
Index: src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartRepository.java	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/java/mk/ukim/finki/synergymed/repositories/ShoppingcartRepository.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -1,7 +1,11 @@
 package mk.ukim.finki.synergymed.repositories;
 
+import mk.ukim.finki.synergymed.models.Client;
 import mk.ukim.finki.synergymed.models.Shoppingcart;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.Optional;
+
 public interface ShoppingcartRepository extends JpaRepository<Shoppingcart, Integer> {
+    Optional<Shoppingcart> findByClient(Client client);
 }
Index: src/main/java/mk/ukim/finki/synergymed/service/ShoppingCartService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/ShoppingCartService.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
+++ src/main/java/mk/ukim/finki/synergymed/service/ShoppingCartService.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -0,0 +1,16 @@
+package mk.ukim.finki.synergymed.service;
+
+import mk.ukim.finki.synergymed.models.Brandedmedicine;
+import mk.ukim.finki.synergymed.models.Shoppingcart;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+public interface ShoppingCartService {
+    void addMedicine(Shoppingcart cart, Brandedmedicine medicine, int quantity);
+    void removeMedicine(Shoppingcart cart, Brandedmedicine medicine);
+    Map<Brandedmedicine, Integer> getMedicinesInCart(Shoppingcart cart);
+    BigDecimal getTotal(Shoppingcart cart);
+    void clearCart(Shoppingcart cart);
+    public void decreaseMedicine(Shoppingcart cart, Brandedmedicine medicine);
+}
Index: src/main/java/mk/ukim/finki/synergymed/service/UserService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/UserService.java	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/java/mk/ukim/finki/synergymed/service/UserService.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -5,3 +5,4 @@
 public interface UserService {
     User findUserById(Integer id);
+    User findUserByUsername(String username);
 }
Index: src/main/java/mk/ukim/finki/synergymed/service/impl/ShoppingCartServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/ShoppingCartServiceImpl.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
+++ src/main/java/mk/ukim/finki/synergymed/service/impl/ShoppingCartServiceImpl.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -0,0 +1,90 @@
+package mk.ukim.finki.synergymed.service.impl;
+
+import jakarta.transaction.Transactional;
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.synergymed.models.Brandedmedicine;
+import mk.ukim.finki.synergymed.models.Shoppingcart;
+import mk.ukim.finki.synergymed.models.ShoppingcartBrandedmedicine;
+import mk.ukim.finki.synergymed.models.ShoppingcartBrandedmedicineId;
+import mk.ukim.finki.synergymed.repositories.ShoppingcartBrandedmedicineRepository;
+import mk.ukim.finki.synergymed.service.ShoppingCartService;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@RequiredArgsConstructor
+@Transactional
+public class ShoppingCartServiceImpl implements ShoppingCartService {
+
+    private final ShoppingcartBrandedmedicineRepository cartMedicineRepo;
+
+    @Override
+    public void addMedicine(Shoppingcart cart, Brandedmedicine medicine, int quantity) {
+        ShoppingcartBrandedmedicineId id =
+                new ShoppingcartBrandedmedicineId(cart.getId(), medicine.getId());
+        ShoppingcartBrandedmedicine entry =
+                cartMedicineRepo.findById(id).orElse(new ShoppingcartBrandedmedicine());
+
+        if (entry.getId() == null) {
+            entry.setId(id);
+            entry.setShoppingCart(cart);
+            entry.setBrandedMedicine(medicine);
+            entry.setQuantity(quantity);
+        } else {
+            entry.setQuantity(entry.getQuantity() + quantity);
+        }
+
+        // TODO: 30.8.2025 stock check with trigger
+
+        cartMedicineRepo.save(entry);
+    }
+
+    @Override
+    public void decreaseMedicine(Shoppingcart cart, Brandedmedicine medicine) {
+        ShoppingcartBrandedmedicineId id =
+                new ShoppingcartBrandedmedicineId(cart.getId(), medicine.getId());
+        cartMedicineRepo.findById(id).ifPresent(entry -> {
+            if (entry.getQuantity() > 1) {
+                entry.setQuantity(entry.getQuantity() - 1);
+                cartMedicineRepo.save(entry);
+            } else {
+                cartMedicineRepo.delete(entry);
+            }
+        });
+    }
+
+    @Override
+    public void removeMedicine(Shoppingcart cart, Brandedmedicine medicine) {
+        ShoppingcartBrandedmedicineId id =
+                new ShoppingcartBrandedmedicineId(cart.getId(), medicine.getId());
+        cartMedicineRepo.deleteById(id);
+    }
+
+    @Override
+    public Map<Brandedmedicine, Integer> getMedicinesInCart(Shoppingcart cart) {
+        List<ShoppingcartBrandedmedicine> entries =
+                cartMedicineRepo.findAllByShoppingCart(cart);
+        Map<Brandedmedicine, Integer> result = new HashMap<>();
+        for (ShoppingcartBrandedmedicine e : entries) {
+            result.put(e.getBrandedMedicine(), e.getQuantity());
+        }
+        return result;
+    }
+
+    @Override
+    public BigDecimal getTotal(Shoppingcart cart) {
+        return getMedicinesInCart(cart).entrySet().stream()
+                .map(entry -> entry.getKey().getPrice()
+                        .multiply(BigDecimal.valueOf(entry.getValue())))
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+    }
+
+    @Override
+    public void clearCart(Shoppingcart cart) {
+        cartMedicineRepo.deleteAllByShoppingCart(cart);
+    }
+}
Index: src/main/java/mk/ukim/finki/synergymed/service/impl/UserServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/UserServiceImpl.java	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/java/mk/ukim/finki/synergymed/service/impl/UserServiceImpl.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -18,3 +18,10 @@
                 .orElseThrow(UserNotFoundException::new);
     }
+
+    @Override
+    public User findUserByUsername(String username) {
+        return userRepository
+                .findByUsername(username)
+                .orElseThrow(UserNotFoundException::new);
+    }
 }
Index: src/main/java/mk/ukim/finki/synergymed/web/ProfileController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/ProfileController.java	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/java/mk/ukim/finki/synergymed/web/ProfileController.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -22,5 +22,4 @@
     @GetMapping
     public String getProfilePage(HttpSession session, Model model) {
-        // Get your custom User entity directly from session
         User user = (User) session.getAttribute("user");
         String username = (String) session.getAttribute("username");
Index: src/main/java/mk/ukim/finki/synergymed/web/ShoppingCartController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/ShoppingCartController.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
+++ src/main/java/mk/ukim/finki/synergymed/web/ShoppingCartController.java	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -0,0 +1,112 @@
+package mk.ukim.finki.synergymed.web;
+
+import jakarta.servlet.http.HttpSession;
+import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.synergymed.models.Brandedmedicine;
+import mk.ukim.finki.synergymed.models.Client;
+import mk.ukim.finki.synergymed.models.Shoppingcart;
+import mk.ukim.finki.synergymed.models.User;
+import mk.ukim.finki.synergymed.repositories.ClientRepository;
+import mk.ukim.finki.synergymed.repositories.ShoppingcartRepository;
+import mk.ukim.finki.synergymed.service.BrandedMedicineService;
+import mk.ukim.finki.synergymed.service.ShoppingCartService;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+@Controller
+@RequestMapping("/cart")
+@RequiredArgsConstructor
+public class ShoppingCartController {
+
+    private final ShoppingCartService shoppingCartService;
+    private final BrandedMedicineService brandedmedicineService;
+    private final ClientRepository clientRepository;
+    private final ShoppingcartRepository shoppingcartRepository;
+
+    @PostMapping("/add/{medicineId}")
+    public String addToCart(@PathVariable Integer medicineId,
+                            @RequestParam(defaultValue = "1") int quantity,
+                            HttpSession session) {
+        Client client = getClientFromSession(session);
+        Shoppingcart cart = getOrCreateCart(client);
+
+        Brandedmedicine medicine = brandedmedicineService.findById(medicineId)
+                .orElseThrow(() -> new IllegalArgumentException("Medicine not found with id " + medicineId));
+
+        shoppingCartService.addMedicine(cart, medicine, quantity);
+        return "redirect:/branded-medicines";
+    }
+
+    @PostMapping("/plus/{medicineId}")
+    public String increaseQuantity(@PathVariable Integer medicineId, HttpSession session) {
+        Client client = getClientFromSession(session);
+        Shoppingcart cart = getOrCreateCart(client);
+
+        Brandedmedicine medicine = brandedmedicineService.findById(medicineId)
+                .orElseThrow(() -> new IllegalArgumentException("Medicine not found with id " + medicineId));
+
+        shoppingCartService.addMedicine(cart, medicine, 1);
+        return "redirect:/cart";
+    }
+
+    @PostMapping("/minus/{medicineId}")
+    public String decreaseQuantity(@PathVariable Integer medicineId, HttpSession session) {
+        Client client = getClientFromSession(session);
+        Shoppingcart cart = getOrCreateCart(client);
+
+        Brandedmedicine medicine = brandedmedicineService.findById(medicineId)
+                .orElseThrow(() -> new IllegalArgumentException("Medicine not found with id " + medicineId));
+
+        shoppingCartService.decreaseMedicine(cart, medicine);
+        return "redirect:/cart";
+    }
+
+    @PostMapping("/remove/{medicineId}")
+    public String removeFromCart(@PathVariable Integer medicineId, HttpSession session) {
+        Client client = getClientFromSession(session);
+        Shoppingcart cart = getOrCreateCart(client);
+
+        Brandedmedicine medicine = brandedmedicineService.findById(medicineId)
+                .orElseThrow(() -> new IllegalArgumentException("Medicine not found with id " + medicineId));
+
+        shoppingCartService.removeMedicine(cart, medicine);
+        return "redirect:/cart";
+    }
+
+    @GetMapping
+    public String showCart(Model model, HttpSession session) {
+        Client client = getClientFromSession(session);
+        Shoppingcart cart = getOrCreateCart(client);
+
+        model.addAttribute("items", shoppingCartService.getMedicinesInCart(cart));
+        model.addAttribute("total", shoppingCartService.getTotal(cart));
+        model.addAttribute("username", session.getAttribute("username"));
+
+        // TODO: 30.8.2025 FIX AFTER GETTING IMAGES IN DB 
+        model.addAttribute("firstImageById", null);
+
+        return "cart";
+    }
+
+    private Client getClientFromSession(HttpSession session) {
+        User user = (User) session.getAttribute("user");
+        String username = (String) session.getAttribute("username");
+
+        if (user == null || username == null) {
+            throw new IllegalStateException("No user in session. Please login first.");
+        }
+
+        return clientRepository.findByUsers(user)
+                .orElseThrow(() -> new IllegalStateException("Client not found for user " + username));
+    }
+
+    private Shoppingcart getOrCreateCart(Client client) {
+        return shoppingcartRepository.findByClient(client)
+                .orElseGet(() -> {
+                    Shoppingcart cart = new Shoppingcart();
+                    cart.setClient(client);
+                    return shoppingcartRepository.save(cart);
+                });
+    }
+}
Index: src/main/resources/templates/cart.html
===================================================================
--- src/main/resources/templates/cart.html	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
+++ src/main/resources/templates/cart.html	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>SynergyMed – Shopping Cart</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+    <th:block th:replace="fragments/header :: headerStyles"></th:block>
+
+    <style>
+        :root{
+            --teal-1:#20b2aa; --teal-2:#48d1cc; --muted:#6c757d;
+        }
+        *{margin:0;padding:0;box-sizing:border-box}
+
+        body{
+            font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
+            min-height:100vh;
+            background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);
+            color:#1f2937;
+        }
+
+        /* Full-width global header - FIXED STYLING */
+        .site-header{
+            position:sticky;
+            top:0;
+            left:0;
+            right:0;
+            width:100%;
+            border-radius:0;
+            margin:0;
+            z-index:1000;
+            background:white !important;
+            box-shadow:0 2px 10px rgba(0,0,0,0.1);
+        }
+
+        .cart-container{max-width:1000px;margin:28px auto;padding:20px;background:white;border-radius:18px;box-shadow:0 12px 30px rgba(0,0,0,0.1)}
+        .cart-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}
+        .cart-item{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid #eee}
+        .cart-item img{width:100px;height:80px;object-fit:cover;border-radius:10px;margin-right:18px}
+        .cart-info{flex:1}
+        .cart-title{font-weight:700;font-size:1.1rem}
+        .cart-qty{display:flex;align-items:center;gap:6px;margin-top:8px}
+        .btn-outline{background:#fff;border:2px solid rgba(32,178,170,.25);color:#20b2aa;padding:6px 10px;border-radius:8px;text-decoration:none;font-weight:600;transition:.2s ease}
+        .btn-outline:hover{border-color:#20b2aa;box-shadow:0 6px 14px rgba(32,178,170,.18)}
+        .btn-remove{color:#b3261e;border-color:#f0caca}
+        .cart-total{text-align:right;margin-top:20px;font-size:1.4rem;font-weight:700}
+        .btn-checkout{margin-top:20px;display:inline-block;background:linear-gradient(135deg,#20b2aa,#48d1cc);color:#fff;padding:12px 20px;border-radius:12px;text-decoration:none;font-weight:600;transition:.2s ease}
+        .btn-checkout:hover{transform:translateY(-2px)}
+    </style>
+</head>
+<body>
+<th:block th:replace="fragments/header :: siteHeader('cart', ${username})"></th:block>
+
+<div class="cart-container">
+    <div class="cart-header">
+        <h2>Your Shopping Cart</h2>
+        <a th:href="@{/branded-medicines}" class="btn-outline">← Continue Shopping</a>
+    </div>
+
+    <div th:if="${#lists.isEmpty(items)}">
+        <p>Your cart is empty.</p>
+    </div>
+
+    <div th:each="entry : ${items}" class="cart-item">
+        <!-- Safe image rendering -->
+        <img th:if="${firstImageById != null}"
+             th:src="@{${firstImageById[entry.key.id]}}" alt="medicine">
+        <img th:if="${firstImageById == null}"
+             src="/images/default-medicine.png" alt="medicine">
+
+        <div class="cart-info">
+            <div class="cart-title" th:text="${entry.key.name}">Medicine</div>
+            <div class="muted" th:text="${entry.key.dosageForm}">Dosage</div>
+            <div class="cart-qty">
+                <!-- Minus button -->
+                <form th:action="@{/cart/minus/{id}(id=${entry.key.id})}" method="post" style="display:inline">
+                    <button type="submit" class="btn-outline">−</button>
+                </form>
+                <!-- Plus button -->
+                <form th:action="@{/cart/plus/{id}(id=${entry.key.id})}" method="post" style="display:inline">
+                    <button type="submit" class="btn-outline">＋</button>
+                </form>
+                <!-- Remove button -->
+                <form th:action="@{/cart/remove/{id}(id=${entry.key.id})}" method="post" style="display:inline">
+                    <button type="submit" class="btn-outline btn-remove">Remove</button>
+                </form>
+            </div>
+        </div>
+        <div th:text="${#numbers.formatDecimal(entry.key.price * entry.value, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0 ден.</div>
+    </div>
+
+    <div class="cart-total">
+        Total: <span th:text="${#numbers.formatDecimal(total, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0.00 ден.</span>
+    </div>
+
+    <a class="btn-checkout" th:href="@{/payment}">Proceed to Payment</a>
+</div>
+
+<th:block th:replace="fragments/header :: headerScripts"></th:block>
+</body>
+</html>
Index: src/main/resources/templates/index.html
===================================================================
--- src/main/resources/templates/index.html	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/resources/templates/index.html	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -6,5 +6,5 @@
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 
-    <!-- Header styles (fragment from templates/fragments/header.html) -->
+    <!-- Header styles -->
     <th:block th:replace="fragments/header :: headerStyles"></th:block>
 
@@ -16,8 +16,8 @@
             --shadow:0 20px 40px rgba(0,0,0,0.10);
             --shadow-sm:0 6px 18px rgba(0,0,0,0.08);
+            --success:#28a745; --success-bg:#d4edda;
         }
         *{margin:0;padding:0;box-sizing:border-box}
 
-        /* Make the header edge-to-edge at the very top, and stack content under it */
         body{
             font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;
@@ -26,35 +26,28 @@
             color:var(--text);
             display:flex;
-            flex-direction:column;   /* stack header and page vertically */
-            align-items:center;      /* center the .page container */
-            /* no body padding so header touches the edges */
-        }
-
-        /* Centered content container with interior padding (replacing old body padding) */
+            flex-direction:column;
+            align-items:center;
+        }
+
         .page{
             width:100%;
             max-width:1200px;
-            padding:28px;           /* replaces previous body padding */
+            padding:28px;
             margin:0 auto;
         }
 
-        /* Force the global site header to be full-width, square corners, top-attached */
         .site-header{
             position: sticky;
-            top:0;
-            left:0;
-            right:0;
+            top:0;left:0;right:0;
             width:100%;
             border-radius:0;
             margin:0;
             z-index:1000;
-            background:white !important; /* Force white background */
-            box-shadow:0 2px 10px rgba(0,0,0,0.1); /* Add subtle shadow */
-        }
-
-        /* Optional: space between global header and the page section header */
+            background:white !important;
+            box-shadow:0 2px 10px rgba(0,0,0,0.1);
+        }
+
         .after-site-header{ height: 16px; }
 
-        /* Page section header (title + create button) */
         .header{
             display:flex;justify-content:space-between;align-items:center;
@@ -62,4 +55,11 @@
             background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
             color:#fff;padding:20px 24px;border-radius:20px;box-shadow:var(--shadow);
+            gap:10px;
+        }
+
+        .header-buttons{
+            display:flex;
+            gap:12px;
+            align-items:center;
         }
 
@@ -69,34 +69,169 @@
         .btn-primary:hover{transform:translateY(-2px)}
 
-        .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:22px}
-        .card{background:var(--card);border-radius:18px;overflow:hidden;box-shadow:var(--shadow-sm);display:flex;flex-direction:column}
-        .thumb{width:100%;height:240px;object-fit:cover;background:#eef2f3;display:block}
-        .content{padding:14px 16px 18px}
-        .title{font-weight:700;margin:6px 0 2px}
-        .muted{color:var(--muted);font-size:.92rem}
-        .row{display:flex;justify-content:space-between;align-items:center;margin-top:10px}
-        .price{font-weight:800}
-        .btn-outline{background:#fff;border:2px solid rgba(32,178,170,.25);color:#20b2aa;padding:8px 12px;border-radius:10px;text-decoration:none;font-weight:600;transition:.2s ease}
-        .btn-outline:hover{border-color:#20b2aa;box-shadow:0 6px 14px rgba(32,178,170,.18)}
+        .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:24px}
+
+        .card{
+            background:var(--card);
+            border-radius:18px;
+            overflow:hidden;
+            box-shadow:var(--shadow-sm);
+            display:flex;
+            flex-direction:column;
+            min-height:420px; /* Increased card height */
+            transition:transform 0.2s ease, box-shadow 0.2s ease;
+        }
+
+        .card:hover{
+            transform:translateY(-4px);
+            box-shadow:0 12px 30px rgba(0,0,0,0.12);
+        }
+
+        .thumb{width:100%;height:220px;object-fit:cover;background:#eef2f3;display:block;flex-shrink:0}
+
+        .content{
+            padding:16px 18px 20px;
+            display:flex;
+            flex-direction:column;
+            flex-grow:1;
+            justify-content:space-between;
+        }
+
+        .product-info{
+            margin-bottom:16px;
+        }
+
+        .title{font-weight:700;margin:6px 0 4px;font-size:1.1rem;line-height:1.3}
+        .muted{color:var(--muted);font-size:.92rem;margin-bottom:8px}
+
+        .actions-section{
+            margin-top:auto;
+        }
+
+        .price{
+            font-weight:800;
+            font-size:1.1rem;
+            color:var(--teal-1);
+            margin-bottom:12px;
+        }
+
+        .button-group{
+            display:flex;
+            gap:8px;
+            flex-wrap:wrap;
+        }
+
+        .btn-outline{
+            background:#fff;
+            border:2px solid rgba(32,178,170,.25);
+            color:#20b2aa;
+            padding:10px 14px;
+            border-radius:10px;
+            text-decoration:none;
+            font-weight:600;
+            transition:.2s ease;
+            font-size:0.9rem;
+            flex:1;
+            text-align:center;
+            min-width:100px;
+        }
+
+        .btn-outline:hover{
+            border-color:#20b2aa;
+            box-shadow:0 6px 14px rgba(32,178,170,.18);
+            background:#f8fffe;
+        }
+
+        /* Toast Notification Styles */
+        .toast-container{
+            position:fixed;
+            top:80px;
+            right:20px;
+            z-index:9999;
+            display:flex;
+            flex-direction:column;
+            gap:10px;
+        }
+
+        .toast{
+            background:linear-gradient(135deg,var(--teal-1),var(--teal-2));
+            color:#fff;
+            padding:16px 20px;
+            border-radius:12px;
+            box-shadow:var(--shadow);
+            min-width:300px;
+            transform:translateX(400px);
+            opacity:0;
+            transition:all 0.3s ease;
+            display:flex;
+            align-items:center;
+            gap:10px;
+        }
+
+        .toast.show{
+            transform:translateX(0);
+            opacity:1;
+        }
+
+        .toast-icon{
+            font-size:1.2rem;
+            flex-shrink:0;
+        }
+
+        .toast-content{
+            flex-grow:1;
+        }
+
+        .toast-title{
+            font-weight:700;
+            margin-bottom:2px;
+        }
+
+        .toast-message{
+            font-size:0.9rem;
+            opacity:0.9;
+        }
+
+        .toast-close{
+            background:none;
+            border:none;
+            color:#fff;
+            font-size:1.2rem;
+            cursor:pointer;
+            padding:0;
+            opacity:0.8;
+            transition:opacity 0.2s ease;
+        }
+
+        .toast-close:hover{
+            opacity:1;
+        }
 
         @media (max-width:560px){
             .page{padding:16px}
-            .header{padding:16px}
+            .header{padding:16px;flex-direction:column;gap:12px}
+            .header-buttons{gap:10px;flex-wrap:wrap;justify-content:center}
+            .grid{grid-template-columns:1fr;gap:20px}
+            .button-group{flex-direction:column}
+            .btn-outline{flex:none}
+            .toast-container{right:10px;left:10px}
+            .toast{min-width:auto}
         }
     </style>
 </head>
 <body>
-
-<!-- Full-width, top-attached global header -->
+<!-- Header -->
 <th:block th:replace="fragments/header :: siteHeader('medicines', ${username})"></th:block>
-
-<!-- small spacer below the global header (optional) -->
-<div class="after-site-header" aria-hidden="true"></div>
-
-<!-- Centered page content -->
+<div class="after-site-header"></div>
+
+<!-- Toast Container -->
+<div class="toast-container" id="toastContainer"></div>
+
 <div class="page">
     <div class="header">
         <h2>Branded Medicines</h2>
-        <a class="btn btn-primary" th:href="@{/branded-medicines/new}">Create</a>
+        <div class="header-buttons">
+            <a class="btn btn-primary" th:href="@{/branded-medicines/new}">Create</a>
+            <a class="btn btn-primary" th:href="@{/cart}">🛒 Cart</a>
+        </div>
     </div>
 
@@ -105,11 +240,18 @@
             <img class="thumb" th:src="@{${firstImageById[bm.id]}}" alt="product image">
             <div class="content">
-                <div class="title" th:text="${bm.name}">Name</div>
-                <div class="muted" th:text="${bm.dosageForm}">Dosage Form</div>
-                <div class="row">
-                    <div class="price" th:text="${#numbers.formatDecimal(bm.price, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0.00 ден.</div>
-                    <div>
-                        <form th:action="@{/branded-medicines/{id}/delete(id=${bm.id})}" method="post" style="display:inline">
-                            <button type="submit" class="btn-outline" style="margin-right:8px;color:#b3261e;border-color:#f0caca">Delete</button>
+                <div class="product-info">
+                    <div class="title" th:text="${bm.name}">Name</div>
+                    <div class="muted" th:text="${bm.dosageForm}">Dosage Form</div>
+                </div>
+
+                <div class="actions-section">
+                    <div class="price"
+                         th:text="${#numbers.formatDecimal(bm.price, 1, 'COMMA', 2, 'POINT') + ' ден.'}">0.00 ден.</div>
+
+                    <div class="button-group">
+                        <form th:action="@{/cart/add/{id}(id=${bm.id})}" method="post" style="display:inline;flex:1">
+                            <button type="submit" class="btn-outline add-to-cart-btn"
+                                    th:data-name="${bm.name}"
+                                    style="width:100%">Add to Cart</button>
                         </form>
                         <a class="btn-outline" th:href="@{/branded-medicines/{id}/edit(id=${bm.id})}">Edit</a>
@@ -121,6 +263,100 @@
 </div>
 
-<!-- Header dropdown script -->
 <th:block th:replace="fragments/header :: headerScripts"></th:block>
+
+<script>
+    // Toast notification functionality
+    function showToast(title, message, type = 'success') {
+        const toastContainer = document.getElementById('toastContainer');
+
+        const toast = document.createElement('div');
+        toast.className = 'toast';
+
+        const icon = type === 'success' ? '✅' : '❌';
+
+        toast.innerHTML = `
+        <div class="toast-icon">${icon}</div>
+        <div class="toast-content">
+            <div class="toast-title">${title}</div>
+            <div class="toast-message">${message}</div>
+        </div>
+        <button class="toast-close" onclick="removeToast(this.parentElement)">×</button>
+    `;
+
+        toastContainer.appendChild(toast);
+
+        // Trigger animation
+        setTimeout(() => {
+            toast.classList.add('show');
+        }, 100);
+
+        // Auto remove after 4 seconds
+        setTimeout(() => {
+            removeToast(toast);
+        }, 4000);
+    }
+
+    function removeToast(toast) {
+        toast.classList.remove('show');
+        setTimeout(() => {
+            if (toast && toast.parentElement) {
+                toast.parentElement.removeChild(toast);
+            }
+        }, 300);
+    }
+
+    // Handle add to cart button clicks
+    document.addEventListener('DOMContentLoaded', function() {
+        const addToCartForms = document.querySelectorAll('form[action*="/cart/add/"]');
+
+        addToCartForms.forEach(form => {
+            form.addEventListener('submit', function(e) {
+                e.preventDefault();
+
+                const button = form.querySelector('.add-to-cart-btn');
+                const productName = button.getAttribute('data-name');
+                const originalText = button.textContent;
+
+                // Show loading state
+                button.textContent = 'Adding...';
+                button.disabled = true;
+
+                // Submit the form via fetch
+                fetch(form.action, {
+                    method: 'POST',
+                    headers: {
+                        'Content-Type': 'application/x-www-form-urlencoded',
+                    }
+                })
+                    .then(response => {
+                        if (response.ok) {
+                            // Show success toast
+                            showToast(
+                                'Added to Cart!',
+                                `${productName} has been added to your cart successfully.`,
+                                'success'
+                            );
+                        } else {
+                            throw new Error('Failed to add item to cart');
+                        }
+                    })
+                    .catch(error => {
+                        console.error('Error:', error);
+                        showToast(
+                            'Error',
+                            'Failed to add item to cart. Please try again.',
+                            'error'
+                        );
+                    })
+                    .finally(() => {
+                        // Restore button state
+                        button.textContent = originalText;
+                        button.disabled = false;
+                    });
+            });
+        });
+    });
+</script>
+
 </body>
 </html>
Index: src/main/resources/templates/login.html
===================================================================
--- src/main/resources/templates/login.html	(revision abb9ec854a4a8ae5b1323178b7df8402c14fd1bd)
+++ src/main/resources/templates/login.html	(revision 0b0cd4ed8bde1944fa24c950188833f7d4b8b397)
@@ -253,5 +253,5 @@
 
   <div class="form-footer">
-    <p>&copy; 2024 SynergyMed. All rights reserved.</p>
+    <p>&copy; 2025 SynergyMed. All rights reserved.</p>
   </div>
 </div>
