// ── My Posts applet ──────────────────────────────────────────────────────── #id_applet_my_posts { display: flex; flex-direction: column; .my-posts-container { flex: 1; min-height: 0; overflow-y: auto; -webkit-overflow-scrolling: touch; scrollbar-width: none; &::-webkit-scrollbar { display: none; } mask-origin: padding-box; mask-clip: padding-box; mask-image: linear-gradient( to bottom, transparent 0%, black 5%, black 85%, transparent 100% ); } } // ── Shared aperture fill for both billboard pages ────────────────────────── // // Aperture foundation (html/body/.container overflow + flex-column + // .row flex-shrink: 0) now lives universally in _base.scss. Only the // page-specific `.row { margin-bottom: -1rem }` pull (tightening the // h2 row against subsequent applet content) stays here, since wallet // + sky pages deliberately don't carry that pull. %billboard-page-base { flex: 1; min-width: 0; min-height: 0; overflow-y: auto; position: relative; } body.page-billboard, body.page-billscroll, body.page-billpost, body.page-billbuds, body.page-billposts { .row { margin-bottom: -1rem; } } // ── Billboard page (three-applet grid) ───────────────────────────────────── .billboard-page { @extend %billboard-page-base; } // ── Billscroll page (single full-aperture applet) ────────────────────────── .billscroll-page { @extend %billboard-page-base; display: flex; flex-direction: column; padding: 0.75rem; // The single scroll applet stretches to fill the remaining aperture .applet-scroll { @extend %applet-box; flex: 1; min-height: 0; display: flex; flex-direction: column; #id_drama_scroll { flex: 1; min-height: 0; overflow-y: auto; padding-right: 0.75rem; .scroll-buffer { display: flex; justify-content: center; align-items: baseline; padding: 2rem 0 1rem; opacity: 0.4; font-size: 0.8rem; text-transform: uppercase; .scroll-buffer-text { letter-spacing: 0.33em; } .scroll-buffer-dots { display: inline-flex; letter-spacing: 0; span { display: inline-block; width: 0.7em; text-align: center; } } } } } } // ── Dashpost page (bottom-anchored thread + composer) ───────────────────── // Mirrors billscroll's flex-column / overflow-y / scroll-buffer pattern, // with the composer pinned at the bottom (flex-shrink: 0) so the thread // breathes against the viewport bottom and the input stays in reach. .post-page { @extend %billboard-page-base; display: flex; flex-direction: column; padding: 0.75rem; gap: 0.5rem; // Username + title attribution spans — line author column, self/shared // header lines, server-rendered grant prose. --quaUser palette key // unifies them across the page; placed at .post-page scope so it // applies in BOTH .post-header and #id_post_table descendants. .post-attribution { color: rgba(var(--quaUser), 1); } .post-header { flex-shrink: 0; .post-title { margin: 0 0 0.25rem; font-weight: bold; } .post-shared-recipients, .post-shared-self { margin: 0; font-size: 0.85rem; opacity: 0.75; } } #id_post_table { list-style: none; margin: 0; padding: 0 0.75rem 0 0; flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; // Bottom-anchor: scroll buffer above the lines pushes them down // until they fill from the bottom; once content exceeds the // aperture, normal scrolling kicks in. justify-content: flex-end; .post-line { display: grid; grid-template-columns: minmax(4rem, auto) 1fr minmax(3rem, auto); align-items: baseline; gap: 0.5rem; padding: 0.25rem 0; .post-line-author { font-weight: bold; color: rgba(var(--quaUser), 1); white-space: nowrap; font-size: 0.85rem; } .post-line-text { min-width: 0; overflow-wrap: anywhere; } .post-line-time { font-size: 0.75rem; opacity: 0.5; text-align: right; white-space: nowrap; } // System-authored Lines (adman) get a subtler typographic key // — the inline `` carries the emphasis. &.post-line--system .post-line-text { font-style: italic; opacity: 0.85; } } .post-line-buffer { flex-shrink: 0; height: 0.25rem; } } .post-line-form { flex-shrink: 0; margin: 0; padding-top: 0.25rem; input.form-control { width: 100%; // Admin-Post readonly input — no response is invited, so the // focus halo softens to --secUser (cooler than the regular // --terUser glow used on user-Post composers). &[readonly]:focus { border-color: rgba(var(--secUser), 0.6); box-shadow: 0 0 0.75rem rgba(var(--secUser), 0.4); } } } } // ── Applet-list page (Billbuds, Billposts) ─────────────────────────────── // Shared shell for pages built around _applet-list-shell.html — vertical // title rotated on the left of an .applet-scroll card + scrollable