/* BaseModal Component Styles — aligned with SDK Component Refresh · V1 Refined */

/* ========================================================================
   Modal Backdrop — variant-agnostic outer wrapper
   ========================================================================
   The outer .mint-modal positions the modal in the viewport. Variant
   modifiers (.mint-modal--drawer / .mint-modal--sheet) repoint the
   flex alignment so the container slides in from the relevant edge.
   ======================================================================== */

.mint-modal {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: flex;
  padding: 1rem;
}

.mint-modal--centered {
  align-items: center;
  justify-content: center;
}

.mint-modal--drawer {
  align-items: stretch;   /* fill viewport height */
  justify-content: flex-end;
  padding: 0;             /* drawer flush to the right edge */
}

.mint-modal--sheet {
  align-items: flex-end;
  justify-content: center;
  padding: 0;             /* sheet flush to the bottom edge */
}

.mint-modal__overlay {
  position: absolute;
  inset: 0;
  background-color: rgba(15, 23, 42, 0.55);
  backdrop-filter: blur(4px) saturate(0.6);
  -webkit-backdrop-filter: blur(4px) saturate(0.6);
}

/* ========================================================================
   Modal Container — shared card DNA
   ======================================================================== */

.mint-modal__container {
  position: relative;
  width: 100%;
  display: flex;
  flex-direction: column;
  background-color: var(--bg-card);
  border: 1px solid var(--border-color);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  overflow: hidden;
}

/* ---------- Centered variant — card DNA with height cap (unchanged visually) ---------- */

.mint-modal__container--centered {
  max-height: calc(100vh - 2rem);
}

/* ---------- Drawer variant — fills viewport height, right-edge anchored ---------- */

.mint-modal__container--drawer {
  max-height: 100vh;
  height: 100vh;
  border-radius: var(--radius-lg) 0 0 var(--radius-lg);   /* radius drops on right edge */
  border-right: none;
  box-shadow: var(--shadow-lg);
}

/* ---------- Sheet variant — bottom-edge anchored, top-only radius ---------- */

.mint-modal__container--sheet {
  max-height: calc(100vh - 3rem);
  border-radius: var(--radius-lg) var(--radius-lg) 0 0;   /* top corners only */
  border-bottom: none;
  box-shadow: var(--shadow-lg);
}

/* ========================================================================
   Size scale — widened across sm/md/lg/xl per spec §7
   ========================================================================
   Before: sm 24 · md 30 · lg 34 · xl 38 · full 56
   After:  sm 28 · md 35 · lg 45 · xl 57.5 · full 56 (unchanged)
   ======================================================================== */

.mint-modal__container--sm   { max-width: 28rem; }
.mint-modal__container--md   { max-width: 35rem; }
.mint-modal__container--lg   { max-width: 45rem; }
.mint-modal__container--xl   { max-width: 57.5rem; }
.mint-modal__container--full { max-width: 56rem; }

/* Drawer width ramps — narrower than centered widths since drawer fills height */
.mint-modal__container--drawer.mint-modal__container--sm   { max-width: 21.25rem; /* 340px */ }
.mint-modal__container--drawer.mint-modal__container--md   { max-width: 30rem;    /* 480px */ }
.mint-modal__container--drawer.mint-modal__container--lg   { max-width: 40rem;    /* 640px */ }
.mint-modal__container--drawer.mint-modal__container--xl   { max-width: 48rem;    /* 768px */ }
.mint-modal__container--drawer.mint-modal__container--full { max-width: 100%;     /* full-drawer */ }

/* Sheet widths — wider than drawer but still centered horizontally. Mobile override drops to 100% below */
.mint-modal__container--sheet.mint-modal__container--sm   { max-width: 23.75rem; /* 380px */ }
.mint-modal__container--sheet.mint-modal__container--md   { max-width: 28.75rem; /* 460px */ }
.mint-modal__container--sheet.mint-modal__container--lg   { max-width: 36rem;    /* 576px */ }
.mint-modal__container--sheet.mint-modal__container--xl   { max-width: 45rem;    /* 720px */ }
.mint-modal__container--sheet.mint-modal__container--full { max-width: 100%; }

/* ========================================================================
   Grab-hint bar (sheet only)
   ======================================================================== */

.mint-modal__grab-hint {
  width: 2.5rem;
  height: 3px;
  background-color: var(--border-color);
  border-radius: 9999px;
  margin: 0.5rem auto 0;
  flex-shrink: 0;
}

/* ========================================================================
   Header / body / footer (shared — unchanged vs. current modal.css)
   ======================================================================== */

.mint-modal__header {
  display: flex;
  align-items: flex-start;
  gap: 0.625rem;
  padding: 1.125rem 1.25rem;
  border-bottom: 1px solid var(--border-light);
}

.mint-modal__header-text {
  flex: 1;
  min-width: 0;
}

.mint-modal__title {
  font-size: 0.9375rem;
  font-weight: 600;
  letter-spacing: -0.005em;
  color: var(--text-primary);
  line-height: 1.3;
  margin-top: 0 !important;
  margin-bottom: 0 !important;
  padding: 0 !important;
}

.mint-modal__subtitle {
  font-size: 0.75rem;
  color: var(--text-secondary);
  line-height: 1.4;
  margin: 0.125rem 0 0;
}

.mint-modal__close {
  flex-shrink: 0;
  /* Always pin the close affordance to the right edge of the header, even when
     there is no title/subtitle (no flex-1 header-text to push it over). */
  margin-left: auto;
  width: 1.75rem;
  height: 1.75rem;
  padding: 0;
  border-radius: 0.4375rem;
  color: var(--text-secondary);
  background: none;
  border: none;
  cursor: pointer;
  display: grid;
  place-items: center;
  transition: color var(--mint-transition), background-color var(--mint-transition);
}

.mint-modal__close:hover {
  color: var(--text-primary);
  background-color: var(--bg-hover);
}

.mint-modal__close:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring);
}

.mint-modal__close-icon {
  width: 0.875rem;
  height: 0.875rem;
  display: block;
}

.mint-modal__body {
  padding: 1.125rem 1.25rem;
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  font-size: 0.8125rem;
  color: var(--text-primary);
  line-height: 1.55;
}

.mint-modal__footer {
  padding: 0.75rem 1.25rem;
  border-top: 1px solid var(--border-light);
  background-color: var(--bg-primary);
  display: flex;
  justify-content: flex-end;
  align-items: center;
  gap: 0.5rem;
}

/* ========================================================================
   Tab strip (layout="tabs")
   ========================================================================
   A shell region, not body content: full-bleed, flush with both edges,
   never scrolls with the fields.
   ======================================================================== */

.mint-modal__tabs {
  flex-shrink: 0;
  display: flex;
  gap: 2px;
  padding: 0 0.75rem;
  background-color: var(--bg-card);
  border-bottom: 1px solid var(--border-color);
  overflow-x: auto;
  scrollbar-width: none;
}

.mint-modal__tabs::-webkit-scrollbar {
  display: none;
}

.mint-modal__tab {
  flex-shrink: 0;
  display: inline-flex;
  align-items: center;
  gap: 0.4375rem;
  height: 2.375rem;              /* 38px */
  padding: 0 0.75rem;
  border: none;
  background: transparent;
  font-family: inherit;
  font-size: 0.8125rem;          /* 13px */
  font-weight: 500;
  color: var(--text-secondary);
  cursor: pointer;
  /* Underline drawn INSIDE the box — no margin-bottom:-1px overlap hack. */
  transition: color var(--mint-transition), box-shadow var(--mint-transition);
}

.mint-modal__tab:hover:not(.mint-modal__tab--disabled) {
  color: var(--text-primary);
}

.mint-modal__tab--active {
  color: var(--color-primary);
  font-weight: 600;
  box-shadow: inset 0 -2px 0 var(--color-primary);
}

.mint-modal__tab--disabled {
  color: var(--text-muted);
  cursor: not-allowed;
}

.mint-modal__tab:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring-soft), inset 0 -2px 0 var(--color-primary);
}

.mint-modal__tab-meta {
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 400;
  color: var(--text-muted);
}

/* Fixed body height: switching tabs must not resize the card. */
.mint-modal__body--tabbed {
  height: clamp(14rem, 45vh, 26rem);
  overflow-y: auto;
}

/* Header rule is redundant once a strip or rail follows it. */
.mint-modal__container--tabs .mint-modal__header,
.mint-modal__container--rail .mint-modal__header {
  border-bottom: none;
}

/* ========================================================================
   Rail (layout="rail") — sidebar sections + pane as the shell's middle row
   ======================================================================== */

.mint-modal__split {
  flex: 1 1 auto;              /* basis = the fixed height below; `flex: 1` (basis 0) let the pane size to its content */
  min-height: 0;
  display: grid;
  grid-template-columns: 13.5rem minmax(0, 1fr);
  height: clamp(20rem, 62vh, 34rem);
}

.mint-modal__rail {
  display: flex;
  flex-direction: column;
  gap: 0.625rem;
  padding: 0.625rem 0.5rem;
  background-color: var(--bg-primary);
  border-right: 1px solid var(--border-light);
  overflow-y: auto;            /* rail scrolls independently of the pane */
  scrollbar-width: thin;
}

.mint-modal__rail-items {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

/* Section heading + divider between rail sections (e.g. Plugin / Personal). */
.mint-modal__rail-section {
  padding: 0.25rem 0.5rem 0.375rem;
  font-size: 0.6875rem;
  color: var(--text-secondary);
}

.mint-modal__rail-divider {
  height: 1px;
  margin: 0.5rem;
  background-color: var(--border-color);
}

.mint-modal__rail-item {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  width: 100%;
  min-height: 2rem;
  padding: 0.375rem 0.5rem;
  border: none;
  border-radius: var(--radius);
  background: transparent;
  font-family: inherit;
  font-size: 0.8125rem;
  font-weight: 400;
  color: var(--text-secondary-strong);
  text-align: left;
  cursor: pointer;
  transition: background-color var(--mint-transition), color var(--mint-transition);
}

.mint-modal__rail-item:hover:not(.mint-modal__rail-item--disabled, .mint-modal__rail-item--active) {
  background-color: var(--bg-hover);
}

.mint-modal__rail-item:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring-offset);
}

/* Active = raised card, matching the 1.1 card language (not a primary fill). */
.mint-modal__rail-item--active {
  background-color: var(--bg-card);
  color: var(--text-primary);
  font-weight: 600;
  box-shadow: var(--shadow-sm);
}

.mint-modal__rail-item--disabled {
  color: var(--text-muted);
  cursor: not-allowed;
}

.mint-modal__rail-item-icon {
  flex-shrink: 0;
  width: 0.875rem;
  height: 0.875rem;
  color: var(--text-secondary);
}

.mint-modal__rail-item-icon svg {
  width: 100%;
  height: 100%;
  display: block;
}

/* v-html markup icons arrive wrapped in a span — size it like the svg. */
.mint-modal__rail-item-icon > span {
  display: block;
  width: 100%;
  height: 100%;
}

.mint-modal__rail-item--active .mint-modal__rail-item-icon {
  color: var(--color-primary);
}

.mint-modal__rail-item-text {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 0.0625rem;
}

.mint-modal__rail-item-label {
  line-height: 1.3;
  overflow-wrap: anywhere;
}

.mint-modal__rail-item-description {
  font-size: 0.6875rem;
  font-weight: 400;
  color: var(--text-muted);
  line-height: 1.35;
}

.mint-modal__rail-item-meta {
  flex-shrink: 0;
  font-family: var(--font-mono);
  font-size: 0.6875rem;
  font-weight: 400;
  color: var(--text-muted);
}

/* ---------- Pane ---------- */

.mint-modal__pane {
  min-width: 0;
  min-height: 0;
  display: flex;
  flex-direction: column;
}

.mint-modal__pane:focus-visible {
  outline: none;
  box-shadow: var(--focus-ring-soft);
}

.mint-modal__pane-header {
  flex-shrink: 0;
  padding: 0.875rem 1.25rem 0.75rem;
  border-bottom: 1px solid var(--border-light);
}

.mint-modal__pane-title {
  margin: 0 !important;
  padding: 0 !important;
  font-size: 0.875rem;
  font-weight: 600;
  letter-spacing: -0.005em;
  color: var(--text-primary);
  line-height: 1.3;
}

.mint-modal__pane-subtitle {
  margin: 0.1875rem 0 0 !important;
  padding: 0 !important;
  font-size: 0.75rem;
  color: var(--text-secondary);
  line-height: 1.45;
}

.mint-modal__pane-body {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  padding: 0.875rem 1.25rem 1.125rem;
  font-size: 0.8125rem;
  color: var(--text-primary);
  line-height: 1.55;
}

/* Rail collapses to the tab-strip pattern on narrow screens — one behaviour. */
@media (max-width: 640px) {
  .mint-modal__split {
    grid-template-columns: minmax(0, 1fr);
    height: auto;
  }

  .mint-modal__rail {
    flex-direction: row;
    align-items: center;
    gap: 0.25rem;
    padding: 0 0.5rem;
    border-right: none;
    border-bottom: 1px solid var(--border-color);
    overflow-x: auto;
    overflow-y: hidden;
  }

  .mint-modal__rail-items {
    flex-direction: row;
    flex-shrink: 0;
  }

  /* Items keep their label width and the strip scrolls, instead of squeezing labels letter by letter. */
  .mint-modal__rail-item {
    flex-shrink: 0;
    width: auto;
    min-height: 2.375rem;
    white-space: nowrap;
  }

  /* Strip stays compact */
  .mint-modal__rail-item-description,
  .mint-modal__rail-section,
  .mint-modal__rail-divider {
    display: none;
  }

  .mint-modal__pane-body {
    max-height: 60vh;
  }
}

/* ========================================================================
   Per-variant transitions
   ========================================================================
   Each variant uses its own Vue <Transition name> so enter/leave
   animations can be independently tuned.
   ======================================================================== */

/* Centered — opacity fade on backdrop, scale+opacity on card (unchanged behavior) */
.modal-centered-enter-active,
.modal-centered-leave-active {
  transition: opacity 0.2s ease;
}
.modal-centered-enter-active .mint-modal__container,
.modal-centered-leave-active .mint-modal__container {
  transition: transform 0.2s ease, opacity 0.2s ease;
}
.modal-centered-enter-from,
.modal-centered-leave-to {
  opacity: 0;
}
.modal-centered-enter-from .mint-modal__container,
.modal-centered-leave-to .mint-modal__container {
  transform: scale(0.95);
  opacity: 0;
}

/* Drawer — slide in from right */
.modal-drawer-enter-active,
.modal-drawer-leave-active {
  transition: opacity 0.25s ease;
}
.modal-drawer-enter-active .mint-modal__container,
.modal-drawer-leave-active .mint-modal__container {
  transition: transform 0.25s ease;
}
.modal-drawer-enter-from,
.modal-drawer-leave-to {
  opacity: 0;
}
.modal-drawer-enter-from .mint-modal__container,
.modal-drawer-leave-to .mint-modal__container {
  transform: translateX(100%);
}

/* Sheet — slide in from bottom */
.modal-sheet-enter-active,
.modal-sheet-leave-active {
  transition: opacity 0.25s ease;
}
.modal-sheet-enter-active .mint-modal__container,
.modal-sheet-leave-active .mint-modal__container {
  transition: transform 0.25s ease;
}
.modal-sheet-enter-from,
.modal-sheet-leave-to {
  opacity: 0;
}
.modal-sheet-enter-from .mint-modal__container,
.modal-sheet-leave-to .mint-modal__container {
  transform: translateY(100%);
}

/* Reduced-motion — collapse to instant opacity swap on all variants */
@media (prefers-reduced-motion: reduce) {
  .modal-centered-enter-active,
  .modal-centered-leave-active,
  .modal-drawer-enter-active,
  .modal-drawer-leave-active,
  .modal-sheet-enter-active,
  .modal-sheet-leave-active {
    transition: opacity 0.1s ease;
  }

  .modal-centered-enter-active .mint-modal__container,
  .modal-centered-leave-active .mint-modal__container,
  .modal-drawer-enter-active .mint-modal__container,
  .modal-drawer-leave-active .mint-modal__container,
  .modal-sheet-enter-active .mint-modal__container,
  .modal-sheet-leave-active .mint-modal__container {
    transition: opacity 0.1s ease;
    transform: none !important;
  }
}

/* ========================================================================
   Mobile auto-sheet — applies to any variant on narrow viewports
   ========================================================================
   When the viewport is < 768px, every modal behaves like a sheet:
   - Backdrop aligns to bottom.
   - Container fills width, sheet-shaped top corners, no side radius.
   - Non-sheet variants pick up the sheet's slide-up animation.
   Pure CSS — no JS detection needed.
   ======================================================================== */

@media (max-width: 767px) {
  .mint-modal {
    align-items: flex-end;
    justify-content: center;
    padding: 0;
  }

  .mint-modal__container,
  .mint-modal__container--centered,
  .mint-modal__container--drawer,
  .mint-modal__container--sheet {
    width: 100%;
    max-width: 100%;
    max-height: calc(100vh - 3rem);
    height: auto;
    border-radius: var(--radius-lg) var(--radius-lg) 0 0;
    border-bottom: none;
    border-right: 1px solid var(--border-color);   /* restore right border for full-width */
    box-shadow: var(--shadow-lg);
  }

  /* All size variants collapse to 100% width under mobile */
  .mint-modal__container--sm,
  .mint-modal__container--md,
  .mint-modal__container--lg,
  .mint-modal__container--xl,
  .mint-modal__container--full {
    max-width: 100%;
  }

  /* Non-sheet variants flip to sheet-like slide-up animation under mobile */
  .modal-centered-enter-from .mint-modal__container,
  .modal-centered-leave-to .mint-modal__container,
  .modal-drawer-enter-from .mint-modal__container,
  .modal-drawer-leave-to .mint-modal__container {
    transform: translateY(100%);
  }

  /* Sheets keep their natural height; the strip already scrolls horizontally */
  .mint-modal__body--tabbed {
    height: auto;
    max-height: 60vh;
  }
}
