pre-img swap

This commit is contained in:
Matt Batchelder
2026-03-23 21:09:27 -04:00
parent 87474b05a9
commit bbe8c1860c
395 changed files with 29643 additions and 712 deletions

View File

@@ -26,7 +26,16 @@
--color-text-inverse: #ffffff;
--color-on-primary: #ffffff;
--ots-sidebar-content-gap: 12px;
/* ── Dashboard stat tile tokens ── */
--stat-tile-bg: var(--color-surface);
--stat-tile-border: var(--color-border);
--stat-tile-number-color: var(--color-text-primary);
--stat-tile-label-color: var(--color-text-tertiary);
--stat-tile-icon-color: var(--color-primary);
--stat-tile-hover-border: rgba(var(--ots-primary-rgb, 59, 130, 246), 0.4);
--stat-tile-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
color-scheme: dark;
}
@@ -4218,13 +4227,49 @@ textarea:focus {
============================================================================= */
#help-pane {
background: var(--ots-surface-2);
position: fixed;
bottom: 20px;
right: 20px;
z-index: 10000;
display: flex;
flex-direction: column;
align-items: flex-end;
gap: 12px;
}
#help-pane .help-pane-container {
position: relative;
width: 400px;
flex-direction: column;
align-items: flex-start;
border-radius: 4px;
border: 1px solid var(--ots-border);
background: var(--ots-surface-2);
overflow: hidden;
max-height: calc(100vh - 100px);
overflow-y: auto;
}
#help-pane .help-pane-btn {
display: flex;
justify-content: center;
align-items: center;
flex-shrink: 0;
width: 48px;
height: 48px;
border-radius: 50px;
background: var(--ots-primary);
color: #0b1020;
cursor: pointer;
}
#help-pane .help-pane-btn:hover {
background: var(--ots-primary-2);
}
#help-pane .help-pane-btn i {
font-size: 24px;
color: #fff;
}
/* =============================================================================
@@ -7129,3 +7174,150 @@ body.ots-light-mode .calendar-view .cal-day-today .cal-month-day-number {
gap: 10px;
}
}
/* =============================================================================
DASHBOARD STAT BAR
============================================================================= */
.ots-stat-bar {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
gap: 16px;
margin-bottom: 28px;
}
.ots-stat-tile {
display: flex;
align-items: center;
gap: 14px;
padding: 18px 20px;
background: var(--stat-tile-bg);
border: 1px solid var(--stat-tile-border);
border-radius: 10px;
box-shadow: var(--stat-tile-shadow);
text-decoration: none !important;
color: inherit !important;
transition: border-color 200ms ease, box-shadow 200ms ease;
}
.ots-stat-tile:hover {
border-color: var(--stat-tile-hover-border);
}
.ots-stat-tile-icon {
flex-shrink: 0;
width: 44px;
height: 44px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 10px;
font-size: 18px;
background: rgba(59, 130, 246, 0.12);
color: var(--stat-tile-icon-color);
}
.ots-stat-tile-content {
display: flex;
flex-direction: column;
min-width: 0;
}
.ots-stat-tile-number {
font-size: 22px;
font-weight: 700;
line-height: 1.2;
color: var(--stat-tile-number-color);
}
.ots-stat-tile-label {
font-size: 12px;
font-weight: 500;
color: var(--stat-tile-label-color);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ots-stat-tile-icon--blue { background: rgba(50, 110, 220, 0.14); color: #5c9bff; }
.ots-stat-tile-icon--green { background: rgba(22, 175, 120, 0.14); color: #2eb88a; }
.ots-stat-tile-icon--orange { background: rgba(232, 120, 0, 0.14); color: #e87800; }
.ots-stat-tile-icon--purple { background: rgba(145, 80, 220, 0.14); color: #b37dd9; }
/* Light-mode overrides for stat tiles */
body.ots-light-mode .ots-stat-tile {
background: #ffffff;
border-color: #e2e8f0;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
}
body.ots-light-mode .ots-stat-tile-number { color: #0f172a; }
body.ots-light-mode .ots-stat-tile-label { color: #64748b; }
/* =============================================================================
ICON DASHBOARD section/grid/card-desc styles
(card layout and icon-colour variants live in dashboard-icon-page.twig inline <style>)
============================================================================= */
.icon-dash-section {
margin-top: 32px;
}
.icon-dash-section:first-of-type {
margin-top: 24px;
}
.icon-dash-section details {
border: none;
}
.icon-dash-section details summary {
cursor: pointer;
list-style: none;
display: flex;
align-items: center;
gap: 8px;
user-select: none;
}
.icon-dash-section details summary::-webkit-details-marker {
display: none;
}
.icon-dash-section details summary::after {
content: '';
width: 18px;
height: 18px;
margin-left: auto;
background-image: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 7L9 11L13 7' stroke='%2394a3b8' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: center;
transition: transform 200ms ease;
}
.icon-dash-section details[open] summary::after {
transform: rotate(180deg);
}
.icon-dash-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
gap: 18px;
margin-top: 14px;
}
.icon-dash-card-desc {
font-size: 12px;
color: var(--color-text-tertiary);
margin-top: 2px;
line-height: 1.4;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* Override the generic .card/.dashboard-card flex-direction:column that
breaks the row layout of icon-dash-card items */
.icon-dash-card.dashboard-card {
flex-direction: row !important;
align-items: center !important;
overflow: visible !important;
}