/* ==========================================================================
   BASEMENT.CSS — A production-ready CSS foundation
   ==========================================================================

   USAGE:
   1. Include this file in your HTML <head>:
      <link rel="stylesheet" href="basement.css">

   2. (Optional) For better performance, replace the @import with a <link> to
      Google Fonts before including basement.css:
      <link rel="preconnect" href="https://fonts.googleapis.com">
      <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
      <link href="https://fonts.googleapis.com/css2?family=Crimson+Text:ital,wght@0,400;0,600;0,700;1,400;1,600;1,700&family=Fira+Code:wght@400;500&display=swap" rel="stylesheet">

   3. All custom properties can be overridden by re-declaring them in your
      own stylesheet after basement.css.

   Palette:
     - Primary (cream)    --color-primary
     - Secondary (gold)   --color-secondary
     - Background (slate) --color-bg
     - Surface (sea green)--color-surface
     - Text (beige)       --color-text
   ========================================================================== */

/* --------------------------------------------------------------------------
   Google Fonts
   -------------------------------------------------------------------------- */
@import url('https://fonts.googleapis.com/css2?family=Crimson+Text:ital,wght@0,400;0,600;0,700;1,400;1,600;1,700&family=Fira+Code:wght@400;500&display=swap');

/* --------------------------------------------------------------------------
   1. CSS Reset (Modern Normalize)
   -------------------------------------------------------------------------- */
/* Box sizing */
*,
*::before,
*::after {
    box-sizing: border-box;
}

/* Remove default margins & paddings */
body,
h1, h2, h3, h4, h5, h6,
p, ul, ol, dl, dd,
figure, blockquote, pre {
    margin: 0;
    padding: 0;
}

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

/* Responsive images and media */
img, svg, video, canvas {
    max-width: 100%;
    height: auto;
    display: block;
}

/* Form elements inherit font */
input, button, textarea, select {
    font: inherit;
    color: inherit;
}

/* Remove default button styling */
button {
    background: none;
    border: none;
    cursor: pointer;
}

/* Links – basic reset */
a {
    color: inherit;
    text-decoration: none;
}

/* --------------------------------------------------------------------------
   2. CSS Custom Properties
   -------------------------------------------------------------------------- */
:root {
    /* Colors */
    --color-primary:   #F5F1E8;   /* Cream / off-white */
    --color-secondary: #B5A642;   /* Olive gold */
    --color-bg:        #1B262C;   /* Dark slate */
    --color-surface:   #2F4F4F;   /* Dark sea green */
    --color-text:      #F5F5DC;   /* Beige */

    /* Typography */
    --font-heading: 'Crimson Text', Georgia, serif;
    --font-body:    'Crimson Text', Georgia, serif;
    --font-mono:    'Fira Code', 'Source Code Pro', 'Consolas', monospace;

    /* Spacing scale (rem) — used by utility classes
       0: 0
       1: 0.25
       2: 0.5
       3: 1
       4: 1.5
       5: 2
    */
}

/* --------------------------------------------------------------------------
   3. Base Typography
   -------------------------------------------------------------------------- */
html {
    font-size: 16px;               /* 1rem = 16px */
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    scroll-behavior: smooth;
}

body {
    background-color: var(--color-bg);
    color: var(--color-text);
    font-family: var(--font-body);
}

/* Headings */
h1, h2, h3, h4, h5, h6 {
    font-family: var(--font-heading);
    line-height: 1.25;
    font-weight: 600;
}

h1 { font-size: 2.5rem; font-weight: 700; }
h2 { font-size: 2rem;   }
h3 { font-size: 1.75rem;}
h4 { font-size: 1.5rem; }
h5 { font-size: 1.25rem;}
h6 { font-size: 1rem;   }

/* Code / monospace */
code, pre, kbd, samp {
    font-family: var(--font-mono);
    font-size: 0.9em;
}

pre {
    background: var(--color-surface);
    color: var(--color-text);
    padding: 1rem;
    border-radius: 0.25rem;
    overflow-x: auto;
}

/* --------------------------------------------------------------------------
   4. Component Classes
   -------------------------------------------------------------------------- */

/* ---- Layout ---- */
.container {
    width: 100%;
    max-width: 1280px;
    margin-left: auto;
    margin-right: auto;
    padding-left: 1rem;
    padding-right: 1rem;
}

.container-fluid {
    width: 100%;
    padding-left: 1rem;
    padding-right: 1rem;
}

.row {
    display: flex;
    flex-wrap: wrap;
    margin-left: -0.5rem;
    margin-right: -0.5rem;
}

.col {
    flex: 1 0 0%;
    padding-left: 0.5rem;
    padding-right: 0.5rem;
}

.col-auto {
    flex: 0 0 auto;
    width: auto;
}

/* Flex utilities */
.flex          { display: flex; }
.flex-col      { flex-direction: column; }
.flex-center   { display: flex; justify-content: center; align-items: center; }
.flex-between  { display: flex; justify-content: space-between; align-items: center; }
.flex-wrap     { flex-wrap: wrap; }

/* ---- Cards & Surfaces ---- */
.card {
    background-color: var(--color-surface);
    border-radius: 0.5rem;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);
    padding: 1.5rem;
}

.surface {
    background-color: var(--color-surface);
}

.panel {
    border: 1px solid var(--color-secondary);
    border-radius: 0.25rem;
    padding: 1rem;
}

/* ---- Buttons ---- */
.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0.5rem 1.25rem;
    font-family: var(--font-body);
    font-size: 1rem;
    line-height: 1.5;
    border: 2px solid transparent;
    border-radius: 0.25rem;
    background-color: var(--color-secondary);
    color: var(--color-bg);
    cursor: pointer;
    transition: all 0.2s ease;
}

.btn:hover {
    opacity: 0.9;
}

.btn:focus-visible {
    outline: 2px solid var(--color-secondary);
    outline-offset: 2px;
}

.btn-primary {
    background-color: var(--color-primary);
    color: var(--color-bg);
}

.btn-outline {
    background-color: transparent;
    border-color: var(--color-secondary);
    color: var(--color-secondary);
}

.btn-outline:hover {
    background-color: var(--color-secondary);
    color: var(--color-bg);
}

.btn-small {
    padding: 0.25rem 0.75rem;
    font-size: 0.875rem;
}

.btn-large {
    padding: 0.75rem 1.75rem;
    font-size: 1.25rem;
}

/* ---- Forms ---- */
.input,
.textarea,
.select {
    width: 100%;
    padding: 0.5rem 0.75rem;
    font-family: var(--font-body);
    font-size: 1rem;
    line-height: 1.5;
    color: var(--color-text);
    background-color: var(--color-surface);
    border: 1px solid var(--color-secondary);
    border-radius: 0.25rem;
    transition: border-color 0.2s;
}

.input:focus,
.textarea:focus,
.select:focus {
    outline: none;
    border-color: var(--color-primary);
    box-shadow: 0 0 0 2px rgba(181, 166, 66, 0.4);
}

.textarea {
    resize: vertical;
}

.select {
    appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='%23B5A642'%3E%3Cpath d='M6 8L1 3h10z'/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right 0.75rem center;
    background-size: 0.75rem;
    padding-right: 2rem;
}

.form-group {
    margin-bottom: 1rem;
}

.label {
    display: block;
    margin-bottom: 0.25rem;
    font-weight: 600;
    color: var(--color-text);
}

/* Custom checkbox & radio */
.checkbox,
.radio {
    appearance: none;
    -webkit-appearance: none;
    width: 1.2em;
    height: 1.2em;
    border: 2px solid var(--color-secondary);
    background-color: var(--color-surface);
    display: inline-block;
    position: relative;
    cursor: pointer;
    vertical-align: middle;
    margin-right: 0.4em;
}

.checkbox {
    border-radius: 0.2em;
}

.radio {
    border-radius: 50%;
}

.checkbox:checked::after {
    content: '';
    position: absolute;
    left: 4px;
    top: 1px;
    width: 5px;
    height: 10px;
    border: solid var(--color-secondary);
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}

.radio:checked::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 0.6em;
    height: 0.6em;
    border-radius: 50%;
    background-color: var(--color-secondary);
}

/* ---- Typography Utilities ---- */
.text-primary   { color: var(--color-primary); }
.text-secondary { color: var(--color-secondary); }
.text-muted     { color: var(--color-text); opacity: 0.6; }

.heading-1 { font-size: 2.5rem; font-weight: 700; }
.heading-2 { font-size: 2rem;   font-weight: 600; }
.heading-3 { font-size: 1.75rem;font-weight: 600; }
.heading-4 { font-size: 1.5rem; font-weight: 600; }
.heading-5 { font-size: 1.25rem;font-weight: 600; }
.heading-6 { font-size: 1rem;   font-weight: 600; }

.text-center { text-align: center; }
.text-right  { text-align: right; }
.text-left   { text-align: left; }

.text-small  { font-size: 0.875rem; }
.text-large  { font-size: 1.25rem; }

.font-mono   { font-family: var(--font-mono); }

/* ---- Navigation ---- */
.nav {
    display: flex;
    flex-wrap: wrap;
    padding-left: 0;
    margin-bottom: 0;
    list-style: none;
}

.nav-vertical {
    flex-direction: column;
}

.nav-link {
    display: block;
    padding: 0.5rem 1rem;
    color: var(--color-text);
    text-decoration: none;
    border-radius: 0.25rem;
    transition: color 0.2s, background-color 0.2s;
}

.nav-link:hover,
.nav-link:focus {
    color: var(--color-secondary);
    background-color: rgba(181, 166, 66, 0.1);
}

.nav-link.active {
    color: var(--color-primary);
    background-color: var(--color-secondary);
}

/* ---- Accessibility ---- */
.sr-only,
.visually-hidden {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

.hidden {
    display: none !important;
}

/* Global focus style for keyboard users */
:focus-visible {
    outline: 2px solid var(--color-secondary);
    outline-offset: 2px;
}

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

/* --------------------------------------------------------------------------
   5. Spacing & Utility Scale
   -------------------------------------------------------------------------- */
/* Margin */
.m-0  { margin: 0; }
.m-1  { margin: 0.25rem; }
.m-2  { margin: 0.5rem; }
.m-3  { margin: 1rem; }
.m-4  { margin: 1.5rem; }
.m-5  { margin: 2rem; }

.mt-0 { margin-top: 0; }
.mt-1 { margin-top: 0.25rem; }
.mt-2 { margin-top: 0.5rem; }
.mt-3 { margin-top: 1rem; }
.mt-4 { margin-top: 1.5rem; }
.mt-5 { margin-top: 2rem; }

.mr-0 { margin-right: 0; }
.mr-1 { margin-right: 0.25rem; }
.mr-2 { margin-right: 0.5rem; }
.mr-3 { margin-right: 1rem; }
.mr-4 { margin-right: 1.5rem; }
.mr-5 { margin-right: 2rem; }

.mb-0 { margin-bottom: 0; }
.mb-1 { margin-bottom: 0.25rem; }
.mb-2 { margin-bottom: 0.5rem; }
.mb-3 { margin-bottom: 1rem; }
.mb-4 { margin-bottom: 1.5rem; }
.mb-5 { margin-bottom: 2rem; }

.ml-0 { margin-left: 0; }
.ml-1 { margin-left: 0.25rem; }
.ml-2 { margin-left: 0.5rem; }
.ml-3 { margin-left: 1rem; }
.ml-4 { margin-left: 1.5rem; }
.ml-5 { margin-left: 2rem; }

.mx-0 { margin-left: 0; margin-right: 0; }
.mx-1 { margin-left: 0.25rem; margin-right: 0.25rem; }
.mx-2 { margin-left: 0.5rem; margin-right: 0.5rem; }
.mx-3 { margin-left: 1rem; margin-right: 1rem; }
.mx-4 { margin-left: 1.5rem; margin-right: 1.5rem; }
.mx-5 { margin-left: 2rem; margin-right: 2rem; }

.my-0 { margin-top: 0; margin-bottom: 0; }
.my-1 { margin-top: 0.25rem; margin-bottom: 0.25rem; }
.my-2 { margin-top: 0.5rem; margin-bottom: 0.5rem; }
.my-3 { margin-top: 1rem; margin-bottom: 1rem; }
.my-4 { margin-top: 1.5rem; margin-bottom: 1.5rem; }
.my-5 { margin-top: 2rem; margin-bottom: 2rem; }

.mx-auto { margin-left: auto; margin-right: auto; }

/* Padding */
.p-0  { padding: 0; }
.p-1  { padding: 0.25rem; }
.p-2  { padding: 0.5rem; }
.p-3  { padding: 1rem; }
.p-4  { padding: 1.5rem; }
.p-5  { padding: 2rem; }

.pt-0 { padding-top: 0; }
.pt-1 { padding-top: 0.25rem; }
.pt-2 { padding-top: 0.5rem; }
.pt-3 { padding-top: 1rem; }
.pt-4 { padding-top: 1.5rem; }
.pt-5 { padding-top: 2rem; }

.pr-0 { padding-right: 0; }
.pr-1 { padding-right: 0.25rem; }
.pr-2 { padding-right: 0.5rem; }
.pr-3 { padding-right: 1rem; }
.pr-4 { padding-right: 1.5rem; }
.pr-5 { padding-right: 2rem; }

.pb-0 { padding-bottom: 0; }
.pb-1 { padding-bottom: 0.25rem; }
.pb-2 { padding-bottom: 0.5rem; }
.pb-3 { padding-bottom: 1rem; }
.pb-4 { padding-bottom: 1.5rem; }
.pb-5 { padding-bottom: 2rem; }

.pl-0 { padding-left: 0; }
.pl-1 { padding-left: 0.25rem; }
.pl-2 { padding-left: 0.5rem; }
.pl-3 { padding-left: 1rem; }
.pl-4 { padding-left: 1.5rem; }
.pl-5 { padding-left: 2rem; }

.px-0 { padding-left: 0; padding-right: 0; }
.px-1 { padding-left: 0.25rem; padding-right: 0.25rem; }
.px-2 { padding-left: 0.5rem; padding-right: 0.5rem; }
.px-3 { padding-left: 1rem; padding-right: 1rem; }
.px-4 { padding-left: 1.5rem; padding-right: 1.5rem; }
.px-5 { padding-left: 2rem; padding-right: 2rem; }

.py-0 { padding-top: 0; padding-bottom: 0; }
.py-1 { padding-top: 0.25rem; padding-bottom: 0.25rem; }
.py-2 { padding-top: 0.5rem; padding-bottom: 0.5rem; }
.py-3 { padding-top: 1rem; padding-bottom: 1rem; }
.py-4 { padding-top: 1.5rem; padding-bottom: 1.5rem; }
.py-5 { padding-top: 2rem; padding-bottom: 2rem; }

/* Rounded & Shadows */
.rounded       { border-radius: 0.25rem; }
.rounded-lg    { border-radius: 0.5rem; }
.rounded-full  { border-radius: 9999px; }

.shadow        { box-shadow: 0 1px 3px rgba(0, 0, 0, 0.3); }
.shadow-lg     { box-shadow: 0 4px 6px rgba(0, 0, 0, 0.4); }

/* --------------------------------------------------------------------------
   6. Responsive Breakpoints
   -------------------------------------------------------------------------- */
/* sm: 640px */
@media (min-width: 640px) {
    .sm\:flex        { display: flex; }
    .sm\:flex-col    { flex-direction: column; }
    .sm\:flex-row    { flex-direction: row; }
    .sm\:flex-center { display: flex; justify-content: center; align-items: center; }
    .sm\:flex-between{ display: flex; justify-content: space-between; align-items: center; }
    .sm\:flex-wrap   { flex-wrap: wrap; }
    .sm\:hidden      { display: none; }
    .sm\:block       { display: block; }
    .sm\:inline      { display: inline; }
    .sm\:text-center { text-align: center; }
    .sm\:text-left   { text-align: left; }
    .sm\:text-right  { text-align: right; }
    .sm\:text-small  { font-size: 0.875rem; }
    .sm\:text-large  { font-size: 1.25rem; }

    /* Spacing scale (abbreviated example – full scale can be generated) */
    .sm\:m-0  { margin: 0; }
    .sm\:mt-0 { margin-top: 0; }
    .sm\:mb-0 { margin-bottom: 0; }
    .sm\:p-0  { padding: 0; }
    .sm\:pt-0 { padding-top: 0; }
    .sm\:pb-0 { padding-bottom: 0; }
}

/* md: 768px */
@media (min-width: 768px) {
    .md\:flex        { display: flex; }
    .md\:flex-col    { flex-direction: column; }
    .md\:flex-row    { flex-direction: row; }
    .md\:flex-center { display: flex; justify-content: center; align-items: center; }
    .md\:flex-between{ display: flex; justify-content: space-between; align-items: center; }
    .md\:flex-wrap   { flex-wrap: wrap; }
    .md\:hidden      { display: none; }
    .md\:block       { display: block; }
    .md\:inline      { display: inline; }
    .md\:text-center { text-align: center; }
    .md\:text-left   { text-align: left; }
    .md\:text-right  { text-align: right; }
    .md\:text-small  { font-size: 0.875rem; }
    .md\:text-large  { font-size: 1.25rem; }

    .md\:m-2  { margin: 0.5rem; }
    .md\:mt-2 { margin-top: 0.5rem; }
    .md\:mb-2 { margin-bottom: 0.5rem; }
    .md\:p-2  { padding: 0.5rem; }
    .md\:pt-2 { padding-top: 0.5rem; }
    .md\:pb-2 { padding-bottom: 0.5rem; }
}

/* lg: 1024px */
@media (min-width: 1024px) {
    .lg\:flex        { display: flex; }
    .lg\:flex-col    { flex-direction: column; }
    .lg\:flex-row    { flex-direction: row; }
    .lg\:flex-center { display: flex; justify-content: center; align-items: center; }
    .lg\:flex-between{ display: flex; justify-content: space-between; align-items: center; }
    .lg\:flex-wrap   { flex-wrap: wrap; }
    .lg\:hidden      { display: none; }
    .lg\:block       { display: block; }
    .lg\:inline      { display: inline; }
    .lg\:text-center { text-align: center; }
    .lg\:text-left   { text-align: left; }
    .lg\:text-right  { text-align: right; }
    .lg\:text-small  { font-size: 0.875rem; }
    .lg\:text-large  { font-size: 1.25rem; }

    .lg\:m-3  { margin: 1rem; }
    .lg\:mt-3 { margin-top: 1rem; }
    .lg\:mb-3 { margin-bottom: 1rem; }
    .lg\:p-3  { padding: 1rem; }
    .lg\:pt-3 { padding-top: 1rem; }
    .lg\:pb-3 { padding-bottom: 1rem; }
    .lg\:mx-auto { margin-left: auto; margin-right: auto; }
}

/* xl: 1280px */
@media (min-width: 1280px) {
    .xl\:flex        { display: flex; }
    .xl\:flex-col    { flex-direction: column; }
    .xl\:flex-row    { flex-direction: row; }
    .xl\:flex-center { display: flex; justify-content: center; align-items: center; }
    .xl\:flex-between{ display: flex; justify-content: space-between; align-items: center; }
    .xl\:flex-wrap   { flex-wrap: wrap; }
    .xl\:hidden      { display: none; }
    .xl\:block       { display: block; }
    .xl\:inline      { display: inline; }
    .xl\:text-center { text-align: center; }
    .xl\:text-left   { text-align: left; }
    .xl\:text-right  { text-align: right; }
    .xl\:text-small  { font-size: 0.875rem; }
    .xl\:text-large  { font-size: 1.25rem; }

    .xl\:m-4  { margin: 1.5rem; }
    .xl\:mt-4 { margin-top: 1.5rem; }
    .xl\:mb-4 { margin-bottom: 1.5rem; }
    .xl\:p-4  { padding: 1.5rem; }
    .xl\:pt-4 { padding-top: 1.5rem; }
    .xl\:pb-4 { padding-bottom: 1.5rem; }
}
