Files
python-tdd/src/static_src/scss/_billboard.scss

193 lines
5.2 KiB
SCSS
Raw Normal View History

// ── Shared aperture fill for both billboard pages ──────────────────────────
%billboard-page-base {
flex: 1;
min-width: 0;
min-height: 0;
overflow-y: auto;
position: relative;
}
html:has(body.page-billboard),
html:has(body.page-billscroll) {
overflow: hidden;
}
body.page-billboard,
body.page-billscroll {
overflow: hidden;
.container {
overflow: hidden;
display: flex;
flex-direction: column;
flex: 1;
min-height: 0;
}
.row {
flex-shrink: 0;
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-billboard-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;
.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;
}
}
}
}
}
}
// ── Billboard applet placement ─────────────────────────────────────────────
// Left column (4-wide): My Scrolls → Contacts → Recognition stacked.
// Right column (8-wide): Most Recent spans full height.
// Portrait override (container query) restores stacked full-width layout.
#id_billboard_applets_container {
#id_applet_billboard_my_scrolls { grid-column: 1 / span 4; grid-row: 1 / span 3; }
#id_applet_billboard_my_contacts { grid-column: 1 / span 4; grid-row: 4 / span 3; }
#id_applet_billboard_recognition { grid-column: 1 / span 4; grid-row: 7 / span 4; }
#id_applet_billboard_most_recent { grid-column: 5 / span 8; grid-row: 1 / span 10; }
@container (max-width: 550px) {
#id_applet_billboard_my_scrolls,
#id_applet_billboard_my_contacts,
#id_applet_billboard_recognition,
#id_applet_billboard_most_recent {
grid-column: 1 / span 12;
grid-row: span var(--applet-rows, 3);
}
}
}
// ── Recognition applet — vertical title ───────────────────────────────────
#id_applet_billboard_recognition {
h2 {
writing-mode: vertical-rl;
transform: rotate(180deg);
margin: 0;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
}
// ── Most Recent applet — scrollable drama feed ─────────────────────────────
#id_applet_billboard_most_recent {
display: flex;
flex-direction: column;
.most-recent-room-link {
flex-shrink: 0;
margin-bottom: 0.25rem;
font-weight: bold;
}
#id_drama_scroll {
flex: 1;
min-height: 0;
overflow-y: auto;
}
.most-recent-load-more {
display: block;
padding-bottom: 0.5rem;
font-size: 0.8rem;
text-align: center;
}
}
// ── Drama event entries: 90 / 10 column split ─────────────────────────────
.drama-event {
display: flex;
align-items: baseline;
.drama-event-body {
flex: 0 0 80%;
&.struck {
text-decoration: line-through;
opacity: 0.5;
}
}
.drama-event-time {
flex: 0 0 20%;
font-size: 0.75rem;
opacity: 0.5;
text-align: right;
}
}
// ── My Scrolls list ────────────────────────────────────────────────────────
#id_applet_billboard_my_scrolls {
.scroll-list {
list-style: none;
padding: 0;
margin: 0;
overflow-y: auto;
li {
padding: 0.25rem 0;
border-bottom: 1px solid rgba(var(--priUser), 0.15);
&:last-child { border-bottom: none; }
a { text-decoration: none; }
}
}
}