/* components/popover/popover.css */

/**
 * Popover Component
 * Interactive overlays with rich content
 * Extends Tooltip functionality
 * Full WCAG 2.2 AAA compliance
 */

/* ========================================
   CSS Custom Properties
   ======================================== */

:root {
  /* Popover dimensions */
  --popover-min-width: 200px;
  --popover-max-width: 400px;
  --popover-max-height: 600px;
  --popover-padding: var(--ds-space-l);
  --popover-arrow-size: 8px;
  --popover-offset: 12px;
  --popover-z-index: 10000;
  
  /* Colors */
  --popover-bg: var(--ds-color-surface);
  --popover-text-color: var(--ds-color-text);
  --popover-border-color: var(--ds-color-border);
  --popover-header-bg: var(--ds-color-surface-raised);
  --popover-footer-bg: var(--ds-color-surface-raised);
  --popover-shadow: 0 12px 32px rgba(12, 26, 61, 0.12);
  --popover-backdrop: rgba(0, 0, 0, 0.3);
  
  /* Typography */
  --popover-title-size: var(--ds-font-size-l);
  --popover-title-weight: var(--ds-font-weight-semibold);
  --popover-body-size: var(--ds-font-size-m);
  --popover-footer-size: var(--ds-font-size-s);
  
  /* Animation */
  --popover-animation-duration: 250ms;
  --popover-animation-easing: cubic-bezier(0.4, 0, 0.2, 1);
}

/* Dark mode adjustments */
@media (prefers-color-scheme: dark) {
  :root {
    --popover-bg: #1f1f1f;
    --popover-text-color: #ffffff;
    --popover-border-color: #333;
    --popover-header-bg: #2a2a2a;
    --popover-footer-bg: #2a2a2a;
    --popover-shadow: 0 12px 32px rgba(0, 0, 0, 0.5);
    --popover-backdrop: rgba(0, 0, 0, 0.6);
  }
}

/* ========================================
   Base Popover Container
   ======================================== */

.c-popover {
  position: relative;
  display: inline-flex;
}

/* Popover trigger */
.c-popover__trigger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  position: relative;
  user-select: none;
}

/* Make trigger focusable */
.c-popover__trigger:not(button):not(a):not([tabindex]) {
  tabindex: 0;
}

/* ========================================
   Popover Content Container
   ======================================== */

.c-popover__content {
  /* Positioning */
  position: absolute;
  z-index: var(--popover-z-index);
  
  /* Dimensions */
  min-width: var(--popover-min-width);
  max-width: var(--popover-max-width);
  max-height: var(--popover-max-height);
  width: max-content;
  
  /* Visual */
  background: var(--popover-bg);
  color: var(--popover-text-color);
  border: 1px solid var(--popover-border-color);
  border-radius: var(--ds-radius-l);
  box-shadow: var(--popover-shadow);
  overflow: hidden;
  
  /* Animation */
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: scale(0.95) translateY(4px);
  transition: 
    opacity var(--popover-animation-duration) var(--popover-animation-easing),
    visibility var(--popover-animation-duration) var(--popover-animation-easing),
    transform var(--popover-animation-duration) var(--popover-animation-easing);
}

/* Scrollable content */
.c-popover__content--scrollable {
  overflow-y: auto;
  overflow-x: hidden;
}

/* ========================================
   Popover Sections
   ======================================== */

/* Header */
.c-popover__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--ds-space-m) var(--popover-padding);
  background: var(--popover-header-bg);
  border-bottom: 1px solid var(--popover-border-color);
  min-height: 3.5rem;
}

.c-popover__title {
  font-size: var(--popover-title-size);
  font-weight: var(--popover-title-weight);
  line-height: var(--ds-line-height-s);
  color: var(--popover-text-color);
  margin: 0;
  flex: 1;
}

.c-popover__close {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  background: transparent;
  border: none;
  border-radius: var(--ds-radius-s);
  color: var(--ds-color-text-weak);
  cursor: pointer;
  transition: var(--ds-duration-fast);
  flex-shrink: 0;
  margin-left: var(--ds-space-m);
}

.c-popover__close:hover {
  background: var(--ds-color-button-hover);
  color: var(--ds-color-text);
}

.c-popover__close:focus-visible {
  outline: var(--ds-focus-ring-width) solid var(--ds-focus-ring-color);
  outline-offset: var(--ds-focus-ring-offset);
}

.c-popover__close svg {
  width: 1.25rem;
  height: 1.25rem;
}

/* Body */
.c-popover__body {
  padding: var(--popover-padding);
  font-size: var(--popover-body-size);
  line-height: var(--ds-line-height-m);
  color: var(--popover-text-color);
}

/* Body with scrollable content */
.c-popover__content--scrollable .c-popover__body {
  max-height: calc(var(--popover-max-height) - 7rem); /* Account for header and footer */
  overflow-y: auto;
}

/* Footer */
.c-popover__footer {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--ds-space-s);
  padding: var(--ds-space-m) var(--popover-padding);
  background: var(--popover-footer-bg);
  border-top: 1px solid var(--popover-border-color);
  min-height: 3.5rem;
}

.c-popover__footer--start {
  justify-content: flex-start;
}

.c-popover__footer--center {
  justify-content: center;
}

.c-popover__footer--space-between {
  justify-content: space-between;
}

/* ========================================
   Popover Arrow
   ======================================== */

.c-popover__arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-style: solid;
  pointer-events: none;
  z-index: 1;
}

/* Create border effect for arrow */
.c-popover__arrow::before {
  content: '';
  position: absolute;
  width: 0;
  height: 0;
  border-style: solid;
  z-index: -1;
}

/* Arrow positions - same as tooltip but adjusted for size */
/* Top arrow (pointing down) */
.c-popover--top .c-popover__arrow,
.c-popover--top-start .c-popover__arrow,
.c-popover--top-end .c-popover__arrow {
  top: 100%;
  border-width: var(--popover-arrow-size) var(--popover-arrow-size) 0;
  border-color: var(--popover-bg) transparent transparent;
}

.c-popover--top .c-popover__arrow::before,
.c-popover--top-start .c-popover__arrow::before,
.c-popover--top-end .c-popover__arrow::before {
  top: calc(-1 * var(--popover-arrow-size) - 1px);
  left: calc(-1 * var(--popover-arrow-size));
  border-width: var(--popover-arrow-size) var(--popover-arrow-size) 0;
  border-color: var(--popover-border-color) transparent transparent;
}

/* Position variations for top */
.c-popover--top .c-popover__arrow {
  left: 50%;
  transform: translateX(-50%);
}

.c-popover--top-start .c-popover__arrow {
  left: var(--ds-space-l);
}

.c-popover--top-end .c-popover__arrow {
  right: var(--ds-space-l);
  left: auto;
}

/* Bottom arrow (pointing up) */
.c-popover--bottom .c-popover__arrow,
.c-popover--bottom-start .c-popover__arrow,
.c-popover--bottom-end .c-popover__arrow {
  bottom: 100%;
  border-width: 0 var(--popover-arrow-size) var(--popover-arrow-size);
  border-color: transparent transparent var(--popover-bg);
}

.c-popover--bottom .c-popover__arrow::before,
.c-popover--bottom-start .c-popover__arrow::before,
.c-popover--bottom-end .c-popover__arrow::before {
  bottom: calc(-1 * var(--popover-arrow-size) - 1px);
  left: calc(-1 * var(--popover-arrow-size));
  border-width: 0 var(--popover-arrow-size) var(--popover-arrow-size);
  border-color: transparent transparent var(--popover-border-color);
}

/* Position variations for bottom */
.c-popover--bottom .c-popover__arrow {
  left: 50%;
  transform: translateX(-50%);
}

.c-popover--bottom-start .c-popover__arrow {
  left: var(--ds-space-l);
}

.c-popover--bottom-end .c-popover__arrow {
  right: var(--ds-space-l);
  left: auto;
}

/* Left arrow (pointing right) */
.c-popover--left .c-popover__arrow,
.c-popover--left-start .c-popover__arrow,
.c-popover--left-end .c-popover__arrow {
  left: 100%;
  border-width: var(--popover-arrow-size) 0 var(--popover-arrow-size) var(--popover-arrow-size);
  border-color: transparent transparent transparent var(--popover-bg);
}

/* Right arrow (pointing left) */
.c-popover--right .c-popover__arrow,
.c-popover--right-start .c-popover__arrow,
.c-popover--right-end .c-popover__arrow {
  right: 100%;
  border-width: var(--popover-arrow-size) var(--popover-arrow-size) var(--popover-arrow-size) 0;
  border-color: transparent var(--popover-bg) transparent transparent;
}

/* ========================================
   Positioning Classes
   ======================================== */

/* Top positions */
.c-popover--top .c-popover__content,
.c-popover--top-start .c-popover__content,
.c-popover--top-end .c-popover__content {
  bottom: calc(100% + var(--popover-offset));
}

.c-popover--top .c-popover__content {
  left: 50%;
  transform: translateX(-50%) scale(0.95) translateY(-4px);
}

.c-popover--top-start .c-popover__content {
  left: 0;
  transform: scale(0.95) translateY(-4px);
}

.c-popover--top-end .c-popover__content {
  right: 0;
  transform: scale(0.95) translateY(-4px);
}

/* Bottom positions */
.c-popover--bottom .c-popover__content,
.c-popover--bottom-start .c-popover__content,
.c-popover--bottom-end .c-popover__content {
  top: calc(100% + var(--popover-offset));
}

.c-popover--bottom .c-popover__content {
  left: 50%;
  transform: translateX(-50%) scale(0.95) translateY(4px);
}

.c-popover--bottom-start .c-popover__content {
  left: 0;
  transform: scale(0.95) translateY(4px);
}

.c-popover--bottom-end .c-popover__content {
  right: 0;
  transform: scale(0.95) translateY(4px);
}

/* Left positions */
.c-popover--left .c-popover__content,
.c-popover--left-start .c-popover__content,
.c-popover--left-end .c-popover__content {
  right: calc(100% + var(--popover-offset));
}

.c-popover--left .c-popover__content {
  top: 50%;
  transform: translateY(-50%) scale(0.95) translateX(-4px);
}

.c-popover--left-start .c-popover__content {
  top: 0;
  transform: scale(0.95) translateX(-4px);
}

.c-popover--left-end .c-popover__content {
  bottom: 0;
  top: auto;
  transform: scale(0.95) translateX(-4px);
}

/* Right positions */
.c-popover--right .c-popover__content,
.c-popover--right-start .c-popover__content,
.c-popover--right-end .c-popover__content {
  left: calc(100% + var(--popover-offset));
}

.c-popover--right .c-popover__content {
  top: 50%;
  transform: translateY(-50%) scale(0.95) translateX(4px);
}

.c-popover--right-start .c-popover__content {
  top: 0;
  transform: scale(0.95) translateX(4px);
}

.c-popover--right-end .c-popover__content {
  bottom: 0;
  top: auto;
  transform: scale(0.95) translateX(4px);
}

/* ========================================
   Show States
   ======================================== */

.c-popover--open .c-popover__content {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}

/* Reset transforms when open */
.c-popover--open.c-popover--top .c-popover__content {
  transform: translateX(-50%) scale(1) translateY(0);
}

.c-popover--open.c-popover--top-start .c-popover__content,
.c-popover--open.c-popover--top-end .c-popover__content {
  transform: scale(1) translateY(0);
}

.c-popover--open.c-popover--bottom .c-popover__content {
  transform: translateX(-50%) scale(1) translateY(0);
}

.c-popover--open.c-popover--bottom-start .c-popover__content,
.c-popover--open.c-popover--bottom-end .c-popover__content {
  transform: scale(1) translateY(0);
}

.c-popover--open.c-popover--left .c-popover__content,
.c-popover--open.c-popover--right .c-popover__content {
  transform: translateY(-50%) scale(1) translateX(0);
}

.c-popover--open.c-popover--left-start .c-popover__content,
.c-popover--open.c-popover--left-end .c-popover__content,
.c-popover--open.c-popover--right-start .c-popover__content,
.c-popover--open.c-popover--right-end .c-popover__content {
  transform: scale(1) translateX(0);
}

/* ========================================
   Size Variants
   ======================================== */

/* Small */
.c-popover--small .c-popover__content {
  min-width: 150px;
  max-width: 250px;
  --popover-padding: var(--ds-space-m);
}

.c-popover--small .c-popover__header,
.c-popover--small .c-popover__footer {
  min-height: 2.5rem;
  padding: var(--ds-space-s) var(--ds-space-m);
}

/* Large */
.c-popover--large .c-popover__content {
  min-width: 300px;
  max-width: 600px;
}

/* Full width */
.c-popover--full-width .c-popover__content {
  min-width: 100vw;
  max-width: 100vw;
  left: 0 !important;
  right: 0 !important;
  transform: none !important;
}

/* ========================================
   Backdrop
   ======================================== */

.c-popover__backdrop {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  background: var(--popover-backdrop);
  z-index: calc(var(--popover-z-index) - 1);
  opacity: 0;
  visibility: hidden;
  transition: 
    opacity var(--popover-animation-duration) var(--popover-animation-easing),
    visibility var(--popover-animation-duration) var(--popover-animation-easing);
}

.c-popover--with-backdrop .c-popover__backdrop {
  opacity: 1;
  visibility: visible;
}

/* ========================================
   Modal Mode
   ======================================== */

.c-popover--modal .c-popover__content {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%) scale(0.95);
  max-height: 90vh;
}

.c-popover--modal.c-popover--open .c-popover__content {
  transform: translate(-50%, -50%) scale(1);
}

/* ========================================
   No Arrow Variant
   ======================================== */

.c-popover--no-arrow .c-popover__arrow {
  display: none;
}

/* ========================================
   Loading State
   ======================================== */

.c-popover--loading .c-popover__body {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 150px;
}

.c-popover__spinner {
  width: 2rem;
  height: 2rem;
  border: 3px solid var(--ds-color-border);
  border-top-color: var(--ds-color-accent);
  border-radius: 50%;
  animation: popover-spin 0.8s linear infinite;
}

@keyframes popover-spin {
  to {
    transform: rotate(360deg);
  }
}

/* ========================================
   Nested Popovers
   ======================================== */

.c-popover--nested .c-popover__content {
  z-index: calc(var(--popover-z-index) + 10);
}

.c-popover--nested .c-popover__backdrop {
  z-index: calc(var(--popover-z-index) + 9);
}

/* ========================================
   Focus Management
   ======================================== */

.c-popover__content:focus {
  outline: none;
}

.c-popover__content[data-focus-trap="true"] {
  /* Focus trap active indicator */
  box-shadow: var(--popover-shadow), 0 0 0 2px var(--ds-color-accent);
}

/* ========================================
   Accessibility
   ======================================== */

/* High contrast mode */
@media (prefers-contrast: high) {
  .c-popover__content {
    border: 2px solid currentColor;
  }
  
  .c-popover__header,
  .c-popover__footer {
    border-width: 2px;
  }
}

/* Reduced motion */
@media (prefers-reduced-motion: reduce) {
  .c-popover__content,
  .c-popover__backdrop {
    transition-duration: 0.01ms !important;
  }
  
  .c-popover__spinner {
    animation: none;
  }
}

/* Screen reader only text */
.c-popover__sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border-width: 0;
}

/* ========================================
   Responsive Design
   ======================================== */

@media (max-width: 768px) {
  .c-popover__content {
    max-width: calc(100vw - 2rem);
    max-height: calc(100vh - 2rem);
  }
  
  .c-popover--modal .c-popover__content {
    width: calc(100vw - 2rem);
    max-height: calc(100vh - 2rem);
  }
}

/* ========================================
   Print Styles
   ======================================== */

@media print {
  .c-popover__content {
    display: none;
  }
  
  .c-popover--open .c-popover__content {
    display: block;
    position: static;
    transform: none;
    opacity: 1;
    visibility: visible;
    box-shadow: none;
    border: 1px solid #000;
  }
}