Index: KernelRecordsMVC.Web/Controllers/AdminController.cs
===================================================================
--- KernelRecordsMVC.Web/Controllers/AdminController.cs	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Controllers/AdminController.cs	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1150,3 +1150,477 @@
         _context.SaveChanges();
     }
+    // =========================================================
+// ARTISTS
+// =========================================================
+
+[HttpGet]
+public IActionResult Artists()
+{
+    if (!IsAdmin())
+        return Forbid();
+
+    var artists = _context.Artists
+        .OrderBy(a => a.ArtistName)
+        .ToList();
+
+    return View(artists);
 }
+
+
+// =========================================================
+// CREATE ARTIST - GET
+// =========================================================
+
+[HttpGet]
+public IActionResult CreateArtist()
+{
+    if (!IsAdmin())
+        return Forbid();
+
+    return View(new CreateArtistViewModel());
+}
+
+
+// =========================================================
+// CREATE ARTIST - POST
+// =========================================================
+
+[HttpPost]
+[ValidateAntiForgeryToken]
+public IActionResult CreateArtist(CreateArtistViewModel model)
+{
+    if (!IsAdmin())
+        return Forbid();
+
+    if (!ModelState.IsValid)
+        return View(model);
+
+    var duplicateExists =
+        _context.Artists.Any(a =>
+            a.ArtistName.ToLower() ==
+            model.ArtistName.Trim().ToLower());
+
+    if (duplicateExists)
+    {
+        ModelState.AddModelError(
+            nameof(model.ArtistName),
+            "An artist with this name already exists.");
+
+        return View(model);
+    }
+
+    var artist = new Artist
+    {
+        ArtistId = GetNextArtistId(),
+
+        ArtistName =
+            model.ArtistName.Trim(),
+
+        ArtistDescription =
+            string.IsNullOrWhiteSpace(model.ArtistDescription)
+                ? null
+                : model.ArtistDescription.Trim(),
+
+        ArtistPhoto =
+            string.IsNullOrWhiteSpace(model.ArtistPhoto)
+                ? null
+                : model.ArtistPhoto.Trim()
+    };
+
+    _context.Artists.Add(artist);
+    _context.SaveChanges();
+
+    TempData["Success"] =
+        $"{artist.ArtistName} was created successfully.";
+
+    return RedirectToAction(nameof(Artists));
+}
+
+
+// =========================================================
+// EDIT ARTIST - GET
+// =========================================================
+
+[HttpGet]
+public IActionResult EditArtist(long id)
+{
+    if (!IsAdmin())
+        return Forbid();
+
+    var artist = _context.Artists
+        .FirstOrDefault(a =>
+            a.ArtistId == id);
+
+    if (artist == null)
+        return NotFound();
+
+    var model = new EditArtistViewModel
+    {
+        ArtistId =
+            artist.ArtistId,
+
+        ArtistName =
+            artist.ArtistName,
+
+        ArtistDescription =
+            artist.ArtistDescription,
+
+        ArtistPhoto =
+            artist.ArtistPhoto
+    };
+
+    return View(model);
+}
+
+
+// =========================================================
+// EDIT ARTIST - POST
+// =========================================================
+
+[HttpPost]
+[ValidateAntiForgeryToken]
+public IActionResult EditArtist(EditArtistViewModel model)
+{
+    if (!IsAdmin())
+        return Forbid();
+
+    var artist = _context.Artists
+        .FirstOrDefault(a =>
+            a.ArtistId == model.ArtistId);
+
+    if (artist == null)
+        return NotFound();
+
+    if (!ModelState.IsValid)
+        return View(model);
+
+    var duplicateExists =
+        _context.Artists.Any(a =>
+            a.ArtistId != model.ArtistId &&
+            a.ArtistName.ToLower() ==
+            model.ArtistName.Trim().ToLower());
+
+    if (duplicateExists)
+    {
+        ModelState.AddModelError(
+            nameof(model.ArtistName),
+            "Another artist already uses this name.");
+
+        return View(model);
+    }
+
+    artist.ArtistName =
+        model.ArtistName.Trim();
+
+    artist.ArtistDescription =
+        string.IsNullOrWhiteSpace(model.ArtistDescription)
+            ? null
+            : model.ArtistDescription.Trim();
+
+    artist.ArtistPhoto =
+        string.IsNullOrWhiteSpace(model.ArtistPhoto)
+            ? null
+            : model.ArtistPhoto.Trim();
+
+    _context.Artists.Update(artist);
+    _context.SaveChanges();
+
+    TempData["Success"] =
+        $"{artist.ArtistName} was updated successfully.";
+
+    return RedirectToAction(nameof(Artists));
+}
+private long GetNextArtistId()
+{
+    var maxId = _context.Artists
+        .Select(x => (long?)x.ArtistId)
+        .Max();
+
+    return (maxId ?? 0) + 1;
+}
+// =========================================================
+// RELEASES
+// =========================================================
+
+[HttpGet]
+public IActionResult Releases()
+{
+    if (!IsAdmin())
+        return Forbid();
+
+    var releases = _context.Releases
+        .Include(r => r.ReleaseArtists)
+            .ThenInclude(ra => ra.Artist)
+        .OrderBy(r => r.Title)
+        .ToList();
+
+    return View(releases);
+}
+
+
+// =========================================================
+// EDIT RELEASE - GET
+// =========================================================
+
+    [HttpGet]
+    public IActionResult EditRelease(long id)
+    {
+        if (!IsAdmin())
+            return Forbid();
+
+
+        var release = _context.Releases
+            .Include(r => r.ReleaseArtists)
+            .ThenInclude(ra => ra.Artist)
+            .FirstOrDefault(r =>
+                r.ReleaseId == id);
+
+
+        if (release == null)
+            return NotFound();
+
+
+        var mainArtist = release.ReleaseArtists
+            .FirstOrDefault(ra =>
+                ra.Type == ArtistReleaseType.MAIN);
+
+
+        var featuredArtists = release.ReleaseArtists
+            .Where(ra =>
+                ra.Type == ArtistReleaseType.FEATURE)
+            .OrderBy(ra => ra.ReleaseOrdinal)
+            .Select(ra => ra.ArtistId)
+            .ToList();
+
+
+        var model = new EditReleaseViewModel
+        {
+            ReleaseId =
+                release.ReleaseId,
+
+            Title =
+                release.Title,
+
+            RecordLabel =
+                release.RecordLabel,
+
+            Genre =
+                release.Genre,
+
+            ReleaseDate =
+                release.ReleaseDate,
+
+            CoverPhoto =
+                release.CoverPhoto,
+
+            MainArtistId =
+                mainArtist?.ArtistId ?? 0,
+
+            FeaturedArtistIds =
+                featuredArtists
+        };
+
+
+        LoadArtists();
+
+
+        return View(model);
+    }
+
+
+// =========================================================
+// EDIT RELEASE - POST
+// =========================================================
+
+[HttpPost]
+[ValidateAntiForgeryToken]
+public IActionResult EditRelease(
+    EditReleaseViewModel model)
+{
+    if (!IsAdmin())
+        return Forbid();
+
+
+    var release = _context.Releases
+        .Include(r => r.ReleaseArtists)
+        .FirstOrDefault(r =>
+            r.ReleaseId == model.ReleaseId);
+
+
+    if (release == null)
+        return NotFound();
+
+
+    // ==========================================
+    // ARTIST VALIDATION
+    // ==========================================
+
+    var mainArtistExists =
+        _context.Artists.Any(a =>
+            a.ArtistId == model.MainArtistId);
+
+
+    if (!mainArtistExists)
+    {
+        ModelState.AddModelError(
+            nameof(model.MainArtistId),
+            "Please select a valid main artist.");
+    }
+
+
+    model.FeaturedArtistIds ??=
+        new List<long>();
+
+
+    model.FeaturedArtistIds =
+        model.FeaturedArtistIds
+            .Distinct()
+            .Where(id =>
+                id != model.MainArtistId)
+            .ToList();
+
+
+    if (model.FeaturedArtistIds.Count > 0)
+    {
+        var validFeaturedCount =
+            _context.Artists.Count(a =>
+                model.FeaturedArtistIds
+                    .Contains(a.ArtistId));
+
+
+        if (validFeaturedCount !=
+            model.FeaturedArtistIds.Count)
+        {
+            ModelState.AddModelError(
+                nameof(model.FeaturedArtistIds),
+                "One or more featured artists are invalid.");
+        }
+    }
+
+
+    if (!ModelState.IsValid)
+    {
+        LoadArtists();
+
+        return View(model);
+    }
+
+
+    using var transaction =
+        _context.Database.BeginTransaction();
+
+
+    try
+    {
+        // ==========================================
+        // UPDATE RELEASE INFORMATION
+        // ==========================================
+
+        release.Title =
+            model.Title.Trim();
+
+        release.RecordLabel =
+            string.IsNullOrWhiteSpace(
+                model.RecordLabel)
+                ? null
+                : model.RecordLabel.Trim();
+
+        release.Genre =
+            model.Genre.Trim();
+
+        release.ReleaseDate =
+            model.ReleaseDate;
+
+        release.CoverPhoto =
+            model.CoverPhoto.Trim();
+
+
+        _context.Releases.Update(
+            release);
+
+
+        // ==========================================
+        // REMOVE OLD RELEASE ARTIST LINKS
+        // ==========================================
+
+        var existingArtistLinks =
+            release.ReleaseArtists.ToList();
+
+
+        _context.ReleaseArtists.RemoveRange(
+            existingArtistLinks);
+
+
+        _context.SaveChanges();
+
+
+        // ==========================================
+        // ADD MAIN ARTIST
+        // ==========================================
+
+        _context.ReleaseArtists.Add(
+            new ReleaseArtist
+            {
+                ReleaseId =
+                    release.ReleaseId,
+
+                ArtistId =
+                    model.MainArtistId,
+
+                ReleaseOrdinal =
+                    1,
+
+                Type =
+                    ArtistReleaseType.MAIN
+            });
+
+
+        // ==========================================
+        // ADD FEATURED ARTISTS
+        // ==========================================
+
+        long ordinal = 2;
+
+
+        foreach (var artistId
+                 in model.FeaturedArtistIds)
+        {
+            _context.ReleaseArtists.Add(
+                new ReleaseArtist
+                {
+                    ReleaseId =
+                        release.ReleaseId,
+
+                    ArtistId =
+                        artistId,
+
+                    ReleaseOrdinal =
+                        ordinal++,
+
+                    Type =
+                        ArtistReleaseType.FEATURE
+                });
+        }
+
+
+        _context.SaveChanges();
+
+
+        transaction.Commit();
+
+
+        TempData["Success"] =
+            $"{release.Title} was updated successfully.";
+
+
+        return RedirectToAction(
+            nameof(Releases));
+    }
+    catch
+    {
+        transaction.Rollback();
+
+        throw;
+    }
+}
+}
Index: KernelRecordsMVC.Web/Controllers/ArtistController.cs
===================================================================
--- KernelRecordsMVC.Web/Controllers/ArtistController.cs	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
+++ KernelRecordsMVC.Web/Controllers/ArtistController.cs	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -0,0 +1,51 @@
+﻿using KernelRecordsMVC.Infrastructure.Data;
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.EntityFrameworkCore;
+
+namespace KernelRecordsMVC.Web.Controllers;
+
+public class ArtistController : Controller
+{
+    private readonly KernelRecordsContext _context;
+
+    public ArtistController(KernelRecordsContext context)
+    {
+        _context = context;
+    }
+
+
+    // =========================================================
+    // ARTIST LIST
+    // =========================================================
+
+    [HttpGet]
+    public IActionResult Index()
+    {
+        var artists = _context.Artists
+            .OrderBy(a => a.ArtistName)
+            .ToList();
+
+        return View(artists);
+    }
+
+
+    // =========================================================
+    // ARTIST DETAILS
+    // =========================================================
+
+    [HttpGet]
+    public IActionResult Details(long id)
+    {
+        var artist = _context.Artists
+            .Include(a => a.ReleaseArtists)
+            .ThenInclude(ra => ra.Release)
+            .ThenInclude(r => r.Products)
+            .FirstOrDefault(a =>
+                a.ArtistId == id);
+
+        if (artist == null)
+            return NotFound();
+
+        return View(artist);
+    }
+}
Index: KernelRecordsMVC.Web/Controllers/WishlistController.cs
===================================================================
--- KernelRecordsMVC.Web/Controllers/WishlistController.cs	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Controllers/WishlistController.cs	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -54,16 +54,22 @@
     public IActionResult Add(long productId)
     {
-        var userId = GetUserId();
-
-        if (userId == null)
-        {
-            return RedirectToAction(
-                "Login",
-                "Account");
-        }
-
-        var product = _context.Products
-            .Include(p => p.Release)
-            .FirstOrDefault(p => p.ProductId == productId);
+        var sessionUserId =
+            HttpContext.Session.GetInt32("UserId");
+
+        if (!sessionUserId.HasValue)
+        {
+            return RedirectToAction(
+                "Login",
+                "Account");
+        }
+
+        var userId =
+            (long)sessionUserId.Value;
+
+
+        var product =
+            _context.Products
+                .FirstOrDefault(p =>
+                    p.ProductId == productId);
 
         if (product == null)
@@ -71,54 +77,66 @@
 
 
-        // Find existing wishlist
-        var wishlist = _context.Wishlists
-            .Include(w => w.WishlistProducts)
-            .FirstOrDefault(w =>
-                w.UserId == userId.Value);
-
-
-        // Create wishlist if user doesn't have one
+        var wishlist =
+            _context.Wishlists
+                .FirstOrDefault(w =>
+                    w.UserId == userId);
+
+
+        // Create wishlist if user doesn't have one yet.
         if (wishlist == null)
         {
             wishlist = new Wishlist
             {
-                WishlistId = GetNextWishlistId(),
-                UserId = userId.Value
+                WishlistId =
+                    GetNextWishlistId(),
+
+                UserId =
+                    userId
             };
 
-            _context.Wishlists.Add(wishlist);
+
+            _context.Wishlists.Add(
+                wishlist);
+
             _context.SaveChanges();
         }
 
 
-        // Check if product is already there
-        var alreadyExists = wishlist.WishlistProducts
-            .Any(x => x.ProductId == productId);
+        // Prevent duplicate product.
+        var alreadyExists =
+            _context.WishlistProducts
+                .Any(wp =>
+                    wp.WishlistId ==
+                    wishlist.WishlistId &&
+                    wp.ProductId ==
+                    productId);
+
 
         if (!alreadyExists)
         {
-            var wishlistProduct = new WishlistProduct
-            {
-                WishlistId = wishlist.WishlistId,
-                ProductId = productId,
-                AddedAt = DateTime.Today
-            };
-
-            _context.WishlistProducts.Add(wishlistProduct);
+            var wishlistProduct =
+                new WishlistProduct
+                {
+                    WishlistId =
+                        wishlist.WishlistId,
+
+                    ProductId =
+                        productId
+                };
+
+
+            _context.WishlistProducts.Add(
+                wishlistProduct);
+
             _context.SaveChanges();
-
-            TempData["Success"] =
-                "Product added to your wishlist.";
-        }
-        else
-        {
-            TempData["Info"] =
-                "This product is already in your wishlist.";
-        }
+        }
+
+
+        TempData["Success"] =
+            "Product added to your wishlist.";
+
 
         return RedirectToAction(
-            "Details",
-            "Release",
-            new { id = product.ReleaseId });
+            nameof(Index));
     }
 
Index: KernelRecordsMVC.Web/Views/Account/Login.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Account/Login.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Account/Login.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1,66 +1,193 @@
 ﻿@model KernelRecordsMVC.Application.ViewModels.LoginViewModel
 
-<h2>Login</h2>
+@{
+    ViewData["Title"] = "Login";
+}
 
-<form asp-action="Login" method="post">
+<div class="auth-page">
 
-    <div asp-validation-summary="ModelOnly"
-         class="text-danger">
-    </div>
+    <div class="auth-shell">
+
+        <div class="auth-brand-panel">
+
+            <a asp-controller="Home"
+               asp-action="Index"
+               class="auth-logo-link">
+
+                <img src="~/images/logo.png"
+                     asp-append-version="true"
+                     alt="Kernel Records"
+                     class="auth-logo" />
+
+            </a>
+
+            <div class="auth-brand-copy">
+
+                <span class="auth-eyebrow">
+                    KERNEL RECORDS
+                </span>
+
+                <h1>
+                    Welcome back.
+                </h1>
+
+                <p>
+                    Sign in to manage your wishlist,
+                    orders and record collection.
+                </p>
+
+            </div>
+
+        </div>
 
 
-    <div class="mb-3">
+        <div class="auth-form-panel">
 
-        <label asp-for="Username"
-               class="form-label">
-        </label>
+            <div class="auth-form-header">
 
-        <input asp-for="Username"
-               class="form-control"/>
+                <span class="auth-eyebrow">
+                    ACCOUNT
+                </span>
 
-        <span asp-validation-for="Username"
-              class="text-danger">
-        </span>
+                <h2>Login</h2>
+
+                <p>
+                    Enter your account details below.
+                </p>
+
+            </div>
+
+
+            <form asp-action="Login"
+                  method="post"
+                  class="auth-form">
+
+                @Html.AntiForgeryToken()
+
+
+                <div asp-validation-summary="ModelOnly"
+                     class="auth-validation-summary">
+                </div>
+
+
+                <!-- USERNAME -->
+
+                <div class="auth-field">
+
+                    <label asp-for="Username">
+                        Username
+                    </label>
+
+                    <input asp-for="Username"
+                           autocomplete="username"
+                           placeholder="Enter your username" />
+
+                    <span asp-validation-for="Username"
+                          class="auth-field-error">
+                    </span>
+
+                </div>
+
+
+                <!-- PASSWORD -->
+
+                <div class="auth-field">
+
+                    <label asp-for="Password">
+                        Password
+                    </label>
+
+                    <div class="auth-password-field">
+
+                        <input asp-for="Password"
+                               autocomplete="current-password"
+                               placeholder="Enter your password"
+                               id="loginPassword" />
+
+                        <button type="button"
+                                class="auth-password-toggle"
+                                data-password-toggle="loginPassword"
+                                aria-label="Show password">
+
+                            Show
+
+                        </button>
+
+                    </div>
+
+                    <span asp-validation-for="Password"
+                          class="auth-field-error">
+                    </span>
+
+                </div>
+
+
+                <button type="submit"
+                        class="auth-submit">
+
+                    Login
+
+                </button>
+
+            </form>
+
+
+            <div class="auth-switch">
+
+                <span>
+                    Don't have an account?
+                </span>
+
+                <a asp-action="Register">
+                    Create account →
+                </a>
+
+            </div>
+
+        </div>
 
     </div>
 
+</div>
 
-    <div class="mb-3">
-
-        <label asp-for="Password"
-               class="form-label">
-        </label>
-
-        <input asp-for="Password"
-               class="form-control"/>
-
-        <span asp-validation-for="Password"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <button type="submit"
-            class="btn btn-primary">
-
-        Login
-
-    </button>
-
-</form>
-
-<div class="mt-3">
-
-    Don't have an account?
-
-    <a asp-action="Register">
-        Register
-    </a>
-
-</div>
 
 @section Scripts
 {
-    <partial name="_ValidationScriptsPartial"/>
+    <partial name="_ValidationScriptsPartial" />
+
+    <script>
+
+        document
+            .querySelectorAll("[data-password-toggle]")
+            .forEach(function (button)
+            {
+                button.addEventListener(
+                    "click",
+                    function ()
+                    {
+                        const input =
+                            document.getElementById(
+                                button.dataset.passwordToggle);
+
+
+                        if (input.type === "password")
+                        {
+                            input.type = "text";
+                            button.textContent = "Hide";
+                            button.setAttribute(
+                                "aria-label",
+                                "Hide password");
+                        }
+                        else
+                        {
+                            input.type = "password";
+                            button.textContent = "Show";
+                            button.setAttribute(
+                                "aria-label",
+                                "Show password");
+                        }
+                    });
+            });
+
+    </script>
 }
Index: KernelRecordsMVC.Web/Views/Account/Register.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Account/Register.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Account/Register.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1,101 +1,292 @@
 ﻿@model KernelRecordsMVC.Application.ViewModels.RegisterViewModel
 
-<h2>Register</h2>
-
-<form asp-action="Register" method="post">
-
-    <div class="mb-3">
-        <label asp-for="Email" class="form-label"></label>
-
-        <input asp-for="Email"
-               class="form-control"/>
-
-        <span asp-validation-for="Email"
-              class="text-danger"></span>
+@{
+    ViewData["Title"] = "Register";
+}
+
+<div class="auth-page">
+
+    <div class="auth-shell auth-shell-register">
+
+        <div class="auth-brand-panel">
+
+            <a asp-controller="Home"
+               asp-action="Index"
+               class="auth-logo-link">
+
+                <img src="~/images/logo.png"
+                     asp-append-version="true"
+                     alt="Kernel Records"
+                     class="auth-logo" />
+
+            </a>
+
+            <div class="auth-brand-copy">
+
+                <span class="auth-eyebrow">
+                    KERNEL RECORDS
+                </span>
+
+                <h1>
+                    Start your collection.
+                </h1>
+
+                <p>
+                    Create an account to save releases,
+                    build your wishlist and place orders.
+                </p>
+
+            </div>
+
+        </div>
+
+
+        <div class="auth-form-panel">
+
+            <div class="auth-form-header">
+
+                <span class="auth-eyebrow">
+                    NEW ACCOUNT
+                </span>
+
+                <h2>Register</h2>
+
+                <p>
+                    Create your Kernel Records account.
+                </p>
+
+            </div>
+
+
+            <form asp-action="Register"
+                  method="post"
+                  class="auth-form">
+
+                @Html.AntiForgeryToken()
+
+
+                <div asp-validation-summary="ModelOnly"
+                     class="auth-validation-summary">
+                </div>
+
+
+                <!-- EMAIL -->
+
+                <div class="auth-field">
+
+                    <label asp-for="Email">
+                        Email
+                    </label>
+
+                    <input asp-for="Email"
+                           autocomplete="email"
+                           placeholder="mila@gmail.com" />
+
+                    <span asp-validation-for="Email"
+                          class="auth-field-error">
+                    </span>
+
+                </div>
+
+
+                <!-- USERNAME -->
+
+                <div class="auth-field">
+
+                    <label asp-for="Username">
+                        Username
+                    </label>
+
+                    <input asp-for="Username"
+                           autocomplete="username"
+                           placeholder="Choose a username" />
+
+                    <span asp-validation-for="Username"
+                          class="auth-field-error">
+                    </span>
+
+                </div>
+
+
+                <!-- PASSWORD ROW -->
+
+                <div class="auth-form-row">
+
+                    <div class="auth-field">
+
+                        <label asp-for="Password">
+                            Password
+                        </label>
+
+                        <div class="auth-password-field">
+
+                            <input asp-for="Password"
+                                   autocomplete="new-password"
+                                   placeholder="Create password"
+                                   id="registerPassword" />
+
+                            <button type="button"
+                                    class="auth-password-toggle"
+                                    data-password-toggle="registerPassword"
+                                    aria-label="Show password">
+
+                                Show
+
+                            </button>
+
+                        </div>
+
+                        <span asp-validation-for="Password"
+                              class="auth-field-error">
+                        </span>
+
+                    </div>
+
+
+                    <div class="auth-field">
+
+                        <label asp-for="ConfirmPassword">
+                            Confirm Password
+                        </label>
+
+                        <div class="auth-password-field">
+
+                            <input asp-for="ConfirmPassword"
+                                   autocomplete="new-password"
+                                   placeholder="Repeat password"
+                                   id="confirmPassword" />
+
+                            <button type="button"
+                                    class="auth-password-toggle"
+                                    data-password-toggle="confirmPassword"
+                                    aria-label="Show password">
+
+                                Show
+
+                            </button>
+
+                        </div>
+
+                        <span asp-validation-for="ConfirmPassword"
+                              class="auth-field-error">
+                        </span>
+
+                    </div>
+
+                </div>
+
+
+                <!-- SHIPPING ADDRESS -->
+
+                <div class="auth-field">
+
+                    <label asp-for="ShippingAddress">
+                        Shipping Address
+                        <span class="auth-optional">
+                            Optional
+                        </span>
+                    </label>
+
+                    <input asp-for="ShippingAddress"
+                           autocomplete="street-address"
+                           placeholder="Shipping address" />
+
+                    <span asp-validation-for="ShippingAddress"
+                          class="auth-field-error">
+                    </span>
+
+                </div>
+
+
+                <!-- TELEPHONE -->
+
+                <div class="auth-field">
+
+                    <label asp-for="TelephoneNumber">
+                        Telephone Number
+                        <span class="auth-optional">
+                            Optional
+                        </span>
+                    </label>
+    
+                    <input asp-for="TelephoneNumber"
+                           type="tel"
+                           autocomplete="tel"
+                           placeholder="+389..." />
+
+                    <span asp-validation-for="TelephoneNumber"
+                          class="auth-field-error">
+                    </span>
+
+                </div>
+
+
+                <button type="submit"
+                        class="auth-submit">
+
+                    Create Account
+
+                </button>
+
+            </form>
+
+
+            <div class="auth-switch">
+
+                <span>
+                    Already have an account?
+                </span>
+
+                <a asp-action="Login">
+                    Login →
+                </a>
+
+            </div>
+
+        </div>
+
     </div>
 
-
-    <div class="mb-3">
-        <label asp-for="Username" class="form-label"></label>
-
-        <input asp-for="Username"
-               class="form-control"/>
-
-        <span asp-validation-for="Username"
-              class="text-danger"></span>
-    </div>
-
-
-    <div class="mb-3">
-        <label asp-for="Password"
-               class="form-label"></label>
-
-        <input asp-for="Password"
-               class="form-control"/>
-
-        <span asp-validation-for="Password"
-              class="text-danger"></span>
-    </div>
-
-
-    <div class="mb-3">
-        <label asp-for="ConfirmPassword"
-               class="form-label"></label>
-
-        <input asp-for="ConfirmPassword"
-               class="form-control"/>
-
-        <span asp-validation-for="ConfirmPassword"
-              class="text-danger"></span>
-    </div>
-
-
-    <div class="mb-3">
-        <label asp-for="ShippingAddress"
-               class="form-label">
-
-            Shipping Address
-
-        </label>
-
-        <input asp-for="ShippingAddress"
-               class="form-control"/>
-    </div>
-
-
-    <div class="mb-3">
-        <label asp-for="TelephoneNumber"
-               class="form-label">
-
-            Telephone Number
-
-        </label>
-
-        <input asp-for="TelephoneNumber"
-               class="form-control"/>
-    </div>
-
-
-    <button type="submit"
-            class="btn btn-primary">
-
-        Register
-
-    </button>
-
-</form>
-
-<div class="mt-3">
-
-    Already have an account?
-
-    <a asp-action="Login">
-        Login
-    </a>
-
 </div>
+
 
 @section Scripts
 {
-    <partial name="_ValidationScriptsPartial"/>
+    <partial name="_ValidationScriptsPartial" />
+
+    <script>
+
+        document
+            .querySelectorAll("[data-password-toggle]")
+            .forEach(function (button)
+            {
+                button.addEventListener(
+                    "click",
+                    function ()
+                    {
+                        const input =
+                            document.getElementById(
+                                button.dataset.passwordToggle);
+
+
+                        if (input.type === "password")
+                        {
+                            input.type = "text";
+                            button.textContent = "Hide";
+                            button.setAttribute(
+                                "aria-label",
+                                "Hide password");
+                        }
+                        else
+                        {
+                            input.type = "password";
+                            button.textContent = "Show";
+                            button.setAttribute(
+                                "aria-label",
+                                "Show password");
+                        }
+                    });
+            });
+
+    </script>
 }
Index: KernelRecordsMVC.Web/Views/Admin/Artists.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/Artists.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
+++ KernelRecordsMVC.Web/Views/Admin/Artists.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -0,0 +1,139 @@
+﻿@model IEnumerable<KernelRecordsMVC.Models.Artist>
+
+@{
+    ViewData["Title"] = "Manage Artists";
+}
+
+<div class="admin-page">
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Index"
+               class="admin-back-link">
+                ← Dashboard
+            </a>
+
+            <span class="admin-eyebrow">
+                CATALOG MANAGEMENT
+            </span>
+
+            <h1>Artists</h1>
+
+            <p>
+                Manage artists displayed in the store catalog.
+            </p>
+
+        </div>
+
+
+        <div class="admin-header-actions">
+
+            <a asp-action="CreateArtist"
+               class="admin-button primary">
+                ＋ New Artist
+            </a>
+
+        </div>
+
+    </div>
+
+
+    @if (TempData["Success"] != null)
+    {
+        <div class="admin-alert success">
+            ✓ @TempData["Success"]
+        </div>
+    }
+
+
+    <div class="admin-table-wrapper">
+
+        <table class="admin-table">
+
+            <thead>
+                <tr>
+                    <th>Artist</th>
+                    <th>Description</th>
+                    <th></th>
+                </tr>
+            </thead>
+
+            <tbody>
+
+                @foreach (var artist in Model)
+                {
+                    <tr>
+
+                        <td>
+
+                            <div class="admin-artist-cell">
+
+                                @if (!string.IsNullOrWhiteSpace(
+                                    artist.ArtistPhoto))
+                                {
+                                    <img src="@artist.ArtistPhoto"
+                                         alt="@artist.ArtistName"
+                                         class="admin-artist-thumb" />
+                                }
+                                else
+                                {
+                                    <div class="admin-artist-thumb placeholder">
+                                        ♪
+                                    </div>
+                                }
+
+                                <strong>
+                                    @artist.ArtistName
+                                </strong>
+
+                            </div>
+
+                        </td>
+
+
+                        <td>
+
+                            @if (string.IsNullOrWhiteSpace(
+                                artist.ArtistDescription))
+                            {
+                                <span class="admin-muted">
+                                    No description
+                                </span>
+                            }
+                            else
+                            {
+                                @artist.ArtistDescription
+                            }
+
+                        </td>
+
+
+                        <td class="admin-table-actions">
+
+                            <a asp-action="EditArtist"
+                               asp-route-id="@artist.ArtistId"
+                               class="admin-button secondary">
+                                Edit
+                            </a>
+
+                            <a asp-controller="Artist"
+                               asp-action="Details"
+                               asp-route-id="@artist.ArtistId"
+                               class="admin-button secondary">
+                                View
+                            </a>
+
+                        </td>
+
+                    </tr>
+                }
+
+            </tbody>
+
+        </table>
+
+    </div>
+
+</div>
Index: KernelRecordsMVC.Web/Views/Admin/CreateArtist.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/CreateArtist.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
+++ KernelRecordsMVC.Web/Views/Admin/CreateArtist.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -0,0 +1,107 @@
+﻿@model KernelRecordsMVC.Application.ViewModels.CreateArtistViewModel
+
+@{
+    ViewData["Title"] = "Create Artist";
+}
+
+<div class="admin-page admin-form-page">
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Artists"
+               class="admin-back-link">
+                ← Artists
+            </a>
+
+            <span class="admin-eyebrow">
+                CATALOG MANAGEMENT
+            </span>
+
+            <h1>Create Artist</h1>
+
+            <p>
+                Add a new artist to the catalog.
+            </p>
+
+        </div>
+
+    </div>
+
+
+    <form asp-action="CreateArtist"
+          method="post">
+
+        @Html.AntiForgeryToken()
+
+        <div asp-validation-summary="ModelOnly"
+             class="admin-validation">
+        </div>
+
+
+        <section class="admin-form-card">
+
+            <div class="admin-form-field">
+
+                <label asp-for="ArtistName"></label>
+
+                <input asp-for="ArtistName"
+                       placeholder="Artist name" />
+
+                <span asp-validation-for="ArtistName"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <div class="admin-form-field">
+
+                <label asp-for="ArtistDescription"></label>
+
+                <textarea asp-for="ArtistDescription"
+                          rows="6"
+                          placeholder="Artist biography or description">
+                </textarea>
+
+                <span asp-validation-for="ArtistDescription"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <div class="admin-form-field">
+
+                <label asp-for="ArtistPhoto"></label>
+
+                <input asp-for="ArtistPhoto"
+                       placeholder="https://..." />
+
+                <span asp-validation-for="ArtistPhoto"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <div class="admin-form-actions">
+
+                <a asp-action="Artists"
+                   class="admin-button secondary">
+                    Cancel
+                </a>
+
+                <button type="submit"
+                        class="admin-button primary">
+                    Create Artist
+                </button>
+
+            </div>
+
+        </section>
+
+    </form>
+
+</div>
Index: KernelRecordsMVC.Web/Views/Admin/EditArtist.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/EditArtist.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
+++ KernelRecordsMVC.Web/Views/Admin/EditArtist.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -0,0 +1,128 @@
+﻿@model KernelRecordsMVC.Application.ViewModels.EditArtistViewModel
+
+@{
+    ViewData["Title"] = "Edit Artist";
+}
+
+<div class="admin-page admin-form-page">
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Artists"
+               class="admin-back-link">
+                ← Artists
+            </a>
+
+            <span class="admin-eyebrow">
+                CATALOG MANAGEMENT
+            </span>
+
+            <h1>Edit Artist</h1>
+
+            <p>
+                Update artist information shown in the catalog.
+            </p>
+
+        </div>
+
+    </div>
+
+
+    <form asp-action="EditArtist"
+          method="post">
+
+        @Html.AntiForgeryToken()
+
+        <input asp-for="ArtistId"
+               type="hidden" />
+
+
+        <div asp-validation-summary="ModelOnly"
+             class="admin-validation">
+        </div>
+
+
+        <section class="admin-form-card">
+
+            <div class="admin-form-field">
+
+                <label asp-for="ArtistName"></label>
+
+                <input asp-for="ArtistName" />
+
+                <span asp-validation-for="ArtistName"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <div class="admin-form-field">
+
+                <label asp-for="ArtistDescription"></label>
+
+                <textarea asp-for="ArtistDescription"
+                          rows="6">
+                </textarea>
+
+                <span asp-validation-for="ArtistDescription"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <div class="admin-form-field">
+
+                <label asp-for="ArtistPhoto"></label>
+
+                <input asp-for="ArtistPhoto" />
+
+                <span asp-validation-for="ArtistPhoto"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            @if (!string.IsNullOrWhiteSpace(
+                Model.ArtistPhoto))
+            {
+                <div class="admin-cover-preview">
+
+                    <span class="admin-eyebrow">
+                        CURRENT PHOTO
+                    </span>
+
+                    <div class="admin-cover-preview-image">
+
+                        <img src="@Model.ArtistPhoto"
+                             alt="@Model.ArtistName" />
+
+                    </div>
+
+                </div>
+            }
+
+
+            <div class="admin-form-actions">
+
+                <a asp-action="Artists"
+                   class="admin-button secondary">
+                    Cancel
+                </a>
+
+                <button type="submit"
+                        class="admin-button primary">
+                    Save Changes
+                </button>
+
+            </div>
+
+        </section>
+
+    </form>
+
+</div>
Index: KernelRecordsMVC.Web/Views/Admin/EditRelease.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/EditRelease.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
+++ KernelRecordsMVC.Web/Views/Admin/EditRelease.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -0,0 +1,406 @@
+﻿@model KernelRecordsMVC.Application.ViewModels.EditReleaseViewModel
+
+@{
+    ViewData["Title"] = "Edit Release";
+}
+
+<div class="admin-page admin-form-page">
+
+    <!-- =====================================================
+         HEADER
+         ===================================================== -->
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Releases"
+               class="admin-back-link">
+                ← Releases
+            </a>
+
+            <span class="admin-eyebrow">
+                CATALOG MANAGEMENT
+            </span>
+
+            <h1>Edit Release</h1>
+
+            <p>
+                Update release information and artist assignments.
+            </p>
+
+        </div>
+
+    </div>
+
+
+    <form asp-action="EditRelease"
+          method="post">
+
+        @Html.AntiForgeryToken()
+
+        <input asp-for="ReleaseId"
+               type="hidden" />
+
+
+        <div asp-validation-summary="ModelOnly"
+             class="admin-validation">
+        </div>
+
+
+        <!-- =================================================
+             RELEASE INFORMATION
+             ================================================= -->
+
+        <section class="admin-form-card release-create-section">
+
+            <div class="admin-form-card-header">
+
+                <span class="admin-eyebrow">
+                    RELEASE
+                </span>
+
+                <h2>Release Information</h2>
+
+                <p class="admin-section-description">
+                    Update the catalog information for this release.
+                </p>
+
+            </div>
+
+
+            <!-- TITLE -->
+
+            <div class="admin-form-field">
+
+                <label asp-for="Title">
+                    Title
+                </label>
+
+                <input asp-for="Title"
+                       placeholder="Release title" />
+
+                <span asp-validation-for="Title"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <!-- GENRE + DATE -->
+
+            <div class="admin-form-row">
+
+                <div class="admin-form-field">
+
+                    <label asp-for="Genre">
+                        Genre
+                    </label>
+
+                    <input asp-for="Genre"
+                           placeholder="Rock, Pop, Jazz..." />
+
+                    <span asp-validation-for="Genre"
+                          class="admin-field-error">
+                    </span>
+
+                </div>
+
+
+                <div class="admin-form-field">
+
+                    <label asp-for="ReleaseDate">
+                        Release Date
+                    </label>
+
+                    <input asp-for="ReleaseDate"
+                           type="date" />
+
+                    <span asp-validation-for="ReleaseDate"
+                          class="admin-field-error">
+                    </span>
+
+                </div>
+
+            </div>
+
+
+            <!-- RECORD LABEL -->
+
+            <div class="admin-form-field">
+
+                <label asp-for="RecordLabel">
+                    Record Label
+                </label>
+
+                <input asp-for="RecordLabel"
+                       placeholder="Record label" />
+
+                <span asp-validation-for="RecordLabel"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <!-- COVER PHOTO -->
+
+            <div class="admin-form-field">
+
+                <label asp-for="CoverPhoto">
+                    Cover Photo URL
+                </label>
+
+                <input asp-for="CoverPhoto"
+                       id="coverPhotoInput"
+                       placeholder="https://..." />
+
+                <span asp-validation-for="CoverPhoto"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <!-- COVER PREVIEW -->
+
+            <div class="admin-cover-preview">
+
+                <span class="admin-eyebrow">
+                    COVER PREVIEW
+                </span>
+
+                <div class="admin-cover-preview-image"
+                     id="coverPreview">
+
+                    @if (!string.IsNullOrWhiteSpace(
+                        Model.CoverPhoto))
+                    {
+                        <img src="@Model.CoverPhoto"
+                             alt="@Model.Title" />
+                    }
+                    else
+                    {
+                        <span>♪</span>
+                    }
+
+                </div>
+
+            </div>
+
+        </section>
+
+
+        <!-- =================================================
+             ARTISTS
+             ================================================= -->
+
+        <section class="admin-form-card release-create-section">
+
+            <div class="admin-form-card-header">
+
+                <span class="admin-eyebrow">
+                    ARTISTS
+                </span>
+
+                <h2>Release Artists</h2>
+
+                <p class="admin-section-description">
+                    Change the main artist or featured artists
+                    associated with this release.
+                </p>
+
+            </div>
+
+
+            <!-- MAIN ARTIST -->
+
+            <div class="admin-form-field">
+
+                <label asp-for="MainArtistId">
+                    Main Artist
+                </label>
+
+                <select asp-for="MainArtistId">
+
+                    <option value="">
+                        Select main artist
+                    </option>
+
+                    @foreach (var artist in ViewBag.Artists)
+                    {
+                        <option value="@artist.ArtistId">
+                            @artist.ArtistName
+                        </option>
+                    }
+
+                </select>
+
+                <span asp-validation-for="MainArtistId"
+                      class="admin-field-error">
+                </span>
+
+                <small>
+                    This artist will be stored as the MAIN
+                    artist for the release.
+                </small>
+
+            </div>
+
+
+            <!-- FEATURED ARTISTS -->
+
+            <div class="admin-form-field">
+
+                <label asp-for="FeaturedArtistIds">
+                    Featured Artists
+                </label>
+
+                <select asp-for="FeaturedArtistIds"
+                        multiple
+                        class="admin-multi-select">
+
+                    @foreach (var artist in ViewBag.Artists)
+                    {
+                        <option value="@artist.ArtistId">
+                            @artist.ArtistName
+                        </option>
+                    }
+
+                </select>
+
+                <span asp-validation-for="FeaturedArtistIds"
+                      class="admin-field-error">
+                </span>
+
+                <small>
+                    Hold Ctrl on Windows or Cmd on macOS
+                    to select multiple featured artists.
+                </small>
+
+            </div>
+
+        </section>
+
+
+        <!-- =================================================
+             SAVE
+             ================================================= -->
+
+        <div class="admin-release-submit">
+
+            <div>
+
+                <span class="admin-eyebrow">
+                    SAVE CHANGES
+                </span>
+
+                <p>
+                    Release information and artist relationships
+                    will be updated together.
+                </p>
+
+            </div>
+
+
+            <div class="admin-form-actions release-actions">
+
+                <a asp-action="Releases"
+                   class="admin-button secondary">
+
+                    Cancel
+
+                </a>
+
+
+                <button type="submit"
+                        class="admin-button primary">
+
+                    Save Changes
+
+                </button>
+
+            </div>
+
+        </div>
+
+    </form>
+
+</div>
+
+
+@section Scripts
+{
+    <partial name="_ValidationScriptsPartial" />
+
+    <script>
+
+        document.addEventListener(
+            "DOMContentLoaded",
+            function ()
+            {
+                const coverInput =
+                    document.getElementById(
+                        "coverPhotoInput");
+
+                const coverPreview =
+                    document.getElementById(
+                        "coverPreview");
+
+
+                function showPlaceholder()
+                {
+                    coverPreview.innerHTML =
+                        "<span>♪</span>";
+                }
+
+
+                function updateCover()
+                {
+                    const url =
+                        coverInput.value.trim();
+
+
+                    if (!url)
+                    {
+                        showPlaceholder();
+
+                        return;
+                    }
+
+
+                    coverPreview.innerHTML = "";
+
+
+                    const image =
+                        document.createElement(
+                            "img");
+
+
+                    image.src =
+                        url;
+
+                    image.alt =
+                        "Release cover preview";
+
+
+                    image.addEventListener(
+                        "error",
+                        function ()
+                        {
+                            showPlaceholder();
+                        });
+
+
+                    coverPreview.appendChild(
+                        image);
+                }
+
+
+                coverInput.addEventListener(
+                    "input",
+                    updateCover);
+            });
+
+    </script>
+}
Index: KernelRecordsMVC.Web/Views/Admin/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Admin/Index.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -13,7 +13,8 @@
         <div>
 
-            <span class="admin-eyebrow">
-                KERNEL RECORDS
-            </span>
+            <img src="~/images/logo.png"
+                 asp-append-version="true"
+                 alt="Kernel Records"
+                 class="admin-page-logo" />
 
             <h1>Admin Dashboard</h1>
@@ -256,4 +257,52 @@
 
             </a>
+            <a asp-action="Artists"
+               class="admin-action-card">
+
+                <div class="admin-action-icon">
+                    ♫
+                </div>
+
+                <div>
+
+                    <h3>Manage Artists</h3>
+
+                    <p>
+                        Create and edit artist profiles,
+                        descriptions and photos.
+                    </p>
+
+                </div>
+
+                <span class="admin-action-arrow">
+                    →
+                </span>
+
+            </a>
+
+
+            <a asp-action="Releases"
+               class="admin-action-card">
+
+                <div class="admin-action-icon">
+                    ◉
+                </div>
+
+                <div>
+
+                    <h3>Manage Releases</h3>
+
+                    <p>
+                        Browse and edit albums and singles
+                        in the catalog.
+                    </p>
+
+                </div>
+
+                <span class="admin-action-arrow">
+                    →
+                </span>
+
+            </a>
 
         </div>
Index: KernelRecordsMVC.Web/Views/Admin/Releases.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/Releases.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
+++ KernelRecordsMVC.Web/Views/Admin/Releases.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -0,0 +1,128 @@
+﻿@model IEnumerable<KernelRecordsMVC.Models.Release>
+
+@{
+    ViewData["Title"] = "Manage Releases";
+}
+
+<div class="admin-page">
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Index"
+               class="admin-back-link">
+                ← Dashboard
+            </a>
+
+            <span class="admin-eyebrow">
+                CATALOG MANAGEMENT
+            </span>
+
+            <h1>Releases</h1>
+
+            <p>
+                Manage albums and singles in the catalog.
+            </p>
+
+        </div>
+
+
+        <a asp-action="CreateRelease"
+           class="admin-button primary">
+            ＋ New Release
+        </a>
+
+    </div>
+
+
+    @if (TempData["Success"] != null)
+    {
+        <div class="admin-alert success">
+            ✓ @TempData["Success"]
+        </div>
+    }
+
+
+    <div class="admin-table-wrapper">
+
+        <table class="admin-table">
+
+            <thead>
+
+                <tr>
+                    <th>Release</th>
+                    <th>Artist</th>
+                    <th>Genre</th>
+                    <th>Date</th>
+                    <th></th>
+                </tr>
+
+            </thead>
+
+
+            <tbody>
+
+                @foreach (var release in Model)
+                {
+                    var mainArtist =
+                        release.ReleaseArtists
+                            .OrderBy(x => x.ReleaseOrdinal)
+                            .FirstOrDefault();
+
+                    <tr>
+
+                        <td>
+
+                            <strong>
+                                @release.Title
+                            </strong>
+
+                        </td>
+
+
+                        <td>
+
+                            @(mainArtist?.Artist.ArtistName
+                              ?? "Unknown")
+
+                        </td>
+
+
+                        <td>
+                            @release.Genre
+                        </td>
+
+
+                        <td>
+                            @release.ReleaseDate.ToString("yyyy-MM-dd")
+                        </td>
+
+
+                        <td class="admin-table-actions">
+
+                            <a asp-action="EditRelease"
+                               asp-route-id="@release.ReleaseId"
+                               class="admin-button secondary">
+                                Edit
+                            </a>
+
+                            <a asp-controller="Release"
+                               asp-action="Details"
+                               asp-route-id="@release.ReleaseId"
+                               class="admin-button secondary">
+                                View
+                            </a>
+
+                        </td>
+
+                    </tr>
+                }
+
+            </tbody>
+
+        </table>
+
+    </div>
+
+</div>
Index: KernelRecordsMVC.Web/Views/Artist/Details.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Artist/Details.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
+++ KernelRecordsMVC.Web/Views/Artist/Details.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -0,0 +1,148 @@
+﻿@model KernelRecordsMVC.Models.Artist
+
+@{
+    ViewData["Title"] = Model.ArtistName;
+}
+
+<div class="artist-details-page">
+
+    <a asp-controller="Artist"
+       asp-action="Index"
+       class="artist-back-link">
+
+        ← All Artists
+
+    </a>
+
+
+    <section class="artist-details-hero">
+
+        <div class="artist-details-image">
+
+            @if (!string.IsNullOrWhiteSpace(
+                Model.ArtistPhoto))
+            {
+                <img src="@Model.ArtistPhoto"
+                     alt="@Model.ArtistName" />
+            }
+            else
+            {
+                <div class="artist-photo-placeholder large">
+                    ♪
+                </div>
+            }
+
+        </div>
+
+
+        <div class="artist-details-info">
+
+            <span class="artist-eyebrow">
+                ARTIST
+            </span>
+
+            <h1>
+                @Model.ArtistName
+            </h1>
+
+            @if (!string.IsNullOrWhiteSpace(
+                Model.ArtistDescription))
+            {
+                <p>
+                    @Model.ArtistDescription
+                </p>
+            }
+
+        </div>
+
+    </section>
+
+
+    <section class="artist-release-section">
+
+        <div class="artist-section-header">
+
+            <span class="artist-eyebrow">
+                DISCOGRAPHY
+            </span>
+
+            <h2>Releases</h2>
+
+        </div>
+
+
+        @{
+            var releases = Model.ReleaseArtists
+                .OrderBy(ra => ra.Release.ReleaseDate)
+                .Select(ra => ra.Release)
+                .DistinctBy(r => r.ReleaseId)
+                .ToList();
+        }
+
+
+        @if (!releases.Any())
+        {
+            <div class="artist-empty">
+                No releases are currently linked to this artist.
+            </div>
+        }
+        else
+        {
+            <div class="artist-release-grid">
+
+                @foreach (var release in releases)
+                {
+                    <a asp-controller="Release"
+                       asp-action="Details"
+                       asp-route-id="@release.ReleaseId"
+                       class="artist-release-card">
+
+                        <div class="artist-release-cover">
+
+                            @if (!string.IsNullOrWhiteSpace(
+                                release.CoverPhoto))
+                            {
+                                <img src="@release.CoverPhoto"
+                                     alt="@release.Title" />
+                            }
+                            else
+                            {
+                                <div class="artist-photo-placeholder">
+                                    ♪
+                                </div>
+                            }
+
+                        </div>
+
+
+                        <div class="artist-release-body">
+
+                            <h3>
+                                @release.Title
+                            </h3>
+
+                            <p>
+                                @release.ReleaseDate.Year
+                                ·
+                                @release.Genre
+                            </p>
+
+                            @if (release.Products.Any())
+                            {
+                                <span>
+                                    @release.Products.Count
+                                    product@(release.Products.Count == 1 ? "" : "s")
+                                </span>
+                            }
+
+                        </div>
+
+                    </a>
+                }
+
+            </div>
+        }
+
+    </section>
+
+</div>
Index: KernelRecordsMVC.Web/Views/Artist/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Artist/Index.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
+++ KernelRecordsMVC.Web/Views/Artist/Index.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -0,0 +1,85 @@
+﻿@model IEnumerable<KernelRecordsMVC.Models.Artist>
+
+@{
+    ViewData["Title"] = "Artists";
+}
+
+<div class="artist-page">
+
+    <div class="artist-page-header">
+
+        <span class="artist-eyebrow">
+            KERNEL RECORDS
+        </span>
+
+        <h1>Artists</h1>
+
+        <p>
+            Browse artists available in the Kernel Records catalog.
+        </p>
+
+    </div>
+
+
+    @if (!Model.Any())
+    {
+        <div class="artist-empty">
+            No artists are currently available.
+        </div>
+    }
+    else
+    {
+        <div class="artist-grid">
+
+            @foreach (var artist in Model)
+            {
+                <a asp-controller="Artist"
+                   asp-action="Details"
+                   asp-route-id="@artist.ArtistId"
+                   class="artist-card">
+
+                    <div class="artist-card-image">
+
+                        @if (!string.IsNullOrWhiteSpace(
+                            artist.ArtistPhoto))
+                        {
+                            <img src="@artist.ArtistPhoto"
+                                 alt="@artist.ArtistName" />
+                        }
+                        else
+                        {
+                            <div class="artist-photo-placeholder">
+                                ♪
+                            </div>
+                        }
+
+                    </div>
+
+
+                    <div class="artist-card-body">
+
+                        <h2>
+                            @artist.ArtistName
+                        </h2>
+
+                        @if (!string.IsNullOrWhiteSpace(
+                            artist.ArtistDescription))
+                        {
+                            <p>
+                                @artist.ArtistDescription
+                            </p>
+                        }
+
+                        <span class="artist-card-link">
+                            View Artist →
+                        </span>
+
+                    </div>
+
+                </a>
+            }
+
+        </div>
+    }
+
+</div>
Index: KernelRecordsMVC.Web/Views/Home/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Home/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Home/Index.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -12,8 +12,4 @@
 
         <div class="home-hero-content">
-
-            <span class="home-eyebrow">
-                KERNEL RECORDS
-            </span>
 
             <h1>
@@ -52,6 +48,9 @@
 
 
-        <div class="home-hero-mark">
-            K
+        <div class="hero-logo">
+            <img src="~/images/logo.png"
+                 asp-append-version="true"
+                 alt="Kernel Records"
+                 class="hero-logo-image" />
         </div>
 
Index: KernelRecordsMVC.Web/Views/Release/Details.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Release/Details.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Release/Details.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -68,4 +68,5 @@
                 </div>
 
+
                 <div>
 
@@ -78,4 +79,5 @@
                 </div>
 
+
                 <div>
 
@@ -83,5 +85,7 @@
 
                     <strong>
-                        @Model.RecordLabel
+                        @(string.IsNullOrWhiteSpace(Model.RecordLabel)
+                            ? "Independent"
+                            : Model.RecordLabel)
                     </strong>
 
@@ -102,5 +106,8 @@
                         .OrderBy(x => x.ReleaseOrdinal))
                     {
-                        <span class="artist-tag">
+                        <a asp-controller="Artist"
+                           asp-action="Details"
+                           asp-route-id="@artist.ArtistId"
+                           class="artist-tag">
 
                             @artist.Artist.ArtistName
@@ -113,5 +120,5 @@
                             }
 
-                        </span>
+                        </a>
                     }
 
@@ -172,4 +179,5 @@
                                 @product.Format
                             </span>
+
 
                             @if (product.Stock > 0)
@@ -203,4 +211,6 @@
                             <div class="product-actions">
 
+                                <!-- ADD TO CART -->
+
                                 <a asp-controller="Order"
                                    asp-action="AddProduct"
@@ -212,12 +222,25 @@
                                 </a>
 
-                                <a asp-controller="Wishlist"
-                                   asp-action="Add"
-                                   asp-route-productId="@product.ProductId"
-                                   class="store-button secondary">
-
-                                    ♡ Wishlist
-
-                                </a>
+
+                                <!-- ADD TO WISHLIST -->
+
+                                <form asp-controller="Wishlist"
+                                      asp-action="Add"
+                                      method="post">
+
+                                    @Html.AntiForgeryToken()
+
+                                    <input type="hidden"
+                                           name="productId"
+                                           value="@product.ProductId" />
+
+                                    <button type="submit"
+                                            class="store-button secondary">
+
+                                        ♡ Wishlist
+
+                                    </button>
+
+                                </form>
 
                             </div>
@@ -227,12 +250,24 @@
                             <div class="product-actions">
 
-                                <a asp-controller="Wishlist"
-                                   asp-action="Add"
-                                   asp-route-productId="@product.ProductId"
-                                   class="store-button secondary full">
-
-                                    ♡ Add to Wishlist
-
-                                </a>
+                                <!-- OUT OF STOCK: WISHLIST ONLY -->
+
+                                <form asp-controller="Wishlist"
+                                      asp-action="Add"
+                                      method="post">
+
+                                    @Html.AntiForgeryToken()
+
+                                    <input type="hidden"
+                                           name="productId"
+                                           value="@product.ProductId" />
+
+                                    <button type="submit"
+                                            class="store-button secondary full">
+
+                                        ♡ Add to Wishlist
+
+                                    </button>
+
+                                </form>
 
                             </div>
@@ -277,51 +312,66 @@
 
 
-            <ol class="track-list">
-
-                @{
-                    var trackNumber = 1;
-                }
-
-                @foreach (var albumSong in Model.Album.AlbumSongs
-                    .OrderBy(x => x.SongId))
-                {
-                    <li class="track-row">
-
-                        <span class="track-number">
-                            @trackNumber.ToString("00")
-                        </span>
-
-                        <div class="track-main">
-
-                            <strong>
-                                @albumSong.Song.SongName
-                            </strong>
-
-                            @if (albumSong.Song.SongArtists.Any())
-                            {
-                                <div class="song-artists">
-
-                                    @string.Join(
-                                        ", ",
-                                        albumSong.Song.SongArtists
-                                            .OrderBy(x => x.SongOrdinal)
-                                            .Select(x => x.Artist.ArtistName)
-                                    )
-
-                                </div>
-                            }
-
-                        </div>
-
-                        <span class="track-duration">
-                            @albumSong.Song.SongDuration
-                        </span>
-
-                    </li>
-
-                    trackNumber++;
-                }
-
-            </ol>
+            @if (!Model.Album.AlbumSongs.Any())
+            {
+                <div class="no-products">
+                    No tracks have been added to this album.
+                </div>
+            }
+            else
+            {
+                <ol class="track-list">
+
+                    @{
+                        var trackNumber = 1;
+                    }
+
+
+                    @foreach (var albumSong in Model.Album.AlbumSongs
+                        .OrderBy(x => x.SongId))
+                    {
+                        <li class="track-row">
+
+                            <span class="track-number">
+                                @trackNumber.ToString("00")
+                            </span>
+
+
+                            <div class="track-main">
+
+                                <strong>
+                                    @albumSong.Song.SongName
+                                </strong>
+
+
+                                @if (albumSong.Song.SongArtists != null &&
+                                     albumSong.Song.SongArtists.Any())
+                                {
+                                    <div class="song-artists">
+
+                                        @string.Join(
+                                            ", ",
+                                            albumSong.Song.SongArtists
+                                                .OrderBy(x => x.SongOrdinal)
+                                                .Select(x =>
+                                                    x.Artist.ArtistName)
+                                        )
+
+                                    </div>
+                                }
+
+                            </div>
+
+
+                            <span class="track-duration">
+                                @albumSong.Song.SongDuration
+                            </span>
+
+                        </li>
+
+                        trackNumber++;
+                    }
+
+                </ol>
+            }
 
         </section>
@@ -368,4 +418,5 @@
                 </div>
 
+
                 <div class="single-duration">
 
Index: KernelRecordsMVC.Web/Views/Shared/_Layout.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Shared/_Layout.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Shared/_Layout.cshtml	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -31,15 +31,12 @@
         <!-- LOGO -->
 
-        <a class="brand"
-           asp-controller="Home"
-           asp-action="Index">
-
-            <span class="brand-main">
-                KERNEL
-            </span>
-
-            <span class="brand-sub">
-                RECORDS
-            </span>
+        <a asp-controller="Home"
+           asp-action="Index"
+           class="navbar-brand logo-brand">
+
+            <img src="~/images/logo.png"
+                 asp-append-version="true"
+                 alt="Kernel Records"
+                 class="site-logo" />
 
         </a>
Index: KernelRecordsMVC.Web/bin/Debug/net8.0/KernelRecordsMVC.Web.staticwebassets.runtime.json
===================================================================
--- KernelRecordsMVC.Web/bin/Debug/net8.0/KernelRecordsMVC.Web.staticwebassets.runtime.json	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/bin/Debug/net8.0/KernelRecordsMVC.Web.staticwebassets.runtime.json	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1,1 +1,1 @@
-{"ContentRoots":["C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\","C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\obj\\Debug\\net8.0\\scopedcss\\bundle\\"],"Root":{"Children":{"css":{"Children":{"site.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/site.css"},"Patterns":null}},"Asset":null,"Patterns":null},"favicon.ico":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"favicon.ico"},"Patterns":null},"js":{"Children":{"site.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/site.js"},"Patterns":null}},"Asset":null,"Patterns":null},"lib":{"Children":{"bootstrap":{"Children":{"dist":{"Children":{"css":{"Children":{"bootstrap-grid.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.css"},"Patterns":null},"bootstrap-grid.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.css.map"},"Patterns":null},"bootstrap-grid.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.min.css"},"Patterns":null},"bootstrap-grid.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.min.css.map"},"Patterns":null},"bootstrap-grid.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.css"},"Patterns":null},"bootstrap-grid.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map"},"Patterns":null},"bootstrap-grid.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css"},"Patterns":null},"bootstrap-grid.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map"},"Patterns":null},"bootstrap-reboot.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.css"},"Patterns":null},"bootstrap-reboot.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.css.map"},"Patterns":null},"bootstrap-reboot.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.min.css"},"Patterns":null},"bootstrap-reboot.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.min.css.map"},"Patterns":null},"bootstrap-reboot.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.css"},"Patterns":null},"bootstrap-reboot.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map"},"Patterns":null},"bootstrap-reboot.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css"},"Patterns":null},"bootstrap-reboot.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map"},"Patterns":null},"bootstrap-utilities.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.css"},"Patterns":null},"bootstrap-utilities.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.css.map"},"Patterns":null},"bootstrap-utilities.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.min.css"},"Patterns":null},"bootstrap-utilities.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.min.css.map"},"Patterns":null},"bootstrap-utilities.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.css"},"Patterns":null},"bootstrap-utilities.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map"},"Patterns":null},"bootstrap-utilities.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css"},"Patterns":null},"bootstrap-utilities.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map"},"Patterns":null},"bootstrap.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.css"},"Patterns":null},"bootstrap.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.css.map"},"Patterns":null},"bootstrap.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.min.css"},"Patterns":null},"bootstrap.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.min.css.map"},"Patterns":null},"bootstrap.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.css"},"Patterns":null},"bootstrap.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.css.map"},"Patterns":null},"bootstrap.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.min.css"},"Patterns":null},"bootstrap.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.min.css.map"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"bootstrap.bundle.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.js"},"Patterns":null},"bootstrap.bundle.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.js.map"},"Patterns":null},"bootstrap.bundle.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.min.js"},"Patterns":null},"bootstrap.bundle.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.min.js.map"},"Patterns":null},"bootstrap.esm.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.js"},"Patterns":null},"bootstrap.esm.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.js.map"},"Patterns":null},"bootstrap.esm.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.min.js"},"Patterns":null},"bootstrap.esm.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.min.js.map"},"Patterns":null},"bootstrap.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.js"},"Patterns":null},"bootstrap.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.js.map"},"Patterns":null},"bootstrap.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.min.js"},"Patterns":null},"bootstrap.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.min.js.map"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/LICENSE"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery-validation-unobtrusive":{"Children":{"jquery.validate.unobtrusive.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"},"Patterns":null},"jquery.validate.unobtrusive.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"},"Patterns":null},"LICENSE.txt":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/LICENSE.txt"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery-validation":{"Children":{"dist":{"Children":{"additional-methods.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/additional-methods.js"},"Patterns":null},"additional-methods.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/additional-methods.min.js"},"Patterns":null},"jquery.validate.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/jquery.validate.js"},"Patterns":null},"jquery.validate.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/jquery.validate.min.js"},"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE.md":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/LICENSE.md"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery":{"Children":{"dist":{"Children":{"jquery.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.js"},"Patterns":null},"jquery.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.min.js"},"Patterns":null},"jquery.min.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.min.map"},"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE.txt":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/LICENSE.txt"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null},"KernelRecordsMVC.Web.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"KernelRecordsMVC.Web.styles.css"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
+{"ContentRoots":["C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\","C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\obj\\Debug\\net8.0\\scopedcss\\bundle\\"],"Root":{"Children":{"css":{"Children":{"site.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/site.css"},"Patterns":null}},"Asset":null,"Patterns":null},"favicon.ico":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"favicon.ico"},"Patterns":null},"images":{"Children":{"logo.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"images/logo.png"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"site.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/site.js"},"Patterns":null}},"Asset":null,"Patterns":null},"lib":{"Children":{"bootstrap":{"Children":{"dist":{"Children":{"css":{"Children":{"bootstrap-grid.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.css"},"Patterns":null},"bootstrap-grid.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.css.map"},"Patterns":null},"bootstrap-grid.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.min.css"},"Patterns":null},"bootstrap-grid.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.min.css.map"},"Patterns":null},"bootstrap-grid.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.css"},"Patterns":null},"bootstrap-grid.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map"},"Patterns":null},"bootstrap-grid.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css"},"Patterns":null},"bootstrap-grid.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map"},"Patterns":null},"bootstrap-reboot.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.css"},"Patterns":null},"bootstrap-reboot.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.css.map"},"Patterns":null},"bootstrap-reboot.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.min.css"},"Patterns":null},"bootstrap-reboot.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.min.css.map"},"Patterns":null},"bootstrap-reboot.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.css"},"Patterns":null},"bootstrap-reboot.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map"},"Patterns":null},"bootstrap-reboot.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css"},"Patterns":null},"bootstrap-reboot.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map"},"Patterns":null},"bootstrap-utilities.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.css"},"Patterns":null},"bootstrap-utilities.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.css.map"},"Patterns":null},"bootstrap-utilities.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.min.css"},"Patterns":null},"bootstrap-utilities.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.min.css.map"},"Patterns":null},"bootstrap-utilities.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.css"},"Patterns":null},"bootstrap-utilities.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map"},"Patterns":null},"bootstrap-utilities.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css"},"Patterns":null},"bootstrap-utilities.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map"},"Patterns":null},"bootstrap.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.css"},"Patterns":null},"bootstrap.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.css.map"},"Patterns":null},"bootstrap.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.min.css"},"Patterns":null},"bootstrap.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.min.css.map"},"Patterns":null},"bootstrap.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.css"},"Patterns":null},"bootstrap.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.css.map"},"Patterns":null},"bootstrap.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.min.css"},"Patterns":null},"bootstrap.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.min.css.map"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"bootstrap.bundle.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.js"},"Patterns":null},"bootstrap.bundle.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.js.map"},"Patterns":null},"bootstrap.bundle.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.min.js"},"Patterns":null},"bootstrap.bundle.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.min.js.map"},"Patterns":null},"bootstrap.esm.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.js"},"Patterns":null},"bootstrap.esm.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.js.map"},"Patterns":null},"bootstrap.esm.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.min.js"},"Patterns":null},"bootstrap.esm.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.min.js.map"},"Patterns":null},"bootstrap.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.js"},"Patterns":null},"bootstrap.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.js.map"},"Patterns":null},"bootstrap.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.min.js"},"Patterns":null},"bootstrap.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.min.js.map"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/LICENSE"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery-validation-unobtrusive":{"Children":{"jquery.validate.unobtrusive.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"},"Patterns":null},"jquery.validate.unobtrusive.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"},"Patterns":null},"LICENSE.txt":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/LICENSE.txt"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery-validation":{"Children":{"dist":{"Children":{"additional-methods.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/additional-methods.js"},"Patterns":null},"additional-methods.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/additional-methods.min.js"},"Patterns":null},"jquery.validate.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/jquery.validate.js"},"Patterns":null},"jquery.validate.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/jquery.validate.min.js"},"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE.md":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/LICENSE.md"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery":{"Children":{"dist":{"Children":{"jquery.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.js"},"Patterns":null},"jquery.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.min.js"},"Patterns":null},"jquery.min.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.min.map"},"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE.txt":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/LICENSE.txt"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null},"KernelRecordsMVC.Web.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"KernelRecordsMVC.Web.styles.css"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.AssemblyInfo.cs
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.AssemblyInfo.cs	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.AssemblyInfo.cs	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -15,5 +15,5 @@
 [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
 [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
-[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+08aefc6f3b51f4bfcb7471a2fd319c064171b1c5")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63")]
 [assembly: System.Reflection.AssemblyProductAttribute("KernelRecordsMVC.Web")]
 [assembly: System.Reflection.AssemblyTitleAttribute("KernelRecordsMVC.Web")]
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.AssemblyInfoInputs.cache
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.AssemblyInfoInputs.cache	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.AssemblyInfoInputs.cache	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1,1 +1,1 @@
-c8c33cb9ccc0e5c5e6227ad0d596fbb462f0c80224c10ca755e42b9afff049e9
+c7c64d4b5585be3def76ca8244acd21f3a41a4886ee5b2db049d2b6c7160a3f4
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.GeneratedMSBuildEditorConfig.editorconfig
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.GeneratedMSBuildEditorConfig.editorconfig	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.GeneratedMSBuildEditorConfig.editorconfig	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -73,4 +73,12 @@
 build_metadata.AdditionalFiles.CssScope = 
 
+[C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Admin/Artists.cshtml]
+build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQWRtaW5cQXJ0aXN0cy5jc2h0bWw=
+build_metadata.AdditionalFiles.CssScope = 
+
+[C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Admin/CreateArtist.cshtml]
+build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQWRtaW5cQ3JlYXRlQXJ0aXN0LmNzaHRtbA==
+build_metadata.AdditionalFiles.CssScope = 
+
 [C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Admin/CreateProduct.cshtml]
 build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQWRtaW5cQ3JlYXRlUHJvZHVjdC5jc2h0bWw=
@@ -81,6 +89,14 @@
 build_metadata.AdditionalFiles.CssScope = 
 
+[C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Admin/EditArtist.cshtml]
+build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQWRtaW5cRWRpdEFydGlzdC5jc2h0bWw=
+build_metadata.AdditionalFiles.CssScope = 
+
 [C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Admin/EditProduct.cshtml]
 build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQWRtaW5cRWRpdFByb2R1Y3QuY3NodG1s
+build_metadata.AdditionalFiles.CssScope = 
+
+[C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Admin/EditRelease.cshtml]
+build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQWRtaW5cRWRpdFJlbGVhc2UuY3NodG1s
 build_metadata.AdditionalFiles.CssScope = 
 
@@ -91,4 +107,16 @@
 [C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Admin/Products.cshtml]
 build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQWRtaW5cUHJvZHVjdHMuY3NodG1s
+build_metadata.AdditionalFiles.CssScope = 
+
+[C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Admin/Releases.cshtml]
+build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQWRtaW5cUmVsZWFzZXMuY3NodG1s
+build_metadata.AdditionalFiles.CssScope = 
+
+[C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Artist/Details.cshtml]
+build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQXJ0aXN0XERldGFpbHMuY3NodG1s
+build_metadata.AdditionalFiles.CssScope = 
+
+[C:/Users/Marko/RiderProjects/KernelRecordsMVC/KernelRecordsMVC.Web/Views/Artist/Index.cshtml]
+build_metadata.AdditionalFiles.TargetPath = Vmlld3NcQXJ0aXN0XEluZGV4LmNzaHRtbA==
 build_metadata.AdditionalFiles.CssScope = 
 
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.csproj.CoreCompileInputs.cache
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.csproj.CoreCompileInputs.cache	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.csproj.CoreCompileInputs.cache	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1,1 +1,1 @@
-21c22170dbd5df356be1a77b3f77b619add1a8fb50970ec121bfff2f0bc30d5a
+0d2d313270b8273aefc58118d7951c632515785f05722e18ae44736d5db6ee4c
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.sourcelink.json
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.sourcelink.json	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/KernelRecordsMVC.Web.sourcelink.json	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1,1 +1,1 @@
-{"documents":{"C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\*":"https://raw.githubusercontent.com/mmilevski/kernelrecords/08aefc6f3b51f4bfcb7471a2fd319c064171b1c5/*"}}
+{"documents":{"C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\*":"https://raw.githubusercontent.com/mmilevski/kernelrecords/d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63/*"}}
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.build.json
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.build.json	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.build.json	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1,5 +1,5 @@
 {
   "Version": 1,
-  "Hash": "Z4AJGKSmCBMu/t74qsSYiHSw3hqm7Xo8YOImYZDzg10=",
+  "Hash": "7gsW+gT8+cbT2+Ae6+SqVsEGmq5ACNa9l9lpi54y2vU=",
   "Source": "KernelRecordsMVC.Web",
   "BasePath": "_content/KernelRecordsMVC.Web",
@@ -94,4 +94,23 @@
     },
     {
+      "Identity": "C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\images\\logo.png",
+      "SourceId": "KernelRecordsMVC.Web",
+      "SourceType": "Discovered",
+      "ContentRoot": "C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\",
+      "BasePath": "_content/KernelRecordsMVC.Web",
+      "RelativePath": "images/logo.png",
+      "AssetKind": "All",
+      "AssetMode": "All",
+      "AssetRole": "Primary",
+      "AssetMergeBehavior": "PreferTarget",
+      "AssetMergeSource": "",
+      "RelatedAsset": "",
+      "AssetTraitName": "",
+      "AssetTraitValue": "",
+      "CopyToOutputDirectory": "Never",
+      "CopyToPublishDirectory": "PreserveNewest",
+      "OriginalItemSpec": "wwwroot\\images\\logo.png"
+    },
+    {
       "Identity": "C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\js\\site.js",
       "SourceId": "KernelRecordsMVC.Web",
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.development.json
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.development.json	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.development.json	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -1,1 +1,1 @@
-{"ContentRoots":["C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\","C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\obj\\Debug\\net8.0\\scopedcss\\bundle\\"],"Root":{"Children":{"css":{"Children":{"site.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/site.css"},"Patterns":null}},"Asset":null,"Patterns":null},"favicon.ico":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"favicon.ico"},"Patterns":null},"js":{"Children":{"site.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/site.js"},"Patterns":null}},"Asset":null,"Patterns":null},"lib":{"Children":{"bootstrap":{"Children":{"dist":{"Children":{"css":{"Children":{"bootstrap-grid.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.css"},"Patterns":null},"bootstrap-grid.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.css.map"},"Patterns":null},"bootstrap-grid.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.min.css"},"Patterns":null},"bootstrap-grid.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.min.css.map"},"Patterns":null},"bootstrap-grid.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.css"},"Patterns":null},"bootstrap-grid.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map"},"Patterns":null},"bootstrap-grid.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css"},"Patterns":null},"bootstrap-grid.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map"},"Patterns":null},"bootstrap-reboot.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.css"},"Patterns":null},"bootstrap-reboot.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.css.map"},"Patterns":null},"bootstrap-reboot.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.min.css"},"Patterns":null},"bootstrap-reboot.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.min.css.map"},"Patterns":null},"bootstrap-reboot.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.css"},"Patterns":null},"bootstrap-reboot.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map"},"Patterns":null},"bootstrap-reboot.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css"},"Patterns":null},"bootstrap-reboot.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map"},"Patterns":null},"bootstrap-utilities.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.css"},"Patterns":null},"bootstrap-utilities.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.css.map"},"Patterns":null},"bootstrap-utilities.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.min.css"},"Patterns":null},"bootstrap-utilities.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.min.css.map"},"Patterns":null},"bootstrap-utilities.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.css"},"Patterns":null},"bootstrap-utilities.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map"},"Patterns":null},"bootstrap-utilities.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css"},"Patterns":null},"bootstrap-utilities.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map"},"Patterns":null},"bootstrap.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.css"},"Patterns":null},"bootstrap.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.css.map"},"Patterns":null},"bootstrap.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.min.css"},"Patterns":null},"bootstrap.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.min.css.map"},"Patterns":null},"bootstrap.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.css"},"Patterns":null},"bootstrap.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.css.map"},"Patterns":null},"bootstrap.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.min.css"},"Patterns":null},"bootstrap.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.min.css.map"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"bootstrap.bundle.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.js"},"Patterns":null},"bootstrap.bundle.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.js.map"},"Patterns":null},"bootstrap.bundle.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.min.js"},"Patterns":null},"bootstrap.bundle.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.min.js.map"},"Patterns":null},"bootstrap.esm.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.js"},"Patterns":null},"bootstrap.esm.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.js.map"},"Patterns":null},"bootstrap.esm.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.min.js"},"Patterns":null},"bootstrap.esm.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.min.js.map"},"Patterns":null},"bootstrap.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.js"},"Patterns":null},"bootstrap.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.js.map"},"Patterns":null},"bootstrap.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.min.js"},"Patterns":null},"bootstrap.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.min.js.map"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/LICENSE"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery-validation-unobtrusive":{"Children":{"jquery.validate.unobtrusive.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"},"Patterns":null},"jquery.validate.unobtrusive.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"},"Patterns":null},"LICENSE.txt":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/LICENSE.txt"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery-validation":{"Children":{"dist":{"Children":{"additional-methods.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/additional-methods.js"},"Patterns":null},"additional-methods.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/additional-methods.min.js"},"Patterns":null},"jquery.validate.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/jquery.validate.js"},"Patterns":null},"jquery.validate.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/jquery.validate.min.js"},"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE.md":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/LICENSE.md"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery":{"Children":{"dist":{"Children":{"jquery.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.js"},"Patterns":null},"jquery.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.min.js"},"Patterns":null},"jquery.min.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.min.map"},"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE.txt":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/LICENSE.txt"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null},"KernelRecordsMVC.Web.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"KernelRecordsMVC.Web.styles.css"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
+{"ContentRoots":["C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\","C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\obj\\Debug\\net8.0\\scopedcss\\bundle\\"],"Root":{"Children":{"css":{"Children":{"site.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"css/site.css"},"Patterns":null}},"Asset":null,"Patterns":null},"favicon.ico":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"favicon.ico"},"Patterns":null},"images":{"Children":{"logo.png":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"images/logo.png"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"site.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"js/site.js"},"Patterns":null}},"Asset":null,"Patterns":null},"lib":{"Children":{"bootstrap":{"Children":{"dist":{"Children":{"css":{"Children":{"bootstrap-grid.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.css"},"Patterns":null},"bootstrap-grid.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.css.map"},"Patterns":null},"bootstrap-grid.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.min.css"},"Patterns":null},"bootstrap-grid.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.min.css.map"},"Patterns":null},"bootstrap-grid.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.css"},"Patterns":null},"bootstrap-grid.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.css.map"},"Patterns":null},"bootstrap-grid.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css"},"Patterns":null},"bootstrap-grid.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-grid.rtl.min.css.map"},"Patterns":null},"bootstrap-reboot.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.css"},"Patterns":null},"bootstrap-reboot.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.css.map"},"Patterns":null},"bootstrap-reboot.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.min.css"},"Patterns":null},"bootstrap-reboot.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.min.css.map"},"Patterns":null},"bootstrap-reboot.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.css"},"Patterns":null},"bootstrap-reboot.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.css.map"},"Patterns":null},"bootstrap-reboot.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css"},"Patterns":null},"bootstrap-reboot.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-reboot.rtl.min.css.map"},"Patterns":null},"bootstrap-utilities.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.css"},"Patterns":null},"bootstrap-utilities.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.css.map"},"Patterns":null},"bootstrap-utilities.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.min.css"},"Patterns":null},"bootstrap-utilities.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.min.css.map"},"Patterns":null},"bootstrap-utilities.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.css"},"Patterns":null},"bootstrap-utilities.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.css.map"},"Patterns":null},"bootstrap-utilities.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css"},"Patterns":null},"bootstrap-utilities.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap-utilities.rtl.min.css.map"},"Patterns":null},"bootstrap.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.css"},"Patterns":null},"bootstrap.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.css.map"},"Patterns":null},"bootstrap.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.min.css"},"Patterns":null},"bootstrap.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.min.css.map"},"Patterns":null},"bootstrap.rtl.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.css"},"Patterns":null},"bootstrap.rtl.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.css.map"},"Patterns":null},"bootstrap.rtl.min.css":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.min.css"},"Patterns":null},"bootstrap.rtl.min.css.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/css/bootstrap.rtl.min.css.map"},"Patterns":null}},"Asset":null,"Patterns":null},"js":{"Children":{"bootstrap.bundle.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.js"},"Patterns":null},"bootstrap.bundle.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.js.map"},"Patterns":null},"bootstrap.bundle.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.min.js"},"Patterns":null},"bootstrap.bundle.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.bundle.min.js.map"},"Patterns":null},"bootstrap.esm.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.js"},"Patterns":null},"bootstrap.esm.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.js.map"},"Patterns":null},"bootstrap.esm.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.min.js"},"Patterns":null},"bootstrap.esm.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.esm.min.js.map"},"Patterns":null},"bootstrap.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.js"},"Patterns":null},"bootstrap.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.js.map"},"Patterns":null},"bootstrap.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.min.js"},"Patterns":null},"bootstrap.min.js.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/dist/js/bootstrap.min.js.map"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/bootstrap/LICENSE"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery-validation-unobtrusive":{"Children":{"jquery.validate.unobtrusive.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"},"Patterns":null},"jquery.validate.unobtrusive.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"},"Patterns":null},"LICENSE.txt":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation-unobtrusive/LICENSE.txt"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery-validation":{"Children":{"dist":{"Children":{"additional-methods.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/additional-methods.js"},"Patterns":null},"additional-methods.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/additional-methods.min.js"},"Patterns":null},"jquery.validate.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/jquery.validate.js"},"Patterns":null},"jquery.validate.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/dist/jquery.validate.min.js"},"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE.md":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery-validation/LICENSE.md"},"Patterns":null}},"Asset":null,"Patterns":null},"jquery":{"Children":{"dist":{"Children":{"jquery.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.js"},"Patterns":null},"jquery.min.js":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.min.js"},"Patterns":null},"jquery.min.map":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/dist/jquery.min.map"},"Patterns":null}},"Asset":null,"Patterns":null},"LICENSE.txt":{"Children":null,"Asset":{"ContentRootIndex":0,"SubPath":"lib/jquery/LICENSE.txt"},"Patterns":null}},"Asset":null,"Patterns":null}},"Asset":null,"Patterns":null},"KernelRecordsMVC.Web.styles.css":{"Children":null,"Asset":{"ContentRootIndex":1,"SubPath":"KernelRecordsMVC.Web.styles.css"},"Patterns":null}},"Asset":null,"Patterns":[{"ContentRootIndex":0,"Pattern":"**","Depth":0}]}}
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.pack.json
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.pack.json	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets.pack.json	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -12,4 +12,8 @@
       "Id": "C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\favicon.ico",
       "PackagePath": "staticwebassets\\favicon.ico"
+    },
+    {
+      "Id": "C:\\Users\\Marko\\RiderProjects\\KernelRecordsMVC\\KernelRecordsMVC.Web\\wwwroot\\images\\logo.png",
+      "PackagePath": "staticwebassets\\images\\logo.png"
     },
     {
Index: KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets/msbuild.KernelRecordsMVC.Web.Microsoft.AspNetCore.StaticWebAssets.props
===================================================================
--- KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets/msbuild.KernelRecordsMVC.Web.Microsoft.AspNetCore.StaticWebAssets.props	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/obj/Debug/net8.0/staticwebassets/msbuild.KernelRecordsMVC.Web.Microsoft.AspNetCore.StaticWebAssets.props	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -33,4 +33,20 @@
       <OriginalItemSpec>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\favicon.ico))</OriginalItemSpec>
     </StaticWebAsset>
+    <StaticWebAsset Include="$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\images\logo.png))">
+      <SourceType>Package</SourceType>
+      <SourceId>KernelRecordsMVC.Web</SourceId>
+      <ContentRoot>$(MSBuildThisFileDirectory)..\staticwebassets\</ContentRoot>
+      <BasePath>_content/KernelRecordsMVC.Web</BasePath>
+      <RelativePath>images/logo.png</RelativePath>
+      <AssetKind>All</AssetKind>
+      <AssetMode>All</AssetMode>
+      <AssetRole>Primary</AssetRole>
+      <RelatedAsset></RelatedAsset>
+      <AssetTraitName></AssetTraitName>
+      <AssetTraitValue></AssetTraitValue>
+      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
+      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
+      <OriginalItemSpec>$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\images\logo.png))</OriginalItemSpec>
+    </StaticWebAsset>
     <StaticWebAsset Include="$([System.IO.Path]::GetFullPath($(MSBuildThisFileDirectory)..\staticwebassets\js\site.js))">
       <SourceType>Package</SourceType>
Index: KernelRecordsMVC.Web/wwwroot/css/site.css
===================================================================
--- KernelRecordsMVC.Web/wwwroot/css/site.css	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/wwwroot/css/site.css	(revision d89d25b3a7f785676877cf198c9cc706308ab4a3)
@@ -4139,2 +4139,847 @@
 
 }
+/* =========================================================
+   KERNEL RECORDS LOGO
+   ========================================================= */
+
+.logo-brand {
+  display: flex;
+  align-items: center;
+
+  padding: 0;
+
+  text-decoration: none;
+}
+
+.site-logo {
+  display: block;
+
+  width: auto;
+  height: 72px;
+
+  object-fit: contain;
+}
+
+@media (max-width: 700px) {
+
+  .site-logo {
+    height: 55px;
+  }
+
+}
+.admin-page-logo {
+  display: block;
+
+  width: auto;
+  height: 80px;
+
+  margin-bottom: 12px;
+
+  object-fit: contain;
+}
+.hero-logo {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+
+.hero-logo-image {
+  width: min(520px, 90%);
+  height: auto;
+  display: block;
+  object-fit: contain;
+  transform: translate(55px, 55px);
+}
+
+/* =========================================================
+   ARTISTS
+   ========================================================= */
+
+.artist-page,
+.artist-details-page {
+  max-width: 1350px;
+  margin: 0 auto;
+  padding: 55px 30px 80px;
+}
+
+.artist-page-header {
+  margin-bottom: 35px;
+}
+
+.artist-eyebrow {
+  display: block;
+  margin-bottom: 8px;
+  color: #888;
+  font-size: 10px;
+  font-weight: 900;
+  letter-spacing: 2px;
+}
+
+.artist-page-header h1,
+.artist-details-info h1 {
+  margin: 0;
+  font-size: clamp(38px, 6vw, 76px);
+  line-height: 1;
+  font-weight: 900;
+  letter-spacing: -2px;
+}
+
+.artist-page-header p {
+  max-width: 600px;
+  margin-top: 15px;
+  color: #777;
+  line-height: 1.7;
+}
+
+/* Artist list: fixed 200 x 200 images */
+
+.artist-grid {
+  display: grid;
+  grid-template-columns: repeat(auto-fill, 200px);
+  gap: 24px;
+  align-items: start;
+  justify-content: start;
+}
+
+.artist-card {
+  width: 200px;
+  overflow: hidden;
+  display: block;
+  background: white;
+  border: 1px solid #ddd;
+  border-radius: 10px;
+  color: inherit;
+  text-decoration: none;
+  transition:
+          transform 0.2s ease,
+          border-color 0.2s ease,
+          box-shadow 0.2s ease;
+}
+
+.artist-card:hover {
+  transform: translateY(-4px);
+  border-color: #999;
+  box-shadow: 0 12px 28px rgba(0, 0, 0, 0.08);
+}
+
+.artist-card-image {
+  width: 200px;
+  height: 200px;
+  overflow: hidden;
+  background: #eee;
+}
+
+.artist-card-image img {
+  width: 200px;
+  height: 200px;
+  display: block;
+  object-fit: cover;
+  object-position: center;
+}
+
+.artist-photo-placeholder {
+  width: 100%;
+  height: 100%;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  background: #1a1a1a;
+  color: white;
+  font-size: 40px;
+}
+
+.artist-card-image .artist-photo-placeholder {
+  width: 200px;
+  height: 200px;
+}
+
+.artist-photo-placeholder.large {
+  width: 200px;
+  height: 200px;
+  min-height: 0;
+  font-size: 60px;
+}
+
+.artist-card-body {
+  width: 200px;
+  padding: 16px;
+}
+
+.artist-card-body h2 {
+  margin: 0 0 10px;
+  overflow-wrap: anywhere;
+  font-size: 17px;
+  line-height: 1.25;
+}
+
+.artist-card-body p {
+  display: -webkit-box;
+  overflow: hidden;
+  margin: 0 0 15px;
+  color: #777;
+  font-size: 12px;
+  line-height: 1.6;
+  -webkit-line-clamp: 3;
+  -webkit-box-orient: vertical;
+}
+
+.artist-card-link {
+  font-size: 10px;
+  font-weight: 900;
+  letter-spacing: 1px;
+  text-transform: uppercase;
+}
+
+/* Artist details: fixed 200 x 200 profile image */
+
+.artist-back-link {
+  display: inline-block;
+  margin-bottom: 25px;
+  color: #555;
+  font-size: 11px;
+  font-weight: 800;
+  text-decoration: none;
+}
+
+.artist-back-link:hover {
+  color: #111;
+}
+
+.artist-details-hero {
+  display: grid;
+  grid-template-columns: 200px minmax(0, 1fr);
+  gap: 45px;
+  align-items: center;
+}
+
+.artist-details-image {
+  width: 200px;
+  height: 200px;
+  overflow: hidden;
+  border-radius: 10px;
+  background: #eee;
+}
+
+.artist-details-image img {
+  width: 200px;
+  height: 200px;
+  display: block;
+  object-fit: cover;
+  object-position: center;
+}
+
+.artist-details-image .artist-photo-placeholder {
+  width: 200px;
+  height: 200px;
+}
+
+.artist-details-info {
+  min-width: 0;
+}
+
+.artist-details-info p {
+  max-width: 650px;
+  margin-top: 25px;
+  color: #666;
+  line-height: 1.8;
+}
+
+/* Artist releases */
+
+.artist-release-section {
+  margin-top: 70px;
+}
+
+.artist-section-header {
+  margin-bottom: 25px;
+}
+
+.artist-section-header h2 {
+  margin: 0;
+  font-size: 30px;
+}
+
+.artist-release-grid {
+  display: grid;
+  grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
+  gap: 20px;
+}
+
+.artist-release-card {
+  display: block;
+  color: inherit;
+  text-decoration: none;
+}
+
+.artist-release-cover {
+  overflow: hidden;
+  aspect-ratio: 1 / 1;
+  border-radius: 8px;
+  background: #eee;
+}
+
+.artist-release-cover img {
+  width: 100%;
+  height: 100%;
+  display: block;
+  object-fit: cover;
+}
+
+.artist-release-cover .artist-photo-placeholder {
+  width: 100%;
+  height: 100%;
+}
+
+.artist-release-body {
+  padding-top: 12px;
+}
+
+.artist-release-body h3 {
+  margin: 0;
+  font-size: 15px;
+}
+
+.artist-release-body p,
+.artist-release-body span {
+  color: #888;
+  font-size: 11px;
+}
+
+.artist-empty {
+  padding: 30px;
+  border: 1px dashed #ccc;
+  border-radius: 8px;
+  color: #777;
+}
+
+/* Artist responsive */
+
+@media (max-width: 800px) {
+  .artist-details-hero {
+    grid-template-columns: 200px minmax(0, 1fr);
+    gap: 28px;
+  }
+}
+
+@media (max-width: 600px) {
+  .artist-page,
+  .artist-details-page {
+    padding: 35px 18px 60px;
+  }
+
+  .artist-grid {
+    justify-content: center;
+  }
+
+  .artist-details-hero {
+    grid-template-columns: 1fr;
+    justify-items: start;
+  }
+
+  .artist-details-image {
+    width: 200px;
+    height: 200px;
+  }
+}
+
+@media (max-width: 430px) {
+  .artist-grid {
+    grid-template-columns: 200px;
+  }
+}
+/* =========================================================
+   AUTH - LOGIN / REGISTER
+   ========================================================= */
+
+.auth-page {
+  width: 100%;
+  min-height: calc(100vh - 114px);
+
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  padding: 55px 30px 80px;
+
+  background: #f5f5f3;
+}
+
+.auth-shell {
+  width: min(100%, 1050px);
+  min-height: 600px;
+
+  display: grid;
+  grid-template-columns:
+        minmax(0, 0.9fr)
+        minmax(0, 1.1fr);
+
+  overflow: hidden;
+
+  background: white;
+
+  border: 1px solid #ddd;
+  border-radius: 14px;
+
+  box-shadow:
+          0 20px 55px rgba(0, 0, 0, 0.08);
+}
+
+.auth-shell-register {
+  width: min(100%, 1150px);
+}
+
+
+/* =========================================================
+   AUTH BRAND SIDE
+   ========================================================= */
+
+.auth-brand-panel {
+  position: relative;
+
+  min-height: 600px;
+
+  display: flex;
+  flex-direction: column;
+  justify-content: space-between;
+
+  padding: 45px;
+
+  overflow: hidden;
+
+  background: #111;
+  color: white;
+}
+
+.auth-brand-panel::after {
+  content: "";
+
+  position: absolute;
+
+  width: 430px;
+  height: 430px;
+
+  right: -180px;
+  bottom: -190px;
+
+  border: 55px solid #1c1c1c;
+  border-radius: 50%;
+}
+
+.auth-logo-link {
+  position: relative;
+  z-index: 2;
+
+  width: fit-content;
+
+  display: block;
+}
+
+.auth-logo {
+  width: auto;
+  height: 85px;
+
+  display: block;
+
+  object-fit: contain;
+}
+
+.auth-brand-copy {
+  position: relative;
+  z-index: 2;
+
+  max-width: 390px;
+}
+
+.auth-eyebrow {
+  display: block;
+
+  margin-bottom: 10px;
+
+  color: #999;
+
+  font-size: 9px;
+  font-weight: 900;
+
+  letter-spacing: 2.2px;
+  text-transform: uppercase;
+}
+
+.auth-brand-copy h1 {
+  max-width: 420px;
+
+  font-size: clamp(42px, 5vw, 65px);
+  line-height: .95;
+
+  font-weight: 900;
+
+  letter-spacing: -3px;
+}
+
+.auth-brand-copy p {
+  max-width: 360px;
+
+  margin-top: 22px;
+
+  color: #aaa;
+
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+
+/* =========================================================
+   AUTH FORM SIDE
+   ========================================================= */
+
+.auth-form-panel {
+  display: flex;
+  flex-direction: column;
+  justify-content: center;
+
+  padding: 55px 65px;
+}
+
+.auth-form-header {
+  margin-bottom: 30px;
+}
+
+.auth-form-header h2 {
+  margin: 0;
+
+  color: #171717;
+
+  font-size: 38px;
+  font-weight: 900;
+
+  letter-spacing: -1.5px;
+}
+
+.auth-form-header p {
+  margin-top: 8px;
+
+  color: #777;
+
+  font-size: 13px;
+  line-height: 1.6;
+}
+
+
+/* =========================================================
+   AUTH FORM
+   ========================================================= */
+
+.auth-form {
+  width: 100%;
+}
+
+.auth-field {
+  min-width: 0;
+
+  margin-bottom: 20px;
+}
+
+.auth-field label {
+  display: flex;
+  align-items: center;
+
+  gap: 8px;
+
+  margin-bottom: 8px;
+
+  color: #444;
+
+  font-size: 10px;
+  font-weight: 900;
+
+  letter-spacing: .9px;
+  text-transform: uppercase;
+}
+
+.auth-optional {
+  color: #999;
+
+  font-size: 8px;
+  font-weight: 700;
+
+  letter-spacing: .5px;
+}
+
+.auth-field input {
+  width: 100%;
+  height: 48px;
+
+  padding: 0 14px;
+
+  outline: none;
+
+  border: 1px solid #d3d3d3;
+  border-radius: 6px;
+
+  background: white;
+  color: #171717;
+
+  font-size: 13px;
+
+  transition:
+          border-color .2s ease,
+          box-shadow .2s ease,
+          background .2s ease;
+}
+
+.auth-field input::placeholder {
+  color: #aaa;
+}
+
+.auth-field input:focus {
+  border-color: #777;
+
+  box-shadow:
+          0 0 0 3px rgba(0, 0, 0, 0.05);
+}
+
+.auth-form-row {
+  display: grid;
+  grid-template-columns:
+        repeat(2, minmax(0, 1fr));
+
+  gap: 14px;
+}
+
+
+/* =========================================================
+   PASSWORD
+   ========================================================= */
+
+.auth-password-field {
+  position: relative;
+}
+
+.auth-password-field input {
+  padding-right: 65px;
+}
+
+.auth-password-toggle {
+  position: absolute;
+
+  top: 50%;
+  right: 8px;
+
+  transform: translateY(-50%);
+
+  height: 32px;
+
+  padding: 0 9px;
+
+  border: none;
+  border-radius: 4px;
+
+  background: #f0f0f0;
+  color: #555;
+
+  font-size: 9px;
+  font-weight: 900;
+
+  text-transform: uppercase;
+  letter-spacing: .5px;
+}
+
+.auth-password-toggle:hover {
+  background: #ddd;
+  color: #171717;
+}
+
+
+/* =========================================================
+   VALIDATION
+   ========================================================= */
+
+.auth-field-error {
+  display: block;
+
+  margin-top: 6px;
+
+  color: #a33;
+
+  font-size: 10px;
+  line-height: 1.4;
+}
+
+.auth-validation-summary {
+  margin-bottom: 20px;
+}
+
+.auth-validation-summary:empty {
+  display: none;
+}
+
+.auth-validation-summary ul {
+  margin: 0;
+
+  padding: 13px 15px 13px 32px;
+
+  background: #fff3f3;
+  color: #963c3c;
+
+  border: 1px solid #eccaca;
+  border-radius: 6px;
+
+  font-size: 11px;
+  line-height: 1.6;
+}
+
+
+/* =========================================================
+   SUBMIT
+   ========================================================= */
+
+.auth-submit {
+  width: 100%;
+  min-height: 50px;
+
+  margin-top: 5px;
+
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  border: 1px solid #171717;
+  border-radius: 6px;
+
+  background: #171717;
+  color: white;
+
+  font-size: 11px;
+  font-weight: 900;
+
+  letter-spacing: 1px;
+  text-transform: uppercase;
+
+  transition:
+          background .2s ease,
+          transform .2s ease;
+}
+
+.auth-submit:hover {
+  background: #333;
+
+  transform: translateY(-1px);
+}
+
+
+/* =========================================================
+   ACCOUNT SWITCH
+   ========================================================= */
+
+.auth-switch {
+  margin-top: 27px;
+  padding-top: 22px;
+
+  display: flex;
+  align-items: center;
+  justify-content: center;
+
+  gap: 7px;
+
+  border-top: 1px solid #eee;
+
+  color: #777;
+
+  font-size: 11px;
+}
+
+.auth-switch a {
+  color: #171717;
+
+  font-weight: 900;
+}
+
+.auth-switch a:hover {
+  text-decoration: underline;
+}
+
+
+/* =========================================================
+   AUTH RESPONSIVE
+   ========================================================= */
+
+@media (max-width: 900px) {
+
+  .auth-shell,
+  .auth-shell-register {
+    grid-template-columns: 1fr;
+    max-width: 650px;
+  }
+
+  .auth-brand-panel {
+    min-height: 290px;
+
+    padding: 35px;
+  }
+
+  .auth-logo {
+    height: 70px;
+  }
+
+  .auth-brand-copy h1 {
+    font-size: 42px;
+  }
+
+  .auth-brand-copy p {
+    margin-top: 14px;
+  }
+
+  .auth-form-panel {
+    padding: 45px;
+  }
+
+}
+
+@media (max-width: 600px) {
+
+  .auth-page {
+    padding: 25px 15px 50px;
+  }
+
+  .auth-shell,
+  .auth-shell-register {
+    border-radius: 10px;
+  }
+
+  .auth-brand-panel {
+    min-height: 250px;
+
+    padding: 27px;
+  }
+
+  .auth-logo {
+    height: 60px;
+  }
+
+  .auth-brand-copy h1 {
+    font-size: 36px;
+
+    letter-spacing: -2px;
+  }
+
+  .auth-brand-copy p {
+    font-size: 12px;
+  }
+
+  .auth-form-panel {
+    padding: 32px 24px;
+  }
+
+  .auth-form-header h2 {
+    font-size: 32px;
+  }
+
+  .auth-form-row {
+    grid-template-columns: 1fr;
+    gap: 0;
+  }
+
+  .auth-switch {
+    flex-direction: column;
+  }
+
+}
