.pl-card{border:1px solid #dcdcde;padding:16px;border-radius:10px;margin:16px 0;background:#fff}
.pl-muted{color:#666}
.pl-person-summary{display:grid;grid-template-columns:minmax(180px,240px) 1fr;gap:20px;align-items:start;margin:16px 0}
.pl-person-portrait{max-width:160px}.pl-person-portrait img,.pl-person-portrait-image{display:block;width:100%;height:auto;border-radius:12px;object-fit:cover}
.pl-person-letters-layout{display:grid;grid-template-columns:minmax(0,2fr) minmax(220px,1fr);gap:20px;align-items:start}
.pl-person-letters-main{min-width:0}
.pl-person-correspondents-side{border-left:1px solid #e5e7eb;padding-left:20px}
.pl-correspondents-list,.pl-person-letters-list{margin:12px 0 0 18px}
.pl-network-controls{margin:12px 0 18px}
.pl-network-controls-row{display:grid;grid-template-columns:minmax(240px,1fr) auto auto;gap:10px;align-items:center}
.pl-network{border:1px solid #e5e7eb;border-radius:12px;background:#fff}
@media (max-width: 900px){.pl-person-summary,.pl-person-letters-layout,.pl-network-controls-row{grid-template-columns:1fr}.pl-person-correspondents-side{border-left:0;padding-left:0;border-top:1px solid #e5e7eb;padding-top:16px}}

.pl-network-status{margin-top:10px}

.pl-letter-meta-front{--ca-portrait-size:160px}
.pl-person-portrait{max-width:var(--ca-portrait-size)}
.pl-card-style-classic .pl-card{box-shadow:0 1px 2px rgba(16,24,40,.06)}
.pl-card-style-compact .pl-card{padding:12px;border-radius:8px;margin:12px 0}
.pl-card-style-compact .pl-person-summary{gap:14px}
.pl-card-style-minimal .pl-card{border-color:#ececec;border-radius:8px;box-shadow:none;background:#fafafa}
.pl-card-style-minimal .pl-person-correspondents-side{border-left-color:#efefef}

.pl-letter-scans-admin{margin:16px 0 20px;padding:16px;border:1px solid #e5e7eb;border-radius:12px;background:#fff}
.pl-scan-admin-actions{display:flex;gap:10px;align-items:center;margin:8px 0 12px}
.pl-scan-admin-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.pl-scan-admin-item{display:grid;grid-template-columns:72px 1fr;gap:12px;align-items:center;border:1px solid #e5e7eb;border-radius:10px;padding:10px;background:#fafafa}
.pl-scan-admin-preview{width:72px;height:72px;display:flex;align-items:center;justify-content:center;border-radius:8px;background:#fff;border:1px solid #e5e7eb;overflow:hidden}
.pl-scan-admin-preview img{display:block;width:100%;height:100%;object-fit:cover}
.pl-scan-file-badge{display:inline-flex;align-items:center;justify-content:center;min-width:48px;min-height:48px;padding:6px 8px;border-radius:999px;background:#111827;color:#fff;font-size:12px;font-weight:700;letter-spacing:.04em}
.pl-letter-scans-front .pl-scan-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;margin-top:12px}
.pl-scan-card{display:flex;flex-direction:column;gap:10px;text-decoration:none;color:inherit;border:1px solid #e5e7eb;border-radius:12px;padding:12px;background:#fafafa}
.pl-scan-card:hover{border-color:#cbd5e1;box-shadow:0 1px 2px rgba(16,24,40,.06)}
.pl-scan-card-preview{display:flex;align-items:center;justify-content:center;min-height:160px;border-radius:10px;background:#fff;border:1px solid #e5e7eb;overflow:hidden}
.pl-scan-card-preview img{display:block;width:100%;height:160px;object-fit:cover}
.pl-scan-card-title{font-size:14px;line-height:1.4;word-break:break-word}


.pl-letter-page{margin-top:24px}
.pl-letter-page,.pl-letter-page *{box-sizing:border-box}
.pl-letter-page .pl-card{background:#fff;border:1px solid #e5e7eb;border-radius:18px;padding:22px;box-shadow:0 12px 30px rgba(15,23,42,.04)}
.pl-letter-hero{display:flex;justify-content:space-between;gap:24px;align-items:flex-start;background:linear-gradient(180deg,#ffffff 0%,#f8fafc 100%)}
.pl-letter-kicker{margin:0 0 8px;color:#64748b;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase}
.pl-letter-section-title,.pl-letter-block-title{margin:0 0 12px;line-height:1.2}
.pl-letter-section-title{font-size:28px}
.pl-letter-block-title{font-size:20px}
.pl-letter-lead{color:#334155;font-size:16px;line-height:1.75;max-width:70ch}
.pl-letter-date-chip{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;padding:10px 14px;border-radius:999px;background:#111827;color:#fff;font-size:14px;font-weight:700;white-space:nowrap}
.pl-meta-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.pl-meta-item{padding:14px 16px;border:1px solid #e5e7eb;border-radius:14px;background:#f8fafc}
.pl-meta-label{margin-bottom:6px;color:#64748b;font-size:13px;font-weight:700}
.pl-meta-value{color:#0f172a;line-height:1.65}
.pl-meta-value a{font-weight:600}
.pl-letter-columns{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(280px,.9fr);gap:20px;align-items:start;margin-top:20px}
.pl-letter-main-column,.pl-letter-side-column{display:grid;gap:20px}
.pl-letter-richtext{color:#1e293b;line-height:1.85}
.pl-letter-richtext p:last-child,.pl-letter-lead p:last-child{margin-bottom:0}
.pl-plain-list{margin:0;padding-left:18px}
.pl-plain-list li{margin:0 0 10px;line-height:1.6}
.pl-letter-scans-front .pl-scan-grid{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:16px}
.pl-scan-card{background:#fff;border-radius:14px}
.pl-scan-card-preview{min-height:220px}
.pl-scan-card-preview img{height:220px}
@media (max-width: 900px){.pl-meta-grid,.pl-letter-columns,.pl-letter-hero{grid-template-columns:1fr;display:grid}.pl-letter-hero{gap:16px}.pl-letter-date-chip{justify-self:start}}


/* Person page refresh */
.single-ca_person .post-thumbnail img,
.single-ca_person img.wp-post-image.attachment-post-thumbnail {
    display: none;
}
.ca-person-page{margin-top:16px}
.ca-person-hero{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(280px,1fr);gap:20px;align-items:start}
.ca-person-hero-main{display:flex;gap:16px;align-items:flex-start}
.ca-person-portrait-small{max-width:192px;flex:0 0 96px}
.ca-person-hero-text h3{margin:0 0 6px}
.ca-person-stats{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.ca-stat-badge{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid #e5e7eb;border-radius:999px;background:#fff;font-size:13px;line-height:1.2}
.ca-person-facts{display:grid;grid-template-columns:1fr;gap:10px}
.ca-person-facts div{padding:12px 14px;border:1px solid #e5e7eb;border-radius:12px;background:#fafafa}
.ca-person-facts span{display:block;color:#6b7280;font-size:12px;margin-bottom:4px}
.ca-person-facts strong{display:block;font-size:14px;line-height:1.45}
.ca-person-content-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(240px,1fr);gap:20px;align-items:start;margin-top:20px}
.ca-section-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.ca-section-heading h3{margin:0}
.ca-correspondents-chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.ca-correspondents-chips li{margin:0}
.ca-correspondents-chips a{display:inline-flex;padding:8px 12px;border-radius:999px;background:#f8fafc;border:1px solid #e5e7eb;text-decoration:none}
.ca-correspondents-chips a:hover{text-decoration:none;background:#fff}
.ca-person-letters-clean ul{margin-top:0}
.ca-person-timeline-wrap{margin-top:16px}

/* Simpler timeline */
.ca-timeline-simple{margin-top:0}
.ca-timeline-year-groups{display:grid;gap:14px}
.ca-timeline-year-group{border-top:1px solid #e5e7eb;padding-top:14px}
.ca-timeline-year-group:first-child{border-top:0;padding-top:0}
.ca-timeline-year-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.ca-timeline-year-head h4{margin:0}
.ca-timeline-entries{display:grid;gap:10px}
.ca-timeline-entry{display:grid;grid-template-columns:130px minmax(0,1fr);gap:14px;padding:12px 14px;border:1px solid #e5e7eb;border-radius:12px;background:#fafafa}
.ca-timeline-entry-date{font-weight:600}
.ca-timeline-entry-title{font-weight:600;text-decoration:none}
.ca-timeline-entry-title:hover{text-decoration:underline}

@media (max-width: 900px){
    .ca-person-hero,.ca-person-content-grid,.ca-timeline-entry{grid-template-columns:1fr}
    .ca-person-hero-main{align-items:center}
}


/* Person page cleanup */
.single-ca_person .post-thumbnail,
.single-ca_person .post-thumbnail img,
.single-ca_person img.wp-post-image,
.single-ca_person .entry-thumbnail,
.single-ca_person .featured-image,
.single-ca_person .wp-block-post-featured-image {
    display: none !important;
}
.single-ca_person .entry-meta,
.single-ca_person .post-meta,
.single-ca_person .posted-on,
.single-ca_person .byline,
.single-ca_person time.entry-date,
.single-ca_person .entry-date,
.single-ca_person .post-date,
.single-ca_person .site-main article header .wp-block-post-date,
.single-ca_person .site-main article .wp-block-post-date {
    display: none !important;
}

/* Person portrait restore */
.ca-person-portrait-small img {
    display: block !important;
    width: 96px;
    height: 96px;
    object-fit: cover;
    border-radius: 50%;
}


/* Force visible small round portrait on person page */
.ca-person-portrait-small{
    width:192px;
    height:192px;
    flex:0 0 192px;
    border-radius:50%;
    overflow:hidden;
    background:#f3f4f6;
    border:1px solid #e5e7eb;
}
.ca-person-portrait-small .pl-person-portrait-image,
.ca-person-portrait-small img.pl-person-portrait-image{
    display:block !important;
    width:100% !important;
    height:100% !important;
    object-fit:cover;
    border-radius:50%;
}


/* Hide theme date output on single letter page */
.single-ca_letter .entry-meta,
.single-ca_letter .post-meta,
.single-ca_letter .posted-on,
.single-ca_letter time.entry-date,
.single-ca_letter .entry-date,
.single-ca_letter .post-date,
.single-ca_letter .wp-block-post-date,
.single-ca_letter .site-main article header .wp-block-post-date,
.single-ca_letter .site-main article .wp-block-post-date {
    display: none !important;
}


/* Extra hard hide for theme-generated date on single letter */
.single-ca_letter header .entry-meta,
.single-ca_letter .entry-header .entry-meta,
.single-ca_letter .entry-header .posted-on,
.single-ca_letter .inside-article > .entry-meta,
.single-ca_letter .inside-article > .post-meta,
.single-ca_letter article > .entry-meta,
.single-ca_letter article > .post-meta,
.single-ca_letter article header time,
.single-ca_letter article header .posted-on,
.single-ca_letter article header .entry-date,
.single-ca_letter article header .post-date {
    display: none !important;
    visibility: hidden !important;
    height: 0 !important;
    overflow: hidden !important;
    margin: 0 !important;
    padding: 0 !important;
}

.ca-geocode-status {
    display: inline-block;
    margin-left: 8px;
    color: #1d2327;
}
.ca-geocode-status-error {
    color: #b32d2e;
}

/* Map optimization: city drill-down and visible-letter sidebar. */
.ca-map-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(260px, 360px);
    gap: 16px;
    align-items: stretch;
}

.ca-map-canvas {
    min-height: 360px;
}

.ca-map-sidebar {
    max-height: 620px;
    overflow: auto;
    border: 1px solid #d9dee7;
    border-radius: 12px;
    padding: 14px;
    background: #fff;
}

.ca-map-sidebar h4,
.ca-map-sidebar h5 {
    margin: 0 0 10px;
}

.ca-map-sidebar h5 {
    margin-top: 16px;
    font-size: 14px;
}

.ca-map-sidebar p {
    margin: 0 0 10px;
}

.ca-map-letter-list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.ca-map-letter-list li {
    border-top: 1px solid #edf0f5;
    padding: 10px 0;
}

.ca-map-letter-list li:first-child {
    border-top: 0;
}

.ca-map-letter-list a {
    display: block;
    font-weight: 600;
    text-decoration: none;
}

.ca-map-letter-list span,
.ca-map-letter-list small {
    display: block;
    margin-top: 3px;
    color: #5b6472;
    font-size: 12px;
    line-height: 1.35;
}

.ca-city-marker {
    background: transparent;
    border: 0;
}

.ca-city-marker button {
    border: 2px solid rgba(37, 99, 235, 0.85);
    border-radius: 999px;
    background: rgba(37, 99, 235, 0.88);
    color: #fff;
    box-shadow: 0 8px 18px rgba(15, 23, 42, 0.24);
    cursor: pointer;
    font: inherit;
    line-height: 1;
}

.ca-city-marker button strong {
    display: block;
    font-size: 14px;
}

@media (max-width: 860px) {
    .ca-map-layout {
        grid-template-columns: 1fr;
    }

    .ca-map-sidebar {
        max-height: 420px;
    }
}


/* Full-width shortcode canvases for geographic map and correspondence graph. */
.ca-fullwidth {
    width: 100vw;
    max-width: 100vw;
    margin-left: calc(50% - 50vw);
    margin-right: calc(50% - 50vw);
    box-sizing: border-box;
    padding-left: clamp(12px, 2.5vw, 40px);
    padding-right: clamp(12px, 2.5vw, 40px);
}
.ca-fullwidth .pl-network,
.ca-fullwidth .pl-map,
.ca-fullwidth .ca-map-layout {
    width: 100%;
    max-width: none;
}
.ca-fullwidth-map .ca-map-canvas {
    min-height: min(72vh, 760px);
}
.ca-fullwidth-network .pl-network {
    min-height: min(72vh, 760px);
}
@media (max-width: 860px) {
    .ca-fullwidth {
        padding-left: 12px;
        padding-right: 12px;
    }
}

/* Inline time filter for the geographic correspondence map. */
.ca-map-time-filter {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 12px;
    align-items: center;
    margin: 0 0 14px;
    padding: 12px 14px;
    border: 1px solid #d9dee7;
    border-radius: 12px;
    background: #f8fafc;
}
.ca-map-time-filter label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin: 0;
}
.ca-map-time-filter input[type="number"] {
    width: 96px;
    max-width: 100%;
}
.ca-map-time-summary {
    color: #5b6472;
    font-size: 13px;
}


/* Person selector and color legend for geographic map route colors. */
.ca-map-controls {
    display: grid;
    grid-template-columns: 1fr;
    gap: 10px;
    margin: 0 0 14px;
}
.ca-map-person-filter {
    display: flex;
    flex-wrap: wrap;
    gap: 10px 12px;
    align-items: center;
    padding: 12px 14px;
    border: 1px solid #d9dee7;
    border-radius: 12px;
    background: #f8fafc;
}
.ca-map-person-filter label {
    display: inline-flex;
    flex: 1 1 520px;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
    min-width: 0;
    margin: 0;
}
.ca-map-person-select {
    min-width: min(360px, 70vw);
}
.ca-map-person-summary {
    color: #5b6472;
    font-size: 13px;
}
.ca-map-color-legend {
    display: inline-flex;
    flex-wrap: wrap;
    gap: 8px 12px;
    align-items: center;
    color: #5b6472;
    font-size: 13px;
}
.ca-map-color-legend span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
}
.ca-map-color-legend i {
    display: inline-block;
    width: 22px;
    height: 4px;
    border-radius: 999px;
}
.ca-line-neutral { background: #0ea5e9; }
.ca-line-sent { background: #2563eb; }
.ca-line-received { background: #dc2626; }
.ca-line-both { background: #7c3aed; }
@media (min-width: 980px) {
    .ca-map-controls {
        grid-template-columns: minmax(360px, 1fr) minmax(420px, 1fr);
        align-items: stretch;
    }
}
@media (max-width: 620px) {
    .ca-map-person-filter label,
    .ca-map-time-filter label {
        width: 100%;
        justify-content: space-between;
    }
    .ca-map-person-select {
        min-width: 0;
        width: 100%;
    }
}


.ca-map-person-filter label {
    gap: 6px;
}
.ca-map-person-label-text {
    display: inline-block;
    flex: 0 0 auto;
    white-space: nowrap;
}
.ca-map-person-search {
    flex: 1 1 260px;
    min-width: 220px;
    max-width: 100%;
}
.ca-map-person-reset {
    align-self: center;
}
@media (max-width: 700px) {
    .ca-map-person-label-text {
        white-space: normal;
    }
    .ca-map-person-search {
        min-width: 0;
        width: 100%;
    }
    .ca-map-person-reset {
        width: 100%;
    }
}
