Index: KernelRecordsMVC.Web/Views/Account/Profile.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Account/Profile.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Account/Profile.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -0,0 +1,216 @@
+﻿@model KernelRecordsMVC.Application.ViewModels.ProfileViewModel
+
+@{
+    ViewData["Title"] = "My Profile";
+}
+
+<div class="profile-page">
+
+    <div class="profile-header">
+
+        <span class="page-eyebrow">
+            ACCOUNT
+        </span>
+
+        <h1>My Profile</h1>
+
+        <p>
+            Manage your account information.
+        </p>
+
+    </div>
+
+
+    @if (TempData["Success"] != null)
+    {
+        <div class="profile-alert success">
+            @TempData["Success"]
+        </div>
+    }
+
+
+    <div class="profile-layout">
+
+        <!-- =================================================
+             ACCOUNT SUMMARY
+             ================================================= -->
+
+        <aside class="profile-sidebar">
+
+            <div class="profile-avatar">
+                @(string.IsNullOrWhiteSpace(Model.Username)
+                    ? "?"
+                    : Model.Username.Substring(0, 1).ToUpper())
+            </div>
+
+            <h2>
+                @Model.Username
+            </h2>
+
+            <p>
+                @Model.Email
+            </p>
+
+            <div class="profile-member">
+
+                <span>MEMBER SINCE</span>
+
+                <strong>
+                    @Model.DateCreated.ToString("MMMM yyyy")
+                </strong>
+
+            </div>
+
+
+            <div class="profile-points">
+
+                <span>REWARD POINTS</span>
+
+                <strong>
+                    @Model.PointsCollected
+                </strong>
+
+            </div>
+
+        </aside>
+
+
+        <!-- =================================================
+             EDIT PROFILE
+             ================================================= -->
+
+        <section class="profile-card">
+
+            <div class="profile-card-header">
+
+                <div>
+
+                    <span class="section-label">
+                        PERSONAL INFORMATION
+                    </span>
+
+                    <h2>Account Details</h2>
+
+                </div>
+
+            </div>
+
+
+            <form asp-action="Profile"
+                  method="post"
+                  class="profile-form">
+
+                @Html.AntiForgeryToken()
+
+
+                <div asp-validation-summary="ModelOnly"
+                     class="validation-summary">
+                </div>
+
+
+                <!-- USERNAME -->
+
+                <div class="profile-field">
+
+                    <label asp-for="Username">
+                        Username
+                    </label>
+
+                    <input asp-for="Username"
+                           type="text"
+                           readonly />
+
+                    <small>
+                        Your username cannot be changed.
+                    </small>
+
+                </div>
+
+
+                <!-- EMAIL -->
+
+                <div class="profile-field">
+
+                    <label asp-for="Email">
+                        Email
+                    </label>
+
+                    <input asp-for="Email" />
+
+                    <span asp-validation-for="Email"
+                          class="field-error">
+                    </span>
+
+                </div>
+
+
+                <!-- PHONE -->
+
+                <div class="profile-field">
+
+                    <label asp-for="TelephoneNumber">
+                        Telephone Number
+                    </label>
+
+                    <input asp-for="TelephoneNumber"
+                           placeholder="Enter your phone number" />
+
+                    <span asp-validation-for="TelephoneNumber"
+                          class="field-error">
+                    </span>
+
+                </div>
+
+
+                <!-- ADDRESS -->
+
+                <div class="profile-field">
+
+                    <label asp-for="ShippingAddress">
+                        Shipping Address
+                    </label>
+
+                    <textarea asp-for="ShippingAddress"
+                              rows="4"
+                              placeholder="Enter your shipping address">
+                    </textarea>
+
+                    <span asp-validation-for="ShippingAddress"
+                          class="field-error">
+                    </span>
+
+                </div>
+
+
+                <div class="profile-form-actions">
+
+                    <button type="submit"
+                            class="store-button primary">
+
+                        Save Changes
+
+                    </button>
+
+                    <a asp-controller="Home"
+                       asp-action="Index"
+                       class="store-button secondary">
+
+                        Cancel
+
+                    </a>
+
+                </div>
+
+            </form>
+
+        </section>
+
+    </div>
+
+</div>
+
+
+@section Scripts
+{
+    <partial name="_ValidationScriptsPartial" />
+}
Index: KernelRecordsMVC.Web/Views/Admin/CreateProduct.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/CreateProduct.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Admin/CreateProduct.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -1,168 +1,284 @@
 ﻿@model KernelRecordsMVC.Application.ViewModels.CreateProductViewModel
 
-<h1>New Product</h1>
-
-<p class="text-muted">
-    Add a physical product format for an existing release.
-</p>
-
-<form asp-action="CreateProduct"
-      method="post">
-
-    @Html.AntiForgeryToken()
-
-    <div asp-validation-summary="ModelOnly"
-         class="text-danger mb-3">
+@{
+    ViewData["Title"] = "New Product";
+}
+
+<div class="admin-page admin-form-page">
+
+    <!-- HEADER -->
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Products"
+               class="admin-back-link">
+
+                ← Products
+
+            </a>
+
+            <span class="admin-eyebrow">
+                INVENTORY
+            </span>
+
+            <h1>New Product</h1>
+
+            <p>
+                Add a new physical format to an existing release.
+            </p>
+
+        </div>
+
     </div>
 
 
-    <!-- RELEASE -->
-
-    <div class="mb-3">
-
-        <label asp-for="ReleaseId"
-               class="form-label">
-        </label>
-
-        <select asp-for="ReleaseId"
-                class="form-select">
-
-            <option value="">
-                -- Select Release --
-            </option>
-
-            @foreach (var release in ViewBag.Releases)
-            {
-                <option value="@release.ReleaseId">
-
-                    @release.Title
-                    (@release.ReleaseDate.ToString("yyyy"))
-
-                </option>
-            }
-
-        </select>
-
-        <span asp-validation-for="ReleaseId"
-              class="text-danger">
-        </span>
+    <div class="admin-form-layout">
+
+
+        <!-- =================================================
+             FORM
+             ================================================= -->
+
+        <section class="admin-form-card">
+
+            <div class="admin-form-card-header">
+
+                <span class="admin-eyebrow">
+                    PRODUCT INFORMATION
+                </span>
+
+                <h2>Product Details</h2>
+
+            </div>
+
+
+            <form asp-action="CreateProduct"
+                  method="post">
+
+                @Html.AntiForgeryToken()
+
+
+                <div asp-validation-summary="ModelOnly"
+                     class="admin-validation">
+                </div>
+
+
+                <!-- RELEASE -->
+
+                <div class="admin-form-field">
+
+                    <label asp-for="ReleaseId">
+                        Release
+                    </label>
+
+                    <select asp-for="ReleaseId">
+
+                        <option value="">
+                            Select a release
+                        </option>
+
+                        @foreach (var release in ViewBag.Releases)
+                        {
+                            <option value="@release.ReleaseId">
+
+                                @release.Title
+                                (@release.ReleaseDate.ToString("yyyy"))
+
+                            </option>
+                        }
+
+                    </select>
+
+                    <span asp-validation-for="ReleaseId"
+                          class="admin-field-error">
+                    </span>
+
+                    <small>
+                        Select the release this physical
+                        product belongs to.
+                    </small>
+
+                </div>
+
+
+                <div class="admin-form-row">
+
+
+                    <!-- FORMAT -->
+
+                    <div class="admin-form-field">
+
+                        <label asp-for="Format">
+                            Format
+                        </label>
+
+                        <select asp-for="Format"
+                                asp-items="Html.GetEnumSelectList<KernelRecordsMVC.Domain.Enums.ProductFormat>()">
+
+                            <option value="">
+                                Select format
+                            </option>
+
+                        </select>
+
+                        <span asp-validation-for="Format"
+                              class="admin-field-error">
+                        </span>
+
+                    </div>
+
+
+                    <!-- PRICE -->
+
+                    <div class="admin-form-field">
+
+                        <label asp-for="Price">
+                            Price
+                        </label>
+
+                        <div class="admin-input-prefix">
+
+                            <span>$</span>
+
+                            <input asp-for="Price"
+                                   type="number"
+                                   min="0"
+                                   step="0.01"
+                                   placeholder="0.00" />
+
+                        </div>
+
+                        <span asp-validation-for="Price"
+                              class="admin-field-error">
+                        </span>
+
+                    </div>
+
+                </div>
+
+
+                <!-- STOCK -->
+
+                <div class="admin-form-field">
+
+                    <label asp-for="Stock">
+                        Initial Stock
+                    </label>
+
+                    <input asp-for="Stock"
+                           type="number"
+                           min="0"
+                           placeholder="0" />
+
+                    <span asp-validation-for="Stock"
+                          class="admin-field-error">
+                    </span>
+
+                </div>
+
+
+                <!-- DESCRIPTION -->
+
+                <div class="admin-form-field">
+
+                    <label asp-for="ProductDescription">
+                        Product Description
+                    </label>
+
+                    <textarea asp-for="ProductDescription"
+                              rows="5"
+                              placeholder="Describe this physical edition..."></textarea>
+
+                    <span asp-validation-for="ProductDescription"
+                          class="admin-field-error">
+                    </span>
+
+                </div>
+
+
+                <!-- ACTIONS -->
+
+                <div class="admin-form-actions">
+
+                    <button type="submit"
+                            class="admin-button primary">
+
+                        Create Product
+
+                    </button>
+
+
+                    <a asp-action="Products"
+                       class="admin-button secondary">
+
+                        Cancel
+
+                    </a>
+
+                </div>
+
+            </form>
+
+        </section>
+
+
+        <!-- =================================================
+             SIDE INFO
+             ================================================= -->
+
+        <aside class="admin-help-card">
+
+            <span class="admin-eyebrow">
+                PRODUCT CREATION
+            </span>
+
+            <h3>Before you create</h3>
+
+            <div class="admin-help-item">
+
+                <strong>01</strong>
+
+                <p>
+                    A release can only have one product
+                    for each physical format.
+                </p>
+
+            </div>
+
+
+            <div class="admin-help-item">
+
+                <strong>02</strong>
+
+                <p>
+                    Stock can be updated later from
+                    Product Management.
+                </p>
+
+            </div>
+
+
+            <div class="admin-help-item">
+
+                <strong>03</strong>
+
+                <p>
+                    Creating the product will automatically
+                    create a modification record.
+                </p>
+
+            </div>
+
+        </aside>
 
     </div>
 
-
-    <!-- FORMAT -->
-
-    <div class="mb-3">
-
-        <label asp-for="Format"
-               class="form-label">
-        </label>
-
-        <select asp-for="Format"
-                asp-items="Html.GetEnumSelectList<KernelRecordsMVC.Domain.Enums.ProductFormat>()"
-                class="form-select">
-
-            <option value="">
-                -- Select Format --
-            </option>
-
-        </select>
-
-        <span asp-validation-for="Format"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <!-- PRICE -->
-
-    <div class="mb-3">
-
-        <label asp-for="Price"
-               class="form-label">
-        </label>
-
-        <div class="input-group">
-
-            <span class="input-group-text">
-                $
-            </span>
-
-            <input asp-for="Price"
-                   class="form-control"
-                   step="0.01"/>
-
-        </div>
-
-        <span asp-validation-for="Price"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <!-- DESCRIPTION -->
-
-    <div class="mb-3">
-
-        <label asp-for="ProductDescription"
-               class="form-label">
-        </label>
-
-        <textarea asp-for="ProductDescription"
-                  class="form-control"
-                  rows="4">
-        </textarea>
-
-        <span asp-validation-for="ProductDescription"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <!-- STOCK -->
-
-    <div class="mb-3">
-
-        <label asp-for="Stock"
-               class="form-label">
-        </label>
-
-        <input asp-for="Stock"
-               type="number"
-               min="0"
-               class="form-control"/>
-
-        <span asp-validation-for="Stock"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <div class="d-flex gap-2">
-
-        <button type="submit"
-                class="btn btn-success">
-
-            Create Product
-
-        </button>
-
-        <a asp-action="Index"
-           class="btn btn-secondary">
-
-            Cancel
-
-        </a>
-
-    </div>
-
-</form>
+</div>
+
 
 @section Scripts
 {
-    <partial name="_ValidationScriptsPartial"/>
+    <partial name="_ValidationScriptsPartial" />
 }
Index: KernelRecordsMVC.Web/Views/Admin/CreateRelease.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/CreateRelease.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Admin/CreateRelease.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -0,0 +1,1036 @@
+﻿@model KernelRecordsMVC.Application.ViewModels.CreateReleaseViewModel
+
+@{
+ViewData["Title"] = "Create Release";
+}
+
+<div class="admin-page admin-form-page">
+
+    <!-- =====================================================
+         HEADER
+         ===================================================== -->
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Index"
+               class="admin-back-link">
+                ← Dashboard
+            </a>
+
+            <span class="admin-eyebrow">
+                CATALOG MANAGEMENT
+            </span>
+
+            <h1>Create Release</h1>
+
+            <p>
+                Add an album or single, assign artists
+                and build its track listing.
+            </p>
+
+        </div>
+
+    </div>
+
+
+    <form asp-action="CreateRelease"
+          method="post"
+          id="createReleaseForm">
+
+        @Html.AntiForgeryToken()
+
+
+        <div asp-validation-summary="ModelOnly"
+             class="admin-validation">
+        </div>
+
+
+        <!-- =================================================
+             STEP 1 - RELEASE TYPE
+             ================================================= -->
+
+        <section class="admin-form-card release-create-section">
+
+            <div class="admin-form-card-header">
+
+                <span class="admin-eyebrow">
+                    STEP 01
+                </span>
+
+                <h2>Release Type</h2>
+
+                <p class="admin-section-description">
+                    Choose whether this release is an album
+                    or a single.
+                </p>
+
+            </div>
+
+
+            <div class="admin-modification-options">
+
+                <!-- ALBUM -->
+
+                <label class="admin-modification-option">
+
+                    <input asp-for="ReleaseType"
+                           type="radio"
+                           value="ALBUM"
+                           id="releaseTypeAlbum" />
+
+                    <span>
+
+                        <strong>
+                            Album
+                        </strong>
+
+                        <small>
+                            Create a release with multiple tracks.
+                        </small>
+
+                    </span>
+
+                </label>
+
+
+                <!-- SINGLE -->
+
+                <label class="admin-modification-option">
+
+                    <input asp-for="ReleaseType"
+                           type="radio"
+                           value="SINGLE"
+                           id="releaseTypeSingle" />
+
+                    <span>
+
+                        <strong>
+                            Single
+                        </strong>
+
+                        <small>
+                            Create an individual single release.
+                        </small>
+
+                    </span>
+
+                </label>
+
+            </div>
+
+
+            <span asp-validation-for="ReleaseType"
+                  class="admin-field-error">
+            </span>
+
+        </section>
+
+
+        <!-- =================================================
+             STEP 2 - RELEASE INFORMATION
+             ================================================= -->
+
+        <section class="admin-form-card release-create-section">
+
+            <div class="admin-form-card-header">
+
+                <span class="admin-eyebrow">
+                    STEP 02
+                </span>
+
+                <h2>Release Information</h2>
+
+                <p class="admin-section-description">
+                    Enter the main catalog information for this release.
+                </p>
+
+            </div>
+
+
+            <!-- TITLE -->
+
+            <div class="admin-form-field">
+
+                <label asp-for="Title">
+                    Title
+                </label>
+
+                <input asp-for="Title"
+                       placeholder="Enter 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 (optional)" />
+
+                <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>
+
+                <small>
+                    Paste a direct image URL for the release artwork.
+                </small>
+
+            </div>
+
+
+            <!-- COVER PREVIEW -->
+
+            <div class="admin-cover-preview">
+
+                <span class="admin-eyebrow">
+                    COVER PREVIEW
+                </span>
+
+                <div class="admin-cover-preview-image"
+                     id="coverPreview">
+
+                    <span>♪</span>
+
+                </div>
+
+            </div>
+
+        </section>
+
+
+        <!-- =================================================
+             STEP 3 - ARTISTS
+             ================================================= -->
+
+        <section class="admin-form-card release-create-section">
+
+            <div class="admin-form-card-header">
+
+                <span class="admin-eyebrow">
+                    STEP 03
+                </span>
+
+                <h2>Artists</h2>
+
+                <p class="admin-section-description">
+                    Select the main artist and any featured artists
+                    for 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>
+                    The primary artist associated with this 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>
+
+                <small>
+                    Hold Ctrl on Windows or Cmd on macOS
+                    to select multiple artists.
+                </small>
+
+                <span asp-validation-for="FeaturedArtistIds"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+        </section>
+
+
+        <!-- =================================================
+             SINGLE SETTINGS
+             ================================================= -->
+
+        <section class="admin-form-card release-create-section"
+                 id="singleSection">
+
+            <div class="admin-form-card-header">
+
+                <span class="admin-eyebrow">
+                    STEP 04
+                </span>
+
+                <h2>Single Information</h2>
+
+                <p class="admin-section-description">
+                    Enter the duration of the single.
+                </p>
+
+            </div>
+
+
+            <div class="admin-form-field">
+
+                <label asp-for="SingleDuration">
+                    Duration
+                </label>
+
+                <input asp-for="SingleDuration"
+                       placeholder="03:45" />
+
+                <span asp-validation-for="SingleDuration"
+                      class="admin-field-error">
+                </span>
+
+                <small>
+                    Example: 03:45
+                </small>
+
+            </div>
+
+        </section>
+
+
+        <!-- =================================================
+             ALBUM TRACKS
+             ================================================= -->
+
+        <section class="admin-form-card release-create-section"
+                 id="albumSection">
+
+            <div class="admin-form-card-header track-header">
+
+                <div>
+
+                    <span class="admin-eyebrow">
+                        STEP 04
+                    </span>
+
+                    <h2>Track List</h2>
+
+                    <p class="admin-section-description">
+                        Add tracks in the order they appear
+                        on the album.
+                    </p>
+
+                </div>
+
+
+                <button type="button"
+                        class="admin-button secondary"
+                        id="addTrackButton">
+
+                    ＋ Add Track
+
+                </button>
+
+            </div>
+
+
+            <div id="tracksContainer">
+
+                @for (var i = 0;
+                i < Model.Tracks.Count;
+                i++)
+                {
+                <div class="admin-track-card"
+                     data-track-row>
+
+                    <!-- TRACK NUMBER -->
+
+                    <div class="admin-track-number">
+                        @(i + 1)
+                    </div>
+
+
+                    <!-- TRACK CONTENT -->
+
+                    <div class="admin-track-content">
+
+                        <div class="admin-form-row">
+
+                            <!-- TRACK NAME -->
+
+                            <div class="admin-form-field">
+
+                                <label>
+                                    Track Name
+                                </label>
+
+                                <input asp-for="Tracks[i].SongName"
+                                       data-field="SongName"
+                                       placeholder="Track title" />
+
+                                <span asp-validation-for="Tracks[i].SongName"
+                                      class="admin-field-error">
+                                    </span>
+
+                            </div>
+
+
+                            <!-- DURATION -->
+
+                            <div class="admin-form-field">
+
+                                <label>
+                                    Duration
+                                </label>
+
+                                <input asp-for="Tracks[i].SongDuration"
+                                       data-field="SongDuration"
+                                       placeholder="03:42" />
+
+                                <span asp-validation-for="Tracks[i].SongDuration"
+                                      class="admin-field-error">
+                                    </span>
+
+                            </div>
+
+                        </div>
+
+
+                        <!-- TRACK ARTISTS -->
+
+                        <div class="admin-form-field">
+
+                            <label>
+                                Track Artists
+                            </label>
+
+                            <select asp-for="Tracks[i].ArtistIds"
+                                    multiple
+                                    data-field="ArtistIds"
+                                    class="admin-multi-select">
+
+                                @foreach (var artist in ViewBag.Artists)
+                                {
+                                <option value="@artist.ArtistId">
+                                    @artist.ArtistName
+                                </option>
+                                }
+
+                            </select>
+
+                            <small>
+                                If no artist is selected,
+                                the release's main artist will
+                                automatically be used.
+                            </small>
+
+                        </div>
+
+                    </div>
+
+
+                    <!-- REMOVE TRACK -->
+
+                    <button type="button"
+                            class="admin-track-remove"
+                            data-remove-track
+                            title="Remove track">
+
+                        ×
+
+                    </button>
+
+                </div>
+                }
+
+            </div>
+
+        </section>
+
+
+        <!-- =================================================
+             SUBMIT
+             ================================================= -->
+
+        <div class="admin-release-submit">
+
+            <div>
+
+                <span class="admin-eyebrow">
+                    READY TO CREATE?
+                </span>
+
+                <p>
+                    The release, artists and tracks
+                    will be created together.
+                </p>
+
+            </div>
+
+
+            <div class="admin-form-actions release-actions">
+
+                <a asp-action="Index"
+                   class="admin-button secondary">
+
+                    Cancel
+
+                </a>
+
+
+                <button type="submit"
+                        class="admin-button primary">
+
+                    Create Release
+
+                </button>
+
+            </div>
+
+        </div>
+
+    </form>
+
+</div>
+
+
+<!-- =========================================================
+     TRACK TEMPLATE
+     ========================================================= -->
+
+<template id="trackTemplate">
+
+    <div class="admin-track-card"
+         data-track-row>
+
+        <!-- TRACK NUMBER -->
+
+        <div class="admin-track-number">
+            1
+        </div>
+
+
+        <!-- TRACK CONTENT -->
+
+        <div class="admin-track-content">
+
+            <div class="admin-form-row">
+
+                <!-- NAME -->
+
+                <div class="admin-form-field">
+
+                    <label>
+                        Track Name
+                    </label>
+
+                    <input type="text"
+                           data-field="SongName"
+                           placeholder="Track title" />
+
+                </div>
+
+
+                <!-- DURATION -->
+
+                <div class="admin-form-field">
+
+                    <label>
+                        Duration
+                    </label>
+
+                    <input type="text"
+                           data-field="SongDuration"
+                           placeholder="03:42" />
+
+                </div>
+
+            </div>
+
+
+            <!-- ARTISTS -->
+
+            <div class="admin-form-field">
+
+                <label>
+                    Track Artists
+                </label>
+
+                <select multiple
+                        data-field="ArtistIds"
+                        class="admin-multi-select">
+
+                    @foreach (var artist in ViewBag.Artists)
+                    {
+                    <option value="@artist.ArtistId">
+                        @artist.ArtistName
+                    </option>
+                    }
+
+                </select>
+
+                <small>
+                    If left empty, the release's main artist
+                    will automatically be assigned.
+                </small>
+
+            </div>
+
+        </div>
+
+
+        <!-- REMOVE -->
+
+        <button type="button"
+                class="admin-track-remove"
+                data-remove-track
+                title="Remove track">
+
+            ×
+
+        </button>
+
+    </div>
+
+</template>
+
+
+@section Scripts
+{
+<partial name="_ValidationScriptsPartial" />
+
+<script>
+
+    document.addEventListener(
+        "DOMContentLoaded",
+        function ()
+        {
+            // ==========================================
+            // ELEMENTS
+            // ==========================================
+
+            const albumRadio =
+                document.getElementById(
+                    "releaseTypeAlbum");
+
+            const singleRadio =
+                document.getElementById(
+                    "releaseTypeSingle");
+
+            const albumSection =
+                document.getElementById(
+                    "albumSection");
+
+            const singleSection =
+                document.getElementById(
+                    "singleSection");
+
+            const tracksContainer =
+                document.getElementById(
+                    "tracksContainer");
+
+            const addTrackButton =
+                document.getElementById(
+                    "addTrackButton");
+
+            const trackTemplate =
+                document.getElementById(
+                    "trackTemplate");
+
+            const form =
+                document.getElementById(
+                    "createReleaseForm");
+
+
+            // ==========================================
+            // RELEASE TYPE
+            // ==========================================
+
+            function updateReleaseType()
+            {
+                const isAlbum =
+                    albumRadio.checked;
+
+
+                // Show / hide sections.
+                albumSection.style.display =
+                    isAlbum
+                        ? "block"
+                        : "none";
+
+
+                singleSection.style.display =
+                    isAlbum
+                        ? "none"
+                        : "block";
+
+
+                // Disable fields belonging to
+                // the hidden release type.
+                const albumInputs =
+                    albumSection.querySelectorAll(
+                        "input, select, textarea");
+
+
+                const singleInputs =
+                    singleSection.querySelectorAll(
+                        "input, select, textarea");
+
+
+                albumInputs.forEach(
+                    function (input)
+                    {
+                        input.disabled =
+                            !isAlbum;
+                    });
+
+
+                singleInputs.forEach(
+                    function (input)
+                    {
+                        input.disabled =
+                            isAlbum;
+                    });
+            }
+
+
+            albumRadio.addEventListener(
+                "change",
+                updateReleaseType);
+
+
+            singleRadio.addEventListener(
+                "change",
+                updateReleaseType);
+
+
+            // ==========================================
+            // TRACK INDEXING
+            // ==========================================
+
+            function reindexTracks()
+            {
+                const rows =
+                    tracksContainer.querySelectorAll(
+                        "[data-track-row]");
+
+
+                rows.forEach(
+                    function (row, index)
+                    {
+                        const number =
+                            row.querySelector(
+                                ".admin-track-number");
+
+
+                        const songName =
+                            row.querySelector(
+                                '[data-field="SongName"]');
+
+
+                        const duration =
+                            row.querySelector(
+                                '[data-field="SongDuration"]');
+
+
+                        const artists =
+                            row.querySelector(
+                                '[data-field="ArtistIds"]');
+
+
+                        // Display number.
+                        number.textContent =
+                            index + 1;
+
+
+                        // Song name.
+                        songName.name =
+                            `Tracks[${index}].SongName`;
+
+                        songName.id =
+                            `Tracks_${index}__SongName`;
+
+
+                        // Duration.
+                        duration.name =
+                            `Tracks[${index}].SongDuration`;
+
+                        duration.id =
+                            `Tracks_${index}__SongDuration`;
+
+
+                        // Artists.
+                        artists.name =
+                            `Tracks[${index}].ArtistIds`;
+
+                        artists.id =
+                            `Tracks_${index}__ArtistIds`;
+                    });
+            }
+
+
+            // ==========================================
+            // ADD TRACK
+            // ==========================================
+
+            addTrackButton.addEventListener(
+                "click",
+                function ()
+                {
+                    const fragment =
+                        trackTemplate
+                            .content
+                            .cloneNode(true);
+
+
+                    tracksContainer.appendChild(
+                        fragment);
+
+
+                    reindexTracks();
+                });
+
+
+            // ==========================================
+            // REMOVE TRACK
+            // ==========================================
+
+            tracksContainer.addEventListener(
+                "click",
+                function (event)
+                {
+                    const button =
+                        event.target.closest(
+                            "[data-remove-track]");
+
+
+                    if (!button)
+                        return;
+
+
+                    const rows =
+                        tracksContainer.querySelectorAll(
+                            "[data-track-row]");
+
+
+                    // Album must always keep
+                    // at least one track row.
+                    if (rows.length <= 1)
+                    {
+                        alert(
+                            "An album must have at least one track.");
+
+                        return;
+                    }
+
+
+                    const row =
+                        button.closest(
+                            "[data-track-row]");
+
+
+                    row.remove();
+
+
+                    reindexTracks();
+                });
+
+
+            // ==========================================
+            // BEFORE SUBMIT
+            // ==========================================
+
+            form.addEventListener(
+                "submit",
+                function ()
+                {
+                    // Make sure indexes are always
+                    // sequential before ASP.NET binding.
+                    reindexTracks();
+                });
+
+
+            // ==========================================
+            // COVER PREVIEW
+            // ==========================================
+
+            const coverInput =
+                document.getElementById(
+                    "coverPhotoInput");
+
+
+            const coverPreview =
+                document.getElementById(
+                    "coverPreview");
+
+
+            function showCoverPlaceholder()
+            {
+                coverPreview.innerHTML =
+                    "<span>♪</span>";
+            }
+
+
+            function updateCoverPreview()
+            {
+                const url =
+                    coverInput.value.trim();
+
+
+                if (!url)
+                {
+                    showCoverPlaceholder();
+
+                    return;
+                }
+
+
+                coverPreview.innerHTML = "";
+
+
+                const image =
+                    document.createElement(
+                        "img");
+
+
+                image.src =
+                    url;
+
+                image.alt =
+                    "Cover preview";
+
+
+                image.addEventListener(
+                    "error",
+                    function ()
+                    {
+                        showCoverPlaceholder();
+                    });
+
+
+                coverPreview.appendChild(
+                    image);
+            }
+
+
+            coverInput.addEventListener(
+                "input",
+                updateCoverPreview);
+
+
+            // ==========================================
+            // INITIAL STATE
+            // ==========================================
+
+            updateReleaseType();
+
+            reindexTracks();
+
+            updateCoverPreview();
+        });
+
+</script>
+}
Index: KernelRecordsMVC.Web/Views/Admin/EditProduct.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/EditProduct.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Admin/EditProduct.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -1,206 +1,449 @@
 ﻿@model KernelRecordsMVC.Application.ViewModels.EditProductViewModel
 
-<h1>Modify Product</h1>
-
-<div class="card mb-4">
-
-    <div class="card-body">
-
-        <h4>@Model.ReleaseTitle</h4>
-
-        <p class="text-muted mb-0">
-
-            Format:
-
-            <strong>
-                @Model.Format
-            </strong>
-
-        </p>
+@{
+    ViewData["Title"] = "Modify Product";
+}
+
+<div class="admin-page admin-form-page">
+
+    <!-- HEADER -->
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Products"
+               class="admin-back-link">
+
+                ← Products
+
+            </a>
+
+            <span class="admin-eyebrow">
+                PRODUCT MANAGEMENT
+            </span>
+
+            <h1>Modify Product</h1>
+
+            <p>
+                Update inventory information or apply a discount.
+            </p>
+
+        </div>
 
     </div>
 
+
+    <!-- PRODUCT SUMMARY -->
+
+    <div class="admin-product-summary">
+
+        <div>
+
+            <span class="admin-eyebrow">
+                SELECTED PRODUCT
+            </span>
+
+            <h2>
+                @Model.ReleaseTitle
+            </h2>
+
+        </div>
+
+        <div class="admin-product-summary-meta">
+
+            <div>
+
+                <span>FORMAT</span>
+
+                <strong>
+                    @Model.Format
+                </strong>
+
+            </div>
+
+            <div>
+
+                <span>CURRENT PRICE</span>
+
+                <strong>
+                    @Model.Price.ToString("C")
+                </strong>
+
+            </div>
+
+            <div>
+
+                <span>STOCK</span>
+
+                <strong>
+                    @Model.Stock
+                </strong>
+
+            </div>
+
+        </div>
+
+    </div>
+
+
+    <section class="admin-form-card admin-edit-card">
+
+        <form asp-action="EditProduct"
+              method="post"
+              id="productEditForm">
+
+            @Html.AntiForgeryToken()
+
+            <input type="hidden"
+                   asp-for="ProductId" />
+
+
+            <div asp-validation-summary="ModelOnly"
+                 class="admin-validation">
+            </div>
+
+
+            <!-- =================================================
+                 MODIFICATION TYPE
+                 ================================================= -->
+
+            <div class="admin-form-field">
+
+                <label asp-for="ModificationType">
+                    What do you want to do?
+                </label>
+
+                <div class="admin-modification-options">
+
+                    <label class="admin-modification-option">
+
+                        <input type="radio"
+                               asp-for="ModificationType"
+                               value="UPDATE"
+                               id="updateOption" />
+
+                        <span>
+
+                            <strong>
+                                Update Product
+                            </strong>
+
+                            <small>
+                                Change price, description or stock.
+                            </small>
+
+                        </span>
+
+                    </label>
+
+
+                    <label class="admin-modification-option">
+
+                        <input type="radio"
+                               asp-for="ModificationType"
+                               value="DISCOUNT"
+                               id="discountOption" />
+
+                        <span>
+
+                            <strong>
+                                Apply Discount
+                            </strong>
+
+                            <small>
+                                Reduce the current selling price.
+                            </small>
+
+                        </span>
+
+                    </label>
+
+                </div>
+
+                <span asp-validation-for="ModificationType"
+                      class="admin-field-error">
+                </span>
+
+            </div>
+
+
+            <!-- =================================================
+                 UPDATE FIELDS
+                 ================================================= -->
+
+            <div id="updateFields"
+                 class="admin-edit-section">
+
+                <div class="admin-edit-section-heading">
+
+                    <span class="admin-eyebrow">
+                        PRODUCT UPDATE
+                    </span>
+
+                    <h3>Product Information</h3>
+
+                </div>
+
+
+                <div class="admin-form-row">
+
+                    <!-- PRICE -->
+
+                    <div class="admin-form-field">
+
+                        <label asp-for="Price">
+                            Price
+                        </label>
+
+                        <div class="admin-input-prefix">
+
+                            <span>$</span>
+
+                            <input asp-for="Price"
+                                   type="number"
+                                   min="0"
+                                   step="0.01" />
+
+                        </div>
+
+                        <span asp-validation-for="Price"
+                              class="admin-field-error">
+                        </span>
+
+                    </div>
+
+
+                    <!-- STOCK -->
+
+                    <div class="admin-form-field">
+
+                        <label asp-for="Stock">
+                            Stock
+                        </label>
+
+                        <input asp-for="Stock"
+                               type="number"
+                               min="0" />
+
+                        <span asp-validation-for="Stock"
+                              class="admin-field-error">
+                        </span>
+
+                    </div>
+
+                </div>
+
+
+                <div class="admin-form-field">
+
+                    <label asp-for="ProductDescription">
+                        Description
+                    </label>
+
+                    <textarea asp-for="ProductDescription"
+                              rows="5"></textarea>
+
+                    <span asp-validation-for="ProductDescription"
+                          class="admin-field-error">
+                    </span>
+
+                </div>
+
+            </div>
+
+
+            <!-- =================================================
+                 DISCOUNT
+                 ================================================= -->
+
+            <div id="discountFields"
+                 class="admin-edit-section">
+
+                <div class="admin-edit-section-heading">
+
+                    <span class="admin-eyebrow">
+                        PROMOTION
+                    </span>
+
+                    <h3>Apply Discount</h3>
+
+                    <p>
+                        The percentage will be deducted
+                        from the product's current price.
+                    </p>
+
+                </div>
+
+
+                <div class="admin-form-field">
+
+                    <label asp-for="Discount">
+                        Discount Percentage
+                    </label>
+
+                    <div class="admin-input-suffix">
+
+                        <input asp-for="Discount"
+                               type="number"
+                               min="0.01"
+                               max="99.99"
+                               step="0.01"
+                               placeholder="10" />
+
+                        <span>%</span>
+
+                    </div>
+
+                    <span asp-validation-for="Discount"
+                          class="admin-field-error">
+                    </span>
+
+                </div>
+
+
+                <div class="admin-discount-preview">
+
+                    <span>
+                        CURRENT PRICE
+                    </span>
+
+                    <strong id="currentPrice"
+                            data-price="@Model.Price">
+                        @Model.Price.ToString("C")
+                    </strong>
+
+
+                    <span>
+                        NEW PRICE
+                    </span>
+
+                    <strong id="discountedPrice">
+                        —
+                    </strong>
+
+                </div>
+
+            </div>
+
+
+            <!-- ACTIONS -->
+
+            <div class="admin-form-actions">
+
+                <button type="submit"
+                        class="admin-button primary">
+
+                    Save Changes
+
+                </button>
+
+                <a asp-action="Products"
+                   class="admin-button secondary">
+
+                    Cancel
+
+                </a>
+
+            </div>
+
+        </form>
+
+    </section>
+
 </div>
 
-
-<form asp-action="EditProduct"
-      method="post">
-
-    @Html.AntiForgeryToken()
-
-    <input type="hidden"
-           asp-for="ProductId" />
-
-    <div asp-validation-summary="ModelOnly"
-         class="text-danger mb-3">
-    </div>
-
-
-    <!-- MODIFICATION TYPE -->
-
-    <div class="mb-3">
-
-        <label asp-for="ModificationType"
-               class="form-label">
-
-            Modification Type
-
-        </label>
-
-        <select asp-for="ModificationType"
-                class="form-select">
-
-            <option value="UPDATE">
-                Update Product
-            </option>
-
-            <option value="DISCOUNT">
-                Apply Discount
-            </option>
-
-        </select>
-
-        <span asp-validation-for="ModificationType"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <!-- PRICE -->
-
-    <div class="mb-3">
-
-        <label asp-for="Price"
-               class="form-label">
-
-            Price
-
-        </label>
-
-        <div class="input-group">
-
-            <span class="input-group-text">
-                $
-            </span>
-
-            <input asp-for="Price"
-                   class="form-control"
-                   step="0.01" />
-
-        </div>
-
-        <span asp-validation-for="Price"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <!-- DISCOUNT -->
-
-    <div class="mb-3">
-
-        <label asp-for="Discount"
-               class="form-label">
-
-            Discount Percentage
-
-        </label>
-
-        <div class="input-group">
-
-            <input asp-for="Discount"
-                   class="form-control"
-                   type="number"
-                   min="0"
-                   max="100"
-                   step="0.01" />
-
-            <span class="input-group-text">
-                %
-            </span>
-
-        </div>
-
-        <small class="text-muted">
-            Only used when "Apply Discount" is selected.
-        </small>
-
-        <span asp-validation-for="Discount"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <!-- DESCRIPTION -->
-
-    <div class="mb-3">
-
-        <label asp-for="ProductDescription"
-               class="form-label">
-
-            Description
-
-        </label>
-
-        <textarea asp-for="ProductDescription"
-                  class="form-control"
-                  rows="4">
-        </textarea>
-
-        <span asp-validation-for="ProductDescription"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <!-- STOCK -->
-
-    <div class="mb-3">
-
-        <label asp-for="Stock"
-               class="form-label">
-
-            Stock
-
-        </label>
-
-        <input asp-for="Stock"
-               class="form-control"
-               type="number"
-               min="0" />
-
-        <span asp-validation-for="Stock"
-              class="text-danger">
-        </span>
-
-    </div>
-
-
-    <div class="d-flex gap-2">
-
-        <button type="submit"
-                class="btn btn-success">
-
-            Save Changes
-
-        </button>
-
-        <a asp-action="Index"
-           class="btn btn-secondary">
-
-            Cancel
-
-        </a>
-
-    </div>
-
-</form>
 
 @section Scripts
 {
-    <partial name="_ValidationScriptsPartial"/>
+    <partial name="_ValidationScriptsPartial" />
+
+    <script>
+
+        document.addEventListener("DOMContentLoaded", function ()
+        {
+            const updateOption =
+                document.getElementById("updateOption");
+
+            const discountOption =
+                document.getElementById("discountOption");
+
+            const updateFields =
+                document.getElementById("updateFields");
+
+            const discountFields =
+                document.getElementById("discountFields");
+
+            const discountInput =
+                document.getElementById("Discount");
+
+            const currentPriceElement =
+                document.getElementById("currentPrice");
+
+            const discountedPriceElement =
+                document.getElementById("discountedPrice");
+
+
+            function updateMode()
+            {
+                const isDiscount =
+                    discountOption.checked;
+
+                updateFields.style.display =
+                    isDiscount ? "none" : "block";
+
+                discountFields.style.display =
+                    isDiscount ? "block" : "none";
+            }
+
+
+            function updateDiscountPreview()
+            {
+                const currentPrice =
+                    parseFloat(
+                        currentPriceElement.dataset.price);
+
+                const discount =
+                    parseFloat(discountInput.value);
+
+
+                if (isNaN(discount) ||
+                    discount <= 0 ||
+                    discount >= 100)
+                {
+                    discountedPriceElement.textContent =
+                        "—";
+
+                    return;
+                }
+
+
+                const newPrice =
+                    currentPrice *
+                    (1 - discount / 100);
+
+
+                discountedPriceElement.textContent =
+                    "$" + newPrice.toFixed(2);
+            }
+
+
+            updateOption.addEventListener(
+                "change",
+                updateMode);
+
+            discountOption.addEventListener(
+                "change",
+                updateMode);
+
+            discountInput.addEventListener(
+                "input",
+                updateDiscountPreview);
+
+
+            updateMode();
+            updateDiscountPreview();
+        });
+
+    </script>
 }
Index: KernelRecordsMVC.Web/Views/Admin/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/Index.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Admin/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -3,47 +3,354 @@
 }
 
-<h1>Admin Dashboard</h1>
-
-@if (TempData["Success"] != null)
-{
-    <div class="alert alert-success">
-        @TempData["Success"]
+<div class="admin-page">
+
+    <!-- =====================================================
+         HEADER
+         ===================================================== -->
+
+    <div class="admin-header">
+
+        <div>
+
+            <span class="admin-eyebrow">
+                KERNEL RECORDS
+            </span>
+
+            <h1>Admin Dashboard</h1>
+
+            <p>
+                Manage catalog, inventory and store operations.
+            </p>
+
+        </div>
+
+
+        <div class="admin-header-actions">
+
+            <a asp-action="CreateRelease"
+               class="admin-button secondary">
+
+                <span>♪</span>
+                New Release
+
+            </a>
+
+
+            <a asp-action="CreateProduct"
+               class="admin-button primary">
+
+                <span>＋</span>
+                New Product
+
+            </a>
+
+        </div>
+
     </div>
-}
-
-<div class="row mt-4">
-
-    <div class="col-md-6 mb-3">
-
-        <div class="card h-100">
-
-            <div class="card-body">
-
-                <h4>Products</h4>
+
+
+    @if (TempData["Success"] != null)
+    {
+        <div class="admin-alert success">
+
+            <span>✓</span>
+
+            @TempData["Success"]
+
+        </div>
+    }
+
+
+    @if (TempData["Error"] != null)
+    {
+        <div class="admin-alert danger">
+
+            <span>!</span>
+
+            @TempData["Error"]
+
+        </div>
+    }
+
+
+    <!-- =====================================================
+         STATISTICS
+         ===================================================== -->
+
+    <div class="admin-stat-grid">
+
+        <div class="admin-stat-card">
+
+            <span class="admin-stat-label">
+                PRODUCTS
+            </span>
+
+            <strong>
+                @ViewBag.ProductCount
+            </strong>
+
+            <p>
+                Physical products in the store
+            </p>
+
+        </div>
+
+
+        <div class="admin-stat-card">
+
+            <span class="admin-stat-label">
+                RELEASES
+            </span>
+
+            <strong>
+                @ViewBag.ReleaseCount
+            </strong>
+
+            <p>
+                Albums and singles in the catalog
+            </p>
+
+        </div>
+
+
+        <div class="admin-stat-card warning">
+
+            <span class="admin-stat-label">
+                LOW STOCK
+            </span>
+
+            <strong>
+                @ViewBag.LowStockCount
+            </strong>
+
+            <p>
+                Products with 5 or fewer remaining
+            </p>
+
+        </div>
+
+
+        <div class="admin-stat-card danger">
+
+            <span class="admin-stat-label">
+                OUT OF STOCK
+            </span>
+
+            <strong>
+                @ViewBag.OutOfStockCount
+            </strong>
+
+            <p>
+                Products requiring restocking
+            </p>
+
+        </div>
+
+    </div>
+
+
+    <!-- =====================================================
+         CATALOG MANAGEMENT
+         ===================================================== -->
+
+    <section class="admin-section">
+
+        <div class="admin-section-heading">
+
+            <div>
+
+                <span class="admin-eyebrow">
+                    CATALOG MANAGEMENT
+                </span>
+
+                <h2>Releases & Products</h2>
 
                 <p>
-                    Create and modify products available
-                    in the music store.
+                    Create music releases and manage their physical formats.
                 </p>
 
-                <a asp-action="Products"
-                   class="btn btn-primary">
-
-                    Manage Products
-
-                </a>
-
-                <a asp-action="CreateProduct"
-                   class="btn btn-success">
-
-                    New Product
-
-                </a>
-
-            </div>
-
-        </div>
-
-    </div>
+            </div>
+
+        </div>
+
+
+        <div class="admin-action-grid">
+
+            <!-- CREATE RELEASE -->
+
+            <a asp-action="CreateRelease"
+               class="admin-action-card">
+
+                <div class="admin-action-icon">
+                    ♪
+                </div>
+
+                <div>
+
+                    <h3>Create Release</h3>
+
+                    <p>
+                        Create an album or single,
+                        assign artists and add album tracks.
+                    </p>
+
+                </div>
+
+                <span class="admin-action-arrow">
+                    →
+                </span>
+
+            </a>
+
+
+            <!-- CREATE PRODUCT -->
+
+            <a asp-action="CreateProduct"
+               class="admin-action-card">
+
+                <div class="admin-action-icon">
+                    ＋
+                </div>
+
+                <div>
+
+                    <h3>Create Product</h3>
+
+                    <p>
+                        Add vinyl, CD or cassette
+                        editions to an existing release.
+                    </p>
+
+                </div>
+
+                <span class="admin-action-arrow">
+                    →
+                </span>
+
+            </a>
+
+
+            <!-- MANAGE PRODUCTS -->
+
+            <a asp-action="Products"
+               class="admin-action-card">
+
+                <div class="admin-action-icon">
+                    ◫
+                </div>
+
+                <div>
+
+                    <h3>Manage Products</h3>
+
+                    <p>
+                        Update pricing, inventory,
+                        descriptions and discounts.
+                    </p>
+
+                </div>
+
+                <span class="admin-action-arrow">
+                    →
+                </span>
+
+            </a>
+
+        </div>
+
+    </section>
+
+
+    <!-- =====================================================
+         WORKFLOW INFO
+         ===================================================== -->
+
+    <section class="admin-section">
+
+        <div class="admin-section-heading">
+
+            <div>
+
+                <span class="admin-eyebrow">
+                    ADMIN WORKFLOW
+                </span>
+
+                <h2>Catalog Process</h2>
+
+            </div>
+
+        </div>
+
+
+        <div class="admin-workflow-grid">
+
+            <div class="admin-workflow-card">
+
+                <span class="admin-workflow-number">
+                    01
+                </span>
+
+                <div>
+
+                    <strong>
+                        Create Release
+                    </strong>
+
+                    <p>
+                        Add the album or single,
+                        artists and track information.
+                    </p>
+
+                </div>
+
+            </div>
+
+
+            <div class="admin-workflow-card">
+
+                <span class="admin-workflow-number">
+                    02
+                </span>
+
+                <div>
+
+                    <strong>
+                        Create Product
+                    </strong>
+
+                    <p>
+                        Add its vinyl, CD or cassette
+                        store edition.
+                    </p>
+
+                </div>
+
+            </div>
+
+
+            <div class="admin-workflow-card">
+
+                <span class="admin-workflow-number">
+                    03
+                </span>
+
+                <div>
+
+                    <strong>
+                        Manage Inventory
+                    </strong>
+
+                    <p>
+                        Change prices, stock,
+                        descriptions or apply discounts.
+                    </p>
+
+                </div>
+
+            </div>
+
+        </div>
+
+    </section>
 
 </div>
Index: KernelRecordsMVC.Web/Views/Admin/Products.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Admin/Products.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Admin/Products.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -1,131 +1,225 @@
 ﻿@model IEnumerable<KernelRecordsMVC.Models.Product>
 
-<div class="d-flex justify-content-between align-items-center mb-4">
-
-    <div>
-
-        <h1>Product Management</h1>
-
-        <p class="text-muted">
-            Create and modify products in the store.
-        </p>
+@{
+    ViewData["Title"] = "Product Management";
+}
+
+<div class="admin-page">
+
+    <!-- HEADER -->
+
+    <div class="admin-header">
+
+        <div>
+
+            <a asp-action="Index"
+               class="admin-back-link">
+
+                ← Dashboard
+
+            </a>
+
+            <span class="admin-eyebrow">
+                INVENTORY
+            </span>
+
+            <h1>Product Management</h1>
+
+            <p>
+                Manage formats, prices and inventory.
+            </p>
+
+        </div>
+
+
+        <a asp-action="CreateProduct"
+           class="admin-button primary">
+
+            <span>＋</span>
+            New Product
+
+        </a>
 
     </div>
 
 
-    <a asp-action="CreateProduct"
-       class="btn btn-success">
-
-        + New Product
-
-    </a>
+    @if (TempData["Success"] != null)
+    {
+        <div class="admin-alert success">
+
+            <span>✓</span>
+
+            @TempData["Success"]
+
+        </div>
+    }
+
+
+    <!-- SUMMARY -->
+
+    <div class="admin-list-summary">
+
+        <span>
+            @Model.Count() products
+        </span>
+
+        <span>
+            @Model.Count(x => x.Stock <= 0) out of stock
+        </span>
+
+    </div>
+
+
+    <!-- TABLE -->
+
+    <div class="admin-table-wrapper">
+
+        <table class="admin-table">
+
+            <thead>
+
+            <tr>
+
+                <th>Release</th>
+
+                <th>Format</th>
+
+                <th>Price</th>
+
+                <th>Stock</th>
+
+                <th>Status</th>
+
+                <th></th>
+
+            </tr>
+
+            </thead>
+
+
+            <tbody>
+
+            @foreach (var product in Model)
+            {
+                <tr>
+
+                    <!-- RELEASE -->
+
+                    <td>
+
+                        <div class="admin-product-release">
+
+                            <div class="admin-product-cover">
+
+                                @if (!string.IsNullOrWhiteSpace(
+                                    product.Release.CoverPhoto))
+                                {
+                                    <img src="@product.Release.CoverPhoto"
+                                         alt="@product.Release.Title" />
+                                }
+                                else
+                                {
+                                    <span>♪</span>
+                                }
+
+                            </div>
+
+
+                            <div>
+
+                                <strong>
+                                    @product.Release.Title
+                                </strong>
+
+                                <small>
+                                    Product #@product.ProductId
+                                </small>
+
+                            </div>
+
+                        </div>
+
+                    </td>
+
+
+                    <!-- FORMAT -->
+
+                    <td>
+
+                        <span class="admin-format-badge">
+                            @product.Format
+                        </span>
+
+                    </td>
+
+
+                    <!-- PRICE -->
+
+                    <td class="admin-price">
+
+                        @product.Price.ToString("C")
+
+                    </td>
+
+
+                    <!-- STOCK -->
+
+                    <td>
+
+                        <strong>
+                            @product.Stock
+                        </strong>
+
+                    </td>
+
+
+                    <!-- STATUS -->
+
+                    <td>
+
+                        @if (product.Stock <= 0)
+                        {
+                            <span class="admin-stock danger">
+                                Out of stock
+                            </span>
+                        }
+                        else if (product.Stock <= 5)
+                        {
+                            <span class="admin-stock warning">
+                                Low stock
+                            </span>
+                        }
+                        else
+                        {
+                            <span class="admin-stock success">
+                                In stock
+                            </span>
+                        }
+
+                    </td>
+
+
+                    <!-- ACTION -->
+
+                    <td class="admin-table-action">
+
+                        <a asp-action="EditProduct"
+                           asp-route-id="@product.ProductId"
+                           class="admin-button secondary small">
+
+                            Modify
+
+                        </a>
+
+                    </td>
+
+                </tr>
+            }
+
+            </tbody>
+
+        </table>
+
+    </div>
 
 </div>
-
-
-@if (TempData["Success"] != null)
-{
-    <div class="alert alert-success">
-
-        @TempData["Success"]
-
-    </div>
-}
-
-
-<div class="table-responsive">
-
-    <table class="table table-hover align-middle">
-
-        <thead>
-
-        <tr>
-
-            <th>Release</th>
-
-            <th>Format</th>
-
-            <th>Price</th>
-
-            <th>Stock</th>
-
-            <th></th>
-
-        </tr>
-
-        </thead>
-
-
-        <tbody>
-
-        @foreach (var product in Model)
-        {
-            <tr>
-
-                <td>
-
-                    <strong>
-                        @product.Release.Title
-                    </strong>
-
-                </td>
-
-
-                <td>
-
-                    <span class="badge bg-secondary">
-
-                        @product.Format
-
-                    </span>
-
-                </td>
-
-
-                <td>
-
-                    $@product.Price.ToString("0.00")
-
-                </td>
-
-
-                <td>
-
-                    @if (product.Stock > 0)
-                    {
-                        <span class="text-success">
-
-                            @product.Stock
-
-                        </span>
-                    }
-                    else
-                    {
-                        <span class="text-danger">
-                            Out of stock
-                        </span>
-                    }
-
-                </td>
-
-
-                <td>
-
-                    <a asp-action="EditProduct"
-                       asp-route-id="@product.ProductId"
-                       class="btn btn-outline-primary">
-
-                        Modify
-
-                    </a>
-
-                </td>
-
-            </tr>
-        }
-
-        </tbody>
-
-    </table>
-
-</div>
Index: KernelRecordsMVC.Web/Views/Home/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Home/Index.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Home/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -1,23 +1,178 @@
-﻿<div class="text-center py-5">
+﻿@{
+    ViewData["Title"] = "Home";
+}
 
-    <h1 class="display-3">
-        Music Store
-    </h1>
+<div class="home-page">
 
-    <p class="lead mt-3">
-        CDs · Vinyl · Cassettes
-    </p>
+    <!-- =====================================================
+         HERO
+         ===================================================== -->
 
-    <p class="text-muted">
-        Discover your next favorite release.
-    </p>
+    <section class="home-hero">
 
-    <a asp-controller="Release"
-       asp-action="Index"
-       class="btn btn-primary btn-lg mt-3">
+        <div class="home-hero-content">
 
-        Browse Releases
+            <span class="home-eyebrow">
+                KERNEL RECORDS
+            </span>
 
-    </a>
+            <h1>
+                MUSIC
+                <span>FOR</span>
+                YOUR COLLECTION.
+            </h1>
+
+            <p>
+                Discover vinyl records, CDs and cassettes
+                from artists and releases worth keeping.
+            </p>
+
+
+            <div class="home-hero-actions">
+
+                <a asp-controller="Release"
+                   asp-action="Index"
+                   class="home-button primary">
+
+                    Browse Collection
+
+                </a>
+
+                <a asp-controller="Sale"
+                   asp-action="Index"
+                   class="home-button secondary">
+
+                    Shop Sale
+
+                </a>
+
+            </div>
+
+        </div>
+
+
+        <div class="home-hero-mark">
+            K
+        </div>
+
+    </section>
+
+
+    <!-- =====================================================
+         QUICK LINKS
+         ===================================================== -->
+
+    <section class="home-section">
+
+        <div class="home-section-header">
+
+            <div>
+
+                <span class="section-label">
+                    SHOP
+                </span>
+
+                <h2>
+                    Find something you like.
+                </h2>
+
+            </div>
+
+        </div>
+
+
+        <div class="home-feature-grid">
+
+            <a asp-controller="Release"
+               asp-action="Index"
+               class="home-feature-card">
+
+                <span>01</span>
+
+                <h3>
+                    Browse Releases
+                </h3>
+
+                <p>
+                    Explore albums and singles.
+                </p>
+
+                <strong>
+                    Explore →
+                </strong>
+
+            </a>
+
+
+            <a asp-controller="TopSellers"
+               asp-action="Index"
+               class="home-feature-card">
+
+                <span>02</span>
+
+                <h3>
+                    Top Sellers
+                </h3>
+
+                <p>
+                    See what other collectors are buying.
+                </p>
+
+                <strong>
+                    View Top Sellers →
+                </strong>
+
+            </a>
+
+
+            <a asp-controller="Sale"
+               asp-action="Index"
+               class="home-feature-card sale-feature">
+
+                <span>03</span>
+
+                <h3>
+                    Sale
+                </h3>
+
+                <p>
+                    Find discounted physical releases.
+                </p>
+
+                <strong>
+                    Shop Sale →
+                </strong>
+
+            </a>
+
+        </div>
+
+    </section>
+
+
+    <!-- =====================================================
+         COLLECTION INFO
+         ===================================================== -->
+
+    <section class="home-collection">
+
+        <div>
+
+            <span class="section-label">
+                PHYSICAL MUSIC
+            </span>
+
+            <h2>
+                Vinyl. CDs. Cassettes.
+            </h2>
+
+        </div>
+
+        <p>
+            Build a physical collection with releases
+            available in the formats you actually want.
+        </p>
+
+    </section>
 
 </div>
Index: KernelRecordsMVC.Web/Views/Order/Cart.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Order/Cart.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Order/Cart.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -1,44 +1,31 @@
 ﻿@model KernelRecordsMVC.Application.ViewModels.CartViewModel
 
-<div class="d-flex justify-content-between align-items-center mb-4">
-
-    <h1>Your Cart</h1>
-
-    <a asp-controller="Release"
-       asp-action="Index"
-       class="btn btn-outline-primary">
-
-        Continue Shopping
-
-    </a>
-
-</div>
-
-
-@if (TempData["Error"] != null)
-{
-    <div class="alert alert-danger">
-
-        @TempData["Error"]
-
-    </div>
+@{
+    ViewData["Title"] = "Cart";
 }
 
-
-@if (!Model.Items.Any())
-{
-    <div class="text-center py-5">
-
-        <h3>Your cart is empty.</h3>
-
-        <p class="text-muted">
-            Browse our releases and add something to your order.
-        </p>
+<div class="cart-page">
+
+    <div class="cart-header">
+
+        <div>
+
+            <span class="page-eyebrow">
+                YOUR ORDER
+            </span>
+
+            <h1>Your Cart</h1>
+
+            <p>
+                Review your selected physical releases.
+            </p>
+
+        </div>
 
         <a asp-controller="Release"
            asp-action="Index"
-           class="btn btn-primary">
-
-            Browse Releases
+           class="store-button secondary">
+
+            Continue Shopping
 
         </a>
@@ -46,180 +33,207 @@
     </div>
 
-    return;
-}
-
-
-<div class="table-responsive">
-
-    <table class="table align-middle">
-
-        <thead>
-
-        <tr>
-
-            <th>Release</th>
-
-            <th>Format</th>
-
-            <th>Price</th>
-
-            <th>Quantity</th>
-
-            <th>Total</th>
-
-            <th></th>
-
-        </tr>
-
-        </thead>
-
-
-        <tbody>
-
-        @foreach (var item in Model.Items)
-        {
-            <tr>
-
-                <td>
-
-                    <a asp-controller="Release"
-                       asp-action="Details"
-                       asp-route-id="@item.ReleaseId">
-
-                        @item.ReleaseTitle
-
-                    </a>
-
-                </td>
-
-
-                <td>
-
-                    <span class="badge bg-secondary">
-
-                        @item.Format
-
+
+    @if (TempData["Error"] != null)
+    {
+        <div class="profile-alert"
+             style="background:#f9e8e8;color:#a33;">
+            @TempData["Error"]
+        </div>
+    }
+
+
+    @if (!Model.Items.Any())
+    {
+        <div class="empty-store">
+
+            <div class="empty-store-icon">
+                🛒
+            </div>
+
+            <h2>Your cart is empty</h2>
+
+            <p>
+                Browse our releases and add something to your order.
+            </p>
+
+            <a asp-controller="Release"
+               asp-action="Index"
+               class="store-button primary">
+
+                Browse Releases
+
+            </a>
+
+        </div>
+    }
+    else
+    {
+        <div class="cart-layout">
+
+            <div class="cart-items">
+
+                <div class="cart-items-header">
+                    @Model.Items.Count item(s) in your cart
+                </div>
+
+
+                @foreach (var item in Model.Items)
+                {
+                    <div class="cart-item">
+
+                        <a asp-controller="Release"
+                           asp-action="Details"
+                           asp-route-id="@item.ReleaseId"
+                           class="cart-item-cover">
+
+                            @if (!string.IsNullOrWhiteSpace(item.CoverPhoto))
+                            {
+                                <img src="@item.CoverPhoto"
+                                     alt="@item.ReleaseTitle" />
+                            }
+                            else
+                            {
+                                <div class="cart-cover-placeholder">
+                                    ♪
+                                </div>
+                            }
+
+                        </a>
+
+
+                        <div class="cart-item-info">
+
+                            <span class="cart-item-type">
+                                @item.Format
+                            </span>
+
+                            <h2>
+
+                                <a asp-controller="Release"
+                                   asp-action="Details"
+                                   asp-route-id="@item.ReleaseId">
+
+                                    @item.ReleaseTitle
+
+                                </a>
+
+                            </h2>
+
+                            <div class="cart-item-price">
+
+                                @item.Price.ToString("C")
+                                each
+
+                            </div>
+
+                        </div>
+
+
+                        <div class="cart-item-quantity">
+
+                            <form asp-action="UpdateQuantity"
+                                  method="post">
+
+                                @Html.AntiForgeryToken()
+
+                                <input type="hidden"
+                                       name="id"
+                                       value="@item.ProductId" />
+
+                                <input type="number"
+                                       name="quantity"
+                                       value="@item.Quantity"
+                                       min="1"
+                                       max="@item.Stock" />
+
+                                <button type="submit">
+                                    Update
+                                </button>
+
+                            </form>
+
+                        </div>
+
+
+                        <div class="cart-item-total">
+
+                            @item.Total.ToString("C")
+
+                        </div>
+
+
+                        <form asp-action="RemoveProduct"
+                              method="post">
+
+                            @Html.AntiForgeryToken()
+
+                            <input type="hidden"
+                                   name="id"
+                                   value="@item.ProductId" />
+
+                            <button type="submit"
+                                    class="cart-remove"
+                                    title="Remove">
+
+                                ×
+
+                            </button>
+
+                        </form>
+
+                    </div>
+                }
+
+            </div>
+
+
+            <aside class="cart-summary">
+
+                <span class="section-label">
+                    ORDER SUMMARY
+                </span>
+
+                <h2>
+                    Your Order
+                </h2>
+
+
+                <div class="summary-line">
+
+                    <span>
+                        Items
                     </span>
 
-                </td>
-
-
-                <td>
-
-                    $@item.Price.ToString("0.00")
-
-                </td>
-
-
-                <td>
-
-                    <form asp-action="UpdateQuantity"
-                          method="post"
-                          class="d-flex">
-
-                        @Html.AntiForgeryToken()
-
-                        <input type="hidden"
-                               name="id"
-                               value="@item.ProductId" />
-
-                        <input type="number"
-                               name="quantity"
-                               value="@item.Quantity"
-                               min="1"
-                               max="@item.Stock"
-                               class="form-control"
-                               style="width:90px;" />
-
-                        <button type="submit"
-                                class="btn btn-outline-secondary ms-2">
-
-                            Update
-
-                        </button>
-
-                    </form>
-
-                </td>
-
-
-                <td>
-
                     <strong>
-
-                        $@item.Total.ToString("0.00")
-
+                        @Model.Items.Sum(x => x.Quantity)
                     </strong>
 
-                </td>
-
-
-                <td>
-
-                    <form asp-action="RemoveProduct"
-                          method="post">
-
-                        @Html.AntiForgeryToken()
-
-                        <input type="hidden"
-                               name="id"
-                               value="@item.ProductId" />
-
-                        <button type="submit"
-                                class="btn btn-outline-danger">
-
-                            Remove
-
-                        </button>
-
-                    </form>
-
-                </td>
-
-            </tr>
-        }
-
-        </tbody>
-
-    </table>
+                </div>
+
+
+                <div class="summary-line total">
+
+                    <span>
+                        Total
+                    </span>
+
+                    <strong>
+                        @Model.Total.ToString("C")
+                    </strong>
+
+                </div>
+
+
+                <a asp-action="Checkout"
+                   class="store-button primary full">
+
+                    Proceed to Checkout
+
+                </a>
+
+            </aside>
+
+        </div>
+    }
 
 </div>
-
-
-<div class="row justify-content-end">
-
-    <div class="col-md-4">
-
-        <div class="card">
-
-            <div class="card-body">
-
-                <h4>Order Summary</h4>
-
-                <hr />
-
-                <div class="d-flex justify-content-between">
-
-                    <span>Total</span>
-
-                    <strong>
-                        $@Model.Total.ToString("0.00")
-                    </strong>
-
-                </div>
-
-
-                <a asp-action="Checkout"
-                   class="btn btn-success w-100 mt-3">
-
-                    Proceed to Checkout
-
-                </a>
-
-            </div>
-
-        </div>
-
-    </div>
-
-</div>
Index: KernelRecordsMVC.Web/Views/Release/Details.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Release/Details.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Release/Details.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -1,147 +1,387 @@
 ﻿@model KernelRecordsMVC.Models.Release
 
-<div class="row">
-
-    <div class="col-md-5">
-
-        <img src="@Model.CoverPhoto"
-             class="img-fluid rounded"
-             alt="@Model.Title" />
+@{
+    ViewData["Title"] = Model.Title;
+
+    var isAlbum = Model.Album != null;
+    var isSingle = Model.SingleRelease != null;
+
+    var releaseType =
+        isAlbum ? "ALBUM" :
+        isSingle ? "SINGLE" :
+        "RELEASE";
+
+    var artists = string.Join(
+        ", ",
+        Model.ReleaseArtists
+            .OrderBy(x => x.ReleaseOrdinal)
+            .Select(x => x.Artist.ArtistName)
+    );
+}
+
+<div class="release-details-page">
+
+    <div class="release-hero">
+
+        <div class="release-hero-cover">
+
+            @if (!string.IsNullOrWhiteSpace(Model.CoverPhoto))
+            {
+                <img src="@Model.CoverPhoto"
+                     alt="@Model.Title" />
+            }
+            else
+            {
+                <div class="release-no-cover">
+                    <span>♪</span>
+                </div>
+            }
+
+        </div>
+
+
+        <div class="release-hero-info">
+
+            <span class="page-eyebrow">
+                @releaseType
+            </span>
+
+            <h1>
+                @Model.Title
+            </h1>
+
+            <p class="release-artists-main">
+                @artists
+            </p>
+
+
+            <div class="release-facts">
+
+                <div>
+
+                    <span>Genre</span>
+
+                    <strong>
+                        @Model.Genre
+                    </strong>
+
+                </div>
+
+                <div>
+
+                    <span>Released</span>
+
+                    <strong>
+                        @Model.ReleaseDate.ToString("MMM dd, yyyy")
+                    </strong>
+
+                </div>
+
+                <div>
+
+                    <span>Label</span>
+
+                    <strong>
+                        @Model.RecordLabel
+                    </strong>
+
+                </div>
+
+            </div>
+
+
+            <div class="artist-section">
+
+                <span class="section-label">
+                    ARTISTS
+                </span>
+
+                <div class="release-artists">
+
+                    @foreach (var artist in Model.ReleaseArtists
+                        .OrderBy(x => x.ReleaseOrdinal))
+                    {
+                        <span class="artist-tag">
+
+                            @artist.Artist.ArtistName
+
+                            @if (artist.Type.ToString() == "FEATURE")
+                            {
+                                <span class="artist-role">
+                                    Featured
+                                </span>
+                            }
+
+                        </span>
+                    }
+
+                </div>
+
+            </div>
+
+        </div>
 
     </div>
 
 
-    <div class="col-md-7">
-
-        <h1>@Model.Title</h1>
-
-        <p class="lead">
-            @Model.Genre
-        </p>
-
-        <p>
-            <strong>Record Label:</strong>
-            @Model.RecordLabel
-        </p>
-
-        <p>
-            <strong>Release Date:</strong>
-            @Model.ReleaseDate.ToString("MMMM dd, yyyy")
-        </p>
-
-
-        <h5>Artists</h5>
-
-        <p>
-
-            @string.Join(
-                ", ",
-                Model.ReleaseArtists
-                    .OrderBy(x => x.ReleaseOrdinal)
-                    .Select(x => x.Artist.ArtistName)
-            )
-
-        </p>
-
-    </div>
+    <!-- =====================================================
+         PRODUCTS
+         ===================================================== -->
+
+    <section class="release-section">
+
+        <div class="section-heading">
+
+            <div>
+
+                <span class="section-label">
+                    AVAILABLE FORMATS
+                </span>
+
+                <h2>
+                    Choose your format
+                </h2>
+
+            </div>
+
+            <span class="track-count">
+                @Model.Products.Count product(s)
+            </span>
+
+        </div>
+
+
+        @if (!Model.Products.Any())
+        {
+            <div class="no-products">
+                No physical products are currently available.
+            </div>
+        }
+        else
+        {
+            <div class="product-grid">
+
+                @foreach (var product in Model.Products
+                    .OrderBy(x => x.Format))
+                {
+                    <div class="store-product-card">
+
+                        <div class="product-card-top">
+
+                            <span class="product-format">
+                                @product.Format
+                            </span>
+
+                            @if (product.Stock > 0)
+                            {
+                                <span class="product-stock available">
+                                    In stock
+                                </span>
+                            }
+                            else
+                            {
+                                <span class="product-stock unavailable">
+                                    Out of stock
+                                </span>
+                            }
+
+                        </div>
+
+
+                        <div class="product-price">
+                            @product.Price.ToString("C")
+                        </div>
+
+
+                        <p class="product-description">
+                            @product.ProductDescription
+                        </p>
+
+
+                        @if (product.Stock > 0)
+                        {
+                            <div class="product-actions">
+
+                                <a asp-controller="Order"
+                                   asp-action="AddProduct"
+                                   asp-route-id="@product.ProductId"
+                                   class="store-button primary">
+
+                                    Add to Cart
+
+                                </a>
+
+                                <a asp-controller="Wishlist"
+                                   asp-action="Add"
+                                   asp-route-productId="@product.ProductId"
+                                   class="store-button secondary">
+
+                                    ♡ Wishlist
+
+                                </a>
+
+                            </div>
+                        }
+                        else
+                        {
+                            <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>
+
+                            </div>
+                        }
+
+                    </div>
+                }
+
+            </div>
+        }
+
+    </section>
+
+
+    <!-- =====================================================
+         ALBUM
+         ===================================================== -->
+
+    @if (Model.Album != null)
+    {
+        <section class="release-section">
+
+            <div class="section-heading">
+
+                <div>
+
+                    <span class="section-label">
+                        ALBUM
+                    </span>
+
+                    <h2>
+                        Track List
+                    </h2>
+
+                </div>
+
+                <span class="track-count">
+                    @Model.Album.AlbumSongs.Count tracks
+                </span>
+
+            </div>
+
+
+            <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>
+
+        </section>
+    }
+
+
+    <!-- =====================================================
+         SINGLE
+         ===================================================== -->
+
+    @if (Model.SingleRelease != null)
+    {
+        <section class="release-section">
+
+            <div class="section-heading">
+
+                <div>
+
+                    <span class="section-label">
+                        SINGLE
+                    </span>
+
+                    <h2>
+                        Single Information
+                    </h2>
+
+                </div>
+
+            </div>
+
+
+            <div class="single-info-card">
+
+                <div>
+
+                    <span class="section-label">
+                        RELEASE TYPE
+                    </span>
+
+                    <h2>
+                        Single
+                    </h2>
+
+                </div>
+
+                <div class="single-duration">
+
+                    <span>
+                        Duration
+                    </span>
+
+                    <strong>
+                        @Model.SingleRelease.Duration
+                    </strong>
+
+                </div>
+
+            </div>
+
+        </section>
+    }
 
 </div>
-
-
-<hr />
-
-
-<h2>Available Products</h2>
-
-<div class="row">
-
-@foreach (var product in Model.Products)
-{
-    <div class="col-md-4 mb-3">
-
-        <div class="card h-100">
-
-            <div class="card-body">
-
-                <h4>
-                    @product.Format
-                </h4>
-
-                <h5>
-                    $@product.Price
-                </h5>
-
-                <p>
-                    @product.ProductDescription
-                </p>
-
-
-                @if (product.Stock > 0)
-                {
-                    <p class="text-success">
-                        In stock: @product.Stock
-                    </p>
-
-                    <a asp-controller="Order"
-                       asp-action="AddProduct"
-                       asp-route-id="@product.ProductId"
-                       class="btn btn-success">
-
-                        Add to Cart
-
-                    </a>
-                }
-                else
-                {
-                    <p class="text-danger">
-                        Out of stock
-                    </p>
-                }
-
-            </div>
-
-        </div>
-
-    </div>
-}
-
-</div>
-
-
-@if (Model.Album != null)
-{
-    <hr />
-
-    <h2>Track List</h2>
-
-    <ol>
-
-    @foreach (var albumSong in Model.Album.AlbumSongs
-        .OrderBy(x => x.SongId))
-    {
-        <li>
-
-            @albumSong.Song.SongName
-
-            <span class="text-muted">
-                (@albumSong.Song.SongDuration)
-            </span>
-
-        </li>
-    }
-
-    </ol>
-}
-
-
-@if (Model.SingleRelease != null)
-{
-    <hr />
-
-    <h2>Single</h2>
-
-    <p>
-        Duration:
-        @Model.SingleRelease.Duration
-    </p>
-}
Index: KernelRecordsMVC.Web/Views/Release/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Release/Index.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Release/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -1,148 +1,344 @@
 ﻿@model IEnumerable<KernelRecordsMVC.Models.Release>
 
-<div class="d-flex justify-content-between align-items-center mb-4">
-
-    <div>
-        <h1>Music Store</h1>
-        <p class="text-muted">
-            Browse CDs, vinyl records and cassettes.
-        </p>
+@{
+    ViewData["Title"] = "Browse Releases";
+}
+
+<div class="releases-page">
+
+    <!-- =====================================================
+         HEADER
+         ===================================================== -->
+
+    <div class="releases-header">
+
+        <div>
+            <span class="page-eyebrow">KERNEL RECORDS</span>
+
+            <h1>Browse Releases</h1>
+
+            <p>
+                Explore vinyl, CDs and cassettes from our collection.
+            </p>
+        </div>
+
+        <div class="release-count">
+            @Model.Count() releases
+        </div>
+
     </div>
 
+
+    <!-- =====================================================
+         FILTERS
+         ===================================================== -->
+
+    <form asp-action="Index"
+          method="get"
+          class="release-filters">
+
+        <div class="filter-search">
+
+            <label>Search</label>
+
+            <input type="text"
+                   name="search"
+                   value="@ViewBag.Search"
+                   placeholder="Search by title or artist..." />
+
+        </div>
+
+
+        <div>
+
+            <label>Genre</label>
+
+            <select name="genre">
+
+                <option value="">All Genres</option>
+
+                @foreach (var item in ViewBag.Genres)
+                {
+                    <option value="@item"
+                            selected="@(ViewBag.Genre == item ? "selected" : null)">
+                        @item
+                    </option>
+                }
+
+            </select>
+
+        </div>
+
+
+        <div>
+
+            <label>Format</label>
+
+            <select name="format">
+
+                <option value="">All Formats</option>
+
+                @foreach (var item in ViewBag.Formats)
+                {
+                    <option value="@item"
+                            selected="@(ViewBag.Format == item ? "selected" : null)">
+                        @item
+                    </option>
+                }
+
+            </select>
+
+        </div>
+
+
+        <div>
+
+            <label>Type</label>
+
+            <select name="type">
+
+                <option value="">All Types</option>
+
+                <option value="Album"
+                        selected="@(ViewBag.Type == "Album" ? "selected" : null)">
+                    Album
+                </option>
+
+                <option value="Single"
+                        selected="@(ViewBag.Type == "Single" ? "selected" : null)">
+                    Single
+                </option>
+
+            </select>
+
+        </div>
+
+
+        <div>
+
+            <label>Sort</label>
+
+            <select name="sort">
+
+                <option value="">Title A–Z</option>
+
+                <option value="titleDesc"
+                        selected="@(ViewBag.Sort == "titleDesc" ? "selected" : null)">
+                    Title Z–A
+                </option>
+
+                <option value="newest"
+                        selected="@(ViewBag.Sort == "newest" ? "selected" : null)">
+                    Newest
+                </option>
+
+                <option value="oldest"
+                        selected="@(ViewBag.Sort == "oldest" ? "selected" : null)">
+                    Oldest
+                </option>
+
+                <option value="format"
+                        selected="@(ViewBag.Sort == "format" ? "selected" : null)">
+                    Format
+                </option>
+
+                <option value="priceAsc"
+                        selected="@(ViewBag.Sort == "priceAsc" ? "selected" : null)">
+                    Price: Low to High
+                </option>
+
+                <option value="priceDesc"
+                        selected="@(ViewBag.Sort == "priceDesc" ? "selected" : null)">
+                    Price: High to Low
+                </option>
+
+            </select>
+
+        </div>
+
+
+        <div class="filter-button">
+
+            <button type="submit"
+                    class="store-button primary">
+
+                Apply Filters
+
+            </button>
+
+        </div>
+
+
+        @if (!string.IsNullOrWhiteSpace(ViewBag.Search as string) ||
+             !string.IsNullOrWhiteSpace(ViewBag.Genre as string) ||
+             !string.IsNullOrWhiteSpace(ViewBag.Format as string) ||
+             !string.IsNullOrWhiteSpace(ViewBag.Type as string) ||
+             !string.IsNullOrWhiteSpace(ViewBag.Sort as string))
+        {
+            <div class="clear-filter">
+
+                <a asp-action="Index">
+                    Clear all filters
+                </a>
+
+            </div>
+        }
+
+    </form>
+
+
+    <!-- =====================================================
+         RELEASE GRID
+         ===================================================== -->
+
+    @if (!Model.Any())
+    {
+        <div class="empty-store">
+
+            <div class="empty-store-icon">
+                ♪
+            </div>
+
+            <h2>No releases found</h2>
+
+            <p>
+                Try changing your search or filters.
+            </p>
+
+            <a asp-action="Index"
+               class="store-button primary">
+                View All Releases
+            </a>
+
+        </div>
+    }
+    else
+    {
+        <div class="release-grid">
+
+            @foreach (var release in Model)
+            {
+                var isAlbum = release.Album != null;
+                var isSingle = release.SingleRelease != null;
+
+                var releaseType =
+                    isAlbum ? "ALBUM" :
+                    isSingle ? "SINGLE" :
+                    "RELEASE";
+
+                var artists = string.Join(
+                    ", ",
+                    release.ReleaseArtists
+                        .OrderBy(x => x.ReleaseOrdinal)
+                        .Select(x => x.Artist.ArtistName)
+                );
+
+                var lowestPrice = release.Products
+                    .Select(x => (decimal?)x.Price)
+                    .Min();
+
+                <article class="release-card">
+
+                    <a asp-action="Details"
+                       asp-route-id="@release.ReleaseId"
+                       class="release-card-cover">
+
+                        @if (!string.IsNullOrWhiteSpace(release.CoverPhoto))
+                        {
+                            <img src="@release.CoverPhoto"
+                                 alt="@release.Title" />
+                        }
+                        else
+                        {
+                            <div class="release-no-cover">
+                                <span>♪</span>
+                            </div>
+                        }
+
+                        <span class="release-type-badge">
+                            @releaseType
+                        </span>
+
+                    </a>
+
+
+                    <div class="release-card-body">
+
+                        <div class="release-card-meta">
+
+                            <span>
+                                @release.Genre
+                            </span>
+
+                            <span>
+                                @release.ReleaseDate.ToString("yyyy")
+                            </span>
+
+                        </div>
+
+
+                        <h2>
+
+                            <a asp-action="Details"
+                               asp-route-id="@release.ReleaseId">
+
+                                @release.Title
+
+                            </a>
+
+                        </h2>
+
+
+                        <p class="release-card-artist">
+
+                            @artists
+
+                        </p>
+
+
+                        <div class="format-list">
+
+                            @foreach (var product in release.Products
+                                .GroupBy(x => x.Format)
+                                .Select(x => x.First()))
+                            {
+                                <span class="format-pill">
+                                    @product.Format
+                                </span>
+                            }
+
+                        </div>
+
+
+                        <div class="release-card-bottom">
+
+                            <div class="release-starting">
+
+                                Starting at
+
+                                <strong>
+                                    @(lowestPrice?.ToString("C") ?? "N/A")
+                                </strong>
+
+                            </div>
+
+
+                            <a asp-action="Details"
+                               asp-route-id="@release.ReleaseId"
+                               class="store-button primary small">
+
+                                View
+
+                            </a>
+
+                        </div>
+
+                    </div>
+
+                </article>
+            }
+
+        </div>
+    }
+
 </div>
-
-
-<!-- SEARCH -->
-
-<form asp-action="Index"
-      method="get"
-      class="row g-2 mb-4">
-
-    <div class="col-md-6">
-
-        <input type="text"
-               name="search"
-               value="@ViewBag.Search"
-               class="form-control"
-               placeholder="Search releases..." />
-
-    </div>
-
-
-    <div class="col-md-3">
-
-        <select name="genre"
-                class="form-select">
-
-            <option value="">
-                All genres
-            </option>
-
-            @foreach (var genre in ViewBag.Genres)
-            {
-                <option value="@genre"
-                        selected="@(ViewBag.Genre == genre)">
-
-                    @genre
-
-                </option>
-            }
-
-        </select>
-
-    </div>
-
-
-    <div class="col-md-3">
-
-        <button type="submit"
-                class="btn btn-primary w-100">
-
-            Search
-
-        </button>
-
-    </div>
-
-</form>
-
-
-<!-- RELEASES -->
-
-<div class="row">
-
-@foreach (var release in Model)
-{
-    <div class="col-md-4 mb-4">
-
-        <div class="card h-100 shadow-sm">
-
-            @if (!string.IsNullOrEmpty(release.CoverPhoto))
-            {
-                <img src="@release.CoverPhoto"
-                     class="card-img-top"
-                     style="height:300px; object-fit:cover;"
-                     alt="@release.Title" />
-            }
-
-            <div class="card-body">
-
-                <h4 class="card-title">
-                    @release.Title
-                </h4>
-
-                <p class="text-muted mb-1">
-                    @release.Genre
-                </p>
-
-                <p class="small">
-                    @release.ReleaseDate.ToString("yyyy")
-                </p>
-
-
-                <!-- ARTISTS -->
-
-                <p>
-
-                    @string.Join(
-                        ", ",
-                        release.ReleaseArtists
-                            .OrderBy(x => x.ReleaseOrdinal)
-                            .Select(x => x.Artist.ArtistName)
-                    )
-
-                </p>
-
-
-                <!-- AVAILABLE FORMATS -->
-
-                <div class="mb-3">
-
-                    @foreach (var product in release.Products)
-                    {
-                        <span class="badge bg-secondary me-1">
-
-                            @product.Format
-
-                        </span>
-                    }
-
-                </div>
-
-
-                <a asp-action="Details"
-                   asp-route-id="@release.ReleaseId"
-                   class="btn btn-primary">
-
-                    View Release
-
-                </a>
-
-            </div>
-
-        </div>
-
-    </div>
-}
-
-</div>
Index: KernelRecordsMVC.Web/Views/Sale/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Sale/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Sale/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -0,0 +1,160 @@
+﻿@model IEnumerable<KernelRecordsMVC.Application.ViewModels.SaleItemViewModel>
+
+@{
+    ViewData["Title"] = "Sale";
+}
+
+<div class="sale-page">
+
+    <div class="sale-header">
+
+        <span class="page-eyebrow">
+            KERNEL RECORDS
+        </span>
+
+        <h1>Sale</h1>
+
+        <p>
+            Limited-time prices on selected physical releases.
+        </p>
+
+    </div>
+
+
+    @if (!Model.Any())
+    {
+        <div class="no-sales-data">
+
+            <div class="empty-store-icon">
+                %
+            </div>
+
+            <h2>No items are currently on sale</h2>
+
+            <p>
+                Check back soon for new discounts.
+            </p>
+
+        </div>
+    }
+    else
+    {
+        <div class="sale-grid">
+
+            @foreach (var item in Model)
+            {
+                <article class="sale-card">
+
+                    <a asp-controller="Release"
+                       asp-action="Details"
+                       asp-route-id="@item.ReleaseId"
+                       class="sale-card-cover">
+
+                        @if (!string.IsNullOrWhiteSpace(item.CoverPhoto))
+                        {
+                            <img src="@item.CoverPhoto"
+                                 alt="@item.ReleaseTitle" />
+                        }
+                        else
+                        {
+                            <div class="release-no-cover">
+                                <span>♪</span>
+                            </div>
+                        }
+
+                        <span class="sale-badge">
+                            -@item.DiscountPercentage%
+                        </span>
+
+                    </a>
+
+
+                    <div class="sale-card-body">
+
+                        <div class="release-card-meta">
+
+                            <span>
+                                @item.Format
+                            </span>
+
+                            @if (item.Stock > 0)
+                            {
+                                <span class="stock available">
+                                    In stock
+                                </span>
+                            }
+                            else
+                            {
+                                <span class="stock unavailable">
+                                    Out of stock
+                                </span>
+                            }
+
+                        </div>
+
+
+                        <h2>
+
+                            <a asp-controller="Release"
+                               asp-action="Details"
+                               asp-route-id="@item.ReleaseId">
+
+                                @item.ReleaseTitle
+
+                            </a>
+
+                        </h2>
+
+
+                        <p class="release-card-artist">
+                            @item.ArtistName
+                        </p>
+
+
+                        <div class="sale-price-row">
+
+                            <span class="sale-old-price">
+                                @item.OriginalPrice.ToString("C")
+                            </span>
+
+                            <strong class="sale-price">
+                                @item.SalePrice.ToString("C")
+                            </strong>
+
+                        </div>
+
+
+                        <div class="sale-actions">
+
+                            @if (item.Stock > 0)
+                            {
+                                <a asp-controller="Order"
+                                   asp-action="AddProduct"
+                                   asp-route-id="@item.ProductId"
+                                   class="store-button primary full">
+
+                                    Add to Cart
+
+                                </a>
+                            }
+
+                            <a asp-controller="Release"
+                               asp-action="Details"
+                               asp-route-id="@item.ReleaseId"
+                               class="store-button secondary full">
+
+                                View Release
+
+                            </a>
+
+                        </div>
+
+                    </div>
+
+                </article>
+            }
+
+        </div>
+    }
+
+</div>
Index: KernelRecordsMVC.Web/Views/Shared/_Layout.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Shared/_Layout.cshtml	(revision 08aefc6f3b51f4bfcb7471a2fd319c064171b1c5)
+++ KernelRecordsMVC.Web/Views/Shared/_Layout.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -1,49 +1,682 @@
-﻿<!DOCTYPE html>
+﻿@using Microsoft.AspNetCore.Http
+
+<!DOCTYPE html>
+
 <html lang="en">
 <head>
-    <meta charset="utf-8"/>
-    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
-    <title>@ViewData["Title"] - KernelRecordsMVC</title>
-    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css"/>
-    <link rel="stylesheet" href="~/css/site.css" asp-append-version="true"/>
-    <link rel="stylesheet" href="~/KernelRecordsMVC.styles.css" asp-append-version="true"/>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+
+
+<title>@ViewData["Title"] - Kernel Records</title>
+
+<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
+
+
 </head>
+
 <body>
-<header>
-    <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
-        <div class="container-fluid">
-            <a class="navbar-brand" asp-area="" asp-controller="Home" asp-action="Index">KernelRecordsMVC</a>
-            <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
-                    aria-expanded="false" aria-label="Toggle navigation">
-                <span class="navbar-toggler-icon"></span>
-            </button>
-            <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
-                <ul class="navbar-nav flex-grow-1">
-                    <li class="nav-item">
-                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
-                    </li>
-                    <li class="nav-item">
-                        <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
-                    </li>
-                </ul>
+
+<header class="site-header">
+
+
+<!-- =====================================================
+     MAIN NAVBAR
+     ===================================================== -->
+
+<nav class="navbar">
+
+    <div class="navbar-container">
+
+        <!-- LOGO -->
+
+        <a class="brand"
+           asp-controller="Home"
+           asp-action="Index">
+
+            <span class="brand-main">
+                KERNEL
+            </span>
+
+            <span class="brand-sub">
+                RECORDS
+            </span>
+
+        </a>
+
+
+        <!-- MOBILE MENU BUTTON -->
+
+        <button class="mobile-menu-button"
+                type="button"
+                aria-label="Toggle navigation"
+                onclick="toggleMobileMenu()">
+
+            ☰
+
+        </button>
+
+
+        <!-- NAVBAR CONTENT -->
+
+        <div class="navbar-content"
+             id="navbarContent">
+
+
+            <!-- =================================================
+                 MAIN NAVIGATION
+                 ================================================= -->
+
+            <ul class="nav-links">
+
+                <!-- Browse -->
+
+                <li>
+
+                    <a asp-controller="Release"
+                       asp-action="Index">
+
+                        Browse
+
+                    </a>
+
+                </li>
+
+
+                <!-- Top Sellers -->
+
+                <li>
+
+                    <a asp-controller="TopSellers"
+                       asp-action="Index">
+
+                        Top Sellers
+
+                    </a>
+
+                </li>
+
+
+                <!-- Artists -->
+
+                <li>
+
+                    <a asp-controller="Artist"
+                       asp-action="Index">
+
+                        Artists
+
+                    </a>
+
+                </li>
+
+
+                <!-- Genres -->
+
+                <li class="nav-dropdown">
+
+                    <a href="#"
+                       class="dropdown-toggle">
+
+                        Genres
+
+                        <span class="arrow">
+                            ⌄
+                        </span>
+
+                    </a>
+
+
+                    <div class="dropdown-menu">
+
+                        <a asp-controller="Release"
+                           asp-action="Index"
+                           asp-route-genre="Rock">
+
+                            Rock
+
+                        </a>
+
+                        <a asp-controller="Release"
+                           asp-action="Index"
+                           asp-route-genre="Pop">
+
+                            Pop
+
+                        </a>
+
+                        <a asp-controller="Release"
+                           asp-action="Index"
+                           asp-route-genre="Hip-Hop">
+
+                            Hip-Hop
+
+                        </a>
+
+                        <a asp-controller="Release"
+                           asp-action="Index"
+                           asp-route-genre="Jazz">
+
+                            Jazz
+
+                        </a>
+
+                        <a asp-controller="Release"
+                           asp-action="Index"
+                           asp-route-genre="Electronic">
+
+                            Electronic
+
+                        </a>
+
+                        <a asp-controller="Release"
+                           asp-action="Index">
+
+                            All Genres
+
+                        </a>
+
+                    </div>
+
+                </li>
+
+
+                <!-- Sale -->
+
+                <li>
+
+                    <a asp-controller="Sale"
+                       asp-action="Index"
+                       class="nav-sale">
+
+                        Sale
+
+                    </a>
+
+                </li>
+
+            </ul>
+
+
+            <!-- =================================================
+                 SEARCH
+                 ================================================= -->
+
+            <form class="navbar-search"
+                  asp-controller="Release"
+                  asp-action="Index"
+                  method="get">
+
+                <input type="text"
+                       name="search"
+                       placeholder="Search releases..."
+                       autocomplete="off" />
+
+                <button type="submit"
+                        aria-label="Search">
+
+                    <span>
+                        ⌕
+                    </span>
+
+                </button>
+
+            </form>
+
+
+            <!-- =================================================
+                 RIGHT SIDE ACTIONS
+                 ================================================= -->
+
+            <div class="navbar-actions">
+
+
+                <!-- =================================================
+                     WISHLIST
+                     ================================================= -->
+
+                <a class="nav-icon"
+                   asp-controller="Wishlist"
+                   asp-action="Index"
+                   title="Wishlist">
+
+                    <span class="icon">
+                        ♡
+                    </span>
+
+                    <span class="icon-label">
+                        Wishlist
+                    </span>
+
+                </a>
+
+
+                <!-- =================================================
+                     CART
+                     ================================================= -->
+
+                <a class="nav-icon"
+                   asp-controller="Order"
+                   asp-action="Cart"
+                   title="Shopping Cart">
+
+                    <span class="icon cart-icon">
+                        🛒
+                    </span>
+
+                    <span class="icon-label">
+                        Cart
+                    </span>
+
+                </a>
+
+
+                <!-- =================================================
+                     ACCOUNT
+                     ================================================= -->
+
+                @if (Context.Session.GetInt32("UserId") != null)
+                {
+
+                    <!-- LOGGED IN -->
+
+                    <div class="account-dropdown">
+
+
+                        <button class="account-button"
+                                type="button">
+
+                            <span class="user-icon">
+                                ●
+                            </span>
+
+                            <span class="account-name">
+
+                                @Context.Session.GetString("Username")
+
+                            </span>
+
+                            <span class="arrow">
+                                ⌄
+                            </span>
+
+                        </button>
+
+
+                        <!-- ACCOUNT MENU -->
+
+                        <div class="account-menu">
+
+
+                            <!-- PROFILE -->
+
+                            <a asp-controller="Account"
+                               asp-action="Profile">
+
+                                <span>
+                                    👤
+                                </span>
+
+                                My Profile
+
+                            </a>
+
+
+                            <!-- ORDERS -->
+
+                            <a asp-controller="Order"
+                               asp-action="Cart">
+
+                                <span>
+                                    📦
+                                </span>
+
+                                My Orders
+
+                            </a>
+
+
+                            <!-- WISHLIST -->
+
+                            <a asp-controller="Wishlist"
+                               asp-action="Index">
+
+                                <span>
+                                    ♡
+                                </span>
+
+                                My Wishlist
+
+                            </a>
+
+
+                            <!-- ADMIN -->
+
+                            @if (Context.Session.GetString("Role") == "Admin")
+                            {
+
+                                <div class="menu-divider"></div>
+
+
+                                <a asp-controller="Admin"
+                                   asp-action="Index"
+                                   class="admin-link">
+
+                                    <span>
+                                        ⚙
+                                    </span>
+
+                                    Admin Dashboard
+
+                                </a>
+
+                            }
+
+
+                            <div class="menu-divider"></div>
+
+
+                            <!-- LOGOUT -->
+
+                            <form asp-controller="Account"
+                                  asp-action="Logout"
+                                  method="post">
+
+                                @Html.AntiForgeryToken()
+
+                                <button type="submit"
+                                        class="logout-button">
+
+                                    <span>↪</span>
+
+                                    Logout
+
+                                </button>
+
+                            </form>
+
+
+                        </div>
+
+                    </div>
+
+                }
+                else
+                {
+
+                    <!-- =================================================
+                         NOT LOGGED IN
+                         ================================================= -->
+
+                    <div class="auth-buttons">
+
+
+                        <a asp-controller="Account"
+                           asp-action="Login"
+                           class="login-button">
+
+                            Login
+
+                        </a>
+
+
+                        <a asp-controller="Account"
+                           asp-action="Register"
+                           class="register-button">
+
+                            Register
+
+                        </a>
+
+
+                    </div>
+
+                }
+
             </div>
+
         </div>
-    </nav>
+
+    </div>
+
+</nav>
+
+
+<!-- =====================================================
+     ANNOUNCEMENT BAR
+     ===================================================== -->
+
+<div class="announcement-bar">
+
+    <span>
+        FREE SHIPPING ON ORDERS OVER €50
+    </span>
+
+    <span class="announcement-separator">
+        •
+    </span>
+
+    <span>
+        NEW VINYL EVERY WEEK
+    </span>
+
+</div>
+
+
 </header>
-<div class="container">
-    <main role="main" class="pb-3">
-        @RenderBody()
-    </main>
+
+<!-- =========================================================
+     MAIN CONTENT
+     ========================================================= -->
+
+<main class="main-content">
+
+
+@RenderBody()
+
+
+</main>
+
+<!-- =========================================================
+     FOOTER
+     ========================================================= -->
+
+<footer class="site-footer">
+
+
+<div class="footer-container">
+
+
+    <!-- BRAND -->
+
+    <div class="footer-brand">
+
+        <div class="footer-logo">
+            KERNEL RECORDS
+        </div>
+
+        <p>
+            Your destination for vinyl, CDs and cassettes.
+        </p>
+
+    </div>
+
+
+    <!-- SHOP -->
+
+    <div class="footer-column">
+
+        <h4>
+            Shop
+        </h4>
+
+
+        <a asp-controller="Release"
+           asp-action="Index">
+
+            Releases
+
+        </a>
+
+
+        <a asp-controller="Release"
+           asp-action="Index">
+
+            New Releases
+
+        </a>
+
+
+        <a asp-controller="Artist"
+           asp-action="Index">
+
+            Artists
+
+        </a>
+
+    </div>
+
+
+    <!-- ACCOUNT -->
+
+    <div class="footer-column">
+
+        <h4>
+            Account
+        </h4>
+
+
+        @if (Context.Session.GetInt32("UserId") != null)
+        {
+
+            <a asp-controller="Account"
+               asp-action="Profile">
+
+                My Profile
+
+            </a>
+
+
+            <a asp-controller="Order"
+               asp-action="Cart">
+
+                My Orders
+
+            </a>
+
+
+            <a asp-controller="Wishlist"
+               asp-action="Index">
+
+                Wishlist
+
+            </a>
+
+        }
+        else
+        {
+
+            <a asp-controller="Account"
+               asp-action="Login">
+
+                Login
+
+            </a>
+
+
+            <a asp-controller="Account"
+               asp-action="Register">
+
+                Register
+
+            </a>
+
+        }
+
+    </div>
+
+
+    <!-- HELP -->
+
+    <div class="footer-column">
+
+        <h4>
+            Help
+        </h4>
+
+        <a href="#">
+            Shipping
+        </a>
+
+        <a href="#">
+            Returns
+        </a>
+
+        <a href="#">
+            Contact
+        </a>
+
+    </div>
+
 </div>
 
-<footer class="border-top footer text-muted">
-    <div class="container">
-        &copy; 2026 - KernelRecordsMVC - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
-    </div>
+
+<!-- FOOTER BOTTOM -->
+
+<div class="footer-bottom">
+
+    <span>
+        © @DateTime.Now.Year Kernel Records
+    </span>
+
+    <span>
+        All rights reserved.
+    </span>
+
+</div>
+
+
 </footer>
-<script src="~/lib/jquery/dist/jquery.min.js"></script>
-<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
-<script src="~/js/site.js" asp-append-version="true"></script>
-@await RenderSectionAsync("Scripts", required: false)
+
+<!-- =========================================================
+     MOBILE NAVIGATION SCRIPT
+     ========================================================= -->
+
+<script>
+
+    function toggleMobileMenu()
+    {
+        const menu =
+            document.getElementById("navbarContent");
+
+        menu.classList.toggle("mobile-open");
+    }
+
+
+    // Close mobile menu when clicking outside
+
+    document.addEventListener("click", function (event)
+    {
+        const menu =
+            document.getElementById("navbarContent");
+
+        const button =
+            document.querySelector(".mobile-menu-button");
+
+
+        if (!menu.contains(event.target) &&
+            !button.contains(event.target))
+        {
+            menu.classList.remove("mobile-open");
+        }
+
+    });
+
+</script>
+
+@await RenderSectionAsync(
+"Scripts",
+required: false)
+
 </body>
 </html>
Index: KernelRecordsMVC.Web/Views/TopSellers/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/TopSellers/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/TopSellers/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -0,0 +1,143 @@
+﻿@model IEnumerable<KernelRecordsMVC.Application.ViewModels.TopSellerViewModel>
+
+@{
+    ViewData["Title"] = "Top Sellers";
+}
+
+<div class="top-sellers-page">
+
+    <div class="top-sellers-header">
+
+        <span class="page-eyebrow">
+            KERNEL RECORDS
+        </span>
+
+        <h1>Top Sellers</h1>
+
+        <p>
+            The records our customers are buying the most.
+        </p>
+
+    </div>
+
+
+    @if (!Model.Any())
+    {
+        <div class="no-sales-data">
+
+            <div class="empty-store-icon">
+                ♪
+            </div>
+
+            <h2>No sales yet</h2>
+
+            <p>
+                Top sellers will appear here once orders are completed.
+            </p>
+
+        </div>
+    }
+    else
+    {
+        <div class="release-grid">
+
+            @{
+                var position = 1;
+            }
+
+            @foreach (var item in Model)
+            {
+                <article class="release-card">
+
+                    <a asp-controller="Release"
+                       asp-action="Details"
+                       asp-route-id="@item.ReleaseId"
+                       class="release-card-cover">
+
+                        @if (!string.IsNullOrWhiteSpace(item.CoverPhoto))
+                        {
+                            <img src="@item.CoverPhoto"
+                                 alt="@item.ReleaseTitle" />
+                        }
+                        else
+                        {
+                            <div class="release-no-cover">
+                                <span>♪</span>
+                            </div>
+                        }
+
+                        <span class="release-type-badge">
+                            #@position
+                        </span>
+
+                    </a>
+
+
+                    <div class="release-card-body">
+
+                        <div class="release-card-meta">
+
+                            <span>
+                                @item.Format
+                            </span>
+
+                            <span>
+                                @item.SoldQuantity sold
+                            </span>
+
+                        </div>
+
+
+                        <h2>
+
+                            <a asp-controller="Release"
+                               asp-action="Details"
+                               asp-route-id="@item.ReleaseId">
+
+                                @item.ReleaseTitle
+
+                            </a>
+
+                        </h2>
+
+
+                        <p class="release-card-artist">
+                            @item.ArtistName
+                        </p>
+
+
+                        <div class="release-card-bottom">
+
+                            <div class="release-starting">
+
+                                Price
+
+                                <strong>
+                                    @item.Price.ToString("C")
+                                </strong>
+
+                            </div>
+
+
+                            <a asp-controller="Release"
+                               asp-action="Details"
+                               asp-route-id="@item.ReleaseId"
+                               class="store-button primary small">
+
+                                View
+
+                            </a>
+
+                        </div>
+
+                    </div>
+
+                </article>
+
+                position++;
+            }
+
+        </div>
+    }
+
+</div>
Index: KernelRecordsMVC.Web/Views/Wishlist/Index.cshtml
===================================================================
--- KernelRecordsMVC.Web/Views/Wishlist/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
+++ KernelRecordsMVC.Web/Views/Wishlist/Index.cshtml	(revision d2eccb3e3d4db7d262fc57179b8ce6f7fb060d63)
@@ -0,0 +1,167 @@
+﻿@model KernelRecordsMVC.Models.Wishlist
+
+@{
+    ViewData["Title"] = "My Wishlist";
+}
+
+<div class="wishlist-page">
+
+    <div class="page-header">
+        <div>
+            <span class="page-eyebrow">YOUR COLLECTION</span>
+            <h1>My Wishlist</h1>
+            <p>Save releases and physical formats you want to get later.</p>
+        </div>
+    </div>
+
+    @if (TempData["Success"] != null)
+    {
+        <div class="alert success">
+            @TempData["Success"]
+        </div>
+    }
+
+    @if (TempData["Info"] != null)
+    {
+        <div class="alert info">
+            @TempData["Info"]
+        </div>
+    }
+
+    @if (TempData["Error"] != null)
+    {
+        <div class="alert error">
+            @TempData["Error"]
+        </div>
+    }
+
+    @if (Model.WishlistProducts == null ||
+         !Model.WishlistProducts.Any())
+    {
+        <div class="empty-wishlist">
+
+            <div class="empty-icon">
+                ♡
+            </div>
+
+            <h2>Your wishlist is empty</h2>
+
+            <p>
+                Browse our releases and save products
+                you want to purchase later.
+            </p>
+
+            <a asp-controller="Release"
+               asp-action="Index"
+               class="btn-primary">
+                Browse Releases
+            </a>
+
+        </div>
+    }
+    else
+    {
+        <div class="wishlist-grid">
+
+            @foreach (var item in Model.WishlistProducts)
+            {
+                var product = item.Product;
+                var release = product.Release;
+
+                <div class="wishlist-card">
+
+                    <a asp-controller="Release"
+                       asp-action="Details"
+                       asp-route-id="@release.ReleaseId"
+                       class="wishlist-cover">
+
+                        <img src="@release.CoverPhoto"
+                             alt="@release.Title" />
+
+                    </a>
+
+                    <div class="wishlist-info">
+
+                        <span class="wishlist-format">
+                            @product.Format
+                        </span>
+
+                        <h2>
+                            <a asp-controller="Release"
+                               asp-action="Details"
+                               asp-route-id="@release.ReleaseId">
+                                @release.Title
+                            </a>
+                        </h2>
+
+                        <p class="wishlist-genre">
+                            @release.Genre
+                        </p>
+
+                        <div class="wishlist-price">
+                            @product.Price.ToString("C")
+                        </div>
+
+                        @if (product.Stock > 0)
+                        {
+                            <span class="stock available">
+                                In stock
+                            </span>
+                        }
+                        else
+                        {
+                            <span class="stock unavailable">
+                                Out of stock
+                            </span>
+                        }
+
+                        <div class="wishlist-actions">
+
+                            @if (product.Stock > 0)
+                            {
+                                <form asp-controller="Wishlist"
+                                      asp-action="AddToCart"
+                                      method="post">
+
+                                    @Html.AntiForgeryToken()
+
+                                    <input type="hidden"
+                                           name="productId"
+                                           value="@product.ProductId" />
+
+                                    <button type="submit"
+                                            class="btn-primary">
+                                        Add to Cart
+                                    </button>
+
+                                </form>
+                            }
+
+                            <form asp-controller="Wishlist"
+                                  asp-action="Remove"
+                                  method="post">
+
+                                @Html.AntiForgeryToken()
+
+                                <input type="hidden"
+                                       name="productId"
+                                       value="@product.ProductId" />
+
+                                <button type="submit"
+                                        class="btn-remove">
+                                    Remove
+                                </button>
+
+                            </form>
+
+                        </div>
+
+                    </div>
+
+                </div>
+            }
+
+        </div>
+    }
+
+</div>
