/* ── 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 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; 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; } .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: 100%; right: 0; margin-top: 10px; 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: 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: 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; } }