fix: Lumière layout/navbar on settings+404, drop proxy_request_buffering
Build and Deploy Verso / deploy (push) Successful in 14m28s

- Move min-height:100vh from body to html:has(body[data-lumiere]) so the
  gradient fills the viewport on short pages without inflating document
  height or pushing the footer below the fold
- Remove min-height:60vh from .error-container (was causing scrollbar on
  404 when combined with thin footer)
- Replace Bootstrap 3 navbar selectors (.navbar-nav > li > a) with CSS
  custom property overrides (--navbar-link-color, --navbar-link-hover-*,
  --navbar-bg, etc.) consumed by navbar.scss — fixes header button colours
- Remove position:relative from .navbar-default override; base CSS already
  has position:absolute which provides the stacking context for ::before
- Drop proxy_request_buffering off from upload location: buffered mode +
  global client_body_timeout 15m (nginx.conf.template) is more compatible
  with multer's multipart stream handling on slow connections

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
claude
2026-06-13 20:38:00 +00:00
parent 211ca9c46d
commit 8f372d13f8
3 changed files with 25 additions and 13 deletions
+3 -3
View File
@@ -9,8 +9,9 @@ server {
internal;
}
# File upload endpoints: stream directly to Node.js with generous timeouts
# for large files on slow / unreliable connections.
# File upload endpoints: extended timeouts for large files on slow connections.
# client_body_timeout 15m is set globally in nginx.conf.template; repeated
# here explicitly and client_max_body_size raised to 550m for this path.
location ~ ^/project/[^/]+/upload$ {
proxy_pass http://127.0.0.1:4000;
proxy_http_version 1.1;
@@ -21,7 +22,6 @@ server {
proxy_send_timeout 15m;
client_body_timeout 15m;
client_max_body_size 550m;
proxy_request_buffering off;
}
location / {
@@ -3,7 +3,6 @@
// earlier in all.scss, so they are available here.
[data-lumiere='true'] {
.error-container {
min-height: 60vh;
justify-content: center;
}
@@ -989,18 +989,35 @@ $lum-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' wi
}
// ── Global Lumière rules (apply to every page when data-lumiere is set) ────
// These cover pages that don't carry .project-list-lumiere (404, welcome).
// These cover pages that don't carry .project-list-lumiere (404, settings).
// min-height on html (not body) so the gradient fills the viewport without
// adding artificial height that would push the footer below the fold.
html:has(body[data-lumiere='true']) {
min-height: 100vh;
}
[data-lumiere='true'] {
background: linear-gradient(160deg, #f0faf8 0%, #e4f4f1 50%, #daeef5 100%);
min-height: 100vh;
// Shared white navbar with teal accent stripe (marketing pages + welcome)
// Navbar: white background with teal accent stripe.
// Override CSS custom properties used by navbar.scss — no hard-coded
// class selectors needed, and position:absolute from base CSS is kept.
.navbar-default {
background-color: #ffffff !important;
--navbar-bg: #ffffff;
--navbar-link-color: #{$lum-text-sub};
--navbar-link-hover-color: #{$lum-teal};
--navbar-link-hover-bg: rgba(42, 157, 143, 0.08);
--navbar-link-border-color: transparent;
--navbar-link-hover-border-color: rgba(42, 157, 143, 0.2);
--navbar-subdued-color: #{$lum-text};
--navbar-subdued-hover-color: #{$lum-teal};
--navbar-subdued-hover-bg: rgba(42, 157, 143, 0.08);
--navbar-title-color: #{$lum-text};
--navbar-title-color-hover: #{$lum-teal};
border-bottom: none !important;
box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06), 0 2px 8px rgba(0, 0, 0, 0.04);
position: relative;
&::before {
content: '';
@@ -1011,9 +1028,5 @@ $lum-noise: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' wi
height: 3px;
background: linear-gradient(90deg, $lum-teal 0%, $lum-blue 100%);
}
.navbar-brand { color: $lum-text !important; }
.navbar-nav > li > a { color: $lum-text-sub !important; }
.navbar-nav > li > a:hover { color: $lum-teal !important; }
}
}