diff --git a/DebugProbe.AspNetCore.Tests/Rendering/HtmlRendererTests.cs b/DebugProbe.AspNetCore.Tests/Rendering/HtmlRendererTests.cs
index f343bd5..b2456e4 100644
--- a/DebugProbe.AspNetCore.Tests/Rendering/HtmlRendererTests.cs
+++ b/DebugProbe.AspNetCore.Tests/Rendering/HtmlRendererTests.cs
@@ -46,16 +46,16 @@ public void Details_page_renders_captured_values()
}
[Fact]
- public void Payload_badges_render_for_json_empty_text_and_hidden_payloads()
+ public void Payload_groups_render_for_json_empty_text_and_hidden_payloads()
{
var jsonHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "{\"ok\":true}", "plain");
var emptyHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "", "");
var hiddenHtml = HtmlRenderer.RenderDetailsPage(CreateEntry(), CreateEnvironment(), "[Body too large]", "[Body too large]");
- Assert.Contains("payload-json", jsonHtml);
- Assert.Contains("payload-text", jsonHtml);
- Assert.Contains("payload-empty", emptyHtml);
- Assert.Contains("payload-hidden", hiddenHtml);
+ Assert.Contains("Request", jsonHtml);
+ Assert.Contains("Response", jsonHtml);
+
+ Assert.Contains("[Body too large]", hiddenHtml);
}
[Fact]
diff --git a/DebugProbe.AspNetCore/Assets/css/debugprobe.css b/DebugProbe.AspNetCore/Assets/css/debugprobe.css
index 32bdda5..e411cfe 100644
--- a/DebugProbe.AspNetCore/Assets/css/debugprobe.css
+++ b/DebugProbe.AspNetCore/Assets/css/debugprobe.css
@@ -28,6 +28,10 @@ h3 {
margin-bottom: 10px;
}
+h4 {
+ margin: 0;
+}
+
/* =========================
Layout
========================= */
@@ -159,18 +163,98 @@ tr:hover {
Section Titles
========================= */
+.payload-group {
+ margin-top: 24px;
+ padding: 18px;
+ background: #fff;
+ border: 1px solid #e8e8e8;
+ border-left-width: 5px;
+ border-radius: 8px;
+}
+
+.request-group {
+ border-left-color: #2f80ed;
+}
+
+.response-group {
+ border-left-color: #27ae60;
+}
+
+.response-group.response-error {
+ border-left-color: #e74c3c;
+}
+
+.compare-group {
+ border-left-color: #f39c12;
+}
+
+.compare-description {
+ margin-top: 4px;
+ color: #777;
+ font-size: 0.9rem;
+}
+
+.payload-group-title {
+ margin-bottom: 16px;
+ padding-bottom: 12px;
+ border-bottom: 1px solid #f0f0f0;
+}
+
+.payload-group-title h3 {
+ margin: 0;
+}
+
.section-title {
display: flex;
align-items: center;
gap: 10px;
- margin-top: 25px;
- margin-bottom: 10px;
+ margin-top: 18px;
+ margin-bottom: 8px;
+}
+
+.payload-group-title + .section-title {
+ margin-top: 0;
}
-.section-title h3 {
+.section-title h3,
+.section-title h4 {
margin: 0;
}
+.section-title h4 {
+ color: #555;
+ font-size: 13px;
+ font-weight: 700;
+ letter-spacing: 0;
+}
+
+.compare-controls {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 8px;
+ padding-bottom: 14px;
+}
+
+.compare-controls input {
+ min-width: 220px;
+ flex: 1;
+}
+
+@media (max-width: 640px) {
+ .container {
+ padding: 14px;
+ }
+
+ .payload-group {
+ padding: 14px;
+ }
+
+ .compare-controls input,
+ .compare-controls button {
+ width: 100%;
+ }
+}
+
/* =========================
Code Blocks
========================= */
@@ -239,8 +323,7 @@ pre {
}
.code-badge,
-.status,
-.diff-badge {
+.status {
display: inline-flex;
align-items: center;
justify-content: center;
@@ -253,40 +336,6 @@ pre {
font-size: 12px;
}
-.payload-json {
- background: #183d24;
- color: #6ddf8b;
-}
-
-.payload-invalid-json {
- background: #4a1717;
- color: #ff8a8a;
-}
-
-.payload-text {
- background: #4a3112;
- color: #ffb84d;
-}
-
-.payload-url {
- background: #1d3557;
- color: #7cc7ff;
-}
-
-.payload-empty {
- background: #444;
- color: #ddd;
-}
-
-.payload-hidden {
- display: none;
-}
-
-.diff-badge {
- background: #4a1717;
- color: #ff8a8a;
-}
-
/* =========================
Diff
========================= */
diff --git a/DebugProbe.AspNetCore/Assets/html/_shared/layout.html b/DebugProbe.AspNetCore/Assets/html/_shared/layout.html
index 51d2a1f..362b9cf 100644
--- a/DebugProbe.AspNetCore/Assets/html/_shared/layout.html
+++ b/DebugProbe.AspNetCore/Assets/html/_shared/layout.html
@@ -10,10 +10,9 @@
{{env_block}}
-
{{content}}
-