Project / Series
@Model.Project.ProjectName
@@ -42,46 +18,38 @@
@Model.Project.Description
}
-
+
+
@if (TempData["ProjectExportMessage"] is string projectExportMessage)
{
@projectExportMessage
diff --git a/PlotLine/Views/Shared/_Layout.cshtml b/PlotLine/Views/Shared/_Layout.cshtml
index a21980e..3478b52 100644
--- a/PlotLine/Views/Shared/_Layout.cshtml
+++ b/PlotLine/Views/Shared/_Layout.cshtml
@@ -48,9 +48,6 @@
Writer Workspace
-
- Relationship Map
-
Help
diff --git a/PlotLine/Views/Shared/_ProjectSectionNav.cshtml b/PlotLine/Views/Shared/_ProjectSectionNav.cshtml
new file mode 100644
index 0000000..45d59a0
--- /dev/null
+++ b/PlotLine/Views/Shared/_ProjectSectionNav.cshtml
@@ -0,0 +1,27 @@
+@model Project
+@{
+ var activeSection = ViewData["ProjectSection"] as string ?? "Overview";
+ var projectId = Model.ProjectID;
+
+ string ActiveClass(string section) =>
+ string.Equals(activeSection, section, StringComparison.OrdinalIgnoreCase) ? "active" : string.Empty;
+}
+
+
diff --git a/PlotLine/wwwroot/css/plotline-theme.css b/PlotLine/wwwroot/css/plotline-theme.css
index 3edb1d8..4924109 100644
--- a/PlotLine/wwwroot/css/plotline-theme.css
+++ b/PlotLine/wwwroot/css/plotline-theme.css
@@ -288,6 +288,153 @@ a:hover {
color: var(--plotline-accent-dark);
}
+.pw-page-heading {
+ align-items: center;
+ gap: clamp(0.85rem, 2vw, 1.35rem);
+ margin-bottom: 1rem;
+}
+
+.pw-page-heading > div:first-child {
+ min-width: min(100%, 26rem);
+}
+
+.pw-page-heading .lead-text {
+ max-width: 52rem;
+}
+
+.pw-project-nav {
+ display: grid;
+ gap: 0.55rem;
+ margin: 0 0 1.1rem;
+ border: 1px solid var(--plotline-border-soft);
+ border-radius: var(--plotline-radius);
+ padding: 0.7rem 0.75rem;
+ background:
+ linear-gradient(135deg, rgba(255, 253, 248, 0.9), rgba(242, 226, 207, 0.55)),
+ var(--plotline-surface);
+ box-shadow: var(--plotline-shadow-subtle);
+}
+
+.pw-project-nav__label {
+ color: var(--plotline-accent);
+ font-size: 0.68rem;
+ font-weight: 850;
+ letter-spacing: 0.1em;
+ line-height: 1;
+ text-transform: uppercase;
+}
+
+.pw-project-nav__links,
+.pw-character-nav {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.42rem;
+ align-items: center;
+}
+
+.pw-project-nav__link,
+.pw-character-nav__link {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ min-height: 2rem;
+ border: 1px solid rgba(84, 68, 48, 0.16);
+ border-radius: 999px;
+ padding: 0.32rem 0.68rem;
+ color: var(--plotline-accent-dark);
+ background: rgba(255, 250, 241, 0.82);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.72);
+ font-size: 0.8rem;
+ font-weight: 780;
+ line-height: 1.1;
+ text-decoration: none;
+ transition: background-color 0.16s ease, border-color 0.16s ease, color 0.16s ease, box-shadow 0.16s ease;
+}
+
+.pw-project-nav__link:hover,
+.pw-project-nav__link:focus,
+.pw-character-nav__link:hover,
+.pw-character-nav__link:focus {
+ color: var(--plotline-accent-dark);
+ border-color: rgba(122, 77, 44, 0.32);
+ background: rgba(122, 77, 44, 0.11);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.62), 0 5px 12px rgba(62, 45, 28, 0.06);
+}
+
+.pw-project-nav__link.active,
+.pw-character-nav__link.active {
+ color: #fff8ec;
+ border-color: var(--plotline-accent);
+ background: linear-gradient(180deg, var(--plotline-accent), var(--plotline-accent-dark));
+ box-shadow: 0 6px 14px rgba(62, 45, 28, 0.16);
+}
+
+.pw-character-nav {
+ margin: 0 0 1rem;
+ border-bottom: 1px solid rgba(84, 68, 48, 0.11);
+ padding-bottom: 0.65rem;
+}
+
+.pw-actions {
+ flex: 0 0 auto;
+}
+
+.pw-actions__toggle {
+ --bs-btn-color: var(--plotline-accent-dark);
+ --bs-btn-bg: rgba(255, 250, 241, 0.86);
+ --bs-btn-border-color: rgba(122, 77, 44, 0.32);
+ --bs-btn-hover-color: #fff8ec;
+ --bs-btn-hover-bg: var(--plotline-accent);
+ --bs-btn-hover-border-color: var(--plotline-accent);
+ --bs-btn-active-color: #fff8ec;
+ --bs-btn-active-bg: var(--plotline-accent-dark);
+ --bs-btn-active-border-color: var(--plotline-accent-dark);
+ min-height: 2.35rem;
+ padding-inline: 1rem;
+ box-shadow: var(--plotline-shadow-subtle);
+}
+
+.pw-actions .dropdown-menu {
+ --bs-dropdown-bg: var(--plotline-surface-elevated);
+ --bs-dropdown-color: var(--plotline-text);
+ --bs-dropdown-border-color: var(--plotline-border-soft);
+ --bs-dropdown-link-color: var(--plotline-text);
+ --bs-dropdown-link-hover-color: var(--plotline-accent-dark);
+ --bs-dropdown-link-hover-bg: rgba(122, 77, 44, 0.1);
+ --bs-dropdown-divider-bg: rgba(84, 68, 48, 0.13);
+ border-radius: var(--plotline-radius-sm);
+ box-shadow: var(--plotline-shadow-card);
+}
+
+.pw-actions .dropdown-item {
+ font-weight: 650;
+}
+
+.pw-actions .dropdown-item.text-danger {
+ color: var(--plotline-danger) !important;
+}
+
+.pw-actions .dropdown-item.text-danger:hover,
+.pw-actions .dropdown-item.text-danger:focus {
+ color: #fff8ec !important;
+ background: var(--plotline-danger);
+}
+
+@media (max-width: 767.98px) {
+ .pw-page-heading {
+ align-items: stretch;
+ }
+
+ .pw-page-heading .pw-actions,
+ .pw-page-heading .pw-actions__toggle {
+ width: 100%;
+ }
+
+ .pw-project-nav {
+ padding: 0.65rem;
+ }
+}
+
.timeline-workspace {
background:
linear-gradient(180deg, rgba(255, 251, 244, 0.84), rgba(237, 226, 211, 0.66)),
@@ -1343,6 +1490,75 @@ a:focus-visible {
border-color: #ffd5a6;
}
+[data-theme="dark"] .pw-project-nav {
+ color: var(--app-text);
+ border-color: rgba(241, 195, 143, 0.18);
+ background:
+ linear-gradient(135deg, rgba(42, 35, 30, 0.96), rgba(58, 42, 32, 0.58)),
+ var(--app-surface);
+ box-shadow: var(--plotline-shadow-subtle);
+}
+
+[data-theme="dark"] .pw-project-nav__label {
+ color: #dfc6aa;
+}
+
+[data-theme="dark"] .pw-character-nav {
+ border-bottom-color: rgba(241, 195, 143, 0.16);
+}
+
+[data-theme="dark"] .pw-project-nav__link,
+[data-theme="dark"] .pw-character-nav__link {
+ color: #f1dcc4;
+ border-color: rgba(241, 195, 143, 0.26);
+ background: rgba(241, 195, 143, 0.1);
+ box-shadow: none;
+}
+
+[data-theme="dark"] .pw-project-nav__link:hover,
+[data-theme="dark"] .pw-project-nav__link:focus,
+[data-theme="dark"] .pw-character-nav__link:hover,
+[data-theme="dark"] .pw-character-nav__link:focus {
+ color: #21160f;
+ border-color: #ffd5a6;
+ background: #f1c38f;
+ box-shadow: 0 6px 14px rgba(0, 0, 0, 0.24);
+}
+
+[data-theme="dark"] .pw-project-nav__link.active,
+[data-theme="dark"] .pw-character-nav__link.active {
+ color: #21160f;
+ border-color: #ffd5a6;
+ background: linear-gradient(180deg, #f1c38f, var(--plotline-accent));
+ box-shadow: 0 8px 18px rgba(0, 0, 0, 0.28);
+}
+
+[data-theme="dark"] .pw-actions__toggle {
+ --bs-btn-color: #f1dcc4;
+ --bs-btn-bg: rgba(241, 195, 143, 0.1);
+ --bs-btn-border-color: rgba(241, 195, 143, 0.3);
+ --bs-btn-hover-color: #21160f;
+ --bs-btn-hover-bg: #f1c38f;
+ --bs-btn-hover-border-color: #ffd5a6;
+ --bs-btn-active-color: #21160f;
+ --bs-btn-active-bg: var(--plotline-accent-dark);
+ --bs-btn-active-border-color: #ffd5a6;
+}
+
+[data-theme="dark"] .pw-actions .dropdown-menu {
+ --bs-dropdown-color: var(--app-text);
+ --bs-dropdown-bg: var(--app-surface-alt);
+ --bs-dropdown-border-color: rgba(241, 195, 143, 0.22);
+ --bs-dropdown-link-color: var(--app-text);
+ --bs-dropdown-link-hover-color: #21160f;
+ --bs-dropdown-link-hover-bg: #f1c38f;
+ --bs-dropdown-divider-bg: rgba(241, 195, 143, 0.18);
+}
+
+[data-theme="dark"] .pw-actions .dropdown-item.text-danger {
+ color: #ffb2aa !important;
+}
+
[data-theme="dark"] .timeline-filter,
[data-theme="dark"] .workspace-heading .button-row,
[data-theme="dark"] .timeline-control-panel {