/**
 * Typography
 *
 * Foundational text styles for all HTML elements.
 * All values reference variables defined in variables.css.
 *
 * Table of contents:
 *   1. Base / body
 *   2. Headings (h1–h6)
 *   3. Paragraphs & inline text
 *   4. Links
 *   5. Lists
 *   6. Blockquote & code
 */


/* =========================================================
   1. Base / body
   ========================================================= */

body {
    font-family:  var(--font-body);
    font-size:    var(--font-size-base);
    font-weight:  var(--font-weight-normal);
    line-height:  var(--line-height-normal);
    color:        var(--color-text-dark);
}


/* =========================================================
   2. Headings
   ========================================================= */

h1, h2, h3, h4, h5, h6 {
    font-family:   var(--font-heading);
    font-weight:   var(--font-weight-bold);
    line-height:   var(--line-height-tight);
    color:         var(--color-primary);
    margin-top:    0;
    margin-bottom: var(--spacing-md);
}

h1 {
    font-size: 4.5rem;    /* 72px */
}

h2 {
    font-size: 3.25rem;   /* 52px */
}

h3 {
    font-size: 2.875rem;  /* 46px */
}

h4 {
    font-size: 2.375rem;  /* 38px */
}

h5 {
    font-size: 2rem;      /* 32px */
}

h6 {
    font-size: 1.75rem;   /* 28px */
    font-weight: var(--font-weight-semibold);
}


/* =========================================================
   3. Paragraphs & inline text
   ========================================================= */

p {
    font-size:     var(--font-size-base);
    line-height:   var(--line-height-normal);
    color:         var(--color-text-dark);
    margin-top:    0;
    margin-bottom: var(--spacing-md);
}

small {
    font-size: var(--font-size-sm);
    color:     var(--color-text-light);
}

strong,
b {
    font-weight: var(--font-weight-bold);
}

em,
i {
    font-style: italic;
}

mark {
    background-color: var(--color-accent);
    color:            var(--color-black);
    padding:          0 var(--spacing-xs);
    border-radius:    var(--radius-sm);
}

abbr[title] {
    text-decoration: underline dotted;
    cursor:          help;
}


/* =========================================================
   4. Links
   ========================================================= */

a {
    color:           var(--color-primary);
    text-decoration: none;
    transition:      color var(--transition-fast);
}

a:hover,
a:focus {
    color:           var(--color-primary-hover);
    text-decoration: underline;
}

a:focus-visible {
    outline:        2px solid var(--color-primary);
    outline-offset: 2px;
    border-radius:  var(--radius-sm);
}


/* =========================================================
   5. Lists
   ========================================================= */

ul,
ol {
    margin-top:    0;
    margin-bottom: var(--spacing-md);
    padding-left:  var(--spacing-xl);
}

li {
    margin-bottom: var(--spacing-xs);
    line-height:   var(--line-height-normal);
}

/* Remove list style when ul/ol has no inherent list role (utility) */
ul.list-none,
ol.list-none {
    list-style: none;
    padding-left: 0;
}

/* Nested lists */
ul ul,
ul ol,
ol ul,
ol ol {
    margin-top:    var(--spacing-xs);
    margin-bottom: var(--spacing-xs);
}

dt {
    font-weight: var(--font-weight-semibold);
}

dd {
    margin-left:   var(--spacing-lg);
    margin-bottom: var(--spacing-sm);
    color:         var(--color-text-light);
}


/* =========================================================
   6. Blockquote & code
   ========================================================= */

blockquote {
    margin:        var(--spacing-lg) 0;
    padding:       var(--spacing-md) var(--spacing-lg);
    border-left:   4px solid var(--color-primary);
    background:    var(--color-surface);
    border-radius: 0 var(--radius-md) var(--radius-md) 0;
    color:         var(--color-text-light);
    font-style:    italic;
}

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

code,
kbd,
samp {
    font-family:   var(--font-mono);
    font-size:     var(--font-size-sm);
    background:    var(--color-surface);
    color:         var(--color-error);
    padding:       var(--spacing-xs) var(--spacing-sm);
    border-radius: var(--radius-sm);
    border:        var(--border-width) var(--border-style) var(--color-border);
}

pre {
    font-family:   var(--font-mono);
    font-size:     var(--font-size-sm);
    background:    var(--color-surface);
    border:        var(--border-width) var(--border-style) var(--color-border);
    border-radius: var(--radius-lg);
    padding:       var(--spacing-lg);
    overflow-x:    auto;
    margin-bottom: var(--spacing-md);
}

pre code {
    background:    transparent;
    border:        none;
    padding:       0;
    font-size:     inherit;
    color:         var(--color-text-dark);
}

hr {
    border:        none;
    border-top:    var(--border-width) var(--border-style) var(--color-border);
    margin:        var(--spacing-2xl) 0;
}
