/* ════════════════════════════════════════════════════════════════════════ 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 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 ) 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; max-width: 1400px; 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: #c8922a; /* brass on hover */ border-bottom-color: #c8922a80; /* faint underline */ } /* Desktop: nav-links renders inline as part of nav flex row */ .utci-topnav .nav-links { display: contents; /* participates in nav's flex layout transparently */ } /* Nav logo — hidden on desktop, shown on mobile */ .nav-logo { display: none; } .nav-logo-sun { font-family: Fraunces, serif; font-weight: 900; font-size: 2.1rem; color: #c8922a; letter-spacing: -0.02em; } .nav-logo-scope { font-family: Fraunces, serif; font-style: italic; font-weight: 300; font-size: 2.1rem; color: #1e1208; letter-spacing: -0.02em; } .nav-logo-tag { display: block; font-family: Fraunces, serif; font-style: italic; font-size: 11px; color: #7a5c2a; margin-top: 2px; } /* 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: 88px 16px 24px; /* 88px = 72px nav height + 16px 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: 50%; transform: translateX(-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; } /* 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; } }