:root {
    --ink: #12243a;
    --muted: #587087;
    --paper: #f5f9fc;
    --line: #d6e4ef;
    --sky: #c4e5ff;
    --blue: #1687d4;
    --navy: #071b33;
}

html {
    scroll-behavior: smooth;
}

body {
    background: var(--paper);
    color: var(--ink);
    font-family: 'Manrope', sans-serif;
    line-height: 1.7;
}

a { color: var(--blue); }
a:hover { color: var(--navy); }

.site-header { background: rgba(245, 249, 252, .94); border-bottom: 1px solid var(--line); position: relative; z-index: 10; }
.navbar { min-height: 76px; }
.navbar-brand { align-items: center; color: var(--ink); display: flex; font-weight: 800; gap: .65rem; letter-spacing: -.04em; }
.navbar-brand:hover { color: var(--ink); }
.nav-link { color: var(--muted); font-size: .9rem; font-weight: 600; }
.nav-link:hover { color: var(--navy); }
.btn-primary { --bs-btn-bg: var(--blue); --bs-btn-border-color: var(--blue); --bs-btn-hover-bg: var(--navy); --bs-btn-hover-border-color: var(--navy); }

.hero-section { overflow: hidden; padding: 7rem 0 7.5rem; }
.hero-image-section { background: var(--navy) url('../img/hero.jpg') center center / cover no-repeat; color: #fff; min-height: 620px; position: relative; }
.hero-image-overlay { background: linear-gradient(90deg, rgba(5, 20, 38, .16) 0%, rgba(5, 20, 38, .46) 45%, rgba(5, 20, 38, .88) 100%); inset: 0; position: absolute; }
.hero-image-section .container { position: relative; z-index: 1; }
.hero-copy { margin-left: auto; max-width: 650px; }
.eyebrow { align-items: center; color: var(--blue); display: flex; font-family: 'DM Mono', monospace; font-size: .7rem; gap: .6rem; letter-spacing: .08em; text-transform: uppercase; }
.eyebrow span { background: var(--blue); border-radius: 50%; display: inline-block; height: 7px; width: 7px; }
.hero-section h1 { font-size: clamp(2.8rem, 5.5vw, 5rem); font-weight: 800; letter-spacing: -.08em; line-height: 1.04; margin: 1.5rem 0; max-width: 650px; }
.hero-lead { color: #d6e4f0; font-size: 1.15rem; max-width: 620px; }
.hero-image-section .btn-light { color: var(--navy); font-weight: 700; }
.hero-orbit { height: 360px; position: relative; width: 360px; }
.orbit { border: 1px solid rgba(22, 135, 212, .22); border-radius: 50%; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%) rotate(-25deg); }
.orbit-one { height: 260px; width: 360px; }
.orbit-two { height: 360px; transform: translate(-50%, -50%) rotate(55deg); width: 260px; }
.orbit-core { align-items: center; background: var(--navy); border-radius: 50%; box-shadow: 0 20px 50px rgba(7, 27, 51, .22); color: var(--sky); display: flex; font-size: 3rem; height: 125px; justify-content: center; left: 50%; position: absolute; top: 50%; transform: translate(-50%, -50%); width: 125px; }
.section-padding { padding: 6rem 0; }
.section-title { font-size: 2.25rem; font-weight: 800; letter-spacing: -.06em; }
.featured-card, .post-card { border-color: var(--line); border-radius: 1rem; overflow: hidden; }
.featured-card { box-shadow: 0 18px 50px rgba(18, 54, 88, .08); }
.featured-card h3 { font-size: clamp(1.8rem, 3vw, 2.8rem); font-weight: 800; letter-spacing: -.06em; line-height: 1.15; }
.post-card h3 { font-weight: 800; letter-spacing: -.04em; }
.article-card-image { aspect-ratio: 16 / 9; object-fit: cover; }
.compact-card .card-body { padding: 1rem; }
.compact-card .card-title { font-size: 1.1rem; }
.compact-card .article-card-image { aspect-ratio: 16 / 8; }
.post-category { color: var(--blue); font-family: 'DM Mono', monospace; font-size: .68rem; letter-spacing: .08em; text-decoration: none; text-transform: uppercase; }
.post-category:hover { color: var(--navy); }
.article-categories a:empty { display: none; }
.article-categories a { text-decoration: none; }
.article-categories a:not(:empty) ~ a:not(:empty)::before { color: var(--blue); content: '·'; margin: 0 .45rem; }
.article-date { color: var(--muted); font-family: 'DM Mono', monospace; font-size: .72rem; margin: .55rem 0 1rem; }
.read-link { font-size: .9rem; font-weight: 800; text-decoration: none; }
.read-link i { margin-left: .35rem; transition: margin .2s ease; }
.read-link:hover i { margin-left: .6rem; }
.newsletter-section { padding: 0 0 6rem; }
.newsletter-card { background: var(--navy); border-radius: 1rem; color: #fff; margin: 0; padding: 3rem; }
.newsletter-card h2 { font-size: 2rem; font-weight: 800; letter-spacing: -.05em; margin: 1rem 0 .5rem; }
.newsletter-card p { color: #b8d4eb; }
.eyebrow-light { color: var(--sky); }
.eyebrow-light span { background: var(--sky); }
.site-footer { border-top: 1px solid var(--line); color: var(--muted); font-size: .85rem; padding: 2.5rem 0; }
.footer-brand { color: var(--ink); font-weight: 800; margin-bottom: .25rem; }
.footer-links a { color: var(--muted); font-size: 1.35rem; line-height: 1; text-decoration: none; }
.github-links { line-height: 1; }
.github-links a { font-size: .85rem; }
.github-links span { line-height: 1; }
.github-links .github-link { font-size: 1.35rem; }
.footer-links .linkedin-link { color: #0a66c2; }
.footer-links .github-link { color: #000; }
.footer-links .rss-link { color: #f26522; }
.footer-links a:hover { color: var(--blue); }
.content-page { padding: 5rem clamp(2rem, 10vw, 14rem) 6rem; }
.content-article { background: #fff; border: 1px solid var(--line); border-radius: 1rem; margin: 0 auto; padding: 3rem; }
.content-article h1 { font-size: clamp(2.5rem, 6vw, 4.5rem); font-weight: 800; letter-spacing: -.03em; line-height: 1.05; margin: 1rem 0 2.5rem; }
.content-article p, .content-article li { color: #415d75; }
.content-article p { margin-bottom: 1.35rem; }
.article-top-navigation { inset: 0; margin: 0; pointer-events: none; position: absolute; z-index: 1; }
.article-top-navigation-link { pointer-events: auto; transition: background-color .2s ease; }
.article-top-navigation-link:hover, .article-top-navigation-link:focus-visible { background-color: rgba(0, 0, 0, .35); }
.article-meta { color: var(--muted); font-family: 'DM Mono', monospace; font-size: .75rem; letter-spacing: .06em; text-transform: uppercase; }
.content-article li { margin-bottom: .6rem; }
.content-article strong { color: var(--ink); }
.article-featured-figure { margin: -1rem auto 2.5rem; position: relative; text-align: center; }
.content-article img { height: auto; max-width: 100%; }
.article-featured-image { border-radius: .65rem; display: block; margin: 0 auto; max-width: 100%; }
.article-image-figure { margin: 1.5rem auto; text-align: center; }
.article-content-image { border-radius: .65rem; display: block; margin: 2rem auto; }
.image-modal-trigger { cursor: zoom-in; display: inline-block; max-width: 100%; }
.image-modal-content { height: auto; max-height: calc(100vh - 10rem); max-width: 100%; object-fit: contain; width: auto; }
.modal-body { overflow: auto; }
.code-block { background: #17344d; border-radius: .65rem; color: #f3f8ff; counter-reset: code-line; display: block; font-family: 'DM Mono', monospace; font-size: .82rem; line-height: 1.4; margin: 1.5rem 0; max-width: 100%; overflow-x: auto; padding: 1rem 0; white-space: normal; }
.code-block code { color: inherit; }
.code-line { counter-increment: code-line; display: block; min-height: 1.4em; padding: 0 1rem 0 4rem; position: relative; white-space: pre; }
.code-line::before { color: #8da7bf; content: counter(code-line); left: 0; position: absolute; text-align: right; width: 2.5rem; }
.empty-article-state { background: #fff; border: 1px dashed var(--line); border-radius: 1rem; color: var(--muted); padding: 2rem; text-align: center; }

.valid.modified:not([type=checkbox]) {
    outline: 1px solid #26b050;
}

.invalid {
    outline: 1px solid red;
}

.validation-message {
    color: red;
}

#blazor-error-ui {
    color-scheme: light only;
    background: lightyellow;
    bottom: 0;
    box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2);
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 1.25rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    #blazor-error-ui .dismiss {
        cursor: pointer;
        position: absolute;
        right: 0.75rem;
        top: 0.5rem;
    }

.blazor-error-boundary {
    background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNDkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIG92ZXJmbG93PSJoaWRkZW4iPjxkZWZzPjxjbGlwUGF0aCBpZD0iY2xpcDAiPjxyZWN0IHg9IjIzNSIgeT0iNTEiIHdpZHRoPSI1NiIgaGVpZ2h0PSI0OSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMCkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0yMzUgLTUxKSI+PHBhdGggZD0iTTI2My41MDYgNTFDMjY0LjcxNyA1MSAyNjUuODEzIDUxLjQ4MzcgMjY2LjYwNiA1Mi4yNjU4TDI2Ny4wNTIgNTIuNzk4NyAyNjcuNTM5IDUzLjYyODMgMjkwLjE4NSA5Mi4xODMxIDI5MC41NDUgOTIuNzk1IDI5MC42NTYgOTIuOTk2QzI5MC44NzcgOTMuNTEzIDI5MSA5NC4wODE1IDI5MSA5NC42NzgyIDI5MSA5Ny4wNjUxIDI4OS4wMzggOTkgMjg2LjYxNyA5OUwyNDAuMzgzIDk5QzIzNy45NjMgOTkgMjM2IDk3LjA2NTEgMjM2IDk0LjY3ODIgMjM2IDk0LjM3OTkgMjM2LjAzMSA5NC4wODg2IDIzNi4wODkgOTMuODA3MkwyMzYuMzM4IDkzLjAxNjIgMjM2Ljg1OCA5Mi4xMzE0IDI1OS40NzMgNTMuNjI5NCAyNTkuOTYxIDUyLjc5ODUgMjYwLjQwNyA1Mi4yNjU4QzI2MS4yIDUxLjQ4MzcgMjYyLjI5NiA1MSAyNjMuNTA2IDUxWk0yNjMuNTg2IDY2LjAxODNDMjYwLjczNyA2Ni4wMTgzIDI1OS4zMTMgNjcuMTI0NSAyNTkuMzEzIDY5LjMzNyAyNTkuMzEzIDY5LjYxMDIgMjU5LjMzMiA2OS44NjA4IDI1OS4zNzEgNzAuMDg4N0wyNjEuNzk1IDg0LjAxNjEgMjY1LjM4IDg0LjAxNjEgMjY3LjgyMSA2OS43NDc1QzI2Ny44NiA2OS43MzA5IDI2Ny44NzkgNjkuNTg3NyAyNjcuODc5IDY5LjMxNzkgMjY3Ljg3OSA2Ny4xMTgyIDI2Ni40NDggNjYuMDE4MyAyNjMuNTg2IDY2LjAxODNaTTI2My41NzYgODYuMDU0N0MyNjEuMDQ5IDg2LjA1NDcgMjU5Ljc4NiA4Ny4zMDA1IDI1OS43ODYgODkuNzkyMSAyNTkuNzg2IDkyLjI4MzcgMjYxLjA0OSA5My41Mjk1IDI2My41NzYgOTMuNTI5NSAyNjYuMTE2IDkzLjUyOTUgMjY3LjM4NyA5Mi4yODM3IDI2Ny4zODcgODkuNzkyMSAyNjcuMzg3IDg3LjMwMDUgMjY2LjExNiA4Ni4wNTQ3IDI2My41NzYgODYuMDU0N1oiIGZpbGw9IiNGRkU1MDAiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvZz48L3N2Zz4=) no-repeat 1rem/1.8rem, #b32121;
    padding: 1rem 1rem 1rem 3.7rem;
    color: white;
}

    .blazor-error-boundary::after {
        content: "An error has occurred."
    }

.loading-progress {
    position: absolute;
    display: block;
    width: 8rem;
    height: 8rem;
    inset: 20vh 0 auto 0;
    margin: 0 auto 0 auto;
}

    .loading-progress circle {
        fill: none;
        stroke: #e0e0e0;
        stroke-width: 0.6rem;
        transform-origin: 50% 50%;
        transform: rotate(-90deg);
    }

        .loading-progress circle:last-child {
            stroke: #1b6ec2;
            stroke-dasharray: calc(3.141 * var(--blazor-load-percentage, 0%) * 0.8), 500%;
            transition: stroke-dasharray 0.05s ease-in-out;
        }

.loading-progress-text {
    position: absolute;
    text-align: center;
    font-weight: bold;
    inset: calc(20vh + 3.25rem) 0 auto 0.2rem;
}

    .loading-progress-text:after {
        content: var(--blazor-load-percentage-text, "Loading");
    }

code {
    color: #c02d76;
}

.form-floating > .form-control-plaintext::placeholder, .form-floating > .form-control::placeholder {
    color: var(--bs-secondary-color);
    text-align: end;
}

.form-floating > .form-control-plaintext:focus::placeholder, .form-floating > .form-control:focus::placeholder {
    text-align: start;
}

.wordpress-content {
    max-width: 50rem;
    margin: 0 auto;
    line-height: 1.7;
}

.wordpress-content h2 {
    margin-top: 2rem;
}

.about-photo {
    float: right;
    margin: 0 0 1.5rem 2rem;
    text-align: center;
}

.about-photo img {
    max-width: 100%;
    height: auto;
}

@media (max-width: 991.98px) {
    .content-page { padding-left: 1rem; padding-right: 1rem; }
}

@media (max-width: 40rem) {
    .about-photo {
        float: none;
        margin: 0 auto 1.5rem;
    }
}

@media (max-width: 576px) {
    .hero-section { padding: 4.5rem 0 5rem; }
    .hero-section h1 { font-size: 3.2rem; }
    .hero-lead { font-size: 1rem; }
    .section-padding { padding: 4rem 0; }
    .newsletter-card, .content-article { padding: 1.75rem; }
    .content-page { padding: 3rem .75rem 4rem; }
}