@charset "UTF-8";
:root {
  --blog: #8187bc;
  --blog-bg: #4a4f7a;
  --links: #617745;
  --fiction: #916B20;
  --philosophy: #486E6A;
  --politics: #9E524D;
  --site-bg: #F2F0EB;
  --site-text: #343a40;
  --site-primary: #4a4f7a;
  --text-muted: #656b71;
  --control-border: #7a8085;
  --card-bg: transparent;
  --card-hover-bg: rgba(0,0,0,0.04);
  --card-border-color: rgba(128, 128, 128, 0.08);
  --card-body-bg: #e4e2dd;
  --card-accent: var(--site-primary);
  --card-badge-fill: #4a4f7a;
}

#theme-toggler {
  background: none;
  border: 0;
  padding: 0;
  margin: 0;
  color: inherit;
  font: inherit;
  line-height: inherit;
  cursor: pointer;
}
#theme-toggler:focus-visible {
  outline: 2px dashed var(--site-primary);
  outline-offset: 2px;
}
[data-theme=light] #theme-toggler:before {
  content: "🌙";
}
[data-theme=dark] #theme-toggler:before {
  content: "☀️";
}

[data-theme=light] .navbar-themed .navbar-brand,
[data-theme=light] .navbar-themed .navbar-nav .nav-link.active {
  color: #343a40;
}
[data-theme=dark] .navbar-themed .navbar-brand,
[data-theme=dark] .navbar-themed .navbar-nav .nav-link.active {
  color: rgba(255, 255, 255, 0.9);
}
[data-theme=light] .navbar-themed .navbar-nav .nav-link {
  color: rgba(52, 58, 64, 0.72);
}
[data-theme=dark] .navbar-themed .navbar-nav .nav-link {
  color: rgba(255, 255, 255, 0.5);
}

.text-themed {
  color: var(--site-text);
}

.bg-themed {
  background-color: var(--site-bg);
}

[data-theme=dark] {
  --site-bg: #17191a;
  --site-text: rgba(255, 255, 255, 0.9);
  --site-primary: #8187bc;
  --text-muted: rgba(255, 255, 255, 0.7);
  --control-border: #6f7376;
  --card-bg: rgba(255, 255, 255, 0.04);
  --card-hover-bg: rgba(255, 255, 255, 0.08);
  --card-border-color: rgba(255, 255, 255, 0.12);
  --card-body-bg: rgba(0, 0, 0, 0.7);
}
[data-theme=dark] html,
[data-theme=dark] body {
  background-color: var(--site-bg) !important;
  color: var(--site-text) !important;
}

.text-muted {
  color: var(--text-muted) !important;
}

.bg-blog,
.badge-blog,
.card.bg-blog,
.card-header.bg-blog,
.card-footer.bg-blog {
  background-color: var(--blog-bg, var(--blog)) !important;
  border-color: var(--blog-bg, var(--blog)) !important;
  color: #fff !important;
}

a.card.bg-blog:hover,
.card.bg-blog:hover {
  color: #fff !important;
}

a.card.border-blog:hover, a.card.border-blog:focus, a.card.border-blog:focus-within,
.card.border-blog:hover,
.card.border-blog:focus,
.card.border-blog:focus-within {
  border-color: var(--blog) !important;
}
a.card.border-blog:hover .card-title, a.card.border-blog:focus .card-title, a.card.border-blog:focus-within .card-title,
.card.border-blog:hover .card-title,
.card.border-blog:focus .card-title,
.card.border-blog:focus-within .card-title {
  color: var(--blog) !important;
}

.text-blog {
  color: var(--blog) !important;
}

.card.border-blog,
.card-header.border-blog,
.card-footer.border-blog {
  border-color: var(--blog) !important;
}

.bg-links,
.badge-links,
.card.bg-links,
.card-header.bg-links,
.card-footer.bg-links {
  background-color: var(--links-bg, var(--links)) !important;
  border-color: var(--links-bg, var(--links)) !important;
  color: #fff !important;
}

a.card.bg-links:hover,
.card.bg-links:hover {
  color: #fff !important;
}

a.card.border-links:hover, a.card.border-links:focus, a.card.border-links:focus-within,
.card.border-links:hover,
.card.border-links:focus,
.card.border-links:focus-within {
  border-color: var(--links) !important;
}
a.card.border-links:hover .card-title, a.card.border-links:focus .card-title, a.card.border-links:focus-within .card-title,
.card.border-links:hover .card-title,
.card.border-links:focus .card-title,
.card.border-links:focus-within .card-title {
  color: var(--links) !important;
}

.text-links {
  color: var(--links) !important;
}

.card.border-links,
.card-header.border-links,
.card-footer.border-links {
  border-color: var(--links) !important;
}

.bg-fiction,
.badge-fiction,
.card.bg-fiction,
.card-header.bg-fiction,
.card-footer.bg-fiction {
  background-color: var(--fiction-bg, var(--fiction)) !important;
  border-color: var(--fiction-bg, var(--fiction)) !important;
  color: #fff !important;
}

a.card.bg-fiction:hover,
.card.bg-fiction:hover {
  color: #fff !important;
}

a.card.border-fiction:hover, a.card.border-fiction:focus, a.card.border-fiction:focus-within,
.card.border-fiction:hover,
.card.border-fiction:focus,
.card.border-fiction:focus-within {
  border-color: var(--fiction) !important;
}
a.card.border-fiction:hover .card-title, a.card.border-fiction:focus .card-title, a.card.border-fiction:focus-within .card-title,
.card.border-fiction:hover .card-title,
.card.border-fiction:focus .card-title,
.card.border-fiction:focus-within .card-title {
  color: var(--fiction) !important;
}

.text-fiction {
  color: var(--fiction) !important;
}

.card.border-fiction,
.card-header.border-fiction,
.card-footer.border-fiction {
  border-color: var(--fiction) !important;
}

.bg-philosophy,
.badge-philosophy,
.card.bg-philosophy,
.card-header.bg-philosophy,
.card-footer.bg-philosophy {
  background-color: var(--philosophy-bg, var(--philosophy)) !important;
  border-color: var(--philosophy-bg, var(--philosophy)) !important;
  color: #fff !important;
}

a.card.bg-philosophy:hover,
.card.bg-philosophy:hover {
  color: #fff !important;
}

a.card.border-philosophy:hover, a.card.border-philosophy:focus, a.card.border-philosophy:focus-within,
.card.border-philosophy:hover,
.card.border-philosophy:focus,
.card.border-philosophy:focus-within {
  border-color: var(--philosophy) !important;
}
a.card.border-philosophy:hover .card-title, a.card.border-philosophy:focus .card-title, a.card.border-philosophy:focus-within .card-title,
.card.border-philosophy:hover .card-title,
.card.border-philosophy:focus .card-title,
.card.border-philosophy:focus-within .card-title {
  color: var(--philosophy) !important;
}

.text-philosophy {
  color: var(--philosophy) !important;
}

.card.border-philosophy,
.card-header.border-philosophy,
.card-footer.border-philosophy {
  border-color: var(--philosophy) !important;
}

.bg-politics,
.badge-politics,
.card.bg-politics,
.card-header.bg-politics,
.card-footer.bg-politics {
  background-color: var(--politics-bg, var(--politics)) !important;
  border-color: var(--politics-bg, var(--politics)) !important;
  color: #fff !important;
}

a.card.bg-politics:hover,
.card.bg-politics:hover {
  color: #fff !important;
}

a.card.border-politics:hover, a.card.border-politics:focus, a.card.border-politics:focus-within,
.card.border-politics:hover,
.card.border-politics:focus,
.card.border-politics:focus-within {
  border-color: var(--politics) !important;
}
a.card.border-politics:hover .card-title, a.card.border-politics:focus .card-title, a.card.border-politics:focus-within .card-title,
.card.border-politics:hover .card-title,
.card.border-politics:focus .card-title,
.card.border-politics:focus-within .card-title {
  color: var(--politics) !important;
}

.text-politics {
  color: var(--politics) !important;
}

.card.border-politics,
.card-header.border-politics,
.card-footer.border-politics {
  border-color: var(--politics) !important;
}

.navbar-brand-custom {
  font-size: 1.5rem;
  font-weight: 700;
  margin-bottom: 0;
}

html {
  padding-left: calc(100vw - 100%);
}

body {
  font-family: Charter, "Bitstream Charter", "Sitka Text", Cambria, Georgia, serif;
  font-size: 1rem;
  font-weight: 400;
}

picture {
  display: contents;
}

.text-start {
  text-align: left;
}

/* Bootstrap 4 ships .text-decoration-none but not .text-decoration-underline
   — that utility arrived in Bootstrap 5. The site description asks for it
   so the "a PhD in political science" link stands out; without it the
   class silently does nothing and the link renders the same muted grey
   as the text around it. */
.text-decoration-underline {
  text-decoration: underline !important;
  text-underline-offset: 0.15em;
}

.badge {
  font-weight: 500;
  color: #fff;
}

.bg-light, .bg-light *,
.badge-light,
.badge-light * {
  color: #343a40;
}

.bg-dark, .bg-dark *,
.badge-dark,
.badge-dark * {
  color: rgba(255, 255, 255, 0.9);
}

a .badge,
.badge a,
[class*=badge-] {
  color: #fff;
}

.desc a {
  color: var(--site-primary, #4a4f7a);
  text-decoration: underline;
  text-decoration-thickness: 0.06em;
  text-underline-offset: 0.15em;
  transition: text-decoration-thickness 0.15s ease-in-out;
}
.desc a:hover, .desc a:focus-visible {
  text-decoration-thickness: 0.12em;
}

.bg-site-primary {
  background-color: #4a4f7a;
  color: #fff;
}

.border-site-primary,
.border-primary {
  border-color: var(--site-primary, #4a4f7a);
}

.text-site-primary {
  color: var(--site-primary, #4a4f7a);
}

.btn-outline-site-primary {
  color: var(--site-primary, #4a4f7a);
  border-color: var(--site-primary, #4a4f7a);
  background-color: transparent;
}
.btn-outline-site-primary:hover, .btn-outline-site-primary:focus, .btn-outline-site-primary:active {
  background-color: #4a4f7a;
  border-color: #4a4f7a;
  color: #fff;
}

.rectangle-image {
  width: 100%;
  height: auto;
  border-radius: 15px;
  object-fit: cover;
  object-position: center;
}

hr {
  border: none;
  height: 1px;
  background-color: var(--site-primary, #4a4f7a);
  opacity: 1;
  margin: 0.5rem auto;
}

.text-end {
  text-align: right;
}

.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

:focus-visible {
  outline: 2px solid var(--site-primary);
  outline-offset: 2px;
}

.page-content-wrapper {
  margin-top: 0rem;
  margin-bottom: 3rem;
}

@keyframes fade-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
.fade-in {
  animation: fade-in 1s ease 0.15s both;
}
@media (prefers-reduced-motion: reduce) {
  .fade-in {
    animation: none;
  }
}

@media only screen and (min-width: 768px) {
  .latest-page-wrapper {
    padding-left: 0.75rem;
    padding-right: 0.75rem;
  }
}

.markdown-body h1,
.markdown-body h2 {
  margin-top: 2rem;
}
.markdown-body hr {
  background: #6c757d;
}
.markdown-body img:not(.emoji) {
  display: block;
  max-width: 100%;
  height: auto;
  margin: 1rem auto;
}
.markdown-body .video {
  position: relative;
  padding-bottom: 56.25%;
  margin-bottom: 1rem;
  width: 100%;
}
.markdown-body .video iframe {
  position: absolute;
  height: 100%;
  width: 100%;
}
.markdown-body {
  /* Prose links carry an underline rather than relying on colour alone:
     the accent and the body text sit only 1.47:1 apart in light mode,
     so colour cannot be the only cue for what is a link (WCAG 1.4.1).
     Component links — nav, cards, footer, TOC, search results — keep
     their underline-free look, because there the whole object is the
     link. `.no-underline` opts a specific link out. */
}
.markdown-body a:not(.btn):not([class^=carousel-]):not([class^=list-]):not(.no-underline) {
  color: var(--site-primary);
  text-decoration: underline;
  text-decoration-thickness: 0.06em;
  text-underline-offset: 0.15em;
  transition: text-decoration-thickness 0.15s ease-in-out;
}
.markdown-body a:not(.btn):not([class^=carousel-]):not([class^=list-]):not(.no-underline):hover, .markdown-body a:not(.btn):not([class^=carousel-]):not([class^=list-]):not(.no-underline):focus-visible {
  text-decoration-thickness: 0.12em;
}
.markdown-body pre {
  background: var(--site-bg);
  border: 1px solid #ddd;
  color: #343a40;
  font-family: monospace;
  font-size: 0.9rem;
  line-height: 1.35;
  margin-bottom: 1.6em;
  max-width: 100%;
  padding: 1rem 1.25rem;
  display: block;
  page-break-inside: avoid;
  overflow: auto;
  word-wrap: break-word;
}
.markdown-body code.highlighter-rouge {
  background-color: var(--site-bg);
  color: #343a40;
  border-radius: 3px;
  margin: 0;
  padding: 0.2em 0.65em;
}
.markdown-body blockquote {
  border-left: 0.25em solid var(--site-primary);
  color: var(--text-muted);
  padding: 0 1rem;
}
.markdown-body ul.task-list {
  list-style: none;
  padding-left: 1.5rem;
}
.markdown-body input.task-list-item-checkbox {
  margin-right: 0.5rem;
  vertical-align: middle;
}
.markdown-body table:not(.highlight) {
  display: block;
  overflow-x: auto;
  margin: 1rem 0;
}
.markdown-body table:not(.highlight) td, .markdown-body table:not(.highlight) th {
  border: 1px solid #ddd;
  padding: 0.5rem 1rem;
}
.markdown-body table:not(.highlight) th {
  padding-top: 0.75rem;
  padding-bottom: 0.75rem;
  font-weight: 500;
  text-align: left;
  background-color: #4a4f7a;
  color: white;
}
.markdown-body table:not(.highlight) tr:nth-child(even) {
  background-color: rgba(0, 0, 0, 0.05);
}

.post-content,
.blog-post .markdown-body,
.project-description-container {
  max-width: 65ch;
  margin-left: auto;
  margin-right: auto;
}

[data-theme=dark] .table {
  color: var(--site-text);
}
[data-theme=dark] .table td, [data-theme=dark] .table .markdown-body table:not(.highlight) th, .markdown-body table:not(.highlight) [data-theme=dark] .table th, [data-theme=dark] .table th {
  border-color: var(--card-border-color);
}
[data-theme=dark] .table tr:nth-child(even) {
  background-color: rgba(255, 255, 255, 0.03);
}
[data-theme=dark] pre,
[data-theme=dark] code.highlighter-rouge {
  background-color: rgba(255, 255, 255, 0.06);
  color: #f8f9fa;
  border-color: var(--card-border-color);
}

.nav-item.active::after, .nav-link::after,
.navbar-brand::after {
  content: "";
  display: block;
  height: 0.1em;
  background: #8187bc;
}

.nav-link::after,
.navbar-brand::after {
  width: 0;
  transition: width 0.35s;
}

.nav-link::after {
  margin-top: -0.2em;
}

.nav-link:hover::after,
.navbar-brand:hover::after {
  width: 100%;
}

.nav-item.active {
  font-weight: 700;
}
.nav-item.active::after {
  width: 100%;
}

.navbar-brand {
  margin-bottom: -2px;
  position: relative;
  display: inline-block;
}
.navbar-brand::after {
  position: absolute;
  left: 0;
  bottom: 8px;
}

.navbar-nav {
  align-items: flex-end;
}

.nav-link {
  display: inline-block;
  width: auto;
  padding-top: 0rem;
  padding-bottom: 0rem;
}

@media (max-width: 991.98px) {
  .navbar-nav .nav-link {
    margin-top: -0.15rem;
    margin-bottom: 0.25rem;
  }
}
.navbar {
  margin-bottom: -1rem;
}

.card-footer {
  align-items: flex-start;
}

a.post.card,
.post.card {
  border-radius: 15px;
  overflow: hidden;
  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.04);
  text-decoration: none;
  transition: box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out, border-color 0.2s ease-in-out;
}
[data-theme=light] a.post.card,
[data-theme=light] .post.card {
  background-color: #F2F0EB;
}
[data-theme=dark] a.post.card,
[data-theme=dark] .post.card {
  background-color: #343a40;
}
[data-theme=light] a.post.card,
[data-theme=light] .post.card {
  color: #343a40;
}
[data-theme=dark] a.post.card,
[data-theme=dark] .post.card {
  color: rgba(255, 255, 255, 0.9);
}
a.post.card .card-title,
a.post.card .card-text,
.post.card .card-title,
.post.card .card-text {
  color: inherit;
}
a.post.card .card-img-top,
.post.card .card-img-top {
  width: 100%;
  height: auto;
  display: block;
  object-fit: cover;
}
a.post.card:hover .card-title, a.post.card:focus-within .card-title,
.post.card:hover .card-title,
.post.card:focus-within .card-title {
  color: var(--card-accent);
}
a.post.card,
.post.card {
  border: 1px solid var(--card-border-color, rgba(128, 128, 128, 0.08));
  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.02);
  height: 100%;
}
a.post.card:hover .card-title a, a.post.card:focus .card-title a, a.post.card:focus-within .card-title a,
.post.card:hover .card-title a,
.post.card:focus .card-title a,
.post.card:focus-within .card-title a {
  color: var(--site-primary, #4a4f7a);
}
a.post.card:hover, a.post.card:focus, a.post.card:focus-within,
.post.card:hover,
.post.card:focus,
.post.card:focus-within {
  transform: translateY(-2px);
}
a.post.card .card-body, a.post.card .card-footer, a.post.card .card-text, a.post.card span, a.post.card p,
.post.card .card-body,
.post.card .card-footer,
.post.card .card-text,
.post.card span,
.post.card p {
  color: inherit;
  text-decoration: none;
}
a.post.card .card-body,
.post.card .card-body {
  padding: 1.25rem;
  padding-bottom: 0.25rem;
}
a.post.card .card-body .card-title,
.post.card .card-body .card-title {
  font-size: 1.15rem;
  font-weight: 600;
  line-height: 1.35;
  margin-bottom: 0.5rem;
  transition: color 0.2s ease-in-out;
}
a.post.card .card-body .card-title a,
.post.card .card-body .card-title a {
  color: inherit;
  text-decoration: none;
  transition: color 0.2s ease-in-out;
}
a.post.card .card-body .card-title a:hover,
.post.card .card-body .card-title a:hover {
  text-decoration: none;
}
a.post.card .card-body .card-text,
.post.card .card-body .card-text {
  font-size: 0.9rem;
  line-height: 1.5;
  opacity: 0.85;
}
a.post.card .card-footer,
.post.card .card-footer {
  font-size: 0.8rem;
  background: transparent;
  border-top: 1px solid var(--card-border-color, rgba(128, 128, 128, 0.08));
  padding: 0.25rem 0.75rem;
  opacity: 0.75;
}
a.post.card .badge,
.post.card .badge {
  font-size: 0.8rem;
  padding: 0.25em 0.6em;
}

.project-grid {
  columns: 2;
  column-gap: 1rem;
}
@media (min-width: 576px) {
  .project-grid {
    columns: 3;
  }
}
@media (min-width: 992px) {
  .project-grid {
    columns: 4;
  }
}

.project.card {
  border-radius: 15px;
  overflow: hidden;
  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.04);
  text-decoration: none;
  transition: box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out, border-color 0.2s ease-in-out;
}
[data-theme=light] .project.card {
  background-color: #F2F0EB;
}
[data-theme=dark] .project.card {
  background-color: #343a40;
}
[data-theme=light] .project.card {
  color: #343a40;
}
[data-theme=dark] .project.card {
  color: rgba(255, 255, 255, 0.9);
}
.project.card .card-title,
.project.card .card-text {
  color: inherit;
}
.project.card .card-img-top {
  width: 100%;
  height: auto;
  display: block;
  object-fit: cover;
}
.project.card:hover .card-title, .project.card:focus-within .card-title {
  color: var(--card-accent);
}
.project.card {
  border: none;
  display: inline-block;
  width: 100%;
  break-inside: avoid;
  margin-bottom: 1rem;
  transition: box-shadow 0.2s ease;
}
.project.card .card-body {
  border-radius: 0.5rem;
  backdrop-filter: blur(4px);
  padding: 0.5rem 0.75rem;
  margin: 0.5rem;
}
[data-theme=light] .project.card .card-body {
  background-color: rgba(0, 0, 0, 0.03);
}
[data-theme=dark] .project.card .card-body {
  background-color: rgba(0, 0, 0, 0.7);
}
.project.card .card-body .card-title {
  font-size: 0.9rem;
  font-weight: 600;
  margin-bottom: 0.25rem;
  transition: color 0.2s ease;
  text-align: center;
}
.project.card .card-body .card-text {
  font-size: 0.8rem;
  line-height: 1.1;
  margin-bottom: 0.5rem;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.project.card .card-body .badge {
  background-color: var(--card-badge-fill, #4a4f7a);
  color: #fff;
  border: 1px solid var(--card-badge-fill, #4a4f7a);
  border-radius: 0.25rem;
  padding: 0.25em 0.6em;
  font-size: 0.7rem;
  font-weight: 500;
}
.project.card .card-badges {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.25rem;
  margin-bottom: 0;
}
.project.card:hover, .project.card:focus-within {
  transform: translateY(-2px);
}

.photography.card {
  border-radius: 15px;
  overflow: hidden;
  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.04);
  text-decoration: none;
  transition: box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out, border-color 0.2s ease-in-out;
}
[data-theme=light] .photography.card {
  background-color: #F2F0EB;
}
[data-theme=dark] .photography.card {
  background-color: #343a40;
}
[data-theme=light] .photography.card {
  color: #343a40;
}
[data-theme=dark] .photography.card {
  color: rgba(255, 255, 255, 0.9);
}
.photography.card .card-title,
.photography.card .card-text {
  color: inherit;
}
.photography.card .card-img-top {
  width: 100%;
  height: auto;
  display: block;
  object-fit: cover;
}
.photography.card:hover .card-title, .photography.card:focus-within .card-title {
  color: var(--card-accent);
}
.photography.card {
  position: relative;
  display: block;
  width: 100%;
  border: none;
  transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
}
.photography.card:hover {
  transform: translateY(-2px);
  text-decoration: none;
  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.08);
}
.photography.card .card-img-top {
  aspect-ratio: 3/2;
}
.photography.card .card-type-badge {
  position: absolute;
  z-index: 2;
  padding: 0.1rem 0.25rem;
  font-size: 0.7rem;
  border-radius: 0.25rem;
  backdrop-filter: blur(4px);
  border: 1px solid var(--card-accent);
}
[data-theme=light] .photography.card .card-type-badge {
  background-color: rgba(255, 255, 255, 0.85);
}
[data-theme=dark] .photography.card .card-type-badge {
  background-color: rgba(0, 0, 0, 0.75);
}
[data-theme=light] .photography.card .card-type-badge {
  color: #4a4f7a;
}
[data-theme=dark] .photography.card .card-type-badge {
  color: rgba(255, 255, 255, 0.9);
}
.photography.card .card-type-badge {
  top: 0.5rem;
  right: 0.5rem;
}
.photography.card .card-body {
  border-radius: 0.5rem;
  backdrop-filter: blur(4px);
  position: absolute;
  bottom: 0.5rem;
  right: 0.5rem;
  width: max-content;
  max-width: calc(100% - 1rem);
  padding: 0.25rem 0.5rem;
}
[data-theme=light] .photography.card .card-body {
  background-color: rgba(255, 255, 255, 0.55);
}
[data-theme=dark] .photography.card .card-body {
  background-color: rgba(0, 0, 0, 0.55);
}
.photography.card .card-body {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  text-align: right;
}
.photography.card .card-body .card-title {
  font-size: 0.9rem;
  font-weight: 600;
  margin-bottom: 0;
  text-align: right;
}
.photography.card .card-body .card-text {
  font-size: 0.8rem;
  line-height: 1.1;
  margin-bottom: 0;
  text-align: right;
}

.latest.card {
  border-radius: 15px;
  overflow: hidden;
  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.04);
  text-decoration: none;
  transition: box-shadow 0.2s ease-in-out, transform 0.2s ease-in-out, border-color 0.2s ease-in-out;
}
[data-theme=light] .latest.card {
  background-color: #F2F0EB;
}
[data-theme=dark] .latest.card {
  background-color: #343a40;
}
[data-theme=light] .latest.card {
  color: #343a40;
}
[data-theme=dark] .latest.card {
  color: rgba(255, 255, 255, 0.9);
}
.latest.card .card-title,
.latest.card .card-text {
  color: inherit;
}
.latest.card .card-img-top {
  width: 100%;
  height: auto;
  display: block;
  object-fit: cover;
}
.latest.card:hover .card-title, .latest.card:focus-within .card-title {
  color: var(--card-accent);
}
[data-theme=light] .latest.card {
  background-color: #F2F0EB;
}
[data-theme=dark] .latest.card {
  background-color: #343a40;
}
.latest.card {
  display: flex;
  flex-direction: column-reverse;
  width: 100%;
  height: 100%;
  position: relative;
  transition: box-shadow 0.2s ease, transform 0.2s ease-in-out;
}
.latest.card:hover, .latest.card:focus, .latest.card:focus-within {
  transform: translateY(-2px);
}
.latest.card .card-img-wrapper {
  position: relative;
  width: 100%;
  margin-bottom: auto;
}
.latest.card .card-type-badge {
  position: absolute;
  z-index: 2;
  padding: 0.1rem 0.25rem;
  font-size: 0.7rem;
  font-weight: 600;
  border-radius: 0.25rem;
  backdrop-filter: blur(4px);
  border: 1px solid var(--card-border-color, rgba(128, 128, 128, 0.08));
}
[data-theme=light] .latest.card .card-type-badge {
  background-color: rgba(255, 255, 255, 0.75);
}
[data-theme=dark] .latest.card .card-type-badge {
  background-color: rgba(0, 0, 0, 0.75);
}
[data-theme=light] .latest.card .card-type-badge {
  color: #343a40;
}
[data-theme=dark] .latest.card .card-type-badge {
  color: rgba(255, 255, 255, 0.9);
}
.latest.card .card-type-badge {
  bottom: 0.75rem;
  right: 0.75rem;
}
.latest.card .card-body {
  border-radius: 0.5rem;
  backdrop-filter: blur(4px);
  width: max-content;
  max-width: calc(100% - 0.5rem * 2);
  margin: 0.5rem auto 0.5rem 0.5rem;
  padding: 0.5rem 0.75rem;
  background-color: var(--card-body-bg);
  display: flex;
  flex-direction: column;
  text-align: left;
}
.latest.card .card-body .card-title {
  font-weight: 600;
  margin-bottom: 0.1rem;
  transition: color 0.2s ease;
}
.latest.card .card-body .card-text {
  line-height: 1.1;
  margin-bottom: 0;
}
.latest.card.latest-card-show .card-title {
  font-size: 0.8rem;
}
.latest.card.latest-card-show .card-text {
  font-size: 0.7rem;
}
.latest.card.latest-card-feature .card-title {
  font-size: 0.9rem;
}
.latest.card.latest-card-feature .card-text {
  font-size: 0.8rem;
}
.latest.card.latest-card-feature .card-img-top {
  height: 150px;
}

.linklog-content a {
  color: var(--site-primary);
}
.linklog-content a:hover {
  opacity: 0.8;
  text-decoration: underline;
}
.linklog-content blockquote {
  border-left: 0.25em solid var(--site-primary);
  color: var(--text-muted);
  padding: 0 1rem;
  margin: 1rem 0;
}

.linklog-content > *:last-child {
  margin-bottom: 0;
}

[data-theme=dark] .card,
[data-theme=dark] .post.card,
[data-theme=dark] .latest.card,
[data-theme=dark] .project.card {
  border-color: var(--card-border-color);
  color: var(--site-text);
}
[data-theme=dark] .card .card-body,
[data-theme=dark] .card .card-footer,
[data-theme=dark] .card .card-text,
[data-theme=dark] .card p,
[data-theme=dark] .card span,
[data-theme=dark] .post.card .card-body,
[data-theme=dark] .post.card .card-footer,
[data-theme=dark] .post.card .card-text,
[data-theme=dark] .post.card p,
[data-theme=dark] .post.card span,
[data-theme=dark] .latest.card .card-body,
[data-theme=dark] .latest.card .card-footer,
[data-theme=dark] .latest.card .card-text,
[data-theme=dark] .latest.card p,
[data-theme=dark] .latest.card span,
[data-theme=dark] .project.card .card-body,
[data-theme=dark] .project.card .card-footer,
[data-theme=dark] .project.card .card-text,
[data-theme=dark] .project.card p,
[data-theme=dark] .project.card span {
  color: inherit;
}

/* --- Image Grid (Masonry.js Powered) --- */
.image-grid {
  margin: 0;
  padding: 0;
}

.grid-item {
  width: calc((100% - 32px) / 3);
  margin-bottom: 16px;
  padding-top: 0;
  box-sizing: border-box;
}
@media (max-width: 992px) {
  .grid-item {
    width: calc((100% - 16px) / 2);
  }
}
@media (max-width: 576px) {
  .grid-item {
    width: calc((100% - 16px) / 2);
  }
}
.grid-item img {
  width: 100%;
  height: auto;
  display: block;
  border-radius: 8px;
  margin-top: 0;
}

/* --- Editorial Gallery --- */
.photography-gallery {
  max-width: 1000px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 3rem;
}

.editorial-spread {
  width: 100%;
}

.gallery-grid {
  display: grid;
  grid-template-columns: repeat(12, 1fr);
  grid-auto-rows: 130px;
  width: 100%;
  gap: 6px;
}

.photo-card {
  position: relative;
  overflow: hidden;
  background: transparent;
  min-height: 0;
  min-width: 0;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}
.photo-card img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
  transition: transform 0.4s ease;
}
.photo-card img:hover {
  transform: scale(1.02);
}

/* On spread pages the gallery sits inside .markdown-body, whose generic  
   img rule (height:auto + 1rem margins, specificity 0-2-1) beats  
   .photo-card img (0-1-1) and letterboxes every photo. This stronger  
   selector (0-3-1) re-takes control so cover-fit fills the card. */
.markdown-body .gallery-grid .photo-card img {
  width: 100%;
  height: 100%;
  margin: 0;
}

/* The featured image sits outside .gallery-grid, so the markdown body's  
   generic img rule (1rem margins, height:auto) applies to it and pushes  
   it out of its 400px frame. Pin it the same way as the gallery tiles. */
.markdown-body .project-featured-image .photo-card img {
  width: 100%;
  height: 100%;
  margin: 0;
}

/* --- Layout Variations --- */
/* The editorial placements only apply from tablet up. Below that
   the single-column rule in the responsive block takes over, so the
   two never compete for the same grid cells. */
@media (min-width: 769px) {
  /* --- Layout Variations --- */
  /* Full-Width / Banners */
  .layout-single {
    grid-auto-rows: 420px;
  }
  .layout-single .photo-card {
    grid-column: span 12;
    grid-row: span 1;
    max-width: 880px;
    margin: 0 auto;
  }
  .layout-stacked-horizontal,
  .layout-panorama-banner {
    grid-auto-rows: 400px;
  }
  .layout-stacked-horizontal .photo-card,
  .layout-panorama-banner .photo-card {
    grid-column: span 12;
    grid-row: span 1;
  }
  /* Symmetric Grids */
  .layout-split-2,
  .layout-grid-2x2 {
    grid-auto-rows: 300px;
  }
  .layout-split-2 .photo-card,
  .layout-grid-2x2 .photo-card {
    grid-column: span 6;
    grid-row: span 1;
  }
  .layout-trio {
    grid-auto-rows: 260px;
  }
  .layout-trio .photo-card {
    grid-column: span 4;
    grid-row: span 1;
  }
  .layout-quad-grid {
    grid-auto-rows: 140px;
  }
  .layout-quad-grid [class*=quad-] {
    grid-column: span 6;
    grid-row: span 2;
  }
  /* Spotlights & Duos */
  .layout-center-spotlight {
    grid-auto-rows: 300px;
  }
  .layout-center-spotlight .photo-card {
    grid-column: span 3;
    grid-row: span 1;
  }
  .layout-center-spotlight .photo-card.spotlight {
    grid-column: span 6;
  }
  .layout-balanced-duo .duo-left {
    grid-column: span 7;
    grid-row: span 3;
  }
  .layout-balanced-duo .duo-right {
    grid-column: span 5;
    grid-row: span 3;
  }
  /* Asymmetric 5/7 Splits */
  .layout-asym-left .wide-col, .layout-asym-left .portrait-col,
  .layout-portrait-stack .wide-col,
  .layout-portrait-stack .portrait-col {
    grid-column: span 5;
    grid-row: span 2;
  }
  .layout-asym-left .stack-top, .layout-asym-left .stack-bottom,
  .layout-asym-left [class*=stack-right-],
  .layout-portrait-stack .stack-top,
  .layout-portrait-stack .stack-bottom,
  .layout-portrait-stack [class*=stack-right-] {
    grid-column: span 7;
    grid-row: span 1;
  }
  .layout-asym-right .stack-top {
    grid-column: 1/span 5;
    grid-row: 1;
  }
  .layout-asym-right .stack-bottom {
    grid-column: 1/span 5;
    grid-row: 2;
  }
  .layout-asym-right .wide-col {
    grid-column: 6/span 7;
    grid-row: 1/span 2;
  }
  /* Balanced Reversible Splits */
  .layout-asym-split-balanced-left .tall-left {
    grid-column: span 5;
    grid-row: span 3;
  }
  .layout-asym-split-balanced-left .wide-right {
    grid-column: span 7;
    grid-row: span 3;
  }
  .layout-asym-split-balanced-right .wide-left {
    grid-column: span 7;
    grid-row: span 3;
  }
  .layout-asym-split-balanced-right .tall-right {
    grid-column: span 5;
    grid-row: span 3;
  }
  /* Complex Stacks */
  .layout-top-hero-split {
    grid-auto-rows: 190px;
  }
  .layout-top-hero-split .hero-top {
    grid-column: span 12;
    grid-row: span 2;
  }
  .layout-top-hero-split .photo-card:not(.hero-top) {
    grid-column: span 6;
    grid-row: span 1;
  }
  .layout-hero-double-stack-tall .hero-wide {
    grid-column: span 6;
    grid-row: span 2;
  }
  .layout-hero-double-stack-tall .stack-top, .layout-hero-double-stack-tall .stack-bottom {
    grid-column: span 3;
    grid-row: span 1;
  }
  .layout-hero-double-stack-tall .tall-card {
    grid-column: span 3;
    grid-row: span 2;
  }
  .layout-corner-anchor .hero-wide {
    grid-column: span 8;
    grid-row: span 2;
  }
  .layout-corner-anchor .tall-side {
    grid-column: span 4;
    grid-row: span 3;
  }
  .layout-corner-anchor .stack-bottom-1,
  .layout-corner-anchor .stack-bottom-2 {
    grid-column: span 4;
    grid-row: span 1;
  }
  .layout-editorial-quartet .quartet-top-wide {
    grid-column: span 8;
    grid-row: span 2;
  }
  .layout-editorial-quartet .quartet-side {
    grid-column: span 4;
    grid-row: span 2;
  }
  .layout-editorial-quartet .quartet-bottom-1,
  .layout-editorial-quartet .quartet-bottom-2 {
    grid-column: span 6;
    grid-row: span 2;
  }
}
/* --- Responsive --- */
@media (max-width: 768px) {
  .photography-gallery {
    gap: 1.5rem;
  }
  /* Every layout collapses to a single column on a phone: one photo per
     row, each at its own aspect ratio. Nothing is cropped, squeezed into
     a sliver, or overlapped by the spread below it. The editorial
     placements live behind @media (min-width: 769px), so the two rules
     can never compete for the same grid cells. */
  .gallery-grid {
    grid-template-columns: 1fr;
    grid-auto-rows: auto;
    height: auto;
  }
  .gallery-grid .photo-card {
    grid-column: 1/-1;
    grid-row: auto;
    height: auto;
  }
  /* A pair layout keeps its pair on a phone: two photos side by side,
     each still at its own aspect ratio, so neither is cropped. The two
     tiles are usually the same shape and so the same height; where they
     differ, `align-items: start` leaves the shorter one at its own
     height rather than stretching it, and the gap beneath it is simply
     the space the shorter photo leaves. */
  .gallery-grid.layout-split-2,
  .gallery-grid.layout-grid-2x2 {
    grid-template-columns: repeat(2, 1fr);
    align-items: start;
  }
  .gallery-grid.layout-split-2 .photo-card,
  .gallery-grid.layout-grid-2x2 .photo-card {
    grid-column: auto;
  }
  /* On a phone the photo's own ratio sets the height. From tablet up the
     image is pinned to the cell instead, so cover-fit fills the tile. */
  .markdown-body .gallery-grid .photo-card img {
    height: auto;
  }
  /* The featured image keeps the same rule: on a phone a 400px letterbox  
     would crop a landscape photo to a narrow band. */
  .photo-card--featured {
    height: auto;
  }
  .markdown-body .project-featured-image .photo-card img {
    height: auto;
  }
  .photo-card-img--featured {
    height: auto;
  }
}
.post-metadata {
  font-size: 0.8rem;
  margin-top: -3px;
  margin-bottom: 0.4rem;
  color: var(--text-muted);
}
.post-metadata .tag:hover {
  background-color: #4a4f7a;
  color: white;
}

.post-tags {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: 0.25rem;
  max-width: 65%;
}

.bibliography-body {
  border-radius: 15px;
  height: 100%;
  border: none;
  background: transparent;
}
.bibliography-body h3 {
  font-size: 1.15rem;
  font-weight: 600;
  margin-bottom: 0.35rem;
}
[data-theme=light] .bibliography-body h3 {
  border-bottom-color: rgba(0, 0, 0, 0.1);
}
[data-theme=dark] .bibliography-body h3 {
  border-bottom-color: rgba(255, 255, 255, 0.15);
}
.bibliography-body h5 {
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.5px;
  margin-top: 0.5rem;
  margin-bottom: 0.15rem;
  opacity: 0.7;
}
.bibliography-body ul {
  margin-top: 0;
  margin-bottom: 0;
}
.bibliography-body ul li {
  margin-left: 0.5rem;
  margin-bottom: 0;
  line-height: 1.1;
}
.bibliography-body ul span, .bibliography-body ul a {
  display: inline-block;
}
.bibliography-body ul span {
  color: var(--text-muted);
}
.bibliography-body ul a {
  color: var(--site-primary);
}
.bibliography-body ul a:hover {
  opacity: 0.8;
  text-decoration: underline;
}

#attribution {
  margin-right: 0;
  display: block;
  text-align: right;
}
#attribution a {
  text-decoration: none;
  font-weight: 700;
}
@media only screen and (min-width: 768px) {
  #attribution {
    writing-mode: vertical-rl;
    transform: rotate(180deg);
    position: fixed;
    bottom: 120px;
    right: 0.75rem;
  }
}

.trigger-btn {
  font-size: 0.9rem;
  font-weight: 700;
  font-family: inherit;
}
[data-theme=light] .trigger-btn {
  color: #656b71;
}
[data-theme=dark] .trigger-btn {
  color: #c5c7da;
}
.trigger-btn {
  background: none;
  border: none;
  padding: 0;
  display: inline-block;
  cursor: pointer;
  text-decoration: none;
  transition: color 0.2s ease-in-out, opacity 0.2s ease-in-out;
}
.trigger-btn:hover {
  color: var(--site-primary);
  opacity: 0.9;
}
.trigger-btn:focus-visible {
  outline: 2px dashed var(--site-primary);
  outline-offset: 4px;
}

.text-bubble p {
  font-size: 0.7rem;
  margin: 0;
}

#my-bubble {
  background-color: var(--site-bg);
  border: 1px solid var(--site-primary);
  color: var(--site-text, inherit);
  opacity: 1;
  position: fixed;
  margin: 0;
  inset: auto;
  bottom: 1rem;
  right: 1rem;
  text-align: left;
}
#my-bubble a {
  color: var(--site-primary);
  text-decoration: none;
}
#my-bubble a:hover {
  color: var(--site-primary);
  text-decoration: underline;
}

.close-btn {
  -webkit-appearance: none;
  appearance: none;
  background: transparent;
  border: none;
  padding: 0;
  cursor: pointer;
  font-size: inherit;
  color: inherit;
  float: right;
}
.close-btn:focus-visible {
  outline: 2px dashed var(--site-primary);
  outline-offset: 2px;
}

.custom-search-input {
  border-color: var(--control-border);
  background-color: transparent;
  color: inherit;
}
.custom-search-input:focus {
  border-color: var(--site-primary);
  box-shadow: 0 0 0 0.2rem rgba(129, 135, 188, 0.25);
}

.custom-search-addon {
  border-color: rgba(0, 0, 0, 0.125);
  background-color: #4a4f7a;
  color: #fff;
  border-top-right-radius: 0.25rem;
  border-bottom-right-radius: 0.25rem;
}

.custom-tags-btn {
  border-radius: 0.25rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

#results-container {
  list-style: none;
  border-radius: 0.25rem;
  overflow: hidden;
  border: 1px solid rgba(0, 0, 0, 0.125);
}
#results-container .list-group-item {
  background-color: transparent;
  border-color: rgba(0, 0, 0, 0.05);
  color: inherit;
}
#results-container .list-group-item:hover {
  background-color: rgba(0, 0, 0, 0.04);
  color: var(--site-primary);
  text-decoration: none;
}

#results-container:empty {
  display: none;
}

[data-theme=dark] .form-control,
[data-theme=dark] .custom-search-input {
  background-color: rgba(255, 255, 255, 0.05);
  border-color: var(--control-border);
  color: var(--site-text);
}
[data-theme=dark] .form-control:focus,
[data-theme=dark] .custom-search-input:focus {
  background-color: rgba(255, 255, 255, 0.08);
  color: var(--site-text);
}
[data-theme=dark] #results-container {
  border-color: var(--card-border-color);
}
[data-theme=dark] #results-container .list-group-item {
  background-color: var(--site-bg);
  border-color: var(--card-border-color);
  color: var(--site-text);
}
[data-theme=dark] #results-container .list-group-item:hover {
  background-color: rgba(255, 255, 255, 0.06);
}

.custom-toc,
.toc-wrapper {
  width: fit-content;
  min-width: 220px;
  border: 1px solid rgba(0, 0, 0, 0.125);
  border-radius: 0.25rem;
  overflow: hidden;
  background-color: transparent;
  display: flex;
  flex-direction: column;
  text-align: left;
}

.custom-toc summary.toc-header {
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
  background-color: #4a4f7a;
  color: #fff;
  padding: 0.5rem 0.75rem;
  user-select: none;
  list-style: none;
}
.custom-toc summary.toc-header::-webkit-details-marker {
  display: none;
}
.custom-toc .toc-arrow::after {
  content: "▼";
  font-size: 0.8rem;
  transition: transform 0.2s ease-in-out;
  display: inline-block;
}
.custom-toc details[open] .toc-arrow::after {
  transform: rotate(180deg);
}
.custom-toc .toc-body {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  text-align: left;
}
.custom-toc a.toc-item {
  display: block;
  text-align: left;
  width: 100%;
  padding: 0.5rem 1rem;
  color: var(--site-text);
  text-decoration: none;
  border-bottom: 1px solid rgba(0, 0, 0, 0.05);
  background-color: transparent;
  transition: all 0.15s ease-in-out;
}
.custom-toc a.toc-item:last-child {
  border-bottom: none;
}
.custom-toc a.toc-item:hover {
  background-color: rgba(0, 0, 0, 0.04);
  color: var(--site-primary);
  text-decoration: none;
  box-shadow: inset 4px 0 0 0 var(--site-primary);
}
.custom-toc a.toc-main-item {
  font-weight: 600;
  background-color: rgba(0, 0, 0, 0.02);
}
.custom-toc a.toc-subitem {
  padding-left: 2rem;
  font-size: 0.8rem;
  opacity: 0.8;
}

[data-theme=dark] .custom-toc,
[data-theme=dark] .toc-wrapper {
  border-color: var(--card-border-color);
  background-color: transparent;
}
[data-theme=dark] .custom-toc a.toc-item,
[data-theme=dark] .toc-wrapper a.toc-item {
  color: var(--site-text);
  border-bottom-color: rgba(255, 255, 255, 0.05);
}
[data-theme=dark] .custom-toc a.toc-item:hover,
[data-theme=dark] .toc-wrapper a.toc-item:hover {
  background-color: rgba(255, 255, 255, 0.06);
}
[data-theme=dark] .custom-toc a.toc-main-item,
[data-theme=dark] .toc-wrapper a.toc-main-item {
  background-color: rgba(255, 255, 255, 0.03);
}

.timeline-body {
  position: relative;
  border-radius: 0 15px 15px 0;
  padding: 1rem 0;
}
.timeline-body::after {
  content: "";
  width: 4px;
  height: 100%;
  background-color: var(--site-primary, #4a4f7a);
  position: absolute;
  left: -2px;
  top: 0;
}
.timeline-body .timeline-item {
  position: relative;
  margin-bottom: 2rem;
}
.timeline-body .timeline-item:last-child {
  margin-bottom: 0;
}
.timeline-body .timeline-item::after {
  content: "";
  width: 18px;
  height: 18px;
  border-radius: 50%;
  border: 3px solid var(--site-primary, #4a4f7a);
  background-color: var(--site-bg);
  position: absolute;
  left: -11px;
  top: 12px;
  z-index: 10;
}
.timeline-body .timeline-item .content {
  margin: 0 1rem 0 2rem;
  padding: 1.25rem;
  background-color: var(--card-bg, rgba(128, 128, 128, 0.04));
  border: 1px solid var(--card-border-color, rgba(128, 128, 128, 0.12));
  border-radius: 15px;
  box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.02);
  transition: background-color 0.2s ease, border-color 0.2s ease;
}
.timeline-body .timeline-item .content:hover {
  background-color: var(--card-hover-bg, rgba(128, 128, 128, 0.08));
}
.timeline-body .timeline-item .content h5 {
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.35;
  overflow-wrap: break-word;
  margin-bottom: 0.25rem;
}
.timeline-body .timeline-item .content .date {
  margin-top: 0;
  margin-bottom: 1rem;
  color: var(--text-muted);
  font-size: 0.8rem;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}
.timeline-body .timeline-item .content p {
  font-size: 0.9rem;
  line-height: 1.65;
  margin-bottom: 1rem;
  text-align: left;
}
.timeline-body .timeline-item .content p a {
  color: var(--site-primary, #4a4f7a);
  text-decoration: none;
}
.timeline-body .timeline-item .content p a:hover {
  color: var(--site-primary, #4a4f7a);
  text-decoration: underline;
}
.timeline-body .timeline-item .content h6:last-child {
  font-size: 0.8rem;
  margin-top: 1rem;
  word-break: break-all;
}
.timeline-body .timeline-item .content h6:last-child a {
  color: var(--site-primary, #4a4f7a);
  text-decoration: none;
}
.timeline-body .timeline-item .content h6:last-child a:hover {
  text-decoration: underline;
}
.timeline-body .post.card {
  padding: 1.25rem;
}
.timeline-body .post.card .card-footer {
  margin: 0 -1.25rem -1.25rem -1.25rem;
  padding: 1.25rem 2rem;
}

/*# sourceMappingURL=style.css.map */