Files
sunscope/assets/css/base.css
T
fraxle e27a8cdb2d 3.3.2
Header menu and footer tidy
2026-07-09 20:38:11 +01:00

381 lines
12 KiB
CSS

/* ── SELF-HOSTED FONTS ───────────────────────────────────────────────── */
@font-face { font-family: 'Manrope'; font-style: normal; font-weight: 200 800; font-display: swap; src: url('../fonts/manrope-variable.woff2') format('woff2'); }
@font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 700; font-display: swap; src: url('../fonts/fraunces-700-normal.woff2') format('woff2'); }
@font-face { font-family: 'Fraunces'; font-style: normal; font-weight: 900; font-display: swap; src: url('../fonts/fraunces-900-normal.woff2') format('woff2'); }
@font-face { font-family: 'Fraunces'; font-style: italic; font-weight: 300; font-display: swap; src: url('../fonts/fraunces-300-italic.woff2') format('woff2'); }
@font-face { font-family: 'Fraunces'; font-style: italic; font-weight: 700; font-display: swap; src: url('../fonts/fraunces-700-italic.woff2') format('woff2'); }
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 400; font-display: swap; src: url('../fonts/jetbrains-mono-400.woff2') format('woff2'); }
@font-face { font-family: 'JetBrains Mono'; font-style: normal; font-weight: 600; font-display: swap; src: url('../fonts/jetbrains-mono-600.woff2') format('woff2'); }
/* ════════════════════════════════════════════════════════════════════════
base.css — Fonts, reset, page shell, and top navigation.
════════════════════════════════════════════════════════════════════════
COLOUR PALETTE (the "warm parchment & brass" theme)
──────────────────────────────────────────────────────────────────────
#f5edd6 parchment page background
#fffcf2 soft cream cards, search box, table
#fdf8ee warm cream toolbars, legend, about block
#f0e4c4 pale honey table heading row
#fef3dc warm hover buttons on hover
#fef8ea row hover table row on hover
#fff8e4 "now" row the currently-active hour
#1e1208 espresso headings + emphasis
#4a3420 warm dark body text in the table
#6b4f2a muted bronze subtle emphasis
#7a5c2a tagline brown italic intro line
#9a7d5a soft brown column toggle text
#b09870 warm grey muted labels
#c0a880 pale dust night-row text, footer
#c8922a BRASS brand accent (links, dial, focus)
#a06e18 deep brass hover state for some links
#c9b08a warm border panel borders
#d4c0a0 soft border toolbar/legend borders
#ede4cc line table row dividers
FONTS
──────────────────────────────────────────────────────────────────────
Fraunces serif display titles, day labels, hour cell
Manrope body sans-serif paragraphs, small labels
JetBrains Mono numeric monospace table data
════════════════════════════════════════════════════════════════════════ */
/* ── 1. FONTS + RESET ───────────────────────────────────────────────── */
/* Font loading is handled in index.html via a non-blocking <link rel="preload">
to avoid render-blocking. The @import has been intentionally removed. */
*,
*:before,
*:after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
/* ── 2. PAGE BACKGROUND & SHELL ─────────────────────────────────────── */
body {
background: #f5edd6; /* parchment */
}
.utci-app {
font-family: Manrope, sans-serif;
color: #1e1208;
background: #f5edd6;
min-height: 100vh;
padding: 52px 36px 32px;
position: relative;
/* overflow-x: clip (not hidden) — `clip` clips horizontal overflow
WITHOUT making this a scroll container, so `position: sticky` on
descendants (table <th>) can still stick relative to the viewport.
`hidden` would create a containing block that breaks sticky. */
overflow-x: clip;
}
/* The centred container that holds everything. */
.utci-shell {
position: relative;
z-index: 1;
margin: 0 auto;
}
/* ── 3. TOP NAVIGATION (Home / About links in the corner) ──────────── */
.utci-topnav {
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 100;
display: flex;
align-items: center;
justify-content: flex-end;
padding: 18px 32px;
gap: 28px;
}
.utci-topnav a {
font-family: Manrope, sans-serif;
font-size: 16px;
font-weight: 700;
letter-spacing: 0.06em;
text-transform: uppercase;
color: #b09870;
text-decoration: none;
border-bottom: 1px solid transparent;
padding-bottom: 2px;
transition: color 0.2s, border-color 0.2s;
}
.utci-topnav a:hover {
color: #1e1208;
border-bottom-color: #1e1208;
}
/* Desktop: nav-links renders inline as part of nav flex row */
.utci-topnav .nav-links {
display: contents; /* participates in nav's flex layout transparently */
}
/* ── About dropdown ─────────────────────────────────────────────────── */
.utci-topnav .nav-dropdown {
position: relative;
display: inline-flex;
align-items: center;
}
/* Invisible bridge so hover doesn't break between toggle and menu */
.utci-topnav .nav-dropdown::after {
content: '';
position: absolute;
left: 0;
right: 0;
top: 100%;
height: 4px;
}
.utci-topnav .nav-dropdown-toggle .caret {
display: inline-block;
margin-left: 4px;
font-size: 0.7em;
transition: transform 0.2s;
}
.utci-topnav .nav-dropdown:hover .nav-dropdown-toggle .caret,
.utci-topnav .nav-dropdown:focus-within .nav-dropdown-toggle .caret {
transform: rotate(180deg);
}
.utci-topnav .nav-dropdown-menu {
position: absolute;
top: calc(100% - 1px);
left: 50%;
margin-top: 0;
background: #f5edd6;
border: 1px solid #e0d0a8;
border-radius: 8px;
box-shadow: 0 8px 24px rgba(100, 70, 20, 0.12);
display: flex;
flex-direction: column;
min-width: 210px;
padding: 6px;
opacity: 0;
visibility: hidden;
transform: translateX(-50%) translateY(-4px);
transition: opacity 0.18s ease, transform 0.18s ease, visibility 0.18s ease;
z-index: 110;
}
.utci-topnav .nav-dropdown:hover .nav-dropdown-menu,
.utci-topnav .nav-dropdown:focus-within .nav-dropdown-menu {
opacity: 1;
visibility: visible;
transform: translateX(-50%) translateY(0);
}
.utci-topnav .nav-dropdown-menu a {
text-transform: none;
letter-spacing: normal;
font-size: 14px;
font-weight: 600;
color: #5a3e1a;
padding: 8px 12px;
border-radius: 6px;
border-bottom: none;
white-space: nowrap;
}
.utci-topnav .nav-dropdown-menu a:hover {
background: #ede4cc;
color: #1e1208;
border-bottom: none;
}
/* Nav logo — hidden on desktop, shown on mobile */
.nav-logo {
display: none;
}
.nav-logo-wordmark {
display: flex;
align-items: center;
gap: 0.05em;
}
.nav-logo-sun,
.nav-logo-scope {
font-family: Manrope, sans-serif;
font-weight: 250;
font-size: 2.1rem;
color: #1e1208;
letter-spacing: -0.01em;
}
.nav-logo-icon {
width: 1.65rem;
height: 1.65rem;
color: #1e1208;
flex-shrink: 0;
}
.nav-logo-tag {
display: block;
font-family: Manrope, sans-serif;
font-style: normal;
font-weight: 600;
font-size: 8px;
letter-spacing: 0.12em;
text-transform: uppercase;
color: #7a5c2a;
margin-top: 3px;
}
/* Desktop: overlay hidden */
.utci-topnav .nav-overlay {
display: none;
}
/* ── Burger button (hidden on desktop) ─────────────────────────────── */
.utci-burger {
display: none;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 5px;
width: 36px;
height: 36px;
background: none;
border: none;
cursor: pointer;
padding: 4px;
z-index: 110;
flex-shrink: 0;
}
.utci-burger span {
display: block;
width: 22px;
height: 2px;
background: #7a5c2a;
border-radius: 2px;
transition: transform 0.25s ease, opacity 0.2s ease;
transform-origin: center;
}
/* ── Mobile nav drawer ──────────────────────────────────────────────── */
@media (max-width: 640px) {
.utci-app {
padding: 96px 16px 24px; /* 96px = 72px nav height + 24px breathing room */
}
/* Show wordmark in nav bar, hide it from main content */
.nav-logo {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: absolute;
left: 0;
right: 0;
top: 50%;
transform: translateY(-50%);
text-align: center;
pointer-events: none;
}
.nav-logo-wordmark {
display: block;
line-height: 1;
}
.utci-title,
.utci-tagline {
display: none;
}
.utci-topnav {
position: fixed;
padding: 10px 20px;
height: 72px;
background: #f5edd6;
border-bottom: 1px solid #e0d0a8;
}
.utci-burger {
display: flex;
}
/* Hide the links by default on mobile — shown in drawer */
.utci-topnav .nav-links {
position: fixed;
top: 0;
right: -100%;
width: 220px;
height: 100vh;
background: #f5edd6;
border-left: 1px solid #e0d0a8;
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
padding: 80px 32px 32px;
gap: 28px;
transition: right 0.28s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: -8px 0 24px rgba(100,70,20,0.08);
z-index: 105;
}
.utci-topnav .nav-links.is-open {
right: 0;
}
.utci-topnav .nav-links a {
font-size: 15px;
}
/* Dropdown collapses to an indented static list inside the drawer */
.utci-topnav .nav-dropdown {
flex-direction: column;
align-items: flex-start;
width: 100%;
gap: 18px;
}
.utci-topnav .nav-dropdown-toggle .caret { display: none; }
.utci-topnav .nav-dropdown-menu {
position: static;
opacity: 1;
visibility: visible;
transform: none;
box-shadow: none;
border: none;
background: none;
padding: 0 0 0 14px;
margin-top: 0;
min-width: 0;
gap: 18px;
}
.utci-topnav .nav-dropdown-menu a { padding: 0; font-size: 14px; }
/* Burger → X animation */
.utci-topnav.nav-open .utci-burger span:nth-child(1) {
transform: translateY(7px) rotate(45deg);
}
.utci-topnav.nav-open .utci-burger span:nth-child(2) {
opacity: 0;
transform: scaleX(0);
}
.utci-topnav.nav-open .utci-burger span:nth-child(3) {
transform: translateY(-7px) rotate(-45deg);
}
/* Overlay behind drawer */
.utci-topnav .nav-overlay {
display: block;
position: fixed;
inset: 0;
background: rgba(30,18,8,0.35);
opacity: 0;
pointer-events: none;
transition: opacity 0.25s ease;
z-index: 104;
}
.utci-topnav.nav-open .nav-overlay {
opacity: 1;
pointer-events: auto;
}
}