Summaries added — every column in COL_DESCRIPTIONS got a short (1–2 sentences) and a link to its reference row. Full desc text kept intact for the day-tab metric labels.
Popup rewired — renders the summary plus a "More about this column →" link, opening in a new tab.
Link styling — .col-info-more pinned below the summary so it stays visible if the text scrolls; centred on mobile with the rest.
Anchors on the reference page — 35 row ids in columns.html, one per column key.
New "Rows" row — the hour/interval header had a popup but no matching row on the reference page; added.
Landing highlight — tr:target gets a gold bar and tint, with scroll offset so the nav doesn't cover it.
This commit is contained in:
Fraxle
2026-08-03 18:06:09 +01:00
parent 2035edad23
commit 8f161dc8cb
18 changed files with 668 additions and 123 deletions
+70
View File
@@ -170,6 +170,76 @@
border-color: #c8922a;
}
/* "Use my location" and "Share" - same brass pill as the magnifier beside them */
.utci-loc-action {
flex: 0 0 auto;
display: inline-flex;
align-items: center;
justify-content: center;
width: 28px;
height: 28px;
padding: 0;
border: 1.5px solid #c9b08a;
border-radius: 999px;
background: #fffcf2;
color: #9a7a3a;
cursor: pointer;
transition: color 0.2s, border-color 0.2s, background 0.2s, box-shadow 0.2s;
}
.utci-loc-action:hover:not(:disabled) {
color: #c8922a;
border-color: #c8922a;
background: #fef3dc;
}
.utci-loc-action:focus-visible {
outline: none;
border-color: #c8922a;
box-shadow: 0 0 0 3px #c8922a24;
}
.utci-loc-action:disabled { cursor: default; opacity: 0.6; }
/* Slow pulse while the browser is resolving the fix */
.utci-loc-action.is-busy svg { animation: loc-seek 1.1s ease-in-out infinite; }
@keyframes loc-seek {
0%, 100% { opacity: 1; }
50% { opacity: 0.35; }
}
@media (prefers-reduced-motion: reduce) {
.utci-loc-action.is-busy svg { animation: none; opacity: 0.55; }
}
/* Transient note under the location row: "Link copied", permission errors */
.utci-loc-note {
display: flex;
align-items: center;
gap: 6px;
margin-top: 6px;
font-family: Manrope, sans-serif;
font-size: 11px;
letter-spacing: 0.04em;
color: #7a6a46;
}
.utci-loc-note.is-warn { color: #a8603a; }
.utci-loc-note-x {
border: 0;
background: none;
padding: 0 2px;
font-size: 14px;
line-height: 1;
color: inherit;
cursor: pointer;
opacity: 0.7;
}
.utci-loc-note-x:hover { opacity: 1; }
/* The lat/lon below the location */
.utci-loc-coords {
font-family: JetBrains Mono, monospace;
+30 -1
View File
@@ -1360,6 +1360,17 @@
margin-top: 2px;
}
/* Stands in for the unit when the column has no data for the selected day —
currently only AQI and Pollen, which CAMS stops forecasting before the
14-day table runs out. Muted and italic so it reads as an absence, not a
value. The cells carry the full explanation as a title. */
.utci-table th .col-unit--none {
color: #a89880;
font-style: italic;
text-transform: none;
letter-spacing: 0.02em;
}
/* Environment modifier badge — shown in SunSoak th when non-default env active */
.col-env-badge {
display: block;
@@ -1588,6 +1599,23 @@
overflow-y: auto; /* scrolls when text exceeds max-height cap */
flex: 1 1 auto;
}
/* "More about this column" deep-link to the reference page. Sits below the
summary and never shrinks, so it stays visible if the summary scrolls. */
.col-info-more {
display: block;
flex: 0 0 auto;
margin-top: 8px;
font-family: Manrope, sans-serif;
font-size: 11px;
font-weight: 700;
color: #b07d1e;
text-decoration: none;
}
.col-info-more:hover,
.col-info-more:focus-visible {
color: #8a5f12;
text-decoration: underline;
}
.col-info-close {
position: absolute;
top: 6px;
@@ -1813,7 +1841,8 @@
/* ── POPUP — mobile centre-alignment ───────────────────────────────── */
@media (max-width: 640px) {
.col-info-title,
.col-info-desc {
.col-info-desc,
.col-info-more {
text-align: center;
}
}
+48 -4
View File
@@ -722,8 +722,40 @@
text-transform: uppercase;
border: 1.5px solid #c9b08a;
margin-bottom: 18px;
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
gap: 10px 14px;
}
.utci-status-msg { text-align: center; }
.utci-status-retry {
flex: 0 0 auto;
padding: 6px 14px;
border: 1.5px solid currentColor;
border-radius: 999px;
background: #fffcf2;
color: inherit;
font-family: inherit;
font-size: 11px;
font-weight: 700;
letter-spacing: 0.07em;
text-transform: uppercase;
cursor: pointer;
transition: background 0.2s, box-shadow 0.2s;
}
.utci-status-retry:hover:not(:disabled) { background: #fef3dc; }
.utci-status-retry:focus-visible {
outline: none;
box-shadow: 0 0 0 3px currentColor;
}
.utci-status-retry:disabled { cursor: default; opacity: 0.55; }
/* acquiring-data popup overlay */
.acquiring-overlay {
position: fixed;
@@ -1497,6 +1529,14 @@
width: 100%;
}
/* "The Week Ahead" — sits under "At a glance" in the rail. Separate panel
because it describes the whole forecast range, not the selected day, and
putting a week-scoped line inside a day-scoped box reads as an error. */
.insight-panel--week {
width: 100%;
margin-top: 10px;
}
/* ── Pro: Export day data ──────────────────────────────────────────────── */
.export-panel {
margin-top: 10px;
@@ -1721,7 +1761,8 @@
.glance-rail { grid-column: 1; grid-row: 1; }
.table-main { grid-column: 2; grid-row: 1; }
.insight-panel--glance .insight-row {
.insight-panel--glance .insight-row,
.insight-panel--week .insight-row {
display: grid;
grid-template-columns: 20px 1fr;
grid-template-areas:
@@ -1731,14 +1772,17 @@
row-gap: 1px;
align-items: start;
}
.insight-panel--glance .insight-icon {
.insight-panel--glance .insight-icon,
.insight-panel--week .insight-icon {
grid-area: icon;
padding-top: 1px;
}
.insight-panel--glance .insight-label {
.insight-panel--glance .insight-label,
.insight-panel--week .insight-label {
grid-area: label;
}
.insight-panel--glance .insight-value {
.insight-panel--glance .insight-value,
.insight-panel--week .insight-value {
grid-area: value;
text-align: left; /* value sits left-aligned under its label */
}