Files
landing/site/styles.css
mifi 40b770f8b5
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Added some navigation
2026-02-01 01:56:59 -03:00

1347 lines
28 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ========================================
CSS Variables for Light/Dark Mode
======================================== */
:root {
/* Light mode colors */
--color-bg: #ffffff;
--color-bg-alt: #faf9ff; /* subtle violet-tinted off-white */
--color-bg-subtle: #f3f1ff; /* soft surface */
--color-text: #14121a;
--color-text-secondary: #3f3a4a;
--color-text-tertiary: #625b70;
--color-border: #e4e0f2;
--color-border-strong: #c9c1e3;
/* Brand accent (links, focus, highlights) */
--color-primary: #6d28d9; /* purple */
--color-primary-hover: #5b21b6;
--color-primary-bg: #efe7ff;
--color-secondary: #3f3a4a;
--color-secondary-hover: #14121a;
/* Focus */
--color-focus: #6d28d9;
--color-focus-outline: rgba(109, 40, 217, 0.45);
/* Typography */
--font-family: "Inter", system-ui, -apple-system, Segoe UI, Roboto, Arial,
sans-serif;
--font-family-heading: "Fraunces", ui-serif, Georgia, "Times New Roman", serif;
--font-size-base: 18px;
--font-size-small: 15px;
--font-size-medium: 16px;
--font-size-large: 20px;
--font-size-xl: 32px;
--font-size-xxl: 52px;
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semibold: 600;
--font-weight-bold: 700;
--line-height-base: 1.75;
--line-height-relaxed: 1.85;
--line-height-tight: 1.65;
--line-height-heading: 1.25;
/* Spacing */
--space-xs: 0.25rem;
--space-sm: 0.5rem;
--space-md: 1rem;
--space-lg: 1.5rem;
--space-xl: 2rem;
--space-xxl: 3rem;
--space-xxxl: 7rem;
/* Layout */
--max-width: 1100px;
--max-narrow-width: 680px;
--max-text-width: 70ch;
/* Border radius */
--border-radius-small: 6px;
--border-radius-medium: 10px;
--border-radius-large: 16px;
/* Transition */
--transition-fast: 150ms ease;
--transition-base: 250ms ease;
/* CTA palette (orange primary CTA; AAA in light mode with white text) */
--accent-orange: #9a3412;
--accent-orange-hover: #7c2d12;
--accent-orange-soft: #fff1e7;
/* Button tokens */
--btn-primary-bg: var(--accent-orange);
--btn-primary-bg-hover: var(--accent-orange-hover);
--btn-primary-fg: #ffffff;
--btn-secondary-bg: transparent;
--btn-secondary-fg: var(--color-text);
--btn-secondary-border: var(--color-border-strong);
--btn-ghost-bg-hover: rgba(0, 0, 0, 0.06);
/* Focus ring (purple feels more “intentional” than orange) */
--btn-focus-ring: rgba(109, 40, 217, 0.45);
}
/* Dark mode - AAA contrast optimized */
@media (prefers-color-scheme: dark) {
:root {
--color-bg: #0b0b12; /* cool slate (not pure black) */
--color-bg-alt: #121226;
--color-bg-subtle: #191934;
--color-text: #f3f2ff;
--color-text-secondary: #c9c6e4;
--color-text-tertiary: #a7a2c8;
--color-border: #2a2950;
--color-border-strong: #3a3870;
/* Brand accent (purple) */
--color-primary: #a78bfa;
--color-primary-hover: #c4b5fd;
--color-primary-bg: #1a1530;
--color-secondary: #c9c6e4;
--color-secondary-hover: #f3f2ff;
--color-focus: #a78bfa;
--color-focus-outline: rgba(167, 139, 250, 0.45);
/* CTA button: keep AAA in dark mode by using dark text on bright orange */
--btn-primary-bg: #fb923c;
--btn-primary-bg-hover: #fdba74; /* still AAA with dark text */
--btn-primary-fg: #0b0b12;
--btn-secondary-fg: var(--color-text);
--btn-secondary-border: var(--color-border-strong);
--btn-ghost-bg-hover: rgba(255, 255, 255, 0.08);
--btn-focus-ring: rgba(167, 139, 250, 0.45);
}
}
/* ========================================
Base Styles
======================================== */
*,
*::before,
*::after {
box-sizing: border-box;
}
html {
font-size: var(--font-size-base);
scroll-behavior: smooth;
}
@media (prefers-reduced-motion: reduce) {
html {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
.btn:hover {
transform: none;
}
.logo-item img:hover,
.logo-item img:focus {
transform: none;
}
}
body {
margin: 0;
padding: 0;
font-family: var(--font-family);
font-size: var(--font-size-base);
font-weight: var(--font-weight-normal);
line-height: var(--line-height-base);
color: var(--color-text);
background-color: var(--color-bg);
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
}
/* ========================================
Skip Link (Accessibility)
======================================== */
.sr-only {
position: absolute;
width: 1px;
height: 1px;
margin: -1px;
border: 0;
padding: 0;
white-space: nowrap;
clip-path: inset(100%);
clip: rect(0 0 0 0);
overflow: hidden;
}
.skip-link {
position: absolute;
top: -100px;
left: 0;
padding: var(--space-sm) var(--space-lg);
background-color: var(--color-primary);
color: white;
text-decoration: none;
font-weight: var(--font-weight-semibold);
font-size: var(--font-size-base);
z-index: 9999;
border-radius: 0 0 var(--border-radius-large) 0;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
border-bottom: none;
}
.skip-link:focus {
top: 0;
outline: 4px solid white;
outline-offset: 3px;
box-shadow: 0 0 0 8px rgba(255, 255, 255, 0.3);
}
.skip-link:focus-visible {
top: 0;
outline: 4px solid white;
outline-offset: 3px;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
}
/* ========================================
Focus Styles (Strong, Accessible)
======================================== */
/* Strong focus indicators for keyboard navigation (WCAG 2.2 AAA) */
:focus {
outline: 3px solid var(--color-focus);
outline-offset: 3px;
transition: outline-offset var(--transition-fast);
}
:focus:not(:focus-visible) {
outline: none;
}
:focus-visible {
outline: 4px solid var(--color-focus);
outline-offset: 4px;
border-radius: 3px;
box-shadow: 0 0 0 8px var(--color-focus-outline);
}
/* Ensure focus is always visible, never removed */
*:focus-visible {
outline-style: solid !important;
}
/* Focus for images in logo strip */
img:focus-visible {
outline: 4px solid var(--color-focus);
outline-offset: 4px;
}
/* ========================================
Typography
======================================== */
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0 0 var(--space-lg) 0;
line-height: var(--line-height-heading);
font-weight: var(--font-weight-bold);
color: var(--color-text);
letter-spacing: -0.02em;
}
h1 {
font-size: var(--font-size-xxl);
font-weight: var(--font-weight-bold);
letter-spacing: -0.03em;
}
h2 {
font-size: var(--font-size-xl);
font-weight: var(--font-weight-semibold);
letter-spacing: -0.02em;
}
/* Heading font (keeps layout intact; just typography) */
h1,
h2,
h3,
h4,
h5,
h6,
.logo,
.headline,
.section-title {
font-family: var(--font-family-heading);
}
p {
margin: 0 0 var(--space-md) 0;
max-width: var(--max-text-width);
}
a {
color: var(--color-primary);
text-decoration: none;
text-decoration-skip-ink: auto;
transition: color var(--transition-fast);
border-bottom: 1px solid transparent;
}
a:hover {
color: var(--color-primary-hover);
border-bottom-color: currentColor;
}
a:focus-visible {
outline: 3px solid var(--color-focus);
outline-offset: 3px;
border-bottom-color: transparent;
}
/* ========================================
Layout Containers
======================================== */
.container {
width: 100%;
max-width: var(--max-width);
margin: 0 auto;
padding: 0 var(--space-md);
}
.section {
padding: var(--space-xxxl) 0;
border-bottom: 1px solid var(--color-border);
}
.section:last-child {
border-bottom: none;
}
.section:nth-child(even) {
background-color: var(--color-bg-alt);
}
/* ========================================
Nav Section
======================================== */
.nav {
background-color: var(--color-bg);
padding: var(--space-md) 0;
position: sticky;
text-align: center;
top: 0;
background-color: var(--color-bg);
border-bottom: 1px solid var(--color-border);
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.6);
z-index: 100;
}
.nav .container,
.nav .nav-menu {
display: grid;
grid-template-columns: 1fr auto 1fr;
justify-content: space-between;
align-items: center;
}
.mobile-nav-header {
display: none;
justify-content: space-between;
align-items: center;
}
/* Logo recolored to text color via mask (works for <img> SVG in light/dark mode) */
.nav-header-logo {
display: inline-block;
max-width: 250px;
background-color: var(--color-text);
-webkit-mask: url("/assets/wordmark.svg") center / contain no-repeat;
mask: url("/assets/wordmark.svg") center / contain no-repeat;
padding-left: var(--space-md);
}
.nav-header-logo img {
display: block;
max-width: 100%;
width: 100%;
height: auto;
opacity: 0;
pointer-events: none;
}
/* Hamburger toggle: mobile only, animates to X when open */
.nav-toggle-input {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
.nav-toggle {
display: none;
align-items: center;
justify-content: flex-end;
flex: 0 0 auto;
padding: var(--space-sm) var(--space-md);
width: calc(24px + var(--space-md) + var(--space-md));
height: calc(31px + var(--space-sm) + var(--space-sm));
cursor: pointer;
color: var(--color-text);
background: transparent;
border: none;
border-radius: var(--space-xs);
transition: color 0.2s ease, background-color 0.2s ease;
}
.nav-toggle:hover {
color: var(--color-primary);
}
.nav-toggle:focus-visible {
outline: 4px solid var(--color-focus);
outline-offset: 4px;
}
.nav-toggle-inner {
display: flex;
flex-direction: column;
justify-content: space-between;
width: 24px;
height: 18px;
}
.nav-toggle-line {
display: block;
width: 100%;
height: 2px;
background-color: currentColor;
border-radius: 1px;
transform-origin: center;
transition: transform 0.25s ease, opacity 0.2s ease;
}
/* Hamburger → X when checked */
.nav-toggle-input:checked
~ .mobile-nav-header
.nav-toggle
.nav-toggle-line:nth-child(1) {
transform: translateY(8px) rotate(45deg);
}
.nav-toggle-input:checked
~ .mobile-nav-header
.nav-toggle
.nav-toggle-line:nth-child(2) {
opacity: 0;
}
.nav-toggle-input:checked
~ .mobile-nav-header
.nav-toggle
.nav-toggle-line:nth-child(3) {
transform: translateY(-8px) rotate(-45deg);
}
/* Mobile: show toggle, collapse menu until opened; menu overlays content via anchor */
@media (max-width: 768px) {
.nav {
display: flex;
flex-direction: column;
align-items: stretch;
}
.nav-toggle {
display: flex;
}
.mobile-nav-header {
display: flex;
anchor-name: --mobile-nav-header;
}
.nav-header-logo.desktop {
display: none;
}
.nav .nav-menu {
display: flex;
flex-direction: column;
align-items: stretch;
max-height: 0;
overflow: hidden;
opacity: 0;
padding-top: 0;
padding-bottom: 0;
border-top: none;
transition: max-height 0.3s ease, opacity 0.25s ease, padding 0.25s ease;
}
.nav-toggle-input:checked ~ .nav-menu {
max-height: 80vh;
opacity: 1;
padding-top: var(--space-md);
padding-bottom: var(--space-md);
border-top: 1px solid var(--color-border);
}
/* Overlay: position menu below header so it flows over content (no layout shift) */
@supports (top: anchor(bottom)) {
.nav .nav-menu {
position: fixed;
position-anchor: --mobile-nav-header;
top: anchor(--mobile-nav-header bottom);
left: anchor(--mobile-nav-header left);
right: anchor(--mobile-nav-header right);
margin: 0;
overflow-y: auto;
background-color: var(--color-bg);
border-bottom: 1px solid var(--color-border);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
z-index: 99;
}
}
.nav-menu .nav-list {
flex-direction: column;
gap: 0;
}
.nav-menu .nav-item {
margin: 0;
text-align: center;
}
.nav-menu .nav-item a,
.nav-menu .nav-back-to-top a {
display: block;
padding: var(--space-md);
}
.nav-menu .nav-item a:hover {
border-bottom-color: transparent;
}
.nav-list,
.nav-item {
width: 100%;
}
@media (prefers-reduced-motion: reduce) {
.nav-toggle-line {
transition-duration: 0.01ms;
}
.nav-menu {
transition-duration: 0.01ms;
}
}
}
.nav-list {
display: flex;
justify-content: center;
align-items: center;
list-style: none;
padding: 0;
margin: 0;
}
.nav-item {
margin: 0 var(--space-md);
}
/* Back to top + mobile nav logo: hidden until page is scrolled (CSS scroll-driven animation) */
.nav-back-to-top,
.nav-header-logo {
/* Fallback when scroll-driven animations arent supported: always visible */
opacity: 1;
visibility: visible;
}
@supports (animation-timeline: scroll()) {
.nav-back-to-top,
.nav-header-logo {
opacity: 0;
visibility: hidden;
pointer-events: none;
animation: nav-reveal-on-scroll linear;
animation-timeline: scroll(root block);
animation-range: 300px 400px;
animation-fill-mode: both;
}
@keyframes nav-reveal-on-scroll {
from {
opacity: 0;
visibility: hidden;
pointer-events: none;
}
to {
opacity: 1;
visibility: visible;
pointer-events: auto;
}
}
@media (prefers-reduced-motion: reduce) {
.nav-back-to-top,
.nav-header-logo {
animation: none;
opacity: 1;
visibility: visible;
pointer-events: auto;
}
}
}
/* ========================================
Header / Hero Section
======================================== */
.hero {
padding: var(--space-xxxl) 0 var(--space-xxl) 0;
text-align: center;
background-color: var(--color-bg);
border-bottom: 1px solid var(--color-border);
}
.logo {
color: var(--color-text);
margin: 0 auto;
max-width: 350px;
width: 100%;
}
.headline {
margin-bottom: var(--space-lg);
font-size: var(--font-size-xl);
font-weight: var(--font-weight-semibold);
color: var(--color-text);
letter-spacing: -0.02em;
}
.subhead {
max-width: var(--max-narrow-width);
margin: 0 auto var(--space-xl) auto;
font-size: var(--font-size-large);
font-weight: var(--font-weight-normal);
color: var(--color-text-secondary);
line-height: var(--line-height-relaxed);
}
/* ========================================
Buttons
======================================== */
.btn {
display: inline-block;
padding: 1rem 2rem;
min-height: 48px;
min-width: 120px;
font-size: var(--font-size-base);
font-weight: var(--font-weight-semibold);
text-decoration: none;
border-radius: var(--border-radius-large);
transition: all var(--transition-base);
cursor: pointer;
border: 2px solid transparent;
letter-spacing: -0.01em;
display: inline-flex;
align-items: center;
justify-content: center;
text-align: center;
}
.btn:hover {
transform: translateY(-1px);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
}
.btn:active {
transform: translateY(0);
}
/* PRIMARY CTA
Use the CTA/button tokens (defined in BOTH modes) to guarantee contrast.
This fixes the dark-mode purple/white contrast violation without changing your purple brand accents. */
.btn-primary {
background-color: var(--btn-primary-bg);
color: var(--btn-primary-fg);
border-color: var(--btn-primary-bg);
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
}
.btn-primary:hover {
background-color: var(--btn-primary-bg-hover);
border-color: var(--btn-primary-bg-hover);
color: var(--btn-primary-fg);
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.18);
}
.btn-primary:focus-visible {
outline: 4px solid var(--color-focus);
outline-offset: 4px;
box-shadow: 0 0 0 8px var(--color-focus-outline),
0 2px 8px rgba(0, 0, 0, 0.12);
}
/* SECONDARY CTA
Keep it outlined and “lighter touch” (more professional than flipping to a heavy block).
Uses existing tokens only; works in both modes. */
.btn-secondary {
background-color: var(--btn-secondary-bg);
color: var(--btn-secondary-fg);
border-color: var(--btn-secondary-border);
box-shadow: 0 0 4px rgba(0, 0, 0, 0.05);
}
.btn-secondary:hover {
background-color: var(--accent-orange-soft);
color: var(--btn-secondary-fg);
border-color: var(--btn-primary-bg);
box-shadow: 0 6px 16px rgba(0, 0, 0, 0.1);
}
.btn-secondary:focus-visible {
outline: 4px solid var(--color-focus);
outline-offset: 4px;
box-shadow: 0 0 0 8px var(--color-focus-outline),
0 1px 4px rgba(0, 0, 0, 0.05);
}
.cta-group {
display: flex;
flex-wrap: wrap;
gap: var(--space-md);
justify-content: center;
align-items: center;
margin-top: var(--space-lg);
}
/* ========================================
Experience Section (Logo Strip)
======================================== */
.experience-section {
text-align: center;
background-color: var(--color-bg);
}
.logo-strip {
display: flex;
flex-wrap: wrap;
gap: var(--space-xl);
justify-content: center;
align-items: center;
margin: 0;
padding: var(--space-lg) 0;
}
.logo-item {
position: relative;
flex: 0 1 auto;
min-width: 120px;
max-width: 160px;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
padding: var(--space-xs);
}
/* Make logo containers keyboard focusable for screen reader users */
.logo-item:focus-within {
outline: 3px solid var(--color-focus);
outline-offset: 2px;
border-radius: var(--border-radius);
}
.logo-item img {
width: 100%;
height: auto;
max-height: 50px;
object-fit: contain;
opacity: 0.75;
transition: all var(--transition-base);
filter: grayscale(100%) contrast(1.15);
}
.logo-item img:hover,
.logo-item img:focus,
.logo-item img:focus-visible {
opacity: 1;
filter: grayscale(25%) contrast(1.05);
transform: scale(1.05);
}
.logo-item img:focus-visible {
outline: 4px solid var(--color-focus);
outline-offset: 4px;
border-radius: var(--border-radius);
}
/* Dark mode logo adaptations */
@media (prefers-color-scheme: dark) {
.logo-item img {
filter: grayscale(100%) brightness(0) invert(1) contrast(1.25);
opacity: 0.65;
}
.logo-item img:hover,
.logo-item img:focus,
.logo-item img:focus-visible {
filter: grayscale(50%) brightness(1) invert(1) contrast(1.1);
opacity: 0.9;
}
/* Dark-mode secondary hover: keep it subtle (no inversion) */
.btn-secondary:hover {
background-color: rgba(251, 146, 60, 0.12);
border-color: var(--btn-primary-bg);
color: var(--btn-secondary-fg);
}
}
/* Fallback text (shown when image fails to load or on very small screens) */
.logo-fallback-text {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
/* Show fallback text when image fails */
.logo-item img[alt]:not([src]),
.logo-item img[alt][src=""],
.logo-item img[alt]:not([src*=".svg"]):not([src*=".png"]):not([src*=".jpg"]) {
display: none;
}
.logo-item:has(img[alt]:not([src])) .logo-fallback-text,
.logo-item:has(img[alt][src=""]) .logo-fallback-text {
position: static;
width: auto;
height: auto;
padding: var(--space-sm);
margin: 0;
overflow: visible;
clip: auto;
white-space: normal;
font-size: var(--font-size-base);
font-weight: 600;
color: var(--color-text);
background-color: var(--color-bg-alt);
border: 2px solid var(--color-border);
border-radius: var(--border-radius);
display: inline-block;
}
/* Text-only list (hidden by default, shown on very small screens) */
.logo-text-list {
display: none;
list-style: none;
padding: 0;
margin: 0 auto;
max-width: 400px;
text-align: left;
}
.logo-text-list li {
padding: var(--space-sm) var(--space-md);
margin-bottom: var(--space-sm);
font-size: var(--font-size-base);
font-weight: var(--font-weight-medium);
color: var(--color-text);
background-color: var(--color-bg-subtle);
border-left: 3px solid var(--color-primary);
border-radius: var(--border-radius);
line-height: var(--line-height-base);
}
.logo-text-list li:last-child {
margin-bottom: 0;
}
.footnote {
margin-top: var(--space-lg);
font-size: var(--font-size-small);
font-weight: var(--font-weight-normal);
color: var(--color-text-tertiary);
font-style: italic;
line-height: var(--line-height-base);
max-width: 100%;
}
/* Responsive: Show text list on very small screens */
@media (max-width: 480px) {
.logo-strip {
display: none;
}
.logo-text-list {
display: block;
}
.footnote {
display: none;
}
}
/* Responsive: Adjust logo sizes on medium screens */
@media (max-width: 768px) and (min-width: 481px) {
.logo-strip {
gap: var(--space-lg);
padding: var(--space-md) 0;
}
.logo-item {
min-width: 110px;
max-width: 140px;
}
.logo-item img {
max-height: 45px;
}
}
/* ========================================
Section Titles
======================================== */
.section-title {
margin-bottom: var(--space-xl);
font-size: var(--font-size-xl);
font-weight: var(--font-weight-semibold);
color: var(--color-text);
letter-spacing: -0.02em;
line-height: var(--line-height-heading);
text-align: center;
}
/* ========================================
Content Lists
======================================== */
.content-list {
max-width: var(--max-text-width);
margin: 0 auto;
padding: 0;
list-style: none;
}
.content-list li {
position: relative;
padding-left: var(--space-lg);
margin-bottom: var(--space-lg);
font-size: var(--font-size-base);
line-height: var(--line-height-relaxed);
color: var(--color-text);
}
.content-list li::before {
content: "→";
position: absolute;
left: 0;
color: var(--color-primary);
font-weight: var(--font-weight-semibold);
font-size: 1.2em;
line-height: 1;
top: 0.1em;
}
/* ========================================
Engagements List
======================================== */
.engagements-list {
max-width: var(--max-text-width);
margin: 0 auto;
}
.engagement {
margin-bottom: var(--space-xl);
padding-bottom: var(--space-lg);
padding-left: var(--space-md);
border-left: 3px solid var(--color-border);
transition: border-color var(--transition-base);
}
.engagement:hover,
.engagement:focus-within {
border-left-color: var(--color-primary);
}
.engagement:last-child {
margin-bottom: 0;
padding-bottom: 0;
}
.engagement dt {
margin-bottom: var(--space-sm);
font-size: var(--font-size-large);
font-weight: var(--font-weight-semibold);
color: var(--color-text);
line-height: var(--line-height-tight);
}
.engagement dd {
margin: 0;
font-size: var(--font-size-base);
line-height: var(--line-height-relaxed);
color: var(--color-text-secondary);
}
/* ========================================
Schedule Section
======================================== */
.schedule-section {
text-align: center;
background-color: var(--color-bg-subtle);
}
.schedule-text {
margin-bottom: var(--space-lg);
font-size: var(--font-size-large);
font-weight: var(--font-weight-normal);
color: var(--color-text-secondary);
line-height: var(--line-height-relaxed);
max-width: 100%;
}
/* ========================================
Nav Items / Footer
======================================== */
.footer {
padding: var(--space-xxl) 0 var(--space-xl) 0;
text-align: center;
background-color: var(--color-bg);
border-top: 1px solid var(--color-border);
}
.copyright {
margin-bottom: var(--space-md);
font-size: var(--font-size-medium);
font-weight: var(--font-weight-normal);
color: var(--color-text-tertiary);
max-width: 100%;
}
.footer-links {
display: flex;
gap: var(--space-lg);
justify-content: center;
align-items: center;
}
.nav-item a,
.footer-links a {
font-size: var(--font-size-medium);
font-weight: var(--font-weight-medium);
color: var(--color-text-secondary);
text-decoration: none;
transition: color var(--transition-fast);
border-bottom: 1px solid transparent;
padding: var(--space-xs) var(--space-sm);
margin: calc(-1 * var(--space-xs)) calc(-1 * var(--space-sm));
min-height: 44px;
display: inline-flex;
align-items: center;
}
.nav-item a:hover,
.footer-links a:hover {
color: var(--color-primary);
border-bottom-color: var(--color-primary);
}
.nav-item a:focus-visible,
.footer-links a:focus-visible {
outline: 4px solid var(--color-focus);
outline-offset: 4px;
border-bottom-color: transparent;
box-shadow: 0 0 0 8px var(--color-focus-outline);
border-radius: 3px;
}
/* ========================================
Responsive Design
======================================== */
@media (max-width: 768px) {
:root {
--font-size-base: 17px;
--font-size-small: 14px;
--font-size-medium: 15px;
--font-size-large: 19px;
--font-size-xl: 28px;
--font-size-xxl: 40px;
--space-lg: 2rem;
--space-xl: 3rem;
--space-xxl: 4.5rem;
--space-xxxl: 6rem;
}
.section {
padding: var(--space-xxl) 0;
}
.hero {
padding: var(--space-xxl) 0 var(--space-xl) 0;
}
.cta-group {
flex-direction: column;
width: 100%;
}
.btn {
width: 100%;
max-width: 400px;
text-align: center;
min-height: 48px;
}
.logo-strip {
gap: var(--space-md);
}
.logo-item {
max-width: 120px;
}
.engagement {
padding-left: var(--space-sm);
}
}
@media (max-width: 480px) {
:root {
--font-size-base: 16px;
--font-size-small: 13px;
--font-size-medium: 14px;
--font-size-large: 18px;
--font-size-xl: 24px;
--font-size-xxl: 34px;
--space-xl: 2.5rem;
--space-xxl: 3.5rem;
--space-xxxl: 5rem;
}
.container {
padding: 0 var(--space-md);
}
.section {
padding: var(--space-xl) 0;
}
.hero {
padding: var(--space-xl) 0 var(--space-lg) 0;
}
.logo-item {
max-width: 100px;
}
.btn {
padding: 0.875rem 1.5rem;
min-height: 48px;
}
.footer-links {
gap: var(--space-md);
}
}
/* ========================================
High Contrast Mode Support
======================================== */
@media (prefers-contrast: high) {
:root {
--color-primary: #0047b3;
--color-border: #000000;
--color-text: #000000;
--color-text-secondary: #1a1a1a;
/* Maintain button contrast in high contrast mode (same tokens, same names) */
--btn-primary-bg: #000000;
--btn-primary-bg-hover: #000000;
--btn-primary-fg: #ffffff;
--btn-secondary-border: #000000;
}
@media (prefers-color-scheme: dark) {
:root {
--color-primary: #66b3ff;
--color-border: #ffffff;
--color-text: #ffffff;
--color-text-secondary: #e0e0e0;
--btn-primary-bg: #ffffff;
--btn-primary-bg-hover: #ffffff;
--btn-primary-fg: #000000;
--btn-secondary-border: #ffffff;
}
}
.btn {
border-width: 3px;
}
.btn:hover {
box-shadow: 0 8px 20px rgba(0, 0, 0, 0.2);
}
:focus,
:focus-visible {
outline-width: 4px;
outline-offset: 4px;
}
/* Enhanced logo visibility in high contrast mode */
.logo-item img {
opacity: 1;
filter: contrast(1.6);
}
@media (prefers-color-scheme: dark) {
.logo-item img {
filter: brightness(0) invert(1) contrast(1.9);
opacity: 1;
}
}
.logo-text-list li {
border-left-width: 4px;
}
.engagement {
border-left-width: 4px;
}
a {
border-bottom-width: 2px;
text-decoration: underline;
}
}
/* ========================================
Print Styles (Accessibility)
======================================== */
@media print {
/* Show all content clearly for printing */
body {
font-size: 12pt;
line-height: 1.5;
color: #000;
background: #fff;
}
.skip-link {
display: none;
}
/* Expand all sections */
.section {
page-break-inside: avoid;
padding: 1rem 0;
border-bottom: 1pt solid #ccc;
}
/* Show URLs for external links */
a[href^="http"]:after {
content: " (" attr(href) ")";
font-size: 10pt;
color: #666;
}
/* Hide interactive elements that don't make sense in print */
.btn,
.cta-group {
display: none;
}
/* Ensure logos print well */
.logo-item img {
opacity: 1;
filter: none;
max-height: 40px;
}
/* Show text version on print */
.logo-text-list {
display: block !important;
}
.logo-strip {
display: none;
}
/* Clean up footer */
.footer-links a:after {
content: none;
}
/* Ensure good contrast */
* {
color: #000 !important;
background: #fff !important;
}
h1,
h2,
h3,
dt {
color: #000 !important;
font-weight: bold;
}
}