Index: KernelRecordsMVC.Web/Views/Account/Login.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Account/Login.cshtml	(revision fa0fbaf2cdd288351eeaf3d4d17d8a6158ea5adc)
+++ 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 fa0fbaf2cdd288351eeaf3d4d17d8a6158ea5adc)
+++ 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 fa0fbaf2cdd288351eeaf3d4d17d8a6158ea5adc)
+++ 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 fa0fbaf2cdd288351eeaf3d4d17d8a6158ea5adc)
+++ 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 fa0fbaf2cdd288351eeaf3d4d17d8a6158ea5adc)
+++ 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 fa0fbaf2cdd288351eeaf3d4d17d8a6158ea5adc)
+++ 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>
