/* ---------- reset ---------- */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
ul { list-style: none; margin: 0; padding: 0; }
a { color: inherit; }
img, svg { display: block; max-width: 100%; }

/* ---------- fonts ---------- */
/* Cinzel, SIL Open Font License 1.1 — see fonts/OFL.txt
   Self-hosted latin subset (14.8 KB) so the page makes no third-party requests. */
@font-face {
  font-family: "Cinzel";
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url("fonts/cinzel-700-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
                 U+02DC, U+2000-206F, U+2122, U+2212, U+FEFF, U+FFFD;
}

/* ---------- tokens ---------- */
:root {
  --bg: #f5f5f6;
  --fg: #17181a;
  --muted: #56585d;
  --card-bg: #ffffff;
  --card-border: #e6e6e8;
  --shadow: 0 1px 2px rgba(20,20,25,.04), 0 8px 20px rgba(20,20,25,.06);
  --shadow-hover: 0 2px 4px rgba(20,20,25,.06), 0 16px 32px rgba(20,20,25,.10);
  --radius: 18px;
  --focus-ring: #2563eb;

  --font-sans: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --font-serif: "Cinzel", Georgia, "Palatino Linotype", Palatino, serif;
  --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas,
               "Liberation Mono", monospace;

  --knights-accent: #b8402a;
  --knights-tint: #fbeae6;

  --time-accent: #0c766d;
  --time-tint: #e2f3f1;

  --perf-accent: #1d7a4c;
  --perf-tint: #e4f4ea;

  --dash-accent: #3d5a78;
  --dash-tint: #e9edf2;
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg: #101113;
    --fg: #eceef0;
    --muted: #a2a6ac;
    --card-bg: #17181b;
    --card-border: #2a2c30;
    --shadow: 0 1px 2px rgba(0,0,0,.3), 0 8px 24px rgba(0,0,0,.35);
    --shadow-hover: 0 2px 4px rgba(0,0,0,.35), 0 20px 40px rgba(0,0,0,.45);
    --focus-ring: #7aa2ff;

    --knights-accent: #e2795f;
    --knights-tint: #3a2019;

    --time-accent: #4fc9bc;
    --time-tint: #143330;

    --perf-accent: #55c98a;
    --perf-tint: #123322;

    --dash-accent: #93aec8;
    --dash-tint: #202730;
  }
}

/* ---------- base ---------- */
body {
  background: var(--bg);
  color: var(--fg);
  font-family: var(--font-sans);
  line-height: 1.5;
  min-height: 100vh;
}

.skip-link {
  position: absolute;
  left: -999px;
  top: 0;
  background: var(--fg);
  color: var(--bg);
  padding: .75rem 1.25rem;
  border-radius: 0 0 8px 0;
  z-index: 100;
}
.skip-link:focus {
  left: 0;
}

/* ---------- header ---------- */
.site-header {
  max-width: 880px;
  margin: 0 auto;
  padding: clamp(2.5rem, 6vw, 4.5rem) 1.5rem 1.5rem;
  text-align: center;
}

.wordmark {
  font-size: clamp(1.5rem, 3vw, 2rem);
  font-weight: 700;
  letter-spacing: -0.01em;
  margin: 0 0 .5rem;
}

.tagline {
  color: var(--muted);
  margin: 0;
  font-size: 1.05rem;
}

/* ---------- grid ---------- */
main {
  max-width: 880px;
  margin: 0 auto;
  padding: 1rem 1.5rem 4rem;
}

.grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 1.25rem;
}

@media (max-width: 700px) {
  .grid {
    grid-template-columns: 1fr;
  }
}

/* ---------- card ---------- */
.card {
  position: relative;
  background: var(--card-bg);
  border: 1px solid var(--card-border);
  border-radius: var(--radius);
  padding: 1.75rem 1.75rem 1.5rem;
  box-shadow: var(--shadow);
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
  border-top: 3px solid var(--accent, var(--card-border));
}

.card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-hover);
}

.card:has(a:focus-visible) {
  box-shadow: var(--shadow-hover);
}

.card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  border-radius: 12px;
  background: var(--tint, var(--bg));
  color: var(--accent, var(--fg));
  margin-bottom: 1.1rem;
}

.card-icon svg {
  width: 1.6rem;
  height: 1.6rem;
}

.card-title {
  margin: 0 0 .55rem;
  font-size: 1.3rem;
}

.card-title a {
  text-decoration: none;
  color: var(--accent, var(--fg));
}

/* whole-card click target, single focusable link per card */
.card-title a::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: var(--radius);
}

.card-title a:focus-visible::after {
  outline: 2.5px solid var(--focus-ring);
  outline-offset: 2px;
}

.card-title a:hover {
  text-decoration: underline;
  text-decoration-thickness: 2px;
  text-underline-offset: 3px;
}

.card-desc {
  margin: 0 0 1.25rem;
  color: var(--muted);
  font-size: .97rem;
}

.card-cta {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  font-size: .85rem;
  font-weight: 600;
  color: var(--accent, var(--fg));
}

.arrow {
  transition: transform .18s ease;
  display: inline-block;
}

.card:hover .arrow {
  transform: translateX(3px);
}

/* ---------- per-card identity ---------- */

.card--knights {
  --accent: var(--knights-accent);
  --tint: var(--knights-tint);
}
.card--knights .card-title {
  font-family: var(--font-serif);
  letter-spacing: .01em;
}

.card--time {
  --accent: var(--time-accent);
  --tint: var(--time-tint);
}
.card--time .card-title {
  font-family: var(--font-mono);
}
.card--time .card-desc {
  font-family: var(--font-mono);
  font-size: .87rem;
}

.card--perf {
  --accent: var(--perf-accent);
  --tint: var(--perf-tint);
}
.card--perf .card-title {
  font-family: var(--font-mono);
}
.card--perf .card-desc {
  font-family: var(--font-mono);
  font-size: .87rem;
}

.card--dash {
  --accent: var(--dash-accent);
  --tint: var(--dash-tint);
}
/* deliberately plain: default sans-serif, no extra styling */

/* ---------- footer ---------- */
.site-footer {
  max-width: 880px;
  margin: 0 auto;
  padding: 1.5rem 1.5rem 3rem;
  text-align: center;
  color: var(--muted);
  font-size: .85rem;
}

.footer-links {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: .3rem .6rem;
  margin-bottom: .6rem;
}

.footer-links a {
  color: var(--muted);
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
  border-radius: 4px;
  padding: .15rem .1rem;
  transition: color .15s ease;
}

.footer-links a:hover {
  color: var(--fg);
  text-decoration-thickness: 2px;
}

.footer-links a:focus-visible {
  outline: 2.5px solid var(--focus-ring);
  outline-offset: 2px;
  color: var(--fg);
}

.footer-sep {
  opacity: .55;
}

.footer-copy {
  margin: 0;
}

/* ---------- motion ---------- */
@media (prefers-reduced-motion: reduce) {
  .card, .arrow {
    transition: none;
  }
}
