/*
 * Admin Buddy — date picker component.
 *
 * Brand-themed replacement for <input type="date">. The native popup
 * calendar is OS-rendered and can't be themed; this component swaps a
 * styled trigger + JS-built popover so the open state matches the rest
 * of the AB chrome (tokens, primary accent, slide-panel/dropdown
 * positioning vocabulary).
 *
 * Markup contract (PHP-side):
 *
 *   <div class="ab-datepicker [ab-datepicker--sm]" data-ab-datepicker
 *        [data-min="YYYY-MM-DD"] [data-max="YYYY-MM-DD"]
 *        [data-first-day="1"]>
 *       <input type="hidden" name="..." data-ab-datepicker-input value="">
 *       <button type="button" class="ab-datepicker__trigger"
 *               aria-haspopup="dialog" aria-expanded="false">
 *           <svg class="ab-datepicker__icon" ...>…</svg>
 *           <span class="ab-datepicker__value"
 *                 data-ab-datepicker-placeholder="Select date">
 *           </span>
 *       </button>
 *   </div>
 *
 * Form submits the hidden input's YYYY-MM-DD value. The trigger button
 * + popover are JS-driven (ab-datepicker.js). Form-side change handlers
 * keep working because setValue() dispatches `change` on the hidden
 * input.
 *
 * Public JS API: window.admbudDatepicker.{attach,attachAll,setValue,
 * getValue,open,close}.
 */

.ab-datepicker {
    position: relative;
    display: inline-block;
    vertical-align: middle;
    font-family: var(--ab-font-base);
}

/* -- Trigger (looks like an .ab-input) ------------------------------ */
.ab-datepicker__trigger {
    display: inline-flex;
    align-items: center;
    gap: var(--ab-space-2);
    width: 100%;
    min-width: 140px;
    height: var(--ab-input-height);
    padding: 0 var(--ab-space-3);
    font-family: inherit;
    font-size: var(--ab-text-sm);
    color: var(--ab-text-body);
    background: var(--ab-surface);
    border: 1px solid var(--ab-border);
    border-radius: var(--ab-radius-md);
    cursor: pointer;
    text-align: left;
    line-height: 1;
    transition: border-color var(--ab-transition-fast),
                box-shadow   var(--ab-transition-fast);
    box-sizing: border-box;
}
.ab-datepicker__trigger:hover {
    border-color: var(--ab-border-focus);
}
.ab-datepicker.is-open .ab-datepicker__trigger,
.ab-datepicker__trigger:focus-visible {
    outline: none;
    border-color: var(--ab-border-focus);
    box-shadow:   0 0 0 3px var(--ab-accent-subtle);
}

.ab-datepicker__icon {
    flex-shrink: 0;
    color: var(--ab-text-muted);
}
.ab-datepicker.is-open .ab-datepicker__icon,
.ab-datepicker.is-filled .ab-datepicker__icon {
    color: var(--ab-accent);
}

.ab-datepicker__value {
    flex: 1 1 auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    color: var(--ab-text-placeholder);
}
.ab-datepicker.is-filled .ab-datepicker__value {
    color: var(--ab-text-body);
}

/* -- Small modifier (parallel to .ab-input--sm) --------------------- */
.ab-datepicker--sm .ab-datepicker__trigger {
    height: var(--ab-btn-height-sm);
    padding: 0 var(--ab-space-2);
    gap: var(--ab-space-1);
    font-size: var(--ab-text-sm);
}
.ab-datepicker--sm .ab-datepicker__icon {
    width: 12px;
    height: 12px;
}

/* -- Popover (appended to <body> on open) --------------------------- */
/* position:fixed so it escapes overflow:hidden ancestors (slide
   panels, modal bodies, scroll containers). High z-index puts it
   above the WP admin bar and AB modals. */
.ab-datepicker__popover {
    position: fixed;
    z-index: 200000;
    width: 280px;
    padding: var(--ab-space-3);
    background: var(--ab-surface);
    color:      var(--ab-text-body);
    border: 1px solid var(--ab-border);
    border-radius: var(--ab-radius-lg);
    box-shadow: var(--ab-shadow-lg);
    font-family: var(--ab-font-base);
    animation: ab-datepicker-in 0.12s ease-out;
}
@keyframes ab-datepicker-in {
    from { opacity: 0; transform: translateY(-4px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* -- Header (prev | month label | next) ----------------------------- */
.ab-datepicker__header {
    display: flex;
    align-items: center;
    gap: var(--ab-space-2);
    margin-bottom: var(--ab-space-2);
}
.ab-datepicker__month-label {
    flex: 1 1 auto;
    height: 32px;
    padding: 0 var(--ab-space-2);
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--ab-radius-md);
    color: var(--ab-text-body);
    font-family: inherit;
    font-size: var(--ab-text-sm);
    font-weight: var(--ab-font-semibold);
    text-align: center;
    cursor: default;
}
.ab-datepicker__nav {
    flex-shrink: 0;
    width: 28px;
    height: 28px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--ab-radius-md);
    color: var(--ab-text-secondary);
    cursor: pointer;
    transition: background var(--ab-transition-fast),
                color      var(--ab-transition-fast);
}
.ab-datepicker__nav:hover {
    background: var(--ab-surface-raised);
    color:      var(--ab-text-body);
}
.ab-datepicker__nav:focus-visible {
    outline: none;
    border-color: var(--ab-border-focus);
    box-shadow:   0 0 0 2px var(--ab-accent-subtle);
}

/* -- Weekday header row --------------------------------------------- */
.ab-datepicker__weekdays {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
    margin-bottom: var(--ab-space-1);
}
.ab-datepicker__weekday {
    padding: var(--ab-space-1) 0;
    text-align: center;
    font-size: var(--ab-text-xs);
    font-weight: var(--ab-font-semibold);
    color: var(--ab-text-muted);
    text-transform: uppercase;
    letter-spacing: .03em;
}

/* -- Day grid ------------------------------------------------------- */
.ab-datepicker__grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
}
.ab-datepicker__day {
    aspect-ratio: 1 / 1;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--ab-radius-md);
    color: var(--ab-text-body);
    font-family: inherit;
    font-size: var(--ab-text-sm);
    line-height: 1;
    cursor: pointer;
    transition: background var(--ab-transition-fast),
                color      var(--ab-transition-fast),
                border-color var(--ab-transition-fast);
}
.ab-datepicker__day:hover {
    background: var(--ab-surface-raised);
}
.ab-datepicker__day:focus-visible {
    outline: none;
    border-color: var(--ab-border-focus);
    box-shadow:   0 0 0 2px var(--ab-accent-subtle);
}
.ab-datepicker__day.is-outside {
    color: var(--ab-text-muted);
    opacity: 0.5;
}
.ab-datepicker__day.is-today {
    color: var(--ab-accent);
    font-weight: var(--ab-font-semibold);
    border-color: var(--ab-accent-subtle);
}
.ab-datepicker__day.is-selected,
.ab-datepicker__day.is-selected:hover {
    background: var(--ab-accent);
    color: #fff;
    border-color: var(--ab-accent);
}
.ab-datepicker__day.is-disabled {
    color: var(--ab-text-muted);
    opacity: 0.35;
    cursor: not-allowed;
    pointer-events: none;
}

/* -- Footer (Today | Clear) ----------------------------------------- */
.ab-datepicker__footer {
    display: flex;
    align-items: center;
    gap: var(--ab-space-2);
    margin-top: var(--ab-space-3);
    padding-top: var(--ab-space-2);
    border-top: 1px solid var(--ab-border-subtle);
}
.ab-datepicker__action {
    flex: 1 1 0;
    height: 28px;
    padding: 0 var(--ab-space-2);
    background: transparent;
    border: 1px solid var(--ab-border);
    border-radius: var(--ab-radius-md);
    color: var(--ab-text-secondary);
    font-family: inherit;
    font-size: var(--ab-text-xs);
    font-weight: var(--ab-font-medium);
    cursor: pointer;
    transition: background var(--ab-transition-fast),
                color      var(--ab-transition-fast),
                border-color var(--ab-transition-fast);
}
.ab-datepicker__action:hover {
    background: var(--ab-surface-raised);
    color: var(--ab-text-body);
    border-color: var(--ab-border-focus);
}
.ab-datepicker__action:focus-visible {
    outline: none;
    border-color: var(--ab-border-focus);
    box-shadow:   0 0 0 2px var(--ab-accent-subtle);
}

/* -- Reduced motion -------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
    .ab-datepicker__popover { animation: none; }
}
