fix: binary asset serving + checkout centering
Dev — Build & local smoke test / build-smoke (pull_request) Successful in 1m34s
Dev — Build & local smoke test / build-smoke (pull_request) Successful in 1m34s
el_runtime: http_response() JSON-encoded the body via jb_emit_escaped(), which stops at the first null byte. PNG/binary files contain null bytes at byte 8 (IHDR chunk length), so only 8 bytes were served — browsers received a corrupt/truncated image and showed broken icons. Fix: when _tl_fs_read_len > 0 (binary fs_read), copy raw bytes into a thread-local side-channel (_tl_binary_body/_tl_binary_size) and write the sentinel "__el_binary__" into the envelope body field. http_send_response() detects the sentinel and substitutes the real bytes for sending. checkout.el: .checkout-shell, .checkout-summary, and .checkout-form-wrap had no CSS, leaving the page left-aligned and single-column. Added grid layout (2-col desktop, 1-col mobile), max-width centering, and sticky order summary.
This commit is contained in:
+25
-1
@@ -345,7 +345,31 @@ fn checkout_page(plan: String, pub_key: String) -> String {
|
||||
}
|
||||
|
||||
fn checkout_style_html() -> String {
|
||||
let css: String = ".checkout-plan-name {
|
||||
let css: String = ".checkout-shell {
|
||||
max-width: 980px;
|
||||
margin: 0 auto;
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 4rem;
|
||||
align-items: start;
|
||||
}
|
||||
.checkout-summary {
|
||||
position: sticky;
|
||||
top: 2rem;
|
||||
}
|
||||
.checkout-form-wrap {
|
||||
min-width: 0;
|
||||
}
|
||||
@media (max-width: 860px) {
|
||||
.checkout-shell {
|
||||
grid-template-columns: 1fr;
|
||||
gap: 2.5rem;
|
||||
}
|
||||
.checkout-summary {
|
||||
position: static;
|
||||
}
|
||||
}
|
||||
.checkout-plan-name {
|
||||
font-family: var(--head);
|
||||
font-size: clamp(1.5rem, 3vw, 2rem);
|
||||
font-weight: 600;
|
||||
|
||||
Reference in New Issue
Block a user