/**
 * Nature Index - Base Styles
 * Reset, typography, and foundational styles
 * ==========================================
 */

/* ========================================
   CSS Reset / Normalize
   ======================================== */

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

html {
    font-size: 16px;
    line-height: 1.5;
    -webkit-text-size-adjust: 100%;
    -webkit-tap-highlight-color: transparent;
    scroll-behavior: smooth;
    overflow-x: hidden;
}

body {
    margin: 0;
    font-family: var(--ni-font-primary);
    font-size: var(--ni-text-base);
    font-weight: var(--ni-font-normal);
    line-height: var(--ni-leading-normal);
    color: var(--ni-text-primary);
    background-color: var(--ni-bg-body);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    overflow-x: hidden;
}

/* Remove default margin */
h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd {
    margin: 0;
}

/* Remove list styles */
ul, ol {
    list-style: none;
    margin: 0;
    padding: 0;
}

/* Set core root defaults */
html:focus-within {
    scroll-behavior: smooth;
}

/* A elements that don't have a class get default styles */
a:not([class]) {
    text-decoration-skip-ink: auto;
}

/* Make images easier to work with */
img, picture, video, canvas, svg {
    display: block;
    max-width: 100%;
    height: auto;
}

/* Inherit fonts for inputs and buttons */
input, button, textarea, select {
    font: inherit;
}

/* Remove all animations and transitions for people that prefer not to see them */
@media (prefers-reduced-motion: reduce) {
    html:focus-within {
        scroll-behavior: auto;
    }
    
    *,
    *::before,
    *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
}

/* ========================================
   Typography
   ======================================== */

/* Headings */
h1, h2, h3, h4, h5, h6,
.ni-h1, .ni-h2, .ni-h3, .ni-h4, .ni-h5, .ni-h6 {
    font-family: var(--ni-font-primary);
    font-weight: var(--ni-font-bold);
    line-height: var(--ni-leading-tight);
    color: var(--ni-text-primary);
    margin-bottom: var(--ni-space-4);
}

h1, .ni-h1 {
    font-size: var(--ni-text-4xl);
    letter-spacing: var(--ni-tracking-tight);
}

h2, .ni-h2 {
    font-size: var(--ni-text-3xl);
}

h3, .ni-h3 {
    font-size: var(--ni-text-2xl);
}

h4, .ni-h4 {
    font-size: var(--ni-text-xl);
}

h5, .ni-h5 {
    font-size: var(--ni-text-lg);
}

h6, .ni-h6 {
    font-size: var(--ni-text-base);
    font-weight: var(--ni-font-semibold);
}

/* Paragraphs */
p {
    margin-bottom: var(--ni-space-4);
}

p:last-child {
    margin-bottom: 0;
}

/* Lead text */
.ni-lead {
    font-size: var(--ni-text-xl);
    font-weight: var(--ni-font-light);
    line-height: var(--ni-leading-relaxed);
    color: var(--ni-text-secondary);
}

/* Small text */
small, .ni-small {
    font-size: var(--ni-text-sm);
}

.ni-text-xs {
    font-size: var(--ni-text-xs);
}

/* Links */
a {
    color: var(--ni-primary);
    text-decoration: none;
    transition: var(--ni-transition-colors);
}

a:hover {
    color: var(--ni-primary-dark);
    text-decoration: underline;
}

/* Text utilities */
.ni-text-muted {
    color: var(--ni-text-muted) !important;
}

.ni-text-secondary {
    color: var(--ni-text-secondary) !important;
}

.ni-text-primary-color {
    color: var(--ni-primary) !important;
}

.ni-text-accent {
    color: var(--ni-accent) !important;
}

.ni-text-success {
    color: var(--ni-success) !important;
}

.ni-text-warning {
    color: var(--ni-warning) !important;
}

.ni-text-danger {
    color: var(--ni-danger) !important;
}

.ni-text-info {
    color: var(--ni-info) !important;
}

/* Font weights */
.ni-font-light { font-weight: var(--ni-font-light); }
.ni-font-normal { font-weight: var(--ni-font-normal); }
.ni-font-medium { font-weight: var(--ni-font-medium); }
.ni-font-semibold { font-weight: var(--ni-font-semibold); }
.ni-font-bold { font-weight: var(--ni-font-bold); }

/* Text alignment */
.ni-text-left { text-align: left; }
.ni-text-center { text-align: center; }
.ni-text-right { text-align: right; }

/* Text transform */
.ni-uppercase { text-transform: uppercase; }
.ni-lowercase { text-transform: lowercase; }
.ni-capitalize { text-transform: capitalize; }

/* ========================================
   Layout Utilities
   ======================================== */

/* Container */
.ni-container {
    width: 100%;
    max-width: var(--ni-container-xl);
    margin-left: auto;
    margin-right: auto;
    padding-left: var(--ni-space-4);
    padding-right: var(--ni-space-4);
}

.ni-container-sm { max-width: var(--ni-container-sm); }
.ni-container-md { max-width: var(--ni-container-md); }
.ni-container-lg { max-width: var(--ni-container-lg); }
.ni-container-xl { max-width: var(--ni-container-xl); }
.ni-container-2xl { max-width: var(--ni-container-2xl); }
.ni-container-fluid { max-width: 100%; }

/* Section spacing */
.ni-section {
    padding-top: var(--ni-space-16);
    padding-bottom: var(--ni-space-16);
}

.ni-section-sm {
    padding-top: var(--ni-space-10);
    padding-bottom: var(--ni-space-10);
}

.ni-section-lg {
    padding-top: var(--ni-space-24);
    padding-bottom: var(--ni-space-24);
}

/* Display */
.ni-block { display: block; }
.ni-inline-block { display: inline-block; }
.ni-inline { display: inline; }
.ni-flex { display: flex; }
.ni-inline-flex { display: inline-flex; }
.ni-grid { display: grid; }
.ni-hidden { display: none; }

/* Flexbox utilities */
.ni-flex-row { flex-direction: row; }
.ni-flex-col { flex-direction: column; }
.ni-flex-wrap { flex-wrap: wrap; }
.ni-flex-nowrap { flex-wrap: nowrap; }

.ni-items-start { align-items: flex-start; }
.ni-items-center { align-items: center; }
.ni-items-end { align-items: flex-end; }
.ni-items-stretch { align-items: stretch; }

.ni-justify-start { justify-content: flex-start; }
.ni-justify-center { justify-content: center; }
.ni-justify-end { justify-content: flex-end; }
.ni-justify-between { justify-content: space-between; }
.ni-justify-around { justify-content: space-around; }

.ni-flex-1 { flex: 1 1 0%; }
.ni-flex-auto { flex: 1 1 auto; }
.ni-flex-none { flex: none; }

.ni-gap-1 { gap: var(--ni-space-1); }
.ni-gap-2 { gap: var(--ni-space-2); }
.ni-gap-3 { gap: var(--ni-space-3); }
.ni-gap-4 { gap: var(--ni-space-4); }
.ni-gap-6 { gap: var(--ni-space-6); }
.ni-gap-8 { gap: var(--ni-space-8); }

/* ========================================
   Spacing Utilities
   ======================================== */

/* Margin */
.ni-m-0 { margin: 0; }
.ni-m-1 { margin: var(--ni-space-1); }
.ni-m-2 { margin: var(--ni-space-2); }
.ni-m-3 { margin: var(--ni-space-3); }
.ni-m-4 { margin: var(--ni-space-4); }
.ni-m-6 { margin: var(--ni-space-6); }
.ni-m-8 { margin: var(--ni-space-8); }
.ni-m-auto { margin: auto; }

.ni-mt-0 { margin-top: 0; }
.ni-mt-1 { margin-top: var(--ni-space-1); }
.ni-mt-2 { margin-top: var(--ni-space-2); }
.ni-mt-3 { margin-top: var(--ni-space-3); }
.ni-mt-4 { margin-top: var(--ni-space-4); }
.ni-mt-6 { margin-top: var(--ni-space-6); }
.ni-mt-8 { margin-top: var(--ni-space-8); }

.ni-mb-0 { margin-bottom: 0; }
.ni-mb-1 { margin-bottom: var(--ni-space-1); }
.ni-mb-2 { margin-bottom: var(--ni-space-2); }
.ni-mb-3 { margin-bottom: var(--ni-space-3); }
.ni-mb-4 { margin-bottom: var(--ni-space-4); }
.ni-mb-6 { margin-bottom: var(--ni-space-6); }
.ni-mb-8 { margin-bottom: var(--ni-space-8); }

.ni-ml-auto { margin-left: auto; }
.ni-mr-auto { margin-right: auto; }
.ni-mx-auto { margin-left: auto; margin-right: auto; }

/* Padding */
.ni-p-0 { padding: 0; }
.ni-p-1 { padding: var(--ni-space-1); }
.ni-p-2 { padding: var(--ni-space-2); }
.ni-p-3 { padding: var(--ni-space-3); }
.ni-p-4 { padding: var(--ni-space-4); }
.ni-p-6 { padding: var(--ni-space-6); }
.ni-p-8 { padding: var(--ni-space-8); }

.ni-px-4 { padding-left: var(--ni-space-4); padding-right: var(--ni-space-4); }
.ni-py-4 { padding-top: var(--ni-space-4); padding-bottom: var(--ni-space-4); }
.ni-px-6 { padding-left: var(--ni-space-6); padding-right: var(--ni-space-6); }
.ni-py-6 { padding-top: var(--ni-space-6); padding-bottom: var(--ni-space-6); }

/* ========================================
   Background Utilities
   ======================================== */

.ni-bg-white { background-color: var(--ni-white); }
.ni-bg-surface { background-color: var(--ni-bg-surface); }
.ni-bg-surface-alt { background-color: var(--ni-bg-surface-alt); }
.ni-bg-body { background-color: var(--ni-bg-body); }
.ni-bg-primary { background-color: var(--ni-primary); }
.ni-bg-primary-dark { background-color: var(--ni-primary-dark); }
.ni-bg-accent { background-color: var(--ni-accent); }

/* ========================================
   Border Utilities
   ======================================== */

.ni-border { border: var(--ni-border-width) solid var(--ni-border-color); }
.ni-border-0 { border: 0; }
.ni-border-t { border-top: var(--ni-border-width) solid var(--ni-border-color); }
.ni-border-b { border-bottom: var(--ni-border-width) solid var(--ni-border-color); }
.ni-border-l { border-left: var(--ni-border-width) solid var(--ni-border-color); }
.ni-border-r { border-right: var(--ni-border-width) solid var(--ni-border-color); }

.ni-border-primary { border-color: var(--ni-primary); }
.ni-border-accent { border-color: var(--ni-accent); }

/* Border radius */
.ni-rounded-none { border-radius: var(--ni-radius-none); }
.ni-rounded-sm { border-radius: var(--ni-radius-sm); }
.ni-rounded { border-radius: var(--ni-radius-md); }
.ni-rounded-lg { border-radius: var(--ni-radius-lg); }
.ni-rounded-xl { border-radius: var(--ni-radius-xl); }
.ni-rounded-full { border-radius: var(--ni-radius-full); }

/* ========================================
   Shadow Utilities
   ======================================== */

.ni-shadow-none { box-shadow: none; }
.ni-shadow-xs { box-shadow: var(--ni-shadow-xs); }
.ni-shadow-sm { box-shadow: var(--ni-shadow-sm); }
.ni-shadow { box-shadow: var(--ni-shadow-md); }
.ni-shadow-lg { box-shadow: var(--ni-shadow-lg); }
.ni-shadow-xl { box-shadow: var(--ni-shadow-xl); }

/* ========================================
   Width & Height Utilities
   ======================================== */

.ni-w-full { width: 100%; }
.ni-w-auto { width: auto; }
.ni-w-screen { width: 100vw; }
.ni-max-w-full { max-width: 100%; }

.ni-h-full { height: 100%; }
.ni-h-auto { height: auto; }
.ni-h-screen { height: 100vh; }
.ni-min-h-screen { min-height: 100vh; }

/* ========================================
   Position Utilities
   ======================================== */

.ni-relative { position: relative; }
.ni-absolute { position: absolute; }
.ni-fixed { position: fixed; }
.ni-sticky { position: sticky; }

.ni-inset-0 { top: 0; right: 0; bottom: 0; left: 0; }
.ni-top-0 { top: 0; }
.ni-right-0 { right: 0; }
.ni-bottom-0 { bottom: 0; }
.ni-left-0 { left: 0; }

/* ========================================
   Overflow
   ======================================== */

.ni-overflow-hidden { overflow: hidden; }
.ni-overflow-auto { overflow: auto; }
.ni-overflow-scroll { overflow: scroll; }
.ni-overflow-x-auto { overflow-x: auto; }
.ni-overflow-y-auto { overflow-y: auto; }

/* ========================================
   Visibility & Opacity
   ======================================== */

.ni-visible { visibility: visible; }
.ni-invisible { visibility: hidden; }

.ni-opacity-0 { opacity: 0; }
.ni-opacity-50 { opacity: 0.5; }
.ni-opacity-100 { opacity: 1; }

/* ========================================
   Cursor
   ======================================== */

.ni-cursor-pointer { cursor: pointer; }
.ni-cursor-default { cursor: default; }
.ni-cursor-not-allowed { cursor: not-allowed; }

/* ========================================
   Selection
   ======================================== */

.ni-select-none { user-select: none; }
.ni-select-text { user-select: text; }
.ni-select-all { user-select: all; }

/* ========================================
   Screen Reader Only
   ======================================== */

.ni-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
   ======================================== */

.ni-clearfix::after {
    content: "";
    display: table;
    clear: both;
}

