landscape footer rearrange: #id_bud_btn moves to top of right sidebar (upper-right corner of footer); ©2026 Dis Co. text becomes a single-line vertical strip at the very right edge of the viewport (mirror of portrait's "after the icons" position); bud-panel + bud-suggestions follow the bud-btn to the top w. transform-origin: right center

- _bud.scss #id_bud_btn landscape: left: auto + right: calc((var(--sidebar-w) - 3rem) / 2) + top: 0.5rem + bottom: auto. Centred horizontally in the right sidebar; tucked at the top.
  - _bud.scss #id_bud_panel landscape: top: 0.5rem; bottom: auto; transform-origin: right center. Slides leftward from the bud-btn along the top edge of the viewport (instead of bottom).
  - _bud.scss .bud-suggestions landscape: top: 4rem; bottom: auto; box-shadow flipped from upward to downward — autocomplete dropdown now opens BELOW the panel (since panel is at top).
  - _base.scss .footer-container landscape: writing-mode: vertical-rl + transform: rotate(180deg) for a bottom-to-top single-line read; right: 0.125rem (tight against the viewport edge); bottom: 0.5rem; line-height: 1; <br> { display: none } collapses the two-line "©2026 / Dis Co." into one line "©2026 Dis Co.". Tucks into the empty 0.875rem gutter between the viewport edge and the centred icon column — no overlap w. kit-btn / gear-btn at the bottom.
  - 21 bud FTs green (portrait position contract intact: bottom-left, the landscape move is orientation-scoped).

Code architected by Disco DeDisco <discodedisco@outlook.com>
Git commit message Co-Authored-By:
Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Disco DeDisco
2026-05-09 00:35:26 -04:00
parent 47871b5b4a
commit 72fefe2fc7
2 changed files with 37 additions and 16 deletions

View File

@@ -412,14 +412,24 @@ body {
} }
} }
// ©2026 Dis Co. — single-line vertical strip at the right edge of
// the right sidebar (= the very right edge of the viewport in
// landscape). Reads bottom-to-top via writing-mode: vertical-rl +
// rotate(180deg) — same pattern as the navbar's rotated brand
// wordmark. Tucks into the empty 0.875rem gutter between the
// viewport edge and the centred icon/btn column, no overlap.
.footer-container { .footer-container {
position: absolute; position: absolute;
top: 0.25rem; right: 0.125rem;
text-align: center; bottom: 0.5rem;
line-height: 0.75 !important; top: auto;
line-height: 1 !important;
color: rgba(var(--secUser), 1); color: rgba(var(--secUser), 1);
writing-mode: vertical-rl;
transform: rotate(180deg);
white-space: nowrap;
br { display: block; } br { display: none; }
small { small {
font-size: 0.75rem !important; font-size: 0.75rem !important;
@@ -447,7 +457,8 @@ body {
.footer-container { .footer-container {
line-height: 1; line-height: 1;
margin-top: 0.5rem; // margin-top vestige of the absolute-top-anchored layout —
// dropped now that the rotated text is bottom-anchored.
small { small {
font-size: 1rem; font-size: 1rem;

View File

@@ -12,14 +12,15 @@
bottom: 0.5rem; bottom: 0.5rem;
left: 0.5rem; left: 0.5rem;
// In landscape, centre the btn within the navbar sidebar — the sidebar // In landscape, the bud-btn moves to the UPPER-RIGHT corner of the
// is `var(--sidebar-w)` wide and the btn is 3rem, so left = (sidebar-w // footer sidebar (top of the right sidebar). Centred within the
// 3rem) / 2. The clamp on the root font-size means that calc resolves // var(--sidebar-w) column. Mirrors kit-btn / gear-btn (bottom-right)
// to a sane value across viewport sizes; no per-breakpoint override. // for the horizontal-centre formula, but anchors at top instead.
@media (orientation: landscape) { @media (orientation: landscape) {
left: calc((var(--sidebar-w) - 3rem) / 2); left: auto;
bottom: 0.5rem; right: calc((var(--sidebar-w) - 3rem) / 2);
top: auto; top: 0.5rem;
bottom: auto;
} }
z-index: 318; z-index: 318;
@@ -63,10 +64,15 @@
opacity: 0; opacity: 0;
@media (orientation: landscape) { @media (orientation: landscape) {
// Clear both fixed sidebars; --sidebar-w scales fluidly via the // Bud-btn lives at the top of the right sidebar in landscape, so
// root rem clamp, so this is the only landscape rule needed. // the panel slides out leftward from the right edge along the top.
// Clear both fixed sidebars; transform-origin flips to right so
// the closed state collapses into the bud-btn.
top: 0.5rem;
bottom: auto;
left: calc(var(--sidebar-w) + 0.5rem); left: calc(var(--sidebar-w) + 0.5rem);
right: calc(var(--sidebar-w) + 0.5rem); right: calc(var(--sidebar-w) + 0.5rem);
transform-origin: right center;
} }
#id_recipient { #id_recipient {
@@ -119,8 +125,8 @@ html:has(#id_kit_bag_dialog[open]) #id_bud_btn {
// ── Bud autocomplete suggestions (mirror of sky-place birth picker) ── // ── Bud autocomplete suggestions (mirror of sky-place birth picker) ──
// Sibling of #id_bud_panel (which has overflow:hidden for the scaleX // Sibling of #id_bud_panel (which has overflow:hidden for the scaleX
// slide animation, so the suggestions can't be a child or they'd clip). // slide animation, so the suggestions can't be a child or they'd clip).
// Position-fixed above the panel; same left/right inset as the panel // Position-fixed; portrait sits ABOVE the panel (panel at bottom),
// at each breakpoint so the dropdown lines up. // landscape sits BELOW the panel (panel at top of viewport).
.bud-suggestions { .bud-suggestions {
position: fixed; position: fixed;
bottom: 4rem; // panel bottom (0.5rem) + height (3rem) + gap (0.5rem) bottom: 4rem; // panel bottom (0.5rem) + height (3rem) + gap (0.5rem)
@@ -135,6 +141,10 @@ html:has(#id_kit_bag_dialog[open]) #id_bud_btn {
box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.4); box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.4);
@media (orientation: landscape) { @media (orientation: landscape) {
// Panel now at top in landscape, so suggestions drop downward.
top: 4rem;
bottom: auto;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4);
left: calc(var(--sidebar-w) + 0.5rem); left: calc(var(--sidebar-w) + 0.5rem);
right: calc(var(--sidebar-w) + 0.5rem); right: calc(var(--sidebar-w) + 0.5rem);
} }