Files
sow-nodebb-theme/scss/westgate/_widgets.scss
T
archvillainetteandClaude Fable 5 7add4bf2e6 Apply remaining audit fixes; document radii and code palette in DESIGN.md
- Token sweep: exact-value gold literals now use --wg-border /
  --wg-border-soft / --wg-focus
- Topbar: drop invalid role="menuitem" (no parent role="menu")
- topics_list: topic-select icons get role="checkbox", tabindex,
  aria-label; client.js makes them keyboard-operable and syncs
  aria-checked
- category.tpl: copy-handle link gets an accessible name, "View
  Original" moved to i18n, external-link icon aria-hidden, stretched
  link inside aria-hidden alert removed from tab order
- Footer: all copy moved to [[westgate:footer.*]] keys; year injected
  via filter:middleware.renderFooter instead of hard-coded 2026
- client.js: batch table measurements before writes (no interleaved
  reflow), .catch on the category class map so search results never
  hang, category selector match uses fw-bold class instead of inline
  style
- Forced-colors focus fallback: transparent outline alongside the
  box-shadow focus ring
- DESIGN.md: real radius scale (3/4/6/8px), code-block palette,
  motion & modes section, placeholder alpha

Verified against the sow-nodebb dev container: themed code blocks
render in posts, footer i18n + year, checkbox roles in served HTML.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 15:40:52 +02:00

269 lines
7.5 KiB
SCSS

[data-widget-area] {
color: var(--wg-text-soft);
}
[data-widget-area="header"],
[data-widget-area="footer"] {
display: grid;
gap: var(--wg-space-sm);
}
[data-widget-area="header"] {
margin-bottom: var(--wg-space-sm);
}
[data-widget-area="footer"] {
margin-top: 1rem;
}
[data-widget-area="sidebar"],
[data-widget-area="sidebar-footer"] {
display: grid;
align-content: start;
gap: var(--wg-space-sm);
}
[data-widget-area] > :where(
.card,
.alert,
.list-group,
.forum-stats,
.stats-card,
.stats,
.search-widget,
.category,
.well,
.jumbotron,
.panel,
.westgate-widget-card,
.wg-widget-card
) {
color: var(--wg-text-soft);
}
[data-widget-area] > :where(
.forum-stats,
.search-widget,
.category,
.well,
.jumbotron,
.panel,
.westgate-widget-card,
.wg-widget-card
) {
padding: var(--wg-space-md);
background:
linear-gradient(to bottom, transparent calc(100% - 1px), rgba(194, 163, 90, 0.045) calc(100% - 1px)),
var(--wg-velvet-panel) !important;
background-size: 100% var(--wg-ledger-line), auto;
border: 1px solid var(--wg-border);
border-radius: 8px;
box-shadow: var(--wg-velvet-shadow);
}
[data-widget-area] .card,
[data-widget-area] .card.card-header,
[data-widget-area] .card.text-bg-light,
[data-widget-area] .card-header.text-bg-light,
[data-widget-area] .well,
[data-widget-area] .jumbotron,
[data-widget-area] .panel,
[data-widget-area] .westgate-widget-card,
[data-widget-area] .wg-widget-card {
background:
linear-gradient(to bottom, rgba(255, 241, 196, 0.024), rgba(8, 7, 10, 0.08)),
var(--wg-velvet-panel) !important;
border: 1px solid rgba(194, 163, 90, 0.15) !important;
border-radius: 8px !important;
box-shadow: var(--wg-velvet-shadow) !important;
color: var(--wg-text-soft) !important;
}
[data-widget-area] .card-header {
background:
linear-gradient(to right, var(--wg-border-soft), rgba(42, 18, 34, 0.2), transparent),
rgba(8, 7, 10, 0.24) !important;
border-color: rgba(194, 163, 90, 0.13) !important;
color: var(--wg-ledger-ink) !important;
font-family: var(--wg-font-display);
font-weight: 600;
letter-spacing: 0;
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.74);
}
[data-widget-area] .card-body {
background: transparent !important;
color: var(--wg-text-soft);
}
[data-widget-area] .card-header + .card-body {
border-top: 1px solid var(--wg-border-soft);
}
[data-widget-area] .alert {
background:
linear-gradient(to right, rgba(194, 163, 90, 0.055), transparent 5rem),
var(--wg-velvet-panel) !important;
border: 1px solid rgba(194, 163, 90, 0.2) !important;
border-left-width: 2px !important;
border-radius: 8px;
box-shadow:
inset 0 1px 0 rgba(255, 244, 221, 0.035),
0 8px 20px rgba(0, 0, 0, 0.22);
color: var(--wg-text-soft) !important;
}
[data-widget-area] .alert-success {
background:
linear-gradient(to right, rgba(120, 147, 101, 0.09), transparent 5rem),
var(--wg-velvet-panel) !important;
border-color: rgba(120, 147, 101, 0.26) !important;
border-left-color: rgba(120, 147, 101, 0.54) !important;
color: #c4d2b4 !important;
}
[data-widget-area] .alert-info {
background:
linear-gradient(to right, rgba(194, 163, 90, 0.07), transparent 5rem),
var(--wg-velvet-panel) !important;
border-color: rgba(194, 163, 90, 0.2) !important;
border-left-color: rgba(194, 163, 90, 0.5) !important;
color: var(--wg-text-soft) !important;
}
[data-widget-area] .alert-warning {
background:
linear-gradient(to right, rgba(194, 163, 90, 0.12), transparent 5rem),
var(--wg-velvet-panel) !important;
border-color: var(--wg-focus) !important;
border-left-color: rgba(194, 163, 90, 0.62) !important;
color: #e0cea2 !important;
}
[data-widget-area] .alert-danger {
background:
linear-gradient(to right, rgba(142, 52, 56, 0.12), transparent 5rem),
var(--wg-velvet-panel) !important;
border-color: rgba(142, 52, 56, 0.32) !important;
border-left-color: rgba(142, 52, 56, 0.62) !important;
color: #d8b1b1 !important;
}
[data-widget-area] :where(h1, h2, h3, h4, h5, h6) {
color: var(--wg-text);
font-family: var(--wg-font-display);
font-weight: 600;
letter-spacing: 0;
}
[data-widget-area] :where(p, ul, ol) {
margin-bottom: 0.65rem;
}
[data-widget-area] :where(p, li, small, .text-sm) {
color: var(--wg-text-soft);
}
[data-widget-area] :where(a:not(.btn):not(.nav-link):not(.dropdown-item)) {
color: var(--wg-ledger-ink);
text-decoration: none;
}
[data-widget-area] :where(a:not(.btn):not(.nav-link):not(.dropdown-item)):hover,
[data-widget-area] :where(a:not(.btn):not(.nav-link):not(.dropdown-item)):focus {
color: #e0c878;
text-decoration: underline;
}
[data-widget-area] .list-group {
background: transparent !important;
border: 1px solid rgba(194, 163, 90, 0.12);
border-radius: 8px;
overflow: hidden;
}
[data-widget-area] .list-group-item {
background: rgba(255, 255, 255, 0.014) !important;
border-color: var(--wg-border-soft) !important;
color: var(--wg-text-soft) !important;
}
[data-widget-area] .badge {
background:
linear-gradient(to bottom, rgba(255, 241, 196, 0.035), rgba(8, 7, 10, 0.2)) !important;
border: 1px solid rgba(194, 163, 90, 0.18) !important;
color: var(--wg-ledger-ink-muted) !important;
font-family: var(--wg-font-ui);
}
[data-widget-area] :where(.forum-stats, .stats-card, .stats) {
color: var(--wg-text-soft);
font-family: var(--wg-font-ui);
}
[data-widget-area] :where(.forum-stats, .stats-card) > .d-flex,
[data-widget-area] :where(.stats-card, .stats) :where(.card, .card-header) {
background: rgba(255, 255, 255, 0.018) !important;
border: 1px solid rgba(194, 163, 90, 0.09) !important;
border-radius: 3px !important;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.02) !important;
}
[data-widget-area] :where(.forum-stats, .stats-card, .stats) :where(.fs-5, .ff-secondary, strong, .fw-semibold) {
color: var(--wg-text) !important;
}
[data-widget-area] :where(.btn, .form-control, .form-select) {
font-family: var(--wg-font-ui);
}
[data-widget-area="footer"] > :where(footer, .footer),
[data-widget-area="sidebar-footer"] > :where(footer, .footer) {
padding: 0;
background: transparent !important;
border: 0 !important;
box-shadow: none !important;
}
[data-widget-area="footer"] > .row:has(> a.btn[href*="/user/"]) {
--bs-gutter-x: 0.45rem;
--bs-gutter-y: 0.45rem;
width: 100%;
margin: 0 0 var(--wg-space-sm);
padding: 0.6rem;
background:
linear-gradient(to bottom, rgba(255, 241, 196, 0.018), rgba(8, 7, 10, 0.08)),
var(--wg-velvet-panel) !important;
border: 1px solid var(--wg-border);
border-radius: 8px;
box-shadow: var(--wg-velvet-shadow);
}
[data-widget-area] :where(.row, .card-body):has(> a.btn[href*="/user/"]) > a.btn {
background: transparent !important;
background-image: none !important;
border: 0 !important;
box-shadow: none !important;
color: var(--wg-text-soft) !important;
min-width: 0;
}
[data-widget-area] :where(.row, .card-body):has(> a.btn[href*="/user/"]) > a.btn:hover,
[data-widget-area] :where(.row, .card-body):has(> a.btn[href*="/user/"]) > a.btn:focus {
background: rgba(194, 163, 90, 0.06) !important;
background-image: none !important;
color: var(--wg-text) !important;
text-decoration: none;
}
[data-widget-area="sidebar"] .card,
[data-widget-area="sidebar"] .alert,
[data-widget-area="sidebar"] > :where(.forum-stats, .search-widget, .category, .well, .jumbotron, .panel, .westgate-widget-card, .wg-widget-card),
[data-widget-area="sidebar-footer"] .card,
[data-widget-area="sidebar-footer"] .alert,
[data-widget-area="sidebar-footer"] > :where(.forum-stats, .search-widget, .category, .well, .jumbotron, .panel, .westgate-widget-card, .wg-widget-card) {
box-shadow:
inset 0 1px 0 rgba(255, 255, 255, 0.024),
0 8px 18px rgba(0, 0, 0, 0.18) !important;
}