/* ==========================================================================
   Liberty Café — v2 · "Swiss Modernist" direction (from draft D9)
   Strict six-column grid, one red accent + red square motif, numbered
   sections, mono metadata, ABC Arizona Flare display + tracked-caps labels.
   Square corners, hairlines not fills, no shadows. Tokens from
   colors_and_type.css (cream / paper / ink / warm + accent-red).
   ========================================================================== */

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; }
body { background: var(--cream); color: var(--ink); font-family: var(--sans);
  -webkit-font-smoothing: antialiased; }
a { color: inherit; text-decoration: none; }
img { display: block; max-width: 100%; }
ul { list-style: none; }

:root {
  --grid-line: rgba(39, 24, 19, 0.085);
  --ink-line: var(--ink);
  --cw: 1320px;
}

.wrap { max-width: var(--cw); margin: 0 auto; padding: 0 var(--gutter); }
.redsq { width: 14px; height: 14px; background: var(--accent-red); display: inline-block; flex: none; }

/* Four-colour brand stripe (top + bottom of page) */
.cstripe { display: grid; grid-template-columns: repeat(4, 1fr); height: 12px; }
.cstripe span:nth-child(1) { background: var(--accent-red); }
.cstripe span:nth-child(2) { background: var(--accent-blue); }
.cstripe span:nth-child(3) { background: var(--accent-green); }
.cstripe span:nth-child(4) { background: var(--accent-burg); }

/* shared label atoms */
.eyb { font: 600 11px/1 var(--sans); letter-spacing: 0.42em; text-transform: uppercase; color: var(--accent-red); }
.cap { font: 600 10px/1 var(--sans); letter-spacing: 0.34em; text-transform: uppercase; color: var(--warm); }
.mono { font: 500 11px/1.6 var(--mono); letter-spacing: 0.02em; color: var(--ink-mute); }

/* ====================== Top meta strip + header ====================== */
.meta-strip { border-bottom: 1px solid var(--rule); }
.meta-strip .wrap { display: flex; justify-content: space-between; padding-top: 9px; padding-bottom: 9px; }
.meta-strip span { font: 500 10px/1 var(--mono); letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-mute); }

.hdr { position: sticky; top: 0; z-index: 40; background: var(--cream); border-bottom: 1px solid var(--ink-line); }
.hdr .wrap { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; height: 72px; gap: 24px; }
.hdr__brand { font-family: var(--serif); font-weight: 500; font-size: 26px; line-height: 1; letter-spacing: -0.01em; }
.hdr__nav { display: flex; gap: 30px; justify-self: center; }
.hdr__nav a { font: 600 11px/1 var(--sans); letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink); padding: 6px 0; transition: color var(--dur-fast) var(--ease-default); }
.hdr__nav a:hover { color: var(--warm-deep); }
.hdr__nav a.is-active { color: var(--accent-red); }
.hdr__util { display: flex; gap: 16px; align-items: center; justify-self: end; }
.hdr__util svg { width: 19px; height: 19px; stroke: currentColor; stroke-width: 1.5; fill: none; }
.hdr__util a:hover { color: var(--warm-deep); }
/* §213 — the search trigger is a real <button> styled to match the icon links. */
.hdr__search { background: none; border: 0; padding: 0; margin: 0; cursor: pointer; color: var(--ink); display: inline-flex; align-items: center; transition: color var(--dur-fast) var(--ease-default); }
.hdr__search:hover { color: var(--warm-deep); }

/* §213 — Swiss search overlay: a cream bar drops from the top over a dimmed page. */
.search-ov { position: fixed; inset: 0; z-index: 1000; background: rgba(26, 24, 19, 0.45); opacity: 0; visibility: hidden; transition: opacity var(--dur-fast) var(--ease-default), visibility var(--dur-fast) var(--ease-default); }
.search-ov.is-open { opacity: 1; visibility: visible; }
.search-ov__box { background: var(--cream); border-bottom: 1px solid var(--rule); padding: 26px 0; transform: translateY(-14px); transition: transform var(--dur-base) var(--ease-out); }
.search-ov.is-open .search-ov__box { transform: translateY(0); }
.search-ov__box .wrap { display: flex; align-items: center; gap: 18px; }
.search-ov__form { flex: 1; display: flex; align-items: center; gap: 14px; min-width: 0; }
.search-ov__form svg { width: 22px; height: 22px; stroke: var(--ink-mute); stroke-width: 1.5; fill: none; flex: none; }
.search-ov__input { flex: 1; min-width: 0; font: 400 clamp(22px, 3.4vw, 34px)/1.15 var(--serif); color: var(--ink); background: transparent; border: 0; padding: 8px 0; }
.search-ov__input::placeholder { color: var(--ink-mute); opacity: 0.6; }
.search-ov__input:focus { outline: none; box-shadow: 0 2px 0 0 var(--accent-red); } /* visible focus, no layout shift */
.search-ov__close { background: none; border: 0; cursor: pointer; font: 600 11px/1 var(--sans); letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink); padding: 10px; flex: none; transition: color var(--dur-fast) var(--ease-default); }
.search-ov__close:hover { color: var(--accent-red); }
body.ll-search-open { overflow: hidden; } /* lock background scroll while the search bar is open */
@media (prefers-reduced-motion: reduce) { .search-ov, .search-ov__box { transition: none; } }

/* ====================== Section header (numbered) ====================== */
.shead { display: grid; grid-template-columns: auto auto 1fr auto; gap: 18px; align-items: center;
  padding: 22px 0; border-top: 1px solid var(--ink-line); }
.shead__no { font: 600 12px/1 var(--mono); color: var(--ink); }
.shead__lbl { font: 600 11px/1 var(--sans); letter-spacing: 0.34em; text-transform: uppercase; color: var(--ink); }
.shead__line { height: 1px; background: transparent; } /* §175 — hairline removed on every v2 page */
.shead__aux { font: 500 11px/1 var(--mono); letter-spacing: 0.04em; color: var(--ink-mute); text-transform: uppercase; }

/* ====================== Hero ====================== */
.hero { position: relative; overflow: hidden; }
.hero__grid { display: none; }

.hero .wrap { position: relative; display: grid; grid-template-columns: 1fr 1fr; gap: 48px;
  padding-top: 74px; padding-bottom: 0; align-items: start; }
.hero__l { display: flex; flex-direction: column; }
.hero__sq { margin-bottom: 26px; }
.hero__eyb { margin-bottom: 22px; }
.hero__h1 { font-family: var(--serif); font-weight: 500; font-size: clamp(56px, 7.6vw, 116px);
  line-height: 0.9; letter-spacing: -0.018em; color: var(--ink); }
.hero__h1--logo { line-height: 1; }
.hero__logo { width: clamp(280px, 36vw, 480px); height: auto; display: block; }
.hero__sub { font: 400 16px/1.6 var(--sans); color: var(--ink-soft); max-width: 40ch; margin-top: 28px; }
.hero__cta { display: flex; gap: 12px; margin-top: 34px; }
.btn { font: 600 11px/1 var(--sans); letter-spacing: 0.2em; text-transform: uppercase;
  padding: 15px 22px; border: 1px solid var(--ink-line); transition: background var(--dur-base) var(--ease-default), color var(--dur-base) var(--ease-default); }
.btn--solid { background: var(--ink); color: var(--cream); }
.btn--solid:hover { background: var(--accent-red); border-color: var(--accent-red); }
.btn--ghost:hover { background: var(--ink); color: var(--cream); }

.hero__r { align-self: end; }
.hero__cat-head { display: flex; flex-direction: column; gap: 10px; margin-bottom: 20px; }
.hero__cat-h2 { font-family: var(--serif); font-weight: 500; font-size: clamp(26px, 2.8vw, 38px); line-height: 1.0; letter-spacing: -0.01em; color: var(--ink); }
.hero__idx { border-top: 1px solid var(--ink-line); }
.hero__idx a { display: grid; grid-template-columns: 38px 1fr auto; gap: 16px; align-items: baseline;
  padding: 20px 4px; border-bottom: 1px solid var(--rule); transition: background var(--dur-base) var(--ease-default); }
.hero__idx a:hover { background: rgba(39,24,19,0.03); }
.hero__idx .n { font: 600 11px/1 var(--mono); color: var(--accent-red); }
.hero__idx .t { font-family: var(--serif); font-size: 26px; font-weight: 500; line-height: 1; }
.hero__idx .d { grid-column: 2; font: 400 12px/1.45 var(--sans); color: var(--ink-mute); margin-top: 7px; }
.hero__idx .ar { font: 500 16px/1 var(--sans); color: var(--ink); }

.hero__strip { margin-top: 60px; }
.hero__strip .wrap { display: grid; grid-template-columns: repeat(5, 1fr); padding: 0; }
.hero__strip span { padding: 16px var(--gutter); font: 600 10px/1 var(--sans); letter-spacing: 0.24em;
  text-transform: uppercase; color: var(--ink); border-right: 1px solid var(--rule); }
.hero__strip span:first-child { padding-left: var(--gutter); }
.hero__strip span:last-child { border-right: 0; }

/* ====================== About / statement ====================== */
.about { padding-bottom: 96px; }
.about__body { display: grid; grid-template-columns: 1.25fr 0.75fr; gap: 64px; padding-top: 56px; align-items: start; }
.about__lede { font-family: var(--serif); font-weight: 500; font-size: clamp(28px, 3.4vw, 46px);
  line-height: 1.08; letter-spacing: -0.01em; color: var(--ink); }
.about__lede em { font-style: normal; color: var(--accent-red); }
.about__col p { font: 400 15px/1.7 var(--sans); color: var(--ink-soft); }
.about__col p + p { margin-top: 16px; }
.about__facts { margin-top: 30px; border-top: 1px solid var(--ink-line); }
.about__facts .row { display: grid; grid-template-columns: 90px 1fr; gap: 16px; padding: 13px 0;
  border-bottom: 1px solid var(--rule); }
.about__facts .k { font: 600 10px/1.4 var(--sans); letter-spacing: 0.2em; text-transform: uppercase; color: var(--warm); }
.about__facts .v { font: 500 13px/1.4 var(--sans); color: var(--ink); }

/* ====================== Menu ====================== */
.menu { background: var(--paper); border-top: 1px solid var(--ink-line); }
.menu__grid { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 0; padding: 56px 0 96px;
  border-left: 1px solid var(--rule); }
.menu__col { padding: 0 32px; border-right: 1px solid var(--rule); }
.menu__col:first-child { padding-left: 4px; }
.menu__col h3 { display: flex; align-items: center; gap: 10px; font: 600 11px/1 var(--sans);
  letter-spacing: 0.3em; text-transform: uppercase; color: var(--ink); margin-bottom: 26px; }
.menu__col h3 .redsq { width: 9px; height: 9px; }
.mrow { display: grid; grid-template-columns: 1fr auto; gap: 12px; align-items: baseline; padding: 13px 0;
  border-top: 1px solid var(--rule); }
.mrow:last-child { border-bottom: 1px solid var(--rule); }
.mrow .nm { font-family: var(--serif); font-size: 19px; font-weight: 500; line-height: 1.1; }
.mrow .ds { grid-column: 1; font: 400 12px/1.4 var(--sans); color: var(--ink-mute); margin-top: 4px; }
.mrow .pr { font: 500 13px/1 var(--mono); color: var(--ink); }
.menu__note { padding: 22px 0 0; font: 500 10px/1.6 var(--sans); letter-spacing: 0.16em; text-transform: uppercase; color: var(--warm); }

/* ====================== Bar (same paper bg as the Kitchen menu) ====================== */
.bar { background: var(--paper); border-top: 1px solid var(--ink-line); }

/* ====================== Spaces / locations ====================== */
.spaces { padding-bottom: 96px; }
.spaces__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; padding-top: 56px; }
.loc { border-top: 1px solid var(--ink-line); padding-top: 0; }
.loc__photo { aspect-ratio: 16/10; background: var(--warm); position: relative; margin-top: 24px;
  display: flex; align-items: flex-end; padding: 16px; }
.loc__photo--alt { background: var(--accent-burg); }
.loc__photo span { font: 600 9px/1 var(--sans); letter-spacing: 0.3em; text-transform: uppercase; color: rgba(255,254,249,0.7); }
.loc__head { display: flex; align-items: baseline; gap: 14px; padding-top: 22px; }
.loc__no { font: 600 12px/1 var(--mono); color: var(--accent-red); }
.loc__name { font-family: var(--serif); font-weight: 500; font-size: 38px; line-height: 1; letter-spacing: -0.01em; }
.loc__rows { margin-top: 22px; }
.loc__rows .r { display: grid; grid-template-columns: 96px 1fr; gap: 16px; padding: 12px 0; border-top: 1px solid var(--rule); }
.loc__rows .r:last-child { border-bottom: 1px solid var(--rule); }
.loc__rows .k { font: 600 10px/1.4 var(--sans); letter-spacing: 0.2em; text-transform: uppercase; color: var(--warm); }
.loc__rows .v { font: 500 13px/1.5 var(--sans); color: var(--ink); }
.loc__rows .v a { border-bottom: 1px solid var(--rule); }
.loc__rows .v a:hover { color: var(--warm-deep); }

/* ====================== Events teaser ====================== */
.events { background: var(--ink); color: var(--cream); border-top: 1px solid var(--ink-line); }
.events .shead { border-top-color: var(--rule-inv); }
.events .shead__no, .events .shead__lbl { color: var(--cream); }
.events .shead__line { background: transparent; }
.events .shead__aux { color: var(--fg-on-ink-3); }
.events__list { padding: 16px 0 90px; }
.ev { display: grid; grid-template-columns: 120px 1fr auto auto; gap: 28px; align-items: center;
  padding: 24px 4px; border-bottom: 1px solid var(--rule-inv); transition: padding-left var(--dur-base) var(--ease-default); }
.ev:hover { padding-left: 16px; }
.ev__date { font: 500 12px/1.4 var(--mono); color: var(--fg-on-ink-2); }
.ev__date b { display: block; font-family: var(--serif); font-size: 30px; font-weight: 500; color: var(--cream); }
.ev__ttl { font-family: var(--serif); font-size: 24px; font-weight: 500; line-height: 1.05; }
.ev__ttl small { display: block; font: 400 12px/1.3 var(--sans); color: var(--fg-on-ink-3); margin-top: 5px; }
.ev__lang { font: 600 9px/1 var(--sans); letter-spacing: 0.2em; text-transform: uppercase; color: var(--cream);
  border: 1px solid var(--rule-inv); padding: 6px 9px; }
.ev__buy { font: 600 10px/1 var(--sans); letter-spacing: 0.22em; text-transform: uppercase; color: var(--accent-red);
  border-bottom: 1px solid currentColor; padding-bottom: 3px; }

/* ====================== Newsletter ====================== */
.news { background: var(--cream); border-top: 1px solid var(--ink-line); }
.news .wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; padding-top: 64px; padding-bottom: 80px; align-items: end; }
.news__h { font-family: var(--serif); font-weight: 500; font-size: clamp(30px, 3.6vw, 50px); line-height: 1.02;
  letter-spacing: -0.01em; }
.news__sq { margin-bottom: 22px; }
.news__lead { font: 400 14px/1.6 var(--sans); color: var(--ink-mute); margin-top: 16px; max-width: 38ch; }
.news__form { display: flex; align-items: flex-end; gap: 0; border-bottom: 1px solid var(--ink-line); }
.news__form input { flex: 1; background: transparent; border: 0; padding: 14px 0; outline: none;
  font: 400 16px/1 var(--sans); color: var(--ink); }
.news__form input::placeholder { color: var(--warm); }
.news__form button { background: transparent; border: 0; cursor: pointer; padding: 14px 0 14px 20px;
  font: 600 11px/1 var(--sans); letter-spacing: 0.2em; text-transform: uppercase; color: var(--accent-red); }

/* ====================== Footer ====================== */
.ftr { background: var(--paper); color: var(--ink); padding: 64px 0 28px; border-top: 1px solid var(--ink-line); }
.ftr__grid { display: grid; grid-template-columns: 1.7fr 1fr 1fr 1fr; gap: 40px; padding-bottom: 44px; }
.ftr__brand h4 { font-family: var(--serif); font-size: 30px; font-weight: 500; margin-bottom: 12px; }
.ftr__brand p { font: 400 13px/1.6 var(--sans); color: var(--ink-mute); max-width: 280px; }
.ftr__brand .redsq { margin-top: 20px; }
.ftr h5 { font: 600 10px/1 var(--sans); letter-spacing: 0.3em; text-transform: uppercase; color: var(--warm); margin-bottom: 16px; }
.ftr li { margin-bottom: 10px; font: 400 13px/1.3 var(--sans); color: var(--ink-soft); }
/* §138 — Blocksy's `ul{padding-inline-start:var(--theme-list-indent)}` (42.5px) leaks into
   footer lists, pushing items right of their h5 heading. Zero it so each column's items sit
   flush under its heading (vertically aligned). .ftr ul (0,1,1) beats global ul (0,0,1). */
.ftr ul { padding-inline-start: 0; margin-inline-start: 0; }
/* §139 — Connect column: minimalist app icons (outline, currentColor) + inline alignment.
   Icons sit at the column's left edge so the "Connect" heading stays flush (§138). */
.ftr__ic { width: 14px; height: 14px; flex: none; }
.ftr__connect li { display: flex; align-items: center; gap: 7px; }
.ftr__connect li a { display: inline-flex; align-items: center; gap: 7px; }

/* §140 — complaint legal line (right span) smaller than the © line. Cafe-only. */
.liberty-v2-cafe .ftr__legal { align-items: baseline; }
.liberty-v2-cafe .ftr__legal span:last-child,
.liberty-v2-cafe .ftr__legal span:last-child a { font-size: 8px; }

/* §143 — hero lead = logo width (justified); CTA row = logo width with equal buttons.
   Same clamp as .hero__logo keeps all three the same width at every viewport. */
.liberty-v2-cafe .hero__sub { max-width: clamp(280px, 36vw, 480px); text-align: justify; }
.liberty-v2-cafe .hero__cta { width: clamp(280px, 36vw, 480px); }
.liberty-v2-cafe .hero__cta .btn { flex: 1; text-align: center; }

/* §144 — hero eyebrow spans the logo width (justified, like the §143 lead). */
.liberty-v2-cafe .hero__eyb { width: clamp(280px, 36vw, 480px); text-align: justify; text-align-last: justify; }

/* ============================================================================
   §151 — /v2/books/ migrated sections: WooCommerce products, image category
   cards, event posters, location photos. Scoped to .liberty-v2-books.
   ========================================================================== */

/* 01 · Featured Books — [products] grid styled to Swiss */
.liberty-v2-books .books-woo { padding-top: 8px; }
.liberty-v2-books .books-woo ul.products { display: grid !important; grid-template-columns: repeat(4, 1fr); gap: 28px; margin: 0; padding: 0; list-style: none; }
.liberty-v2-books .books-woo ul.products::before,
.liberty-v2-books .books-woo ul.products::after { content: none !important; display: none !important; }
.liberty-v2-books .books-woo li.product { width: auto !important; margin: 0 !important; float: none !important; padding: 0 !important; text-align: left; }
.liberty-v2-books .books-woo li.product img { width: 100%; height: auto; margin: 0 0 14px !important; display: block; border: 1px solid var(--rule); border-radius: 0; }
.liberty-v2-books .books-woo li.product .woocommerce-loop-product__title { font: 500 16px/1.25 var(--serif) !important; color: var(--ink); padding: 0 !important; margin: 0 0 6px !important; }
.liberty-v2-books .books-woo li.product .price { font: 500 13px/1.2 var(--mono) !important; color: var(--ink) !important; white-space: nowrap; }
.liberty-v2-books .books-woo li.product .price .woocommerce-Price-amount,
.liberty-v2-books .books-woo li.product .price bdi { white-space: nowrap; }
.liberty-v2-books .books-woo li.product .price del { opacity: 0.5; margin-right: 6px; font-weight: 400; }
.liberty-v2-books .books-woo li.product .price ins { text-decoration: none; }
.liberty-v2-books .books-woo li.product .onsale { background: var(--accent-red); color: var(--cream); border-radius: 0; min-height: auto; min-width: auto; line-height: 1; padding: 6px 8px; margin: 0; font: 600 9px/1 var(--sans); letter-spacing: 0.16em; text-transform: uppercase; top: 8px; right: 8px; }
.liberty-v2-books .books-woo li.product .button,
.liberty-v2-books .books-woo li.product .added_to_cart { display: inline-block; margin-top: 12px !important; font: 600 10px/1 var(--sans); letter-spacing: 0.2em; text-transform: uppercase; background: var(--ink); color: var(--cream); border: 1px solid var(--ink); border-radius: 0; padding: 11px 16px; }
.liberty-v2-books .books-woo li.product .button:hover,
.liberty-v2-books .books-woo li.product .added_to_cart:hover { background: var(--accent-red); border-color: var(--accent-red); color: var(--cream); }
.liberty-v2-books .books-more { margin-top: 40px; }

/* 02 · Categories — image cards */
.liberty-v2-books .bcats { padding-bottom: 96px; }
.liberty-v2-books .bcats__grid { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; padding-top: 44px; }
.liberty-v2-books .bcat { border: 1px solid var(--rule); background: var(--paper); display: flex; flex-direction: column; }
.liberty-v2-books .bcat__photo { display: block; aspect-ratio: 16/10; overflow: hidden; }
.liberty-v2-books .bcat__photo img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform var(--dur-base) var(--ease-default); }
.liberty-v2-books .bcat__photo:hover img { transform: scale(1.03); }
.liberty-v2-books .bcat__body { padding: 24px 28px 28px; }
.liberty-v2-books .bcat__name-link { text-decoration: none; display: inline-block; }
.liberty-v2-books .bcat__name { font: 500 26px/1 var(--serif); color: var(--ink); margin: 0 0 16px; }
.liberty-v2-books .bcat__chips { display: flex; flex-wrap: wrap; gap: 8px; }
.liberty-v2-books .bcat__chips a { font: 500 11px/1 var(--sans); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink); border: 1px solid var(--ink-line); padding: 8px 12px; text-decoration: none; transition: background var(--dur-fast) var(--ease-default), color var(--dur-fast) var(--ease-default); }
.liberty-v2-books .bcat__chips a:hover { background: var(--ink); color: var(--cream); }
.liberty-v2-books .bcat__sub { font: 400 14px/1.6 var(--sans); color: var(--ink-mute); margin: 0; max-width: 40ch; }

/* 03 · Events — §152: light paper bg like Featured Books (was dark .events) */
.liberty-v2-books .events { background: var(--paper); color: var(--ink); border-top: 1px solid var(--ink-line); }
.liberty-v2-books .events .shead { border-top-color: var(--rule); }
.liberty-v2-books .events .shead__no, .liberty-v2-books .events .shead__lbl { color: var(--ink); }
.liberty-v2-books .events .shead__line { background: transparent; }
.liberty-v2-books .events .shead__aux { color: var(--ink-mute); }
.liberty-v2-books .events__grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 24px; padding: 36px 0 0; }
.liberty-v2-books .evp { display: flex; flex-direction: column; }
.liberty-v2-books .evp__poster { display: block; aspect-ratio: 4/5; overflow: hidden; border: 1px solid var(--rule); }
.liberty-v2-books .evp__poster img { width: 100%; height: 100%; object-fit: cover; display: block; transition: opacity var(--dur-fast) var(--ease-default); }
.liberty-v2-books .evp__poster:hover img { opacity: 0.9; }
.liberty-v2-books .evp__meta { padding-top: 14px; }
.liberty-v2-books .evp__date { font: 500 11px/1 var(--mono); letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-mute); }
.liberty-v2-books .evp__ttl { font: 500 16px/1.25 var(--serif); color: var(--ink); margin: 10px 0 14px; }
.liberty-v2-books .evp__buy { font: 600 10px/1 var(--sans); letter-spacing: 0.2em; text-transform: uppercase; color: var(--accent-red); text-decoration: none; }
.liberty-v2-books .evp__buy:hover { color: var(--ink); }
.liberty-v2-books .events__all { margin: 44px 0 0; }
/* §154 — remove the dark 1px hairline under the hero cstripe (above Featured) */
.liberty-v2-books .menu { border-top: 0; }
/* §162 — the Featured .shead carries its own border-top (base .shead rule), which
   still draws a 1px ink line right under the cstripe (most visible under the red
   segment). Zero it on the Featured section only; other sheads keep their divider. */
.liberty-v2-books .menu .shead { border-top: 0; }

/* 04 · Find Us — three location photos */
.liberty-v2-books .spaces__grid--3 { grid-template-columns: repeat(3, 1fr); }
.liberty-v2-books .loc__photo { display: block; overflow: hidden; }
.liberty-v2-books .loc__photo img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform var(--dur-base) var(--ease-default); }
.liberty-v2-books .loc__photo:hover img { transform: scale(1.03); }

/* books responsive */
@media (max-width: 920px) {
  .liberty-v2-books .books-woo ul.products { grid-template-columns: repeat(2, 1fr); }
  .liberty-v2-books .bcats__grid { grid-template-columns: 1fr; }
  .liberty-v2-books .events__grid { grid-template-columns: repeat(2, 1fr); }
  .liberty-v2-books .spaces__grid--3 { grid-template-columns: 1fr; }
}
@media (max-width: 560px) {
  .liberty-v2-books .books-woo ul.products,
  .liberty-v2-books .events__grid { grid-template-columns: 1fr 1fr; }
}

/* §153 — books hero aligned to the logo's VISIBLE mark. The books PNG has ~14%
   transparent padding each side (mark = 0.1401→0.8596 of img width). Indent the
   hero-left content to the mark and span eyebrow/sub to the mark width. Desktop
   only (≥921px); mobile keeps the natural left edge. logoW = clamp(280,36vw,480). */
@media (min-width: 921px) {
  .liberty-v2-books .hero__sq,
  .liberty-v2-books .hero__eyb,
  .liberty-v2-books .hero__sub,
  .liberty-v2-books .hero__cta { margin-left: calc(0.1401 * clamp(280px, 36vw, 480px)); }
  .liberty-v2-books .hero__eyb { width: calc(0.7196 * clamp(280px, 36vw, 480px)); text-align: justify; text-align-last: justify; }
  .liberty-v2-books .hero__sub { max-width: calc(0.7196 * clamp(280px, 36vw, 480px)); text-align: justify; }
}
/* §164 — editora hero aligned to the same Liberty Books logo mark (identical PNG
   + clamp). Mirrors §153. */
@media (min-width: 921px) {
  .liberty-v2-editora .hero__sq,
  .liberty-v2-editora .hero__eyb,
  .liberty-v2-editora .hero__sub,
  .liberty-v2-editora .hero__cta { margin-left: calc(0.1401 * clamp(280px, 36vw, 480px)); }
  .liberty-v2-editora .hero__eyb { width: calc(0.7196 * clamp(280px, 36vw, 480px)); text-align: justify; text-align-last: justify; }
  .liberty-v2-editora .hero__sub { max-width: calc(0.7196 * clamp(280px, 36vw, 480px)); text-align: justify; }
}
.ftr a { font: 400 13px/1.3 var(--sans); color: var(--ink-soft); transition: color var(--dur-fast) var(--ease-default); }
.ftr a:hover { color: var(--warm-deep); }
/* §214 — fine-print location addresses + phones, bottom of the Liberty Books footer. */
.ftr__addr { display: flex; flex-wrap: wrap; justify-content: center; text-align: center; gap: 6px 32px; margin-top: 36px; }
.ftr__addr span { font: 400 11px/1.6 var(--sans); color: var(--ink-mute); letter-spacing: 0.01em; }
.ftr__addr a { font: inherit; color: var(--ink-mute); text-decoration: none; }
.ftr__addr a:hover { color: var(--warm-deep); }
.ftr__legal { border-top: 1px solid var(--rule); padding-top: 22px; display: flex; justify-content: space-between;
  font: 500 10px/1 var(--mono); letter-spacing: 0.14em; text-transform: uppercase; color: var(--warm); }
/* §135 — legal anchor matches the legal line (mono 10px uppercase warm), not .ftr a (13px sans) */
.ftr__legal a { font: 500 10px/1 var(--mono); letter-spacing: 0.14em; text-transform: uppercase; color: var(--warm); text-decoration: underline; }
.ftr__legal a:hover { color: var(--warm-deep); }

/* ====================== Responsive ====================== */
@media (max-width: 920px) {
  .hdr__nav { display: none; }
  .hero .wrap { grid-template-columns: 1fr; gap: 36px; }
  .hero__r { align-self: stretch; }
  .hero__strip .wrap { grid-template-columns: 1fr 1fr; }
  .hero__strip span { border-bottom: 1px solid var(--rule); }
  .about__body { grid-template-columns: 1fr; gap: 32px; }
  .menu__grid { grid-template-columns: 1fr; border-left: 0; }
  .menu__col { border-right: 0; border-bottom: 1px solid var(--rule); padding: 0 0 24px; margin-bottom: 24px; }
  .spaces__grid, .news .wrap, .ftr__grid { grid-template-columns: 1fr; }
  .ev { grid-template-columns: 80px 1fr; gap: 14px; }
  .ev__lang, .ev__buy { grid-column: 2; justify-self: start; }
  .ftr__grid { grid-template-columns: 1fr 1fr; }
}

/* §127 — cafe hero: raise the category index (.hero__r) to the top, level with
   the left eyebrow (40px ≈ left red-square 14px + its 26px margin-bottom).
   Scoped to /v2/cafe/ so books/editora (which also load this file) keep their
   own hero__r alignment. */
.liberty-v2-cafe .hero__r { align-self: start; margin-top: 40px; }
@media (max-width: 920px) {
  .liberty-v2-cafe .hero__r { align-self: stretch; margin-top: 0; }
}

/* §129 — books hero: raise category index. §159 — align the right eyebrow
   ("On this page") to the same height as the left eyebrow ("Bookshop · Santos
   & Parede"). (Supersedes §156's 84px divider-at-logo lowering, per owner.) */
.liberty-v2-books .hero__r { align-self: start; margin-top: 40px; }
/* §160 — drop "Explore the bookshop" h2 down to the logo's VISIBLE mark top, while
   "On this page" stays at the eyebrow level. Desktop only (tuned for the logo size). */
@media (min-width: 921px) { .liberty-v2-books .hero__cat-h2 { margin-top: 102px; } }
@media (max-width: 920px) {
  .liberty-v2-books .hero__r { align-self: stretch; margin-top: 0; }
}
/* §165 (reverted) — justifying "On this page" to the h2 width spread its 3 words
   with huge gaps. Keep it at natural compact width with normal word spacing. */
.liberty-v2-books .hero__cat-head .eyb { text-align: left; text-align-last: auto; }
/* §171 — shift header brand "Liberty Books" right to align with the hero logo's
   VISIBLE mark (logo PNG has ~14% transparent left pad, §153). Desktop only. */
@media (min-width: 921px) {
  .liberty-v2-books .hdr__brand { margin-left: calc(0.1401 * clamp(280px, 36vw, 480px)); }
}

/* ====================== §173 — v2 Shop / Gifts archive ====================== */
.liberty-v2-shop .hero--shop .wrap { display: block; }
.liberty-v2-shop .hero--shop .hero__l { max-width: 760px; }
/* §179 — minimal catalog hero (no logo/sub, like live /books/): big serif text title. */
.liberty-v2-shop .hero__h1--text { margin: 14px 0 0; font: 500 clamp(44px, 6.5vw, 80px)/1 var(--serif); letter-spacing: -0.01em; color: var(--ink); }
/* §180 — catalog hero has no logo, so drop the §153 logo-mark indent: eyebrow + red
   square align with the "Books" title at the left edge. Also widen the Sort select ~2x. */
@media (min-width: 921px) {
  .liberty-v2-shop .hero__sq,
  .liberty-v2-shop .hero__eyb { margin-left: 0; }
  .liberty-v2-shop .hero__eyb { width: auto; text-align: left; text-align-last: auto; }
  /* §188 — catalog/shop/product pages have no hero logo, so drop §171's logo-mark
     indent on the header brand too → "Liberty Books" aligns with the eyebrow
     ("Bookshop · Santos & Parede") and the footer brand at the content-left edge. */
  .liberty-v2-shop .hdr__brand { margin-left: 0; }
}
/* §194 — /v2/books/ hero: cafe-style two-column — Liberty Books logo (left) +
   "Choose the category" index Books/Gifts/Publisher (right). Scoped to .hero--books
   (books only; gifts/shop keep the minimal text hero). Desktop only; stacks ≤920.
   Neutralises §363's old-homepage logo-mark offset on the category h2. */
.liberty-v2-shop .hero--books .hero__logo,
.liberty-v2-events .hero__logo { filter: brightness(0); } /* tint the white PNG to ink */
@media (min-width: 921px) {
  .liberty-v2-shop .hero--books .wrap { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; }
  .liberty-v2-shop .hero--books .hero__l { max-width: none; }
  .liberty-v2-shop .hero--books .hero__cat-h2 { margin-top: 0; }
}
.liberty-v2-shop .shop-sort__sel { min-width: 120px; }
/* §195 — catalog header "All Books/Gifts" has no section number, so the shead drops its
   first (number) column: label → hairline (1fr, stretches) → result count. */
.liberty-v2-shop .shead--catalog { grid-template-columns: auto 1fr auto; }
/* §197 — /v2/events/ listing page: drop the first section's dark hairline under the hero
   cstripe (matches §190/§192/§195) + give the events section its own bottom padding. */
.liberty-v2-events .events { border-top: 0; padding-bottom: 90px; }
.liberty-v2-events .events .shead { border-top: 0; }
/* §199 — Upcoming Events block on the Books catalog (after the product grid): drop the
   section's full-width border (the shead hairline is the divider) + breathing room. */
.liberty-v2-books .events--books { border-top: 0; padding: 36px 0 80px; }
.liberty-v2-books .events--books .events__all { text-align: center; }
/* toolbar: category filter (left) + sort (right) */
.liberty-v2-shop .shop-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 18px 28px; flex-wrap: wrap; padding-top: 6px; padding-bottom: 26px; }
.liberty-v2-shop .shop-filter { display: flex; flex-wrap: wrap; gap: 8px 22px; }
.liberty-v2-shop .shop-filter__a { font: 600 15px/1 var(--sans); letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-mute); padding: 6px 0; border-bottom: 1px solid transparent; transition: color var(--dur-fast) var(--ease-default), border-color var(--dur-fast) var(--ease-default); }
/* §176 — shop grid: 5 per row (shop-only; books Featured stays 4). */
.liberty-v2-shop .books-woo.shop-woo ul.products { grid-template-columns: repeat(4, 1fr); column-gap: 40px; row-gap: 36px; }

/* §183 — catalog filter sidebar + 2-column layout (like live /books/). */
.liberty-v2-shop .shop-layout { display: grid; grid-template-columns: 232px 1fr; gap: 48px; align-items: start; padding-top: 6px; }
.liberty-v2-shop .shop-sidebar { font: 400 14px/1.4 var(--sans); }
.liberty-v2-shop .fgroup { padding: 0 0 22px; margin: 0 0 22px; border-bottom: 1px solid var(--rule); }
.liberty-v2-shop .fgroup--cats .fcats { margin-top: 2px; }
.liberty-v2-shop .fgroup__h { font: 600 11px/1 var(--sans); letter-spacing: 0.18em; text-transform: uppercase; color: var(--ink-mute); margin: 0 0 14px; }
.liberty-v2-shop .fprice { display: flex; flex-direction: column; gap: 10px; }
.liberty-v2-shop .fprice__f { display: flex; flex-direction: column; gap: 5px; font: 500 10px/1 var(--mono); letter-spacing: 0.06em; text-transform: uppercase; color: var(--ink-mute); }
.liberty-v2-shop .fprice__f input { font: 400 14px/1 var(--sans); color: var(--ink); background: var(--paper); border: 1px solid var(--ink-line); border-radius: 0; padding: 9px 10px; width: 100%; box-sizing: border-box; }
.liberty-v2-shop .fprice__f input:focus { outline: none; border-color: var(--accent-red); }
.liberty-v2-shop .fselect { width: 100%; font: 400 13px/1.2 var(--sans); color: var(--ink); background-color: var(--paper); border: 1px solid var(--ink-line); border-radius: 0; padding: 9px 28px 9px 10px; cursor: pointer; box-sizing: border-box; appearance: none; -webkit-appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, var(--ink) 50%), linear-gradient(135deg, var(--ink) 50%, transparent 50%);
  background-position: calc(100% - 15px) 53%, calc(100% - 10px) 53%; background-size: 5px 5px; background-repeat: no-repeat; }
.liberty-v2-shop .fselect:focus { outline: none; border-color: var(--accent-red); }
.liberty-v2-shop .fcheck { display: flex; align-items: center; gap: 9px; padding: 4px 0; cursor: pointer; color: var(--ink); }
.liberty-v2-shop .fcheck input { width: 15px; height: 15px; accent-color: var(--accent-red); flex: none; }
.liberty-v2-shop .fgroup--actions { display: flex; align-items: center; gap: 16px; border-bottom: 0; margin-bottom: 0; padding-bottom: 0; }
.liberty-v2-shop .fbtn { font: 600 11px/1 var(--sans); letter-spacing: 0.18em; text-transform: uppercase; color: var(--cream); background: var(--ink); border: 1px solid var(--ink); border-radius: 0; padding: 11px 20px; cursor: pointer; transition: background var(--dur-fast) var(--ease-default), border-color var(--dur-fast) var(--ease-default); }
.liberty-v2-shop .fbtn:hover { background: var(--accent-red); border-color: var(--accent-red); }
.liberty-v2-shop .fclear { font: 500 11px/1 var(--mono); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-mute); text-decoration: underline; text-underline-offset: 3px; }
.liberty-v2-shop .fclear:hover { color: var(--accent-red); }
.liberty-v2-shop .fcats { list-style: none; margin: 0; padding: 0; max-height: 460px; overflow-y: auto; }
.liberty-v2-shop .fcat a { display: flex; justify-content: space-between; gap: 10px; padding: 5px 0; color: var(--ink-soft); text-decoration: none; font: 400 13px/1.3 var(--sans); }
.liberty-v2-shop .fcat--1 a { padding-left: 14px; color: var(--ink-mute); font-size: 12.5px; }
.liberty-v2-shop .fcat a:hover { color: var(--ink); }
.liberty-v2-shop .fcat.is-active > a { color: var(--accent-red); font-weight: 600; }
.liberty-v2-shop .fcat__n { font: 500 11px/1.4 var(--mono); color: var(--ink-mute); flex: none; }
.liberty-v2-shop .shop-toolbar--main { display: flex; justify-content: flex-end; align-items: center; padding: 0 0 22px; }
@media (max-width: 900px) {
  .liberty-v2-shop .shop-layout { grid-template-columns: 1fr; gap: 28px; }
  .liberty-v2-shop .books-woo.shop-woo ul.products { grid-template-columns: repeat(2, 1fr); column-gap: 20px; row-gap: 28px; }
}
.liberty-v2-shop .shop-filter__a:hover { color: var(--ink); }
.liberty-v2-shop .shop-filter__a.is-active { color: var(--accent-red); border-bottom-color: var(--accent-red); }
.liberty-v2-shop .shop-sort { display: inline-flex; align-items: center; gap: 10px; margin: 0; }
.liberty-v2-shop .shop-sort__lbl { font: 600 11px/1 var(--sans); letter-spacing: 0.16em; text-transform: uppercase; color: var(--ink-mute); }
.liberty-v2-shop .shop-sort__sel { font: 500 12px/1 var(--mono); color: var(--ink); background-color: var(--paper); border: 1px solid var(--ink-line); border-radius: 0; padding: 9px 30px 9px 12px; cursor: pointer; appearance: none; -webkit-appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, var(--ink) 50%), linear-gradient(135deg, var(--ink) 50%, transparent 50%);
  background-position: calc(100% - 16px) 53%, calc(100% - 11px) 53%; background-size: 5px 5px, 5px 5px; background-repeat: no-repeat; }
.liberty-v2-shop .shop-empty { font: 400 15px/1.5 var(--sans); color: var(--ink-mute); padding: 40px 0; }
/* pagination */
.liberty-v2-shop .shop-pager { display: flex; flex-wrap: wrap; gap: 6px; justify-content: center; margin-top: 52px; }
.liberty-v2-shop .shop-pager .page-numbers { font: 500 13px/1 var(--mono); color: var(--ink); min-width: 38px; height: 38px; display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--ink-line); text-decoration: none; transition: background var(--dur-fast) var(--ease-default), color var(--dur-fast) var(--ease-default); }
.liberty-v2-shop .shop-pager a.page-numbers:hover { background: var(--ink); color: var(--cream); }
.liberty-v2-shop .shop-pager .page-numbers.current { background: var(--accent-red); color: var(--cream); border-color: var(--accent-red); }
.liberty-v2-shop .shop-pager .page-numbers.dots { border-color: transparent; }
@media (max-width: 920px) {
  .liberty-v2-shop .shop-toolbar { gap: 14px; }
}

/* §190 — editora "01 Recent Titles" sits right under the hero's 4-colour cstripe; the
   base .shead border-top draws a dark hairline immediately below the stripe. Drop it on
   that first section (matches the books Featured fix §162). About/Submissions keep theirs. */
.liberty-v2-editora .spaces .shead { border-top: 0; }

/* §192 — same dark-hairline-under-cstripe fix for cafe: the first section "01 The Café"
   (.about) shead border-top sits directly under the hero stripe. Drop it; Menu/Bar/Find-us
   sheads keep their dividers. (Catalog books/gifts already covered by §154/§162.) */
.liberty-v2-cafe .about .shead { border-top: 0; }

/* §163 — editora hero: raise the right column ("A small, deliberate list" /
   "The imprint") so its eyebrow aligns to the left eyebrow ("Independent
   Publisher · Lisbon"). Mirrors books/cafe (§127/§159). */
.liberty-v2-editora .hero__r { align-self: start; margin-top: 40px; }
@media (max-width: 920px) {
  .liberty-v2-editora .hero__r { align-self: stretch; margin-top: 0; }
}

/* §132 — cafe Menu/Bar density: tighter rows so more items fit + columns balance.
   Scoped to /v2/cafe/ (.mrow is cafe-only in practice; books/editora don't use it). */
.liberty-v2-cafe .mrow { padding: 9px 0; }
.liberty-v2-cafe .menu__col h3 { margin-bottom: 18px; }
.liberty-v2-cafe .menu__grid { padding: 44px 0 80px; }

/* §136 — descriptions span the full menu column (was confined to the 1fr track,
   clipped at the price column). Gives Menu (02) descriptions the full column width
   like Bar (03) + room for more text. Bar's short descriptions look unchanged. */
.liberty-v2-cafe .mrow .ds { grid-column: 1 / -1; }

/* §137 — <section class="menu"> collides with the theme's global .menu{display:flex}
   (WordPress nav-menu class), turning the section into a flex row → its .wrap shrinks
   to content → grid renders 1071px (cols 357) instead of 1208px (cols 402). Force block
   so the 3-col grid fills the wrap like the Bar. Specificity (0,2,1) > global .menu (0,1,0).
   Verified live: cols 357→402, identical to Bar. */
.liberty-v2-cafe section.menu,
.liberty-v2-books section.menu { display: block; } /* §182 — also fix catalog/shop (class .menu collides with global nav .menu{display:flex}) */

/* §186 — v2 single-product page (/v2/product/?pid=). Swiss reskin of the WooCommerce
   single product: cover + info two-col, price/stock, add-to-cart, attribute table,
   description. Scoped .liberty-v2-product. Reuses .hdr/.ftr/.cstripe/.shead chrome.
   The catalog card links route here (post_type_link rewrite in template-v2-shop.php). */
.liberty-v2-product .pd { padding: 40px 0 90px; }
.liberty-v2-product .pd__crumbs { display: flex; align-items: center; gap: 8px; font: 500 11px/1 var(--mono); letter-spacing: 0.04em; text-transform: uppercase; color: var(--ink-mute); margin: 0 0 36px; flex-wrap: wrap; }
.liberty-v2-product .pd__crumbs a { color: var(--ink-mute); text-decoration: none; }
.liberty-v2-product .pd__crumbs a:hover { color: var(--accent-red); }
.liberty-v2-product .pd__crumb-sep { color: var(--ink-line); }
.liberty-v2-product .pd__crumb-cur { color: var(--ink); text-transform: none; letter-spacing: 0; font-family: var(--sans); }

.liberty-v2-product .pd__grid { display: grid; grid-template-columns: minmax(0, 420px) 1fr; gap: 56px; align-items: start; }
.liberty-v2-product .pd__media { position: relative; }
.liberty-v2-product .pd__media img { width: 100%; height: auto; display: block; border: 1px solid var(--ink-line); }
.liberty-v2-product .pd__noimg { width: 100%; aspect-ratio: 3 / 4; background: var(--paper); border: 1px solid var(--ink-line); }
.liberty-v2-product .pd__badge { position: absolute; top: 14px; left: 14px; font: 600 10px/1 var(--sans); letter-spacing: 0.16em; text-transform: uppercase; color: var(--cream); background: var(--accent-red); padding: 7px 11px; }

.liberty-v2-product .pd__info { padding-top: 4px; }
.liberty-v2-product .pd__eyb { display: block; font: 600 11px/1 var(--sans); letter-spacing: 0.2em; text-transform: uppercase; color: var(--ink-mute); margin: 0 0 16px; }
.liberty-v2-product .pd__title { font: 500 clamp(28px, 3.4vw, 44px)/1.05 var(--serif); letter-spacing: -0.01em; color: var(--ink); margin: 0; }
.liberty-v2-product .pd__author { font: 400 17px/1.4 var(--sans); color: var(--ink-soft); margin: 12px 0 0; }
.liberty-v2-product .pd__price { font: 500 24px/1 var(--mono); color: var(--ink); margin: 26px 0 0; }
.liberty-v2-product .pd__price del { color: var(--ink-mute); text-decoration: line-through; margin-right: 10px; font-weight: 400; }
.liberty-v2-product .pd__price ins { text-decoration: none; color: var(--accent-red); }
.liberty-v2-product .pd__price .woocommerce-Price-amount,
.liberty-v2-product .pd__price bdi { white-space: nowrap; }

.liberty-v2-product .pd__stock { display: inline-flex; align-items: center; gap: 7px; font: 600 11px/1 var(--sans); letter-spacing: 0.1em; text-transform: uppercase; margin: 16px 0 0; }
.liberty-v2-product .pd__stock::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: currentColor; flex: none; }
.liberty-v2-product .pd__stock--instock { color: #2f7d4f; }
.liberty-v2-product .pd__stock--outofstock { color: var(--ink-mute); }
.liberty-v2-product .pd__stock--onbackorder { color: var(--accent-red); }

.liberty-v2-product .pd__excerpt { font: 400 16px/1.6 var(--sans); color: var(--ink-soft); margin: 26px 0 0; max-width: 56ch; }
.liberty-v2-product .pd__excerpt p { margin: 0 0 12px; }
.liberty-v2-product .pd__excerpt p:last-child { margin-bottom: 0; }

/* add-to-cart (WooCommerce markup, reskinned to Swiss) */
.liberty-v2-product .pd__cart { margin: 30px 0 0; }
.liberty-v2-product .pd__cart form.cart { display: flex; align-items: stretch; gap: 12px; flex-wrap: wrap; margin: 0; }
.liberty-v2-product .pd__cart .quantity { display: inline-flex; }
.liberty-v2-product .pd__cart .quantity input.qty { width: 64px; height: 46px; text-align: center; font: 500 15px/1 var(--mono); color: var(--ink); background: var(--paper); border: 1px solid var(--ink-line); border-radius: 0; -moz-appearance: textfield; }
.liberty-v2-product .pd__cart button.single_add_to_cart_button { font: 600 12px/1 var(--sans); letter-spacing: 0.16em; text-transform: uppercase; color: var(--cream); background: var(--ink); border: 1px solid var(--ink); border-radius: 0; padding: 0 30px; min-height: 46px; cursor: pointer; transition: background var(--dur-fast) var(--ease-default), border-color var(--dur-fast) var(--ease-default); }
.liberty-v2-product .pd__cart button.single_add_to_cart_button:hover { background: var(--accent-red); border-color: var(--accent-red); }
.liberty-v2-product .pd__cart button.single_add_to_cart_button:disabled { background: var(--ink-line); border-color: var(--ink-line); color: var(--cream); cursor: not-allowed; }

/* attribute table */
.liberty-v2-product .pd__meta { margin: 38px 0 0; border-top: 1px solid var(--rule); }
.liberty-v2-product .pd__metarow { display: grid; grid-template-columns: 130px 1fr; gap: 16px; padding: 11px 0; border-bottom: 1px solid var(--rule); }
.liberty-v2-product .pd__metarow dt { font: 600 11px/1.4 var(--sans); letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink-mute); margin: 0; }
.liberty-v2-product .pd__metarow dd { font: 400 14px/1.4 var(--sans); color: var(--ink); margin: 0; }

/* long description */
.liberty-v2-product .pd__desc { margin: 72px 0 0; }
.liberty-v2-product .pd__desc-body { font: 400 16px/1.7 var(--sans); color: var(--ink-soft); max-width: 72ch; margin: 30px 0 0; }
.liberty-v2-product .pd__desc-body p { margin: 0 0 16px; }
.liberty-v2-product .pd__desc-body p:last-child { margin-bottom: 0; }

/* add-to-cart AJAX feedback states (wc-add-to-cart.js toggles these classes) */
.liberty-v2-product .pd__cart .added_to_cart { display: inline-flex; align-items: center; font: 600 11px/1 var(--sans); letter-spacing: 0.12em; text-transform: uppercase; color: var(--ink); text-decoration: underline; text-underline-offset: 4px; margin-left: 2px; }
.liberty-v2-product .pd__cart .added_to_cart:hover { color: var(--accent-red); }
.liberty-v2-product .pd__cart button.single_add_to_cart_button.loading { opacity: 0.55; pointer-events: none; }
.liberty-v2-product .pd__cart button.single_add_to_cart_button.added { background: #2f7d4f; border-color: #2f7d4f; }

/* §187 — related-products row reuses the catalog card grid (.books-woo.shop-woo) */
.liberty-v2-product .pd__related { margin: 80px 0 0; }
.liberty-v2-product .pd__related .books-woo { margin-top: 30px; }

@media (max-width: 820px) {
  .liberty-v2-product .pd__grid { grid-template-columns: 1fr; gap: 32px; }
  .liberty-v2-product .pd__media { max-width: 320px; }
}

/* §191 — cafe hero "Coffee Subscription" Coming-soon tag + the /v2/subscription/
   "Coming soon" placeholder page (body .liberty-v2-coming). */
.liberty-v2-cafe .hero__idx .idx-soon { display: inline-block; margin-left: 9px; font: 600 9px/1 var(--sans); letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent-red); border: 1px solid var(--accent-red); padding: 4px 7px; vertical-align: middle; }
.liberty-v2-coming .coming { min-height: 60vh; display: flex; align-items: center; padding: 60px 0 90px; }
.liberty-v2-coming .coming__sq { display: block; margin-bottom: 26px; }
.liberty-v2-coming .coming__h1 { margin: 0; font: 500 clamp(48px, 9vw, 116px)/1 var(--serif); letter-spacing: -0.01em; color: var(--ink); }

/* §200 — pull the Liberty Books logo left by its PNG transparent padding (~14% each side)
   so the visible black mark's left edge sits on the content-left edge, vertically level with
   the eyebrow ("Bookshop · Santos & Parede" etc.). Books / Gifts / Events (.hero--books) +
   Editora. logoW = clamp(280,36vw,480). Desktop only. Overrides §164's editora indent. */
@media (min-width: 921px) {
  .liberty-v2-shop .hero--books .hero__logo,
  .liberty-v2-editora .hero__logo { margin-left: calc(-0.1401 * clamp(280px, 36vw, 480px)); }
  /* Editora used §164 to indent its hero text to the logo mark; the logo now comes to the
     text instead, so reset that indent/justify and keep the eyebrow/sub flush-left. */
  .liberty-v2-editora .hero__sq,
  .liberty-v2-editora .hero__eyb,
  .liberty-v2-editora .hero__sub,
  .liberty-v2-editora .hero__cta { margin-left: 0; }
  .liberty-v2-editora .hero__eyb { width: auto; text-align: left; text-align-last: auto; }
  .liberty-v2-editora .hero__sub { text-align: left; }
}

/* §201 — /v2/about/ : tint + left-shift the logo like the other v2 heroes, and drop the
   dark hairline under the hero cstripe on the first section (01 Our Story). */
.liberty-v2-about .hero__logo { filter: brightness(0); }
.liberty-v2-about .about .shead { border-top: 0; }
@media (min-width: 921px) {
  .liberty-v2-about .hero__logo { margin-left: calc(-0.1401 * clamp(280px, 36vw, 480px)); }
}

/* §203 — Cart / Checkout / My-account in Swiss chrome. Conservative restyle of the Woo
   markup (type, colours, buttons, inputs, table rules) WITHOUT touching layout/positioning,
   so the purchase + login flow keeps working. Scoped to .liberty-v2-account. */
.liberty-v2-account .acct { padding: 36px 0 90px; }
.liberty-v2-account .acct__woo { font: 400 15px/1.6 var(--sans); color: var(--ink); }
.liberty-v2-account .woocommerce h1,
.liberty-v2-account .woocommerce h2,
.liberty-v2-account .woocommerce h3,
.liberty-v2-account .woocommerce-account h2 { font-family: var(--serif); font-weight: 500; color: var(--ink); letter-spacing: -0.01em; }
/* primary buttons */
.liberty-v2-account .woocommerce a.button,
.liberty-v2-account .woocommerce button.button,
.liberty-v2-account .woocommerce input.button,
.liberty-v2-account .woocommerce #place_order,
.liberty-v2-account .woocommerce .wc-block-components-button {
  background: var(--ink); color: var(--cream); border: 1px solid var(--ink); border-radius: 0;
  font: 600 12px/1.2 var(--sans); letter-spacing: 0.12em; text-transform: uppercase; padding: 13px 24px;
  box-shadow: none; transition: background var(--dur-fast) var(--ease-default), border-color var(--dur-fast) var(--ease-default);
}
.liberty-v2-account .woocommerce a.button:hover,
.liberty-v2-account .woocommerce button.button:hover,
.liberty-v2-account .woocommerce input.button:hover,
.liberty-v2-account .woocommerce #place_order:hover { background: var(--accent-red); border-color: var(--accent-red); color: var(--cream); }
/* form fields */
.liberty-v2-account .woocommerce form .form-row input.input-text,
.liberty-v2-account .woocommerce form .form-row textarea,
.liberty-v2-account .woocommerce input.input-text,
.liberty-v2-account .woocommerce select,
.liberty-v2-account .woocommerce .select2-selection {
  border: 1px solid var(--ink-line); border-radius: 0; background: var(--paper); color: var(--ink);
  font: 400 15px/1.4 var(--sans); padding: 11px 12px; box-shadow: none;
}
.liberty-v2-account .woocommerce form .form-row label { font: 500 12px/1.4 var(--sans); color: var(--ink-mute); letter-spacing: 0.02em; }
/* tables (cart, order review, orders) */
.liberty-v2-account .woocommerce table.shop_table { border: 1px solid var(--ink-line); border-radius: 0; border-collapse: collapse; }
.liberty-v2-account .woocommerce table.shop_table th { font: 600 11px/1.3 var(--sans); letter-spacing: 0.1em; text-transform: uppercase; color: var(--ink-mute); }
.liberty-v2-account .woocommerce table.shop_table td { font: 400 14px/1.5 var(--sans); color: var(--ink); }
.liberty-v2-account .woocommerce .cart_totals h2,
.liberty-v2-account .woocommerce-checkout #order_review_heading { margin-bottom: 14px; }
/* account dashboard nav tabs */
.liberty-v2-account .woocommerce-MyAccount-navigation ul { list-style: none; margin: 0; padding: 0; border: 1px solid var(--ink-line); }
.liberty-v2-account .woocommerce-MyAccount-navigation ul li a { color: var(--ink); font: 500 13px/1 var(--sans); text-decoration: none; display: block; padding: 12px 14px; }
.liberty-v2-account .woocommerce-MyAccount-navigation ul li.is-active a { color: var(--accent-red); font-weight: 600; }
/* notices */
.liberty-v2-account .woocommerce-message,
.liberty-v2-account .woocommerce-info,
.liberty-v2-account .woocommerce-error { border-top-color: var(--accent-red); border-radius: 0; }

/* §205 — v2 archive (category/tag/shop) + search wrappers. Archive reuses the catalog grid
   (.books-woo.shop-woo) — just add section breathing room. Search = a simple Swiss list. */
.liberty-v2-archive .liberty-v2-archive__sec,
.liberty-v2-search .liberty-v2-archive__sec { padding-bottom: 90px; }
.liberty-v2-archive .liberty-v2-archive__sec .books-woo { padding-top: 8px; }
.liberty-v2-search .srch { list-style: none; margin: 28px 0 0; padding: 0; border-top: 1px solid var(--rule); }
.liberty-v2-search .srch__item { border-bottom: 1px solid var(--rule); }
.liberty-v2-search .srch__link { display: block; padding: 22px 0; text-decoration: none; }
.liberty-v2-search .srch__kind { font: 600 10px/1 var(--sans); letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent-red); }
.liberty-v2-search .srch__ttl { font: 500 22px/1.2 var(--serif); color: var(--ink); margin: 8px 0 6px; }
.liberty-v2-search .srch__link:hover .srch__ttl { color: var(--accent-red); }
.liberty-v2-search .srch__ex { font: 400 14px/1.55 var(--sans); color: var(--ink-mute); margin: 0; max-width: 72ch; }

/* §207 — V76 content/legal pages (Privacy, Terms, Returns): Swiss prose for the_content(). */
.liberty-v2-page .legal { max-width: 760px; padding: 8px 0 40px; }
.liberty-v2-page .legal__body { font: 400 16px/1.7 var(--sans); color: var(--ink); }
.liberty-v2-page .legal__body h1,
.liberty-v2-page .legal__body h2,
.liberty-v2-page .legal__body h3,
.liberty-v2-page .legal__body h4 { font-family: var(--serif); font-weight: 500; line-height: 1.2; color: var(--ink); margin: 38px 0 14px; }
.liberty-v2-page .legal__body h2 { font-size: 26px; }
.liberty-v2-page .legal__body h3 { font-size: 21px; }
.liberty-v2-page .legal__body h4 { font-size: 18px; }
.liberty-v2-page .legal__body p { margin: 0 0 16px; }
.liberty-v2-page .legal__body ul,
.liberty-v2-page .legal__body ol { margin: 0 0 16px; padding-left: 22px; }
.liberty-v2-page .legal__body li { margin: 0 0 8px; }
.liberty-v2-page .legal__body a { color: var(--accent-red); text-decoration: underline; text-underline-offset: 3px; }
.liberty-v2-page .legal__body strong { font-weight: 600; }
.liberty-v2-page .legal__body table { width: 100%; border-collapse: collapse; margin: 0 0 20px; font-size: 14px; }
.liberty-v2-page .legal__body th,
.liberty-v2-page .legal__body td { border: 1px solid var(--rule); padding: 8px 10px; text-align: left; vertical-align: top; }
.liberty-v2-page .legal__body img { max-width: 100%; height: auto; }

/* ====================== §208 — mobile hamburger nav + phone tier (2026-06-17) ====================== */
.hdr__burger { display: none; }

@media (max-width: 920px) {
  /* Header becomes a flex bar: brand (left) · util + burger (right). */
  .hdr .wrap { display: flex; align-items: center; gap: 12px; height: 64px; }
  .hdr__brand { margin-right: auto; }
  .hdr__util { order: 2; gap: 12px; }
  .hdr__burger { order: 3; display: inline-flex; flex-direction: column; justify-content: center; gap: 5px;
    width: 44px; height: 44px; padding: 12px 9px; cursor: pointer; -webkit-tap-highlight-color: transparent; }
  .hdr__burger span { display: block; height: 2px; width: 100%; background: var(--ink); transform-origin: center;
    transition: transform var(--dur-fast) var(--ease-default), opacity var(--dur-fast) var(--ease-default); }
  /* ☰ → ✕ */
  .hdr__navtoggle:checked ~ .hdr__burger span:nth-child(1) { transform: translateY(7px) rotate(45deg); }
  .hdr__navtoggle:checked ~ .hdr__burger span:nth-child(2) { opacity: 0; }
  .hdr__navtoggle:checked ~ .hdr__burger span:nth-child(3) { transform: translateY(-7px) rotate(-45deg); }
  /* Toggled nav: full-width dropdown anchored to the sticky header. (.hdr__nav stays
     display:none from the existing §332 rule until the checkbox is checked.) */
  .hdr__navtoggle:checked ~ .hdr__nav {
    display: flex; flex-direction: column; gap: 0;
    position: absolute; top: 100%; left: 0; right: 0; z-index: 39;
    background: var(--cream); border-bottom: 1px solid var(--ink-line);
    padding: 2px var(--gutter) 14px; box-shadow: 0 14px 26px rgba(26,26,26,0.07); }
  .hdr__navtoggle:checked ~ .hdr__nav a { padding: 15px 2px; border-top: 1px solid var(--rule);
    font-size: 13px; letter-spacing: 0.12em; }
  /* §209 — drop the secondary meta-strip line ("Santos & Parede · Pet friendly · No
     reservations" etc.) across the whole mobile range; keep the primary line, left-aligned. */
  .meta-strip .wrap { justify-content: flex-start; }
  .meta-strip span:last-child { display: none; }
}

@media (max-width: 600px) {
  /* Footer → single column with hairline separators between the stacked groups. */
  .ftr__grid { grid-template-columns: 1fr; gap: 0; }
  .ftr__grid > div + div { border-top: 1px solid var(--rule); padding-top: 22px; margin-top: 22px; }
  .ftr__legal { flex-direction: column; gap: 8px; align-items: flex-start; }
  /* Touch targets ≥40-44px. */
  .hdr__util a, .hdr__search { min-width: 40px; min-height: 40px; display: inline-flex; align-items: center; justify-content: center; }
  .shop-pager .page-numbers { min-width: 44px; height: 44px; }
}

/* §210 — hamburger toggle a11y: the checkbox is visually hidden but FOCUSABLE (it was `hidden`,
   which removed it from tab order). Keyboard: Tab to it, Space toggles; Esc closes (JS). Desktop
   removes it entirely. Focus ring shows on the burger when the input is focused. */
.hdr__navtoggle { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; border: 0;
  overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
@media (min-width: 921px) { .hdr__navtoggle { display: none; } }
@media (max-width: 920px) {
  .hdr__navtoggle:focus-visible ~ .hdr__burger { outline: 2px solid var(--ink); outline-offset: 3px; }
}

/* §212 — cafe "Find Us": real Santos/Parede location photos fill the 16/10 .loc__photo box
   (mirrors the §151 books rule, which was scoped to .liberty-v2-books). */
.liberty-v2-cafe .loc__photo { overflow: hidden; }
.liberty-v2-cafe .loc__photo img { width: 100%; height: 100%; object-fit: cover; display: block;
  transition: transform var(--dur-base) var(--ease-default); }
.liberty-v2-cafe .loc__photo:hover img { transform: scale(1.03); }
