/* ============================================================
 * WR Intelligent — Application Stylesheet
 * ============================================================
 *
 * Visual polish layer over inline component styles. Adds hover/
 * focus/active interactions, responsive breakpoints, layout
 * helpers, smooth transitions.
 *
 * Strict rules:
 *   - All colors / spacing / typography via var(--token-*) from
 *     tokens.css. No new design values introduced here.
 *   - Pixel values only inside @media query conditions (CSS spec
 *     does not allow custom properties in media query expressions).
 *   - Flat CSS — no native nesting — for widest browser compat.
 *   - BEM class names match components.js + core.js.
 *   - !important is used sparingly to override inline styles set
 *     by JS factories. Phase 2 cleanup direction: migrate inline
 *     styles into class selectors and drop !important.
 *
 * Section index:
 *    1. Reset & Base
 *    2. Layout helpers
 *    3. Button
 *    4. Badge
 *    5. KpiCard
 *    6. Table
 *    7. FormField
 *    8. PageHeader
 *    9. EmptyState
 *   10. LoadingSkeleton
 *   11. Modal & Toast (from core.js)
 *   12. Utilities
 *   13. Responsive breakpoints
 *   14. Accessibility (reduced motion, dark mode stub)
 *   15. Print
 * ============================================================ */


/* ============================================================
 * 1. Reset & Base
 * ============================================================ */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html {
  font-family: var(--font-sans);
  font-size: 16px;
  line-height: var(--line-height-base);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

body {
  margin: 0;
  padding: 0;
  background: var(--color-bg-primary);
  color: var(--color-text-primary);
  font-size: var(--font-size-base);
  min-height: 100vh;
}

h1, h2, h3, h4, h5, h6 {
  margin: 0;
  font-weight: var(--font-weight-semibold);
  color: var(--color-text-primary);
  line-height: var(--line-height-tight);
}

p {
  margin: 0;
}

a {
  color: var(--color-text-link);
  text-decoration: none;
  transition: color var(--duration-fast) var(--easing-standard);
}

a:hover {
  color: var(--color-text-link-hover);
  text-decoration: underline;
}

a:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus);
  border-radius: var(--radius-sm);
}

button {
  font-family: inherit;
}

input, select, textarea {
  font-family: inherit;
  font-size: inherit;
}

img, svg, video {
  max-width: 100%;
  display: block;
}


/* ============================================================
 * 2. Layout helpers
 * ============================================================ */

.wr-app-layout {
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  background: var(--color-bg-primary);
}

.wr-app-header {
  position: sticky;
  top: 0;
  z-index: var(--z-sticky);
  background: var(--color-bg-elevated);
  border-bottom: var(--border-width-thin) solid var(--color-border-default);
  padding: var(--space-3) var(--space-6);
}

.wr-app-main {
  flex: 1 1 auto;
  padding: var(--space-6);
}

.wr-app-footer {
  background: var(--color-bg-secondary);
  border-top: var(--border-width-thin) solid var(--color-border-default);
  padding: var(--space-6);
  color: var(--color-text-muted);
  font-size: var(--font-size-sm);
}

.wr-container {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 var(--space-4);
  width: 100%;
}

.wr-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: var(--space-4);
}

.wr-stack {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}
.wr-stack--sm { gap: var(--space-2); }
.wr-stack--md { gap: var(--space-4); }
.wr-stack--lg { gap: var(--space-6); }

.wr-row {
  display: flex;
  flex-direction: row;
  gap: var(--space-4);
  align-items: center;
  flex-wrap: wrap;
}
.wr-row--sm      { gap: var(--space-2); }
.wr-row--md      { gap: var(--space-4); }
.wr-row--lg      { gap: var(--space-6); }
.wr-row--between { justify-content: space-between; }
.wr-row--end     { justify-content: flex-end; }
.wr-row--center  { justify-content: center; }


/* ============================================================
 * 3. Button (.wr-btn)
 * ============================================================ */

.wr-btn {
  position: relative;
  user-select: none;
  text-decoration: none;
  -webkit-tap-highlight-color: transparent;
  transition: background var(--duration-fast) var(--easing-standard),
              border-color var(--duration-fast) var(--easing-standard),
              transform var(--duration-fast) var(--easing-standard),
              box-shadow var(--duration-fast) var(--easing-standard) !important;
}

.wr-btn:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus) !important;
}

.wr-btn:active:not(:disabled) {
  transform: scale(0.98);
}

.wr-btn:disabled {
  cursor: not-allowed !important;
  pointer-events: none;
}

/* Primary */
.wr-btn--primary:hover:not(:disabled) {
  background: var(--color-primary-700) !important;
  border-color: var(--color-primary-700) !important;
}
.wr-btn--primary:active:not(:disabled) {
  background: var(--color-primary-800) !important;
  border-color: var(--color-primary-800) !important;
}

/* Secondary */
.wr-btn--secondary:hover:not(:disabled) {
  background: var(--color-bg-hover) !important;
}
.wr-btn--secondary:active:not(:disabled) {
  background: var(--color-bg-active) !important;
}

/* Danger */
.wr-btn--danger:hover:not(:disabled) {
  background: var(--color-danger-700) !important;
  border-color: var(--color-danger-700) !important;
}
.wr-btn--danger:active:not(:disabled) {
  filter: brightness(0.9);
}

/* Ghost */
.wr-btn--ghost:hover:not(:disabled) {
  background: var(--color-primary-50) !important;
}
.wr-btn--ghost:active:not(:disabled) {
  background: var(--color-primary-100) !important;
}


/* ============================================================
 * 4. Badge (.wr-badge)
 * ============================================================ */

.wr-badge {
  transition: background var(--duration-fast) var(--easing-standard),
              color var(--duration-fast) var(--easing-standard);
}


/* ============================================================
 * 5. KpiCard (.wr-kpi-card)
 * ============================================================ */

.wr-kpi-card {
  transition: transform var(--duration-base) var(--easing-standard),
              box-shadow var(--duration-base) var(--easing-standard);
}

.wr-kpi-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--shadow-md) !important;
}

.wr-kpi-card:focus-within {
  box-shadow: var(--shadow-focus) !important;
}


/* ============================================================
 * 6. Table (.wr-table)
 * ============================================================ */

.wr-table {
  min-width: 600px;
}

.wr-table__header {
  position: sticky;
  top: 0;
  z-index: var(--z-dropdown);
  background: var(--color-bg-secondary) !important;
}

/* Sortable header — hover + focus visual */
.wr-table__header[role="button"] {
  transition: background var(--duration-fast) var(--easing-standard),
              color var(--duration-fast) var(--easing-standard);
}

.wr-table__header[role="button"]:hover {
  background: var(--color-bg-hover) !important;
  color: var(--color-text-primary);
}

.wr-table__header[role="button"]:focus-visible {
  outline: none;
  box-shadow: inset 0 0 0 2px var(--color-primary-500);
}

/* Body rows */
.wr-table__row {
  transition: background var(--duration-fast) var(--easing-standard);
}

.wr-table__row:hover {
  background: var(--color-bg-hover);
}

.wr-table__row[role="button"]:focus-visible {
  outline: none;
  background: var(--color-bg-hover);
  box-shadow: inset 3px 0 0 var(--color-primary-500);
}

.wr-table__row--selected {
  background: var(--color-primary-50);
}

.wr-table__row--selected:hover {
  background: var(--color-primary-100);
}

/* Optional striped variant */
.wr-table--striped tbody tr:nth-child(even):not(:hover):not(.wr-table__row--selected) {
  background: var(--color-bg-secondary);
}


/* ============================================================
 * 7. FormField (.wr-form-field)
 * ============================================================ */

.wr-form-field__input::placeholder {
  color: var(--color-text-muted);
  opacity: 1;
}

.wr-form-field__input:disabled {
  background: var(--color-bg-disabled) !important;
  color: var(--color-text-disabled) !important;
  cursor: not-allowed;
  border-color: var(--color-border-default) !important;
}

.wr-form-field__input[aria-invalid="true"] {
  border-color: var(--color-danger-500) !important;
}

.wr-form-field__input[aria-invalid="true"]:focus {
  box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.25) !important;
}

/* Select dropdown arrow indicator (browser default OK; ensure it doesn't clash) */
.wr-form-field--select .wr-form-field__input {
  appearance: auto;
}


/* ============================================================
 * 8. PageHeader (.wr-page-header)
 * ============================================================ */

.wr-page-header__title {
  letter-spacing: var(--letter-spacing-tight);
}


/* ============================================================
 * 9. EmptyState (.wr-empty-state)
 *    Already styled inline — no overrides needed.
 * ============================================================ */


/* ============================================================
 * 10. LoadingSkeleton (.wr-skeleton)
 *    Animation declared in components.js (wr-comp-shimmer).
 *    Reduced-motion preference handled in section 14.
 * ============================================================ */


/* ============================================================
 * 11. Modal & Toast (from core.js)
 * ============================================================ */

.wr-modal-backdrop {
  animation: wr-fade-in var(--duration-base) var(--easing-decelerate);
}

.wr-modal {
  animation: wr-modal-enter var(--duration-base) var(--easing-decelerate);
}

@keyframes wr-fade-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes wr-modal-enter {
  from {
    opacity: 0;
    transform: scale(0.96) translateY(8px);
  }
  to {
    opacity: 1;
    transform: scale(1) translateY(0);
  }
}

.wr-modal__btn {
  transition: background var(--duration-fast) var(--easing-standard),
              border-color var(--duration-fast) var(--easing-standard),
              transform var(--duration-fast) var(--easing-standard) !important;
}

.wr-modal__btn:focus-visible {
  outline: none;
  box-shadow: var(--shadow-focus) !important;
}

.wr-modal__btn:active:not(:disabled) {
  transform: scale(0.98);
}

.wr-modal__btn--primary:hover:not(:disabled) {
  background: var(--color-primary-700) !important;
  border-color: var(--color-primary-700) !important;
}

.wr-modal__btn--danger:hover:not(:disabled) {
  background: var(--color-danger-700) !important;
  border-color: var(--color-danger-700) !important;
}

.wr-modal__btn--secondary:hover:not(:disabled) {
  background: var(--color-bg-hover) !important;
}

.wr-toast {
  animation: wr-toast-enter var(--duration-base) var(--easing-decelerate);
}

@keyframes wr-toast-enter {
  from {
    opacity: 0;
    transform: translateX(20px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}


/* ============================================================
 * 12. Utilities
 * ============================================================ */

/* Text colours */
.wr-text-primary    { color: var(--color-text-primary); }
.wr-text-secondary  { color: var(--color-text-secondary); }
.wr-text-muted      { color: var(--color-text-muted); }
.wr-text-success    { color: var(--color-success-600); }
.wr-text-warning    { color: var(--color-warning-600); }
.wr-text-danger     { color: var(--color-danger-600); }
.wr-text-info       { color: var(--color-info-600); }

/* Backgrounds */
.wr-bg-primary      { background: var(--color-bg-primary); }
.wr-bg-secondary    { background: var(--color-bg-secondary); }
.wr-bg-elevated     { background: var(--color-bg-elevated); }
.wr-bg-subtle       { background: var(--color-bg-secondary); }

/* Borders */
.wr-border-default  { border: var(--border-width-thin) solid var(--color-border-default); }
.wr-border-strong   { border: var(--border-width-thin) solid var(--color-border-strong); }
.wr-border-none     { border: none; }

/* Radius */
.wr-rounded-sm      { border-radius: var(--radius-sm); }
.wr-rounded-md      { border-radius: var(--radius-md); }
.wr-rounded-lg      { border-radius: var(--radius-lg); }
.wr-rounded-xl      { border-radius: var(--radius-xl); }
.wr-rounded-full    { border-radius: var(--radius-full); }

/* Shadows */
.wr-shadow-sm       { box-shadow: var(--shadow-sm); }
.wr-shadow-md       { box-shadow: var(--shadow-md); }
.wr-shadow-lg       { box-shadow: var(--shadow-lg); }
.wr-shadow-none     { box-shadow: none; }

/* Spacing utilities (margin top/bottom) */
.wr-mt-0 { margin-top: 0; }
.wr-mt-2 { margin-top: var(--space-2); }
.wr-mt-4 { margin-top: var(--space-4); }
.wr-mt-6 { margin-top: var(--space-6); }
.wr-mb-0 { margin-bottom: 0; }
.wr-mb-2 { margin-bottom: var(--space-2); }
.wr-mb-4 { margin-bottom: var(--space-4); }
.wr-mb-6 { margin-bottom: var(--space-6); }

/* Display */
.wr-hidden          { display: none !important; }
.wr-block           { display: block; }
.wr-inline-block    { display: inline-block; }
.wr-flex            { display: flex; }

/* Text overflow */
.wr-text-truncate {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  display: block;
}

.wr-text-clamp-2 {
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  line-clamp: 2;
  overflow: hidden;
}

/* Screen reader only — visually hidden but accessible to assistive tech */
.wr-sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Clearfix (for legacy float layouts — rarely needed but cheap to include) */
.wr-clearfix::after {
  content: "";
  display: table;
  clear: both;
}


/* ============================================================
 * 13. Responsive breakpoints
 *
 * tokens.css declares --breakpoint-* values for JS reference.
 * CSS @media queries use literal pixel values per spec limitation.
 *
 * sm : 0–640px      (mobile)
 * md : 641–768px    (small tablet)
 * lg : 769–1024px   (large tablet / small laptop)
 * xl : 1025–1280px  (desktop)
 * 2xl: 1281+        (wide desktop)
 * ============================================================ */

/* Mobile (≤640px) */
@media (max-width: 640px) {
  .wr-app-header {
    padding: var(--space-2) var(--space-3);
  }

  .wr-app-main {
    padding: var(--space-4) var(--space-3);
  }

  .wr-container {
    padding: 0 var(--space-3);
  }

  .wr-grid {
    grid-template-columns: 1fr;
    gap: var(--space-3);
  }

  /* Stack page header on mobile */
  .wr-page-header {
    flex-direction: column !important;
    align-items: stretch !important;
    padding: var(--space-4) 0 !important;
  }

  .wr-page-header__actions {
    width: 100%;
  }

  .wr-page-header__actions .wr-btn {
    flex: 1 1 auto;
  }

  /* Modal body padding tighter on mobile */
  .wr-modal {
    max-width: 100% !important;
    border-radius: var(--radius-md) !important;
  }

  /* Toast full width minus margins */
  #wr-toast-container {
    left: var(--space-3) !important;
    right: var(--space-3) !important;
  }

  .wr-toast {
    max-width: none !important;
    min-width: 0 !important;
  }
}

/* Small tablet (641–1024px) — tighten grid minimums */
@media (min-width: 641px) and (max-width: 1024px) {
  .wr-grid {
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  }
}

/* Desktop and wider — base styles apply */


/* ============================================================
 * 14. Accessibility
 * ============================================================ */

/* Respect user's reduced-motion preference: kill animations */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

/*
 * Phase 2: Dark mode
 *
 * Two activation strategies — pick one in Phase 2:
 *   A) System preference:
 *      @media (prefers-color-scheme: dark) {
 *        :root { ...override token values per tokens.css stub... }
 *      }
 *   B) Explicit user toggle (recommended):
 *      [data-theme="dark"] {
 *        ...override token values...
 *      }
 *
 * Only override tokens that flip between modes (bg, text, border,
 * shadow opacity). Brand + semantic palettes typically stay.
 *
 * Reference values for Phase 2 design (do not enable now):
 *   --color-bg-primary:    #0B0E14;
 *   --color-bg-secondary:  #11151E;
 *   --color-bg-elevated:   #1A1F2C;
 *   --color-border-default:#2A2F3D;
 *   --color-text-primary:  #E5E7EB;
 *   --color-text-secondary:#9CA3AF;
 *   --color-text-muted:    #6B7280;
 */


/* ============================================================
 * 15. Print
 * ============================================================ */

@media print {
  /* Hide non-essential UI */
  .wr-app-header,
  .wr-app-footer,
  .wr-page-header__actions,
  .wr-btn,
  .wr-toast,
  .wr-modal-backdrop,
  #wr-toast-container,
  .wr-skeleton {
    display: none !important;
  }

  /* Strip backgrounds, force print-friendly black-on-white */
  body {
    background: white !important;
    color: black !important;
  }

  .wr-table-wrapper,
  .wr-kpi-card,
  .wr-form-field__input,
  .wr-table__header,
  .wr-table__cell {
    border: 1px solid #000 !important;
    box-shadow: none !important;
    background: white !important;
    color: black !important;
  }

  /* Show URLs after links for printed reference */
  a[href]::after {
    content: " (" attr(href) ")";
    font-size: 0.875em;
    color: #555;
  }

  /* Hide internal anchor + javascript URLs */
  a[href^="#"]::after,
  a[href^="javascript:"]::after {
    content: "";
  }

  /* Avoid orphan headings + page-break inside cards */
  h1, h2, h3 {
    page-break-after: avoid;
  }

  .wr-kpi-card,
  .wr-table__row {
    page-break-inside: avoid;
  }

  /* Page margins */
  @page {
    margin: 2cm;
  }
}
