← back to Paul Conrad Cartoons Shadowman

artifact/index.html

379 lines

<title>Conrad Cartoon Index</title>
<style>
  @import url('https://fonts.googleapis.com/css2?family=Oswald:wght@300;500;700&family=Newsreader:ital,opsz,wght@0,6..72,400;0,6..72,600;1,6..72,400&display=swap');

  :root {
    --paper: #eceae1;
    --card: #f5f3ec;
    --ink: #17150f;
    --ink-soft: #57534a;
    --line: #d5d1c5;
    --red: #a11e12;
    --gold: #8a6d24;
    --doc: #2f5d43;
    --arc: #7a5a1e;
    color-scheme: light;
  }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
      --paper: #16140e;
      --card: #201d15;
      --ink: #ece7d8;
      --ink-soft: #a49d8b;
      --line: #332f25;
      --red: #e0694e;
      --gold: #d0b25f;
      --doc: #6fbf8f;
      --arc: #d9b25f;
      color-scheme: dark;
    }
  }
  :root[data-theme="dark"] {
    --paper: #16140e;
    --card: #201d15;
    --ink: #ece7d8;
    --ink-soft: #a49d8b;
    --line: #332f25;
    --red: #e0694e;
    --gold: #d0b25f;
    --doc: #6fbf8f;
    --arc: #d9b25f;
    color-scheme: dark;
  }

  * { box-sizing: border-box; }
  body {
    margin: 0;
    background: var(--paper);
    color: var(--ink);
    font-family: "Newsreader", Georgia, serif;
    font-size: 16px;
    line-height: 1.5;
  }
  .wrap { max-width: 1160px; margin: 0 auto; padding-inline: 20px; }

  /* masthead */
  header.masthead {
    border-bottom: 3px solid var(--ink);
    padding-block: 26px 18px;
    text-align: center;
  }
  .kicker {
    font-family: "Oswald", system-ui, sans-serif;
    font-weight: 500;
    letter-spacing: .28em;
    text-transform: uppercase;
    font-size: 11px;
    color: var(--red);
    margin-bottom: 6px;
  }
  header.masthead h1 {
    font-family: "Oswald", system-ui, sans-serif;
    font-weight: 700;
    letter-spacing: .01em;
    font-size: clamp(30px, 6vw, 56px);
    line-height: .98;
    margin: 0;
    text-transform: uppercase;
    text-wrap: balance;
  }
  header.masthead .life { font-weight: 300; color: var(--ink-soft); }
  header.masthead .dek {
    max-width: 60ch;
    margin: 12px auto 0;
    color: var(--ink-soft);
    font-size: 15px;
  }
  .prizes {
    display: flex; gap: 10px; justify-content: center; flex-wrap: wrap;
    margin-top: 14px;
  }
  .prize {
    font-family: "Oswald", system-ui, sans-serif;
    font-size: 12px; letter-spacing: .08em; text-transform: uppercase;
    border: 1px solid var(--gold); color: var(--gold);
    padding: 4px 10px; border-radius: 2px;
  }

  /* controls */
  .toolbar {
    position: sticky; top: env(safe-area-inset-top, 0px); z-index: 5;
    background: var(--paper);
    border-bottom: 1px solid var(--line);
    display: flex; flex-wrap: wrap; align-items: center; gap: 14px 18px;
    padding-block: 12px;
  }
  .toolbar label {
    font-family: "Oswald", system-ui, sans-serif;
    font-size: 11px; letter-spacing: .12em; text-transform: uppercase;
    color: var(--ink-soft); margin-right: 6px;
  }
  select, input[type="search"] {
    font-family: "Newsreader", Georgia, serif; font-size: 15px;
    background: var(--card); color: var(--ink);
    border: 1px solid var(--line); border-radius: 2px; padding: 6px 9px;
  }
  input[type="search"] { min-width: 190px; flex: 1 1 190px; }
  input[type="range"] { accent-color: var(--red); width: 120px; vertical-align: middle; }
  .count { margin-left: auto; font-family: "Oswald", system-ui, sans-serif; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--ink-soft); }

  /* facet chips */
  .facets { display: flex; flex-wrap: wrap; gap: 8px; padding-block: 14px 4px; }
  .chip {
    font-family: "Oswald", system-ui, sans-serif;
    font-size: 12px; letter-spacing: .05em;
    background: none; color: var(--ink-soft);
    border: 1px solid var(--line); border-radius: 999px;
    padding: 4px 12px; cursor: pointer;
  }
  .chip[aria-pressed="true"] { color: var(--paper); background: var(--ink); border-color: var(--ink); }
  .chip.clear { border-style: dashed; }

  /* grid */
  main { padding-block: 8px 60px; }
  .grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(var(--col, 260px), 1fr));
    gap: 16px;
    margin-top: 12px;
  }
  .card {
    background: var(--card);
    border: 1px solid var(--line);
    border-left: 3px solid var(--rail, var(--line));
    border-radius: 3px;
    padding: 14px 16px;
    cursor: pointer;
    display: flex; flex-direction: column; gap: 8px;
    text-align: left;
    color: inherit; font: inherit;
  }
  .card:hover { border-color: var(--ink-soft); }
  .card:focus-visible { outline: 2px solid var(--red); outline-offset: 2px; }
  .card[data-rt="documented"] { --rail: var(--doc); }
  .card[data-rt="collection-summary"] { --rail: var(--arc); }
  .card[data-award="1"] { --rail: var(--red); }
  .card .date {
    font-family: "Oswald", system-ui, sans-serif;
    font-size: 12px; letter-spacing: .06em; color: var(--ink-soft);
    font-variant-numeric: tabular-nums;
  }
  .card .title { font-size: 18px; font-weight: 600; line-height: 1.25; }
  .card .subj { font-size: 14px; color: var(--ink-soft); flex: 1; }
  .card .tags { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 2px; }
  .tag {
    font-family: "Oswald", system-ui, sans-serif;
    font-size: 10px; letter-spacing: .08em; text-transform: uppercase;
    padding: 2px 7px; border-radius: 2px; color: var(--paper);
  }
  .tag.documented { background: var(--doc); }
  .tag.collection-summary { background: var(--arc); }
  .tag.award { background: var(--red); }
  .tag.pub { background: none; color: var(--ink-soft); border: 1px solid var(--line); }
  .empty { padding: 50px 0; text-align: center; color: var(--ink-soft); font-style: italic; }

  /* modal */
  .backdrop {
    position: fixed; inset: 0; background: rgba(0,0,0,.55);
    display: none; align-items: center; justify-content: center; padding: 20px; z-index: 40;
  }
  .backdrop.open { display: flex; }
  .modal {
    background: var(--card); color: var(--ink);
    border: 1px solid var(--line); border-top: 4px solid var(--red);
    border-radius: 4px; max-width: 640px; width: 100%;
    max-height: 86vh; overflow-y: auto; padding: 24px 26px; position: relative;
  }
  .modal .x {
    position: absolute; top: 12px; right: 14px; background: none; border: none;
    font-size: 24px; line-height: 1; cursor: pointer; color: var(--ink-soft);
  }
  .modal .m-kicker { font-family: "Oswald", system-ui, sans-serif; font-size: 12px; letter-spacing: .1em; text-transform: uppercase; color: var(--red); }
  .modal h2 { font-family: "Oswald", system-ui, sans-serif; font-weight: 700; font-size: 26px; margin: 4px 0 2px; text-wrap: balance; }
  .modal .m-date { color: var(--ink-soft); font-size: 14px; margin-bottom: 16px; font-variant-numeric: tabular-nums; }
  .modal dl { display: grid; grid-template-columns: 120px 1fr; gap: 8px 16px; margin: 0; font-size: 15px; }
  .modal dt { font-family: "Oswald", system-ui, sans-serif; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--ink-soft); padding-top: 2px; }
  .modal dd { margin: 0; }
  .modal a { color: var(--red); }
  .modal .rights { margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--line); font-size: 13px; font-style: italic; color: var(--ink-soft); }

  footer { border-top: 1px solid var(--line); padding-block: 20px 30px; color: var(--ink-soft); font-size: 13px; }
  footer a { color: var(--red); }

  @media (max-width: 520px) {
    .modal dl { grid-template-columns: 1fr; gap: 2px; }
    .modal dt { margin-top: 8px; }
  }
</style>

<header class="masthead">
  <div class="wrap">
    <div class="kicker">Catalogue of an Editorial Cartoonist</div>
    <h1>Paul Conrad <span class="life">1924&ndash;2010</span></h1>
    <p class="dek" id="dek"></p>
    <div class="prizes" id="prizes"></div>
  </div>
</header>

<div class="wrap">
  <div class="toolbar">
    <span><label for="q">Search</label><input type="search" id="q" placeholder="title, subject, year&hellip;"></span>
    <span><label for="sort">Sort</label>
      <select id="sort">
        <option value="year-asc">Year &uarr;</option>
        <option value="year-desc">Year &darr;</option>
        <option value="title">Title A&ndash;Z</option>
        <option value="award">Prizes first</option>
      </select>
    </span>
    <span><label for="density">Density</label><input type="range" id="density" min="200" max="380" step="20" value="260"></span>
    <span class="count" id="count"></span>
  </div>
  <div class="facets" id="facets"></div>
</div>

<main class="wrap">
  <div class="grid" id="grid"></div>
  <div class="empty" id="empty" hidden>No entries match these filters.</div>
</main>

<footer class="wrap">
  <p><strong>On the images.</strong> No public-domain or open-license Paul Conrad cartoon exists &mdash; every work is copyright the Los Angeles Times or the Conrad estate. This index therefore hosts no cartoon images; each entry links to the holding archive or retrospective where the work can be viewed.</p>
  <p id="sources"></p>
</footer>

<div class="backdrop" id="backdrop"><div class="modal" id="modal" role="dialog" aria-modal="true"></div></div>

<script>
const DATA = {"bio":{"name":"Paul Francis Conrad","born":"1924-06-27, Cedar Rapids, Iowa","died":"2010-09-04, Rancho Palos Verdes, California","education":"University of Iowa, art degree, 1950","career":"Denver Post editorial cartoonist 1950-1964; Los Angeles Times chief editorial cartoonist 1964-1993; syndicated ~4 cartoons/week thereafter into 2008","honors":"Pulitzer Prize for Editorial Cartooning 1964, 1971, 1984; Robert F. Kennedy Journalism Award 1985/1990/1992/1993; AAEC Lifetime Achievement Award 1998; placed on Nixon's Enemies List 1973; held the Richard M. Nixon Chair at Whittier College 1977-78","family":"Wife Kay King (m. 1953); children Jamie, David, Carol, Libby; twin brother James","citation_url":"https://en.wikipedia.org/wiki/Paul_Conrad"},"records":[{"id":"pulitzer-1964","title":"Pulitzer Prize for Editorial Cartooning (1964)","date":"1964","publication":"Denver Post","subject":"Body of editorial cartooning during the prior year. Citation (verbatim): \"For his editorial cartooning during the past year.\" The prize is a year-of-work award; no single cartoon is named.","award":"Pulitzer Prize for Editorial Cartooning 1964","record_type":"documented","rights_note":"Official Pulitzer winner page names no specific cartoon and displays no image.","citation_url":"https://www.pulitzer.org/winners/paul-conrad"},{"id":"pulitzer-1971","title":"Pulitzer Prize for Editorial Cartooning (1971)","date":"1971","publication":"Los Angeles Times","subject":"Body of editorial cartooning during 1970 (Nixon era, Vietnam War). Year-of-work award; no single cartoon named.","award":"Pulitzer Prize for Editorial Cartooning 1971","record_type":"documented","rights_note":"No specific cartoon named; no official image.","citation_url":"https://www.pulitzer.org/winners/paul-conrad"},{"id":"pulitzer-1984","title":"Pulitzer Prize for Editorial Cartooning (1984)","date":"1984","publication":"Los Angeles Times","subject":"Body of editorial cartooning during the prior year (Reagan-era themes: homelessness, nuclear arms, corporate/political power). Year-of-work award; no single cartoon named.","award":"Pulitzer Prize for Editorial Cartooning 1984","record_type":"documented","rights_note":"No specific cartoon named; no official image displayed.","citation_url":"https://www.pulitzer.org/winners/paul-conrad"},{"id":"obit-phone-company-1972","title":"He says he's from the phone company…","date":"1972-06-18","publication":"Los Angeles Times","subject":"Watergate break-in — earliest cartoon linking Nixon to it (Democrats suspicious of a Nixon 'repairman' at the door)","award":null,"record_type":"documented","rights_note":"© Los Angeles Times / Conrad estate. Low-res reproduction shown for private reference only; view in context at the source.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-political-cartoons/"},{"id":"obit-worst-enemy-1973","title":"His Own Worst Enemy","date":"1973","publication":"Los Angeles Times","subject":"Nixon surrounded by the pages of his enemies list","award":null,"record_type":"documented","rights_note":"© Los Angeles Times / Conrad estate. Low-res reproduction shown for private reference only.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-political-cartoons/"},{"id":"obit-spiders-web-1973","title":"Nixon caught in the Watergate spider web","date":"1973","publication":"Los Angeles Times","subject":"Co-conspirators' names woven into the web","award":null,"record_type":"documented","rights_note":"© Los Angeles Times / Conrad estate. Low-res reproduction shown for private reference only.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-political-cartoons/"},{"id":"obit-come-get-me-1974","title":"If you want me, you're gonna have to come in and get me!","date":"1974","publication":"Los Angeles Times","subject":"Nixon barricaded in the White House in his final Watergate days","award":null,"record_type":"documented","rights_note":"© Los Angeles Times / Conrad estate. Low-res reproduction shown for private reference only.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-political-cartoons/"},{"id":"obit-lbj-hubert-1968","title":"We're Gonna' Make History, Hubert!!","date":"1968","publication":"Los Angeles Times","subject":"LBJ and Hubert Humphrey riding a falling bomb — Vietnam War / 1968 campaign","award":null,"record_type":"documented","rights_note":"© Los Angeles Times / Conrad estate. Low-res reproduction shown for private reference only.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-political-cartoons/"},{"id":"obit-reagan-gothic-1986","title":"Reagan 'American Gothic'","date":"1986","publication":"Los Angeles Times","subject":"Ronald and Nancy Reagan as the Grant Wood farm couple — 1980s farm crisis / foreclosures","award":null,"record_type":"documented","rights_note":"© Los Angeles Times / Conrad estate. Low-res reproduction shown for private reference only.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-political-cartoons/"},{"id":"obit-clinton-horn-1994","title":"Young Man With a Horn","date":"1994","publication":"Los Angeles Times","subject":"Clinton playing a sax into the Republican elephant's trunk — accommodating the GOP agenda (post-LA Times syndicated work)","award":null,"record_type":"documented","rights_note":"© Los Angeles Times / Conrad estate. Low-res reproduction shown for private reference only.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-political-cartoons/"},{"id":"obit-palin-2008","title":"Sarah Palin with the slain Republican elephant","date":"2008","publication":"Syndicated (post-LA Times)","subject":"Palin holding a smoking gun and the dead elephant's trunk — the 2008 GOP","award":null,"record_type":"documented","rights_note":"© Conrad estate. Low-res reproduction shown for private reference only.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-political-cartoons/"},{"id":"obit-cuckoos-nest-1974","title":"One flew over the cuckoo's nest","date":"1974-08","publication":"Los Angeles Times","subject":"Nixon's helicopter departing the White House at his resignation","award":null,"record_type":"documented","rights_note":"Described in the 2010 Associated Press obituary; no rights-clear image located.","citation_url":"https://www.nevadaappeal.com/news/2010/sep/05/pulitzer-winning-cartoonist-paul-conrad-dies-at-86/"},{"id":"obit-nixon-cross-1974","title":"Nixon nailing himself to a cross","date":"1974","publication":"Los Angeles Times","subject":"Nixon crucifying himself in his last days — Conrad called it one of his all-time favorites","award":null,"record_type":"documented","rights_note":"Described in Wikipedia and the LOC LCIB profile; no rights-clear image located.","citation_url":"https://en.wikipedia.org/wiki/Paul_Conrad"},{"id":"obit-yorty-1969","title":"Sam Yorty as delusional","date":"1969","publication":"Los Angeles Times","subject":"LA Mayor imagining himself as Nixon's Secretary of Defense — prompted the unsuccessful Yorty v. Chandler libel suit","award":null,"record_type":"documented","rights_note":"Described in Wikipedia and the Toons Mag profile.","citation_url":"https://en.wikipedia.org/wiki/Paul_Conrad"},{"id":"obit-apollo1-1967","title":"Apollo 1 tragedy — 'I thought you knew, I've been aboard on every flight'","date":"1967-01-27","publication":"Los Angeles Times","subject":"Death in a spacesuit holding Mercury and Gemini craft, smoldering Apollo behind — the Apollo 1 fire","award":null,"record_type":"documented","rights_note":"Described in the Encyclopedia.com entry.","citation_url":"https://www.encyclopedia.com/humanities/encyclopedias-almanacs-transcripts-and-maps/conrad-paul"},{"id":"obit-apollo11-1969","title":"Apollo 11 moon landing (a mailbox already planted for a Moon resident)","date":"1969-07-20","publication":"Los Angeles Times","subject":"First Moon landing","award":null,"record_type":"documented","rights_note":"Described in the Encyclopedia.com entry.","citation_url":"https://www.encyclopedia.com/humanities/encyclopedias-almanacs-transcripts-and-maps/conrad-paul"},{"id":"obit-moratorium-1969","title":"Vietnam Moratorium — 'If only there'd been a Vietnam moratorium five years ago'","date":"1969","publication":"Los Angeles Times","subject":"Ghosts of dead soldiers marching over Washington, D.C. — the anti-war moratorium","award":null,"record_type":"documented","rights_note":"Described in the Encyclopedia.com entry (year given; exact day uncertain).","citation_url":"https://www.encyclopedia.com/humanities/encyclopedias-almanacs-transcripts-and-maps/conrad-paul"},{"id":"obit-burro-denver","title":"Reporter riding a worn burro backwards","date":"1950s–1963","publication":"Denver Post","subject":"Media criticism — the press getting the story 'ass-backwards'","award":null,"record_type":"documented","rights_note":"Described in the Encyclopedia.com entry.","citation_url":"https://www.encyclopedia.com/humanities/encyclopedias-almanacs-transcripts-and-maps/conrad-paul"},{"id":"obit-nast-1982","title":"Affixing Blame for Our Economic Problems","date":"1982-09-30","publication":"Los Angeles Times","subject":"After Thomas Nast's 1871 'Who Stole the People's Money?' ring cartoon — Reagan-era economy / passing the blame","award":null,"record_type":"documented","rights_note":"Described in the Spartacus Educational profile.","citation_url":"https://spartacus-educational.com/ARTconrad.htm"},{"id":"obit-reagan-selfportrait-1984","title":"Self-portrait begging for four more years for Ronald Reagan","date":"1984-11-07","publication":"Los Angeles Times","subject":"Reagan's re-election","award":null,"record_type":"documented","rights_note":"Described in the Library of Congress LCIB profile.","citation_url":"https://www.loc.gov/loc/lcib/9910/conrad.html"},{"id":"obit-littlerock-1958","title":"Eisenhower and Little Rock school desegregation","date":"1958","publication":"Denver Post","subject":"Civil rights / school integration","award":null,"record_type":"documented","rights_note":"Listed in The Pop History Dig retrospective.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-enemies-list/"},{"id":"obit-lbj-blankcheck-1964","title":"LBJ signing a blank check for the Vietnam War","date":"1964","publication":"Los Angeles Times","subject":"Gulf of Tonkin / open-ended Vietnam commitment","award":null,"record_type":"documented","rights_note":"Listed in The Pop History Dig retrospective.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-enemies-list/"},{"id":"obit-ford-pardon-1974","title":"Gerald Ford and the Nixon pardon","date":"1974-09","publication":"Los Angeles Times","subject":"Ford's pardon of Nixon","award":null,"record_type":"documented","rights_note":"Listed in The Pop History Dig retrospective.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-enemies-list/"},{"id":"obit-richard-ii-1973","title":"Nixon as Shakespeare's King Richard II","date":"1973","publication":"Los Angeles Times","subject":"Nixon's decline / Watergate","award":null,"record_type":"documented","rights_note":"Listed in The Pop History Dig retrospective.","citation_url":"https://pophistorydig.com/topics/tag/paul-conrad-enemies-list/"},{"id":"obit-popepaulvi-1977","title":"Pope Paul VI as a baby","date":"1977","publication":"Los Angeles Times","subject":"Catholic Church doctrine / women's ordination — Cardinal Timothy Manning objected","award":null,"record_type":"documented","rights_note":"Described in the Toons Mag profile.","citation_url":"https://www.toonsmag.com/paul-conrad/"},{"id":"loc-sl-hud-1989","title":"S&L's and HUD","date":"1989-07-16","publication":"Los Angeles Times","subject":"Savings & Loan / HUD scandals vs. Teapot Dome; pot-calling-kettle-black","award":null,"record_type":"documented","rights_note":"May be restricted: Copyright 1989, The Los Angeles Times. LOC holds a digitized copy — view via the catalog link; not embedded here.","citation_url":"https://www.loc.gov/item/2016685149/"},{"id":"loc-death-row-1991","title":"Death row","date":"1991-04-19","publication":"Los Angeles Times","subject":"Six Supreme Court justices in a row; capital punishment","award":null,"record_type":"documented","rights_note":"May be restricted: Copyright 1991, The Los Angeles Times. LOC holds a digitized copy — view via the catalog link.","citation_url":"https://www.loc.gov/item/2016685127/"},{"id":"loc-disarmament-1961","title":"My disarmament plan is better than your disarmament plan!","date":"1961","publication":"Denver Post","subject":"Cold War disarmament posturing","award":null,"record_type":"documented","rights_note":"Rights status not evaluated by LOC — treat as non-embeddable.","citation_url":"https://www.loc.gov/item/2005685912/"},{"id":"loc-herblock-2000","title":"[Herblock as George Washington]","date":"2000","publication":"Other","subject":"Caricature of cartoonist Herblock as George Washington","award":null,"record_type":"documented","rights_note":"Publication may be restricted — treat as non-embeddable.","citation_url":"https://www.loc.gov/item/00652290/"},{"id":"loc-inheritance-1990","title":"We spent your children's and your grandchildren's inheritance","date":"1990","publication":"Los Angeles Times","subject":"Deficit / generational debt","award":null,"record_type":"documented","rights_note":"May be restricted: Copyright 1990, Los Angeles Times.","citation_url":"https://www.loc.gov/item/2016685135/"},{"id":"loc-nra-pacifier-1982","title":"NRA pacifier","date":"1982","publication":"Los Angeles Times","subject":"Gun politics / NRA","award":null,"record_type":"documented","rights_note":"May be restricted: Copyright 1982, The Los Angeles Times.","citation_url":"https://www.loc.gov/item/2016685176/"},{"id":"loc-southamerica-1959","title":"Hereafter, dear, I'll be the 'expert' on South America","date":"1959","publication":"Denver Post","subject":"Foreign-relations / South America policy","award":null,"record_type":"documented","rights_note":"May be restricted — no affirmative open statement; treat as non-embeddable.","citation_url":"https://www.loc.gov/item/2016680206/"},{"id":"loc-barroom-1989","title":"The face on the barroom floor","date":"1989","publication":"Los Angeles Times","subject":"Political commentary (1989)","award":null,"record_type":"documented","rights_note":"May be restricted: Copyright 1989, The Los Angeles Times.","citation_url":"https://www.loc.gov/item/2016685150/"},{"id":"loc-naked-truth-1987","title":"The naked truth","date":"1987","publication":"Los Angeles Times","subject":"Political commentary (1987)","award":null,"record_type":"documented","rights_note":"May be restricted: Copyright 1987, The Los Angeles Times.","citation_url":"https://www.loc.gov/item/2016685157/"},{"id":"loc-black-teen-unemployment-1977","title":"Black teen-agers 40% unemployed. --news item","date":"1977","publication":"Los Angeles Times","subject":"Black youth unemployment","award":null,"record_type":"documented","rights_note":"May be restricted: Copyright 1977, Los Angeles Times.","citation_url":"https://www.loc.gov/item/2016685134/"},{"id":"coll-huntington","title":"Paul Conrad Papers — The Huntington Library","date_range":"1950–2005","publication":null,"subject":"The largest and most complete Conrad archive: original cartoons, rough sketches, correspondence (fan mail, hate mail, letters from figures incl. Gerald Ford), book/speech/lecture and lawsuit files (Yorty; Union Oil's Hartley; Mauldin 'Willie and Joe'), photographs, ephemera, tear sheets. Original cartoons begin 1959/1967 and run to 2003; original Denver Post cartoons are NOT held (only tear sheets).","award":null,"record_type":"collection-summary","extent":"272.41 linear feet (285 boxes). Identifier mssCON 1-12360. Cartoons in Boxes 1-106 + oversize 107-167, ~40-50 per box, each foldered.","rights_note":"No explicit access restriction stated. Preferred citation: '[item]. Paul Conrad Papers, The Huntington Library, San Marino, California.'","citation_url":"https://oac.cdlib.org/findaid/ark:/13030/c8z03dxd/"},{"id":"coll-syracuse","title":"Paul Conrad Cartoons — Syracuse University","date_range":"[1944?]–1986, bulk 1963–1969","publication":null,"subject":"More than one thousand original editorial cartoons, predominantly 1960s Los Angeles Times work, donated over the 1960s. The finding aid is a deep SUBJECT index (people, issues, events → box/folder) — the best route to hunt cartoons by theme — not a per-image digitized catalog.","award":null,"record_type":"collection-summary","extent":"~10 boxes; reported ~1,000+ original cartoons. Not stated in linear feet.","rights_note":"No access restriction noted in the guide.","citation_url":"https://library.syracuse.edu/digital/guides/c/conrad_p.htm"},{"id":"coll-wichita","title":"Cartoon Collection of Paul Conrad — Wichita State University","date_range":"1968–1971","publication":null,"subject":"Editorial cartoons originally submitted to the Los Angeles Times. Series 1 — Miscellaneous Items (undated); Series 2 — Political Cartoons (1968–1971).","award":null,"record_type":"collection-summary","extent":"2 linear feet. Identifier MS-90-18.","rights_note":"Literary rights NOT granted to Wichita State; permission to examine is not authorization to publish. Some items off-site (48h retrieval).","citation_url":"https://archivesspace.wichita.edu/repositories/3/resources/166"}]};
const BIO = DATA.bio || {};
const RECORDS = (DATA.records || []).map((r, i) => ({
  id: r.id || ('r'+i),
  title: r.title || 'Untitled',
  date: r.date || r.date_range || '',
  year: (String(r.date || r.date_range || '').match(/\d{4}/) || ['—'])[0],
  publication: r.publication || '',
  subject: r.subject || '',
  award: r.award || '',
  record_type: r.record_type || 'documented',
  extent: r.extent || '',
  rights_note: r.rights_note || '',
  citation_url: r.citation_url || ''
}));

const esc = s => String(s==null?'':s).replace(/[&<>"']/g, c => ({'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c]));
const el = id => document.getElementById(id);

let filters = { year:null, publication:null, record_type:null, awardOnly:false };

// masthead
el('dek').textContent = BIO.career
  ? (BIO.career + '. ' + (BIO.honors ? BIO.honors.split(';')[0] + '.' : ''))
  : 'Three-time Pulitzer Prize–winning editorial cartoonist.';
el('prizes').innerHTML = ['1964','1971','1984'].map(y => '<span class="prize">Pulitzer '+y+'</span>').join('');

// facets
function facetValues(field) {
  const m = new Map();
  for (const r of RECORDS) { const v = r[field]; if (v) m.set(v, (m.get(v)||0)+1); }
  return [...m.entries()].sort((a,b)=> b[1]-a[1] || String(a[0]).localeCompare(String(b[0])));
}
function renderFacets() {
  const parts = [];
  parts.push('<button class="chip" data-f="awardOnly" aria-pressed="'+(filters.awardOnly?'true':'false')+'">Pulitzer years</button>');
  for (const rt of ['documented','collection-summary']) {
    const n = RECORDS.filter(r=>r.record_type===rt).length; if (!n) continue;
    const label = rt==='documented' ? 'Documented' : 'Archive holdings';
    parts.push('<button class="chip" data-f="record_type" data-v="'+rt+'" aria-pressed="'+(filters.record_type===rt?'true':'false')+'">'+label+' · '+n+'</button>');
  }
  for (const [v,n] of facetValues('publication')) {
    parts.push('<button class="chip" data-f="publication" data-v="'+esc(v)+'" aria-pressed="'+(filters.publication===v?'true':'false')+'">'+esc(v)+' · '+n+'</button>');
  }
  if (filters.year || filters.publication || filters.record_type || filters.awardOnly)
    parts.push('<button class="chip clear" data-f="clear">Clear</button>');
  const f = el('facets'); f.innerHTML = parts.join('');
  f.querySelectorAll('.chip').forEach(c => c.addEventListener('click', () => {
    const k = c.dataset.f;
    if (k === 'clear') filters = { year:null, publication:null, record_type:null, awardOnly:false };
    else if (k === 'awardOnly') filters.awardOnly = !filters.awardOnly;
    else filters[k] = filters[k] === c.dataset.v ? null : c.dataset.v;
    renderFacets(); render();
  }));
}

function applied() {
  const q = el('q').value.trim().toLowerCase();
  return RECORDS.filter(r => {
    if (filters.publication && r.publication !== filters.publication) return false;
    if (filters.record_type && r.record_type !== filters.record_type) return false;
    if (filters.awardOnly && !r.award) return false;
    if (q) {
      const hay = [r.title, r.subject, r.publication, r.award, r.date].join(' ').toLowerCase();
      if (!hay.includes(q)) return false;
    }
    return true;
  });
}
function sorted(list) {
  const a = [...list], m = el('sort').value;
  if (m==='year-asc') a.sort((x,y)=> x.year.localeCompare(y.year) || x.title.localeCompare(y.title));
  else if (m==='year-desc') a.sort((x,y)=> y.year.localeCompare(x.year) || x.title.localeCompare(y.title));
  else if (m==='title') a.sort((x,y)=> x.title.localeCompare(y.title));
  else if (m==='award') a.sort((x,y)=> (y.award?1:0)-(x.award?1:0) || x.year.localeCompare(y.year));
  return a;
}

function render() {
  const list = sorted(applied());
  el('count').textContent = list.length + ' of ' + RECORDS.length;
  const g = el('grid');
  el('empty').hidden = list.length !== 0;
  g.innerHTML = list.map(r => {
    const tags = [
      '<span class="tag '+r.record_type+'">'+(r.record_type==='documented'?'Documented':'Archive')+'</span>',
      r.award ? '<span class="tag award">Pulitzer</span>' : '',
      r.publication ? '<span class="tag pub">'+esc(r.publication)+'</span>' : ''
    ].join('');
    return '<button class="card" data-id="'+r.id+'" data-rt="'+r.record_type+'" data-award="'+(r.award?1:0)+'">'
      + '<span class="date">'+esc(r.date || r.year)+'</span>'
      + '<span class="title">'+esc(r.title)+'</span>'
      + '<span class="subj">'+esc(r.subject)+'</span>'
      + '<span class="tags">'+tags+'</span></button>';
  }).join('');
  g.querySelectorAll('.card').forEach(c => c.addEventListener('click', () => openModal(c.dataset.id)));
}

function openModal(id) {
  const r = RECORDS.find(x => x.id === id); if (!r) return;
  el('modal').innerHTML =
    '<button class="x" id="mx" aria-label="Close">&times;</button>'
    + '<div class="m-kicker">'+(r.record_type==='documented'?'Cartoon':'Archive holding')+(r.award?' · Pulitzer':'')+'</div>'
    + '<h2>'+esc(r.title)+'</h2>'
    + '<div class="m-date">'+esc(r.date || r.year)+(r.publication?' · '+esc(r.publication):'')+'</div>'
    + '<dl>'
    + '<dt>Subject</dt><dd>'+esc(r.subject||'—')+'</dd>'
    + (r.award?'<dt>Award</dt><dd>'+esc(r.award)+'</dd>':'')
    + (r.extent?'<dt>Extent</dt><dd>'+esc(r.extent)+'</dd>':'')
    + '<dt>Source</dt><dd>'+(r.citation_url?'<a href="'+esc(r.citation_url)+'" target="_blank" rel="noopener noreferrer">'+esc(r.citation_url.replace(/^https?:\/\//,'').split('/')[0])+' &nearr;</a>':'—')+'</dd>'
    + '</dl>'
    + (r.rights_note?'<div class="rights">'+esc(r.rights_note)+'</div>':'');
  el('mx').addEventListener('click', closeModal);
  el('backdrop').classList.add('open');
}
function closeModal(){ el('backdrop').classList.remove('open'); }

el('backdrop').addEventListener('click', e => { if (e.target.id==='backdrop') closeModal(); });
document.addEventListener('keydown', e => { if (e.key==='Escape') closeModal(); });
el('q').addEventListener('input', render);
el('sort').addEventListener('change', render);
el('density').addEventListener('input', () => document.documentElement.style.setProperty('--col', el('density').value + 'px'));
document.documentElement.style.setProperty('--col', el('density').value + 'px');

// sources line
const srcHosts = [...new Set(RECORDS.map(r=>r.citation_url).filter(Boolean).map(u=>u.replace(/^https?:\/\//,'').split('/')[0]))];
el('sources').innerHTML = 'Compiled from ' + srcHosts.map(h=>esc(h)).join(' &middot; ') + '.';

renderFacets();
render();
</script>