Files
sunscope/assets/css/base.css
T
fraxle 6da2f34b26 2.7.6
Style tidy
2026-06-06 00:23:42 +01:00

291 lines
9.3 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 */
}
/* 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;
}
/* 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;
}
}