@import url("./variables.css"); @font-face { font-family: "Ductus"; src: url("../fonts/DuctusRegular.otf") format("opentype"); font-style: normal; font-weight: 400; font-display: swap; } @font-face { font-family: "BBBDMSans"; src: url("../fonts/BBBDMSans-Light.otf") format("opentype"); font-style: normal; font-weight: 300; font-display: swap; } @font-face { font-family: "BBBDMSans"; src: url("../fonts/BBBDMSans-Regular.otf") format("opentype"); font-style: normal; font-weight: 400; font-display: swap; } @font-face { font-family: "BBBDMSans"; src: url("../fonts/BBBDMSans-Medium.otf") format("opentype"); font-style: normal; font-weight: 500; font-display: swap; } @font-face { font-family: "BBBDMSans"; src: url("../fonts/BBBDMSans-Bold.otf") format("opentype"); font-style: normal; font-weight: 700; font-display: swap; } *, *::before, *::after { box-sizing: border-box; } html, body { margin: 0; padding: 0; height: 100%; } body { font-family: var(--font-body); background: var(--bg-primary); color: var(--text-primary); } a { color: inherit; text-decoration: none; } a:hover { text-decoration: none; } /* ============================================================ HEADER / NAV BAR (public pages) ============================================================ */ body > header { flex-shrink: 0; background: linear-gradient( 180deg, var(--gradient-1) 0%, var(--gradient-2) 33%, var(--gradient-3) 66%, var(--gradient-4) 100% ); } body > header nav { padding: var(--space-s) var(--space-s); display: flex; align-items: center; justify-content: space-between; } .nav-logo { font-family: var(--font-display); font-size: var(--step-2); letter-spacing: 0.12em; text-transform: uppercase; color: var(--accent-foreground); text-decoration: none; text-shadow: 0 0 16px var(--header-shadow-strong), 0 0 32px var(--header-shadow-soft); } .nav-left { display: flex; align-items: center; gap: var(--space-l); } .nav-left-links, .nav-right-links { display: flex; gap: var(--space-l); align-items: center; list-style: none; margin: 0; padding: 0; } body > header nav > a { font-family: var(--font-display); font-size: var(--step-0); letter-spacing: 0.12em; text-transform: uppercase; color: var(--accent-foreground); text-decoration: none; } body > header nav > ul { display: flex; gap: var(--space-l); align-items: center; list-style: none; margin: 0; padding: 0; } body > header nav ul a { font-size: var(--step--1); letter-spacing: 0.12em; text-transform: uppercase; color: var(--accent-foreground); text-decoration: none; transition: opacity 0.15s; } /* Subtle shadow on all header text to improve legibility against the gradient */ body > header nav > a, body > header nav ul a { text-shadow: 0 0 16px var(--header-shadow-strong), 0 0 32px var(--header-shadow-soft); } body > header nav ul a:hover { opacity: 1; } body > header nav ul a[aria-current="page"] { opacity: 1; border-bottom: 1px solid var(--header-nav-active-border); padding-bottom: 1px; } /* ============================================================ SEARCH BAR (shared) ============================================================ */ .header-search-wrap { padding: 0 0; background-color: var(--gradient-4); background: linear-gradient( 180deg, var(--gradient-4) 0%, #ffffffee 100% ); } .header-search-wrap form[role="search"] { display: flex; align-items: center; gap: var(--space-2xs); padding: var(--space-3xs) var(--space-s); border: 1px solid var(--accent-primary); border-radius: 10px; background: var(--bg-primary); width: 100%; color: var(--accent-primary); } .header-search-wrap form[role="search"] svg { color: var(--text-tertiary); flex-shrink: 0; width: 16px; height: 16px; stroke: var(--accent-primary); } .header-search-wrap form[role="search"] input { flex: 1; border: none; font-size: var(--step--1); color: var(--text-primary); background: transparent; padding: var(--space-3xs) 0; font-family: inherit; } .header-search-wrap form[role="search"] input::placeholder { color: var(--accent-primary); } /* ============================================================ ACCESSIBILITY UTILITIES ============================================================ */ /* Visually-hidden but screen-reader-accessible */ .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } /* Skip-to-content link (visible only on keyboard focus) */ .skip-link { position: absolute; top: -999px; left: 1rem; z-index: 9999; padding: var(--space-2xs) var(--space-s); background: var(--accent-primary); color: var(--text-primary); font-size: var(--step--1); font-weight: 600; text-decoration: none; border-radius: 0 0 4px 4px; } .skip-link:focus { top: 0; } /* Consistent keyboard-focus outline for all interactive elements */ :focus-visible { outline: 2px solid var(--accent-primary); outline-offset: 2px; } /* Respect user motion preferences */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition-duration: 0.01ms !important; animation-duration: 0.01ms !important; } }