/*
==============================================================================
NILE CODES — BASE (reset · document defaults · typography roles · global states)
RTL-first (D-14). Logical properties only; colors/sizes only via semantic
tokens from tokens.css (P3 layering rule; tests enforce).
==============================================================================
*/

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

html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

body {
  margin: 0;
  min-height: 100vh;
  background-color: var(--nc-color-page-bg);
  color: var(--nc-color-text);
  font-family: var(--nc-font-body);
  font-size: var(--nc-text-body);
  line-height: var(--nc-leading-body);
  text-rendering: optimizeSpeed;
}

/* ---------- typography roles → semantic tokens only ---------- */
h1, h2, h3, h4, h5, h6 {
  margin-block: 0 var(--nc-gap-inline);
  font-family: var(--nc-font-heading);
  font-weight: var(--nc-weight-heading);
  line-height: var(--nc-leading-heading);
  color: var(--nc-color-text);
  text-wrap: balance; /* graceful in unsupported browsers */
}

h1 { font-size: var(--nc-text-h1); }
h2 { font-size: var(--nc-text-h2); }
h3 { font-size: var(--nc-text-h3); }
h4, h5, h6 { font-size: var(--nc-text-h4); font-weight: var(--nc-weight-strong); }

p { margin-block: 0 var(--nc-gap-stack); }

.nc-label {
  font-size: var(--nc-text-label);
  font-weight: var(--nc-weight-strong);
  line-height: var(--nc-leading-compact);
  color: var(--nc-color-text-secondary);
}

.nc-caption {
  font-size: var(--nc-text-caption);
  line-height: var(--nc-leading-compact);
  color: var(--nc-color-text-muted);
}

.nc-text--muted { color: var(--nc-color-text-muted); }
.nc-text--body-lg { font-size: var(--nc-text-body-lg); }

a {
  color: var(--nc-color-link);
  text-decoration: underline;          /* never color-only distinction */
  text-underline-offset: 0.18em;
  cursor: pointer;
  transition: color var(--nc-motion-fast) var(--nc-ease-standard);
}
a:hover { color: var(--nc-color-link-hover); }

code, kbd, pre {
  font-family: var(--nc-font-code);
  font-size: 0.95em;
}

/* ---------- media & spacing resets ---------- */
img, video, svg { max-width: 100%; height: auto; }
figure { margin: 0; }
hr { border: 0; }

[hidden] { display: none !important; }

/* ---------- global focus ring (NEVER remove without replacement) ---------- */
:where(a, button, input, select, textarea, summary, [tabindex]):focus-visible {
  outline: var(--nc-border-width-focus) solid var(--nc-color-focus);
  outline-offset: 0.15rem;
  border-radius: var(--nc-radius-control);
}

::selection {
  background: var(--nc-color-accent-soft);
  color: var(--nc-color-text);
}

/* ---------- skip link (a11y baseline) ---------- */
.nc-skip-link {
  position: absolute;
  inset-inline-start: var(--nc-gap-inline-sm);
  inset-block-start: -4rem;
  z-index: var(--nc-z-alert);
  padding: var(--nc-gap-inline-sm) var(--nc-gap-stack);
  background: var(--nc-color-accent);
  color: var(--nc-color-text-on-invested);
  border-radius: var(--nc-radius-control);
  text-decoration: none;
  transition: inset-block-start var(--nc-motion-fast) var(--nc-ease-standard);
}
.nc-skip-link:focus-visible { inset-block-start: var(--nc-gap-inline-sm); }

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 1ms !important;
    scroll-behavior: auto !important;
  }
}
