diff --git a/src/public/index.html b/src/public/index.html index fbcbb22..bc5b82f 100644 --- a/src/public/index.html +++ b/src/public/index.html @@ -238,36 +238,44 @@ button.quiet:disabled { opacity: 0.5; cursor: default; } /* tiles share rows, so a label that wraps beside the table keeps every number on one line */ .stats .stat { display: grid; - grid-row: span 3; + grid-row: span 2; grid-template-rows: subgrid; row-gap: 0; align-content: start; } .stats .stat .label { align-self: end; } +/* kept short so the table below gets the height: label, then the number with its note beside it */ .stat { - padding: 16px 18px; + padding: 10px 14px; background: var(--card); border: 1px solid var(--rule); } .stat .label { font-family: var(--mono); font-size: 12px; - letter-spacing: 0.08em; + letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); } +.stat .reading { + display: flex; + align-items: baseline; + gap: 8px; + min-width: 0; + margin-top: 2px; +} .stat .value { - margin-top: 4px; + flex: none; font-family: var(--mono); - font-size: 30px; + font-size: 24px; font-weight: 600; - line-height: 1.1; + line-height: 1.15; font-variant-numeric: tabular-nums; } .stat.accent .value { color: var(--signal); } .stat .sub { - margin-top: 4px; + min-width: 0; font-size: 12px; color: var(--muted); white-space: nowrap; @@ -507,16 +515,17 @@ body > footer .meta:empty { display: none; } } .weather-empty { grid-column: 1 / -1; padding: 18px; color: var(--muted); } +/* kept short so the board below gets the height */ .weather-now { display: flex; align-items: center; - gap: 8px; - padding: 10px 22px 10px 8px; + gap: 6px; + padding: 6px 20px 6px 8px; } -.weather-now img { width: 84px; height: 84px; margin: -6px 0; } +.weather-now img { width: 56px; height: 56px; margin: -4px 0; } .weather-place { - margin: 0 0 4px; - font-size: 15px; + margin: 0; + font-size: 14px; font-weight: 600; } .weather-place .note { @@ -526,19 +535,22 @@ body > footer .meta:empty { display: none; } font-weight: 400; color: var(--muted); } +.weather-reading { display: flex; align-items: baseline; gap: 10px; white-space: nowrap; } .weather-temp { font-family: var(--mono); - font-size: 38px; + font-size: 26px; font-weight: 600; - line-height: 1; + line-height: 1.15; } -.weather-desc { margin-top: 4px; font-size: 14px; text-transform: capitalize; } +.weather-desc { font-size: 14px; text-transform: capitalize; } +/* two by two, so the details take two lines instead of four */ .weather-details { - display: flex; - flex-direction: column; - justify-content: center; - gap: 2px; - padding: 10px 22px; + display: grid; + grid-template-columns: auto auto; + align-content: center; + justify-content: start; + gap: 2px 18px; + padding: 6px 20px; border-left: 1px solid var(--rule); font-family: var(--mono); font-size: 13px; @@ -553,16 +565,21 @@ body > footer .meta:empty { display: none; } border-left: 1px solid var(--rule); } .forecast-day { - padding: 10px 4px 12px; - text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 6px 4px; font-family: var(--mono); - font-size: 12px; + font-size: 13px; } .forecast-day + .forecast-day { border-left: 1px solid color-mix(in oklab, var(--rule), transparent 50%); } .forecast-day .name { color: var(--muted); font-size: 12px; letter-spacing: 0.06em; text-transform: uppercase; } -.forecast-day img { display: block; width: 44px; height: 44px; margin: 0 auto; } +/* icon beside the temperatures rather than above them */ +.forecast-day .day-line { display: flex; align-items: center; gap: 4px; white-space: nowrap; } +.forecast-day img { width: 32px; height: 32px; margin: -4px 0; } .forecast-day .lo { color: var(--muted); } -.forecast-day .pop { margin-top: 2px; font-size: 12px; color: var(--rain); } +.forecast-day .pop { color: var(--rain); } /* ---- temporary: unassigned verification list (not for prod) ---- */ @@ -713,7 +730,7 @@ button:disabled { opacity: 0.5; cursor: default; } .wrap { padding: 20px 16px 40px; } body > footer { padding: 0 16px 24px; } .stats { grid-template-columns: repeat(2, minmax(0, 1fr)); } - .stat .value { font-size: 24px; } + .stat .value { font-size: 22px; } .actions { margin-left: 0; width: 100%; } th, td { padding: 8px 10px; } } @@ -1018,15 +1035,14 @@ function renderStats(wl) { const tile = (label, value, sub, accent) => `
${esc(label)}
-
${esc(value)}
-
${esc(sub || ' ')}
+
${esc(value)}${esc(sub || ' ')}
`; const un = data.unassigned || {}; const unLoaded = !!un.updatedAt && !un.error; return '
' - + tile('Unassigned requests', unLoaded ? un.count : '–', unLoaded ? 'checked ' + clockTime(un.updatedAt) + (un.truncated ? ', partial' : '') : '') + + tile('Unassigned', unLoaded ? un.count : '–', unLoaded ? 'checked ' + clockTime(un.updatedAt) + (un.truncated ? ', partial' : '') : '') + tile('Open requests', loaded ? open : '–', top ? top.total + ' ' + top.name : '') + tile('Closed today', loaded ? closedToday : '–', 'since midnight', true) + tile('Closed last hour', lastHour, data.tickets[0] ? 'latest #' + data.tickets[0].id : 'none yet', true) @@ -1139,9 +1155,10 @@ function renderWeather() { const today = new Date().toLocaleDateString('en-CA'); // YYYY-MM-DD in local time const days = (weather.forecast || []).map(d => `
${d.date === today ? 'Today' : new Date(d.date + 'T12:00').toLocaleDateString([], { weekday: 'short' })}
- ${d.icon ? `${esc(d.condition || '')}` : ''} -
${d.high}° ${d.low}°
-
${d.pop >= 20 ? d.pop + '%' : ' '}
+
+ ${d.icon ? `${esc(d.condition || '')}` : ''} + ${d.high}° ${d.low}°${d.pop >= 20 ? ` ${d.pop}%` : ''} +
`).join(''); const note = (weather.error ? 'stale · ' : '') + 'as of ' + clockTime(weather.updatedAt); @@ -1151,8 +1168,10 @@ function renderWeather() { ${weather.icon ? `` : ''}

${esc(weather.place || 'Weather')} ${esc(note)}

-
${weather.temp}°F
-
${esc(weather.description || weather.condition || '')}
+
+ ${weather.temp}°F + ${esc(weather.description || weather.condition || '')} +