/* Page system of the inner pages (catalogue, book, collections, authors, La Maison, contact, legal,
   search, 404): the shared part of the prototype's page-batch1.css (scripts/assets/page-batch1.css,
   ddf9b78). The book page's own part is in batch-book-page.css.
   WordPress adaptations are marked « WP: ». */
.batch-shell { width: min(100% - 64px, var(--container-max)); margin: 0 auto; padding: var(--page-top) 0 var(--chapter-gap); }
.site-main.batch-shell { margin-block-start: 0; }
.batch-shell a { color: inherit; }
/* WP: link buttons keep their white label on Bronze (CL-05). */
.batch-shell a.wp-element-button { color: var(--color-accent-text); }
/* WP: WooCommerce's breadcrumb block; the prototype's is a <nav> with the same look. */
.batch-breadcrumb { margin-bottom: var(--within-gap); font-size: .88rem; color: var(--color-text-muted); }
.batch-breadcrumb a { border-bottom: 1px solid transparent; text-decoration: none; }
.batch-breadcrumb a:hover { border-color: var(--color-accent); color: inherit; }
/* WP: the label is one editable paragraph; the brand dots are drawn before it (theme.css, .batch-label::before). */
.batch-label { display: flex; align-items: center; gap: 12px; margin: 0 0 22px; font-size: .82rem; font-weight: 600; letter-spacing: .14em; line-height: 1.55; text-transform: uppercase; }
.batch-intro { max-width: 900px; margin-bottom: var(--within-gap); }
.batch-intro h1, .batch-author-hero h1, .batch-collection-hero h1 { margin: 0 0 22px; font-family: var(--font-display); font-weight: 400; line-height: .98; }
.batch-intro h1 { font-size: clamp(4rem, 7vw, 6.5rem); }
.batch-intro > p:not(.batch-label), .batch-summary { max-width: 720px; font-size: 1.28rem; line-height: 1.55; }
.batch-section { margin-top: var(--chapter-gap); }
.batch-section > h2 { margin: 0 0 var(--heading-gap); padding-bottom: 20px; border-bottom: 1px solid var(--color-accent); font-family: var(--font-body); font-size: clamp(2.25rem, 4vw, 3.4rem); font-weight: 600; }
.batch-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 24px; }
/* WP: WooCommerce's product button (its own wrapper and link). */
.batch-actions > * { margin: 0; }
.batch-actions .wp-element-button { min-height: 48px; padding: .62rem 1.35rem; border: 0; border-radius: var(--radius-pill); font-family: var(--font-body); font-size: 19px; font-weight: 700; }
.batch-actions .text-link { font-weight: 500; border-bottom: 1px solid var(--color-accent); }
.batch-price { margin: 22px 0; font-family: var(--font-body); font-size: 1.75rem; }
.batch-count { margin-top: 24px; font-weight: 500; }

/* Book cards (1.2): covers on one line, titles reserve two lines, the buttons line up at the bottom;
   long text wraps and nothing is cut. WP: a WooCommerce Product Collection; the product template <ul>
   is the grid and each product <li> the card. The prototype shares four subgrid tracks across a row,
   but its size container on the card turns the subgrid off (Chrome, Firefox) and a three-line title
   then runs into the author line; the card here is a column with the actions pushed to the bottom,
   which gives the prototype's look without the overlap. */
.batch-books { margin: 0; }
.batch-book-grid.batch-book-grid.wc-block-product-template { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 72px 24px; margin: 0; padding: 0; list-style: none; }
.batch-books .batch-book-grid.batch-book-grid.wc-block-product-template > li { display: flex; flex-direction: column; width: auto; min-width: 0; margin: 0; text-align: left; }
.batch-book-grid > li > * { margin: 0; }
/* A book filtered out (catalogue filter): hidden wins over the card's display: flex above. */
.batch-books .batch-book-grid.batch-book-grid.wc-block-product-template > li[hidden] { display: none; }
.batch-cover { display: grid; place-items: end center; height: 390px; margin-bottom: 20px !important; }
.batch-cover a { display: grid; place-items: end center; width: 100%; height: 100%; min-width: 0; min-height: 0; }
/* An auto-height image can keep its intrinsic grid minimum and paint over the following title
   when the cover slot gets shorter on tablets/phones. Give it a definite box, then contain the
   artwork within it: no cropping, stretching, clipping of focus rings, or hidden text. */
.batch-cover img { display: block; width: 100% !important; height: 100% !important; min-width: 0; min-height: 0; max-width: 100%; max-height: 100%; object-fit: contain; object-position: center bottom; }
.batch-book-grid :is(h2, h3) { min-height: 2.2em; margin: 0 0 7px !important; font-family: var(--font-body); font-size: 1.55rem; font-weight: 600; line-height: 1.1; text-align: left; }
/* As the prototype (site.css): h2 keeps its -.025em, h3 has none. */
.batch-book-grid h3 { letter-spacing: 0; }
.batch-book-grid :is(h2, h3) a:hover { color: var(--color-accent); }
/* WP: « author · price » from the author terms and WooCommerce's price, kept on one line as the
   prototype's text. */
.batch-book-meta { margin: 0 0 16px !important; line-height: 1.4; }
/* Author and price each on their own line under the title (client feedback, 12 Oct 2026, G3). */
.batch-book-meta { display: grid; gap: 2px; }
.batch-book-meta > *, .batch-book-meta .wc-block-components-product-price { display: block; margin: 0; font-size: inherit; font-weight: inherit; text-align: left; }
.batch-book-meta .book-card-price { color: var(--color-text-muted); }
.batch-book-meta .book-author a { text-decoration: none; }
.batch-book-meta .wc-block-components-product-price { padding: 0; }
/* WP: the prototype made each card a size container for the rule below, but size containment turns
   the subgrid off (Chrome, Firefox), so long titles ran into the author line. The actions row is the
   container instead (same width as the card) and wraps into a column under the same width. */
.batch-book-grid .batch-actions { margin-top: auto !important; flex-wrap: wrap; gap: 12px 16px; container-type: inline-size; }
/* Client feedback round 1: « En savoir plus » under « Acheter » on every book card. */
.batch-book-grid .batch-actions { flex-direction: column; align-items: flex-start; }
.batch-book-grid .batch-actions .wp-element-button { flex: none; padding-inline: 1.1rem; white-space: nowrap; }
.batch-book-grid .batch-actions .text-link { white-space: nowrap; }
/* Too narrow for both side by side: every card in the grid is the same width, so the whole row
   stacks together at that width, never one card alone. */
@container (max-width: 263px) {
  .batch-book-grid .batch-actions > * { flex: 0 0 100%; }
  .batch-book-grid .batch-actions .wp-element-button { width: 100%; }
  .batch-book-grid .batch-actions > .text-link { flex: 0 0 auto; }
}

/* WP: theme-block parts are display: contents, so their prototype markup lays out as in the prototype. */
.lea-part { display: contents; }

/* Catalogue toolbar (/livres/) */
.batch-catalogue-toolbar { display: flex; align-items: flex-start; justify-content: space-between; gap: 36px; padding: 0 0 24px; margin-bottom: var(--heading-gap); border-bottom: 1px solid var(--color-accent); }
.batch-catalogue-toolbar nav { display: flex; flex-wrap: wrap; gap: 14px 25px; }
.batch-catalogue-toolbar nav a { display: inline-flex; align-items: center; min-height: 44px; padding-bottom: 2px; border-bottom: 2px solid transparent; font-weight: 500; text-decoration: none; }
.batch-catalogue-toolbar nav a:hover, .batch-catalogue-toolbar nav a:focus-visible { color: var(--color-accent); }
.batch-catalogue-toolbar nav .is-current { border-bottom-color: var(--color-accent); }
/* The brand dots mark the current filter only. */
.batch-catalogue-toolbar .lea-dots { --dots-size: 8px; display: none; margin: 0 8px 0 0; }
.batch-catalogue-toolbar .is-current .lea-dots { display: inline-block; }
.batch-catalogue-toolbar p { flex: none; margin: 0; padding-top: 10px; }
.wc-block-product-template.is-filtering { animation: batch-fade 180ms var(--ease-standard); }
@keyframes batch-fade { from { opacity: .35; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) { .wc-block-product-template.is-filtering { animation: none; } }

/* Collection page */
.batch-collection-hero { display: grid; grid-template-columns: 260px 1fr; gap: 94px; align-items: end; max-width: 1100px; }
.batch-collection-hero > * { margin: 0; }
.batch-feature-spine { align-self: stretch; display: flex; align-items: end; border-bottom: 1px solid var(--color-accent); }
.collection-spine { display: flex; width: 150px; height: 520px; flex-direction: column; align-items: center; justify-content: space-between; padding: 22px 16px 26px; color: var(--color-text-inverse) !important; text-decoration: none; }
.collection-spine > span:last-child { writing-mode: vertical-rl; transform: rotate(180deg); font-family: var(--font-body); font-size: 2.5rem; font-weight: 600; }
.collection-spine--noir { background: var(--color-text); }
.collection-spine--bronze { background: var(--color-accent); }
.collection-spine--sable { border: 1px solid var(--color-text); background: var(--color-surface-alt); color: var(--color-text) !important; }
/* The dots stand on the spine like its title (bottom to top), in the spine's tone (inc/woocommerce.php). */
.collection-spine .lea-dots { --dots-size: 12px; }
.collection-spine--small .lea-dots { --dots-size: 10px; }
.batch-collection-hero h1 { font-size: clamp(5rem, 9vw, 8rem); }
.batch-baseline { margin: -8px 0 28px; color: var(--color-accent); font-family: var(--font-body); font-size: 2rem; font-style: normal; }
.batch-collection-hero .batch-label { margin-bottom: 22px; }
.batch-collection-hero p:not(.batch-label, .batch-baseline, .batch-count) { margin: 0 0 1rem; }
.batch-other-collections__shelf { display: flex; align-items: end; gap: 18px; border-bottom: 1px solid var(--color-accent); }
.collection-spine--small { width: 88px; height: 250px; padding: 12px 8px 14px; }
.collection-spine--small > span:last-child { font-size: 1.2rem; }
/* WP: the book grid's « no books yet » sentence. */
.batch-books .wc-block-product-collection__no-results, .batch-books .wp-block-woocommerce-product-collection-no-results { margin: 0; }

/* Manuscripts call to action between two Bronze lines (/collections/, La Maison) */
.manuscripts-cta { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 48px; align-items: center; margin-top: var(--chapter-gap); padding: 44px 0; border-top: 1px solid var(--color-accent); border-bottom: 1px solid var(--color-accent); scroll-margin-top: 110px; }
.manuscripts-cta > * { margin: 0; }
.manuscripts-cta h2 { max-width: 780px; margin: 0; font-family: var(--font-body); font-size: clamp(2.4rem, 4vw, 3.55rem); font-weight: 600; line-height: 1.08; }
.manuscripts-cta .wp-block-button__link { min-height: 52px; padding: .72rem 1.55rem; white-space: nowrap; }
.manuscripts-cta p:not(.batch-label) { max-width: 640px; margin: 18px 0 0; font-size: 1.15rem; }

/* Round portraits (authors, book page) */
.batch-portrait { position: relative; display: block; width: 132px; max-width: 100%; aspect-ratio: 1; overflow: hidden; border: 3px solid transparent; border-radius: 50%; transition: border-color var(--duration-fast), transform var(--duration-fast); }
.batch-portrait img { width: 100%; height: 100%; object-fit: cover; object-position: var(--portrait-position, 50% 30%); filter: grayscale(1); transform: scale(var(--portrait-zoom, 1)); }
.batch-author-eclipse { position: relative; width: fit-content; isolation: isolate; }
.batch-author-eclipse::before { content: ""; position: absolute; z-index: -1; inset: 0; border-radius: 50%; background: var(--color-accent); transform: translateX(-20%); }
.batch-reading { width: min(100%, var(--reading-width)); margin-right: auto; margin-left: auto; }
.batch-reading > div { font-size: 20px; line-height: 1.75; }
.batch-reading p { margin: 0 0 1.4em; }

/* Authors list (« Les portraits ») */
.batch-author-grid { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 56px 24px; }
.batch-author-tile { display: flex; min-width: 0; flex-direction: column; align-items: center; gap: 15px; text-align: center; text-decoration: none; }
.batch-author-tile > span:last-child { font-family: var(--font-body); font-size: 1.18rem; line-height: 1.12; font-weight: 600; }
.batch-author-tile:hover .batch-portrait, .batch-author-tile:focus-visible .batch-portrait, .batch-author-tile.is-active .batch-portrait { border-color: var(--color-accent); transform: scale(1.045); }
.batch-author-preview { max-width: 760px; margin-top: var(--within-gap); padding-top: 28px; border-top: 1px solid var(--color-accent); }
.batch-author-preview h2 { margin: 0 0 12px; font-family: var(--font-body); font-size: 2.55rem; font-weight: 600; }
.batch-author-preview h2 span[aria-hidden] { font-family: var(--font-body); font-size: 1rem; letter-spacing: .1em; }
.batch-author-preview p { margin: 0 0 1rem; font-size: 1.15rem; }
/* WP (owner review 1): with JavaScript the preview is a panel under the row of the hovered, focused or
   tapped author (blocks/author/view.js moves it into the grid after that row), spanning the row and
   pushing the next rows down; closed until then. Without JavaScript it stays under the grid with the
   first author, as in the prototype. Opening: height and fade, brief; none with reduced motion. */
.is-panel .batch-author-preview { display: none; grid-column: 1 / -1; max-width: none; margin: -16px 0 0; padding: 26px 0 30px; border-top: 1px solid var(--color-accent); border-bottom: 1px solid var(--color-accent); }
.is-panel .batch-author-preview.is-open { display: block; }
.is-panel .batch-author-preview > * { max-width: 760px; }
.is-panel .batch-author-preview > :last-child { margin-bottom: 0; }
@media (prefers-reduced-motion: no-preference) {
  .is-panel .batch-author-preview.is-switching > * { animation: batch-fade 180ms var(--ease-standard); }
}


/* Author page (« Le portrait révélé ») */
.batch-author-hero { display: grid; grid-template-columns: 360px 1fr; gap: 90px; align-items: center; max-width: 1040px; }
.batch-author-hero > * { min-width: 0; margin: 0; }
.batch-author-hero .batch-portrait { width: 330px; border: 0; }
.batch-author-hero h1 { font-size: clamp(4.4rem, 7vw, 6.2rem); }
.batch-biography { text-align: left; }
.batch-end-dots { margin: 34px 0 0; text-align: center; }
/* WP: the author's books are a WooCommerce Product Collection; each product <li> is the prototype's
   .batch-book-row (cover | text). */
.batch-book-rows .wc-block-product-template { display: block; margin: 0; padding: 0; border-top: 1px solid var(--color-accent); list-style: none; }
.batch-book-rows .wc-block-product-template > li { display: grid; grid-template-columns: 250px 1fr; gap: 54px; align-items: center; width: auto; margin: 0; padding: 52px 0; border-bottom: 1px solid var(--color-accent); text-align: left; }
.batch-book-rows .batch-cover { height: 330px; margin: 0 !important; }
.batch-book-row__text > * { margin: 0; }
.batch-book-rows h3 { margin: 12px 0 18px; font-family: var(--font-body); font-size: 2.4rem; font-weight: 600; letter-spacing: 0; text-align: left; }
.batch-book-rows .batch-book-excerpt { max-width: 650px; margin: 0 0 1rem; font-size: 1.08rem; line-height: 1.6; }
.batch-book-rows .batch-price, .batch-book-rows .batch-price .wc-block-components-product-price { margin: 22px 0; font-family: var(--font-body); font-size: 1.75rem; text-align: left; }
.batch-collection-link { font-size: .82rem; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; }
.batch-collection-link a { text-decoration: none; }
.batch-other-authors__list { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 28px; margin-bottom: 32px; }
.batch-other-authors__list > a { display: flex; flex-direction: column; align-items: center; gap: 12px; font-family: var(--font-body); text-align: center; text-decoration: none; font-weight: 600; }
.batch-other-authors__list > a[hidden] { display: none; }
.batch-portrait--small { width: 96px; }
.batch-other-authors > p { margin: 0; }

/* The author block (book page) */
.batch-book-author { display: grid; grid-template-columns: 280px 1fr; gap: 70px; align-items: center; max-width: 980px; }
.batch-book-author .batch-portrait { width: 250px; border: 0; }
.batch-book-author h2 { margin: 0 0 var(--heading-gap); border: 0; padding: 0; }
/* « Les voix de la collection » with one or two authors: the book page's author block, the name as an
   h3 at the authors preview's size; a second author below the first. With three or more, the row of
   « D'autres voix à part » above, unchanged. */
.batch-collection-voices .batch-book-author + .batch-book-author { margin-top: var(--within-gap); }
.batch-collection-voices .batch-book-author h3 { margin: 0 0 12px; font-family: var(--font-body); font-size: 2.55rem; font-weight: 600; line-height: 1.1; }
.batch-collection-voices .batch-book-author p:not(.batch-label) { max-width: 620px; margin: 0 0 1rem; font-size: 1.15rem; }

/* Related article rows */
.batch-article-list { border-top: 1px solid var(--color-accent); }
.batch-article-row { display: grid; grid-template-columns: 150px 1fr auto; gap: 28px; align-items: center; min-height: 116px; padding: 18px 0; border-bottom: 1px solid var(--color-accent); }
.batch-article-row:not(:has(img)) { grid-template-columns: 1fr auto; }
/* WP: .batch-article-row a img outranks WooCommerce's « .woocommerce-page img { height: auto } » on shop archives. */
.batch-article-row a img { display: block; width: 150px; height: 82px; object-fit: cover; filter: grayscale(1); }
.batch-article-meta { margin: 0 0 6px; font-size: .78rem; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; }
.batch-article-row h3 { margin: 0; font-family: var(--font-body); font-size: 1.45rem; font-weight: 600; letter-spacing: 0; }
.batch-article-row a { text-decoration: none; }

@media (max-width: 1020px) {
  .batch-book-grid.batch-book-grid.wc-block-product-template { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .batch-cover { height: 330px; }
  .batch-author-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

@media (max-width: 700px) {
  .batch-shell { width: calc(100% - 32px); }
  .batch-catalogue-toolbar { display: block; }
  .batch-catalogue-toolbar nav { gap: 4px 20px; }
  .batch-catalogue-toolbar p { margin-top: 14px; padding-top: 0; }
  .batch-collection-hero { grid-template-columns: 1fr; gap: 44px; }
  .batch-collection-hero h1 { font-size: clamp(3.5rem, 15vw, 5rem); }
  .batch-feature-spine { min-height: 0; border: 0; }
  .batch-feature-spine .collection-spine { width: 100%; height: 88px; flex-direction: row; padding: 14px 18px; }
  .batch-feature-spine .collection-spine > span:last-child { writing-mode: horizontal-tb; transform: none; font-size: 1.7rem; }
  /* The spine lies down as a bar: its dots lie down with it (disc on the left, as on the brand sheet). */
  .batch-feature-spine .collection-spine .lea-dots { margin-inline: calc(var(--dots-size) * 1.5); transform: rotate(90deg); }
  .batch-other-collections__shelf { gap: 8px; overflow-x: auto; }
  .collection-spine--small { width: 64px; min-width: 64px; height: 190px; }
  .collection-spine--small > span:last-child { font-size: 1rem; }
  .manuscripts-cta { grid-template-columns: 1fr; gap: 30px; padding: 36px 0; }
  .manuscripts-cta h2 { font-size: 2.5rem; }
  .manuscripts-cta .wp-block-buttons { justify-self: start; }
  .manuscripts-cta .wp-block-button__link { white-space: normal; }
  .batch-intro h1 { font-size: clamp(3.4rem, 15vw, 4.7rem); }
  .batch-intro > p:not(.batch-label), .batch-summary { font-size: 1.08rem; }
  .batch-section > h2 { font-size: 2.5rem; }
  .batch-book-grid.batch-book-grid.wc-block-product-template { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 54px 18px; }
  .batch-cover { height: 245px; }
  .batch-book-grid :is(h2, h3) { font-size: 1.22rem; }
  .batch-book-meta { font-size: .9rem; }
  .batch-book-grid .batch-actions .wp-element-button { min-height: 44px; padding-inline: .5rem; }
  .batch-book-grid .batch-actions .text-link { margin-top: 0; }
  .batch-book-author { grid-template-columns: 1fr; gap: 44px; }
  .batch-book-author .batch-portrait { width: min(65vw, 250px); }
  .batch-article-row { grid-template-columns: 88px 1fr; gap: 16px; }
  .batch-article-row:not(:has(img)) { grid-template-columns: 1fr; }
  .batch-article-row a img { width: 88px; height: 72px; }
  .batch-article-row > .text-link { grid-column: 2; }
  .batch-article-row:not(:has(img)) > .text-link { grid-column: 1; }
  .batch-author-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 38px 14px; }
  .batch-author-tile > span:last-child { font-size: 1rem; }
  .batch-author-preview:not(.is-open) { display: none; }
  .is-panel .batch-author-preview { margin-top: -8px; padding: 20px 0 24px; }
  .batch-author-preview h2 { font-size: 2rem; }
  .batch-author-tile:hover .batch-portrait, .batch-author-tile:focus-visible .batch-portrait, .batch-author-tile.is-active .batch-portrait { transform: none; }
  .batch-author-hero { grid-template-columns: 1fr; gap: 44px; }
  .batch-author-hero .batch-portrait { width: min(78vw, 320px); }
  .batch-author-hero h1 { font-size: clamp(3.5rem, 15vw, 5rem); }
  .batch-book-rows .wc-block-product-template > li { grid-template-columns: 120px 1fr; gap: 22px; align-items: start; padding: 32px 0; }
  .batch-book-rows .batch-cover { height: 180px; }
  .batch-book-rows h3 { font-size: 1.7rem; }
  .batch-book-rows .batch-book-excerpt { display: none; }
  .batch-other-authors__list { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .batch-other-authors__list > a { overflow-wrap: anywhere; }
}

@media (max-width: 430px) {
  .batch-author-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .batch-portrait { width: 128px; }
}

