/* =================================================================
 * 19. Mono metadata utility — system-info voice for dates/categories
 *     A single class applied to wrapping groups; descendants inherit.
 * ================================================================= */
.proof-meta-mono,
.proof-meta-mono * {
    font-family: var(--font-mono);
    font-size: var(--wp--preset--font-size--xs);
    color: var(--wp--preset--color--text-muted);
    letter-spacing: 0.02em;
    line-height: 1.4;
}
.proof-meta-mono {
    gap: 0.6rem;
    margin: 0;
}
.proof-meta-mono > * { margin: 0; }
.proof-meta-mono a {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px dotted color-mix(in srgb, var(--wp--preset--color--text-muted) 60%, transparent);
    transition: color 200ms ease, border-color 200ms ease;
}
.proof-meta-mono a:hover {
    color: var(--wp--preset--color--text-primary);
    border-bottom-color: var(--wp--preset--color--text-primary);
}
.proof-meta-mono__label {
    color: var(--wp--preset--color--accent);
    text-transform: uppercase;
    letter-spacing: 0.08em;
}

/* =================================================================
 * 19b. Single post — tags strip ("filed under") below the end marker
 * ================================================================= */
/* The tags strip is metadata, not a section break. The ⊕ tailpiece
   above and the strong "§ 评论" rule below already provide the
   bounding hairlines for this region; the previous double border on
   the tags strip competed with both and made tags look heavier than
   the article-end marker. Keep it as a quiet line of mono labels. */
.proof-post-tags {
    margin: var(--wp--preset--spacing--24) 0 var(--wp--preset--spacing--32);
    padding: 0;
    gap: 0.4rem;
}
.proof-post-tags .wp-block-post-terms a::before {
    content: "#";
    color: var(--wp--preset--color--text-muted);
    margin-right: 1px;
}
/* The block hides itself when no tags are assigned, but the wrapper
   group still paints rules. Collapse it via :has(). */
.proof-post-tags:not(:has(.wp-block-post-terms a)) {
    display: none;
}

/* =================================================================
 * 20. Single post — overline (above title) + deck (below title) +
 *     title rule. Mirrors the archive masthead's vocabulary so the
 *     reader does not feel a tonal break navigating section→article.
 * ================================================================= */

/* --- Overline (was .proof-kicker): § SECTION · DATE · VOL · NO --- */
.proof-kicker,
.proof-overline {
    /* Top margin tuned so the overline's text-top aligns with the
       desktop TOC's first link text-top. The TOC link has 6px of
       padding-top, which we mirror via spacing--12 here against the
       single template's spacing--32 main padding. */
    margin: var(--wp--preset--spacing--12) 0 var(--wp--preset--spacing--12);
}
.proof-overline {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 0.6em;
    font-family: var(--font-mono);
    font-size: var(--wp--preset--font-size--xxs);
    color: var(--wp--preset--color--text-secondary);
    letter-spacing: 0.08em;
    text-transform: uppercase;
}
.proof-overline__section {
    font-weight: 600;
    color: var(--wp--preset--color--text-primary);
}
.proof-overline__section-link {
    color: inherit;
    text-decoration: none;
    border-bottom: 1px dotted color-mix(in srgb, currentColor 50%, transparent);
    transition: color 200ms ease, border-color 200ms ease;
}
.proof-overline__section-link:hover {
    color: var(--wp--preset--color--accent);
    border-bottom-color: var(--wp--preset--color--accent);
}
.proof-overline__sep {
    color: var(--wp--preset--color--line);
}
.proof-overline__date {
    color: inherit;
    font-variant-numeric: tabular-nums;
}
.proof-overline__issue {
    font-weight: 600;
    color: var(--wp--preset--color--text-primary);
    font-variant-numeric: tabular-nums;
}

/* --- Deck / standfirst — sits between title and body. Treated as a
 *     newspaper "lede" (italic serif, slightly larger than body), NOT
 *     as a blockquote — no left border, no indent, no quote marks.
 *     The voice it carries is the publication's, not someone else's,
 *     so it should read continuous with the article, just typeset
 *     with more authority. --- */
/* Outer wrapper stays in the 780px constrained flow so its left edge
 * lines up with title / overline / body. Don't fight WP's
 * `margin-inline: auto !important` here — that's what gives us the
 * shared baseline. The 640px shorter measure is applied to the inner
 * paragraph instead, which then sits flush-left within the 780 slot. */
.proof-deck.wp-block-post-excerpt {
    font-family: var(--wp--preset--font-family--heading);
    font-size: clamp(1.1rem, 1.5vw, 1.35rem);
    font-style: italic;
    font-weight: 400;
    line-height: 1.6;
    letter-spacing: 0.005em;
    color: var(--wp--preset--color--text-secondary);
    margin-top: var(--wp--preset--spacing--20);
    margin-bottom: var(--wp--preset--spacing--16);
    padding: 0;
    border: 0;
}
.proof-deck p,
.proof-deck .wp-block-post-excerpt__excerpt {
    margin: 0;
    max-width: 640px;
}
.proof-deck a.wp-block-post-excerpt__more-link { display: none; }

/* --- Title rule: kept short + accent so it still reads as the
 *     headline's dingbat, not just another section divider. --- */
.proof-title-rule.wp-block-separator {
    border: 0;
    border-top: 1.5px solid var(--wp--preset--color--accent);
    width: 64px;
    margin: var(--wp--preset--spacing--24) auto var(--wp--preset--spacing--32) 0;
    opacity: 1;
    text-align: left;
}
.proof-title-rule.wp-block-separator::before { content: none; }

