
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

html {
    scroll-behavior: smooth;
}

/* One gutter for the whole site, so 320px and 430px are the same design at
   two sizes rather than two designs. It tightens on a small phone, where 20px
   a side was a eighth of the screen, and settles at 20px from 500px up. */
:root {
    --gutter: clamp(12px, 4vw, 20px);
    --card-pad: clamp(14px, 4.5vw, 28px);
}

body {
    margin: 0;
    padding: 0;
    min-height: 100vh;
    /* a phone browser shows and hides its own bars as you scroll, and 100vh is
       always the taller state, so a full-height block starts off cut short */
    min-height: 100dvh;
    background-color: #D3ECEB;
    position: relative;
    overflow-x: hidden;
    font-family: 'Montserrat', 'Montserrat Fallback', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
}

/* ===== NAVBAR ===== */
.navbar {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 60px;
    background: #0f0f0f;
    z-index: 100;
    border-bottom: 2px solid #FFD700;
}

.nav-menu {
    list-style: none;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: 40px;
    margin: 0;
    padding: 0 20px;
    height: 100%;
}

.nav-link {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 500;
    font-size: 1rem;
    color: #e6e6e6;
    text-decoration: none;
    padding: 8px 16px;
    border-radius: 6px;
    transition: all 0.3s ease;
    position: relative;
    letter-spacing: 0.5px;
    display: inline-block;
    cursor: pointer;
}

.nav-link:hover {
    color: #FFFFFF;
    background-color: rgba(255, 215, 0, 0.2);
}

.nav-link::after {
    content: '';
    position: absolute;
    bottom: -1px;
    left: 50%;
    transform: translateX(-50%);
    width: 0;
    height: 4px;
    background-color: #FFD700;
    transition: width 0.3s ease;
    z-index: 101;
}

.nav-link:hover::after {
    width: 80%;
}

.nav-link:active {
    color: #FFD700;
}

/* Active nav link (scroll-based highlighting) */
.nav-link.active {
    color: #FFD700;
    background-color: rgba(255, 215, 0, 0.15);
}

.nav-link.active::after {
    width: 80%;
}

/* ===== CHECKERBOARD OVERLAY ===== */
.checkerboard-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-image: 
        linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%),
        linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, rgba(255, 255, 255, 0.15) 75%),
        linear-gradient(-45deg, transparent 75%, rgba(255, 255, 255, 0.15) 75%);
    background-size: 20px 20px;
    background-position: 0 0, 0 10px, 10px -10px, -10px 0px;
    opacity: 0.8;
    pointer-events: none;
    z-index: 1;
}

/* ===== SECTIONS ===== */
.content,
.section {
    scroll-margin-top: 80px;
}

/* ===== HOME / HERO SECTION ===== */
.content {
    position: relative;
    z-index: 2;
    /* No longer a full screen (16 Oct 2026): the latest piece belongs on the
       first screen, so the hero is the logo, the line and the 3 formats. */
    min-height: 0;
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    padding: 124px var(--gutter) 20px;
}

.logo {
    max-width: 211px;
    width: auto;
    height: auto;
    display: block;
    filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.1));
    animation: fadeIn 1s ease-out;
    margin-bottom: 8px;
}

.tagline {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 1.6rem;
    color: #1a1a1a;
    text-align: center;
    margin-top: 16px;
    padding: 0 20px;
    line-height: 1.35;
    max-width: 600px;
    animation: fadeIn 1s ease-out 0.2s both;
}

.hero-subtitle {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 400;
    font-size: 1rem;
    color: #444;
    text-align: center;
    margin-top: 12px;
    padding: 0 24px;
    line-height: 1.5;
    max-width: 500px;
    animation: fadeIn 1.5s ease-out 0.7s both;
}

/* The 3 formats and how often they come, under the tagline, each a link */
.hero-formats {
    margin: 18px auto 0;
    max-width: 640px;
    padding: 0 20px;
    text-align: center;
    font-size: 1rem;
    line-height: 1.6;
    color: #333;
    animation: fadeIn 1s ease-out 0.35s both;
}
.hero-formats a {
    color: #0f0f0f;
    font-weight: 700;
    text-decoration: underline;
    text-decoration-color: #FFD700;
    text-decoration-thickness: 2px;
    text-underline-offset: 3px;
    transition: text-decoration-color 0.2s;
}
.hero-formats a:hover, .hero-formats a:focus-visible { text-decoration-color: #0f0f0f; }

@keyframes fadeIn {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* ===== MAIN SECTIONS ===== */
.section {
    position: relative;
    z-index: 2;
    padding: 110px var(--gutter) 56px;
    max-width: 980px;
    margin: 0 auto;
}

.section h2 {
    font-size: 1.8rem;
    font-weight: 800;
    color: #111;
    margin-bottom: 12px;
}

.page-title {
    text-align: center;
}

.section p {
    font-size: 1rem;
    color: #222;
    line-height: 1.6;
    max-width: 70ch;
}

/* ===== HERO STATEMENT ===== */
.hero-statement {
    text-align: center;
    max-width: 700px;
    margin: 0 auto 48px auto;
}
/* the listings' heads: the rule for .section > .hero-statement below sets padding, so this one outweighs it */
.section > .hero-statement.page-head { padding-top: 5rem; }

.hero-statement h1, .hero-statement h2.hero-h1 {
    font-size: 2.2rem;
    font-weight: 800;
    color: #0f0f0f;
    line-height: 1.25;
    margin-bottom: 16px;
}

.hero-statement p {
    font-size: 1.1rem;
    color: #333;
    line-height: 1.6;
    font-weight: 400;
}

/* ===== VALUE CARDS ===== */
.value-cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 24px;
    margin-top: 32px;
}

.value-card {
    background: #FCF7E8; /* light cream */
    border-radius: 8px;
    padding: 28px 24px;
    box-shadow: 5px 5px 0 #0f0f0f;
    border: 3px solid #0f0f0f;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.value-card:hover {
    transform: translate(-3px, -3px);
    box-shadow: 8px 8px 0 #0f0f0f;
}

.value-card h3 {
    font-size: 1.15rem;
    font-weight: 700;
    color: #0f0f0f;
    margin-bottom: 10px;
    line-height: 1.3;
}

.value-card p {
    font-size: 0.95rem;
    color: #444;
    line-height: 1.55;
    font-weight: 400;
}

.value-card .card-icon {
    font-size: 1.8rem;
    margin-bottom: 14px;
    display: block;
}

/* ===== FEATURE BOX ===== */
.feature-box {
    background: #FCF7E8; /* light cream */
    border-radius: 8px;
    padding: 40px 36px;
    max-width: 600px;
    margin: 32px auto;
    box-shadow: 5px 5px 0 #0f0f0f;
    border: 3px solid #0f0f0f;
    text-align: center;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.feature-box:hover {
    transform: translate(-3px, -3px);
    box-shadow: 8px 8px 0 #0f0f0f;
}

.feature-box h3 {
    font-size: 1.4rem;
    font-weight: 700;
    color: #0f0f0f;
    margin-bottom: 14px;
}

.feature-box p {
    font-size: 1rem;
    color: #333;
    line-height: 1.6;
}

/* ===== CTA SECTION ===== */
.cta-section {
    text-align: center;
    margin-top: 56px;
    padding: 32px 24px;
    background: #FCF7E8; /* light cream */
    border-radius: 8px;
    box-shadow: 5px 5px 0 #0f0f0f;
    border: 3px solid #0f0f0f;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.cta-section:hover {
    transform: translate(-3px, -3px);
    box-shadow: 8px 8px 0 #0f0f0f;
}

.cta-section h3 {
    font-size: 1.3rem;
    font-weight: 700;
    color: #0f0f0f;
    margin-bottom: 10px;
}

.cta-section p {
    font-size: 0.95rem;
    color: #444;
    line-height: 1.5;
    margin: 0 auto;
    max-width: none;
}

/* ===== DISCLOSURE NOTICE ===== */
.disclosure-notice {
    max-width: 560px;
    margin: 24px auto;
    padding: 12px 16px;
    background: #FFF3CD;
    border: 2px solid #856404;
    border-radius: 8px;
    display: flex;
    align-items: flex-start;
    gap: 10px;
    text-align: left;
}

.disclosure-icon {
    font-size: 1.05rem;
    flex-shrink: 0;
}

.disclosure-notice p {
    font-size: 0.78rem;
    color: #856404;
    margin: 0;
    line-height: 1.5;
}

.disclosure-notice strong {
    color: #664d03;
}

/* ===== SOCIAL LINKS (Contact) ===== */
.contact-section .hero-statement {
    margin-bottom: 28px;
}

/* Contact Form */
.contact-form {
    max-width: 600px;
    margin: 0 auto 40px auto;
    padding: 40px;
    background: #FCF7E8;
    border: 3px solid #0f0f0f;
    border-radius: 16px;
    box-shadow: 6px 6px 0 #0f0f0f;
}

.form-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 20px;
}

.form-group {
    margin-bottom: 20px;
}

.form-group label {
    display: block;
    font-weight: 700;
    font-size: 0.95rem;
    margin-bottom: 8px;
    color: #0f0f0f;
}

.form-group input,
.form-group textarea {
    width: 100%;
    padding: 14px 16px;
    font-size: 1rem;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    background: #fff;
    box-shadow: 3px 3px 0 #0f0f0f;
    transition: all 0.2s ease;
    box-sizing: border-box;
}

.form-group input:focus,
.form-group textarea:focus {
    outline: none;
    transform: translate(-2px, -2px);
    box-shadow: 5px 5px 0 #0f0f0f;
}

.form-group textarea {
    resize: vertical;
    min-height: 120px;
}

.contact-submit {
    width: 100%;
    padding: 16px 32px;
    font-size: 1.1rem;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    background: linear-gradient(135deg, #FFD700 0%, #FFEC8B 100%);
    color: #0f0f0f;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 4px 4px 0 #0f0f0f;
    cursor: pointer;
    transition: all 0.2s ease;
    margin-top: 10px;
}

.contact-submit:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #0f0f0f;
}

.social-divider {
    text-align: center;
    margin: 30px 0;
}

.social-divider span {
    font-weight: 600;
    color: #444;
}

.social-links {
    list-style: none;
    padding: 0;
    margin: 18px 0 0 0;
    display: grid;
    gap: 12px;
    justify-items: center;
}

.contact-section .social-links {
    margin-top: 20px;
}

.social-links a {
    display: inline-block;
    text-decoration: none;
    color: #0f0f0f;
    background: #FFD700;
    border: 3px solid #0f0f0f;
    padding: 12px 18px;
    border-radius: 6px;
    min-width: 200px;
    max-width: 100%;
    text-align: center;
    font-weight: 600;
    overflow-wrap: anywhere;
    box-shadow: 4px 4px 0 #0f0f0f;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.social-links a:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #0f0f0f;
}

/* ===== FOOTER ===== */
.footer {
    position: relative;
    z-index: 2;
    background: #0f0f0f;
    color: #999;
    padding: 48px 24px 32px 24px;
    text-align: center;
    margin-top: 80px;
}

.footer-brand {
    margin-bottom: 28px;
}

.footer-brand img {
    height: 28px;
    width: auto;
    display: block;
    margin: 0 auto;
}

.footer-content {
    max-width: 800px;
    margin: 0 auto;
}

.footer-disclaimer {
    font-size: 0.85rem;
    line-height: 1.7;
    color: #888;
    margin-bottom: 24px;
    padding: 20px;
    background: rgba(255, 255, 255, 0.03);
    border-radius: 8px;
    border: 1px solid rgba(255, 255, 255, 0.06);
}

.footer-disclaimer strong {
    color: #FFD700;
    font-weight: 600;
}

.footer-links {
    display: flex;
    justify-content: center;
    gap: 24px;
    margin-bottom: 20px;
    flex-wrap: wrap;
}

.footer-links a {
    color: #aaa;
    text-decoration: none;
    font-size: 0.9rem;
    transition: color 0.2s ease;
}

.footer-links a:hover {
    color: #FFD700;
}

.footer-copyright {
    font-size: 0.8rem;
    color: #9a9a9a;
}

/* ===== ABOUT SECTION ===== */
.about-section {
    text-align: center;
}

.about-content {
    background: #FCF7E8; /* light cream */
    border-radius: 8px;
    padding: 40px 36px;
    max-width: 700px;
    margin: 0 auto;
    box-shadow: 5px 5px 0 #0f0f0f;
    border: 3px solid #0f0f0f;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.about-content:hover {
    transform: translate(-3px, -3px);
    box-shadow: 8px 8px 0 #0f0f0f;
}

.about-content p {
    font-size: 1.05rem;
    color: #333;
    line-height: 1.75;
    margin-bottom: 16px;
}

.about-content p:last-child {
    margin-bottom: 0;
}

/* ===== RESPONSIVE ===== */
@media (max-width: 820px) {
    .navbar {
        height: 60px;
    }
    
    .nav-menu {
        gap: 20px;
    }
    
    .nav-link {
        font-size: 0.9rem;
        padding: 6px 12px;
    }
    
    .logo {
        max-width: 90%;
    }
    
    .tagline {
        font-size: 1.1rem;
        margin-top: 5px;
    }
    
    .hero-subtitle {
        font-size: 0.9rem;
    }
    
    .content {
        padding-top: 90px;
    }
    
    
    .hero-statement h1, .hero-statement h2.hero-h1 {
        font-size: 1.7rem;
    }
    
    .value-cards {
        grid-template-columns: 1fr;
        gap: 18px;
    }
    
    .value-card {
        padding: 22px 20px;
    }
    
    .feature-box {
        padding: 28px 22px;
        margin: 24px 16px;
    }
}

@media (max-width: 640px) {
    .navbar {
        height: 60px;
    }
    
    .nav-menu {
        gap: 10px;
        flex-wrap: wrap;
    }
    
    .nav-link {
        font-size: 0.85rem;
        padding: 6px 10px;
    }
    
    .logo {
        max-width: 95%;
    }
    
    .tagline {
        font-size: 1rem;
        margin-top: 5px;
        padding: 0 15px;
    }
    
    .hero-subtitle {
        font-size: 0.85rem;
    }
    
    .content {
        padding-top: 85px;
    }
    
    
    .hero-statement h1, .hero-statement h2.hero-h1 {
        font-size: 1.5rem;
    }
    
    .value-card h3 {
        font-size: 1.05rem;
    }
}

/* ===== VISUAL ENHANCEMENTS ===== */

/* 1. Section-specific box colors - light cream */
#about .about-content,
#the-brew .feature-box,
#the-brew .cta-section,
#philosophy .value-card {
    background: #FCF7E8; /* lighter cream */
}

/* 2. Text highlight effect */
.highlight {
    background: linear-gradient(transparent 55%, #FFD700 55%);
    padding: 0 4px;
    margin: 0 -4px;
}

.highlight-brush {
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 14' preserveAspectRatio='none'><path d='M3,8 C20,5 40,6 60,6 C80,6 100,7 117,7 C113,11 95,12 60,12 C25,12 7,12 3,10 Z' fill='%23FFD700' opacity='0.9'/></svg>");
    background-repeat: no-repeat;
    background-position: 0 100%;
    background-size: 100% 0.45em;
    padding-bottom: 2px;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
}

.highlight-box {
    background: #FFD700;
    padding: 2px 8px;
    border-radius: 4px;
    color: #0f0f0f;
}

/* 3. Hero section enhancements */
.hero-cta {
    display: inline-block;
    margin-top: 32px;
    padding: 14px 28px;
    background: #FFD700;
    color: #0f0f0f;
    font-weight: 700;
    font-size: 1rem;
    text-decoration: none;
    border-radius: 8px;
    border: 3px solid #0f0f0f;
    box-shadow: 4px 4px 0 #0f0f0f;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
    animation: fadeIn 1s ease-out 0.4s both;
}

.hero-cta:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #0f0f0f;
}

.hero-subtitle {
    font-size: 1.1rem;
    color: #444;
    margin-top: 16px;
    max-width: 500px;
    text-align: center;
    animation: fadeIn 1s ease-out 0.3s both;
}

/* 4. Decorative shapes */
.decorative-circle {
    position: absolute;
    border-radius: 50%;
    z-index: 0;
    pointer-events: none;
    animation: floatBubble 8s ease-in-out infinite;
}

@keyframes floatBubble {
    0%, 100% { transform: translateY(0); }
    50% { transform: translateY(-15px); }
}

/* Home section circles */
.circle-1 {
    width: 300px;
    height: 300px;
    background: rgba(255, 215, 0, 0.12);
    top: 15%;
    right: -100px;
    animation-delay: 0s;
}

.circle-2 {
    width: 200px;
    height: 200px;
    background: rgba(15, 15, 15, 0.04);
    bottom: 20%;
    left: -80px;
    animation-delay: 2s;
}

.circle-3 {
    width: 150px;
    height: 150px;
    background: rgba(255, 215, 0, 0.08);
    top: 60%;
    right: 10%;
    animation-delay: 4s;
}

/* Additional circles for other sections */
.circle-4 {
    width: 180px;
    height: 180px;
    background: rgba(255, 215, 0, 0.1);
    top: 10%;
    left: 5%;
    animation-delay: 1s;
}

.circle-5 {
    width: 120px;
    height: 120px;
    background: rgba(15, 15, 15, 0.03);
    bottom: 15%;
    right: 8%;
    animation-delay: 3s;
}

.circle-6 {
    width: 250px;
    height: 250px;
    background: rgba(255, 215, 0, 0.06);
    top: 40%;
    left: -120px;
    animation-delay: 5s;
}

.circle-7 {
    width: 100px;
    height: 100px;
    background: rgba(255, 215, 0, 0.15);
    top: 25%;
    right: 15%;
    animation-delay: 2.5s;
}

.circle-8 {
    width: 220px;
    height: 220px;
    background: rgba(15, 15, 15, 0.03);
    bottom: 30%;
    left: 10%;
    animation-delay: 6s;
}

.circle-9 {
    width: 80px;
    height: 80px;
    background: rgba(255, 215, 0, 0.18);
    top: 70%;
    right: 20%;
    animation-delay: 1.5s;
}

.circle-10 {
    width: 160px;
    height: 160px;
    background: rgba(255, 215, 0, 0.08);
    top: 5%;
    right: -60px;
    animation-delay: 4.5s;
}

.circle-11 {
    width: 90px;
    height: 90px;
    background: rgba(255, 215, 0, 0.14);
    top: 35%;
    left: 8%;
    animation-delay: 0.5s;
}

.circle-12 {
    width: 140px;
    height: 140px;
    background: rgba(15, 15, 15, 0.04);
    top: 80%;
    right: 5%;
    animation-delay: 3.5s;
}

.circle-13 {
    width: 70px;
    height: 70px;
    background: rgba(255, 215, 0, 0.2);
    top: 20%;
    right: 25%;
    animation-delay: 7s;
}

.circle-14 {
    width: 200px;
    height: 200px;
    background: rgba(255, 215, 0, 0.05);
    bottom: 10%;
    left: -90px;
    animation-delay: 2.2s;
}

.circle-15 {
    width: 60px;
    height: 60px;
    background: rgba(255, 215, 0, 0.18);
    top: 50%;
    right: 3%;
    animation-delay: 5.5s;
}

.circle-16 {
    width: 110px;
    height: 110px;
    background: rgba(15, 15, 15, 0.03);
    top: 15%;
    left: 15%;
    animation-delay: 1.8s;
}

.circle-17 {
    width: 180px;
    height: 180px;
    background: rgba(255, 215, 0, 0.07);
    bottom: 25%;
    right: -70px;
    animation-delay: 6.5s;
}

.circle-18 {
    width: 50px;
    height: 50px;
    background: rgba(255, 215, 0, 0.22);
    top: 45%;
    left: 20%;
    animation-delay: 0.8s;
}

.circle-19 {
    width: 130px;
    height: 130px;
    background: rgba(15, 15, 15, 0.04);
    top: 65%;
    left: 5%;
    animation-delay: 4s;
}

.circle-20 {
    width: 75px;
    height: 75px;
    background: rgba(255, 215, 0, 0.16);
    top: 10%;
    right: 30%;
    animation-delay: 2.8s;
}

/* 5. Better typography */
.hero-statement h1, .hero-statement h2.hero-h1 {
    font-size: 2.6rem;
    font-weight: 800;
    letter-spacing: -0.02em;
    line-height: 1.2;
}

.tagline {
    font-size: 2rem;
    font-weight: 800;
    letter-spacing: -0.02em;
    line-height: 1.25;
    max-width: 650px;
}

.section p {
    font-size: 1.05rem;
    line-height: 1.7;
}

/* 6. Scroll animations */
.animate-on-scroll {
    opacity: 0;
    transform: translateY(30px);
    transition: opacity 0.6s ease, transform 0.6s ease;
}

.animate-on-scroll.visible {
    opacity: 1;
    transform: translateY(0);
}

/* Staggered animation delays for cards */
.value-card:nth-child(1) { transition-delay: 0s; }
.value-card:nth-child(2) { transition-delay: 0.1s; }
.value-card:nth-child(3) { transition-delay: 0.2s; }
.value-card:nth-child(4) { transition-delay: 0.3s; }
.value-card:nth-child(5) { transition-delay: 0.4s; }
.value-card:nth-child(6) { transition-delay: 0.5s; }

/* Section divider effect */
.section {
    position: relative;
}

.section::before {
    content: '';
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 60px;
    height: 4px;
    background: #FFD700;
    border-radius: 2px;
}

/* Responsive enhancements */
@media (max-width: 820px) {
    /* sections and their headings sit closer on a phone (16 Oct 2026): the
       first story was a screen and a half down on every page */
    .section { padding: 56px var(--gutter) 36px; }
    .section + .section { padding-top: 32px; }
    .hero-statement { margin-bottom: 28px; }
    .section > .hero-statement.page-head { padding-top: 2.75rem; }
    /* a gated page has no subscribe bar, so its head needs less room under the navbar */
    html.fcf-gated main.section { padding-top: 30px; }
    .hero-statement h1, .hero-statement h2.hero-h1 {
        font-size: 2rem;
    }
    
    .tagline {
        font-size: 1.5rem;
    }
    
    .hero-cta {
        padding: 12px 24px;
        font-size: 0.9rem;
    }
    
    .decorative-circle {
        display: none;
    }
}

/* ===== NEW FEATURES ===== */

/* 1. Back to Top Button */
.back-to-top {
    position: fixed;
    bottom: 30px;
    right: 30px;
    width: 50px;
    height: 50px;
    background: #FFD700;
    color: #0f0f0f;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 4px 4px 0 #0f0f0f;
    cursor: pointer;
    font-size: 1.5rem;
    font-weight: bold;
    display: flex;
    align-items: center;
    justify-content: center;
    opacity: 0;
    visibility: hidden;
    transition: all 0.3s ease;
    z-index: 99;
}

.back-to-top.visible {
    opacity: 1;
    visibility: visible;
}

.back-to-top:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #0f0f0f;
}

/* 2. Scroll Progress Bar */
.scroll-progress {
    position: fixed;
    top: 60px;
    left: 0;
    width: 0%;
    height: 4px;
    background: linear-gradient(90deg, #FFD700, #FFA500);
    z-index: 99;
    transition: width 0.1s ease;
}

/* Newsletter Signup Form (legacy, kept for reference) */
.newsletter-form {
    display: flex;
    gap: 12px;
    justify-content: center;
    flex-wrap: wrap;
    margin-top: 24px;
}

.newsletter-input {
    padding: 14px 20px;
    font-size: 1rem;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    background: #fff;
    min-width: 280px;
    max-width: 100%;
    box-shadow: 4px 4px 0 #0f0f0f;
    transition: all 0.2s ease;
}

.newsletter-input:focus {
    outline: none;
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #0f0f0f;
}

.newsletter-button {
    padding: 14px 28px;
    font-size: 1rem;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    background: #FFD700;
    color: #0f0f0f;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 4px 4px 0 #0f0f0f;
    cursor: pointer;
    transition: all 0.2s ease;
}

.newsletter-button:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #0f0f0f;
}

/* 4. Featured Quote */
.featured-quote {
    max-width: 800px;
    margin: 60px auto;
    padding: 0;
    background: transparent;
    border: none;
    box-shadow: none;
    text-align: center;
    position: relative;
}

.featured-quote::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 120%;
    height: 120%;
    background: radial-gradient(ellipse at center, rgba(255, 215, 0, 0.15) 0%, transparent 70%);
    z-index: -1;
    pointer-events: none;
    animation: glowPulse 4s ease-in-out infinite;
}

@keyframes glowPulse {
    0%, 100% { opacity: 0.6; transform: translate(-50%, -50%) scale(1); }
    50% { opacity: 1; transform: translate(-50%, -50%) scale(1.05); }
}

.quote-mark {
    font-size: 8rem;
    font-family: Georgia, 'Times New Roman', serif;
    background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
    line-height: 0.6;
    display: block;
    font-weight: bold;
    filter: drop-shadow(3px 3px 0 rgba(0, 0, 0, 0.15));
    opacity: 0;
    transition: all 0.6s ease;
}

.featured-quote.visible .quote-mark {
    opacity: 1;
}

.quote-open {
    text-align: left;
    margin-left: 20px;
    margin-bottom: -20px;
    animation: floatQuoteLeft 3s ease-in-out infinite;
}

.quote-close {
    text-align: right;
    margin-right: 20px;
    margin-top: -30px;
    animation: floatQuoteRight 3s ease-in-out infinite;
}

@keyframes floatQuoteLeft {
    0%, 100% { transform: translate(0, 0) rotate(-3deg); }
    50% { transform: translate(-5px, -8px) rotate(0deg); }
}

@keyframes floatQuoteRight {
    0%, 100% { transform: translate(0, 0) rotate(3deg); }
    50% { transform: translate(5px, 8px) rotate(0deg); }
}

.quote-text {
    font-size: 2.4rem;
    font-style: italic;
    color: #0f0f0f;
    line-height: 1.6;
    margin: 0;
    padding: 30px 50px;
    font-weight: 500;
    letter-spacing: 0.01em;
    position: relative;
    opacity: 0;
    transform: translateY(20px);
    transition: all 0.8s ease 0.3s;
}

.featured-quote.visible .quote-text {
    opacity: 1;
    transform: translateY(0);
}

.quote-author {
    font-size: 1.15rem;
    color: #0f0f0f;
    font-style: normal;
    font-weight: 800;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 12px 28px;
    background: linear-gradient(135deg, #FFD700 0%, #FFEC8B 100%);
    border-radius: 30px;
    border: 3px solid #0f0f0f;
    box-shadow: 4px 4px 0 #0f0f0f;
    margin-top: 10px;
    transition: all 0.2s ease;
    opacity: 0;
    transform: translateY(15px);
}

.featured-quote.visible .quote-author {
    opacity: 1;
    transform: translateY(0);
    transition: all 0.6s ease 0.6s, box-shadow 0.2s ease, transform 0.2s ease;
}

.quote-author:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #0f0f0f;
}

.quote-author::before {
    content: '☕';
    font-size: 1.2rem;
    display: inline-block;
    animation: steamCoffee 2s ease-in-out infinite;
}

@keyframes steamCoffee {
    0%, 100% { transform: translateY(0) rotate(0deg); }
    25% { transform: translateY(-2px) rotate(-5deg); }
    75% { transform: translateY(-2px) rotate(5deg); }
}

/* 5. Hover Glow on Cards */
.value-card:hover,
.feature-box:hover,
.about-content:hover,
.cta-section:hover {
    box-shadow: 8px 8px 0 #0f0f0f, 0 0 20px rgba(255, 215, 0, 0.3);
}

/* 7. Dark Mode */
body.dark-mode {
    background-color: #1a1a1a;
    color: #e0e0e0;
}

body.dark-mode .navbar {
    background: #0a0a0a;
}

body.dark-mode .value-card,
body.dark-mode .feature-box,
body.dark-mode .about-content,
body.dark-mode .cta-section {
    background: #2a2a2a;
}

body.dark-mode .value-card h3,
body.dark-mode .feature-box h3,
body.dark-mode .cta-section h3,
body.dark-mode .hero-statement h1, body.dark-mode .hero-statement h2.hero-h1 {
    color: #f0f0f0;
}

body.dark-mode .value-card p,
body.dark-mode .feature-box p,
body.dark-mode .cta-section p,
body.dark-mode .hero-statement p,
body.dark-mode .about-content p {
    color: #b0b0b0;
}

body.dark-mode .checkerboard-overlay {
    opacity: 0.3;
}

body.dark-mode .tagline {
    color: #f0f0f0;
}

body.dark-mode .newsletter-input {
    background: #2a2a2a;
    color: #e0e0e0;
    border-color: #444;
}

.dark-mode-toggle {
    position: fixed;
    bottom: 30px;
    left: 30px;
    width: 50px;
    height: 50px;
    background: #0f0f0f;
    color: #FFD700;
    border: 3px solid #FFD700;
    border-radius: 8px;
    box-shadow: 4px 4px 0 #FFD700;
    cursor: pointer;
    font-size: 1.3rem;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.3s ease;
    z-index: 99;
}

.dark-mode-toggle:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #FFD700;
}

body.dark-mode .dark-mode-toggle {
    background: #FFD700;
    color: #0f0f0f;
    border-color: #0f0f0f;
    box-shadow: 4px 4px 0 #0f0f0f;
}

/* 8. Hamburger Menu (Mobile) */
.hamburger {
    display: none;
    flex-direction: column;
    gap: 5px;
    cursor: pointer;
    padding: 10px;
    z-index: 101;
}

.hamburger span {
    width: 25px;
    height: 3px;
    background: #e6e6e6;
    border-radius: 2px;
    transition: all 0.3s ease;
}

.hamburger.active span:nth-child(1) {
    transform: rotate(45deg) translate(5px, 5px);
}

.hamburger.active span:nth-child(2) {
    opacity: 0;
}

.hamburger.active span:nth-child(3) {
    transform: rotate(-45deg) translate(7px, -6px);
}

@media (max-width: 820px) {
    .hamburger {
        display: flex;
        position: absolute;
        right: 20px;
        top: 50%;
        transform: translateY(-50%);
    }
    
    .nav-menu {
        position: fixed;
        top: 60px;
        left: 0;
        width: 100%;
        background: #0f0f0f;
        flex-direction: column;
        padding: 20px;
        gap: 10px;
        transform: translateY(-100%);
        opacity: 0;
        visibility: hidden;
        transition: all 0.3s ease;
    }
    
    .nav-menu.active {
        transform: translateY(0);
        opacity: 1;
        visibility: visible;
    }
    
    .newsletter-form {
        flex-direction: column;
        align-items: center;
    }
    
    .newsletter-input {
        min-width: 100%;
        max-width: 300px;
    }
    
    .back-to-top {
        width: 44px;
        height: 44px;
        bottom: 20px;
        right: 20px;
    }
    
    .featured-quote {
        margin: 40px 15px;
    }
    
    .quote-text {
        font-size: 1.5rem;
        padding: 20px 25px;
    }
    
    .quote-mark {
        font-size: 5rem;
    }
    
    .quote-open {
        margin-left: 10px;
    }
    
    .quote-close {
        margin-right: 10px;
    }
    
    .quote-author {
        font-size: 0.95rem;
        padding: 10px 20px;
    }
    
    .contact-form {
        padding: 25px;
        margin: 0 15px 30px 15px;
    }
    
    .form-row {
        grid-template-columns: 1fr;
        gap: 0;
    }
    
}

/* ===== ARTICLE CARDS (Homepage & Listing) ===== */

.article-cards {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 28px;
    max-width: 920px;
    margin: 40px auto 0;
    padding: 0 20px;
}

/* When the article count is odd, center the lone last card between the two
   columns instead of leaving it stuck on the left. */
.article-cards > .article-card:last-child:nth-child(odd) {
    grid-column: 1 / -1;
    max-width: calc(50% - 14px);
    margin-inline: auto;
}

.article-card {
    background: #FFD700;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    padding: 24px 20px;
    box-shadow: 5px 5px 0 #0f0f0f;
    text-decoration: none;
    color: #0f0f0f;
    display: flex;
    flex-direction: column;
    gap: 10px;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.article-card:hover {
    transform: translate(-3px, -3px);
    box-shadow: 8px 8px 0 #0f0f0f;
}

.article-card h4 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 1.15rem;
    line-height: 1.4;
    margin: 0;
}

.article-date {
    font-size: 0.8rem;
    font-weight: 700;
    color: #0f0f0f;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    opacity: 0.7;
}

.article-excerpt {
    font-size: 0.92rem;
    color: #0f0f0f;
    opacity: 0.85;
    line-height: 1.6;
    margin: 0;
    flex-grow: 1;
}

.article-read-more {
    font-weight: 700;
    font-size: 0.9rem;
    color: #0f0f0f;
    margin-top: 8px;
}

.article-view-all {
    text-align: center;
    margin-top: 40px;
}

/* ===== ARTICLE PAGE ===== */

.article-page {
    max-width: 800px;
    margin: 0 auto;
}

.article-breadcrumb {
    margin-bottom: 20px;
}

.article-breadcrumb a {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 0.9rem;
    color: #0f0f0f;
    text-decoration: none;
    padding: 10px 20px;
    background: #FFD700;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 4px 4px 0 #0f0f0f;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
    display: inline-block;
}

.article-breadcrumb a:hover {
    transform: translate(-2px, -2px);
    box-shadow: 6px 6px 0 #0f0f0f;
}

.article-meta {
    font-size: 0.95rem;
    color: #0f0f0f;
    font-weight: 600;
    opacity: 0.6;
}

.article-content {
    background: #FCF7E8;
    border: 3px solid #0f0f0f;
    border-radius: 12px;
    padding: 40px 36px;
    box-shadow: 6px 6px 0 #0f0f0f;
    line-height: 1.8;
    font-size: 1.05rem;
    color: #0f0f0f;
}

.article-content h1,
.article-content h2,
.article-content h3,
.article-content h4 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    margin: 32px 0 16px;
    color: #0f0f0f;
}

.article-content h2 { font-size: 1.5rem; }
.article-content h3 { font-size: 1.25rem; }
.article-content h4 { font-size: 1.1rem; }

.article-content p {
    margin-bottom: 18px;
    line-height: 1.8;
}

.article-content img {
    max-width: 100%;
    height: auto;
    border-radius: 10px;
    margin: 28px auto;
    display: block;
    border: 2px solid #e8e2d6;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08);
}

.article-content figure {
    margin: 32px 0;
    text-align: center;
}

.article-content figure img {
    margin-bottom: 12px;
}

.article-content figcaption {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.8rem;
    color: #888;
    font-style: italic;
    line-height: 1.5;
    max-width: 90%;
    margin: 0 auto;
}

/* Graphics from the Groundamentals graphics system. The SVG already carries the
   card, the 3px keyline, the hard offset shadow and the teal ground, so the
   generic image chrome would draw a second border round the first and put a
   soft shadow next to a hard one. */
.article-content .fcf-graphic {
    margin: 32px 0;
}

.article-content .fcf-graphic img {
    width: 100%;
    max-width: 100%;
    height: auto;
    display: block;
    margin: 0;
    border: none;
    border-radius: 0;
    box-shadow: none;
}

/* Chart/graph containers - use class="chart" on a div wrapping charts */
.article-content .chart {
    background: #fff;
    border: 2px solid #e8e2d6;
    border-radius: 12px;
    padding: 20px;
    margin: 28px 0;
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.06);
    text-align: center;
}

.article-content .chart img {
    border: none;
    box-shadow: none;
    margin: 0 auto 12px;
    border-radius: 4px;
}

.article-content .chart-caption {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.75rem;
    color: #999;
    margin-top: 8px;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

/* Callout/highlight boxes - use class="callout" on a div */
.article-content .callout {
    background: rgba(255, 215, 0, 0.1);
    border-left: 4px solid #FFD700;
    border-radius: 0 10px 10px 0;
    padding: 20px 24px;
    margin: 28px 0;
}

.article-content .callout p {
    margin: 0;
    font-weight: 600;
    color: #0f0f0f;
}

/* Data table styling */
.article-content table {
    width: 100%;
    border-collapse: collapse;
    margin: 28px 0;
    font-size: 0.9rem;
    border-radius: 10px;
    overflow: hidden;
    border: 2px solid #e8e2d6;
}

.article-content thead {
    background: #0f0f0f;
    color: #FFD700;
}

.article-content th {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 0.8rem;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    padding: 14px 16px;
    text-align: left;
}

.article-content td {
    padding: 12px 16px;
    border-bottom: 1px solid #e8e2d6;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
}

.article-content tbody tr:nth-child(even) {
    background: rgba(255, 215, 0, 0.05);
}

.article-content tbody tr:hover {
    background: rgba(255, 215, 0, 0.12);
}

.article-content a {
    color: #0f0f0f;
    text-decoration: underline;
    text-decoration-color: #FFD700;
    text-underline-offset: 3px;
    text-decoration-thickness: 2px;
    transition: text-decoration-color 0.2s;
}

.article-content a:hover {
    text-decoration-color: #FFD700;
}

.article-content blockquote {
    border-left: 4px solid #FFD700;
    background: rgba(255, 215, 0, 0.12);
    padding: 16px 24px;
    margin: 24px 0;
    border-radius: 0 8px 8px 0;
    font-style: italic;
}

.article-content ul,
.article-content ol {
    padding-left: 24px;
    margin-bottom: 18px;
}

.article-content li {
    margin-bottom: 8px;
}

/* Glossary term - dotted underline with a layman explanation on hover/tap */
.article-content .term {
    position: relative;
    font-weight: 600;
    border-bottom: 2px dotted #b8920a;
    cursor: help;
    outline: none;
}

.article-content .term::after {
    content: attr(data-tip);
    position: absolute;
    left: 50%;
    bottom: calc(100% + 12px);
    transform: translateX(-50%) translateY(4px);
    width: max-content;
    max-width: 280px;
    background: #0f0f0f;
    color: #fff;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-style: normal;
    font-weight: 500;
    font-size: 0.82rem;
    line-height: 1.5;
    text-align: left;
    padding: 10px 14px;
    border-radius: 8px;
    border: 2px solid #FFD700;
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.28);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.18s ease, transform 0.18s ease;
    z-index: 60;
    pointer-events: none;
    white-space: normal;
}

.article-content .term::before {
    content: "";
    position: absolute;
    left: 50%;
    bottom: calc(100% + 6px);
    transform: translateX(-50%);
    border: 6px solid transparent;
    border-top-color: #FFD700;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.18s ease;
    z-index: 61;
    pointer-events: none;
}

.article-content .term:hover::after,
.article-content .term:focus::after {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) translateY(0);
}

.article-content .term:hover::before,
.article-content .term:focus::before {
    opacity: 1;
    visibility: visible;
}

@media (max-width: 640px) {
    .article-content .term::after { max-width: 220px; }
}

.article-content table {
    width: 100%;
    border-collapse: collapse;
    margin: 24px 0;
}

.article-content th,
.article-content td {
    border: 1px solid #ddd;
    padding: 10px 14px;
    text-align: left;
}

.article-content th {
    background: #0f0f0f;
    color: #FFD700;
    font-weight: 700;
}

.article-content pre {
    background: #0f0f0f;
    color: #f5f5f5;
    padding: 20px;
    border-radius: 8px;
    overflow-x: auto;
    margin: 24px 0;
}

.article-content code {
    font-size: 0.9em;
}

.article-content hr {
    border: none;
    border-top: 2px solid #ddd;
    margin: 32px 0;
}

/* ===== ARTICLE RESPONSIVE ===== */

@media (max-width: 820px) {
    .article-cards {
        grid-template-columns: 1fr;
        padding: 0 10px;
    }

    /* Single column on mobile - let the odd card fill the width normally */
    .article-cards > .article-card:last-child:nth-child(odd) {
        max-width: none;
        margin-inline: 0;
    }

    .article-content {
        padding: 28px 20px;
    }

    .article-page {
        padding-left: 10px;
        padding-right: 10px;
    }
}

@media (max-width: 640px) {
    .article-content {
        padding: 20px 16px;
        font-size: 0.95rem;
    }

    .article-card {
        padding: 20px 18px;
    }
}

/* ===== SIGN IN PAGE ===== */
.signin-main {
    min-height: 78vh;
    min-height: 78dvh;
    display: flex;
    align-items: center;
    justify-content: center;
}

.signin-card {
    background: #FCF7E8;
    border: 3px solid #0f0f0f;
    border-radius: 16px;
    box-shadow: 8px 8px 0 #0f0f0f;
    padding: 40px 36px;
    max-width: 420px;
    width: 100%;
}

.signin-card h1 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 800;
    font-size: 1.6rem;
    color: #0f0f0f;
    margin: 0 0 8px;
}

.signin-lede {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.9rem;
    line-height: 1.6;
    color: #555;
    margin: 0 0 24px;
}

.signin-label {
    display: block;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.72rem;
    font-weight: 800;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: #6b6b6b;
    margin-bottom: 8px;
}

.signin-input {
    width: 100%;
    box-sizing: border-box;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.95rem;
    padding: 13px 15px;
    background: #fff;
    border: 2px solid #0f0f0f;
    border-radius: 8px;
    color: #0f0f0f;
}

.signin-input:focus {
    outline: none;
    box-shadow: 3px 3px 0 #FFD700;
}

/* The code is six digits and nothing else, so it is set wide and monospaced
   by tracking rather than by a font the rest of the site does not use. */
.signin-input--code {
    font-size: 1.6rem;
    font-weight: 800;
    letter-spacing: 0.5em;
    text-align: center;
    padding-left: 0.5em;
}

.signin-btn {
    display: inline-block;
    width: 100%;
    box-sizing: border-box;
    margin-top: 18px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 0.9rem;
    text-align: center;
    text-decoration: none;
    padding: 13px 22px;
    background: #FFD700;
    color: #0f0f0f;
    border: 2px solid #0f0f0f;
    border-radius: 8px;
    cursor: pointer;
    box-shadow: 3px 3px 0 #0f0f0f;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}

.signin-btn:hover {
    transform: translate(-1px, -1px);
    box-shadow: 4px 4px 0 #0f0f0f;
}

.signin-btn:active {
    transform: translate(2px, 2px);
    box-shadow: 0 0 0 #0f0f0f;
}

.signin-btn:disabled {
    opacity: 0.6;
    cursor: not-allowed;
    transform: none;
    box-shadow: 3px 3px 0 #0f0f0f;
}

/* Leaving the list should not be dressed up as the brand's main action. */
.signin-btn--quiet {
    background: #fff;
    border-color: #c62828;
    color: #c62828;
    box-shadow: none;
}

.signin-btn--quiet:hover {
    box-shadow: 2px 2px 0 #c62828;
}

.signin-msg {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.82rem;
    line-height: 1.5;
    margin: 10px 0 0;
    min-height: 1em;
}

.signin-msg--error { color: #c62828; }
.signin-msg--ok { color: #008C84; }

.signin-foot {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.82rem;
    color: #666;
    margin: 22px 0 0;
    text-align: center;
}

.signin-foot a { color: #0f0f0f; }

.signin-link {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.82rem;
    font-weight: 700;
    color: #0f0f0f;
    background: none;
    border: none;
    padding: 0;
    cursor: pointer;
    text-decoration: underline;
    text-decoration-color: #FFD700;
    text-decoration-thickness: 2px;
    text-underline-offset: 3px;
}

.signin-sep { color: #bbb; margin: 0 8px; }

@media (max-width: 640px) {
    .signin-card { padding: 30px 22px; }
    .signin-input--code { font-size: 1.3rem; letter-spacing: 0.35em; }
}

/* ===== ACCOUNT PAGE =====
   The airy glass card (11 Oct 2026): the look the sign-in card
   (js/signin-modal.js) and the reader gate (below) share, so the 3 places a
   reader signs in look like one thing. Light cream at 62% over a heavy
   blur, a white hairline edge, a soft yellow and teal glow on the page
   behind it, labels above values, pill buttons. */
.glass-stage {
    box-sizing: border-box;
    padding: 40px 16px;
    background-image:
        radial-gradient(closest-side, rgba(255, 215, 0, 0.55), rgba(255, 215, 0, 0)),
        radial-gradient(closest-side, rgba(0, 140, 132, 0.45), rgba(0, 140, 132, 0));
    background-size: 340px 340px, 400px 400px;
    background-position: calc(50% - 250px) 32%, calc(50% + 260px) 72%;
    background-repeat: no-repeat;
}

.account-card {
    position: relative;
    z-index: 2; /* above the checkerboard overlay, like the sign-in card */
    width: min(440px, 100%);
    margin: 0 auto;
    display: grid;
    gap: 10px;
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3);
    backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(255, 255, 255, 0.7);
    border-radius: 22px;
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 40px 80px -30px rgba(15, 15, 15, 0.35);
    padding: 30px 32px;
    font-family: 'Montserrat', 'Montserrat Fallback', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    color: #0f0f0f;
}

@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    .account-card { background: #fffdf7; }
}

.account-eyebrow {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: #6d685f;
}

.account-card h1 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 800;
    font-size: 1.6rem;
    line-height: 1.2;
    letter-spacing: -0.02em;
    margin: 0;
    color: #0f0f0f;
    text-wrap: balance;
}

.account-lede {
    margin: 0;
    color: #3b3833;
    font-size: 0.9rem;
    line-height: 1.6;
}

/* The fields, a message line and the actions arrive once the reader's
   record has loaded; until then the head stands alone. */
.account-body:empty { display: none; }

.account-fields {
    display: grid;
    gap: 14px;
    margin: 6px 0 0;
    padding-top: 18px;
    border-top: 1px solid rgba(15, 15, 15, 0.1);
}

.account-field {
    display: grid;
    gap: 4px;
    min-width: 0;
}

.account-field dt {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #6d685f;
}

.account-field dd {
    margin: 0;
    font-size: 0.95rem;
    font-weight: 600;
    color: #0f0f0f;
    overflow-wrap: anywhere;
}

/* the status, and the 2 newsletters in the lede, marked the way the sign-in card marks its 3 */
.account-mark {
    background: linear-gradient(transparent 56%, rgba(255, 215, 0, 0.6) 56%);
    color: #0f0f0f;
    font-weight: 600;
    padding: 0 2px;
}

.account-mark--off {
    background: linear-gradient(transparent 56%, rgba(198, 40, 40, 0.25) 56%);
}

.account-msg {
    margin: 12px 0 0;
    font-size: 0.78rem;
    line-height: 1.45;
}

.account-msg:empty { display: none; }
.account-msg--error { color: #c62828; }
.account-msg--ok { color: #008C84; }

.account-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-top: 16px;
}

.account-pill {
    flex: 1 1 auto;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 600;
    font-size: 0.86rem;
    line-height: 1;
    height: 44px;
    padding: 0 22px;
    border-radius: 999px;
    border: 1px solid rgba(15, 15, 15, 0.3);
    background: transparent;
    color: #0f0f0f;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-decoration: none;
    transition: background 0.15s;
}

.account-pill:hover { background: rgba(15, 15, 15, 0.05); }

/* Leaving the list is not dressed up as the brand's main action; coming
   back, and signing in, are. */
.account-pill--solid {
    background: #0f0f0f;
    color: #fffdf7;
    border-color: #0f0f0f;
}

.account-pill--solid:hover { background: #2a2825; }

.account-pill--ghost {
    border-color: transparent;
    background: rgba(15, 15, 15, 0.06);
}

.account-pill--ghost:hover { background: rgba(15, 15, 15, 0.1); }

/* Delete my account: a soft red, so it reads apart from Sign out without
   shouting; the confirm step's "Yes, delete everything" is the solid red. */
.account-pill--danger {
    border-color: rgba(179, 38, 30, 0.28);
    background: rgba(198, 40, 40, 0.07);
    color: #b3261e;
}

.account-pill--danger:hover { background: rgba(198, 40, 40, 0.13); }

.account-pill--danger-solid {
    border-color: #b3261e;
    background: #b3261e;
    color: #fffdf7;
}

.account-pill--danger-solid:hover { background: #962018; }

.account-pill:disabled {
    opacity: 0.6;
    cursor: default;
}

.account-pill:focus-visible {
    outline: 2px solid #FFD700;
    outline-offset: 2px;
}

@media (max-width: 520px) {
    .account-card { padding: 24px 20px; }
}

/* ===== ARTICLE SHARE BUTTONS ===== */
.article-share {
    text-align: center;
    padding: 28px 0;
    margin-top: 20px;
    border-top: 1px solid #e8e2d6;
}

.share-label {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 0.85rem;
    color: #666;
    text-transform: uppercase;
    letter-spacing: 1px;
    display: block;
    margin-bottom: 16px;
}

.share-buttons {
    display: flex;
    justify-content: center;
    gap: 12px;
}

.share-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: #0f0f0f;
    color: #FFD700;
    font-weight: 800;
    font-size: 1.1rem;
    text-decoration: none;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
    border: 2px solid #0f0f0f;
}

.share-btn:hover {
    transform: scale(1.1);
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
}

/* ===== ADMIN PAGE ===== */
.admin-container {
    max-width: 720px;
    margin: 0 auto;
    padding: 40px 20px;
}

.admin-container h1 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 800;
    font-size: 1.8rem;
    margin-bottom: 8px;
    color: #0f0f0f;
}

.admin-subtitle {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.95rem;
    color: #666;
    margin-bottom: 32px;
}

.admin-article-list {
    background: #FCF7E8;
    border: 3px solid #0f0f0f;
    border-radius: 12px;
    padding: 8px 0;
    box-shadow: 6px 6px 0 #0f0f0f;
}

.admin-article-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 16px 24px;
    border-bottom: 1px solid #e8e2d6;
    gap: 16px;
}

.admin-article-row:last-child {
    border-bottom: none;
}

.admin-article-info h4 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 0.95rem;
    margin: 0 0 4px;
    color: #0f0f0f;
}

.admin-article-date {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.8rem;
    color: #888;
}

.admin-toggle {
    display: flex;
    align-items: center;
    gap: 10px;
    cursor: pointer;
    user-select: none;
}

.admin-toggle input {
    appearance: none;
    width: 44px;
    height: 24px;
    background: #ddd;
    border-radius: 24px;
    position: relative;
    cursor: pointer;
    transition: background 0.2s;
    border: 2px solid #0f0f0f;
    margin: 0;
}

.admin-toggle input:checked {
    background: #FFD700;
}

.admin-toggle input::after {
    content: '';
    position: absolute;
    width: 16px;
    height: 16px;
    border-radius: 50%;
    background: #0f0f0f;
    top: 2px;
    left: 2px;
    transition: left 0.2s;
}

.admin-toggle input:checked::after {
    left: 22px;
}

.admin-toggle-label {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 0.8rem;
    color: #0f0f0f;
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.admin-toggle input:disabled {
    opacity: 0.5;
    cursor: wait;
}

.admin-note {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.8rem;
    color: #888;
    margin-top: 20px;
    font-style: italic;
}

/* the 404 page's headline, which the phone rules resize */
.nf-title { font-size: 2rem; }

/* ===== LEGAL PAGES ===== */
.legal-content {
    max-width: 720px;
    margin: 0 auto;
    padding: 40px 20px;
}

.legal-content h1 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 800;
    font-size: 2rem;
    color: #0f0f0f;
    margin-bottom: 8px;
}

.legal-updated {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.85rem;
    color: #888;
    margin-bottom: 32px;
}

.legal-content h2 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    font-size: 1.15rem;
    color: #0f0f0f;
    margin: 28px 0 12px;
}

.legal-content p,
.legal-content li {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.9rem;
    line-height: 1.75;
    color: #333;
    margin-bottom: 12px;
}

.legal-content ul {
    padding-left: 20px;
    margin-bottom: 16px;
}

.legal-content a {
    color: #0f0f0f;
    text-decoration: underline;
    text-decoration-color: #FFD700;
    text-underline-offset: 3px;
}

/* the date sits on a rule that closes the heading block, the opening
   paragraph reads a step larger, and each numbered section starts on a
   hairline so the page scans like a document */
.legal-content .legal-updated {
    padding-bottom: 24px;
    border-bottom: 1px solid rgba(15, 15, 15, 0.12);
    margin-bottom: 28px;
}
.legal-content .legal-intro {
    font-size: 1rem;
    color: #0f0f0f;
    margin-bottom: 8px;
}
.legal-content h2 {
    padding-top: 24px;
    border-top: 1px solid rgba(15, 15, 15, 0.08);
}
.legal-content ul li::marker { color: #0f0f0f; }

/* ==========================================================================
   EDITORIAL REFINEMENT
   Adapted from The Ken, The Morning Context and Filter Coffee, applied inside
   the existing Groundamentals system. Decisions taken with the owner:

     type         Montserrat throughout, previews and article body alike.
     headers      left, with a gold kicker rule. Homepage hero stays centred.
     story order  category tag / headline / deck / date last
     story layout lead story, then a stacked list
     measure      72 characters
     ground       teal on homepage + newsletter pages, cream when reading
     gold         accent only. Cards go cream.
     radius/shadow  8px and the hard offset shadow, unchanged
     decoration   circles + checkerboard on the homepage, off when reading
     reading top  teal block behind the article title
     navbar       logo left, links right, Subscribe as a button
   ========================================================================== */

/* ----- 1. Navbar: logo left, links right, Subscribe as the action --------- */

.navbar {
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 24px;
    gap: 20px;
}

/* pinned left so the nav links stay centred exactly where they already sit */
.nav-brand {
    position: absolute;
    left: 24px;
    top: 0;
    display: flex;
    align-items: center;
    height: 100%;
    z-index: 1;
}

.nav-brand img {
    height: 34px;
    width: auto;
    display: block;
}

.navbar .nav-menu {
    justify-content: center;
    gap: 26px;
    padding: 0;
    width: auto;
    flex: 0 1 auto;
}

.nav-link {
    font-size: 0.85rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    /* 11px, not 8px, on the sides: the line box carries its own leading, so
       8px top and bottom already reads as 11px of space around the letters.
       Matching that on the left and right is what makes the hover and active
       tint sit evenly on all four sides. */
    padding: 8px 11px;
}

/* the underline stays the width of the word: 100% here is the padded box, so
   taking the two 11px sides off leaves exactly the text */
.nav-link:hover::after,
.nav-link.active::after { width: calc(100% - 22px); }

.nav-link.active { font-weight: 700; }

/* Subscribe reads as the primary action, not a sixth link */
.nav-link.nav-cta {
    background: #FFD700;
    color: #0f0f0f;
    font-weight: 700;
    border: 2px solid #FFD700;
    border-radius: 6px;
    padding: 8px 16px;
}

.nav-link.nav-cta::after { display: none; }

.nav-link.nav-cta:hover {
    background: transparent;
    color: #FFD700;
}

/* ----- 2. Section headers: left, with a kicker rule ---------------------- */

.section > .hero-statement {
    text-align: left;
    max-width: 860px;
    margin: 0 auto 40px auto;
    padding: 0 20px;
}

.section > .hero-statement::before {
    content: "";
    display: block;
    width: 44px;
    height: 4px;
    background: #FFD700;
    border: 2px solid #0f0f0f;
    border-radius: 2px;
    margin-bottom: 20px;
}

.section > .hero-statement h1, .hero-statement h2.hero-h1 {
    font-size: clamp(1.65rem, 3.2vw, 2.15rem);
    line-height: 1.18;
    letter-spacing: -0.02em;
    margin-bottom: 10px;
}

.section > .hero-statement p {
    font-size: 1.02rem;
    line-height: 1.62;
    color: #4a4a4a;
    max-width: 58ch;
    margin: 0;
}

/* homepage hero left exactly as deployed: logo 400px, 100vh, tagline 650px */

/* ----- 3. Story list: lead story, then a stacked list -------------------- */

.article-cards {
    grid-template-columns: 1fr;
    gap: 20px;
    max-width: 860px;
}

/* single-column grid now, so the old two-column centring rule would render a
   dangling odd card at half width. Neutralised. */
.article-cards > .article-card:last-child:nth-child(odd) {
    grid-column: auto;
    max-width: none;
    margin-inline: 0;
}

.article-card {
    background: #FCF7E8;
    padding: 26px 28px 24px;
    gap: 0;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
}

/* the lead story carries the extra weight */

/* CATEGORY, set above the headline, scoped so each list names itself */
.article-card::after {
    content: "The Macro Brew";
    order: -1;
    font-size: 0.66rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: #0f0f0f;
    background: #FFD700;
    border: 2px solid #0f0f0f;
    border-radius: 3px;
    padding: 3px 8px;
    margin-bottom: 14px;
}

#edgeCards .article-card::after,
#eaGrid .article-card::after { content: "The Edge Alert"; }
/* On a section's own listing the chip would only repeat the heading (16 Oct 2026) */
main.section > .article-cards > .article-card::after, #insightLog .article-card::after { display: none; }

/* HEADLINE */
.article-card h4 {
    order: 1;
    font-size: 1.28rem;
    font-weight: 800;
    line-height: 1.26;
    letter-spacing: -0.014em;
    margin-bottom: 10px;
}

/* DECK */
.article-card .article-excerpt {
    order: 2;
    font-size: 0.95rem;
    line-height: 1.68;
    color: #4a4a4a;
    margin-bottom: 14px;
    max-width: 72ch;
}

/* DATE, de-emphasised and last */
.article-card .article-date {
    order: 3;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #595959;
    margin-bottom: 0;
}

.article-card .article-read-more {
    order: 4;
    font-size: 0.84rem;
    font-weight: 700;
    color: #0f0f0f;
    border-bottom: 3px solid #FFD700;
    padding-bottom: 1px;
    margin-top: 14px;
}

.article-card:hover .article-read-more { border-bottom-color: #0f0f0f; }

.article-card .new-badge {
    order: -2;
    align-self: flex-start;
    position: static;
    margin-bottom: 10px;
}

.article-card .ea-card-meta { order: 0; margin-bottom: 10px; }

/* An Edge Alert card, wherever it is listed: the archive, the home page and
   the Read next block under a piece. The company is shown by its logo, never
   its ticker; a wide wordmark (JOJO's is 7.8 times as wide as it is tall)
   hits the 150px cap before the 26px height, and contain shrinks it whole. */
.ea-card { position: relative; }
.ea-card .ea-card-meta {
    display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap;
    margin-bottom: 10px; font-size: 0.78rem;
}
.ea-card .ea-card-logo { display: inline-flex; align-items: center; height: 26px; flex: 0 0 auto; }
.ea-card .ea-card-logo img {
    height: 100%; width: auto; max-width: 150px;
    object-fit: contain; object-position: left center; display: block;
}
.ea-card .ea-tier {
    background: #fff3c4; color: #0f0f0f; padding: 2px 8px; border-radius: 4px; font-weight: 600;
}
.ea-card .ea-sector { color: #555; font-weight: 500; }
/* the report's angle (reports.json "angle"): Business deep dive or Red flags.
   An outline, no fill: a label, not a colour that says good or bad */
.ea-card .ea-angle {
    border: 1px solid #0f0f0f; color: #0f0f0f; padding: 1px 7px; border-radius: 4px; font-weight: 700;
}

/* ----- 4. Publication cards --------------------------------------------- */

.value-card {
    background: #FCF7E8;
    text-align: left;
    padding: 28px 26px;
}

.value-card .card-icon { font-size: 1.5rem; display: block; margin-bottom: 14px; }

.value-card h3 {
    font-size: 1.28rem;
    font-weight: 800;
    line-height: 1.24;
    letter-spacing: -0.012em;
    margin-bottom: 10px;
}

.value-card p { font-size: 0.94rem; line-height: 1.7; color: #4a4a4a; }

/* ----- 5. Prose blocks --------------------------------------------------- */

.feature-box,
.cta-section,
.about-content {
    text-align: left;
    padding: 32px 34px;
}

.feature-box h3,
.cta-section h3 {
    font-size: 1.38rem;
    font-weight: 800;
    line-height: 1.26;
    letter-spacing: -0.014em;
    margin-bottom: 12px;
}

.feature-box p,
.cta-section p,
.about-content p {
    font-size: 0.98rem;
    line-height: 1.72;
    color: #3d3d3d;
    max-width: 72ch;
}

.about-content p + p { margin-top: 1.05em; }

/* ----- 6. Reading pages: cream ground ------------------------------------ */

body.reading { background-color: #FCF7E8; }

/* On the cream reading pages (The Macro Brew and The Edge Alert listings) the
   cards that open an article are teal, so they stand off the page. The home
   page keeps its own cards on its teal ground. */
body.reading .article-card { background: #D3ECEB; }

/* The loading screen matches the page it opens onto, so a cream page never
   flashes teal while it loads. */

/* The background pattern and the floating circles stay on cream pages, animation
   and all. The circles are drawn in faint gold and ink and read the same on
   either ground; the pattern is redrawn in a faint ink tint, because the white
   it uses on teal disappears against cream. */
body.reading .checkerboard-overlay {
    background-image:
        linear-gradient(45deg, rgba(15, 15, 15, 0.03) 25%, transparent 25%),
        linear-gradient(-45deg, rgba(15, 15, 15, 0.03) 25%, transparent 25%),
        linear-gradient(45deg, transparent 75%, rgba(15, 15, 15, 0.03) 75%),
        linear-gradient(-45deg, transparent 75%, rgba(15, 15, 15, 0.03) 75%);
}

/* the teal block that carries the article title */
.article-hero {
    background: #D3ECEB;
    border-bottom: 3px solid #0f0f0f;
    margin: 0 0 40px;
    padding: 38px 0 34px;
}

.article-hero-inner {
    max-width: 860px;
    margin: 0 auto;
    padding: 0 20px;
    text-align: left;
}

.article-hero .article-kicker {
    display: inline-block;
    font-size: 0.66rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    background: #FFD700;
    border: 2px solid #0f0f0f;
    border-radius: 3px;
    padding: 3px 8px;
    margin-bottom: 14px;
}

.article-hero h1 {
    font-size: clamp(1.7rem, 3.8vw, 2.4rem);
    font-weight: 800;
    line-height: 1.18;
    letter-spacing: -0.022em;
    margin-bottom: 12px;
    color: #0f0f0f;
}

.article-hero .article-meta {
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #3d3d3d;
    margin: 0;
}

/* the article page itself sits full-bleed so the teal block can span */
body.reading .article-page {
    max-width: none;
    padding-top: 110px;
    padding-left: 0;
    padding-right: 0;
}

body.reading .article-breadcrumb,
body.reading .article-content,
body.reading .article-share {
    max-width: 860px;
    margin-left: auto;
    margin-right: auto;
    padding-left: 20px;
    padding-right: 20px;
}

/* ----- 7. Article body: same Montserrat as the previews ------------------- */

.article-content {
    font-family: 'Montserrat', 'Montserrat Fallback', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
    font-size: 1.02rem;
    line-height: 1.75;
    color: #22201e;
    max-width: 72ch;
}

.article-content p {
    font-family: inherit;
    margin-bottom: 1.15em;
}

.article-content li { font-family: inherit; line-height: 1.7; }

.article-content blockquote {
    font-family: inherit;
    font-style: italic;
}

/* headings inside an article */
.article-content h1,
.article-content h2,
.article-content h3,
.article-content h4 {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    letter-spacing: -0.014em;
    line-height: 1.25;
}

.article-content h2 { font-size: 1.45rem; font-weight: 800; margin: 1.9em 0 0.6em; }
.article-content h3 { font-size: 1.2rem;  font-weight: 700; margin: 1.6em 0 0.5em; }

/* data, captions and UI inside articles */
.article-content figcaption,
.article-content table,
.article-content th,
.article-content td,
.article-content code,
.article-content pre {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
}

/* ----- 8. Buttons -------------------------------------------------------- */

.hero-cta {
    font-size: 0.92rem;
    font-weight: 700;
    letter-spacing: 0.01em;
    padding: 14px 26px;
}

.hero-cta:active {
    transform: translate(2px, 2px);
    box-shadow: 0 0 0 #0f0f0f;
}

.article-view-all {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: flex-start;
    max-width: 860px;
    margin-left: auto;
    margin-right: auto;
    padding: 0 20px;
}

/* ----- 9. Focus ---------------------------------------------------------- */

a:focus-visible,
button:focus-visible,
input:focus-visible,
textarea:focus-visible {
    outline: 3px solid #0f0f0f;
    outline-offset: 3px;
}

body.reading a:focus-visible { outline-color: #0f0f0f; }

/* ----- 10. Responsive ---------------------------------------------------- */

/* The Groundamentals logo is one line, wider than the old two-line one, so
   between the phone menu and a wide screen it steps down a size rather than
   run into "Home". Above 1060 it keeps the full 34px. */
@media (max-width: 1060px) {
    .nav-brand img { height: 28px; }
}

/* The one width kept outside 640 and 820: it is where the desktop links
   stop fitting at full size beside the logo, so it belongs to the navbar,
   not the layout. It was 900 with the old two-line logo; the one-line
   Groundamentals logo is wider, so it moved to 990. A phone on its side
   (844 wide) falls inside it. */
@media (max-width: 990px) {
    .nav-brand img { height: 28px; }
    /* the links keep their even padding, so the room comes out of the gap
       between them rather than off their sides */
    .navbar .nav-menu { gap: 6px; }
    .nav-link { font-size: 0.78rem; padding: 8px 10px; }
    .nav-link:hover::after,
    .nav-link.active::after { width: calc(100% - 20px); }
}

/* the narrowest desktop navbar: the logo one size smaller again */
@media (min-width: 821px) and (max-width: 860px) {
    .nav-brand img { height: 24px; }
}

@media (max-width: 820px) {
    .navbar { padding: 0 16px; }
    .nav-brand { left: 16px; }
    .section > .hero-statement { margin-bottom: 30px; }
    .feature-box,
    .cta-section,
    .about-content { padding: 26px 22px; }
    .article-hero { padding: 28px 0 26px; margin-bottom: 30px; }
    .article-content { font-size: 1.02rem; }
}

@media (prefers-reduced-motion: reduce) {
    .animate-on-scroll { opacity: 1; transform: none; }
}

/* ----- Subordinate section label -------------------------------------------
   A page title keeps the large heading and the gold kicker. A list heading
   beneath it drops to a small tracked label with a hairline rule, so the two
   are never competing for the same attention. */

.section > .hero-statement.section-label {
    margin-bottom: 20px;
}

.section > .hero-statement.section-label::before {
    display: none;
}

.section-label h2 {
    /* block, not flex: a flex h2 makes the text and the highlight span two
       separate flex items, which inserts the gap between the two words */
    display: block;
    overflow: hidden;
    white-space: nowrap;
    margin: 0;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.75rem;
    font-weight: 800;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: #5c5c5c;
    line-height: 1.4;
}

.section-label h2::after {
    content: "";
    display: inline-block;
    vertical-align: middle;
    width: 100%;
    margin-left: 14px;
    height: 2px;
    background: rgba(15, 15, 15, 0.15);
}

.section-label p {
    font-size: 0.88rem;
    line-height: 1.55;
    color: #5c5c5c;
    margin-top: 10px;
    max-width: 56ch;
}

@media (max-width: 640px) {
    .section-label h2 { letter-spacing: 0.12em; }
}

/* ==========================================================================
   SUBSCRIBE BAR
   Slim strip that sits directly under the fixed navbar at the top of the
   document and scrolls away with the page as you read, so it never sits
   between the navbar and the article. The navbar is 60px at every breakpoint,
   so the bar sits at 60 and the body is padded by its own height to keep every
   page's existing top offset working unchanged.
   ========================================================================== */

body { padding-top: 48px; }

.subscribe-bar {
    position: absolute;
    top: 60px;
    left: 0;
    right: 0;
    z-index: 99;
    height: 48px;
    background: #D3ECEB;
    border-bottom: 3px solid #0f0f0f;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 16px;
}

.subscribe-bar-form {
    display: flex;
    align-items: center;
    gap: 10px;
    width: 100%;
    max-width: 860px;
    justify-content: center;
}

.subscribe-bar-form label {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.8rem;
    font-weight: 700;
    color: #0f0f0f;
    white-space: nowrap;
}

.subscribe-bar-form input {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.8rem;
    padding: 7px 12px;
    border: 2px solid #0f0f0f;
    border-radius: 6px;
    background: #FCF7E8;
    color: #0f0f0f;
    width: 240px;
    max-width: 40vw;
}

.subscribe-bar-form input:focus {
    outline: none;
    box-shadow: 3px 3px 0 #0f0f0f;
}

.subscribe-bar-form button {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.8rem;
    font-weight: 700;
    padding: 7px 16px;
    border: 2px solid #0f0f0f;
    border-radius: 6px;
    background: #FFD700;
    color: #0f0f0f;
    cursor: pointer;
    white-space: nowrap;
    transition: transform 0.12s ease, box-shadow 0.12s ease;
}

.subscribe-bar-form button:hover { transform: translate(-1px, -1px); box-shadow: 3px 3px 0 #0f0f0f; }
.subscribe-bar-form button:active { transform: translate(1px, 1px); box-shadow: none; }
.subscribe-bar-form button[disabled] { opacity: 0.6; cursor: default; transform: none; box-shadow: none; }

/* The message opens as a strip under the bar, only while there is something
   to say. Beside the button it had no room: on a phone it was hidden, which
   left a reader with no word that it had worked, no error when it had not,
   and no sign of the "Did you mean" hold on a mistyped address, so the first
   press looked like it did nothing; on a wider screen a long error ran over
   the Subscribe button. */
.subscribe-bar-msg {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 60;
    margin: 0;
    padding: 10px var(--gutter, 16px) 0;
    pointer-events: none;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    color: #0f0f0f;
}
.subscribe-bar-msg:empty { display: none; }

/* The message itself: a card in the site's outline-and-shadow style that
   drops in under the bar, its colour and badge set by what happened. */
.sbm-card {
    pointer-events: auto;
    display: flex;
    align-items: center;
    gap: 12px;
    max-width: 520px;
    margin: 0 auto;
    padding: 12px 8px 12px 14px;
    background: #FCF7E8;
    border: 2px solid #0f0f0f;
    border-radius: 10px;
    box-shadow: 4px 4px 0 #0f0f0f;
    text-align: left;
    animation: sbm-in 0.22s ease-out;
}
.sbm-icon {
    flex: 0 0 auto;
    width: 34px;
    height: 34px;
    display: grid;
    place-items: center;
    border: 2px solid #0f0f0f;
    border-radius: 50%;
    font-size: 1.05rem;
    font-weight: 800;
    line-height: 1;
}
.sbm-body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.sbm-title { font-size: 0.92rem; font-weight: 800; line-height: 1.3; }
.sbm-detail { font-size: 0.8rem; font-weight: 500; line-height: 1.45; color: #333; }
.sbm-close {
    flex: 0 0 auto;
    align-self: flex-start;
    width: 40px;
    height: 40px;
    margin: -6px 0 -6px 0;
    border: 0;
    background: none;
    font: inherit;
    font-size: 1.35rem;
    line-height: 1;
    color: #0f0f0f;
    cursor: pointer;
    border-radius: 6px;
}
.sbm-close:hover { background: rgba(15, 15, 15, 0.08); }
.sbm-fix {
    /* inline, so it sits in the sentence; the padding keeps a 40px tap area
       without pushing the lines apart */
    display: inline;
    padding: 11px 0;
    margin: -11px 0;
    border: 0;
    background: none;
    font: inherit;
    font-weight: 800;
    color: #0f0f0f;
    text-decoration: underline;
    text-decoration-thickness: 2px;
    text-underline-offset: 3px;
    cursor: pointer;
}

.sbm-subscribed { background: #D9F0EE; }
.sbm-subscribed .sbm-icon { background: #008C84; color: #fff; }
.sbm-already { background: #FFF4C2; }
.sbm-already .sbm-icon { background: #FFD700; }
.sbm-error { background: #FDE8E6; }
.sbm-error .sbm-icon { background: #C62828; color: #fff; }
.sbm-error .sbm-title { color: #A51F1F; }
.sbm-suggest .sbm-icon { background: #FFD700; }

@keyframes sbm-in {
    from { opacity: 0; transform: translateY(-6px); }
    to { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) { .sbm-card { animation: none; } }

@media (max-width: 820px) {
    .subscribe-bar-form label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
    .subscribe-bar-form input { width: auto; flex: 1 1 auto; max-width: none; }
}

/* ==========================================================================
   ABOUT BOX
   Editorial treatment for the long first-person piece: a drop cap, a lead
   paragraph, one pull quote and a sign-off. Type and existing brand colours
   only, no new decoration.
   ========================================================================== */


/* ----- pull quote ----- */
.about-content .about-pull {
    margin: 26px 0 26px 0;
    padding: 4px 0 4px 20px;
    border-left: 5px solid #FFD700;
    font-size: 1.2rem;
    font-weight: 700;
    line-height: 1.4;
    letter-spacing: -0.012em;
    color: #0f0f0f;
    max-width: 30ch;
}

/* ----- sign-off ----- */
.about-content .about-sign {
    margin-top: 30px;
    padding-top: 18px;
    border-top: 2px solid rgba(15, 15, 15, 0.14);
    font-size: 0.78rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: #0f0f0f;
}

.about-content .about-sign span {
    display: block;
    margin-top: 4px;
    font-weight: 700;
    color: #5c5c5c;
}

@media (max-width: 640px) {
    .about-content .about-pull { font-size: 1.06rem; max-width: none; }
}

/* ----- About box: alignment and affordance -------------------------------
   The box was 700px centred while the section heading sits in an 860px
   column with 20px padding, so the box edge landed 60px right of the
   heading and nothing lined up. 820px puts the box border exactly under
   the first letter of the heading. The hover lift is also removed: the box
   is prose, not a link, and should not offer an interaction it cannot
   fulfil. */




@media (max-width: 820px) {
    .about-content { max-width: 100%; }
}

/* ==========================================================================
   ABOUT: two-column with a sticky rail
   The heading and sign-off hold a narrow left column while the prose runs
   beside them. No container, no card treatment: this is writing, not an
   object in a list. Collapses to one column on narrow screens.
   ========================================================================== */

.about-layout {
    display: grid;
    grid-template-columns: 210px minmax(0, 1fr);
    gap: 56px;
    max-width: 900px;
    margin: 0 auto;
    padding: 0 20px;
    align-items: start;
    /* .about-section centres its children on the homepage; the layout
       opts out so the rail and prose read left on both pages */
    text-align: left;
}

.about-rail {
    position: sticky;
    top: 130px;
}

.about-rail h1, .about-rail h2.hero-h1 {
    font-size: 1.5rem;
    font-weight: 800;
    line-height: 1.15;
    letter-spacing: -0.02em;
    color: #0f0f0f;
    margin: 0 0 18px;
}

.about-rail::before {
    content: "";
    display: block;
    width: 44px;
    height: 4px;
    background: #FFD700;
    border: 2px solid #0f0f0f;
    border-radius: 2px;
    margin-bottom: 18px;
}

/* the prose itself, no box */
.about-body {
    background: none;
    border: 0;
    box-shadow: none;
    padding: 0;
    max-width: 62ch;
}

.about-body p {
    font-size: 1rem;
    line-height: 1.78;
    color: #2a2a2a;
    margin-bottom: 1.15em;
    max-width: none;
}

.about-body p:last-child { margin-bottom: 0; }


.about-body .about-pull {
    margin: 30px 0;
    padding: 2px 0 2px 20px;
    border-left: 5px solid #FFD700;
    font-size: 1.22rem;
    font-weight: 700;
    line-height: 1.4;
    letter-spacing: -0.012em;
    color: #0f0f0f;
    max-width: 30ch;
}

/* sign-off now lives in the rail */
.about-rail .about-sign {
    margin: 0;
    padding-top: 16px;
    border-top: 2px solid rgba(15, 15, 15, 0.14);
    font-size: 0.88rem;
    font-weight: 800;
    letter-spacing: 0.01em;
    color: #0f0f0f;
    line-height: 1.5;
}

.about-rail .about-sign span {
    display: block;
    margin-top: 4px;
    font-weight: 600;
    font-size: 0.78rem;
    color: #5c5c5c;
}

@media (max-width: 820px) {
    .about-layout { grid-template-columns: 1fr; gap: 26px; }
    .about-rail { position: static; }
    .about-rail h1, .about-rail h2.hero-h1 { font-size: 1.7rem; }
    .about-body { max-width: none; }
}

/* ----- About -> contact: close the gap --------------------------------------
   .section carries 110px top and 80px bottom padding. Stacked between the end
   of the About text and the contact strip that came to ~220px of empty ground.
   Scoped to these two sections so the rest of the page rhythm is unchanged. */

#about { padding-bottom: 36px; }

#contact { padding-top: 36px; }

#contact .social-divider { margin: 18px 0; }

@media (max-width: 820px) {
    #about { padding-bottom: 24px; }
    #contact { padding-top: 24px; }
}

/* ==========================================================================
   BREWED UP INSIGHTS
   Short, dated, sourced notes. A poured card on the homepage, a dropdown in
   the navbar, a ledger at /insights/. Everything renders from
   insights/insights.json through js/insights.js. Same tokens as the rest of
   the site: cream card, 3px ink border, hard offset shadow, gold as accent.
   ========================================================================== */

.insight-tag {
    display: inline-block;
    font-size: 0.66rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: #0f0f0f;
    background: #FFD700;
    border: 2px solid #0f0f0f;
    border-radius: 3px;
    padding: 3px 8px;
    line-height: 1.3;
}

.insight-link {
    font-size: 0.84rem;
    font-weight: 700;
    color: #0f0f0f;
    text-decoration: none;
    border-bottom: 3px solid #FFD700;
    padding-bottom: 1px;
}

.insight-link:hover { border-bottom-color: #0f0f0f; }

.insight-sources {
    font-size: 0.76rem;
    font-weight: 600;
    color: #6b6b6b;
}

/* Sources fold to one line (js/insights.js): the count and the publishers,
   then "Show". Open, the publishers give way to the full list. The same
   summary line serves an insight and each group of an Edge Alert's sources. */
.fcf-sources > summary {
    display: flex;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
    cursor: pointer;
    list-style: none;
    -webkit-tap-highlight-color: transparent;
}
.fcf-sources > summary::-webkit-details-marker { display: none; }
.fcf-sources > summary:focus-visible { outline: 3px solid #0f0f0f; outline-offset: 3px; border-radius: 4px; }
.fcf-sources .src-head { flex: none; color: #0f0f0f; font-weight: 700; }
.fcf-sources .src-names {
    flex: 1 1 auto;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.fcf-sources > summary::after {
    content: "Show";
    flex: none;
    margin-left: auto;
    color: #0f0f0f;
    font-weight: 700;
    text-decoration: underline;
    text-decoration-color: #FFD700;
    text-decoration-thickness: 2px;
    text-underline-offset: 3px;
}
.fcf-sources[open] > summary::after { content: "Hide"; }
.fcf-sources[open] .src-names { visibility: hidden; }
.insight-sources .src-list {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 6px;
    margin-top: 8px;
}

/* In a report the groups sit in the body's type, one ruled line each. */
.fcf-sources-group { border-bottom: 1px solid #E8E2D6; }
.fcf-sources-group:first-of-type { border-top: 1px solid #E8E2D6; }
.fcf-sources-group > summary { padding: 10px 0; font-size: 0.95rem; }
.fcf-sources-group .src-names { color: #6b6b6b; font-weight: 600; font-size: 0.85rem; }
.fcf-sources-group > summary::after { font-size: 0.85rem; }
.fcf-sources-group > ul, .fcf-sources-group > ol { margin-top: 0; padding-bottom: 6px; }
/* opened, the note and each group name sit in the list's smaller type */
.fcf-sources-group > p { margin: 4px 0 8px; font-size: 0.9rem; color: #4a4a4a; }
.fcf-sources-group > p > strong { color: #0f0f0f; }

.insight-sources a {
    color: #3d3d3d;
    text-decoration: underline;
    text-decoration-color: rgba(15, 15, 15, 0.3);
    text-underline-offset: 3px;
}

.insight-sources a:hover { color: #0f0f0f; text-decoration-color: #0f0f0f; }

/* ----- Homepage: poured card + recent list ----- */

.insights-brew {
    display: grid;
    /* the card on the left; its graphic, then the recent list, on the right */
    grid-template-columns: minmax(0, 1fr) minmax(0, 1.2fr);
    grid-template-areas: "card gfx" "card recent";
    grid-template-rows: auto 1fr;
    gap: 28px 40px;
    max-width: 1240px;
    margin: 0 auto;
    padding: 0 20px;
    align-items: start;
    position: relative;
    z-index: 1;
}

.insight-pour {
    background: #FCF7E8;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 5px 5px 0 #0f0f0f;
    padding: 24px 28px 20px;
    display: flex;
    flex-direction: column;
}

.insight-pour .insight-kicker {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 10px 12px;
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #6b6b6b;
    font-variant-numeric: tabular-nums;
}

.insight-pour .insight-body.is-pouring { animation: insightPour 0.32s ease-out; }

@keyframes insightPour {
    from { opacity: 0; transform: translateY(8px); }
    to   { opacity: 1; transform: none; }
}

.insight-figure {
    font-weight: 900;
    letter-spacing: -0.035em;
    line-height: 1;
    color: #0f0f0f;
    font-variant-numeric: tabular-nums;
}

.insight-pour .insight-figure {
    font-size: clamp(2.3rem, 5.5vw, 3.3rem);
    margin: 24px 0 16px;
}

/* A change reads from → to: where it started in grey, where it ended up in
   the highlight. The caption under the number says what it counts. */
.insight-figure.has-from {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.05em 0.28em;
}
.insight-figure .figure-from { font-size: 0.8em; color: #6b6b6b; }
.insight-figure .figure-arrow { font-size: 0.6em; font-weight: 800; color: #008C84; }
.insight-figure .figure-sr {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}
.insight-figure-note {
    font-size: 0.86rem;
    font-weight: 600;
    line-height: 1.4;
    color: #5c5c5c;
    max-width: 36em;
}
.insight-figure-note[hidden] { display: none; }
.insight-pour .insight-figure-note { margin: -6px 0 18px; }
.insight-popup .insight-figure-note { font-size: 0.8rem; margin: 0 0 10px; }

.insight-pour .insight-title {
    font-size: 1.2rem;
    font-weight: 800;
    letter-spacing: -0.014em;
    line-height: 1.28;
    color: #0f0f0f;
    margin: 0 0 10px;
    text-wrap: balance;
}

.insight-pour .insight-text p {
    font-size: 0.98rem;
    font-weight: 500;
    line-height: 1.68;
    color: #262626;
    max-width: 58ch;
    margin: 0;
    text-wrap: pretty;
}

.insight-pour .insight-text p + p { margin-top: 0.8em; }

.insight-pour .insight-sources { margin-top: 16px; }

.insight-foot {
    margin-top: 20px;
    padding-top: 16px;
    border-top: 2px solid rgba(15, 15, 15, 0.12);
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px 16px;
}

.insight-controls { display: flex; align-items: center; gap: 12px; }

.insight-count {
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: #6b6b6b;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.insight-btn {
    font-family: inherit;
    font-size: 0.82rem;
    font-weight: 700;
    padding: 8px 14px;
    border: 2px solid #0f0f0f;
    border-radius: 6px;
    background: #FFD700;
    color: #0f0f0f;
    cursor: pointer;
    white-space: nowrap;
    transition: transform 0.12s ease, box-shadow 0.12s ease;
}

.insight-btn:hover { transform: translate(-1px, -1px); box-shadow: 3px 3px 0 #0f0f0f; }
.insight-btn:active { transform: translate(1px, 1px); box-shadow: none; }

/* the recent list is an index, not an object, so no box */
.insight-recent .insight-recent-label {
    font-size: 0.75rem;
    font-weight: 800;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: #5c5c5c;
    padding-bottom: 10px;
    border-bottom: 2px solid rgba(15, 15, 15, 0.15);
    margin: 4px 0 0;
}

.insight-recent ol { list-style: none; margin: 0; padding: 0; }
.insight-recent li { border-bottom: 2px solid rgba(15, 15, 15, 0.1); }

.insight-recent button {
    font-family: inherit;
    width: 100%;
    display: grid;
    grid-template-columns: 58px minmax(0, 1fr);
    gap: 12px;
    align-items: baseline;
    text-align: left;
    background: none;
    border: 0;
    padding: 13px 4px;
    cursor: pointer;
    color: #0f0f0f;
    border-radius: 4px;
}

.insight-recent button:hover { background: rgba(255, 251, 240, 0.7); }

.insight-recent .r-date {
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #6b6b6b;
    font-variant-numeric: tabular-nums;
}

.insight-recent .r-title { font-size: 0.9rem; font-weight: 600; line-height: 1.4; color: #2a2a2a; }
.insight-recent button[aria-current="true"] .r-title { font-weight: 800; color: #0f0f0f; }
.insight-recent button[aria-current="true"] .r-title span { background: linear-gradient(transparent 58%, #FFD700 58%); }
.insight-recent button[aria-current="true"] .r-date { color: #0f0f0f; }

#insights .article-view-all { margin-top: 36px; }

/* ----- Homepage pop-up: once per new insight ----- */
.insight-popup {
    position: fixed;
    left: 24px;
    bottom: 24px;
    z-index: 150;
    width: 330px;
    max-width: calc(100vw - 24px);
    /* the same teal ground the archive gives an insight card, so the pop-up
       reads as one of them rather than as part of the cream page */
    background: #D3ECEB;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 5px 5px 0 #0f0f0f;
    padding: 16px 18px;
    /* a long summary scrolls inside the card rather than running off the top
       of a short window */
    max-height: calc(100vh - 48px);
    overflow-y: auto;
    animation: insightPopUp 0.35s cubic-bezier(.2, .9, .3, 1.2);
}

@keyframes insightPopUp {
    from { opacity: 0; transform: translateY(24px); }
    to   { opacity: 1; transform: none; }
}

.insight-popup .pop-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; }

.insight-popup .pop-close {
    font-family: inherit;
    font-size: 1.1rem;
    font-weight: 700;
    line-height: 1;
    width: 30px;
    height: 30px;
    border: 2px solid #0f0f0f;
    border-radius: 6px;
    background: transparent;
    color: #0f0f0f;
    cursor: pointer;
}

.insight-popup .pop-close:hover { background: #FFD700; }
.insight-popup .insight-figure { font-size: 2rem; margin: 14px 0 8px; }

.insight-popup .pop-text {
    font-size: 0.88rem;
    line-height: 1.55;
    color: #2a2a2a;
    margin: 0 0 12px;
}

/* ----- Navbar: Insights dropdown -----
   The item stretches to the full bar height so the pointer never leaves it on
   the way down to the panel. Without JS it stays a plain link to /insights/. */
.nav-drop { align-self: stretch; display: flex; align-items: center; }

.nav-drop-toggle { display: inline-flex; align-items: center; gap: 6px; }
.nav-drop-toggle svg { width: 10px; height: 10px; transition: transform 0.2s ease; }
.nav-drop-toggle[aria-expanded="true"] { color: #FFD700; }
.nav-drop-toggle[aria-expanded="true"] svg { transform: rotate(180deg); }

.insights-menu {
    position: fixed;
    top: 60px;
    left: 50%;
    transform: translateX(-50%);
    width: min(780px, calc(100vw - 32px));
    z-index: 120;
    background: #FCF7E8;
    border: 3px solid #0f0f0f;
    border-top: 0;
    border-radius: 0 0 8px 8px;
    box-shadow: 5px 5px 0 #0f0f0f;
    padding: 22px 26px 18px;
    display: grid;
    grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr) minmax(0, 1fr);
    gap: 14px 30px;
    text-align: left;
    animation: insightMenuDrop 0.18s ease-out;
}

/* the site has no global [hidden] rule, and display: grid above would beat
   the browser default, so closed has to be said out loud */
.insights-menu[hidden] { display: none; }

@keyframes insightMenuDrop {
    from { opacity: 0; transform: translate(-50%, -6px); }
    to   { opacity: 1; transform: translate(-50%, 0); }
}

.insights-menu .im-label {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: #5c5c5c;
    padding-bottom: 8px;
    border-bottom: 2px solid rgba(15, 15, 15, 0.14);
    margin: 0 0 6px;
}

.insights-menu ul { list-style: none; margin: 0; padding: 0; }

.insights-menu .im-list a {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    padding: 8px;
    margin: 0 -8px;
    border-radius: 4px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.86rem;
    font-weight: 600;
    line-height: 1.35;
    color: #0f0f0f;
    text-decoration: none;
}

.insights-menu .im-list a:hover,
.insights-menu .im-list a:focus-visible { background: rgba(255, 215, 0, 0.4); outline: none; }

.insights-menu .im-n { font-size: 0.72rem; font-weight: 700; color: #6b6b6b; font-variant-numeric: tabular-nums; }

.insights-menu .im-latest a { display: grid; grid-template-columns: 50px minmax(0, 1fr); justify-content: start; }

.insights-menu .im-date {
    font-size: 0.68rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #6b6b6b;
    font-variant-numeric: tabular-nums;
}

.insights-menu .im-foot {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 8px 16px;
    padding-top: 14px;
    margin-top: 4px;
    border-top: 2px solid rgba(15, 15, 15, 0.12);
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.76rem;
    font-weight: 600;
    color: #5c5c5c;
}

/* ----- Archive: sticky month and topic bar ----- */
.insight-toolbar {
    position: sticky;
    top: 60px;
    z-index: 50;
    max-width: 1240px;
    margin: 0 auto 30px;
    padding: 14px 20px 12px;
    background: #FCF7E8;
    border-bottom: 2px solid rgba(15, 15, 15, 0.15);
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px 26px;
}

.insight-toolbar .tb-group { display: flex; align-items: center; gap: 10px; min-width: 0; }

.insight-toolbar .tb-label {
    font-size: 0.66rem;
    font-weight: 800;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: #6b6b6b;
    white-space: nowrap;
}

.insight-toolbar .tb-chips { display: flex; gap: 6px; overflow-x: auto; scrollbar-width: none; padding: 2px 4px 4px 2px; }
.insight-toolbar .tb-chips::-webkit-scrollbar { display: none; }

.tb-chip {
    font-family: inherit;
    font-size: 0.76rem;
    font-weight: 700;
    padding: 5px 11px;
    border: 2px solid #0f0f0f;
    border-radius: 6px;
    background: transparent;
    color: #0f0f0f;
    cursor: pointer;
    white-space: nowrap;
    font-variant-numeric: tabular-nums;
}

.tb-chip:hover { background: rgba(255, 215, 0, 0.35); }
.tb-chip[aria-pressed="true"],
.tb-chip[aria-current="true"] { background: #FFD700; box-shadow: 2px 2px 0 #0f0f0f; }
.tb-chip:disabled { opacity: 0.32; cursor: default; background: transparent; box-shadow: none; }

.insight-toolbar .filter-count {
    margin-left: auto;
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #6b6b6b;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

/* ----- Archive: ledger grouped by month -----
   Each insight is a teal card, the same as the cards on The Macro Brew and
   The Edge Alert listings, so it stands off the cream page. */
.insight-log { max-width: 1240px; margin: 0 auto; padding: 0 var(--gutter); }
.insight-log .log-month { margin: 0 0 16px; }
.insight-log .log-entry + .log-month { margin-top: 44px; }

.log-entry {
    display: grid;
    grid-template-columns: 64px minmax(0, 1fr) 176px;
    gap: 24px;
    padding: 24px 28px;
    margin-bottom: 20px;
    background: #D3ECEB;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 5px 5px 0 #0f0f0f;
    transition: background-color 0.6s ease;
}

.log-entry:target,
.log-entry.is-flash { background-color: #EFE3A0; }

.log-day { display: flex; flex-direction: column; font-variant-numeric: tabular-nums; }
.log-day .d { font-size: 1.9rem; font-weight: 800; letter-spacing: -0.03em; line-height: 1; color: #0f0f0f; }
.log-day .w { font-size: 0.68rem; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; color: #6b6b6b; margin-top: 6px; }

.log-body .log-meta { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }

.log-meta .log-no {
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #6b6b6b;
    text-decoration: none;
    font-variant-numeric: tabular-nums;
}

.log-meta .log-no:hover { color: #0f0f0f; text-decoration: underline; }

.insight-log .log-body h2 {
    font-size: 1.15rem;
    font-weight: 800;
    letter-spacing: -0.012em;
    line-height: 1.3;
    color: #0f0f0f;
    margin: 0 0 8px;
    text-wrap: balance;
}

.insight-log .log-body p {
    font-size: 0.98rem;
    line-height: 1.7;
    color: #333;
    max-width: 62ch;
    margin: 0;
}

.insight-log .log-body p + p { margin-top: 0.8em; }
.insight-log .insight-sources { margin-top: 14px; }

.log-figure {
    text-align: right;
    font-size: 1.6rem;
    padding-top: 2px;
}

/* ----- Infographics beside an insight -----
   The PNG carries its own cream card, keyline and hard shadow, so the page adds
   only spacing. Every graphic shows, stacked. From 1024px they sit beside the
   text in the wider right column; narrower, they drop under the text. */
.insight-graphics { display: flex; flex-direction: column; gap: 20px; min-width: 0; }
.insight-graphics .insight-more { align-self: flex-start; }
.log-entry .insight-graphics { grid-column: 2 / -1; }
.insights-brew .insight-pour { grid-area: card; }
.insights-brew .insight-gfx { grid-area: gfx; min-width: 0; }
.insights-brew .insight-recent { grid-area: recent; }
/* min-width 0, or the image's natural 1200px width widens the grid past a phone screen */
.insight-graphic { margin: 0; min-width: 0; }
.insight-graphic a { display: block; border-radius: 10px; }
.insight-graphic a:focus-visible { outline: 3px solid #0f0f0f; outline-offset: 3px; }
.insight-graphic img { display: block; width: 100%; height: auto; }
.insight-graphic a { cursor: zoom-in; }

/* ----- Lightbox: any graphic opens in place, with a visible close button.
   Ink backdrop so the cream card reads; the X carries the house keyline and
   hard shadow. The page behind stops scrolling while it is open. ----- */
html.fcf-lightbox-open, html.fcf-lightbox-open body { overflow: hidden; }

.fcf-graphic-open {
    display: block;
    width: 100%;
    padding: 0;
    margin: 0;
    border: 0;
    background: none;
    font: inherit;
    color: inherit;
    cursor: zoom-in;
    -webkit-tap-highlight-color: transparent;
}
.fcf-graphic-open:focus-visible { outline: 3px solid #0f0f0f; outline-offset: 3px; }

.fcf-lightbox {
    position: fixed;
    inset: 0;
    z-index: 1000;
    background: rgba(15, 15, 15, 0.94);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 64px 16px 24px;
    animation: fcfLightboxIn 0.18s ease-out;
    -webkit-tap-highlight-color: transparent;
}
.fcf-lightbox[hidden] { display: none; }
@keyframes fcfLightboxIn { from { opacity: 0; } to { opacity: 1; } }

.fcf-lightbox-figure {
    margin: 0;
    width: 100%;
    height: 100%;
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 0;
    min-height: 0;
}
.fcf-lightbox-figure img {
    display: block;
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
    border-radius: 10px;
    box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5);
    touch-action: pinch-zoom;
}

.fcf-lightbox-close {
    position: absolute;
    top: 12px;
    right: 12px;
    width: 48px;
    height: 48px;
    padding: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #FCF7E8;
    color: #0f0f0f;
    border: 3px solid #0f0f0f;
    border-radius: 50%;
    box-shadow: 3px 3px 0 #0f0f0f;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.fcf-lightbox-close:hover { background: #FFD700; }
.fcf-lightbox-close:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 #0f0f0f; }
.fcf-lightbox-close:focus-visible { outline: 3px solid #FCF7E8; outline-offset: 3px; }

/* ----- Turning a wide graphic to fill an upright phone -----
   The figure is given the screen's measurements with its sides swapped and
   then turned through 90 degrees, so the picture inside it is laid along the
   long side of the screen. On a 390x844 phone a 4:3 graphic opens 520px
   across instead of 350px. js/insights.js sets the two measurements and
   decides when to offer it. */
.fcf-lightbox { overflow: hidden; }
.fcf-lightbox-figure.is-turned {
    flex: none;
    width: var(--lb-down);
    height: var(--lb-across);
    transform: rotate(90deg);
}

.fcf-lightbox-turn {
    position: absolute;
    top: 12px;
    left: 12px;
    min-height: 48px;
    padding: 0 14px;
    display: inline-flex;
    align-items: center;
    gap: 7px;
    background: #FCF7E8;
    color: #0f0f0f;
    border: 3px solid #0f0f0f;
    border-radius: 24px;
    box-shadow: 3px 3px 0 #0f0f0f;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.82rem;
    font-weight: 800;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
.fcf-lightbox-turn[hidden] { display: none; }
.fcf-lightbox-turn:hover { background: #FFD700; }
.fcf-lightbox-turn:active { transform: translate(2px, 2px); box-shadow: 1px 1px 0 #0f0f0f; }
.fcf-lightbox-turn:focus-visible { outline: 3px solid #FCF7E8; outline-offset: 3px; }
.fcf-lightbox-turn[aria-pressed="true"] { background: #FFD700; }

.fcf-lightbox-hint {
    position: absolute;
    left: 12px;
    right: 12px;
    top: 68px;
    margin: 0;
    padding: 10px 14px;
    background: #FCF7E8;
    color: #0f0f0f;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 3px 3px 0 #0f0f0f;
    font-size: 0.82rem;
    font-weight: 600;
    line-height: 1.45;
    z-index: 2;
}
.fcf-lightbox-hint[hidden] { display: none; }
.fcf-lightbox-hint b { font-weight: 800; }

@media (min-width: 821px) {
    .fcf-lightbox { padding: 80px 48px 40px; }
    .fcf-lightbox-close { top: 20px; right: 24px; }
}
@media (prefers-reduced-motion: reduce) {
    .fcf-lightbox { animation: none; }
}

@media (min-width: 1024px) {
    .log-entry.has-graphics {
        grid-template-columns: 64px minmax(0, 5fr) minmax(0, 7fr);
        grid-template-areas: "day figure gfx" "day body gfx";
        grid-template-rows: auto 1fr;
        column-gap: 40px;
        row-gap: 4px;
    }
    .log-entry.has-graphics .log-day { grid-area: day; }
    .log-entry.has-graphics .log-figure { grid-area: figure; text-align: left; padding-top: 0; }
    .log-entry.has-graphics .log-body { grid-area: body; }
    .log-entry.has-graphics .insight-graphics { grid-area: gfx; align-self: start; }
}

.insight-empty { padding: 30px 0; color: #5c5c5c; font-weight: 600; }

/* ----- Responsive ----- */
@media (max-width: 820px) {
    .insights-brew { grid-template-columns: 1fr; grid-template-areas: "card" "gfx" "recent"; grid-template-rows: auto; gap: 28px; }
}

@media (max-width: 820px) {
    /* inside the hamburger menu the panel sits inline under its link */
    .nav-menu { max-height: calc(100vh - 60px); overflow-y: auto; }
    .nav-drop { flex-direction: column; align-self: auto; width: 100%; }
    .insights-menu {
        position: static;
        transform: none;
        width: 100%;
        margin-top: 10px;
        border: 2px solid #FFD700;
        border-radius: 8px;
        box-shadow: none;
        grid-template-columns: 1fr 1fr;
        padding: 16px 18px 14px;
        animation: none;
    }
    .insights-menu .im-latest { display: none; }
}

@media (max-width: 640px) {
    .log-entry { grid-template-columns: 48px minmax(0, 1fr); gap: 16px; padding: 20px 18px; }
    .log-figure { grid-column: 2; grid-row: 1; text-align: left; font-size: 1.45rem; }
    .log-body { grid-column: 2; }
    .log-day { grid-row: 1 / span 2; }
    .log-entry .insight-graphics { grid-column: 1 / -1; }
    .insight-toolbar { padding: 10px 12px; gap: 8px; margin-left: -8px; margin-right: -8px; }
    .insight-toolbar .tb-group { width: 100%; }
    .insight-toolbar .tb-label { width: 52px; flex: none; }
    .insight-toolbar .filter-count { display: none; }
    .insight-pour { padding: 20px 20px 18px; }
    /* full width, and clear of the back-to-top button in the corner so both
       stay tappable */
    .insight-popup { left: 12px; right: 12px; bottom: 76px; width: auto; max-height: calc(100vh - 100px); }
}

@media (prefers-reduced-motion: reduce) {
    .insight-pour .insight-body.is-pouring,
    .insight-popup,
    .insights-menu { animation: none; }
    .nav-drop-toggle svg,
    .log-entry { transition: none; }
}

/* ----- Insight pages run wider than the default 980px section -----
   so a graphic can sit beside the text rather than under it. */
#insights.section,
.section.insights-page { max-width: 1320px; }

/* ----- Charts a reader can touch (js/fcf-chart.js) -----
   The picture is never changed. A clear sheet sits over it and carries the
   rule, the dots and the outlines, and they glide from point to point; the
   reading is 1 line above the picture, on the page's own ground.
   Any graphic without a map gets none of this and stays a plain picture. */
.fcf-chart-stage { position: relative; }
.fcf-chart-layer {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    cursor: crosshair;
    /* The page still scrolls under a thumb; a sideways drag reads the chart. */
    touch-action: pan-y;
    outline: none;
    border-radius: 10px;
    -webkit-tap-highlight-color: transparent;
}
.fcf-chart-layer:focus-visible { outline: 3px solid #0f0f0f; outline-offset: 3px; }
.fcf-chart-layer.is-pinned { cursor: pointer; }
/* Something opens on a click: the filing the number came from. */
.fcf-chart-layer.has-link { cursor: pointer; }
.fcf-chart .fcf-chart-source {
    margin: 8px 0 0;
    padding-top: 7px;
    border-top: 1.5px solid #E8E2D6;
    font-size: 0.74rem;
    font-weight: 700;
    color: #00625c;
}
.fcf-chart .fcf-chart-cite a { color: #0f0f0f; font-weight: 700; text-decoration: underline; text-decoration-color: #FFD700; text-decoration-thickness: 2px; text-underline-offset: 3px; }

/* The reading above a chart. Its height is set by js/fcf-chart.js to the
   longest reading the chart has, so the picture never moves under a finger. */
.fcf-chart-read {
    /* the reading sits on the chart; any room kept for a longer one stays above it */
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    margin: 0 0 8px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.82rem;
    line-height: 1.45;
    color: #1a1a1a;
    text-align: left;
}
.fcf-read-head { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; }
.fcf-read-label {
    font-size: 0.75rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: #0f0f0f;
}
.fcf-read-label.is-hint { color: #6b6b6b; font-weight: 700; }
.fcf-read-source { font-size: 0.78rem; font-weight: 800; color: #00625c; white-space: nowrap; text-decoration: none; }
/* a link a thumb can hit, without making the line taller */
a.fcf-read-source { display: inline-flex; align-items: center; min-height: 40px; margin: -10px 0; }
.fcf-read-rows { display: flex; flex-wrap: wrap; gap: 2px 14px; margin-top: 2px; }
.fcf-read-item { display: inline-flex; align-items: baseline; gap: 5px; max-width: 100%; }
.fcf-read-item b { font-weight: 800; font-variant-numeric: tabular-nums; white-space: nowrap; }
.fcf-read-item.is-text b { white-space: normal; font-weight: 600; }
.fcf-read-item.is-muted { color: #5c5c5c; }
.fcf-read-item.is-active b { background: rgba(255, 215, 0, 0.45); border-radius: 3px; padding: 0 3px; }
.fcf-read-swatch { flex: none; align-self: center; width: 10px; height: 10px; border-radius: 2px; border: 1.5px solid #0f0f0f; }
.fcf-read-note { margin-top: 2px; font-size: 0.78rem; color: #555; }
/* The change between 2 dates on a price chart (js/fcf-chart.js): green for a
   rise and red for a fall, the inks and washes of mark.up and mark.down. A
   drag across the chart must not select the page's text. */
.fcf-chart-layer { -webkit-user-select: none; user-select: none; }
.fcf-read-change b { border-radius: 3px; padding: 0 4px; }
.fcf-read-change.up b { color: #1B6E34; background: rgba(46, 160, 67, 0.18); }
.fcf-read-change.down b { color: #A33224; background: rgba(214, 69, 51, 0.14); }
.fcf-read-source.is-quiet { color: #6b6b6b; font-weight: 700; }
/* the marks glide from point to point */
.fcf-chart-layer .fcf-mark { transition: transform 0.09s ease-out; }
@media (prefers-reduced-motion: reduce) { .fcf-chart-layer .fcf-mark { transition: none; } }
/* on a phone the waiting reading names the series, so the key under the picture would say it twice */
body.reading figure.has-read-key .fcf-chrome-foot p.fcf-chrome-key:not(.fcf-chrome-shades) { display: none; }

.fcf-chart .fcf-chart-note {
    margin: 8px -4px 0;
    padding: 6px 8px;
    background: #FFD700;
    border: 2px solid #0f0f0f;
    border-radius: 6px;
    font-size: 0.8rem;
    font-weight: 700;
}

/* Spoken to a screen reader as the arrow keys move; never seen. */
.fcf-chart-live {
    position: absolute;
    width: 1px;
    height: 1px;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
}

.fcf-chart-bar,
.fcf-chart-views {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
}
.fcf-chart-bar { margin-top: 12px; }
.fcf-chart-views { margin-bottom: 10px; }
.fcf-chart-views[hidden] { display: none; }
.fcf-chart-toggle { display: inline-flex; flex-wrap: wrap; gap: 6px; }
.fcf-chart-step { font-size: 0.85rem; color: #333; }

.fcf-chart-btn {
    display: inline-flex;
    align-items: center;
    box-sizing: border-box;
    min-height: 34px;
    padding: 5px 11px;
    background: #FCF7E8;
    color: #0f0f0f;
    border: 2px solid #0f0f0f;
    border-radius: 8px;
    box-shadow: 2px 2px 0 #0f0f0f;
    font: inherit;
    font-size: 0.8rem;
    font-weight: 700;
    line-height: 1.2;
    text-decoration: none;
    cursor: pointer;
    -webkit-tap-highlight-color: transparent;
}
/* "Save image" is a link, and a link inside a report or an article is given
   a gold underline by rules more specific than a lone class. On the insights
   pages `.insight-graphic a` also makes every link in the figure a block with
   a zoom cursor, meant for the picture; as a block the button loses its
   centring and the label rides to the top. Restore the button's own layout. */
.fcf-chart a.fcf-chart-btn {
    display: inline-flex;
    border-radius: 8px;
    color: #0f0f0f;
    text-decoration: none;
    cursor: pointer;
}
.fcf-chart-btn:hover { background: #FFD700; }
.fcf-chart-btn:active { transform: translate(1px, 1px); box-shadow: 1px 1px 0 #0f0f0f; }
.fcf-chart-btn:focus-visible { outline: 3px solid #0f0f0f; outline-offset: 2px; }
.fcf-chart-btn.is-on { background: #0f0f0f; color: #FCF7E8; }
.fcf-chart-btn:disabled { opacity: 0.45; cursor: default; background: #FCF7E8; transform: none; box-shadow: 2px 2px 0 #0f0f0f; }

/* The cited rows, in the same frame as the tables in a report: cream ground,
   ink header, figures right-aligned and tabular so a column lines up. */
.fcf-chart-numbers { margin-top: 12px; }
.fcf-chart-numbers[hidden] { display: none; }
.fcf-chart-scroll {
    max-height: 360px;
    overflow: auto;
    border: 2.5px solid #0f0f0f;
    border-radius: 8px;
    background: #FCF7E8;
}
.fcf-chart-scroll:focus-visible { outline: 3px solid #0f0f0f; outline-offset: 2px; }
.fcf-chart-numbers table { width: 100%; border-collapse: collapse; font-size: 0.85rem; margin: 0; }
.fcf-chart-numbers th {
    position: sticky;
    top: 0;
    padding: 0;
    background: #0f0f0f;
    text-align: left;
}
.fcf-chart-numbers th button {
    width: 100%;
    padding: 8px 12px;
    background: none;
    border: 0;
    color: #FFD700;
    font: inherit;
    font-size: 0.72rem;
    font-weight: 800;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    text-align: inherit;
    white-space: nowrap;
    cursor: pointer;
}
.fcf-chart-numbers th button:focus-visible { outline: 2px solid #FFD700; outline-offset: -3px; }
.fcf-chart-numbers td { padding: 7px 12px; border-top: 1px solid #E8E2D6; color: #0f0f0f; }
.fcf-chart-numbers .is-num { text-align: right; font-variant-numeric: tabular-nums; }
.fcf-chart .fcf-chart-cite { margin: 8px 0 0; font-size: 0.78rem; color: #5c5c5c; }

/* Five tools fit two rows on a phone rather than three. */
@media (max-width: 640px) {
    .fcf-chart-bar, .fcf-chart-views { gap: 6px; }
    .fcf-chart-btn { padding: 5px 9px; font-size: 0.74rem; }
}

@media print {
    .fcf-chart-layer, .fcf-chart-read, .fcf-chart-bar, .fcf-chart-views { display: none !important; }
}

/* ==========================================================================
   PHONES
   Checked on a 411px Android screen. Sits last so it wins over the desktop
   rules above without raising their specificity.
   ========================================================================== */

@media (max-width: 820px) {
    /* The open menu is a full-width panel under the navbar. .navbar .nav-menu
       above sets width auto for desktop, which squeezed it into a strip, and
       the base height 100% stretched it down the whole screen. */
    .navbar .nav-menu {
        width: 100%;
        height: auto;
        max-height: calc(100vh - 60px);
        max-height: calc(100dvh - 60px);
        padding: 6px 20px 18px;
        justify-content: flex-start;
        align-items: stretch;
        gap: 0;
        border-bottom: 3px solid #FFD700;
    }
    .navbar .nav-menu > li { width: 100%; }
    .navbar .nav-menu .nav-link {
        display: flex;
        align-items: center;
        min-height: 48px;
        padding: 12px 2px;
        font-size: 1rem;
        border-bottom: 1px solid rgba(255, 255, 255, 0.1);
    }
    .navbar .nav-menu > li:last-child > .nav-link { border-bottom: 0; }
    .navbar .nav-menu .nav-drop { align-items: stretch; }
    /* rows are full width, so the desktop centred underline and tint go */
    .navbar .nav-menu .nav-link::after { display: none; }
    .navbar .nav-menu .nav-link:hover,
    .navbar .nav-menu .nav-link.active { background: transparent; }

    .hamburger { padding: 12px; }

    .footer-links { gap: 0 6px; }
    .footer-links a { display: inline-block; padding: 12px 8px; }
}

@media (max-width: 820px) {
    /* 16px stops phones zooming into the field on tap */
    .subscribe-bar-form input { font-size: 16px; height: 38px; padding: 0 12px; }
    .subscribe-bar-form button { height: 38px; padding: 0 14px; }
    .signin-input { font-size: 16px; }
    .insight-link { display: inline-block; padding-top: 10px; }
}

@media (max-width: 640px) {
    .tb-chip { min-height: 40px; padding: 8px 13px; }
    /* 52px clipped "Jump to" into its chips */
    .insight-toolbar .tb-label { width: 66px; }
    .insight-sources .src-list { gap: 0; }
    .insight-sources .src-list a { padding: 7px 0; }
    .fcf-sources > summary { min-height: 40px; align-items: center; }
    .log-meta .log-no { padding: 12px 4px; margin: -12px 0; }

    /* small uppercase labels up to 12px */
    .insight-tag,
    .log-day .w,
    .log-meta .log-no,
    .article-hero .article-kicker { font-size: 0.75rem; }
    .article-date,
    .article-hero .article-meta { font-size: 0.78rem; }
}

@media (max-width: 640px) {
    /* Glossary tips: a hidden tip centred on a word near the edge still made
       the page wider than the screen. On phones the tip is out of layout until
       tapped. With JavaScript, js/cite.js opens it as a card right by the word
       (html.fcf-tips, below); without it, this bar along the bottom is the
       fallback. The article box keeps an identity transform from its reveal,
       which would trap a fixed child, so it is cleared once revealed. */
    .article-content.animate-on-scroll.visible { transform: none; }
    .article-content .term::before { display: none; }
    .article-content .term::after {
        display: none;
        position: fixed;
        top: auto;
        left: 16px;
        right: 16px;
        bottom: 16px;
        width: auto;
        max-width: none;
        transform: none;
        font-size: 0.9rem;
        z-index: 130;
    }
    .article-content .term:hover::after,
    .article-content .term:focus::after { display: block; transform: none; }
}

/* ===== LIKES, SHARES AND COMMENTS (js/engagement.js) ===== */
.engage { font-family: 'Montserrat', 'Montserrat Fallback', sans-serif; }

.engage--full {
    max-width: 860px;
    margin: 20px auto 0;
    padding: 28px 20px 0;
    border-top: 1px solid #e8e2d6;
}

.engage-bar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 14px 28px;
}

.engage-like {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 10px 18px;
    border: 2px solid #0f0f0f;
    border-radius: 999px;
    background: #fff;
    color: #0f0f0f;
    font-family: inherit;
    font-weight: 800;
    font-size: 0.9rem;
    cursor: pointer;
    transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease;
}
.engage-like:hover { transform: translateY(-1px); box-shadow: 3px 3px 0 #0f0f0f; }
.engage-like[aria-pressed="true"] { background: #0f0f0f; color: #FFD700; }
.engage-heart { font-size: 1.15rem; line-height: 1; color: #c62828; }
.engage-like[aria-pressed="true"] .engage-heart { color: #FFD700; }
.engage-like-count:empty { display: none; }
.engage-like-count { font-weight: 700; }
.engage-like-label:empty { display: none; }
.engage-like.is-popping .engage-heart { animation: engage-pop 0.35s ease; }
@keyframes engage-pop { 0% { transform: scale(1); } 40% { transform: scale(1.5); } 100% { transform: scale(1); } }

.engage-share { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; }
.engage-share .share-label { display: inline; margin: 0; }
.engage-share .share-buttons { justify-content: center; }
.engage .share-btn { cursor: pointer; font-family: inherit; }
.engage .share-btn.is-copied { background: #008C84; border-color: #008C84; color: #fff; }

.engage-comments-toggle {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 8px 14px;
    border: 2px solid #0f0f0f;
    border-radius: 999px;
    background: #fff;
    color: #0f0f0f;
    font-family: inherit;
    font-weight: 700;
    font-size: 0.8rem;
    cursor: pointer;
}
.engage-comments-toggle:hover, .engage-comments-toggle[aria-expanded="true"] { background: #FFD700; }

.engage-comments { margin-top: 32px; }
.engage-comments-title {
    font-size: 1.2rem;
    font-weight: 800;
    margin: 0 0 18px;
}
.engage-comments-n { font-weight: 600; color: #888; font-size: 0.95rem; }

.engage-list { list-style: none; margin: 0; padding: 0; }
.engage-comment {
    padding: 16px 18px;
    margin-bottom: 12px;
    background: #fff;
    border: 2px solid #0f0f0f;
    border-radius: 12px;
    box-shadow: 4px 4px 0 #0f0f0f;
}
.engage-comment-meta { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 12px; margin-bottom: 6px; }
.engage-comment-name { font-weight: 800; font-size: 0.95rem; }
.engage-comment-meta time { font-size: 0.75rem; font-weight: 600; color: #888; letter-spacing: 0.04em; }
.engage-comment-body p { margin: 0 0 10px; font-size: 0.95rem; line-height: 1.7; color: #2a2a2a; }
.engage-comment-body p:last-child { margin-bottom: 0; }

.engage-form {
    margin-top: 20px;
    padding: 18px;
    background: #FCF7E8;
    border: 2px solid #0f0f0f;
    border-radius: 12px;
}
.engage-form label { display: block; }
.engage-form label > span { display: block; font-size: 0.74rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; margin-bottom: 6px; }
.engage-form label > span small { text-transform: none; letter-spacing: 0; font-weight: 600; color: #666; }
.engage-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 12px; }
.engage-form input, .engage-form textarea {
    width: 100%;
    box-sizing: border-box;
    padding: 10px 12px;
    border: 2px solid #0f0f0f;
    border-radius: 8px;
    background: #fff;
    font-family: inherit;
    font-size: 0.95rem;
    color: #0f0f0f;
}
.engage-form textarea { resize: vertical; min-height: 96px; }
.engage-form input:focus, .engage-form textarea:focus { outline: none; box-shadow: 0 0 0 3px rgba(229, 171, 27, 0.45); }
.engage-hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.engage-form-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin-top: 12px; }
.engage-submit {
    padding: 10px 20px;
    border: 2px solid #0f0f0f;
    border-radius: 8px;
    background: #0f0f0f;
    color: #FFD700;
    font-family: inherit;
    font-weight: 800;
    font-size: 0.85rem;
    cursor: pointer;
    transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.engage-submit:hover { transform: translateY(-1px); box-shadow: 3px 3px 0 #0f0f0f; }
.engage-submit:disabled { opacity: 0.6; cursor: wait; transform: none; box-shadow: none; }
.engage-form-msg { font-size: 0.85rem; font-weight: 600; color: #008C84; }

/* Compact: one row under an insight, the thread folded under a toggle. */
.engage--compact { margin-top: 14px; }
.engage--compact .engage-bar { justify-content: flex-start; gap: 8px 12px; }
.engage--compact .engage-like { padding: 6px 12px; font-size: 0.8rem; gap: 6px; }
.engage--compact .engage-heart { font-size: 1rem; }
.engage--compact .share-buttons { gap: 6px; }
.engage--compact .share-btn { width: 32px; height: 32px; font-size: 0.85rem; }
.engage--compact .engage-comments { margin-top: 14px; }
.engage--compact .engage-comment { padding: 12px 14px; box-shadow: 3px 3px 0 #0f0f0f; }
.engage--compact .engage-form { padding: 14px; }
.engage.is-degraded .engage-bar { justify-content: flex-start; }

/* The homepage card pours onto a teal ground; keep the row inside its footer. */
.insight-foot .engage--compact { margin: 0; flex-basis: 100%; }

@media (max-width: 640px) {
    .engage-form-row { grid-template-columns: 1fr; }
    .engage-bar { gap: 12px 18px; }
}

/* The homepage card's footer gains a row: the engagement bar wraps above the
   archive link and the pour controls rather than squeezing between them. */
.insight-foot { flex-wrap: wrap; gap: 12px 16px; }

/* Comments panel on /brew */
.brew-comments { list-style: none; margin: 0; padding: 0; }
.brew-comment { padding: 14px 0; border-top: 1px solid #E8E2D6; }
.brew-comment:first-child { border-top: none; padding-top: 0; }
.brew-comment-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px; font-size: 0.82rem; color: #6b6b6b; }
.brew-comment-head strong { color: #0f0f0f; font-size: 0.95rem; }
.brew-comment-head a { color: #008C84; font-weight: 700; }
.brew-comment-body { margin: 8px 0 10px; font-size: 0.95rem; line-height: 1.65; white-space: pre-wrap; }
.brew-comment.is-hidden .brew-comment-body { color: #888; }
.brew-comment-actions { display: flex; flex-wrap: wrap; gap: 8px; }


/* ----- About byline: the name links to LinkedIn --------------------------
   The signature in the About rail carries Pranami's LinkedIn. At rest it keeps
   the signature's own colour and weight with the house gold underline, so the
   block still reads as a signature. Hover and keyboard focus wipe the gold
   highlight in behind the name, the same gold as .highlight-box, so there is
   no doubt the name is a link. The gold is solid rather than a bottom band so
   the dark text on it stays readable in dark mode too. Horizontal padding is
   cancelled by an equal negative margin, and the vertical padding sits on an
   inline box, so nothing on the line moves. */
.about-sign a {
    color: inherit;
    text-decoration: underline;
    text-decoration-color: #FFD700;
    text-decoration-thickness: 2px;
    text-underline-offset: 4px;
    padding: 2px 6px;
    margin: 0 -6px;
    border-radius: 4px;
    background-image: linear-gradient(#FFD700, #FFD700);
    background-repeat: no-repeat;
    background-position: 0 50%;
    background-size: 0 100%;
    transition: background-size 0.25s ease, color 0.2s ease, text-decoration-color 0.2s ease;
}

.about-sign a:hover,
.about-sign a:focus-visible {
    color: #0f0f0f;
    background-size: 100% 100%;
    text-decoration-color: #0f0f0f;
}
.about-reach { margin: 2px 0 -10px; font-size: 0.86rem; font-weight: 700; }
.about-reach a { display: inline-block; padding: 10px 0; color: #0f0f0f; text-decoration: underline; text-decoration-color: #FFD700; text-decoration-thickness: 2px; text-underline-offset: 3px; }
.about-reach a:hover, .about-reach a:focus-visible { text-decoration-color: #0f0f0f; }

/* The 3 newsletters named in the body text link to their sections, in the
   ink-and-gold-underline style of a Macro Brew article link. */
.about-body a {
    color: #0f0f0f;
    text-decoration: underline;
    text-decoration-color: #FFD700;
    text-decoration-thickness: 2px;
    text-underline-offset: 3px;
    transition: text-decoration-color 0.2s;
}
.about-body a:hover, .about-body a:focus-visible { text-decoration-color: #0f0f0f; }

@media (prefers-reduced-motion: reduce) {
    .about-sign a { transition: none; }
}

/* ----- The buttons under a graphic -----
   On a wide screen all 5 sit in one row and the fold is not drawn: its
   buttons take their place in the row. On a phone all 5 fold behind one
   "Options" button and open underneath it, with their full labels. */
.fcf-chart-more { display: contents; }
.fcf-chart-more-btn { display: none; }
.fcf-chart-btn .lbl-short { display: none; }
@media (max-width: 640px), (max-height: 500px) {
    .fcf-chart-bar { flex-wrap: wrap; }
    .fcf-chart-more-btn { display: inline-flex; align-items: center; gap: 5px; }
    .fcf-chart-more-btn::after {
        content: ""; width: 7px; height: 7px; margin-top: -3px;
        border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;
        transform: rotate(45deg); transition: transform .15s ease;
    }
    .fcf-chart-more-btn[aria-expanded="true"]::after { transform: rotate(-135deg); margin-top: 3px; }
    .fcf-chart-more { display: none; }
    .fcf-chart-more.is-open { display: flex; flex-wrap: wrap; gap: 6px; flex-basis: 100%; margin-top: 2px; }
}
@media (prefers-reduced-motion: reduce) { .fcf-chart-more-btn::after { transition: none; } }

/* ==========================================================================
   BREWED UP INSIGHTS, LISTED THE WAY THE OTHER TWO ARE
   --------------------------------------------------------------------------
   Every insight has a page of its own now (api/insight-page.js), which opens
   the way an Edge Alert report does. So the archive stops being a ledger of
   whole insights and lists them on the same card, in the same column, as The
   Macro Brew and The Edge Alert list their issues. Measured against those two
   listings at 390 and 1440 wide.
   ========================================================================== */

/* The same page width as the other listings, so the title, the toolbar, the
   month labels and the cards share one left edge. */
.section.insights-page { max-width: 980px; }
.insights-page .insight-log { max-width: none; padding: 0; }
.insights-page .insight-toolbar { max-width: 820px; }
.insights-page .log-month { max-width: 820px; margin-left: auto; margin-right: auto; }
.insights-page .insight-cards + .log-month { margin-top: 44px; }
/* the site has no global [hidden] rule, so a hidden group needs its own */
.insight-toolbar .tb-group[hidden] { display: none; }

/* The card is the listing card; only what it says differs. */
.insights-page .insight-cards { margin-top: 0; }
#insightLog .article-card::after { content: "Brewed Up Insights"; }
.insight-card-meta {
    order: 0;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    margin-bottom: 10px;
}
.insight-card-no {
    font-size: 0.72rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #595959;
}
.article-card .insight-card-figure {
    order: 0;
    font-size: 1.9rem;
    margin-bottom: 10px;
}
.article-card .insight-figure-note {
    order: 0;
    font-size: 0.8rem;
    margin: -4px 0 12px;
}

/* The homepage card is the same insight, so it wears the listing card's
   teal and its type. */
.insight-pour { background: #D3ECEB; }
.insight-pour .insight-title { font-size: 1.28rem; line-height: 1.26; letter-spacing: -0.014em; }
.insight-pour .insight-text p { font-size: 0.95rem; font-weight: 400; line-height: 1.68; color: #4a4a4a; }

@media (max-width: 640px), (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    /* The toolbar stops following the reader down the page. Pinned, it took
       22% of a phone screen against 7% on every other page. */
    .insights-page .insight-toolbar { position: static; }
    /* all the topics in view, rather than 2 of them past the edge */
    .insights-page .insight-toolbar .tb-chips { flex-wrap: wrap; overflow-x: visible; }
    .article-card .insight-card-figure { font-size: 1.7rem; }
}

/* ==========================================================================
   PHONES
   --------------------------------------------------------------------------
   One block, read last, for everything the phone needs. It exists because the
   site was drawn for a reading column of 780px and then handed to a screen a
   third of that width, where three things went wrong at once:

     1. Four separate rules let the layout grow wider than the screen, on 41 of
        the 105 page-and-size combinations measured. A phone answers that by
        zooming out until the whole layout fits, which is why the page looked
        shrunken and why the centred column sat off to one side.
     2. Graphics drawn on a 1200px canvas were shown at 268px, so a 20px label
        arrived at 4px.
     3. Type and tap targets kept their desktop sizes on a 310px column.

   Measured at 320, 360, 375, 390, 412 and 430 wide and in landscape.
   ========================================================================== */

/* ----- 1. The layout may never be wider than the screen -------------------
   clip rather than hidden: hidden would make these elements scroll containers
   and break the sticky insights toolbar. clip only clips. The hidden line
   before it is the fallback for browsers without clip. */
html {
    overflow-x: hidden;
    overflow-x: clip;
    /* Android inflates page text when it thinks a page is too wide to read.
       Pinning this keeps every phone on the sizes set below. */
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
}
body { overflow-x: clip; }

/* The hero's decorative circles are positioned past the section edge, which
   only shows when the screen is wider than it is tall. */
.content, .section { overflow-x: clip; }

/* A source group is titled with a sentence ("Broker research, read for context
   only"), not a word. flex: none meant it could not shrink, and one title held
   an Edge Alert report 64 to 174px wider than the screen. */
.fcf-sources .src-head { flex: 0 1 auto; min-width: 0; overflow-wrap: break-word; }
.fcf-sources-group > summary { flex-wrap: wrap; }

/* A bare 1fr track floors at its content's minimum width, and the poured card
   holds a 1200px graphic, so the homepage grid opened to 592px on a phone. */
@media (max-width: 820px) {
    .insights-brew { grid-template-columns: minmax(0, 1fr); }
}

/* The email field has to be allowed to shrink or the subscribe bar is wider
   than a 320px screen. */
.subscribe-bar-form input { min-width: 0; }

/* A long unbroken figure or URL in the copy breaks the line instead of the page. */
.article-content p, .ea-report p, .log-body p, .log-body li { overflow-wrap: break-word; }
.engage--compact .engage-bar { flex-wrap: wrap; }

@media (max-width: 640px), (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {

    /* ----- 2. Graphics run the full width of the screen ------------------
       calc(50% - 50vw) pulls an element out to the screen edge whatever the
       padding above it, so this does not have to be re-derived every time a
       container changes. The insight card gives up its side border and radius
       and becomes a full-width band, so the picture is not a small square
       inside a frame inside a frame. */
    .log-entry {
        width: 100vw;
        margin-inline: calc(50% - 50vw);
        border-left: 0;
        border-right: 0;
        border-radius: 0;
    }
    .log-entry .insight-graphics { margin-inline: -18px; }
    .insight-graphic img { border-radius: 0; }
    /* the insight graphic on the homepage sat 36px in from each edge, inside
       the section and the insight block; it runs to the edge as every other
       page's graphics do, and its buttons keep the page's margin */
    .insights-brew .insight-gfx { width: 100vw; margin-inline: calc(50% - 50vw); }
    .insights-brew .insight-gfx .fcf-chart-bar,
    .insights-brew .insight-gfx .fcf-chart-views,
    .insights-brew .insight-gfx .fcf-chart-numbers { padding-inline: var(--gutter); }
    /* On a phone the homepage shows the insights as a list only: the latest
       insight's card and its graphics filled the first screens. Each list
       item opens the insight's own page (js/insights.js, buildHome). */
    .insights-brew .insight-pour,
    .insights-brew .insight-gfx { display: none; }
    .insights-brew { grid-template-areas: "recent"; }

    /* An Edge Alert report is a plain column, not a card, so only the figure
       moves out. */
    /* Measured on 26 popular newsletters (5 Oct 2026): a graphic on a phone
       is the width of the text, with the same margin, and rounded. Ours ran
       edge to edge. The lightbox still gives the whole screen. */
    .ea-report .ea-figure { width: auto; margin-inline: 0; }
    .ea-report .ea-figure img { border-radius: 10px; }

    /* A Macro Brew article opens the way an Edge Alert report does: on the
       cream page with the pattern showing through, not in a teal band over a
       bordered card. On a 390px screen the band and the card spent the first
       screen on chrome, and put the two newsletters' articles in two different
       designs. The column, the black rule under the header, the type and the
       full-width graphics below all match the report page measure for measure.
       Desktop keeps the band and the card. */
    body.reading .article-hero {
        background: transparent;
        border-bottom: 0;
        margin: 0;
        padding: 12px var(--card-pad) 0;
    }
    body.reading .article-hero-inner {
        padding: 0 0 20px;
        border-bottom: 3px solid #0f0f0f;
        margin-bottom: 32px;
    }
    body.reading .article-hero h1 {
        font-size: clamp(1.45rem, 3.6vw + 0.7rem, 1.7rem);
        font-weight: 700;
        line-height: 1.2;
        letter-spacing: normal;
        margin-bottom: 8px;
    }
    body.reading .article-breadcrumb,
    body.reading .article-content,
    body.reading .article-share {
        padding-left: var(--card-pad);
        padding-right: var(--card-pad);
    }
    body.reading .article-page {
        padding-left: var(--gutter);
        padding-right: var(--gutter);
    }
    /* a report opens 24px lower, from its own top padding */
    body.reading .article-page > .article-breadcrumb { padding-top: 24px; }
    body.reading .article-content {
        background: transparent;
        border: 0;
        border-radius: 0;
        box-shadow: none;
        padding-top: 0;
        padding-bottom: 0;
    }
    body.reading .article-content p,
    body.reading .article-content li { font-size: 1rem; line-height: 1.65; }
    /* with no card to stop at, a graphic runs to the screen edge as it does
       in a report */
    .article-content .fcf-graphic { width: auto; margin-inline: 0; }
    .article-content .fcf-graphic img { border-radius: 10px; }

    /* Opened full size, the graphic gets the whole screen. The 16px the
       overlay held back on each side made the picture smaller than the same
       graphic sitting in the page. The close and turn buttons float over it. */
    .fcf-lightbox { padding: 56px 0 0; }
    .fcf-lightbox-figure img { border-radius: 0; }

    /* ----- 3. Type sized for a 310px column ------------------------------
       clamp() so that 320 and 430 are the same design at two sizes rather
       than two designs with a jump between them. */
    .article-content { font-size: 1rem; line-height: 1.65; }
    .article-content p { line-height: 1.65; }
    .article-content h2 { font-size: clamp(1.2rem, 2.6vw + 0.7rem, 1.4rem); line-height: 1.25; }
    .article-content h3 { font-size: clamp(1.05rem, 1.8vw + 0.7rem, 1.2rem); line-height: 1.3; }

    /* The privacy and terms pages kept a 32px headline on no set leading and
       14.4px text, the only reading pages still on desktop sizes. They take
       the article's scale. */
    .legal-content h1,
    .about-rail h1, .about-rail h2.hero-h1,
    .nf-title { font-size: clamp(1.45rem, 3.6vw + 0.7rem, 1.7rem); line-height: 1.2; }
    .legal-content h2 { font-size: clamp(1.05rem, 1.8vw + 0.7rem, 1.2rem); line-height: 1.3; }
    .legal-content p,
    .legal-content li { font-size: 1rem; line-height: 1.65; }
    /* the insight on the homepage is read in full there, so it reads at the
       size its own page uses */
    .insight-pour .insight-text p { font-size: 1rem; line-height: 1.65; }

}

/* ----- 4. Nothing below 40px to tap, nothing below 12px to read -----------
   Width alone does not say "phone": turned sideways the same handset reports
   844px wide and would fall out of every rule above. The short viewport is
   what gives it away, so these two floors are keyed on either. */
@media (max-width: 640px), (max-height: 500px) {
    .engage--compact .share-btn { width: 40px; height: 40px; }
    .engage--compact .engage-like { min-height: 40px; }
    .fcf-chart-btn { min-height: 40px; }
    /* min-height as well, for a source short enough to fit on one line */
    .insight-sources .src-list a,
    .fcf-sources-group li a { display: inline-block; padding: 9px 0; min-height: 40px; min-width: 40px; }
    /* a figure in a report table that links to its filing, "FY26" alone, and a
       source that fills a cell (the Sacheerome Promises table): 40px both ways */
    .ea-report td a { display: inline-block; min-width: 40px; min-height: 40px; }
    .share-buttons a, .footer-links a { min-height: 40px; }
    .fcf-sources > summary { min-height: 40px; align-items: center; }
    .log-meta .log-no { padding: 12px 4px; margin: -12px 0; }
    .subscribe-bar-form input,
    .subscribe-bar-form button { min-height: 40px; }
    /* sideways, a phone gets the desktop navbar, whose links were 31px */
    .navbar .nav-link { min-height: 40px; display: inline-flex; align-items: center; }
    .tb-chip,
    .engage-like,
    .engage-comments-toggle,
    .insight-btn,
    .insight-link { min-height: 40px; }
    .engage-like { min-width: 40px; }
}

/* The 12px floor for small print holds up to the 820px tablet line as well:
   an iPad kept the desktop's 10.6px card tags and 11.5px dates. */
@media (max-width: 820px), (max-height: 500px) {
    /* Each selector repeats the one that set the small size in the first
       place, because a shorter one loses to it however late it is read. */
    .insights-menu .im-label,
    .insights-menu .im-date,
    .insight-toolbar .tb-label,
    .insight-toolbar .filter-count,
    .signin-label,
    .footer-copyright { font-size: 0.78rem; }
    .article-card .article-date,
    .article-hero .article-kicker,
    .article-hero .article-meta,
    .insight-tag,
    .log-day .w,
    .log-meta .log-no,
    .insight-count,
    .insight-recent .r-date,
    .insight-pour .insight-kicker,
    .fcf-chart-btn,
    .fcf-chart-step { font-size: 0.78rem; }
    .engage-form label > span { font-size: 0.78rem; }
    .engage-form label > span small { font-size: 1em; }
    /* the newsletter tag on every listing card, drawn by ::after, so the
       text check never saw it at 10.6px */
    .article-card::after { font-size: 0.78rem; }
    .insight-card-no { font-size: 0.78rem; }
}

/* ----- 5. A phone turned on its side --------------------------------------
   Sideways, a phone reports 844px wide and 390 tall, so every rule above
   written against width alone let it fall back to the desktop pages: the
   Macro Brew article returned to its teal band, the title sat three quarters
   of the way down the first screen with no text under it, lines ran to 90
   characters, and every graphic was taller than the screen. It is still a
   phone, so it gets the phone pages, fitted to a short, wide screen. */
@media (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    /* the listings' 5rem above the title is set in the page, hence !important */
    /* the page starts just under the subscribe bar rather than 50px below it */
    body.reading main.section { padding-top: 72px; }
    .section > .hero-statement { padding-top: 0.75rem !important; }
    /* the listing heads keep their room under the subscribe bar (16 Oct 2026) */
    .section > .hero-statement.page-head { padding-top: 2.75rem !important; }
    body.reading .article-page > .article-breadcrumb { padding-top: 8px; }
    /* and the page starts nearer the bar: 130px of cream sat above the back link */
    body.reading .article-page,
    :where(.ea-page) main.section,
    :where(.insight-page) main.section { padding-top: 78px; }
    .article-breadcrumb { margin-bottom: 12px; }
    body.reading .article-hero { padding-top: 4px; }
    body.reading .article-hero .article-kicker { margin-bottom: 10px; }
    /* the homepage line takes the phone size, not the desktop 32px */
    .tagline { font-size: 1.5rem; }
    .nf-title { font-size: clamp(1.45rem, 3.6vw + 0.7rem, 1.7rem); }

    /* a reading line of about 70 characters */
    body.reading .article-breadcrumb,
    body.reading .article-content,
    body.reading .article-share,
    .article-cards { max-width: 640px; }
    body.reading .article-hero-inner { max-width: calc(640px - 2 * var(--card-pad)); margin-inline: auto; }

    /* a whole graphic in view at once: as tall as the screen allows, and
       centred, rather than as wide as the screen and cut off at the bottom */
    .fcf-chart-stage,
    .fcf-graphic-open { width: fit-content; max-width: 100%; margin-inline: auto; }
    .article-content .fcf-graphic img,
    .ea-report .ea-figure img,
    .insight-graphic img {
        width: auto;
        max-width: 100%;
        max-height: calc(100vh - 84px);
        max-height: calc(100dvh - 84px);
        margin-inline: auto;
    }
}

/* A graphic that runs to the screen edge takes its buttons, its number table
   and its view switch with it; they keep the text column's margin rather than
   touching the edge of the phone. Sideways, they sit under the graphic, which
   is centred there. */
@media (max-width: 640px), (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    .article-content .fcf-graphic .fcf-chart-bar,
    .article-content .fcf-graphic .fcf-chart-views,
    .article-content .fcf-graphic .fcf-chart-numbers,
    .ea-report .ea-figure .fcf-chart-bar,
    .ea-report .ea-figure .fcf-chart-views,
    .ea-report .ea-figure .fcf-chart-numbers { padding-inline: var(--card-pad); }
}
@media (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    .fcf-chart-bar, .fcf-chart-views { justify-content: center; }
}

/* =====================================================================
   EDGE ALERT REPORTS
   Moved here from the <style> block every report used to carry, so a
   change is made once. Each selector is scoped with :where(.ea-page),
   the class on a report's <body>, which adds no specificity: the rules
   weigh exactly what they did inline. They sit at the end of the sheet
   because the inline block was read after it.
   ===================================================================== */
:where(.ea-page) .ea-report { max-width: 860px; margin: 0 auto; padding: 2rem 1.25rem; }
/* Reading mode, which gives the report the same cream ground as The Macro
   Brew and Insights, also puts the site breadcrumb in its own 860px column
   with side padding. The report is already that column, so the back link
   keeps the text edge rather than indenting from it. */
body.reading:where(.ea-page) .ea-report .article-breadcrumb { max-width: none; padding-left: 0; padding-right: 0; }
:where(.ea-page) .ea-report .ea-header {
    border-bottom: 3px solid #0f0f0f;
    padding-bottom: 1.25rem;
    margin-bottom: 2rem;
}
:where(.ea-page) .ea-report h1 { font-size: 2.2rem; margin: 0 0 0.5rem; }
:where(.ea-page) .ea-report .ea-meta-row {
    display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center;
    font-size: 0.85rem; margin-top: 0.75rem;
}
:where(.ea-page) .ea-report .ea-tier {
    background: #fff3c4; padding: 3px 10px; border-radius: 4px; font-weight: 600;
}
:where(.ea-page) .ea-report .ea-sector { color: #555; }
:where(.ea-page) .ea-report .ea-date { color: #666; }

:where(.ea-page) .ea-tldr {
    background: #fff8dc;
    border-left: 5px solid #FFD700;
    padding: 1.25rem 1.5rem;
    margin: 1.5rem 0 2.5rem;
    border-radius: 4px;
}
:where(.ea-page) .ea-tldr strong { display: block; margin-bottom: 0.5rem; font-size: 1rem; letter-spacing: 0.05em; }

/* styles.css opens with a global `* { margin: 0 }` reset, so every
   block inside the report starts with no vertical rhythm at all. Set
   it here explicitly: headings need air under them as well as over
   them, and paragraphs need separating from each other. */
:where(.ea-page) .ea-report p { margin: 0 0 1.15rem; line-height: 1.75; }
:where(.ea-page) .ea-report p:last-child { margin-bottom: 0; }

:where(.ea-page) .ea-report h2 {
    margin: 3rem 0 1.1rem;
    padding-bottom: 0.4rem;
    border-bottom: 2px solid #f0d050;
}
:where(.ea-page) .ea-report h3 { margin: 2.25rem 0 0.8rem; }
:where(.ea-page) .ea-report h4 { margin: 1.75rem 0 0.6rem; }
:where(.ea-page) .ea-report h2:first-child, :where(.ea-page) .ea-report h3:first-child { margin-top: 0; }

:where(.ea-page) .ea-report ul, :where(.ea-page) .ea-report ol { margin: 0 0 1.25rem; padding-left: 1.4rem; }
:where(.ea-page) .ea-report li { margin-bottom: 0.6rem; line-height: 1.75; }
:where(.ea-page) .ea-report li:last-child { margin-bottom: 0; }

:where(.ea-page) .ea-report blockquote {
    border-left: 4px solid #FFD700;
    margin: 1.75rem 0;
    padding: 0.25rem 0 0.25rem 1.25rem;
    color: #444; font-style: italic;
}
:where(.ea-page) .ea-report hr { border: none; border-top: 2px solid #e8e2d6; margin: 2.5rem 0; }

:where(.ea-page) .ea-report .ea-standfirst { font-size: 1.1rem; color: #444; font-style: italic; }

:where(.ea-page) .ea-figure { margin: 2.25rem 0; }
:where(.ea-page) .ea-figure img { width: 100%; height: auto; display: block; border-radius: 8px; }
:where(.ea-page) .ea-figure figcaption {
    font-size: 0.82rem; color: #6b6b6b; margin-top: 0.6rem;
    font-weight: 600; text-align: left;
}

/* Tables sit in the same frame as the graphics: cream ground, ink
   keyline, hard offset shadow, Montserrat, ink header with gold type,
   numbers right-aligned and tabular so columns of figures line up. */
:where(.ea-page) .ea-table-wrap {
    overflow-x: auto; margin: 1.5rem 0 2rem;
    background: #FCF7E8;
    border: 3px solid #0f0f0f; border-radius: 12px;
    box-shadow: 6px 6px 0 #0f0f0f;
}
:where(.ea-page) .ea-report table {
    width: 100%; border-collapse: collapse; margin: 0;
    font-size: 0.92rem; min-width: 480px;
    font-variant-numeric: tabular-nums;
}
:where(.ea-page) .ea-report th, :where(.ea-page) .ea-report td {
    padding: 0.7rem 1rem; text-align: left; vertical-align: top;
    border: none; border-bottom: 2px solid #E8E2D6;
}
:where(.ea-page) .ea-report th {
    background: #0f0f0f; color: #FFD700;
    font-weight: 800; font-size: 0.78rem;
    letter-spacing: 0.08em; text-transform: uppercase;
    border-bottom: 3px solid #0f0f0f;
}
:where(.ea-page) .ea-report th:first-child { border-top-left-radius: 9px; }
:where(.ea-page) .ea-report th:last-child { border-top-right-radius: 9px; }
:where(.ea-page) .ea-report tbody tr:last-child td { border-bottom: none; }
:where(.ea-page) .ea-report td { font-weight: 600; color: #0f0f0f; }
:where(.ea-page) .ea-report td:first-child { font-weight: 700; }
:where(.ea-page) .ea-report th:not(:first-child), :where(.ea-page) .ea-report td:not(:first-child) { text-align: right; }
:where(.ea-page) .ea-report td em { color: #6b6b6b; font-style: normal; font-weight: 600; }

/* The company mark in the meta row, linking out to its own site. */
:where(.ea-page) .ea-logo { display: inline-flex; align-items: center; height: 30px; }
:where(.ea-page) .ea-logo img { height: 100%; width: auto; display: block; }

/* Highlights: a gold wash behind the number or fact the eye should
   catch on a skim, no border, same ink as the text around it. */
:where(.ea-page) .ea-report mark,
.article-content mark,
.insight-pour .insight-text mark {
    background: rgba(255, 215, 0, 0.42);
    color: inherit; padding: 0.05em 0.25em; border-radius: 3px;
    box-decoration-break: clone; -webkit-box-decoration-break: clone;
}

/* HIGHLIGHTS, green and red. House rule for The Macro Brew, The Edge Alert
   and Brewed Up Insights: a rise or a good sign, however small, is green
   (++text++ in a draft); a fall or a bad sign is red (--text--). No gold:
   the ==text== wash above is only for drafts written before this rule. The markdown is
   read by scripts/draft-markdown.mjs, lib/insight-page.js and js/insights.js.
   Both inks pass AA on their wash, over white and over cream. */
.ea-report mark.up, .article-content mark.up, .insight-text mark.up {
    background: rgba(46, 160, 67, 0.18); color: #1B6E34; font-weight: 600;
}
.ea-report mark.down, .article-content mark.down, .insight-text mark.down {
    background: rgba(214, 69, 51, 0.14); color: #A33224; font-weight: 600;
}

/* CITATIONS (js/cite.js). House rule for all 3 products: every figure a
   reader sees is a link to the page of the document it came from, written
   [₹5.22 crore]{AR25 p79} in a draft or an insight. The link keeps the
   colour of the text it sits in (so a figure inside a green or red highlight
   stays green or red) and shows only a thin dotted rule, because a report
   carries hundreds of them and blue underlines would drown the prose. Hover
   or focus names the document and page in the same card the glossary uses;
   the click opens it in a new tab. */
.ea-report a.cite, .article-content a.cite, .insight-text a.cite, .ea-glance a.cite {
    position: relative;
    color: inherit;
    text-decoration: none;
    border-bottom: 1px dotted rgba(15, 15, 15, 0.5);
    padding-bottom: 1px;
    cursor: pointer;
    outline: none;
}
.ea-report mark a.cite, .article-content mark a.cite, .insight-text mark a.cite {
    border-bottom-color: currentColor;
}
.ea-report a.cite:hover, .article-content a.cite:hover, .insight-text a.cite:hover, .ea-glance a.cite:hover,
.ea-report a.cite:focus, .article-content a.cite:focus, .insight-text a.cite:focus, .ea-glance a.cite:focus {
    border-bottom: 1px solid #0f0f0f;
    background: rgba(255, 215, 0, 0.22);
}
.ea-report a.cite::after, .article-content a.cite::after, .insight-text a.cite::after, .ea-glance a.cite::after {
    content: attr(data-tip);
    position: absolute;
    left: 50%;
    bottom: calc(100% + 12px);
    transform: translateX(-50%) translateY(4px);
    width: max-content;
    max-width: 300px;
    background: #0f0f0f;
    color: #fff;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-style: normal;
    font-weight: 500;
    font-size: 0.78rem;
    line-height: 1.5;
    text-align: left;
    padding: 9px 13px;
    border-radius: 8px;
    border: 2px solid #FFD700;
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.28);
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.18s ease, transform 0.18s ease;
    z-index: 60;
    pointer-events: none;
    white-space: normal;
}
.ea-report a.cite::before, .article-content a.cite::before, .insight-text a.cite::before, .ea-glance a.cite::before {
    content: "";
    position: absolute;
    left: 50%;
    bottom: calc(100% + 6px);
    transform: translateX(-50%);
    border: 6px solid transparent;
    border-top-color: #FFD700;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.18s ease;
    z-index: 61;
    pointer-events: none;
}
.ea-report a.cite:hover::after, .article-content a.cite:hover::after, .insight-text a.cite:hover::after, .ea-glance a.cite:hover::after,
.ea-report a.cite:focus::after, .article-content a.cite:focus::after, .insight-text a.cite:focus::after, .ea-glance a.cite:focus::after {
    opacity: 1;
    visibility: visible;
    transform: translateX(-50%) translateY(0);
}
.ea-report a.cite:hover::before, .article-content a.cite:hover::before, .insight-text a.cite:hover::before, .ea-glance a.cite:hover::before,
.ea-report a.cite:focus::before, .article-content a.cite:focus::before, .insight-text a.cite:focus::before, .ea-glance a.cite:focus::before {
    opacity: 1;
    visibility: visible;
}
/* [₹280]{illustration}: a made-up number in an example. Not a link, so no
   pointer and a paler rule; the tip says what it is. */
.ea-report span.cite-eg, .article-content span.cite-eg, .insight-text span.cite-eg {
    position: relative;
    border-bottom: 1px dashed rgba(15, 15, 15, 0.3);
    cursor: help;
    outline: none;
}
.ea-report span.cite-eg::after, .article-content span.cite-eg::after, .insight-text span.cite-eg::after {
    content: attr(data-tip);
    position: absolute; left: 50%; bottom: calc(100% + 12px);
    transform: translateX(-50%);
    width: max-content; max-width: 260px;
    background: #0f0f0f; color: #fff;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif; font-style: normal; font-weight: 500;
    font-size: 0.78rem; line-height: 1.5; text-align: left;
    padding: 9px 13px; border-radius: 8px; border: 2px solid #FFD700;
    opacity: 0; visibility: hidden; transition: opacity 0.18s ease;
    z-index: 60; pointer-events: none; white-space: normal;
}
.ea-report span.cite-eg:hover::after, .article-content span.cite-eg:hover::after, .insight-text span.cite-eg:hover::after,
.ea-report span.cite-eg:focus::after, .article-content span.cite-eg:focus::after, .insight-text span.cite-eg:focus::after {
    opacity: 1; visibility: visible;
}
/* In the At a glance card the figures are small and the card sits at the
   page's right edge, so a tip floating above a figure ran off the card and
   over the headline. There the tip opens as a panel under the row it
   explains, the width of that row, inside the card and on top of the rows
   below it. The row is what it is positioned against, not the figure. */
.ea-glance a.cite { position: static; }
.ea-glance .ea-glance-price, .ea-glance .ea-glance-range-row,
.ea-glance .ea-range-ends, .ea-glance dl > div { position: relative; }
.ea-glance a.cite::after {
    left: 0; right: 0; top: calc(100% + 4px); bottom: auto;
    width: auto; max-width: none;
    transform: translateY(-4px);
    font-size: 0.75rem; font-weight: 500; letter-spacing: 0; text-transform: none;
    padding: 8px 10px; border-radius: 6px;
    z-index: 70;
}
.ea-glance a.cite:hover::after, .ea-glance a.cite:focus::after { transform: translateY(0); }
.ea-glance a.cite::before { display: none; }
/* The card's figures stand alone, not in a sentence, so each is a tap target
   in its own right and needs the 40px floor (scripts/check-mobile.mjs). The
   box grows by 13px above and below and at least to 40px wide, and the
   negative margin takes the growth back out of the layout, so the rows do
   not move. The dotted rule moves to the text, where the padding cannot push
   it away from the number. */
.ea-glance a.cite {
    display: inline-block;
    min-width: 40px;
    padding: 13px 0;
    margin: -13px 0;
    border-bottom: none;
    text-decoration: underline dotted rgba(15, 15, 15, 0.5);
    text-underline-offset: 3px;
}
.ea-glance a.cite:hover, .ea-glance a.cite:focus {
    border-bottom: none;
    background: none;
    text-decoration: underline solid #0f0f0f;
}
/* On a phone a figure is plain text: no card, no rule under it and no tap
   (user, 17 October 2026; before that a tap opened a bar along the foot of
   the screen). The links stay in the HTML for search engines, screen readers
   and wider screens; the Sources section at the end is the phone reader's
   record. The At a glance card keeps its own panel. */
@media (max-width: 640px) {
    .ea-report a.cite::after, .article-content a.cite::after, .insight-text a.cite::after, .ea-glance a.cite::after,
    .ea-report a.cite::before, .article-content a.cite::before, .insight-text a.cite::before, .ea-glance a.cite::before { display: none; }
    :where(.ea-report, .article-content, .insight-text) a.cite:not(:where(.ea-glance *)) {
        pointer-events: none;
        border-bottom: none;
    }
    :where(.ea-report, .article-content, .insight-text) a.cite:not(:where(.ea-glance *)):hover,
    :where(.ea-report, .article-content, .insight-text) a.cite:not(:where(.ea-glance *)):focus { background: none; border-bottom: none; }
}
@media print {
    .ea-report a.cite, .article-content a.cite, .insight-text a.cite, .ea-glance a.cite { border-bottom: none; }
}
/* The same card drawn by js/cite.js once it runs (html.fcf-tips): 1 card on
   <body>, fixed to the window and kept 8px inside it, so neither the edge of
   the screen nor a section's sideways clip can cut it off. The CSS cards
   above stay as the fallback without JavaScript. Phones keep their own
   behaviour, so this is desktop only. */
@media (min-width: 641px) {
    html.fcf-tips :is(.ea-report, .article-content, .insight-text) :is(a.cite, span.cite-eg):not(.ea-glance *)::after,
    html.fcf-tips :is(.ea-report, .article-content, .insight-text) :is(a.cite, span.cite-eg):not(.ea-glance *)::before,
    html.fcf-tips .article-content .term::after,
    html.fcf-tips .article-content .term::before { display: none; }
}
/* Phones: a tapped glossary term is highlighted and its definition opens as
   a note under its paragraph, covering nothing (js/cite.js marks
   html.fcf-term-tips, so the bottom bar is off; an older cached script
   without it keeps the bar). A second tap on the word or a tap on the note
   closes it. */
@media (max-width: 640px) {
    html.fcf-term-tips .article-content .term::after { display: none !important; }
    html .fcf-tip { max-width: calc(100vw - 24px); font-size: 0.88rem; padding: 10px 14px; }
    .article-content .term.on { background: #fff0a8; border-radius: 3px; box-shadow: 0 0 0 2px #fff0a8; }
    .article-content .term-note {
        margin: -0.35em 0 1.4em;
        padding: 10px 14px;
        background: #fff6d1;
        border-left: 4px solid #FFD700;
        border-radius: 6px;
        font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
        font-size: 0.88rem;
        font-weight: 500;
        line-height: 1.5;
        color: #3b352a;
        animation: term-note-in 0.18s ease-out;
    }
    .article-content li > .term-note, .article-content td > .term-note { margin: 8px 0 4px; }
    .article-content .term-note b {
        display: block;
        font-size: 0.8rem;
        font-weight: 700;
        letter-spacing: 0.04em;
        color: #8a6d00;
        margin-bottom: 2px;
    }
}
@keyframes term-note-in { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: none; } }
@media print { .term-note { display: none; } }
.fcf-tip {
    position: fixed;
    left: 0; top: 0;
    width: max-content;
    max-width: min(300px, calc(100vw - 16px));
    background: #0f0f0f;
    color: #fff;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-style: normal;
    font-weight: 500;
    font-size: 0.78rem;
    line-height: 1.5;
    text-align: left;
    padding: 9px 13px;
    border-radius: 8px;
    border: 2px solid #FFD700;
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.28);
    z-index: 200;
    pointer-events: none;
    overflow-wrap: break-word;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.18s ease;
}
.fcf-tip.on { opacity: 1; visibility: visible; }
.fcf-tip i {
    position: absolute;
    top: 100%;
    margin-left: -6px;
    border: 6px solid transparent;
    border-top-color: #FFD700;
    margin-top: 2px;
}
.fcf-tip.below i {
    top: auto; bottom: 100%;
    border-top-color: transparent;
    border-bottom-color: #FFD700;
    margin-top: 0; margin-bottom: 2px;
}
/* A glossary definition (js/cite.js adds .def) is a lighter card: frosted
   cream glass with dark type, so it sits over the article without blacking
   out the lines around the word. Without backdrop-filter it is still a near
   solid cream card. */
.fcf-tip.def {
    background: rgba(255, 251, 240, 0.72);
    -webkit-backdrop-filter: blur(14px) saturate(1.3);
    backdrop-filter: blur(14px) saturate(1.3);
    color: #1c1a16;
    border: 1px solid rgba(190, 150, 0, 0.55);
    box-shadow: 0 10px 30px rgba(60, 45, 0, 0.14), 0 1px 3px rgba(60, 45, 0, 0.08);
    border-radius: 10px;
}
.fcf-tip.def i { border-top-color: rgba(190, 150, 0, 0.55); margin-top: 1px; }
.fcf-tip.def.below i { border-top-color: transparent; border-bottom-color: rgba(190, 150, 0, 0.55); margin-bottom: 1px; }

/* The back link reuses .article-breadcrumb from styles.css, the gold
   pill the Macro Brew already uses, so the two stay in step. Inline
   links match .article-content a: ink text, gold underline, never the
   browser default blue. */
:where(.ea-page) .ea-report a {
    color: #0f0f0f;
    text-decoration: underline;
    text-decoration-color: #FFD700;
    text-underline-offset: 3px;
    text-decoration-thickness: 2px;
    transition: text-decoration-color 0.2s;
}
:where(.ea-page) .ea-report .article-breadcrumb a { text-decoration: none; }
    
/* ---- At a glance card --------------------------------------------
   Drawn by js/edge-alert-glance.js from edge-alert/glance/<slug>.json
   and edge-alert/market/<slug>.json; the moving figures refresh on
   each page load. It sits at the top of the report and never follows
   the reader down the page. */
:where(.ea-page) .ea-glance {
    margin: 1.5rem 0 2rem; background: #FCF7E8;
    border: 3px solid #0f0f0f; border-radius: 12px; box-shadow: 6px 6px 0 #0f0f0f;
    font-family: 'Montserrat', 'Montserrat Fallback', -apple-system, 'Segoe UI', sans-serif;
}
/* The card does not clip: a figure's source tip opens over it (CITATIONS).
   The head rounds its own top corners instead. */
:where(.ea-page) .ea-report .ea-glance .ea-glance-head {
    border-radius: 9px 9px 0 0;
    background: #0f0f0f; color: #FFD700; font-weight: 800; font-size: .7rem;
    letter-spacing: .12em; text-transform: uppercase; padding: .62rem 1rem;
}
:where(.ea-page) .ea-glance-body { padding: .9rem 1rem 1rem; }

/* The Summary box at the top of a report, in the At a glance card's frame:
   cream ground, 3px keyline, hard shadow, black head with gold label. Each
   point is a numbered row, its bold lead on a line of its own. */
:where(.ea-page) .ea-summary {
    margin: 1.5rem 0 2.25rem; background: #FCF7E8;
    border: 3px solid #0f0f0f; border-radius: 12px; box-shadow: 6px 6px 0 #0f0f0f;
}
:where(.ea-page) .ea-report .ea-summary .ea-summary-head {
    border-radius: 9px 9px 0 0;
    background: #0f0f0f; color: #FFD700; font-family: 'Montserrat', 'Montserrat Fallback', -apple-system, 'Segoe UI', sans-serif;
    font-weight: 800; font-size: .75rem; letter-spacing: .12em; text-transform: uppercase; padding: .62rem 1.1rem;
}
:where(.ea-page) .ea-report .ea-summary-list { list-style: none; counter-reset: ea-summary; margin: 0; padding: .3rem 1.1rem .5rem; }
:where(.ea-page) .ea-report .ea-summary-list li {
    counter-increment: ea-summary; position: relative; margin: 0;
    padding: .8rem 0 .8rem 2.4rem; border-top: 1px solid #E8E2D6; line-height: 1.55;
}
:where(.ea-page) .ea-report .ea-summary-list li:first-child { border-top: none; }
:where(.ea-page) .ea-report .ea-summary-list li::before {
    content: counter(ea-summary); position: absolute; left: 0; top: .82rem;
    width: 1.6rem; height: 1.6rem; border-radius: 50%; background: #0f0f0f; color: #FFD700;
    font: 800 .78rem/1.6rem 'Montserrat', -apple-system, 'Segoe UI', sans-serif; text-align: center;
}
:where(.ea-page) .ea-report .ea-summary-list li > strong:first-child {
    display: block; margin-bottom: .15rem; color: #0f0f0f;
    font-family: 'Montserrat', 'Montserrat Fallback', -apple-system, 'Segoe UI', sans-serif; font-weight: 800; font-size: .98rem;
}
:where(.ea-page) .ea-glance-top { display: flex; align-items: center; justify-content: space-between; gap: .75rem; margin-bottom: .6rem; }
:where(.ea-page) .ea-glance-logo { height: 24px; width: auto; max-width: 104px; min-width: 0; flex: 0 1 auto; object-fit: contain; object-position: left center; display: block; }
:where(.ea-page) .ea-glance-logo-link { display: block; flex: 0 1 auto; min-width: 0; }
:where(.ea-page) .ea-glance-price { display: flex; flex-direction: column; gap: .05rem; padding-bottom: .55rem; border-bottom: 2px solid #E8E2D6; }
:where(.ea-page) .ea-glance-price-label { font-size: .7rem; font-weight: 700; color: #6b6b6b; text-transform: uppercase; letter-spacing: .08em; }
:where(.ea-page) .ea-glance-price strong { font-size: 1.45rem; font-weight: 800; color: #0f0f0f; line-height: 1.2; font-variant-numeric: tabular-nums; }
:where(.ea-page) .ea-glance-change { font-size: .78rem; font-weight: 800; font-variant-numeric: tabular-nums; color: #4a4a4a; }
:where(.ea-page) .ea-glance-change[data-dir="up"] { color: #1B6E34; }
:where(.ea-page) .ea-glance-change[data-dir="down"] { color: #A33224; }
:where(.ea-page) .ea-glance-ranges { padding: .55rem 0 .6rem; border-bottom: 2px solid #E8E2D6; }
:where(.ea-page) .ea-glance-range-row { display: flex; flex-wrap: wrap; justify-content: space-between; column-gap: .75rem; font-size: .8rem; padding: .12rem 0; }
:where(.ea-page) .ea-glance-range-row span { color: #4a4a4a; font-weight: 600; }
:where(.ea-page) .ea-glance-range-row b { color: #0f0f0f; font-weight: 800; white-space: nowrap; font-variant-numeric: tabular-nums; }
:where(.ea-page) .ea-range { position: relative; height: 8px; margin: .45rem 0 .3rem; background: #E8E2D6; border: 2px solid #0f0f0f; border-radius: 6px; }
:where(.ea-page) .ea-range i { position: absolute; top: 50%; width: 14px; height: 14px; background: #FFD700; border: 2.5px solid #0f0f0f; border-radius: 50%; transform: translate(-50%, -50%); }
:where(.ea-page) .ea-range-ends { display: flex; justify-content: space-between; font-size: .72rem; }
:where(.ea-page) .ea-range-ends b { font-weight: 800; color: #0f0f0f; font-variant-numeric: tabular-nums; }
:where(.ea-page) .ea-glance dl { margin: 0; }
:where(.ea-page) .ea-glance dl div { display: flex; justify-content: space-between; gap: .75rem; padding: .4rem 0; border-bottom: 2px solid #E8E2D6; font-size: .82rem; }
:where(.ea-page) .ea-glance dl div:last-child { border-bottom: none; }
:where(.ea-page) .ea-glance dt { margin: 0; color: #4a4a4a; font-weight: 600; white-space: nowrap; }
:where(.ea-page) .ea-glance dd { margin: 0; color: #0f0f0f; font-weight: 800; text-align: right; font-variant-numeric: tabular-nums; }
:where(.ea-page) .ea-glance-filings { margin-top: .7rem; background: rgba(255, 215, 0, .42); border-radius: 6px; padding: .5rem .6rem .3rem; }
:where(.ea-page) .ea-glance-filings-label { display: block; font-weight: 800; font-size: .64rem; letter-spacing: .08em; text-transform: uppercase; color: #0f0f0f; }
:where(.ea-page) .ea-report .ea-glance-filings ol { list-style: none; margin: .3rem 0 0; padding: 0; }
:where(.ea-page) .ea-report .ea-glance-filings li { margin: 0; padding: .35rem 0; border-top: 1px solid rgba(15, 15, 15, .15); font-size: .74rem; line-height: 1.4; }
:where(.ea-page) .ea-report .ea-glance-filings li:first-child { border-top: none; }
:where(.ea-page) .ea-glance-filings time { display: block; font-size: .62rem; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; color: #4a4a4a; }
:where(.ea-page) .ea-report .ea-glance-filings a { color: #0f0f0f; text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 2px; }

/* ---- Jump to, the rail: on a wide desktop the card is fixed in the left margin (js/edge-alert-report.js, buildToc) */
:where(.ea-page) .ea-toc { display: none; }
:where(.ea-page) .ea-rail-label { margin: 0 0 .7rem; font: 800 .66rem/1 'Montserrat', sans-serif; letter-spacing: .12em; text-transform: uppercase; color: #6b6b6b; }
/* The lock before a part or a heading behind the reader gate, in the rail,
   the card and the matches a word finds. */
:where(.ea-page) .ea-toc li.is-locked a::before, .ea-jump-secs li.is-locked a::before, .ea-jump-row.is-locked .ea-jump-min::before {
    content: ''; display: inline-block; width: .62em; height: .74em; margin-right: .38em; vertical-align: -.05em;
    background: currentColor;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 12'%3E%3Crect x='1' y='5' width='8' height='6.5' rx='1.2'/%3E%3Cpath d='M3 5.2V3.3a2 2 0 0 1 4 0v1.9' fill='none' stroke='%23000' stroke-width='1.4'/%3E%3C/svg%3E") center / contain no-repeat;
    mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 12'%3E%3Crect x='1' y='5' width='8' height='6.5' rx='1.2'/%3E%3Cpath d='M3 5.2V3.3a2 2 0 0 1 4 0v1.9' fill='none' stroke='%23000' stroke-width='1.4'/%3E%3C/svg%3E") center / contain no-repeat;
}
:where(.ea-page) .ea-report h2 { scroll-margin-top: 140px; }

/* ---- Jump to, on every width (js/edge-alert-report.js, part 3): a glass
   pill at the foot of the screen raises the "Where to?" card in the sign-in
   card's glass (THE READER GATE, below). At rest the card shows the 6 parts
   of the standard format, each with 1 line on what it answers and its
   reading time, never the sections; a word typed in its underline field
   shows only the headings that match. Locked parts and headings sit in the
   sleeve amber with a lock and lead to the sign-up. On a phone the card sits
   near the top, clear of the keyboard; from 700px it is centred. Chosen
   15 Oct 2026 from 2 rounds of renditions. */
:where(.ea-page) .ea-jump {
    position: fixed; left: 50%; bottom: calc(18px + env(safe-area-inset-bottom, 0px)); transform: translateX(-50%); z-index: 150;
    display: inline-flex; align-items: center; gap: 8px; height: 44px; padding: 0 20px 0 16px; box-sizing: border-box;
    font: 600 .86rem/1 'Montserrat', -apple-system, 'Segoe UI', sans-serif; color: #0f0f0f; white-space: nowrap; cursor: pointer;
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3); backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(255, 255, 255, 0.7); border-radius: 999px;
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 18px 40px -18px rgba(15, 15, 15, 0.45);
    transition: background 0.15s, opacity 0.2s, transform 0.2s;
}
/* out of the way until the reader scrolls: it sat on the glance card's rows at the top of the page */
:where(.ea-page) .ea-jump.is-off { opacity: 0; pointer-events: none; transform: translate(-50%, 10px); }
:where(.ea-page) .ea-jump svg { flex: none; }
:where(.ea-page) .ea-jump:hover { background: rgba(255, 253, 247, 0.82); }
:where(.ea-page) .ea-jump:focus-visible { outline: 2px solid #FFD700; outline-offset: 2px; }
:where(.ea-page) .ea-jump[hidden] { display: none; }
/* On a phone the pill sits over the cream page itself, where its cream glass
   was lost against the ground (user, 17 Oct 2026): a slight yellow, the brand
   gold at low strength, with a gold hairline. */
@media (max-width: 699px) {
    :where(.ea-page) .ea-jump { background: rgba(255, 222, 77, 0.5); border-color: rgba(255, 215, 0, 0.8); }
    :where(.ea-page) .ea-jump:hover { background: rgba(255, 222, 77, 0.66); }
}
@media (min-width: 700px) {
    :where(.ea-page) .ea-jump { left: auto; right: 28px; bottom: 28px; transform: none; }
    :where(.ea-page) .ea-jump.is-off { transform: translateY(10px); }
}
html.ea-jump-lock, html.ea-jump-lock body { overflow: hidden; }
/* the page behind the open card, blurred under the gold and teal glow, as behind the sign-in card */
.ea-jump-bd {
    position: fixed; inset: 0; z-index: 900;
    background:
        radial-gradient(closest-side, rgba(255, 215, 0, 0.55), rgba(255, 215, 0, 0)),
        radial-gradient(closest-side, rgba(0, 140, 132, 0.45), rgba(0, 140, 132, 0)),
        rgba(252, 247, 232, 0.28);
    background-size: 340px 340px, 400px 400px;
    background-position: calc(50% - 250px) 32%, calc(50% + 260px) 72%;
    background-repeat: no-repeat;
    -webkit-backdrop-filter: blur(9px) saturate(1.05); backdrop-filter: blur(9px) saturate(1.05);
    opacity: 0; transition: opacity 0.28s ease-out;
}
.ea-jump-bd.is-open { opacity: 1; }
.ea-jump-bd[hidden] { display: none; }
@media (max-width: 699px) { .ea-jump-bd { background-position: calc(50% - 150px) 28%, calc(50% + 150px) 72%; } }
.ea-jump-sheet {
    position: fixed; left: 16px; right: 16px; top: calc(14px + env(safe-area-inset-top, 0px)); z-index: 901;
    display: flex; flex-direction: column; box-sizing: border-box;
    max-height: calc(100vh - 28px - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px));
    max-height: calc(100dvh - 28px - env(safe-area-inset-top, 0px) - env(safe-area-inset-bottom, 0px));
    padding: 24px 20px 16px;
    font-family: 'Montserrat', 'Montserrat Fallback', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; color: #0f0f0f;
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3); backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(255, 255, 255, 0.7); border-radius: 22px;
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 40px 80px -30px rgba(15, 15, 15, 0.35);
    opacity: 0; transform: translateY(8px) scale(0.98);
    transition: transform 0.32s cubic-bezier(0.2, 0.8, 0.2, 1), opacity 0.28s;
    outline: none;
}
.ea-jump-sheet.is-open { opacity: 1; transform: none; }
.ea-jump-sheet[hidden] { display: none; }
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    :where(.ea-page) .ea-jump, .ea-jump-sheet { background: #fffdf7; }
    .ea-jump-bd { background-color: rgba(211, 236, 235, 0.86); }
}
@media (min-width: 700px) {
    .ea-jump-sheet {
        left: 50%; right: auto; top: 50%;
        width: min(480px, calc(100% - 32px)); max-height: calc(100vh - 48px); max-height: calc(100dvh - 48px);
        padding: 30px 32px;
        transform: translate(-50%, -50%) scale(0.97);
    }
    .ea-jump-sheet.is-open { transform: translate(-50%, -50%); }
}
.ea-jump-x { position: absolute; top: 10px; right: 10px; width: 40px; height: 40px; border-radius: 50%; border: 1px solid rgba(15, 15, 15, 0.24); background: transparent; color: #0f0f0f; font: 400 1.1rem/1 'Montserrat', sans-serif; cursor: pointer; display: grid; place-items: center; padding: 0; }
.ea-jump-x:hover { background: rgba(15, 15, 15, 0.05); }
.ea-jump-x:focus-visible, .ea-jump-row:focus-visible, .ea-jump-secs a:focus-visible { outline: 2px solid #FFD700; outline-offset: 2px; }
.ea-jump-head { display: grid; gap: 8px; padding-right: 44px; }
.ea-jump-eyebrow { margin: 0; font-size: 0.75rem; font-weight: 700; letter-spacing: 0.14em; text-transform: uppercase; color: #6d685f; }
.ea-jump-title { margin: 0; font-size: 1.4rem; line-height: 1.2; font-weight: 800; letter-spacing: -0.02em; color: #0f0f0f; text-wrap: balance; }
/* the search box: a rounded field with the magnifier inside, a soft gold ring
   on focus (never the browser's rectangle), a clear button once a word is typed */
.ea-jump-find { position: relative; margin-top: 12px; }
.ea-jump-find svg { position: absolute; left: 14px; top: 50%; width: 16px; height: 16px; transform: translateY(-50%); color: #6d685f; pointer-events: none; }
.ea-jump-input {
    width: 100%; box-sizing: border-box; height: 44px; padding: 0 44px 0 40px;
    font: 500 0.92rem/1.2 'Montserrat', -apple-system, 'Segoe UI', sans-serif; color: #0f0f0f;
    background: rgba(255, 255, 255, 0.55); border: 1px solid rgba(15, 15, 15, 0.18); border-radius: 999px;
    outline: none; -webkit-appearance: none; appearance: none;
    transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
}
.ea-jump-input::placeholder { color: #8a857b; opacity: 1; }
.ea-jump-input:hover { border-color: rgba(15, 15, 15, 0.32); }
.ea-jump-input:focus, .ea-jump-input:focus-visible, :where(.ea-page) .ea-jump-input:focus, :where(.ea-page) .ea-jump-input:focus-visible {
    outline: none; border-color: #0f0f0f; background: #fff; box-shadow: 0 0 0 3px rgba(255, 215, 0, 0.45);
}
.ea-jump-clear { position: absolute; right: 6px; top: 50%; width: 32px; height: 32px; transform: translateY(-50%); border: 0; border-radius: 50%; background: transparent; color: #6d685f; font: 400 1.15rem/1 'Montserrat', sans-serif; cursor: pointer; display: grid; place-items: center; padding: 0; }
.ea-jump-clear:hover { background: rgba(15, 15, 15, 0.06); color: #0f0f0f; }
.ea-jump-clear:focus-visible { outline: 2px solid #FFD700; outline-offset: 1px; }
.ea-jump-clear[hidden] { display: none; }
/* 16px on a phone, or iOS zooms the page when the field is focused */
@media (max-width: 520px) { .ea-jump-input { font-size: 16px; } }
/* the rows scroll on their own when they are taller than the card */
.ea-jump-res { overflow-y: auto; min-height: 0; margin-top: 14px; display: grid; gap: 8px; align-content: start; overscroll-behavior: contain; scrollbar-width: thin; }
.ea-jump-res .ea-jump-eyebrow { font-size: 0.66rem; }
/* a part is a row: its number, name, 1 line on what it answers, its minutes */
.ea-jump-rows { display: grid; border-top: 1px solid rgba(15, 15, 15, 0.1); }
.ea-jump-row { display: flex; align-items: flex-start; gap: 12px; min-height: 56px; padding: 12px 0; box-sizing: border-box; border-bottom: 1px solid rgba(15, 15, 15, 0.1); color: #0f0f0f; text-decoration: none; }
.ea-jump-row:last-child { border-bottom: 0; }
.ea-jump-no { flex: none; width: 26px; height: 26px; margin-top: 1px; border-radius: 50%; border: 1px solid rgba(15, 15, 15, 0.3); display: grid; place-items: center; font-size: 0.74rem; font-weight: 700; font-variant-numeric: tabular-nums; box-sizing: border-box; }
.ea-jump-row.is-current .ea-jump-no { background: #0f0f0f; color: #fffdf7; border-color: #0f0f0f; }
.ea-jump-txt { flex: 1; min-width: 0; display: grid; gap: 3px; justify-items: start; }
.ea-jump-txt b { font-size: 0.92rem; font-weight: 700; line-height: 1.3; }
.ea-jump-row.is-current .ea-jump-txt b { background: linear-gradient(transparent 56%, rgba(255, 215, 0, 0.6) 56%); padding: 0 2px; }
.ea-jump-gloss { font-size: 0.78rem; line-height: 1.4; font-weight: 500; color: #6d685f; }
.ea-jump-row:hover .ea-jump-gloss { color: #3b3833; }
.ea-jump-min { flex: none; margin-top: 4px; font-size: 0.72rem; font-weight: 600; color: #6d685f; white-space: nowrap; }
.ea-jump-row.is-locked .ea-jump-txt b, .ea-jump-row.is-locked .ea-jump-min { color: #C9922F; }
/* the headings a word finds, and the plain list of a report outside the standard format */
.ea-jump-secs { list-style: none; margin: 0; padding: 0; border-top: 1px solid rgba(15, 15, 15, 0.1); }
.ea-jump-secs li { margin: 0; }
.ea-jump-secs a { display: flex; align-items: center; gap: 8px; min-height: 44px; padding: 3px 0; font-size: 0.88rem; font-weight: 500; line-height: 1.3; color: #3b3833; text-decoration: none; border-bottom: 1px solid rgba(15, 15, 15, 0.06); }
.ea-jump-secs a:hover { color: #0f0f0f; }
.ea-jump-secs a.is-active { color: #0f0f0f; font-weight: 700; }
.ea-jump-secs li.is-locked a { color: #C9922F; }
.ea-jump-secs li.is-locked a:hover { color: #9a6d1c; }
.ea-jump-where { margin-left: auto; font-size: 0.64rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: #6d685f; white-space: nowrap; }
.ea-jump-none { margin: 6px 0; font-size: 0.86rem; line-height: 1.5; color: #6d685f; }
/* The rail's sizes: the same card, a size down, 260px wide */
:where(.ea-page) .ea-toc .ea-rail-label { margin: 0; }
:where(.ea-page) .ea-toc .ea-jump-find { margin-top: 10px; }
:where(.ea-page) .ea-toc .ea-jump-find svg { left: 12px; width: 14px; height: 14px; }
:where(.ea-page) .ea-toc .ea-jump-input { height: 40px; padding: 0 38px 0 34px; font-size: 0.84rem; }
:where(.ea-page) .ea-toc .ea-jump-clear { width: 30px; height: 30px; right: 5px; }
:where(.ea-page) .ea-toc .ea-jump-res { margin-top: 12px; }
:where(.ea-page) .ea-toc .ea-jump-row { min-height: 50px; padding: 9px 0; gap: 10px; }
:where(.ea-page) .ea-toc .ea-jump-no { width: 22px; height: 22px; font-size: 0.66rem; }
:where(.ea-page) .ea-toc .ea-jump-txt b { font-size: 0.84rem; }
:where(.ea-page) .ea-toc .ea-jump-gloss { font-size: 0.7rem; line-height: 1.35; }
:where(.ea-page) .ea-toc .ea-jump-min { font-size: 0.66rem; margin-top: 3px; }
:where(.ea-page) .ea-toc .ea-jump-secs a { min-height: 38px; font-size: 0.8rem; }
@media (prefers-reduced-motion: reduce) { .ea-jump-bd, .ea-jump-sheet { transition: none; } }
@media print { :where(.ea-page) .ea-jump, .ea-jump-bd, .ea-jump-sheet { display: none; } }
/* Between phone and wide desktop the card sits under the headline, and
   two columns of figures stop it running down the page. */
@media (min-width: 600px) and (max-width: 1399px) {
    :where(.ea-page) .ea-report > .ea-glance dl { display: grid; grid-template-columns: 1fr 1fr; column-gap: 2.25rem; }
    :where(.ea-page) .ea-report > .ea-glance dl div:nth-last-child(2) { border-bottom: none; }
}
/* 1100px and up: text and charts share one 760px column. */
@media (min-width: 1100px) {
    :where(.ea-page) .ea-report { max-width: 1060px; position: relative; }
    :where(.ea-page) .ea-report > :not(figure), :where(.ea-page) .ea-report > figure.ea-figure { max-width: 760px; margin-left: auto; margin-right: auto; }
    :where(.ea-page) .ea-report > .ea-header { max-width: 760px; margin-left: auto; margin-right: auto; }
    body.reading:where(.ea-page) .ea-report > .article-breadcrumb { max-width: 760px; margin-left: auto; margin-right: auto; }
    /* the like/share/comment block under the report keeps the same text column */
    :where(.ea-page) main > .engage--full { max-width: 800px; }
}
/* 1400px and up: the section list follows in the left margin, and the
   card sits at the top of the right margin and scrolls away with the
   page, each figure on its own line in the narrower card. */
@media (min-width: 1400px) {
    :where(.ea-page) .ea-toc { display: block; position: fixed; z-index: 10; top: 150px; width: 260px; left: calc(50% - 380px - 48px - 260px); box-sizing: border-box; max-height: calc(100vh - 150px - 24px); overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; }
    /* the rail is the card here, so the pill at the foot goes */
    :where(.ea-page) .ea-jump { display: none; }
    :where(.ea-page) .ea-report > .ea-glance { position: absolute; top: 2rem; left: calc(50% + 380px + 48px); width: 240px; max-width: none; margin: 0; }
    /* The card sits in the right margin, outside main. The phone rule that
       clips .section sideways (section 1 of the phone layout) would cut it
       off, and at this width nothing else can overflow the screen. */
    :where(.ea-page) main.section { overflow-x: visible; }
    :where(.ea-page) .ea-report > .ea-glance .ea-glance-range-row { display: block; padding: .1rem 0 .2rem; }
    :where(.ea-page) .ea-report > .ea-glance .ea-glance-range-row span { display: block; font-size: .68rem; font-weight: 700; color: #6b6b6b; text-transform: uppercase; letter-spacing: .06em; }
    :where(.ea-page) .ea-report > .ea-glance .ea-glance-range-row b { display: block; }
}
/* Phones and tablets: the card's small print keeps the 12px floor, and its
   links the 40px one. */
@media (max-width: 820px), (max-height: 500px) {
    :where(.ea-page) .ea-glance-head, :where(.ea-page) .ea-report .ea-glance .ea-glance-head { font-size: .78rem; }
    :where(.ea-page) .ea-glance-price-label { font-size: .78rem; }
    :where(.ea-page) .ea-range-ends { font-size: .78rem; }
    :where(.ea-page) .ea-report .ea-glance-filings li { font-size: .82rem; }
    :where(.ea-page) .ea-glance-filings time { font-size: .75rem; }
    :where(.ea-page) .ea-glance-filings-label { font-size: .78rem; }
    :where(.ea-page) .ea-glance-logo-link, :where(.ea-page) .ea-logo { min-height: 40px; display: inline-flex; align-items: center; }
    :where(.ea-page) .ea-glance-filings li a { display: inline-block; padding: 11px 0; }
    /* A figure on a phone is plain text (the CITATIONS rules): no rule under
       it and no tap. The padding that once lifted it to the 40px tap floor
       stays, since an inline box takes it without moving a line, so nothing
       shifts between this and the wider layout. */
    :where(.ea-report, .article-content, .insight-text) a.cite:not(:where(.ea-glance *)) {
        padding-top: 10px !important;
        padding-bottom: 10px !important;
        border-bottom: 0 !important;
        text-decoration: none;
        pointer-events: none;
    }
}
@media (max-width: 640px), (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    :where(.ea-page) .ea-report { padding: 1.5rem var(--card-pad, 1.25rem) 2rem; }
    :where(.ea-page) .ea-report h1 { font-size: clamp(1.45rem, 3.6vw + 0.7rem, 1.7rem); line-height: 1.2; }
    :where(.ea-page) .ea-report h2 { font-size: clamp(1.15rem, 2.4vw + 0.7rem, 1.35rem); line-height: 1.25; }
    :where(.ea-page) .ea-report h3 { font-size: clamp(1.02rem, 1.6vw + 0.7rem, 1.15rem); line-height: 1.3; }
    :where(.ea-page) .ea-report p, :where(.ea-page) .ea-report li { font-size: 1rem; line-height: 1.65; }
    :where(.ea-page) .ea-glance dl div, :where(.ea-page) .ea-glance-range-row { font-size: .85rem; }
}
/* A phone on its side keeps the phone page, in a column of about 70
   characters and with less room spent above the title. */
@media (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    :where(.ea-page) .ea-report { max-width: 640px; padding-top: 0.5rem; }
}

/* =====================================================================
   BREWED UP INSIGHT PAGES
   Moved here from insights/insight-template.html the same way, scoped
   with :where(.insight-page).
   ===================================================================== */
:where(.insight-page) .ea-report { max-width: 860px; margin: 0 auto; padding: 2rem 1.25rem; }
body.reading:where(.insight-page) .ea-report .article-breadcrumb { max-width: none; padding-left: 0; padding-right: 0; }
:where(.insight-page) .ea-report .ea-header {
    border-bottom: 3px solid #0f0f0f;
    padding-bottom: 1.25rem;
    margin-bottom: 2rem;
}
:where(.insight-page) .ea-report h1 { font-size: 2.2rem; margin: 0 0 0.5rem; }
:where(.insight-page) .ea-report .ea-meta-row {
    display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center;
    font-size: 0.85rem; margin-top: 0.75rem;
}
:where(.insight-page) .ea-report .ea-sector { color: #555; font-weight: 600; }
:where(.insight-page) .ea-report .ea-date { color: #666; }

:where(.insight-page) .ea-report p { margin: 0 0 1.15rem; line-height: 1.75; }
:where(.insight-page) .ea-report p:last-child { margin-bottom: 0; }
:where(.insight-page) .ea-report h2 {
    margin: 3rem 0 1.1rem;
    padding-bottom: 0.4rem;
    border-bottom: 2px solid #f0d050;
}
:where(.insight-page) .ea-report ul, :where(.insight-page) .ea-report ol { margin: 0 0 1.25rem; padding-left: 1.4rem; }
:where(.insight-page) .ea-report li { margin-bottom: 0.6rem; line-height: 1.75; }
:where(.insight-page) .ea-report li:last-child { margin-bottom: 0; }

:where(.insight-page) .ea-figure { margin: 2.25rem 0; }
:where(.insight-page) .ea-figure img { width: 100%; height: auto; display: block; border-radius: 8px; }

/* The number the insight is about, the same gold highlight it carries
   on the archive card and the homepage. */
:where(.insight-page) .ea-report .insight-page-figure { font-size: 2.6rem; margin: 0 0 0.9rem; }
:where(.insight-page) .ea-report .insight-figure-note { font-size: 0.95rem; line-height: 1.45; margin: -0.35rem 0 1.1rem; }

@media (min-width: 1100px) {
    :where(.insight-page) .ea-report { max-width: 1060px; position: relative; }
    :where(.insight-page) .ea-report > :not(figure), :where(.insight-page) .ea-report > figure.ea-figure { max-width: 760px; margin-left: auto; margin-right: auto; }
    :where(.insight-page) .ea-report > .ea-header { max-width: 760px; margin-left: auto; margin-right: auto; }
    body.reading:where(.insight-page) .ea-report > .article-breadcrumb { max-width: 760px; margin-left: auto; margin-right: auto; }
    :where(.insight-page) main > .engage--full { max-width: 800px; }
}
@media (max-width: 640px), (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    :where(.insight-page) .ea-report { padding: 1.5rem var(--card-pad, 1.25rem) 2rem; }
    :where(.insight-page) .ea-report h1 { font-size: clamp(1.45rem, 3.6vw + 0.7rem, 1.7rem); line-height: 1.2; }
    :where(.insight-page) .ea-report h2 { font-size: clamp(1.15rem, 2.4vw + 0.7rem, 1.35rem); line-height: 1.25; }
    :where(.insight-page) .ea-report p, :where(.insight-page) .ea-report li { font-size: 1rem; line-height: 1.65; }
    :where(.insight-page) .ea-report .insight-page-figure { font-size: 2.2rem; }
}
/* A phone on its side keeps the phone page, in a column of about 70
   characters and with less room spent above the title. */
@media (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    :where(.insight-page) .ea-report { max-width: 640px; padding-top: 0.5rem; }
}

/* ==========================================================================
   HOME FIRST SCREEN AND THE END OF A PIECE (5 Oct 2026)
   Measured against 26 popular newsletters on a 390px phone.
   ========================================================================== */

@media (max-width: 640px) {
    /* The hero took the whole first screen for the logo and the tagline, so
       the first story began 2.7 screens down; the leading newsletters have
       one inside the first screen. The hero keeps its logo, smaller, and
       gives up its full height. */
    .content { min-height: 0; padding: 124px var(--gutter) 20px; }
    .content .logo { max-width: 149px; }
    /* the 3-formats line is for the wider screens; on a phone the hero is the logo and the line (user, 16 Oct 2026) */
    .hero-formats { display: none; }
    .tagline { margin-top: 8px; }
    /* the hero sits in an even 40px: the logo's cup is 40px under the
       subscribe bar (the picture has 15px of clear space above it), the
       tagline 40px over the rule, and the first heading 40px under it */
    .content + .section { padding-top: 40px; }
    /* the insights section is hidden until js/insights.js fills it; with the hero
       no longer a full screen, the sections below were in view and jumped down
       when it appeared (a shift of 0.25), so it keeps its room from the start */
    #insights[hidden] { display: block; visibility: hidden; min-height: 40vh; }
}

/* What follows the last paragraph (lib/read-next.js): a sign-up, because the
   bar at the top is 20 screens up by the end of a report, and 2 more pieces
   of the same newsletter as the listing's own cards. */
.end-brew {
    max-width: 860px;
    margin: 44px auto 0;
    padding: 30px 20px 0;
    border-top: 3px solid #0f0f0f;
    display: grid;
    gap: 34px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
}
.end-brew h2 { font-size: 1.2rem; font-weight: 800; line-height: 1.3; margin: 0 0 8px; color: #0f0f0f; }
.end-brew-sub p { font-size: 0.95rem; line-height: 1.6; color: #333; margin: 0 0 14px; }
.end-brew .subscribe-bar-form { justify-content: flex-start; max-width: 520px; }
.end-brew .subscribe-bar-form input { flex: 1 1 auto; width: auto; max-width: none; min-width: 0; }
.end-brew .subscribe-bar-msg { position: static; padding: 10px 0 0; }
.end-brew .article-cards { margin-top: 0; padding: 0; }
.end-brew-next[data-kind="edge"] .article-card::after { content: "The Edge Alert"; }
.end-brew-next[data-kind="insight"] .article-card::after { content: "Brewed Up Insights"; }

/* Read by a screen reader, not seen: a label the layout has no room for. */
.visually-hidden {
    position: absolute !important;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

/* ==========================================================================
   READING ON A PHONE (5 Oct 2026)
   The median of 26 popular newsletters, measured at 390px: body 17px, a 16
   to 18px margin, about 40 characters a line, the headline about 28px. This
   site was 16px on a 33px margin, 35 characters, headline 25px.
   ========================================================================== */

/* The deck under an article's headline, as every leading newsletter sets one. */
.article-standfirst {
    font-size: 1.15rem;
    line-height: 1.55;
    color: #444;
    margin: 0 0 14px;
}

@media (max-width: 640px), (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    /* 17px on an 18px margin: the article page's gutter and the content's
       card padding were adding up to 33px a side */
    body.reading .article-page { padding-left: 0; padding-right: 0; }
    body.reading .article-hero,
    body.reading .article-breadcrumb,
    body.reading .article-content,
    body.reading .article-share { padding-left: 18px; padding-right: 18px; }
    body.reading .article-content p,
    body.reading .article-content li { font-size: 1.0625rem; line-height: 1.6; }
    :where(.ea-page) main.section,
    :where(.insight-page) main.section { padding-left: 0; padding-right: 0; }
    :where(.ea-page) .ea-report,
    :where(.insight-page) .ea-report { padding-left: 18px; padding-right: 18px; }
    :where(.ea-page) .ea-report p, :where(.ea-page) .ea-report li,
    :where(.insight-page) .ea-report p, :where(.insight-page) .ea-report li { font-size: 1.0625rem; line-height: 1.6; }
    .end-brew,
    :where(.ea-page) main > .engage--full,
    :where(.insight-page) main > .engage--full { padding-left: 18px; padding-right: 18px; }

    /* one headline size on every page, article, report, insight, list and home */
    body.reading .article-hero h1,
    :where(.ea-page) .ea-report h1,
    :where(.insight-page) .ea-report h1,
    .hero-statement h1, .hero-statement h2.hero-h1,
    .tagline,
    .legal-content h1,
    .about-rail h1, .about-rail h2.hero-h1,
    .nf-title,
    .signin-card h1,
    .account-card h1,
    .admin-container h1,
    main > h1 { font-size: clamp(1.65rem, 3.2vw + 0.95rem, 1.8rem); line-height: 1.2; }
    .article-standfirst { font-size: 1.05rem; line-height: 1.5; margin-bottom: 10px; }

    /* the back link is a line of text, not a yellow button holding the headline down a screen */
    body.reading .article-breadcrumb a {
        background: transparent;
        border: 0;
        border-radius: 0;
        box-shadow: none;
        padding: 11px 0;
        min-height: 40px;
        display: inline-flex;
        align-items: center;
    }
    body.reading .article-breadcrumb a:hover { transform: none; box-shadow: none; }
    body.reading .article-page > .article-breadcrumb { padding-top: 8px; }

    /* one quiet control under a graphic, not a boxed button 15 times down a page */
    .fcf-chart-more-btn { background: transparent; border-color: transparent; box-shadow: none; padding: 0 6px; font-size: 0.8rem; }
    .fcf-chart-more-btn:hover { background: transparent; }

    /* the list grids keep their room until the cards arrive, so the footer
       does not sit in the first screen and then jump away (a layout shift of
       0.26, past Google's 0.25 "poor" mark) */
    #eaGrid:empty, #insightLog:empty { min-height: 100vh; }
}

/* ----- The menu button is a button (js/nav.js) ------------------------- */
.hamburger { background: none; border: 0; }
html.menu-open { overflow: hidden; }

/* ==========================================================================
   READING ON A PHONE (5 Oct 2026)
   The median of 26 popular newsletters, measured at 390px: body 17px, a 16
   to 18px margin, about 40 characters a line, the headline about 28px. This
   site was 16px on a 33px margin, 35 characters, headline 25px.
   ========================================================================== */

/* The deck under an article's headline, as every leading newsletter sets one. */
.article-standfirst {
    font-size: 1.15rem;
    line-height: 1.55;
    color: #444;
    margin: 0 0 14px;
}

@media (max-width: 640px), (orientation: landscape) and (max-height: 500px) and (max-width: 1000px) {
    /* 17px on an 18px margin: the article page's gutter and the content's
       card padding were adding up to 33px a side */
    body.reading .article-page { padding-left: 0; padding-right: 0; }
    body.reading .article-hero,
    body.reading .article-breadcrumb,
    body.reading .article-content,
    body.reading .article-share { padding-left: 18px; padding-right: 18px; }
    body.reading .article-content p,
    body.reading .article-content li { font-size: 1.0625rem; line-height: 1.6; }
    :where(.ea-page) main.section,
    :where(.insight-page) main.section { padding-left: 0; padding-right: 0; }
    :where(.ea-page) .ea-report,
    :where(.insight-page) .ea-report { padding-left: 18px; padding-right: 18px; }
    :where(.ea-page) .ea-report p, :where(.ea-page) .ea-report li,
    :where(.insight-page) .ea-report p, :where(.insight-page) .ea-report li { font-size: 1.0625rem; line-height: 1.6; }
    .end-brew,
    :where(.ea-page) main > .engage--full,
    :where(.insight-page) main > .engage--full { padding-left: 18px; padding-right: 18px; }

    /* one headline size on every page, article, report, insight, list and home */
    body.reading .article-hero h1,
    :where(.ea-page) .ea-report h1,
    :where(.insight-page) .ea-report h1,
    .hero-statement h1, .hero-statement h2.hero-h1,
    .tagline,
    .legal-content h1,
    .about-rail h1, .about-rail h2.hero-h1,
    .nf-title { font-size: clamp(1.65rem, 3.2vw + 0.95rem, 1.8rem); line-height: 1.2; }
    .article-standfirst { font-size: 1.05rem; line-height: 1.5; margin-bottom: 10px; }

    /* the back link is a line of text, not a yellow button holding the headline down a screen */
    body.reading .article-breadcrumb a {
        background: transparent;
        border: 0;
        border-radius: 0;
        box-shadow: none;
        padding: 10px 0;
    }
    body.reading .article-breadcrumb a:hover { transform: none; box-shadow: none; }
    body.reading .article-page > .article-breadcrumb { padding-top: 8px; }

    /* one quiet control under a graphic, not a boxed button 15 times down a page */
    .fcf-chart-more-btn { background: transparent; border-color: transparent; box-shadow: none; padding: 0 6px; font-size: 0.8rem; }
    .fcf-chart-more-btn:hover { background: transparent; }

    /* the list grids keep their room until the cards arrive, so the footer
       does not sit in the first screen and then jump away (a layout shift of
       0.26, past Google's 0.25 "poor" mark) */
    #eaGrid:empty, #insightLog:empty { min-height: 100vh; }
}

/* ----- The menu button is a button (js/nav.js) ------------------------- */
.hamburger { background: none; border: 0; }
html.menu-open { overflow: hidden; }

/* ==========================================================================
   SKIP LINK, CITATION BAR, REDUCED MOTION (5 Oct 2026)
   ========================================================================== */

/* The first thing the keyboard reaches: past the navbar and the subscribe
   bar to the page. Off screen until it has focus. */
.skip-link {
    position: absolute;
    left: 12px;
    top: -100px;
    z-index: 300;
    padding: 10px 14px;
    background: #FFD700;
    color: #0f0f0f;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-weight: 700;
    text-decoration: none;
    border: 3px solid #0f0f0f;
    border-radius: 8px;
}
.skip-link:focus { top: 12px; }

/* A cited figure reached by the keyboard shows the same ring as every other link. */
.ea-report a.cite:focus-visible, .article-content a.cite:focus-visible, .insight-text a.cite:focus-visible, .ea-glance a.cite:focus-visible {
    outline: 3px solid #0f0f0f;
    outline-offset: 2px;
}

/* The source card (js/cite.js): a click on a figure whose source is a data
   file opens this instead of downloading the file. For a bhavcopy it shows the
   row the figure came from, the cited value marked. Phone and desktop alike. */
.fcf-src {
    position: fixed;
    left: 12px;
    right: 12px;
    bottom: calc(12px + env(safe-area-inset-bottom, 0px));
    z-index: 210;
    display: none;
    max-width: 460px;
    max-height: min(78vh, 640px);
    margin: 0 auto;
    overflow-y: auto;
    padding: 12px 14px 14px;
    background: #0f0f0f;
    color: #fff;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.85rem;
    font-weight: 500;
    line-height: 1.5;
    border: 2px solid #FFD700;
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.32);
    overflow-wrap: break-word;
}
.fcf-src.on { display: block; }
.fcf-src:focus { outline: none; }
.fcf-src-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.fcf-src-kind {
    font-size: 0.68rem;
    font-weight: 800;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: #FFD700;
}
.fcf-src-close {
    width: 40px;
    height: 40px;
    margin: -8px -8px -8px 0;
    border: 0;
    background: none;
    color: #fff;
    font: inherit;
    font-size: 1.4rem;
    cursor: pointer;
}
.fcf-src-close:focus-visible, .fcf-src-dl:focus-visible { outline: 2px solid #FFD700; outline-offset: 2px; }
.fcf-src-title { margin: 2px 0 10px; font-weight: 600; }
.fcf-src-lead { margin: 12px 0 6px; font-size: 0.78rem; color: #cfc8b8; }
.fcf-src table { width: 100%; border-collapse: collapse; font-variant-numeric: tabular-nums; }
.fcf-src th, .fcf-src td { padding: 5px 8px; border-top: 1px solid #2c2a26; text-align: left; vertical-align: baseline; }
.fcf-src th { font-weight: 600; color: #e9e3d6; }
.fcf-src th span { font-family: Consolas, 'Courier New', monospace; font-size: 0.7rem; font-weight: 400; color: #8f887a; }
.fcf-src td { text-align: right; font-weight: 700; white-space: nowrap; }
.fcf-src tr.on th, .fcf-src tr.on td, .fcf-src tr.on th span { background: #FFD700; color: #0f0f0f; }
.fcf-src-dl {
    display: inline-flex;
    align-items: center;
    min-height: 40px;
    padding: 0 12px;
    border: 1.5px solid #FFD700;
    border-radius: 6px;
    color: #FFD700;
    font-weight: 800;
    text-decoration: none;
}
.fcf-src-dl:hover { background: #FFD700; color: #0f0f0f; }

/* A phone set to reduce motion gets none: no smooth scroll, no floating
   circles, no fade on the logo and tagline, no pop on the heart. */
@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
    .decorative-circle,
    .quote-author::before,
    .logo,
    .tagline,
    .hero-cta,
    .engage-like.is-popping .engage-heart { animation: none; }
}

/* ==========================================================================
   GRAPHICS ON A PHONE (5 Oct 2026)
   scripts/phone-figures.mjs gives every graphic one phone format: the chart
   alone (a picture with no box, no ground and no words), or the figure
   written in the page as a table, horizontal bars, a pie with a list, a
   stacked bar with a list. The title and a one-line summary sit above it,
   the unit, key, callouts, footnote and source under it. Wider screens keep
   the full picture and never see any of this.
   ========================================================================== */
.fcf-chrome, .fcf-phone-html, .fcf-phone-table { display: none; }

@media (max-width: 640px) {
    /* ---- the figure: a column, words above and below, buttons last ---- */
    figure[data-phone-kind] { display: flex; flex-direction: column; text-align: left; }
    /* a graphic with no chart-only version is left off a phone (9 Oct 2026) */
    figure[data-phone-kind=none] { display: none; }
    figure[data-phone-kind] .fcf-chrome-foot { order: 10; }
    figure[data-phone-kind] .fcf-chart-bar { order: 20; }
    figure[data-phone-kind] .fcf-chart-views,
    figure[data-phone-kind] .fcf-chart-numbers { order: 30; }

    /* the picture is the chart alone, on the page's own ground */
    .article-content .fcf-graphic img,
    .ea-report .ea-figure img { border-radius: 0; box-shadow: none; background: none; }

    /* where the page writes the figure out, the picture is not shown */
    figure[data-phone-kind=table] > img, figure[data-phone-kind=table] > picture,
    figure[data-phone-kind=bars] > img, figure[data-phone-kind=bars] > picture,
    figure[data-phone-kind=pie] > img, figure[data-phone-kind=pie] > picture,
    figure[data-phone-kind=stack] > img, figure[data-phone-kind=stack] > picture,
    figure[data-phone-kind=bridge] > img, figure[data-phone-kind=bridge] > picture,
    figure[data-phone-kind=rows] > img, figure[data-phone-kind=rows] > picture,
    figure[data-phone-kind]:not([data-phone-kind=chart]):not([data-phone-kind=picture]) > .fcf-graphic-open,
    figure[data-phone-kind]:not([data-phone-kind=chart]):not([data-phone-kind=picture]) > .fcf-chart-stage,
    figure[data-phone-kind]:not([data-phone-kind=chart]):not([data-phone-kind=picture]) > .fcf-chart-live,
    figure[data-phone-kind]:not([data-phone-kind=chart]):not([data-phone-kind=picture]) > .fcf-chart-read { display: none; }
    .fcf-chrome, .fcf-phone-html { display: block; font-family: 'Montserrat', 'Montserrat Fallback', sans-serif; }
    figure[data-phone-kind] .fcf-phone-table { display: block; }

    /* ---- the words. Named with the page's own prefixes, because the
       article and report paragraph rules (17px, centred in a figure) are
       more specific than a lone class. ---- */
    body.reading figure[data-phone-kind] p.fcf-chrome-title {
        font-size: 1.02rem; font-weight: 800; line-height: 1.3; color: #0f0f0f; margin: 0 0 3px; text-align: left;
    }
    /* the summary is one line, whatever its length: its first sentence, cut with an ellipsis if it runs over */
    body.reading figure[data-phone-kind] p.fcf-chrome-deck {
        font-size: 0.86rem; font-weight: 500; line-height: 1.45; color: #555; margin: 0 0 12px; text-align: left;
        white-space: normal; overflow-wrap: break-word;
    }
    body.reading figure[data-phone-kind] p.fcf-chrome-unit {
        font-size: 0.75rem; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; line-height: 1.4;
        color: #666; margin: 10px 0 0; text-align: left;
    }
    body.reading figure[data-phone-kind] p.fcf-unit-above { margin: 0 0 10px; }
    body.reading figure[data-phone-kind] p.fcf-chrome-key {
        display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 8px 0 0;
        font-size: 0.8rem; font-weight: 700; line-height: 1.4; color: #0f0f0f; text-align: left;
    }
    .fcf-phone-html > p.fcf-chrome-key { margin: 0 0 10px; }
    /* a short name stays on its line; a long one wraps beside its swatch rather than running off the screen */
    .fcf-chrome-key-item { display: inline-flex; align-items: baseline; max-width: 100%; }
    .fcf-chrome-key-item .fcf-chrome-swatch { align-self: center; }
    .fcf-chrome-swatch {
        display: inline-block; flex: none; width: 12px; height: 12px; margin-right: 6px;
        border: 2px solid #0f0f0f; border-radius: 3px; vertical-align: -1px;
    }
    body.reading figure[data-phone-kind] p.fcf-chrome-callout,
    body.reading figure[data-phone-kind] p.fcf-chrome-band {
        position: relative; padding-left: 20px; margin: 8px 0 0;
        font-size: 0.84rem; font-weight: 700; line-height: 1.45; color: #0f0f0f; text-align: left;
    }
    .fcf-chrome-callout::before {
        content: ''; position: absolute; left: 1px; top: 0.32em;
        width: 10px; height: 10px; border-radius: 50%; background: #FFD700; border: 2px solid #0f0f0f;
    }
    /* a band or a bracket is written as a sentence that says where it lies; no icon */
    body.reading figure[data-phone-kind] p.fcf-chrome-band { padding-left: 0; font-weight: 600; }
    body.reading figure[data-phone-kind] p.fcf-band-title { font-weight: 800; margin-top: 12px; }
    .fcf-band-span { margin-left: 8px; font-weight: 500; color: #555; }
    body.reading figure[data-phone-kind] p.fcf-chrome-note {
        font-size: 0.8rem; font-weight: 500; line-height: 1.5; color: #555; margin: 8px 0 0; text-align: left;
    }
    body.reading figure[data-phone-kind] p.fcf-chrome-source {
        font-size: 0.75rem; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; line-height: 1.5;
        color: #777; margin: 8px 0 0; text-align: left;
    }

    /* ---- a table: plain, the width of the column, nothing touching an edge ---- */
    figure[data-phone-kind] .fcf-phone-table table {
        width: 100%; min-width: 0; margin: 0; border: 0; border-radius: 0; overflow: visible; box-shadow: none; border-collapse: collapse;
        font-family: 'Montserrat', 'Montserrat Fallback', sans-serif; font-variant-numeric: tabular-nums; background: none;
    }
    /* the article and report tables paint the head black and stripe the rows; a phone table is plain */
    figure[data-phone-kind] .fcf-phone-table thead,
    figure[data-phone-kind] .fcf-phone-table tr { background: none; color: inherit; }
    figure[data-phone-kind] .fcf-phone-table th,
    figure[data-phone-kind] .fcf-phone-table td {
        padding: 8px 8px 8px 0; text-align: left; vertical-align: top;
        background: none; color: #1a1a1a; border: 0; border-bottom: 1px solid #e3dccb;
        font-size: 0.8rem; line-height: 1.35; font-weight: 500;
    }
    figure[data-phone-kind] .fcf-phone-table th {
        font-size: 0.75rem; font-weight: 800; letter-spacing: 0.02em; text-transform: uppercase; line-height: 1.3;
        color: #555; border-bottom: 2px solid #0f0f0f; vertical-align: bottom;
    }
    /* a long word breaks at a hyphen rather than widening its column past the screen */
    figure[data-phone-kind] .fcf-phone-table th,
    figure[data-phone-kind] .fcf-phone-table td:not(.n) { -webkit-hyphens: auto; hyphens: auto; }
    /* the last resort on the smallest phones: the table scrolls in its own box, never clipped by the page */
    figure[data-phone-kind] .fcf-phone-table { overflow-x: auto; }
    figure[data-phone-kind] .fcf-phone-table th:last-child,
    figure[data-phone-kind] .fcf-phone-table td:last-child { padding-right: 0; }
    figure[data-phone-kind] .fcf-phone-table td:first-child { font-weight: 700; color: #0f0f0f; }
    figure[data-phone-kind] .fcf-phone-table th.n,
    figure[data-phone-kind] .fcf-phone-table td.n { text-align: right; }
    figure[data-phone-kind] .fcf-phone-table td.n { white-space: nowrap; font-weight: 600; }
    figure[data-phone-kind] .fcf-phone-table td.up { color: #1B6E34; }
    figure[data-phone-kind] .fcf-phone-table td.down { color: #A33224; }
    figure[data-phone-kind] .fcf-phone-table tr.hl td { background: rgba(255, 215, 0, 0.18); font-weight: 700; }

    /* ---- a figure drawn in the page reads out on a touch, in the line above it ---- */
    .fcf-touch .fcf-touch-read { margin: 0 0 12px; }
    .fcf-touch .fcf-pie-disc, .fcf-touch .fcf-stack-bar, .fcf-touch .fcf-hbar-row, .fcf-touch .fcf-parts li {
        cursor: pointer; touch-action: pan-y; -webkit-tap-highlight-color: transparent;
    }
    .fcf-read-share { margin-left: 8px; font-weight: 700; color: #555; }
    .fcf-touch [data-i] { transition: opacity 0.12s ease-out; }
    .fcf-touch .fcf-stack-bar > .is-dim, .fcf-touch .fcf-hbar-row.is-dim .fcf-hbar-fill { opacity: 0.3; }
    .fcf-touch .fcf-parts li.is-dim { opacity: 0.45; }
    .fcf-touch .fcf-hbar-row.is-on .fcf-hbar-name, .fcf-touch .fcf-parts li.is-on .fcf-parts-name { font-weight: 800; }
    /* the names under a pie or a stacked bar, as a key: the numbers come on a touch */
    body.reading figure[data-phone-kind] .fcf-touch ul.fcf-parts { display: flex; flex-wrap: wrap; gap: 6px 16px; }
    body.reading figure[data-phone-kind] .fcf-touch .fcf-parts li { display: inline-flex; align-items: center; gap: 6px; }

    /* ---- horizontal bars: a name on the left, its bars and values on the right ---- */
    .fcf-hbars { display: grid; gap: 10px; }
    .fcf-hbar-row { display: grid; grid-template-columns: minmax(0, 36%) minmax(0, 1fr); gap: 10px; align-items: center; }
    .fcf-hbar-name { font-size: 0.8rem; font-weight: 700; line-height: 1.25; color: #0f0f0f; }
    .fcf-hbar-bars { display: grid; gap: 3px; }
    /* the number sits at the end of its bar; the bar is measured against the row less the widest number */
    .fcf-hbar { display: flex; align-items: center; gap: 6px; font-size: 0.78rem; }
    .fcf-hbar-fill { display: block; flex: none; height: 12px; border-radius: 2px; }
    .fcf-hbar-val { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
    .fcf-hbar-val.up { color: #1B6E34; }
    .fcf-hbar-val.down { color: #A33224; }

    /* ---- a pie with no words on it, its slices named in the list under it ---- */
    .fcf-pie { display: grid; gap: 16px; }
    .fcf-pie-disc { justify-self: center; width: 148px; height: 148px; border-radius: 50%; box-shadow: 0 0 0 2px #0f0f0f; }
    body.reading figure[data-phone-kind] ul.fcf-parts { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; }
    body.reading figure[data-phone-kind] .fcf-parts li {
        display: grid; grid-template-columns: 12px minmax(0, 1fr) auto; gap: 8px; align-items: baseline;
        margin: 0; padding: 0; font-size: 0.8rem; line-height: 1.3; list-style: none;
    }
    .fcf-parts li::before { display: none; }
    .fcf-parts .fcf-chrome-swatch { margin: 0; align-self: center; }
    .fcf-parts-name { font-weight: 600; color: #0f0f0f; }
    .fcf-parts-val { font-weight: 800; text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
    .fcf-parts-val em { font-style: normal; font-weight: 600; color: #666; margin-left: 4px; }

    /* ---- a proportion bar: one stacked bar, its parts listed under it ---- */
    .fcf-stack-bar {
        display: flex; gap: 2px; height: 22px; margin: 0 0 12px;
        background: #0f0f0f; border: 2px solid #0f0f0f; border-radius: 4px; overflow: hidden;
    }
    .fcf-stack-bar span { display: block; min-width: 3px; }

}

/* the smallest phones: tables a little tighter, at the 12px floor */
@media (max-width: 380px) {
    figure[data-phone-kind] .fcf-phone-table th,
    figure[data-phone-kind] .fcf-phone-table td { padding-right: 6px; }
    figure[data-phone-kind] .fcf-phone-table td { font-size: 0.75rem; }
    figure[data-phone-kind] .fcf-phone-table th { letter-spacing: 0; }
}

/* the ••• under a chart: wherever the 5 tools fold, a phone held either way */
@media (max-width: 640px), (max-height: 500px) {
    .fcf-chart-bar { justify-content: center; margin-top: 8px; }
    .fcf-chart-bar .fcf-chart-more-btn {
        min-height: 40px; min-width: 56px; padding: 0 6px;
        background: transparent; border: 0; box-shadow: none; justify-content: center;
    }
    .fcf-chart-bar .fcf-chart-more-btn::after { display: none; }
    .fcf-chart-bar .fcf-chart-more-btn:hover,
    .fcf-chart-bar .fcf-chart-more-btn:active { background: transparent; transform: none; box-shadow: none; }
    .fcf-more-pill {
        display: inline-block; padding: 3px 12px 4px; border-radius: 999px;
        background: #FCF7E8; color: #333; font-size: 0.78rem; font-weight: 800; letter-spacing: 0.14em; line-height: 1.2;
        box-shadow: 0 1px 4px rgba(15, 15, 15, 0.2), 0 0 0 1px rgba(15, 15, 15, 0.06);
    }
    .fcf-chart-more-btn[aria-expanded="true"] .fcf-more-pill { background: #FFD700; }
    .fcf-chart-more.is-open { justify-content: center; }
}

/* ==========================================================================
   THE READER GATE (9 Oct 2026, redrawn 10 Oct, glass 11 Oct)
   The rest of an article or report opens after a free sign-up. Where the
   cut falls, lib/reader-gate.js writes a card over the last free lines: the
   same airy glass as the sign-in card (js/signin-modal.js) and the account
   page, so the 3 places a reader signs in look like one thing. The card is
   pulled up over the end of the free part, and the glass blurs those lines,
   which is how the cut reads as a cut. js/reader-gate.js runs it; the
   Worker serves the locked half.
   ========================================================================== */
.reader-gate {
    position: relative;
    margin: -72px 0 6px;
    padding: 8px 0 12px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    scroll-margin-top: 140px;
    background-image:
        radial-gradient(closest-side, rgba(255, 215, 0, 0.55), rgba(255, 215, 0, 0)),
        radial-gradient(closest-side, rgba(0, 140, 132, 0.45), rgba(0, 140, 132, 0));
    background-size: 320px 320px, 380px 380px;
    background-position: calc(50% - 300px) 0%, calc(50% + 300px) 100%;
    background-repeat: no-repeat;
}

/* the last free lines fade, and the glass takes the final ones */
.reader-gate-fade {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 100%;
    height: 120px;
    background: linear-gradient(to bottom, rgba(252, 247, 232, 0), rgba(252, 247, 232, 0.8));
    pointer-events: none;
}

.reader-gate-body {
    position: relative;
    box-sizing: border-box;
    max-width: 560px;
    margin: 0 auto;
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3);
    backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(255, 255, 255, 0.7);
    border-radius: 22px;
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 40px 80px -30px rgba(15, 15, 15, 0.35);
    padding: 30px 32px;
    color: #0f0f0f;
    text-align: left;
}

@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    .reader-gate-body { background: #fffdf7; }
}

.reader-gate-step { display: grid; gap: 10px; }
.reader-gate-step[hidden] { display: none; }

/* the eyebrow, the line and the lede, whatever the article or report gives a paragraph */
.article-content .reader-gate-eyebrow,
.ea-report .reader-gate-eyebrow {
    margin: 0;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.14em;
    line-height: 1.3;
    text-transform: uppercase;
    color: #6d685f;
}

.article-content .reader-gate-line,
.ea-report .reader-gate-line {
    margin: 0;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 1.6rem;
    font-weight: 800;
    line-height: 1.2;
    letter-spacing: -0.02em;
    color: #0f0f0f;
    text-wrap: balance;
}

.article-content .reader-gate-lede,
.ea-report .reader-gate-lede {
    margin: 0;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.9rem;
    line-height: 1.6;
    color: #3b3833;
}
.reader-gate-lede strong { color: #0f0f0f; font-weight: 600; overflow-wrap: anywhere; }

.reader-gate-form {
    display: grid;
    gap: 18px;
    margin: 8px 0 0;
}

.reader-gate-fields { display: grid; gap: 14px; }

.reader-gate-field { display: grid; gap: 2px; }

.reader-gate-field span {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #6d685f;
}

/* underline fields, the sign-in card's */
.reader-gate-input {
    width: 100%;
    min-width: 0;
    box-sizing: border-box;
    min-height: 44px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.95rem;
    font-weight: 500;
    line-height: 1.2;
    color: #0f0f0f;
    background: transparent;
    border: 0;
    border-bottom: 1px solid rgba(15, 15, 15, 0.24);
    border-radius: 0;
    padding: 12px 0 11px;
    outline: none;
    -webkit-appearance: none;
    appearance: none;
    transition: border-color 0.15s, box-shadow 0.15s;
}
.reader-gate-input::placeholder { color: #a8a39a; opacity: 1; }
.reader-gate-input:focus { border-bottom-color: #0f0f0f; box-shadow: 0 1px 0 0 #0f0f0f; }

/* the one button, a solid pill */
.reader-gate-btn {
    box-sizing: border-box;
    width: 100%;
    height: 46px;
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.9rem;
    font-weight: 600;
    line-height: 1;
    padding: 0 22px;
    border: 1px solid #0f0f0f;
    border-radius: 999px;
    background: #0f0f0f;
    color: #fffdf7;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    transition: background 0.15s;
}
.reader-gate-btn:hover { background: #2a2825; }
.reader-gate-btn:focus-visible { outline: 2px solid #FFD700; outline-offset: 2px; }
.reader-gate-btn[disabled] { opacity: 0.6; cursor: default; }

/* the code is 6 digits and nothing else */
.reader-gate-input--code {
    font-size: 1.35rem;
    font-weight: 700;
    letter-spacing: 0.45em;
    font-variant-numeric: tabular-nums;
}

.article-content .reader-gate-msg,
.ea-report .reader-gate-msg {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.8rem;
    line-height: 1.45;
    margin: 0;
}
.reader-gate-msg:empty { display: none; }
.reader-gate-msg--error { color: #c62828; }
.reader-gate-msg--ok { color: #008C84; }

.article-content .reader-gate-small,
.ea-report .reader-gate-small {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.76rem;
    line-height: 1.55;
    color: #6d685f;
    margin: 0;
}

.reader-gate-link {
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.76rem;
    font-weight: 600;
    line-height: 1.4;
    color: #0f0f0f;
    background: none;
    border: 0;
    padding: 12px 0;
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    cursor: pointer;
    text-decoration: underline;
    text-decoration-color: rgba(15, 15, 15, 0.24);
    text-underline-offset: 3px;
}
.reader-gate-link:hover { text-decoration-color: #0f0f0f; }

/* A gated page carries no second sign-up: the "Get the next one by email"
   strip at the end of the piece stays hidden, for the reader at the gate and
   for the signed-in reader who is on the list already. The "Read next" cards
   beside it stay. The gate's inline script sets the class before the strip
   is parsed. */
html.fcf-gated .end-brew-sub { display: none; }
/* nor the bar at the top: on a gated page the one sign-up is the gate card (16 Oct 2026) */
html.fcf-gated .subscribe-bar { display: none; }
html.fcf-gated main.section { padding-top: 62px; }
.reader-gate-sep { color: #bbb; margin: 0 8px; }

/* a reader who has a session sees one quiet line while the rest loads */
.reader-gate-wait {
    display: none;
    font-size: 0.9rem;
    color: #666;
    margin: 0;
    padding: 6px 0 20px;
    text-align: center;
}
.reader-gate[data-session="1"] { margin-top: 10px; background-image: none; }
.reader-gate[data-session="1"] .reader-gate-body { display: none; }
.reader-gate[data-session="1"] .reader-gate-wait { display: block; }

@media (max-width: 820px) {
    /* 16px stops phones zooming into the field on tap */
    .reader-gate-input { font-size: 16px; }
}

@media (max-width: 640px) {
    .reader-gate { margin-top: -56px; }
    .reader-gate-body { padding: 24px 20px; }
    .article-content .reader-gate-line,
    .ea-report .reader-gate-line { font-size: 1.4rem; }
}

/* the sign-in page's second label (login.html) */
.signin-label--next { margin-top: 14px; }

/* the way in, added to the menu by js/nav.js: quieter than the sections */
.nav-link--account {
    font-size: 0.85rem;
    padding: 6px 14px;
    border: 1px solid rgba(230, 230, 230, 0.45);
    border-radius: 999px;
}

/* On a desktop the pill sits at the right edge, the mirror of the logo
   pinned at the left, so the 5 section links stay centred exactly where
   they were: one more item in the row met the logo at 1024px. In the phone
   menu it is a small pill under the last row, as wide as its words; the
   menu's full-width row rules stretched it edge to edge and took its bottom
   border. */
@media (min-width: 821px) {
    .nav-account {
        position: absolute;
        right: 24px;
        top: 0;
        height: 100%;
        display: flex;
        align-items: center;
    }
}
@media (max-width: 820px) {
    .navbar .nav-menu > li.nav-account { padding-top: 14px; }
    .navbar .nav-menu > li.nav-account > .nav-link--account {
        display: inline-flex;
        min-height: 40px;
        padding: 8px 20px;
        font-size: 0.85rem;
        border: 1px solid rgba(230, 230, 230, 0.45);
    }
}

/* ==========================================================================
   A TABLE IN THE PAGE ON EVERY SCREEN (11 Oct 2026)
   graphics.json "web": "table" (the brewsheets, #63 and #64). A table of
   words drawn as a picture for X is a tall cream page on a wide screen, so
   the page writes it out at every width, the way a phone already gets it:
   title, rows on hairlines, source. The picture stays in the figure, out of
   sight, for Save image. Phones keep the rules above; this only adds the
   wide-screen sizes and the homepage card.
   ========================================================================== */
figure[data-web=table] { display: flex; flex-direction: column; text-align: left; margin: 2rem 0; min-width: 0; }
figure[data-web=table] > img, figure[data-web=table] > picture,
figure[data-web=table] > .fcf-graphic-open, figure[data-web=table] > .fcf-chart-stage,
figure[data-web=table] > .fcf-chart-live, figure[data-web=table] > .fcf-chart-read,
figure[data-web=table] > .fcf-chart-views { display: none; }
figure[data-web=table] .fcf-chrome,
figure[data-web=table] .fcf-phone-table { display: block; font-family: 'Montserrat', 'Montserrat Fallback', sans-serif; }
figure[data-web=table] .fcf-chrome-foot { order: 10; }
figure[data-web=table] .fcf-chart-bar { order: 20; }
figure[data-web=table] mark { background: linear-gradient(transparent 58%, rgba(255, 215, 0, 0.65) 58%); color: inherit; padding: 0 1px; }
figure[data-web=table] td.mixed { color: #0f0f0f; }

@media (min-width: 641px) {
    figure[data-web=table] p.fcf-chrome-title,
    body.reading figure[data-web=table] p.fcf-chrome-title {
        font-size: 1.15rem; font-weight: 800; line-height: 1.3; color: #0f0f0f; margin: 0 0 14px; text-align: left; text-wrap: balance;
    }
    figure[data-web=table] p.fcf-chrome-source,
    body.reading figure[data-web=table] p.fcf-chrome-source {
        font-size: 0.75rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; line-height: 1.5;
        color: #777; margin: 12px 0 0; text-align: left;
    }
    figure[data-web=table] .fcf-phone-table { overflow-x: auto; }
    figure[data-web=table] .fcf-phone-table table {
        width: 100%; margin: 0; border: 0; border-radius: 0; box-shadow: none; border-collapse: collapse; background: none;
        font-family: 'Montserrat', 'Montserrat Fallback', sans-serif; font-variant-numeric: tabular-nums;
    }
    /* the article and report tables paint the head black and stripe the rows; this one is plain */
    figure[data-web=table] .fcf-phone-table thead,
    figure[data-web=table] .fcf-phone-table tr { background: none; color: inherit; }
    figure[data-web=table] .fcf-phone-table th,
    figure[data-web=table] .fcf-phone-table td {
        padding: 13px 18px 13px 0; text-align: left; vertical-align: top; background: none;
        color: #1a1a1a; border: 0; border-bottom: 1px solid #e3dccb;
        font-size: 0.88rem; line-height: 1.5; font-weight: 500;
    }
    figure[data-web=table] .fcf-phone-table th {
        font-size: 0.75rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; line-height: 1.3;
        color: #555; border-bottom: 1px solid #0f0f0f; vertical-align: bottom; padding-top: 0; padding-bottom: 10px;
    }
    figure[data-web=table] .fcf-phone-table th:last-child,
    figure[data-web=table] .fcf-phone-table td:last-child { padding-right: 0; }
    figure[data-web=table] .fcf-phone-table td:first-child { font-weight: 700; color: #0f0f0f; min-width: 8.5em; }
    figure[data-web=table] .fcf-phone-table td.up,
    figure[data-web=table] .fcf-phone-table td.down,
    figure[data-web=table] .fcf-phone-table td.mixed { font-weight: 700; white-space: nowrap; }
    figure[data-web=table] .fcf-phone-table td.up { color: #1B6E34; }
    figure[data-web=table] .fcf-phone-table td.down { color: #A33224; }
    figure[data-web=table] .fcf-phone-table tbody tr:last-child td { border-bottom: 0; }
}

/* the homepage card: the same table, a step smaller */
.insight-graphic[data-web=table] { margin: 0; }
.insight-graphic[data-web=table] p.fcf-chrome-title { font-size: 1rem; font-weight: 800; line-height: 1.3; color: #0f0f0f; margin: 0 0 10px; text-align: left; }
.insight-graphic[data-web=table] p.fcf-chrome-source { font-size: 0.75rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; color: #777; margin: 10px 0 0; text-align: left; }
.insight-graphic[data-web=table] .fcf-phone-table { overflow-x: auto; }
.insight-graphic[data-web=table] table { width: 100%; border-collapse: collapse; margin: 0; border: 0; box-shadow: none; background: none; }
.insight-graphic[data-web=table] thead, .insight-graphic[data-web=table] tr { background: none; color: inherit; }
.insight-graphic[data-web=table] th,
.insight-graphic[data-web=table] td {
    padding: 9px 12px 9px 0; text-align: left; vertical-align: top; background: none; border: 0; border-bottom: 1px solid #e3dccb;
    font-size: 0.8rem; line-height: 1.45; font-weight: 500; color: #1a1a1a;
}
.insight-graphic[data-web=table] th {
    font-size: 0.75rem; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: #555;
    border-bottom: 1px solid #0f0f0f; padding-top: 0;
}
.insight-graphic[data-web=table] th:last-child, .insight-graphic[data-web=table] td:last-child { padding-right: 0; }
.insight-graphic[data-web=table] td:first-child { font-weight: 700; color: #0f0f0f; }
.insight-graphic[data-web=table] td.up, .insight-graphic[data-web=table] td.down, .insight-graphic[data-web=table] td.mixed { font-weight: 700; white-space: nowrap; }
.insight-graphic[data-web=table] td.up { color: #1B6E34; }
.insight-graphic[data-web=table] td.down { color: #A33224; }
.insight-graphic[data-web=table] tbody tr:last-child td { border-bottom: 0; }

/* on a phone each row is a block: the name, its effect, then each column
   under its own small label, so 5 columns never squeeze into 360px */
@media (max-width: 640px) {
    figure[data-web=table] .fcf-phone-table { overflow: visible; }
    figure[data-web=table] .fcf-phone-table thead { display: none; }
    figure[data-web=table] .fcf-phone-table table,
    figure[data-web=table] .fcf-phone-table tbody { display: block; width: 100%; }
    figure[data-web=table] .fcf-phone-table tr { display: block; padding: 14px 0; border-bottom: 1px solid #e3dccb; }
    figure[data-web=table] .fcf-phone-table tr:first-child { border-top: 1px solid #0f0f0f; }
    figure[data-web=table] .fcf-phone-table td {
        display: block; padding: 0; border: 0; font-size: 0.88rem; line-height: 1.5; color: #1a1a1a; -webkit-hyphens: manual; hyphens: manual;
    }
    figure[data-web=table] .fcf-phone-table td + td { margin-top: 8px; }
    figure[data-web=table] .fcf-phone-table td::before {
        content: attr(data-label); display: block; margin-bottom: 2px;
        font-size: 0.75rem; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; color: #777;
    }
    figure[data-web=table] .fcf-phone-table td:first-child { font-size: 1rem; font-weight: 800; color: #0f0f0f; }
    figure[data-web=table] .fcf-phone-table td:first-child::before { content: none; }
    /* the effect is a word in its colour, right under the name, no label */
    figure[data-web=table] .fcf-phone-table td.up,
    figure[data-web=table] .fcf-phone-table td.down,
    figure[data-web=table] .fcf-phone-table td.mixed { margin-top: 2px; font-weight: 700; }
    figure[data-web=table] .fcf-phone-table td.up::before,
    figure[data-web=table] .fcf-phone-table td.down::before,
    figure[data-web=table] .fcf-phone-table td.mixed::before { content: none; }
}

/* the homepage card keeps 2 columns: the name and its effect (js/insights.js) */
.insight-graphic[data-web=table] .fcf-web-more { margin: 10px 0 0; font-size: 0.8rem; font-weight: 700; }
.insight-graphic[data-web=table] .fcf-web-more a { color: #0f0f0f; text-decoration: underline; text-decoration-color: #FFD700; text-decoration-thickness: 2px; text-underline-offset: 3px; }

/* The homepage shows a brewsheet as its picture rather than the table above
   (11 Oct 2026): cut at about the card's height, fading itself out over its
   last 150px so it sits on the page's patterned ground, and a button under
   the cut that opens the whole sheet in the lightbox, as a click on the
   picture does. js/fcf-chart.js still wraps the picture in its stage and adds
   its bar of buttons under it (the numbers, Save image, Full size); its touch
   sheet is left off, because the sheet is words and the reading it would
   show is the row already in view, and the box it reserves for that reading
   pushed the picture 180px below the card. The cut sits on the stage too, so
   nothing moves when the stage arrives. */
.insight-graphic[data-web=sheet] { display: flex; flex-direction: column; }
.insight-graphic[data-web=sheet] .fcf-sheet-cut,
.insight-graphic[data-web=sheet] .fcf-chart-stage { max-height: 560px; overflow: hidden; border-radius: 10px; }
.insight-graphic[data-web=sheet] .fcf-sheet-cut {
    -webkit-mask-image: linear-gradient(#000 calc(100% - 150px), transparent);
    mask-image: linear-gradient(#000 calc(100% - 150px), transparent);
}
.insight-graphic[data-web=sheet] .fcf-chart-layer,
.insight-graphic[data-web=sheet] .fcf-chart-read,
.insight-graphic[data-web=sheet] .fcf-chart-views,
.insight-graphic[data-web=sheet] .fcf-chart-live { display: none; }
.insight-graphic[data-web=sheet] .fcf-sheet-open {
    order: 5; position: relative; z-index: 1; align-self: center; margin: -24px 0 0;
    font-family: inherit; font-size: 0.82rem; font-weight: 700; padding: 8px 14px;
    border: 2px solid #0f0f0f; border-radius: 6px; background: #FCF7E8; color: #0f0f0f; cursor: pointer;
    box-shadow: 3px 3px 0 #0f0f0f; transition: transform 0.12s ease, box-shadow 0.12s ease;
}
.insight-graphic[data-web=sheet] .fcf-sheet-open:hover { transform: translate(-1px, -1px); box-shadow: 4px 4px 0 #0f0f0f; }
.insight-graphic[data-web=sheet] .fcf-sheet-open:active { transform: translate(1px, 1px); box-shadow: none; }
.insight-graphic[data-web=sheet] .fcf-sheet-open:focus-visible { outline: 3px solid #0f0f0f; outline-offset: 3px; }
.insight-graphic[data-web=sheet] .fcf-chart-bar { order: 20; margin-top: 16px; }
.insight-graphic[data-web=sheet] .fcf-chart-numbers { order: 25; }

/* ==========================================================================
   GLASS SURFACES (13 Oct 2026)
   The airy glass of the sign-in card, the reader gate and the account page
   (ACCOUNT PAGE above) carried to the surfaces that float over the page or
   ask the reader to sign up: the subscribe bar and its message, the
   Brewed Up Insights menu, the phone menu, back to top, the Edge Alert
   summary, At a glance card and section list, likes and comments, and the
   404 and contact pages (both now use .glass-stage + .account-card).
   Listing cards, the homepage buttons and the black navbar and footer keep
   the hard-edged house style: the footer lockup's white letters need the
   black ground. Every glass surface falls back to solid cream without
   backdrop-filter, as the other 3 do.
   ========================================================================== */

/* ----- the subscribe bar: a floating pill in the strip ----- */
.subscribe-bar {
    background: transparent;
    border-bottom: 0;
}
.subscribe-bar-form,
.sbm-card,
.insights-menu,
.back-to-top,
.engage-comment,
.engage-form,
:where(.ea-page) .ea-summary,
:where(.ea-page) .ea-glance {
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3);
    backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(255, 255, 255, 0.7);
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 18px 40px -22px rgba(15, 15, 15, 0.35);
}
.subscribe-bar-form {
    width: auto;
    max-width: 100%;
    border-radius: 999px;
    padding: 3px 3px 3px 20px;
    gap: 14px;
}
.subscribe-bar-form input {
    border: 0;
    border-bottom: 1px solid rgba(15, 15, 15, 0.24);
    border-radius: 0;
    background: transparent;
    padding: 6px 0;
    font-weight: 500;
}
.subscribe-bar-form input:focus {
    box-shadow: 0 1px 0 0 #0f0f0f;
    border-bottom-color: #0f0f0f;
}
.subscribe-bar-form button {
    border: 1px solid #0f0f0f;
    border-radius: 999px;
    background: #0f0f0f;
    color: #fffdf7;
    font-weight: 600;
    padding: 9px 20px;
    transition: background 0.15s;
}
.subscribe-bar-form button:hover { transform: none; box-shadow: none; background: #2a2825; }
.subscribe-bar-form button:active { transform: none; }
.subscribe-bar-form button:focus-visible { outline: 2px solid #FFD700; outline-offset: 2px; }
/* the end-of-piece sign-up runs the same form, across its column */
.end-brew .subscribe-bar-form { width: 100%; }

@media (max-width: 820px) {
    .subscribe-bar-form { width: 100%; padding-left: 16px; gap: 10px; }
    .subscribe-bar-form input { padding: 0; }
    .subscribe-bar-form button { padding: 0 18px; }
}

/* the message under the bar, and its 3 states as tints of the glass */
.sbm-card { border-radius: 18px; }
.sbm-icon { border-width: 1px; }
.sbm-close { border-radius: 50%; }
.sbm-subscribed { background: rgba(217, 240, 238, 0.78); }
.sbm-already, .sbm-suggest { background: rgba(255, 244, 194, 0.78); }
.sbm-error { background: rgba(253, 232, 230, 0.82); }

/* ----- the Brewed Up Insights menu: a glass panel under the navbar ----- */
.insights-menu {
    top: 68px;
    border-radius: 22px;
    /* a menu is read over moving content, so it is less see-through */
    background: rgba(255, 253, 247, 0.86);
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 40px 80px -30px rgba(15, 15, 15, 0.35);
}
.insights-menu .im-label { border-bottom-width: 1px; border-bottom-color: rgba(15, 15, 15, 0.1); }
.insights-menu .im-foot { border-top-width: 1px; border-top-color: rgba(15, 15, 15, 0.1); }
.insights-menu .im-list a { border-radius: 10px; }
.insights-menu .im-list a:hover,
.insights-menu .im-list a:focus-visible { background: rgba(15, 15, 15, 0.06); }

/* ----- the phone menu: the same glass, floating under the bar ----- */
@media (max-width: 820px) {
    .navbar .nav-menu {
        top: 68px;
        left: 10px;
        right: 10px;
        width: auto;
        max-height: calc(100vh - 80px);
        max-height: calc(100dvh - 80px);
        padding: 6px 22px 18px;
        background: rgba(255, 253, 247, 0.86);
        -webkit-backdrop-filter: blur(30px) saturate(1.3);
        backdrop-filter: blur(30px) saturate(1.3);
        border: 1px solid rgba(255, 255, 255, 0.7);
        border-radius: 22px;
        box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 40px 80px -30px rgba(15, 15, 15, 0.45);
    }
    .navbar .nav-menu .nav-link {
        color: #0f0f0f;
        border-bottom-color: rgba(15, 15, 15, 0.1);
    }
    .navbar .nav-menu .nav-link:hover { color: #0f0f0f; }
    .navbar .nav-menu .nav-link.active { color: #0f0f0f; font-weight: 800; }
    .navbar .nav-menu .nav-drop-toggle[aria-expanded="true"] { color: #0f0f0f; }
    .navbar .nav-menu > li.nav-account > .nav-link--account { border-color: rgba(15, 15, 15, 0.3); border-radius: 999px; }
    /* inside the panel the Insights list is a lighter well, not a second card */
    .insights-menu {
        border: 0;
        border-radius: 16px;
        background: rgba(255, 255, 255, 0.5);
        -webkit-backdrop-filter: none;
        backdrop-filter: none;
        box-shadow: none;
    }
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    @media (max-width: 820px) { .navbar .nav-menu { background: #fffdf7; } }
}

/* ----- back to top: a glass disc ----- */
.back-to-top {
    width: 46px;
    height: 46px;
    border-radius: 50%;
    color: #0f0f0f;
    font-size: 1.25rem;
}
.back-to-top:hover { transform: none; background: rgba(255, 253, 247, 0.9); box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.12), 0 18px 40px -22px rgba(15, 15, 15, 0.45); }
.back-to-top:focus-visible { outline: 2px solid #FFD700; outline-offset: 2px; }
@media (max-width: 820px) { .back-to-top { width: 44px; height: 44px; } }

/* ----- likes, shares and comments: pills and glass cards ----- */
.engage-like,
.engage-comments-toggle {
    border: 1px solid rgba(15, 15, 15, 0.3);
    background: transparent;
    font-weight: 700;
    transition: background 0.15s;
}
.engage-like:hover,
.engage-comments-toggle:hover { transform: none; box-shadow: none; background: rgba(15, 15, 15, 0.05); }
.engage-like[aria-pressed="true"],
.engage-comments-toggle[aria-expanded="true"] { background: #0f0f0f; color: #fffdf7; border-color: #0f0f0f; }
.engage .share-btn {
    background: transparent;
    color: #0f0f0f;
    border: 1px solid rgba(15, 15, 15, 0.3);
    transition: background 0.15s;
}
.engage .share-btn:hover { transform: none; box-shadow: none; background: rgba(15, 15, 15, 0.05); }
.engage .share-btn.is-copied { background: #008C84; border-color: #008C84; color: #fff; }
.engage-comment,
.engage--compact .engage-comment { border-radius: 18px; }
.engage-form { border-radius: 22px; padding: 20px 22px; }
.engage-form input, .engage-form textarea {
    border: 1px solid rgba(15, 15, 15, 0.24);
    border-radius: 12px;
    background: rgba(255, 255, 255, 0.55);
}
.engage-form input:focus, .engage-form textarea:focus { border-color: #0f0f0f; box-shadow: 0 0 0 1px #0f0f0f; background: #fff; }
.engage-submit {
    border: 1px solid #0f0f0f;
    border-radius: 999px;
    color: #fffdf7;
    font-weight: 600;
    padding: 0 22px;
    height: 44px;
    transition: background 0.15s;
}
.engage-submit:hover { transform: none; box-shadow: none; background: #2a2825; }

/* ----- Edge Alert: summary, At a glance, section list ----- */
/* both carry source tips, so each lifts its own layer above what follows */
:where(.ea-page) .ea-summary,
:where(.ea-page) .ea-glance { position: relative; z-index: 3; border-radius: 22px; }
:where(.ea-page) .ea-report > .ea-glance { border-radius: 20px; }
:where(.ea-page) .ea-report .ea-summary .ea-summary-head,
:where(.ea-page) .ea-report .ea-glance .ea-glance-head {
    background: transparent;
    color: #6d685f;
    font-weight: 700;
    letter-spacing: 0.14em;
    border-radius: 0;
}
:where(.ea-page) .ea-report .ea-summary .ea-summary-head { padding: 1.1rem 1.25rem 0.1rem; }
:where(.ea-page) .ea-report .ea-glance .ea-glance-head { padding: 1rem 1rem 0; }
:where(.ea-page) .ea-report .ea-summary-list { padding: 0.2rem 1.25rem 0.6rem; }
:where(.ea-page) .ea-report .ea-summary-list li { border-top-color: rgba(15, 15, 15, 0.08); }
:where(.ea-page) .ea-report .ea-summary-list li::before {
    background: transparent;
    color: #0f0f0f;
    box-shadow: inset 0 0 0 1px rgba(15, 15, 15, 0.3);
}
:where(.ea-page) .ea-glance-price,
:where(.ea-page) .ea-glance-ranges { border-bottom: 1px solid rgba(15, 15, 15, 0.1); }
:where(.ea-page) .ea-glance dl div { border-bottom: 1px solid rgba(15, 15, 15, 0.08); }
:where(.ea-page) .ea-glance dl div:last-child { border-bottom: none; }
:where(.ea-page) .ea-range { height: 6px; background: rgba(15, 15, 15, 0.1); border: 0; }
:where(.ea-page) .ea-range i { width: 12px; height: 12px; background: #0f0f0f; border: 0; box-shadow: 0 0 0 3px #FFD700; }
@media (min-width: 600px) and (max-width: 1399px) {
    :where(.ea-page) .ea-report > .ea-glance dl div:nth-last-child(2) { border-bottom: none; }
}

@media (min-width: 1400px) {
    :where(.ea-page) .ea-toc {
        padding: 16px 16px 8px;
        background: rgba(255, 253, 247, 0.62);
        -webkit-backdrop-filter: blur(30px) saturate(1.3);
        backdrop-filter: blur(30px) saturate(1.3);
        border: 1px solid rgba(255, 255, 255, 0.7);
        border-radius: 20px;
        box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 18px 40px -22px rgba(15, 15, 15, 0.35);
    }
}

/* no blur in the browser: the solid cream the other glass falls back to */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    .subscribe-bar-form, .sbm-card, .insights-menu, .back-to-top,
    .engage-comment, .engage-form,
    :where(.ea-page) .ea-summary, :where(.ea-page) .ea-glance, :where(.ea-page) .ea-toc { background: #fffdf7; }
}

/* ----- 404 and contact: the account card ----- */
.contact-links { display: grid; gap: 10px; margin-top: 16px; }
.contact-links .account-pill { flex: none; }

/* ----- the homepage and the listings: glass cards, not teal boxes (13 Oct 2026)
   The owner found the teal cards with the black keyline and hard shadow
   tacky. Every card that opens a piece (homepage, The Macro Brew and
   The Edge Alert listings, the insights archive, Read next), the homepage
   insight card and its pop-up become the same glass as the sign-in card;
   the gold buttons around them become pills. A soft gold and teal glow sits
   behind each homepage section so the glass has something to blur. */
.article-card,
body.reading .article-card,
.insight-pour,
.insight-popup,
.log-entry {
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3);
    backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(255, 255, 255, 0.7);
    border-radius: 22px;
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 24px 50px -30px rgba(15, 15, 15, 0.35);
}
.article-card { transition: transform 0.2s ease, box-shadow 0.2s ease; }
.article-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.08), 0 34px 60px -30px rgba(15, 15, 15, 0.45);
}
.log-entry:target,
.log-entry.is-flash { background-color: rgba(255, 236, 140, 0.7); }
.insight-popup { box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 40px 80px -30px rgba(15, 15, 15, 0.45); }
.insight-popup .pop-close { border: 1px solid rgba(15, 15, 15, 0.24); border-radius: 50%; width: 34px; height: 34px; }
.insight-popup .pop-close:hover { background: rgba(15, 15, 15, 0.05); }

/* the category tags: a soft gold pill, no keyline */
.article-card::after,
.insight-tag {
    background: rgba(255, 215, 0, 0.55);
    border: 0;
    border-radius: 999px;
    padding: 4px 10px;
}

/* the buttons: "See every ...", "Next insight", the graphic's own row, Get in touch */
.article-view-all .hero-cta,
.insight-btn {
    background: #0f0f0f;
    color: #fffdf7;
    border: 1px solid #0f0f0f;
    border-radius: 999px;
    box-shadow: none;
    font-weight: 600;
    transition: background 0.15s;
}
.article-view-all .hero-cta { padding: 13px 24px; }
.insight-btn { padding: 9px 18px; }
.article-view-all .hero-cta:hover,
.insight-btn:hover { transform: none; box-shadow: none; background: #2a2825; }
.article-view-all .hero-cta:active,
.insight-btn:active { transform: none; box-shadow: none; }
.article-view-all .hero-cta:focus-visible,
.insight-btn:focus-visible { outline: 2px solid #FFD700; outline-offset: 2px; }

.fcf-chart-btn,
.fcf-chart a.fcf-chart-btn {
    background: rgba(255, 253, 247, 0.7);
    border: 1px solid rgba(15, 15, 15, 0.28);
    border-radius: 999px;
    box-shadow: none;
    font-weight: 600;
    padding-left: 13px;
    padding-right: 13px;
}
.fcf-chart-btn:hover { background: rgba(15, 15, 15, 0.06); }
.fcf-chart-btn:active { transform: none; box-shadow: none; }
.fcf-chart-btn.is-on { background: #0f0f0f; color: #fffdf7; border-color: #0f0f0f; }
.fcf-chart-btn:disabled { background: transparent; box-shadow: none; }

.social-links a {
    background: transparent;
    border: 1px solid rgba(15, 15, 15, 0.3);
    border-radius: 999px;
    box-shadow: none;
    padding: 11px 22px;
    transition: background 0.15s;
}
.social-links a:hover { transform: none; box-shadow: none; background: rgba(15, 15, 15, 0.05); }

/* the glow behind each homepage section, as on the account page */
#insights.section,
#the-brew.section,
#edge-alert.section {
    background-image:
        radial-gradient(closest-side, rgba(255, 215, 0, 0.32), rgba(255, 215, 0, 0)),
        radial-gradient(closest-side, rgba(0, 140, 132, 0.22), rgba(0, 140, 132, 0));
    background-size: 520px 520px, 600px 600px;
    background-position: 0 18%, 100% 78%;
    background-repeat: no-repeat;
}

@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    .article-card, body.reading .article-card, .insight-pour, .insight-popup, .log-entry { background: #fffdf7; }
}

/* the homepage brewsheet's "Open the sheet": a pill like the rest */
.insight-graphic[data-web=sheet] .fcf-sheet-open { border: 1px solid #0f0f0f; border-radius: 999px; box-shadow: none; background: #0f0f0f; color: #fffdf7; font-weight: 600; transition: background 0.15s; }
.insight-graphic[data-web=sheet] .fcf-sheet-open:hover { transform: none; box-shadow: none; background: #2a2825; }
.insight-graphic[data-web=sheet] .fcf-sheet-open:active { transform: none; }

/* the archive filters: pills, the chosen one solid */
.tb-chip { border: 1px solid rgba(15, 15, 15, 0.3); border-radius: 999px; padding-left: 13px; padding-right: 13px; font-weight: 600; }
.tb-chip:hover { background: rgba(15, 15, 15, 0.05); }
.tb-chip[aria-pressed="true"],
.tb-chip[aria-current="true"] { background: #0f0f0f; color: #fffdf7; border-color: #0f0f0f; box-shadow: none; }

/* ----- inside the pieces: articles, Edge Alerts and insight pages (14 Oct 2026)
   The same glass inside a piece. The article body is a glass card on wide
   screens (phones keep their own full-width text, body.reading rules above),
   the teal title band becomes a soft gold and teal glow, the back link an
   outline pill, the tags soft gold pills, tables lose their black and gold
   heads, and the black rules under headers turn to hairlines. Graphics keep
   their own frames. */
.article-breadcrumb a {
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3);
    backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(15, 15, 15, 0.28);
    border-radius: 999px;
    box-shadow: none;
    font-weight: 600;
    padding: 9px 18px;
    transition: background 0.15s;
}
.article-breadcrumb a:hover { transform: none; box-shadow: none; background: rgba(15, 15, 15, 0.05); }
.article-breadcrumb a:focus-visible { outline: 2px solid #FFD700; outline-offset: 2px; }

.article-hero {
    background-color: transparent;
    background-image:
        radial-gradient(closest-side, rgba(255, 215, 0, 0.34), rgba(255, 215, 0, 0)),
        radial-gradient(closest-side, rgba(0, 140, 132, 0.22), rgba(0, 140, 132, 0));
    background-size: 560px 420px, 620px 460px;
    background-position: calc(50% - 360px) 30%, calc(50% + 380px) 80%;
    background-repeat: no-repeat;
    border-bottom: 1px solid rgba(15, 15, 15, 0.1);
}
.article-hero .article-kicker {
    background: rgba(255, 215, 0, 0.55);
    border: 0;
    border-radius: 999px;
    padding: 4px 10px;
}

.article-content {
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3);
    backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(255, 255, 255, 0.7);
    border-radius: 22px;
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 40px 80px -40px rgba(15, 15, 15, 0.3);
}

.article-content table { border: 1px solid rgba(15, 15, 15, 0.1); border-radius: 14px; }
.article-content thead { background: rgba(15, 15, 15, 0.05); color: #0f0f0f; }
.article-content td { border-bottom-color: rgba(15, 15, 15, 0.08); }

:where(.ea-page) .ea-table-wrap {
    background: rgba(255, 253, 247, 0.62);
    -webkit-backdrop-filter: blur(30px) saturate(1.3);
    backdrop-filter: blur(30px) saturate(1.3);
    border: 1px solid rgba(255, 255, 255, 0.7);
    border-radius: 18px;
    box-shadow: 0 0 0 1px rgba(15, 15, 15, 0.06), 0 18px 40px -22px rgba(15, 15, 15, 0.35);
}
:where(.ea-page) .ea-report th {
    background: rgba(15, 15, 15, 0.05);
    color: #0f0f0f;
    border-bottom: 1px solid rgba(15, 15, 15, 0.14);
}
:where(.ea-page) .ea-report th:first-child { border-top-left-radius: 17px; }
:where(.ea-page) .ea-report th:last-child { border-top-right-radius: 17px; }
:where(.ea-page) .ea-report th, :where(.ea-page) .ea-report td { border-bottom-width: 1px; border-bottom-color: rgba(15, 15, 15, 0.08); }
:where(.ea-page) .ea-report th { border-bottom-color: rgba(15, 15, 15, 0.14); }

:where(.ea-page) .ea-report .ea-header,
:where(.insight-page) .ea-report .ea-header { border-bottom: 1px solid rgba(15, 15, 15, 0.12); }
.end-brew { border-top: 1px solid rgba(15, 15, 15, 0.12); }

@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
    .article-content, :where(.ea-page) .ea-table-wrap { background: #fffdf7; }
}

/* /ig: the link-in-bio grid */
.ig-main { display: block; min-height: 0; }
.ig-card { margin-bottom: 28px; }
.ig-grid {
    width: min(640px, 100%);
    margin: 0 auto;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 6px;
}
.ig-tile {
    position: relative;
    display: flex;
    flex-direction: column;
    min-width: 0;
    overflow: hidden;
    border-radius: 10px;
    background: #FCF7E8;
    border: 1px solid rgba(15, 15, 15, 0.08);
    color: #0f0f0f;
    text-decoration: none;
}
.ig-tile__pic {
    display: block;
    aspect-ratio: 4 / 5;
    overflow: hidden;
}
.ig-tile__pic img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* The title is plain text under the picture wherever there is no mouse to hover:
   a slide headline shrunk to half a phone's width cannot be read. */
.ig-tile__title {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 5;
    overflow: hidden;
    margin: 8px 10px 10px; /* margin, not padding: a clamped box shows its cut lines inside padding */
    font-family: 'Montserrat', 'Montserrat Fallback', sans-serif;
    font-size: 0.95rem;
    font-weight: 700;
    line-height: 1.3;
}
/* With a mouse and room for 3 columns, the title rides over the picture on hover instead. */
@media (hover: hover) and (min-width: 641px) {
    .ig-tile__title {
        position: absolute;
        inset: auto 0 0 0;
        display: block;
        margin: 0;
        padding: 24px 8px 8px;
        font-size: 0.8rem;
        font-weight: 600;
        color: #fff;
        background: linear-gradient(to top, rgba(15, 15, 15, 0.75), rgba(15, 15, 15, 0));
        opacity: 0;
        transition: opacity 0.15s;
    }
    .ig-tile:hover .ig-tile__title,
    .ig-tile:focus-visible .ig-tile__title { opacity: 1; }
}
/* Phones: 2 columns, so the pictures grow too. */
@media (max-width: 640px) {
    .ig-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
    .ig-tile { border-radius: 8px; }
}
