/**
 * @file components.css
 * @description Complex composite UI components.
 * @context
 *   .alert, .toast (Messaging blocks. Variants: .success, .warning, .danger)
 *   .avatar (Image container. Variants: .small, .large)
 *   .tag (Label/Badge. Variants: .secondary, .success, .warning, .danger, .outline)
 *   .breadcrumbs (Navigation list)
 *   .card-header, .card-footer (Extensions for .card)
 *   .dropdown (Hover/Focus menu. vars: --background-color, --text-color)
 *   .pagination (Page links)
 *   .progress-bar (Variable width bar. vars: --pb-percent)
 *   .skeleton (Loading placeholders. Variants: .block, .circle, .text, .header)
 *   .tooltip (CSS-only hover text)
 *   .modal (Dialog overlay)
 */

/* Styles for interactive components */

/* Alerts */
/* Toasts, defined lower in the stylesheet, use the .alert styling */
.alert,
.toast {
  padding: 1rem;
  border-radius: 4px;
  margin-bottom: 1rem;
  border: 1px solid transparent;

  background-color: var(--primary-bg-subtle);
  color: var(--primary-text-subtle);
  border-color: var(--primary-border-subtle);
}

.alert.success,
.toast.success {
  background-color: var(--success-bg-subtle);
  color: var(--success-text-subtle);
  border-color: var(--success-border-subtle);
}

.alert.warning,
.toast.warning {
  background-color: var(--warning-bg-subtle);
  color: var(--warning-text-subtle);
  border-color: var(--warning-border-subtle);
}

.alert.danger,
.toast.danger {
  background-color: var(--danger-bg-subtle);
  color: var(--danger-text-subtle);
  border-color: var(--danger-border-subtle);
}

/* Avatar */
.avatar {
  width: var(--avatar-size, 3rem);
  height: var(--avatar-size, 3rem);
  border-radius: 50%;
  overflow: hidden;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background-color: var(--secondary-color);
  vertical-align: middle;
}

.avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.avatar.small {
  width: 2rem;
  height: 2rem;
}

.avatar.large {
  width: 4rem;
  height: 4rem;
}

/* Badge / Tag */
.tag {
  display: inline-block;
  padding: 0.2rem 0.6rem;
  border-radius: 1rem;
  font-size: 0.75rem;
  font-weight: bold;
  text-transform: uppercase;

  background-color: var(--primary-color);
  color: var(--primary-text-color);
}

.tag.secondary {
  background-color: var(--secondary-color);
  color: var(--secondary-text-color);
}

.tag.success {
  background-color: var(--success-color);
  color: var(--success-text-color);
}

.tag.warning {
  background-color: var(--warning-color);
  color: var(--warning-text-color);
}

.tag.danger {
  background-color: var(--danger-color);
  color: var(--danger-text-color);
}

.tag.outline {
  background-color: transparent;
  border: 1px solid var(--primary-color);
  color: var(--primary-color);
}

/* Breadcrumbs */
.breadcrumbs ol {
  list-style: none;
  padding: 0;
  display: flex;
  gap: 0.5rem;
}

.breadcrumbs li:not(:last-child)::after {
  content: "/";
  margin-left: 0.5rem;
  color: var(--secondary-text-color);
}

/* Card */
/* The base .card styling can be found in layout.css */

/* Card Extensions */
.card-header {
  border-bottom: 1px solid var(--secondary-text-color);
}

.card-footer {
  margin-top: 1rem;
  border-top: 1px solid var(--secondary-text-color);
  color: var(--secondary-text-color);
}

/* Dropdown */
.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-menu {
  display: none;
  position: absolute;
  top: 100%;
  left: 0;
  min-width: 160px;
  z-index: 10;
  padding: 0.5rem 0;
  margin-top: 0.25rem;
  background-color: var(--background-color);
}

.dropdown-menu a {
  display: block;
  padding: 0.5rem 1rem;
  text-decoration: none;
  color: var(--text-color);
}

.dropdown-menu a:hover {
  background-color: var(--secondary-color);
}

.dropdown:hover .dropdown-menu,
.dropdown:focus-within .dropdown-menu {
  display: block;
}

/* Pagination */
.pagination {
  display: flex;
  gap: 0.25rem;
  align-items: center;
}

.pagination a {
  padding: 0.5rem 0.75rem;
  border: 1px solid var(--text-color);
  text-decoration: none;
  color: var(--text-color);
  border-radius: 4px;
}

.pagination a.active {
  background-color: var(--primary-color);
  color: var(--primary-text-color);
  border-color: var(--primary-color);
}

.pagination a:hover:not(.active) {
  background-color: var(--secondary-color);
}

/* Progress Bar */
.progress-container {
  width: 100%;
  background-color: var(--secondary-color);
  border-radius: 4px;
  overflow: hidden;
  height: 1.5rem;
  position: relative;
}

.progress-bar {
  height: 100%;
  background-color: var(--primary-color);
  color: var(--primary-text-color);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 0.8rem;
  transition: width 0.3s ease;
  width: calc(var(--pb-percent, 0) * 1%);
}

.progress-bar.indeterminate {
  width: 30%;
  position: absolute;
  animation: progress-indeterminate 1.5s infinite linear;
}

@keyframes progress-indeterminate {
  0% {
    left: -30%;
  }
  100% {
    left: 100%;
  }
}

/* Skeleton Loader */
/* 
   For text skeletons, use .skeleton.text.
   For images/blocks, use .skeleton.block (or just .skeleton with helper classes).
   For circular shapes, combine with .avatar or use .skeleton.circle.
*/
.skeleton {
  background-color: var(--secondary-color);
  background-image: linear-gradient(
    90deg,
    transparent,
    var(--skeleton-highlight),
    transparent
  );
  background-size: 200% 100%;
  animation: skeleton-loading 1.5s infinite linear;
  border-radius: 4px;
  display: block;
  /* Ensure it has some dimension if empty and not text/avatar */
  min-height: 1em;
}

/* Skeleton variants for different content types */

/* Block/Image placeholder */
.skeleton.block {
  width: 100%;
  height: 150px; /* Default height for card images etc */
}

/* Circle variant */
.skeleton.circle {
  border-radius: 50%;
  /* Combine with .avatar or set width/height explicitly if suitable */
}

/* Text Line variant */
.skeleton.text {
  height: 0.8em;
  width: 100%;
  margin-bottom: 0.5em;
  /* Use a generic width for text lines if not specified */
}

.skeleton.text:last-child {
  margin-bottom: 0;
  width: 80%; /* Simulate end of paragraph */
}

/* Header line variant (thicker, shorter) */
.skeleton.header {
  height: 1.5rem;
  width: 75%;
  margin-bottom: 1rem;
}

@keyframes skeleton-loading {
  0% {
    background-position: 200% 0;
  }
  100% {
    background-position: -200% 0;
  }
}

@media (prefers-reduced-motion: reduce) {
  .skeleton {
    animation: none;
  }
}

/* Tabs */
.tabs {
  display: flex;
  flex-wrap: wrap;
}

.tab-label {
  padding: 0.5rem 1rem;
  cursor: pointer;
  border: 1px solid var(--text-color);
  border-bottom: none;
  border-radius: 4px 4px 0 0;
  margin-right: 2px;
  background-color: var(--secondary-color);
}

.tab-radio {
  display: none;
}

.tab-content {
  display: none;
  order: 99; /* Force content to the end */
  width: 100%;
  padding: 1rem;
  border: 1px solid var(--text-color);
  background-color: var(--background-color);
}

/* Show content when radio is checked */
.tab-radio:checked + .tab-label + .tab-content {
  display: block;
}

/* Style active tab label */
.tab-radio:checked + .tab-label {
  background-color: var(--background-color);
  border-bottom: 1px solid var(--background-color);
  margin-bottom: -1px;
  z-index: 1;
}

/* Toast (unused in this project; kept in case a future notification needs it) */
.toast {
  /* The .toast class inherits most of its styling from .alert
  higher in the stylesheet */

  /* As a floating element, toasts include a box shadow */
  box-shadow: var(--box-shadow);

  /* Initially hidden */
  display: none;
}

.toast.show {
  display: flex;
  animation: toast-in 0.3s ease-out;
}

@keyframes toast-in {
  from {
    transform: translateX(100%);
    opacity: 0;
  }
  to {
    transform: translateX(0);
    opacity: 1;
  }
}

/* Tooltip */
.tooltip {
  position: relative;
  display: inline-block;
  border-bottom: 1px dotted var(--text-color);
  cursor: help;
}

.tooltip .tooltip-text {
  visibility: hidden;
  width: max-content;
  max-width: 50rem;
  background-color: var(--text-color);
  color: var(--background-color);
  text-align: center;
  border-radius: 4px;
  padding: 5px;
  position: absolute;
  z-index: 1;
  bottom: 125%;
  left: 50%;
  transform: translateX(-50%);
  opacity: 0;
  transition: opacity 0.3s;
}

.tooltip:hover .tooltip-text,
.tooltip:focus .tooltip-text {
  visibility: visible;
  opacity: 1;
}
