/* ============================================================
   Classie — Base layer
   Document-level defaults. Not tokens; applies the brand look.
   ============================================================ */

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

html {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

body {
  margin: 0;
  font: var(--role-body);
  color: var(--text-primary);
  background: var(--bg-app);
  letter-spacing: var(--ls-normal);
}

/* Selection */
::selection {
  background: var(--accent-subtle);
  color: var(--text-primary);
}

/* Focus-visible ring */
:focus-visible {
  outline: none;
  box-shadow: var(--glow-accent);
  border-radius: var(--radius-sm);
}

/* Table-scoped focus style — a crisp inset ring rather than the soft glow
   above, matching dense grid controls (sort/filter buttons, focusable rows). */
.ds-table-focus:focus-visible {
  outline: 1px solid var(--cyan-450);
  outline-offset: -1px;
  box-shadow: none;
  border-radius: var(--radius-xs);
}

/* Number inputs — hide the browser's native spinner (Classie renders its
   own always-visible stepper in the Input component). Without this rule
   Chrome's built-in spinner still appears on hover, doubling the control. */
input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  -webkit-appearance: none;
  margin: 0;
}
input[type="number"] {
  -moz-appearance: textfield;
}

/* Scrollbars — thin, dark, cyan on hover */
* {
  scrollbar-width: thin;
  scrollbar-color: var(--navy-600) transparent;
}
*::-webkit-scrollbar {
  width: 10px;
  height: 10px;
}
*::-webkit-scrollbar-track {
  background: transparent;
}
*::-webkit-scrollbar-thumb {
  background: var(--navy-600);
  border-radius: var(--radius-pill);
  border: 2px solid transparent;
  background-clip: content-box;
}
@media (hover: hover) and (pointer: fine) {
*::-webkit-scrollbar-thumb:hover {
  background: var(--navy-500);
  background-clip: content-box;
}
}

/* Utility text roles */
.ds-display {
  font: var(--role-display);
  letter-spacing: var(--ls-tighter);
}
.ds-h1 {
  font: var(--role-h1);
  letter-spacing: var(--ls-tight);
}
.ds-h2 {
  font: var(--role-h2);
  letter-spacing: var(--ls-tight);
}
.ds-h3 {
  font: var(--role-h3);
}
.ds-body {
  font: var(--role-body);
}
.ds-label {
  font: var(--role-label);
}
.ds-mono {
  font: var(--role-mono);
}
.ds-eyebrow {
  font: var(--fw-bold) var(--text-xs) / 1 var(--font-sans);
  text-transform: uppercase;
  letter-spacing: var(--ls-caps);
  color: var(--text-tertiary);
}

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

@keyframes classie-blink {
  0%, 100% {
    opacity: 0.25;
  }
  50% {
    opacity: 1;
  }
}

@keyframes classie-pulse {
  0%, 100% {
    opacity: 1;
  }
  50% {
    opacity: 0.4;
  }
}

@keyframes classie-popover-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}
