Side B fixes a real layout bug (view counter overlapping login controls) by moving markup into the nav and removing fixed positioning, a small but correct and necessary functional fix. Side A is purely cosmetic CSS polish across two themes (padding, borders, focus outlines) that adds visual detail but no functional correctness or bug resolution, making it lower-value churn by comparison.
constitution · epochs · watch · epoch 3
c_6864b1ca8ce6 (tommy-mor) vs c_0957178bd303 (tommy-mor)
download prompt · raw event · cmp_610ae9a784576b
council reasoning
B fixes a real layout bug by moving the view counter into the shared top-nav markup and dropping fixed positioning that overlapped auth links—a small structural HTML/CSS change with clear lasting UX value. A is a large purely presentational CSS pass (padding, borders, focus rings, vote-compare chrome across two themes) that improves polish but adds no behavior or bugfix.
Side B fixes a concrete UI/layout problem by moving the view counter into the existing top navigation and removing its fixed positioning, preventing it from overlapping the login/account controls. Side A is a broad visual restyling of voting and ontology UI with some accessibility improvements (focus-visible outlines), but it is primarily presentation rather than a functional correction.
sides
A — c_6864b1ca8ce6 (tommy-mor)
message
[51e73d38] voting looks better?
diff preview
diff --git a/server/static/theme_default.css b/server/static/theme_default.css
index 5f60ff7a8cf9045d8d43228baad8ba80ad057f2a..ec0fbe7acee0aa2802f978f14a9b0fc86e78c5b8 100644
--- a/server/static/theme_default.css
+++ b/server/static/theme_default.css
@@ -844,18 +844,25 @@ a.ont-vote-compare-btn {
color: var(--ui);
cursor: pointer;
font-size: 11px;
- padding: 2px 8px;
+ padding: 3px 10px;
text-decoration: none;
display: inline-flex;
align-items: center;
gap: 4px;
font-family: inherit;
+ border-radius: 2px;
}
button.ont-pin-btn:hover,
a.ont-vote-compare-btn:hover { color: var(--signal); }
+button.ont-pin-btn:focus-visible,
+a.ont-vote-compare-btn:focus-visible {
+ outline: 2px solid var(--link);
+ outline-offset: 2px;
+}
button.ont-pin-btn-active {
border-color: var(--link);
color: var(--signal);
+ background: color-mix(in srgb, var(--link) 12%, var(--g4));
}
.ont-garden-child-actions {
display: inline-flex;
@@ -868,12 +875,33 @@ a.ont-garden-vote-ico,
span.ont-garden-pinned-here {
font-size: 13px;
line-height: 1;
- padding: 0 2px;
- border: none;
- background: transparent;
+ padding: 2px 6px;
+ min-width: 26px;
+ min-height: 26px;
+ box-sizing: border-box;
+ border: var(--bv) solid;
+ border-color: var(--hi) var(--lo) var(--lo) var(--hi);
+ border-radius: 2px;
+ background: var(--g3);
cursor: pointer;
text-decoration: none;
color: inherit;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+}
+a.ont-garden-vote-ico:hover {
+ color: var(--signal);
+ background: var(--g4);
+}
+span.ont-garden-pinned-here {
+ border-color: var(--link);
+ color: var(--signal);
+ cursor: default;
+}
+button.ont-garden-pin-ico:focus-visible {
+ outline: 2px solid var(--link);
+ outline-offset: 2px;
}
body.view-ontology-light ol.ont-ranking-list li,
body.view-ontology-light ul.ont-group-list li {
@@ -889,8 +917,19 @@ body.view-ontology-light ul.ont-group-list li .item-link {
/* Vote compare page */
.vote-compare-shell {
- margin: 12px 0;
+ margin: 12px 0 20px;
max-width: 720px;
+ padding: 14px 16px 18px;
+ background: var(--g2);
+ border: var(--bv-lg) solid;
+ border-color: var(--hi) var(--lo) var(--lo) var(--hi);
+}
+body.view-vote-compare .vote-compare-shell > h2 {
+ margin-top: 0;
+ font-size: 12px;
+ letter-spacing: 0.12em;
+ text-transform: uppercase;
+ color: var(--meta);
}
.vote-compare-pair {
display: flex;
@@ -899,12 +938,20 @@ body.view-ontology-light ul.ont-group-list li .item-link {
gap: 10px 16px;
margin: 10px 0;
}
+.vote-compare-item {
+ text-decoration: none;
+}
.vote-compare-item code {
font-size: 13px;
}
+.vote-compare-item:hover code {
+ color: var(--signal);
+}
.vote-compare-vs {
color: var(--meta);
- font-size: 12px;
+ font-size: 11px;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
}
.vote-compare-slider-label {
display: flex;
@@ -917,7 +964,7 @@ body.view-ontology-light ul.ont-group-list li .item-link {
#vote-preference-slider {
flex: 1 1 180px;
min-width: 120px;
- accent-color: var(--ui);
+ accent-color: var(--link);
}
.vote-thread-picker {
margin: 10px 0;
@@ -931,9 +978,17 @@ body.view-ontology-light ul.ont-group-list li .item-link {
}
#vote-thread-select {
min-width: 160px;
+ background: var(--g3);
+ border: var(--bv) solid;
+ border-color: var(--hi) var(--lo) var(--lo) var(--hi);
+ color: var(--ui);
+ font-size: 12px;
+ padding: 3px 8px;
}
#vote-edge-history-region {
margin: 14px 0 18px;
+ padding-bottom: 8px;
+ border-bottom: 1px dashed var(--lo);
}
.vote-compare-preview-wrap {
margin: 12px 0;
@@ -946,8 +1001,37 @@ body.view-ontology-light ul.ont-group-list li .item-link {
#vote-compare-preview {
min-height: 48px;
}
+.vote-explain-label {
+ display: block;
+ font-size: 12px;
+ color: var(--meta);
+ margin: 12px 0 4px;
+}
+body.view-vote-compare #vote-explain {
+ width: 100%;
+ max-width: 100%;
+ box-sizing: border-box;
+ background: var(--g3);
+ border: var(--bv) solid;
+ border-color: var(--hi) var(--lo) var(--lo) var(--hi);
+ color: var(--prose);
+ font: inherit;
+ line-height: 1.45;
+ padding: 8px 10px;
+}
+body.view-vote-compare #vote-explain:focus {
+ outline: none;
+ border-color: var(--link);
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--link) 22%, transparent);
+}
+body.view-vote-compare #vote-compare-form button[type="submit"] {
+ margin-top: 6px;
+}
.vote-edge-history-title {
- font-size: 13px;
+ font-size: 12px;
+ letter-spacing: 0.06em;
+ text-transform: uppercase;
+ color: var(--meta);
margin: 16px 0 8px;
}
ol.vote-edge-history {
@@ -968,6 +1052,8 @@ li.vote-edge-history-row {
.vote-edge-bar {
margin-top: 4px;
max-width: 100%;
+ border-radius: 2px;
+ overflow: hidden;
}
.vote-edge-reason {
margin-top: 4px;
diff --git a/server/static/theme_retro_craft.css b/server/static/theme_retro_craft.css
index 3853e9edaf4c77c62dcf350ff28920448dd943a8..092d4b3540b052cc86870179e4c264541c4446cc 100644
--- a/server/static/theme_retro_craft.css
+++ b/server/static/theme_retro_craft.css
@@ -587,3 +587,337 @@ body.view-ontology #controls {
padding-right: 1.25rem;
}
}
+
+/* ----------------------------------------------------------------
+ Ontology garden: pin HUD, row pins, vote-compare
+ (Global craft `code` + `button[type=submit]` are tuned for dark
+ thread pages; these overrides match the cream ontology shell.)
+ ---------------------------------------------------------------- */
+body.view-ontology #slug-pin-hud.slug-pin-hud {
+ margin-left: auto;
+ max-width: min(42vw, 280px);
+ font-family: var(--font-ui);
+ font-size: 0.72rem;
+ color: #5c574e;
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+body.view-ontology .slug-pin-hud-link {
+ color: #1a4a8c;
+ text-decoration: none;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.25rem;
+}
+body.view-ontology .slug-pin-hud-link:hover {
+ color: #0d3d82;
+ text-decoration: underline;
+}
+body.view-ontology .slug-pin-hud-glyph {
+ font-size: 0.95rem;
+ line-height: 1;
+}
+
+body.view-ontology .ont-item-meta {
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 0.35rem;
+}
+body.view-ontology .ont-item-title {
+ flex: 1 1 auto;
+ min-width: 0;
+}
+body.view-ontology .ont-item-pin-zone {
+ flex: 0 0 auto;
+ margin-left: auto;
+ display: flex;
+ align-items: center;
+ gap: 0.4rem;
+}
+
+body.view-ontology button.ont-pin-btn,
+body.view-ontology a.ont-vote-compare-btn {
+ background: #ebe6dc;
+ border: 1px solid #c8c4bc;
+ border-radius: 2px;
+ color: #3d3a34;
+ cursor: pointer;
+ font-family: var(--font-ui);
+ font-size: 0.72rem;
+ letter-spacing: 0.04em;
+ padding: 0.25rem 0.55rem;
+ text-decoration: none;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.3rem;
+}
+body.view-ontology button.ont-pin-btn:hover,
+body.view-ontology a.ont-vote-compare-btn:hover {
+ border-color: #a68e6b;
+ color: #1a1814;
+}
+body.view-ontology button.ont-pin-btn-active {
+ border-color: #1a4a8c;
+ background: color-mix(in srgb, #1a4a8c 12%, #ebe6dc);
+ color: #0d2d5c;
+}
+body.view-ontology button.ont-pin-btn:focus-visible,
+body.view-ontology a.ont-vote-compare-btn:focus-visible {
+ outline: 2px solid #1a4a8c;
+ outline-offset: 2px;
+}
+
+body.view-ontology .ont-garden-child-actions {
+ display: inline-flex;
+ align-items: center;
+ margin-right: 0.35rem;
+ vertical-align: middle;
+ gap: 0.1rem;
+}
+body.view-ontology button.ont-garden-pin-ico,
+body.view-ontology a.ont-garden-vote-ico,
+body.view-ontology span.ont-garden-pinned-here {
+ font-size: 0.95rem;
+ line-height: 1;
+ padding: 0.1rem 0.35rem;
+ min-width: 1.65rem;
+ min-height: 1.65rem;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ border: 1px solid #c8c4bc;
+ border-radius: 2px;
+ background: #f7f3eb;
+ cursor: pointer;
+ text-decoration: none;
+ color: #1a1814;
+}
+body.view-ontology a.ont-garden-vote-ico:hover {
+ border-color: #a68e6b;
+ background: #ebe6dc;
+}
+body.view-ontology span.ont-garden-pinned-here {
+ border-color: #1a4a8c;
+ background: color-mix(in srgb, #1a4a8c 10%, #f7f3eb);
+ cursor: default;
+}
+body.view-ontology form.ont-garden-pin-form {
+ display: inline;
+ margin: 0;
+ padding: 0;
+}
+body.view-ontology button.ont-garden-pin-ico:focus-visible {
+ outline: 2px solid #1a4a8c;
+ outline-offset: 2px;
+}
+
+body.view-ontology ol.ont-ranking-list li,
+body.view-ontology ul.ont-group-list li {
+ display: flex;
+ align-items: baseline;
+ gap: 0.35rem;
+}
+body.view-ontology ol.ont-ranking-list li .item-link,
+body.view-ontology ul.ont-group-list li .item-link {
+ flex: 1;
+ min-width: 0;
+}
+
+body.view-ontology code,
+body.view-ontology .vote-compare-item code,
+body.view-ontology .vote-edge-meta code {
+ background: #ebe6dc;
+ color: #1a1814;
+ border: 1px solid #d4cfc4;
+ padding: 0.12em 0.35em;
+ font-size: 0.88em;
+}
+
+body.view-ontology div.ratio-bar {
+ background: #e3ded4;
+ border: 1px solid #c8c4bc;
+}
+body.view-ontology div.ratio-left,
+body.view-ontology div.ratio-right {
+ background: #cec9bf;
+}
+body.view-ontology div.ratio-left.current,
+body.view-ontology div.ratio-right.current {
+ background: #9a7b4a;
+}
+
+body.view-ontology.view-vote-compare .vote-compare-shell {
+ margin: 0.75rem 0 1.5rem;
+ max-width: 36rem;
+ padding: 0.85rem 1rem 1.1rem;
+ background: #f7f3eb;
+ border: 1px solid #c8c4bc;
+ border-radius: 3px;
+ box-shadow: 0 1px 0 rgba(26, 24, 20, 0.06);
+}
+body.view-ontology.view-vote-compare .vote-compare-shell > h2 {
+ margin-top: 0;
+ font-size: 0.7rem;
+ letter-spacing: 0.16em;
+ text-transform: uppercase;
+ color: #5c574e;
+}
+body.view-ontology .vote-compare-pair {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 0.65rem 1rem;
+ margin: 0.65rem 0 0.85rem;
+}
+body.view-ontology .vote-compare-vs {
+ color: #8a857a;
+ font-family: var(--font-ui);
+ font-size: 0.72rem;
+ letter-spacing: 0.1em;
+ text-transform: uppercase;
+}
+body.view-ontology .vote-compare-item {
+ text-decoration: none;
+}
+body.view-ontology .vote-compare-item:hover code {
+ border-color: #a68e6b;
+ background: #f0ebe3;
+}
+
+body.view-ontology .vote-thread-picker {
+ margin: 0.85rem 0;
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 0.5rem 0.75rem;
+}
+body.view-ontology .vote-thread-picker-label {
+ font-family: var(--font-ui);
+ font-size: 0.72rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ color: #5c574e;
+}
+body.view-ontology #vote-thread-select {
+ min-width: 10rem;
+ background: #f7f3eb;
+ border: 1px solid #c8c4bc;
+ color: #1a1814;
+ font-family: var(--font-ui);
+ font-size: 0.78rem;
+ padding: 0.3rem 0.45rem;
+}
+
+body.view-ontology .vote-compare-slider-label {
+ display: flex;
+ flex-wrap: wrap;
+ align-items: center;
+ gap: 0.5rem 0.65rem;
+ margin: 0.85rem 0;
+ font-family: var(--font-ui);
+ font-size: 0.72rem;
+ color: #5c574e;
+}
+body.view-ontology #vote-preference-slider {
+ flex: 1 1 11rem;
+ min-width: 8rem;
+ accent-color: #9a7b4a;
+}
+
+body.view-ontology .vote-explain-label {
+ display: block;
+ font-family: var(--font-ui);
+ font-size: 0.72rem;
+ letter-spacing: 0.08em;
+ text-transform: uppercase;
+ color: #5c574e;
+ margin: 0.65rem 0 0.35rem;
+}
+body.view-ontology #vote-compare-form textarea,
+body.view-ontology.view-vote-compare textarea#vote-explain {
+ background: #fdfcfa;
+ border: 1px solid #c8c4bc;
+ color: #1a1814;
+ font-family: var(--font-prose);
+ font-size: 0.9rem;
+ line-height: 1.45;
+ width: 100%;
+ max-width: 100%;
+ padding: 0.55rem 0.65rem;
+ margin-top: 0.25rem;
+}
+body.view-ontology #vote-compare-form textarea:focus {
+ border-color: #a68e6b;
+ outline: none;
+ box-shadow: 0 0 0 2px color-mix(in srgb, #a68e6b 28%, transparent);
+}
+
+body.view-ontology #vote-compare-form button[type="s
… preview truncated; 1,584 characters omittedB — c_0957178bd303 (tommy-mor)
message
[31b0a8c3] Put view count and auth links in the same top nav. Stops the fixed view counter from overlapping the login controls. Co-authored-by: Cursor <cursoragent@cursor.com>
diff preview
diff --git a/server/src/html/mod.rs b/server/src/html/mod.rs
index 5b9b73c7ad24499737f0576b3603c3ff5355251e..71db33abf6c1e869a48c9c331c2b74cf0fdcb576 100644
--- a/server/src/html/mod.rs
+++ b/server/src/html/mod.rs
@@ -143,10 +143,10 @@ pub(crate) fn layout(title: &str, body: Markup, views: u64, nav_user: Option<&st
script src="https://unpkg.com/idiomorph@0.3.0/dist/idiomorph.min.js" {}
}
body class="home" {
- @if views > 0 {
- span class="view-meta muted" { (views) " views" }
- }
nav class="top-nav" {
+ @if views > 0 {
+ span class="view-meta muted" { (views) " views" }
+ }
@if let Some(name) = nav_user {
span class="top-nav-user" data-testid="nav-user" { (name) }
a href="/login" data-testid="nav-account" { "account" }
diff --git a/server/static/sorter.css b/server/static/sorter.css
index e7aca23b426d504938b90b5a25ad06b07843ba02..6ab384de6bd04eb77f56a5dff57c0c901e1bf24c 100644
--- a/server/static/sorter.css
+++ b/server/static/sorter.css
@@ -28,10 +28,8 @@ body {
}
.view-meta {
- position: fixed;
- top: 0.1rem;
- right: 0.5rem;
font-size: 0.75rem;
+ margin-right: auto;
}
.top-nav {
Hardlinks — judgments / attempts / prompt
judgments
attempts
Prompt text is loaded only by the download route.