5.5
New big and small scope sunset and sunrise simulation New calculations for the day tabs Added missing icons to simple view New record popups Week ahead description popups Camping profile Tweak to some of the indoor tems
This commit is contained in:
+88
-14
@@ -16,7 +16,8 @@
|
||||
#f5edd6 parchment page background
|
||||
#fffcf2 soft cream cards, search box, table
|
||||
#fdf8ee warm cream toolbars, legend, about block
|
||||
#f0e4c4 pale honey table heading row
|
||||
#f0e4c4 pale honey table heading row, priority banner
|
||||
#ebdcb4 deep honey site header bar, footer bar, nav drawer
|
||||
#fef3dc warm hover buttons on hover
|
||||
#fef8ea row hover table row on hover
|
||||
#fff8e4 "now" row the currently-active hour
|
||||
@@ -109,8 +110,14 @@ body {
|
||||
justify-content: flex-end; /* .nav-logo's margin-right:auto splits the row */
|
||||
padding: 18px var(--app-pad);
|
||||
gap: 28px;
|
||||
background: #f5edd6;
|
||||
border-bottom: 1px solid #e0d0a8;
|
||||
/* Two shades deeper than the parchment page beneath, so the bar reads as
|
||||
chrome rather than as more page — it is the topmost surface, so it sits a
|
||||
step below the table heading row (#f0e4c4) rather than matching it.
|
||||
The shadow is espresso at low alpha, not black, to stay in the warm family.
|
||||
The mobile bar and drawer below repeat these three values. */
|
||||
background: #ebdcb4;
|
||||
border-bottom: 1px solid #c9b08a;
|
||||
box-shadow: 0 3px 8px rgba(30, 18, 8, 0.10);
|
||||
}
|
||||
|
||||
.utci-topnav a {
|
||||
@@ -166,8 +173,8 @@ body {
|
||||
top: calc(100% - 1px);
|
||||
left: 50%;
|
||||
margin-top: 0;
|
||||
background: #f5edd6;
|
||||
border: 1px solid #e0d0a8;
|
||||
background: #fffcf2;
|
||||
border: 1px solid #d4c0a0;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 8px 24px rgba(100, 70, 20, 0.12);
|
||||
display: flex;
|
||||
@@ -403,6 +410,63 @@ body {
|
||||
transform: scale(1.3);
|
||||
}
|
||||
|
||||
/* Close + Quick Record stack in the strip's top-right corner, Close above
|
||||
Quick Record, rather than running side by side in the row. */
|
||||
.event-note-actions {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-end;
|
||||
gap: 4px;
|
||||
flex-shrink: 0;
|
||||
align-self: flex-start;
|
||||
margin: -2px -6px 0 10px;
|
||||
}
|
||||
|
||||
/* Quick Record — the banner's one action: sends the event showing to the
|
||||
journal (see quickRecord in app.js). Reads as an affordance rather than
|
||||
chrome, so unlike the close pill above it it carries its brass tint
|
||||
standing still. */
|
||||
.event-note-record {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
flex-shrink: 0;
|
||||
padding: 4px 9px;
|
||||
border: 1px solid rgba(200, 146, 42, 0.45);
|
||||
border-radius: 999px;
|
||||
background: rgba(200, 146, 42, 0.13);
|
||||
font-family: Manrope, sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
color: #8a6414;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, color 0.2s, border-color 0.2s;
|
||||
}
|
||||
.event-note-record:hover {
|
||||
background: rgba(200, 146, 42, 0.28);
|
||||
border-color: rgba(200, 146, 42, 0.75);
|
||||
color: #6b4a0c;
|
||||
}
|
||||
.event-note-record:focus-visible {
|
||||
outline: 2px solid #c8922a;
|
||||
outline-offset: 1px;
|
||||
}
|
||||
/* On a tinted warning the brass disappears into the hue, so the pill drops
|
||||
to the same neutral darks the rest of the tinted copy uses. */
|
||||
.event-note.is-tinted .event-note-record {
|
||||
background: rgba(0, 0, 0, 0.08);
|
||||
border-color: rgba(0, 0, 0, 0.24);
|
||||
color: #3f3222;
|
||||
}
|
||||
.event-note.is-tinted .event-note-record:hover {
|
||||
background: rgba(0, 0, 0, 0.16);
|
||||
border-color: rgba(0, 0, 0, 0.4);
|
||||
color: #2a1a08;
|
||||
}
|
||||
|
||||
/* Close control — a small brass "Close ×" pill in the top-right corner. It
|
||||
sits at the end of the strip's flex row rather than being absolutely
|
||||
positioned, so the dates line can never run underneath it. */
|
||||
@@ -411,8 +475,6 @@ body {
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
flex-shrink: 0;
|
||||
align-self: flex-start;
|
||||
margin: -2px -6px 0 2px; /* pull into the padding so it hugs the corner */
|
||||
padding: 3px 7px;
|
||||
border: 1px solid transparent;
|
||||
border-radius: 999px;
|
||||
@@ -491,15 +553,26 @@ body {
|
||||
.event-note-dates {
|
||||
margin-left: 0; /* no room to right-align on a phone */
|
||||
}
|
||||
/* Phone: the cross alone, pushed to the right-hand end of the row and
|
||||
padded out to a ~26px touch target. */
|
||||
.event-note-close {
|
||||
/* Phone: both pills shrink to their icon alone, on a ~26px touch target
|
||||
each, and the stack is pushed to the right-hand end of the row. */
|
||||
.event-note-actions {
|
||||
margin: -4px -6px 0 auto;
|
||||
gap: 2px;
|
||||
}
|
||||
.event-note-close {
|
||||
padding: 8px;
|
||||
}
|
||||
.event-note-close-label {
|
||||
display: none;
|
||||
}
|
||||
/* Same treatment for Quick Record — the notebook glyph alone. It keeps its
|
||||
tint, so it still reads as the button of the two. */
|
||||
.event-note-record {
|
||||
padding: 7px;
|
||||
}
|
||||
.event-note-record-label {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Note attached to the header ─────────────────────────────────────
|
||||
@@ -679,8 +752,9 @@ body {
|
||||
margin: 0;
|
||||
padding: 10px 20px;
|
||||
height: 72px;
|
||||
background: #f5edd6;
|
||||
border-bottom: 1px solid #e0d0a8;
|
||||
background: #ebdcb4;
|
||||
border-bottom: 1px solid #c9b08a;
|
||||
box-shadow: 0 3px 8px rgba(30, 18, 8, 0.10);
|
||||
}
|
||||
|
||||
.utci-burger {
|
||||
@@ -694,8 +768,8 @@ body {
|
||||
right: -100%;
|
||||
width: 220px;
|
||||
height: 100vh;
|
||||
background: #f5edd6;
|
||||
border-left: 1px solid #e0d0a8;
|
||||
background: #ebdcb4;
|
||||
border-left: 1px solid #c9b08a;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
|
||||
+102
-8
@@ -735,10 +735,12 @@
|
||||
}
|
||||
.utci-thead-sticky {
|
||||
position: sticky;
|
||||
/* Clears the profile row pinned above it. DayTabs measures that row and
|
||||
publishes its height (+ its 4px margin) as --profile-row-h — it is one
|
||||
line or two depending on the labels, and the old fixed 28px left the
|
||||
table header tucked under it. */
|
||||
/* Sits flush under the profile row pinned above it. DayTabs measures that
|
||||
row and publishes its height as --profile-row-h — it is one line or two
|
||||
depending on the labels, and the old fixed 28px left the table header
|
||||
tucked under it. The offset is the row's exact height, so the two bands
|
||||
butt together; any padding here shows as a strip of the scrolling page
|
||||
between them. */
|
||||
top: var(--profile-row-h, 52px) !important;
|
||||
z-index: 10;
|
||||
}
|
||||
@@ -1749,6 +1751,36 @@
|
||||
animation: popup-open-below 0.22s cubic-bezier(0.34, 1.4, 0.64, 1) both;
|
||||
}
|
||||
|
||||
/* ── WEEK AHEAD ROW POPUP ───────────────────────────────────────────────
|
||||
Replaces the desktop-only `title=` tooltips the Week Ahead rows used to
|
||||
carry: tap/click a row to open this. Reuses the .col-info-popup shell. */
|
||||
.col-info-popup--week { width: 240px; }
|
||||
.col-info-desc--lead {
|
||||
margin-bottom: 8px;
|
||||
font-weight: 600;
|
||||
color: #4a3420;
|
||||
}
|
||||
.week-popup-list {
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.week-popup-list li {
|
||||
display: grid;
|
||||
grid-template-columns: 18px 1fr;
|
||||
column-gap: 8px;
|
||||
align-items: start;
|
||||
font-family: Manrope, sans-serif;
|
||||
font-size: 12px;
|
||||
line-height: 1.45;
|
||||
color: #6b4f2a;
|
||||
}
|
||||
.week-popup-icon { text-align: center; }
|
||||
|
||||
/* ── EVENT TAG POPUP — SLIDESHOW ────────────────────────────────────────
|
||||
The stage holds the current slide. On transition, evTransition is set
|
||||
to 'exiting' (fade out) then 'entering' (fade in) via the hook. */
|
||||
@@ -1757,6 +1789,12 @@
|
||||
|
||||
.ev-popup-stage {
|
||||
transition: opacity 0.38s ease;
|
||||
/* Shrinkable and scrollable, so a long message runs out of room inside the
|
||||
stage rather than pushing the Quick Record button below it out of the
|
||||
card's 260px cap. min-height:0 because a flex item won't otherwise
|
||||
shrink past its content. */
|
||||
min-height: 0;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.ev-popup-entering {
|
||||
animation: ev-fade-in 0.38s ease both;
|
||||
@@ -1765,6 +1803,43 @@
|
||||
animation: ev-fade-out 0.38s ease both;
|
||||
}
|
||||
|
||||
/* Quick Record — sends the event showing to the journal (see quickRecord in
|
||||
app.js). Same pill as the event banner's, sized for this popup: full-width
|
||||
so it reads as the panel's action rather than a stray chip, and outside the
|
||||
crossfading stage so it stays put while the events cycle. Never shrinks, so
|
||||
it survives a long message scrolling inside .col-info-desc. */
|
||||
.ev-popup-record {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 5px;
|
||||
width: 100%;
|
||||
flex: 0 0 auto;
|
||||
margin-top: 10px;
|
||||
padding: 6px 10px;
|
||||
border: 1px solid rgba(200, 146, 42, 0.45);
|
||||
border-radius: 999px;
|
||||
background: rgba(200, 146, 42, 0.13);
|
||||
font-family: Manrope, sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
color: #8a6414;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, color 0.2s, border-color 0.2s;
|
||||
}
|
||||
.ev-popup-record:hover {
|
||||
background: rgba(200, 146, 42, 0.28);
|
||||
border-color: rgba(200, 146, 42, 0.75);
|
||||
color: #6b4a0c;
|
||||
}
|
||||
.ev-popup-record:focus-visible {
|
||||
outline: 2px solid #c8922a;
|
||||
outline-offset: 1px;
|
||||
}
|
||||
|
||||
/* Slideshow navigation dots */
|
||||
.ev-popup-dots {
|
||||
display: flex;
|
||||
@@ -2623,6 +2698,17 @@
|
||||
.fsc-card--now .fsc-time {
|
||||
color: #c8922a;
|
||||
}
|
||||
/* Event emojis: centred row under the time. Fixed height so cards without
|
||||
events (which still render an empty row) match those with them. */
|
||||
.fsc-ev-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 4px;
|
||||
height: 16px;
|
||||
margin: -2px 0;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.fsc-feel {
|
||||
font-family: Manrope, sans-serif;
|
||||
@@ -2694,9 +2780,16 @@
|
||||
88px. It must not be flexible: the connector lines are drawn from the SVG's
|
||||
top edge and have to stay flush under the cards, so any height the box does
|
||||
not get is height the cold end loses off the bottom. */
|
||||
/* Width: 0 + min-width: 100% rather than width: 100%. The SVG's viewBox gives
|
||||
it an intrinsic width of height × 1000/80 (1100px at 88px), and inside the
|
||||
max-content .forecast-simple-inner that set the row's minimum width — so at
|
||||
3h/4h, where the cards need far less, they were stretched apart to 1100px
|
||||
and the panel scrolled. This way only the cards size the row; the curve
|
||||
just fills whatever width they settle on. */
|
||||
.fsc-temp-curve {
|
||||
display: block;
|
||||
width: 100%;
|
||||
width: 0;
|
||||
min-width: 100%;
|
||||
flex: 0 0 auto;
|
||||
height: 88px;
|
||||
}
|
||||
@@ -2915,8 +3008,9 @@
|
||||
.utci-table.utci-table-rotated tbody td.grp-label-fill {
|
||||
padding: 5px 0;
|
||||
min-width: 0;
|
||||
background-color: #f0e4c4;
|
||||
background-image: linear-gradient(var(--grp-tint, transparent), var(--grp-tint, transparent));
|
||||
/* White across the hour columns - only the pinned group label keeps the
|
||||
category shade. */
|
||||
background: #ffffff;
|
||||
/* One rule, along the very top of the category block — the same 2px
|
||||
rgba(74,50,24,0.18) the unrotated table draws down the left of each new
|
||||
column group (.col-group-start), so a group boundary looks the same
|
||||
@@ -2925,7 +3019,7 @@
|
||||
as a double rule around the label. Every cell in the row carries the edge
|
||||
— under border-collapse:separate a <tr> border never paints, so the row's
|
||||
rule has to be drawn cell by cell (see the row-separator rule above). */
|
||||
border-top: 2px solid rgba(74, 50, 24, 0.18);
|
||||
border-top: 2px solid #ffffff; /* white under the hour columns; the label keeps its shaded rule */
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
|
||||
+70
-4
@@ -119,9 +119,17 @@
|
||||
color: #4a3420;
|
||||
line-height: 1.55;
|
||||
}
|
||||
/* Footer row of a card — the visibility note (when there is one) and the
|
||||
Quick Record pill share a line, and wrap onto two in a narrow column. */
|
||||
.almanac-entry-foot {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
.almanac-entry-visibility {
|
||||
display: inline-block;
|
||||
margin-top: 5px;
|
||||
font-family: Manrope, sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
@@ -133,6 +141,38 @@
|
||||
border-radius: 3px;
|
||||
padding: 2px 7px;
|
||||
}
|
||||
/* Quick Record — files this event under its peak date in the journal (see
|
||||
quickRecord in app.js). Same brass pill as the event banner's and the
|
||||
table popup's, sized down for the card. */
|
||||
.almanac-entry-record {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
flex-shrink: 0;
|
||||
padding: 3px 8px;
|
||||
border: 1px solid rgba(200, 146, 42, 0.45);
|
||||
border-radius: 999px;
|
||||
background: rgba(200, 146, 42, 0.13);
|
||||
font-family: Manrope, sans-serif;
|
||||
font-size: 10px;
|
||||
font-weight: 700;
|
||||
letter-spacing: 0.06em;
|
||||
text-transform: uppercase;
|
||||
color: #8a6414;
|
||||
line-height: 1;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s, color 0.2s, border-color 0.2s;
|
||||
}
|
||||
.almanac-entry-record:hover {
|
||||
background: rgba(200, 146, 42, 0.28);
|
||||
border-color: rgba(200, 146, 42, 0.75);
|
||||
color: #6b4a0c;
|
||||
}
|
||||
.almanac-entry-record:focus-visible {
|
||||
outline: 2px solid #c8922a;
|
||||
outline-offset: 1px;
|
||||
}
|
||||
|
||||
.almanac-entry-accent {
|
||||
width: 3px;
|
||||
align-self: stretch;
|
||||
@@ -683,7 +723,6 @@
|
||||
border-color: #c8922a;
|
||||
color: #c8922a;
|
||||
background: #f5edd6;
|
||||
font-weight: 600;
|
||||
}
|
||||
.cs-vent.on:hover {
|
||||
background: #fef3dc;
|
||||
@@ -1331,12 +1370,21 @@
|
||||
}
|
||||
|
||||
/* Site-wide footer - matches about and faq pages */
|
||||
/* Bookends .utci-topnav at the other end of the page, with the same deep-honey
|
||||
bar, warm border and shadow — the shadow just points up instead of down.
|
||||
Full-bleed the same way the header is: cancel .utci-app's side padding and
|
||||
its 32px bottom (base.css) so the bar reaches the left, right and bottom
|
||||
edges, then pad itself back so the text lines up with the content above. */
|
||||
.utci-site-footer {
|
||||
margin: 32px calc(var(--app-pad) * -1) -32px;
|
||||
position: relative; /* keeps the upward shadow over the content it covers */
|
||||
text-align: center;
|
||||
padding: 10px 1.5rem;
|
||||
padding: 18px var(--app-pad);
|
||||
font-size: 0.82rem;
|
||||
color: #b09870;
|
||||
border-top: 1px solid #e0d0a8;
|
||||
background: #ebdcb4;
|
||||
border-top: 1px solid #c9b08a;
|
||||
box-shadow: 0 -3px 8px rgba(30, 18, 8, 0.10);
|
||||
font-family: Manrope, sans-serif;
|
||||
font-weight: 600;
|
||||
text-transform: none;
|
||||
@@ -1690,6 +1738,24 @@
|
||||
}
|
||||
.insight-panel--week .insight-row--week-note .insight-value::before { content: none; }
|
||||
|
||||
/* Score rows open an explanatory popup on click/tap (the icon and score
|
||||
used to lean on `title=` tooltips, which never show on touch). */
|
||||
.insight-panel--week .insight-row--clickable {
|
||||
cursor: pointer;
|
||||
border-radius: 5px;
|
||||
margin: 0 -6px;
|
||||
padding: 4px 6px;
|
||||
transition: background 0.12s;
|
||||
}
|
||||
.insight-panel--week .insight-row--clickable:hover,
|
||||
.insight-panel--week .insight-row--clickable.is-open {
|
||||
background: #f3ead2;
|
||||
}
|
||||
.insight-panel--week .insight-row--clickable:focus-visible {
|
||||
outline: 2px solid #b07d1e;
|
||||
outline-offset: 1px;
|
||||
}
|
||||
|
||||
/* How good the day is out of 100 — the bar does the comparing, the number
|
||||
settles close calls. */
|
||||
.week-score {
|
||||
|
||||
Reference in New Issue
Block a user