/**
 * BlogPostPage Styles
 * Clean, centered blog post layout with floating sidebars.
 */

/* Main article wrapper with 3-column layout */
.blogPost {
  display: grid;
  grid-template-columns: 80px minmax(0, 800px) 250px;
  gap: var(--ai-spacing-xl);
  max-width: 1200px;
  margin: 0 auto;
  padding: var(--section-spacing-sm) var(--ai-spacing-xl);
  position: relative;
}

/* Floating social sidebar (left) */
.socialSidebar {
  position: sticky;
  top: 100px;
  height: fit-content;
  display: flex;
  flex-direction: column;
  align-items: center;
}

/* Main content container */
.blogPost__container {
  min-width: 0;
}

/* Header section */
.blogPost__header {
  margin-bottom: var(--ai-spacing-2xl);
  padding-bottom: var(--ai-spacing-xl);
  border-bottom: 1px solid var(--ai-border-light);
}

.blogPost__category {
  font-size: 1.4rem;
  font-weight: 500;
  color: var(--ai-blue);
  text-transform: uppercase;
  letter-spacing: 0.5px;
  margin-bottom: var(--ai-spacing-md);
}

.blogPost__title {
  font-size: clamp(2.8rem, 2rem + 2vw, 4rem);
  font-weight: 700;
  line-height: 1.2;
  color: var(--ai-text-primary);
  margin: 0 0 var(--ai-spacing-lg) 0;
}

.blogPost__meta {
  display: flex;
  align-items: center;
  gap: var(--ai-spacing-sm);
  font-size: 1.5rem;
  color: var(--ai-text-secondary);
  margin-bottom: var(--ai-spacing-xl);
}

.blogPost__separator {
  color: var(--ai-gray-300);
}

/* Author section */
.blogPost__author {
  display: flex;
  align-items: center;
  gap: var(--ai-spacing-md);
}

.blogPost__authorImage {
  width: 48px;
  height: 48px;
  border-radius: var(--ai-radius-circle);
  object-fit: cover;
}

.blogPost__authorInfo {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.blogPost__authorName {
  font-size: 1.6rem;
  font-weight: 600;
  color: var(--ai-blue);
  text-decoration: none;
}

.blogPost__authorName:hover {
  text-decoration: underline;
}

span.blogPost__authorName {
  color: var(--ai-text-primary);
}

.blogPost__authorTitle {
  font-size: 1.4rem;
  color: var(--ai-text-secondary);
}

/* Inline TOC (shown on tablet/mobile) */
.blogPost__toc {
  display: none;
  background: var(--ai-gray-50);
  border-radius: var(--ai-radius-md);
  padding: var(--ai-spacing-lg);
  margin-bottom: var(--ai-spacing-2xl);
}

.blogPost__tocTitle {
  font-size: 1.5rem;
  font-weight: 600;
  color: var(--ai-text-primary);
  cursor: pointer;
  user-select: none;
}

.blogPost__toc :global(.table-of-contents) {
  margin-top: var(--ai-spacing-md);
  padding-left: var(--ai-spacing-md);
}

.blogPost__toc :global(.table-of-contents) li {
  margin: var(--ai-spacing-xs) 0;
}

.blogPost__toc :global(.table-of-contents) a {
  font-size: 1.4rem;
  color: var(--ai-text-secondary);
  text-decoration: none;
}

.blogPost__toc :global(.table-of-contents) a:hover {
  color: var(--ai-blue);
}

/* Article content */
.blogPost__content {
  font-size: 1.8rem;
  line-height: 1.8;
  color: var(--ai-text-primary);
}

.blogPost__content :global(h2) {
  font-size: 2.4rem;
  font-weight: 700;
  margin: var(--ai-spacing-2xl) 0 var(--ai-spacing-lg) 0;
  color: var(--ai-text-primary);
  scroll-margin-top: 100px;
}

.blogPost__content :global(h3) {
  font-size: 2rem;
  font-weight: 600;
  margin: var(--ai-spacing-xl) 0 var(--ai-spacing-md) 0;
  color: var(--ai-text-primary);
  scroll-margin-top: 100px;
}

.blogPost__content :global(h4) {
  font-size: 1.8rem;
  font-weight: 600;
  margin: var(--ai-spacing-lg) 0 var(--ai-spacing-sm) 0;
  color: var(--ai-text-primary);
  scroll-margin-top: 100px;
}

.blogPost__content :global(p) {
  margin: 0 0 var(--ai-spacing-lg) 0;
}

.blogPost__content :global(ul),
.blogPost__content :global(ol) {
  margin: 0 0 var(--ai-spacing-sm) 0;
  padding-left: var(--ai-spacing-xl);
}

.blogPost__content :global(li) {
  margin: var(--ai-spacing-sm) 0;
}

.blogPost__content :global(a) {
  color: var(--ai-blue);
  text-decoration: none;
}

.blogPost__content :global(a:hover) {
  text-decoration: underline;
}

.blogPost__content :global(blockquote) {
  margin: var(--ai-spacing-xl) 0;
  padding: var(--ai-spacing-md) var(--ai-spacing-lg);
  border-left: 4px solid var(--ai-blue);
  background: var(--ai-gray-50);
  font-style: italic;
}

.blogPost__content :global(pre) {
  margin: 0 0;
  border-radius: 8px;
  font-size: 1.5rem;
  background: #2d3748 !important;
  overflow: hidden;
}

.blogPost__content :global(.prism-code) {
  background: #2d3748 !important;
  padding: 20px !important;
}

.blogPost__content :global(code) {
  font-size: 0.9em;
  background: var(--ai-gray-100);
  padding: 2px 6px;
  border-radius: var(--ai-radius-xs);
}

.blogPost__content :global(pre code) {
  background: transparent;
  padding: 0;
}

/* Code block container styling to match home page */
.blogPost__content :global([class*='codeBlockContainer']) {
  border-radius: 8px;
  overflow: hidden;
  box-shadow: var(--ai-shadow-md);
  margin: var(--ai-spacing-xl) 0;
}

.blogPost__content :global([class*='codeBlockContent']) {
  background: #2d3748 !important;
}

.blogPost__content :global([class*='codeBlockLines']) {
  background: #2d3748 !important;
}


/* Line numbers styling */
.blogPost__content :global([class*='codeLineNumber']) {
  color: rgba(255, 255, 255, 0.4);
  padding-right: 16px;
  user-select: none;
}

.blogPost__content :global(img) {
  max-width: 100%;
  height: auto;
  border-radius: var(--ai-radius-md);
  margin: var(--ai-spacing-xl) 0;
}

.blogPost__content :global(table) {
  width: 100%;
  margin: var(--ai-spacing-xl) 0;
  border-collapse: collapse;
  font-size: 1.6rem;
}

.blogPost__content :global(th),
.blogPost__content :global(td) {
  padding: var(--ai-spacing-sm) var(--ai-spacing-md);
  border: 1px solid var(--ai-border-light);
  text-align: left;
}

.blogPost__content :global(th) {
  background: var(--ai-gray-50);
  font-weight: 600;
}

/* Tags */
.blogPost__tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--ai-spacing-sm);
  margin-top: var(--ai-spacing-2xl);
  padding-top: var(--ai-spacing-xl);
  border-top: 1px solid var(--ai-border-light);
}

.blogPost__tag {
  font-size: 1.4rem;
  color: var(--ai-blue);
  background: var(--ai-blue-lighter);
  padding: 6px 14px;
  border-radius: var(--ai-radius-full);
  text-decoration: none;
  transition: background var(--ai-transition-normal);
}

.blogPost__tag:hover {
  background: var(--ai-blue-light);
  text-decoration: none;
}

/* Mobile social share */
.blogPost__socialMobile {
  display: none;
  margin-top: var(--ai-spacing-xl);
  padding-top: var(--ai-spacing-xl);
  border-top: 1px solid var(--ai-border-light);
}

/* Pagination */
.blogPost__pagination {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--ai-spacing-lg);
  margin-top: var(--ai-spacing-2xl);
  padding-top: var(--ai-spacing-xl);
  border-top: 1px solid var(--ai-border-light);
}

.blogPost__paginationItem {
  display: flex;
  flex-direction: column;
  gap: var(--ai-spacing-xs);
  padding: var(--ai-spacing-lg);
  background: var(--ai-gray-50);
  border-radius: var(--ai-radius-md);
  text-decoration: none;
  transition: background var(--ai-transition-normal);
}

.blogPost__paginationItem:hover {
  background: var(--ai-gray-100);
  text-decoration: none;
}

.blogPost__paginationItem--next {
  text-align: right;
}

.blogPost__paginationLabel {
  font-size: 1.3rem;
  font-weight: 500;
  color: var(--ai-text-tertiary);
  text-transform: uppercase;
  letter-spacing: 0.5px;
}

.blogPost__paginationTitle {
  font-size: 1.6rem;
  font-weight: 600;
  color: var(--ai-blue);
  line-height: 1.4;
}

/* Floating TOC sidebar (right) */
.tocSidebar {
  position: relative;
}

.tocSidebar__sticky {
  position: sticky;
  top: 100px;
  max-height: calc(100vh - 150px);
  overflow-y: auto;
}

/* Override Docusaurus TOC's inner scrollable wrapper to prevent double scrollbar */
.tocSidebar__sticky :global(.theme-doc-toc-desktop),
.tocSidebar__sticky :global([class*='tocCollapsible']),
.tocSidebar__sticky :global(.thin-scrollbar) {
  max-height: none;
  overflow: visible;
}

.tocSidebar :global(.table-of-contents) {
  padding: 0;
  margin: 0;
  list-style: none;
  border-left: 2px solid var(--ai-border-light);
  padding-left: var(--ai-spacing-md);
}

.tocSidebar :global(.table-of-contents__link) {
  font-size: 1.4rem;
  color: var(--ai-text-secondary);
  text-decoration: none;
  display: block;
  padding: var(--ai-spacing-xs) 0;
  transition: color var(--ai-transition-normal);
}

.tocSidebar :global(.table-of-contents__link:hover),
.tocSidebar :global(.table-of-contents__link--active) {
  color: var(--ai-blue);
}

.tocSidebar :global(.table-of-contents ul) {
  padding-left: var(--ai-spacing-md);
  margin: 0;
  list-style: none;
}

/* Responsive */
@media (max-width: 1100px) {
  .blogPost {
    grid-template-columns: 60px minmax(0, 1fr);
    max-width: 900px;
  }

  .tocSidebar {
    display: none;
  }

  .blogPost__toc {
    display: block;
  }
}

@media (max-width: 768px) {
  .blogPost {
    grid-template-columns: 1fr;
    padding: var(--section-spacing-xs) var(--ai-spacing-lg);
  }

  .socialSidebar {
    display: none;
  }

  .blogPost__socialMobile {
    display: block;
  }

  .blogPost__title {
    font-size: 2.4rem;
  }

  .blogPost__content {
    font-size: 1.7rem;
  }

  .blogPost__pagination {
    grid-template-columns: 1fr;
  }

  .blogPost__paginationItem--next {
    text-align: left;
  }
}
