/* The agreed design, lifted verbatim from src/index.njk (hubs) and
   src/venue.njk (fiches) — the two pages that are actually live and
   signed off. Cream paper, teal, gold. Their conflicting rules (.wrap,
   .book, .stamp, .place) are scoped under body.hub / body.fiche so both
   survive intact rather than one overwriting the other. */

    :root {
      --bg: #F5F0E6;
      --teal: #1F6E78;
      --gold: #D4A843;
      --red: #C0392B;
      --ink: #1A1A1A;
      --sub: #5E6678;
      --border: #D4C9B0;
    }
    * { margin: 0; padding: 0; box-sizing: border-box; }
    body {
      font-family: system-ui, -apple-system, sans-serif;
      background: var(--bg); color: var(--ink);
      -webkit-font-smoothing: antialiased; line-height: 1.5;
    }
    
/* ---- hubs (from src/index.njk) ---- */
body.hub .wrap{max-width: 720px; margin: 0 auto; padding: 1.25rem 1rem 3rem;}
body.hub header{margin-bottom: 1rem;}
body.hub .logo{font-size: 1.5rem; font-weight: 700; letter-spacing: -0.01em;}
body.hub .logo .official{color: var(--teal);}
body.hub .logo .link{color: var(--ink);}
body.hub .logo .tld{color: var(--sub); font-weight: 400;}
body.hub .tagline{font-size: 0.82rem; color: var(--sub); margin-top: 0.15rem;}
body.hub .searchbar{position: relative; margin: 1rem 0;}
body.hub .searchbar input{width: 100%; font: inherit; font-size: 0.95rem;
      padding: 0.7rem 2.2rem 0.7rem 0.9rem;
      background: #FBF8F1; color: var(--ink);
      border: 1px solid var(--border); border-radius: 10px;}
body.hub .searchbar input:focus{outline: 2px solid var(--teal); outline-offset: -1px;}
body.hub .searchbar .clear{position: absolute; right: 0.5rem; top: 50%; transform: translateY(-50%);
      border: none; background: none; color: var(--sub);
      font-size: 1.2rem; cursor: pointer; line-height: 1; padding: 0.25rem; display: none;}
body.hub .searchbar.active .clear{display: block;}
body.hub .filters{display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.25rem;}
body.hub .chip{font: inherit; font-size: 0.85rem; font-weight: 500;
      background: var(--bg); color: var(--teal);
      border: 1px solid var(--teal); border-radius: 999px;
      padding: 0.35rem 0.85rem; cursor: pointer; transition: background .12s, color .12s;}
body.hub .chip[aria-pressed="true"]{background: var(--teal); color: var(--bg);}
body.hub .result-count{font-size: 0.82rem; color: var(--sub); margin-bottom: 0.9rem;}
body.hub /* Most targeted */
    .most{margin-bottom: 1.75rem;}
body.hub .most h2{font-family: system-ui, sans-serif; font-size: 0.72rem; font-weight: 700;
      letter-spacing: 0.08em; text-transform: uppercase; color: var(--amber);
      margin-bottom: 0.6rem;}
body.hub .most-row{display: flex; gap: 0.6rem; overflow-x: auto; scroll-snap-type: x mandatory;
      padding-bottom: 0.35rem; -webkit-overflow-scrolling: touch;}
body.hub .mini{flex: 0 0 160px; scroll-snap-align: start; text-decoration: none;
      background: #FBF8F1; border: 1px solid var(--border);
      border-left: 3px solid var(--gold); border-radius: 12px; padding: 0.7rem;}
body.hub .mini .warn{color: var(--amber); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;}
body.hub .mini .mname{font-family: 'Fraunces', Georgia, serif; font-weight: 700; font-size: 0.9rem; line-height: 1.2; color: var(--ink); margin-top: 0.4rem;}
body.hub .mini .mcity{font-size: 0.75rem; color: var(--sub); margin-top: 0.2rem;}
body.hub .mini .mprice{font-size: 0.8rem; color: var(--teal); margin-top: 0.35rem;}
body.hub /* City sections */
    .city{margin-bottom: 1.5rem;}
body.hub .city-head{display: flex; justify-content: space-between; align-items: baseline;
      font-size: 0.8rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase;
      color: var(--teal); border-bottom: 1px solid var(--border);
      padding-bottom: 0.35rem; margin-bottom: 0.75rem;}
body.hub .city-head .n{color: var(--sub); font-weight: 500;}
body.hub .cards{display: flex; flex-direction: column; gap: 0.75rem;}
body.hub .card{border: 1px solid var(--border); border-left: 3px solid var(--gold);
      border-radius: 12px; padding: 1rem; background: #FBF8F1;}
body.hub .card-top{display: flex; justify-content: space-between; align-items: flex-start; gap: 0.5rem;}
body.hub .stamp{color: var(--gold); font-weight: 700; font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.06em;}
body.hub .confirmed{color: var(--gold); font-size: 0.6rem; font-weight: 700; letter-spacing: 0.04em; margin-top: 0.15rem;}
body.hub .place{font-size: 0.8rem; color: var(--sub); white-space: nowrap;}
body.hub .name{font-family: 'Fraunces', Georgia, serif; font-weight: 700; font-size: 1.05rem; line-height: 1.2; margin-top: 0.55rem;}
body.hub .domain{display: inline-block; color: var(--teal); font-size: 0.82rem; margin-top: 0.15rem; text-decoration: none; word-break: break-word;}
body.hub .domain:hover{text-decoration: underline;}
body.hub .factline{font-size: 0.85rem; font-weight: 500; color: var(--ink); margin-top: 0.6rem;}
body.hub .price{font-size: 0.9rem; color: var(--sub); margin-top: 0.4rem;}
body.hub .book{display: block; text-align: center; text-decoration: none;
      background: var(--teal); color: var(--bg); font-size: 0.9rem; font-weight: 600;
      padding: 0.65rem 1rem; border-radius: 8px; margin-top: 0.75rem;}
body.hub .book:hover{opacity: 0.92;}
body.hub .status{color: var(--sub); padding: 2rem 0; text-align: center;}
body.hub footer{margin-top: 2.5rem; padding-top: 1rem; border-top: 1px solid var(--border); font-size: 0.78rem; color: var(--sub); text-align: center;}
body.hub footer .strong{color: var(--ink);}

/* ---- fiches (from src/venue.njk) ---- */
body.fiche .wrap{max-width: 620px; margin: 0 auto; padding: 1.25rem 1rem 3rem;}
body.fiche .back{display: inline-block; color: var(--teal); text-decoration: none; font-size: 0.9rem; font-weight: 500; margin-bottom: 1.25rem;}
body.fiche .back:hover{text-decoration: underline;}
body.fiche .trust{display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem 0.75rem;}
body.fiche .stamp{color: var(--gold); font-weight: 700; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.06em;}
body.fiche .confirmed-pill{color: var(--gold); font-size: 0.68rem; font-weight: 700; letter-spacing: 0.03em;}
body.fiche h1.name{font-family: 'Fraunces', Georgia, serif; font-weight: 700; font-size: 1.6rem; line-height: 1.15; margin-top: 0.6rem;}
body.fiche .place{color: var(--sub); font-size: 0.9rem; margin-top: 0.25rem;}
body.fiche .block{border-top: 1px solid var(--border); margin-top: 1.4rem; padding-top: 1.2rem;}
body.fiche .label{font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.06em; color: var(--sub);}
body.fiche a.domain{display: inline-block; color: var(--teal); font-size: 1.2rem; font-weight: 600; text-decoration: none; word-break: break-word; margin-top: 0.2rem;}
body.fiche a.domain:hover{text-decoration: underline;}
body.fiche .priceval{font-size: 1.1rem; font-weight: 600; margin-top: 0.2rem;}
body.fiche .priceval.muted{color: var(--sub); font-weight: 400;}
body.fiche .notofficial{border-top: 1px solid var(--border); margin-top: 1.4rem; padding-top: 1.2rem;}
body.fiche .notofficial h2{font-size: 0.95rem; font-weight: 700; color: var(--ink); margin-bottom: 0.7rem;}
body.fiche .notdomain{display: flex; align-items: baseline; gap: 0.5rem; margin: 0.3rem 0;}
body.fiche .notdomain .x{color: var(--red); font-weight: 700;}
body.fiche .notdomain .dom{font-family: ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--red); text-decoration: line-through; font-size: 0.9rem; word-break: break-all;}
body.fiche .notofficial .statement{margin-top: 0.8rem; font-size: 0.92rem; font-weight: 500;}
body.fiche .notofficial .pattern{margin-top: 0.5rem; font-size: 0.82rem; color: var(--sub);}
body.fiche .confirm{border-left: 3px solid var(--teal); background: #FBF8F1;
      border-radius: 0 8px 8px 0; padding: 0.9rem 1rem; margin-top: 1.4rem;}
body.fiche .confirm .h{font-size: 0.8rem; font-weight: 700; color: var(--teal);}
body.fiche .confirm .note{font-style: italic; font-size: 0.9rem; margin-top: 0.4rem;}
body.fiche .confirm .by{font-size: 0.78rem; color: var(--sub); margin-top: 0.5rem;}
body.fiche .cta{margin-top: 1.6rem;}
body.fiche .book{display: block; text-align: center; text-decoration: none;
      background: var(--teal); color: var(--bg); font-size: 1.1rem; font-weight: 700;
      padding: 1.1rem 1rem; border-radius: 10px;}
body.fiche .book:hover{opacity: 0.92;}
body.fiche .redirect-note{font-size: 0.78rem; color: var(--sub); text-align: center; margin-top: 0.6rem;}
body.fiche .status{color: var(--sub); padding: 2.5rem 0; text-align: center;}
body.fiche footer{margin-top: 2.5rem; padding-top: 1rem; border-top: 1px solid var(--border); font-size: 0.78rem; color: var(--sub); text-align: center;}

/* ---- additions: things the static pages need that the client-rendered
   originals never had, kept in the same vocabulary ---- */
body.hub .crumb{font-size:.82rem;color:var(--sub);margin-bottom:.9rem}
body.hub .crumb a{color:var(--teal);text-decoration:none}
body.hub h1.title{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.9rem;line-height:1.15;margin-bottom:.3rem}
body.hub .lede{font-size:.9rem;color:var(--sub);margin-bottom:1.4rem;max-width:56ch}
body.hub .card .sub{font-size:.85rem;color:var(--sub);margin-top:.35rem;line-height:1.45}
body.hub .card .cta-row{display:flex;flex-wrap:wrap;gap:.45rem;margin-top:.75rem}
body.hub .card .cta-row a{flex:1;min-width:8.5rem;text-align:center;text-decoration:none;font-size:.85rem;font-weight:600;padding:.55rem .8rem;border-radius:8px}
body.hub .card .cta-row a.b{background:var(--teal);color:var(--bg)}
body.hub .card .cta-row a.s{background:#FBF8F1;color:var(--teal);border:1px solid var(--teal)}
body.hub .card .cta-row a.m{background:#FBF8F1;color:var(--sub);border:1px solid var(--border)}
body.fiche .langpick{margin-top:1rem;display:flex;gap:.7rem;justify-content:center;font-size:.75rem}
body.fiche .langpick a{color:var(--teal);text-decoration:none}

/* ---- /why/ and 404, in the same cream vocabulary. The live site never had
   these pages, so there was nothing to lift; these are built from the same
   tokens rather than invented from a different palette. ---- */
body.why .wrap{max-width:620px}
body.why .kicker{font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;color:var(--teal);font-weight:700;padding-top:.5rem}
body.why h1{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.85rem;line-height:1.15;margin:.5rem 0 1.1rem}
body.why h1 em{font-style:italic;color:var(--teal)}
body.why .lead{font-size:1rem;line-height:1.7;color:var(--ink)}
body.why p{font-size:.94rem;line-height:1.7;color:var(--sub);margin-bottom:1rem}
body.why p strong{color:var(--ink);font-weight:650}
body.why h2{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.2rem;color:var(--ink);margin:1.9rem 0 .6rem}
body.why .scarline{border-inline-start:3px solid var(--teal);padding-inline-start:1rem;margin:1.5rem 0;font-family:'Fraunces',Georgia,serif;font-size:1.02rem;line-height:1.55;color:var(--ink)}
body.why .scarline em{color:var(--teal);font-style:normal}
body.why .oath{background:#FBF8F1;border:1px solid var(--border);border-left:3px solid var(--gold);border-radius:12px;padding:1.4rem 1.2rem 1.1rem;margin:2rem 0}
body.why .oath .n-kick{font-size:.58rem;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);text-align:center;font-weight:700;margin-bottom:.7rem}
body.why .oath h3{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.3rem;text-align:center;line-height:1.2;margin-bottom:.9rem}
body.why .oathlist{list-style:none;border-top:1px solid var(--border)}
body.why .oathlist li{display:flex;justify-content:space-between;gap:1rem;padding:.55rem .1rem;border-bottom:1px solid var(--border);font-size:.86rem}
body.why .oathlist li span:last-child{font-weight:700;white-space:nowrap;color:var(--teal)}
body.why .oath .n-foot{font-size:.58rem;letter-spacing:.08em;text-transform:uppercase;color:var(--sub);text-align:center;margin-top:.9rem}
body.why .metric{margin-top:1.6rem;padding:1rem 1.1rem;background:#FBF8F1;border:1px solid var(--border);border-radius:12px}
body.why .metric .m-lab{font-size:.58rem;letter-spacing:.14em;text-transform:uppercase;color:var(--sub);margin-bottom:.3rem}
body.why .metric .m-val{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.15rem;line-height:1.35}
body.why .metric .m-val b{color:var(--teal)}
body.why .cta-row{display:flex;gap:.55rem;margin-top:1.9rem;flex-wrap:wrap}
body.why .cta-row a{flex:1;min-width:9.5rem;text-align:center;font-weight:600;font-size:.88rem;padding:.8rem 1rem;border-radius:8px;text-decoration:none}
body.why .cta-row a.solid{background:var(--teal);color:var(--bg)}
body.why .cta-row a.ghost{border:1px solid var(--border);color:var(--sub);background:#FBF8F1}
body.why .langrow{display:flex;flex-wrap:wrap;gap:.35rem .75rem;margin-top:1.9rem;font-size:.72rem}
body.why .langrow a{color:var(--sub);text-decoration:none}
body.why .langrow a.on,body.why .langrow a:hover{color:var(--teal)}
body.nf .wrap{max-width:620px;text-align:center;padding-top:4rem}
body.nf h1{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:3rem;color:var(--ink)}
body.nf p{color:var(--sub);margin-top:.7rem}
body.nf a{color:var(--teal);text-decoration:none}
/* shared language picker */
.langpick{margin-top:1rem;display:flex;flex-wrap:wrap;gap:.35rem .75rem;justify-content:center;font-size:.72rem}
.langpick a{color:var(--sub);text-decoration:none}
.langpick a.on,.langpick a:hover{color:var(--teal)}
/* RTL: prices, domains and URLs stay left-to-right inside a mirrored page */
[dir="rtl"] .domain,[dir="rtl"] .notdomain .dom,[dir="rtl"] .redirect-note{direction:ltr;unicode-bidi:embed;display:inline-block}
body.hub a.name{display:block;color:inherit;text-decoration:none}
body.hub a.name:hover{color:var(--teal)}

/* ---- authored fiche blocks. Rendered only where data/venues/**.json carries
   the content; a venue without an authored record simply shows fewer blocks,
   never an empty shell. ---- */
body.fiche .facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(9rem,1fr));gap:.5rem;margin-top:.7rem}
body.fiche .fact{background:#FBF8F1;border:1px solid var(--border);border-radius:8px;padding:.55rem .7rem}
body.fiche .fact .k{font-size:.6rem;text-transform:uppercase;letter-spacing:.06em;color:var(--sub)}
body.fiche .fact .v{font-size:.85rem;margin-top:.15rem;line-height:1.4}
body.fiche .prose{font-size:.9rem;line-height:1.75;color:var(--ink);margin-top:.6rem}
body.fiche .prose p{margin-bottom:.7rem}
body.fiche .prose a{color:var(--teal)}
body.fiche .kv{margin-top:.6rem;border-top:1px solid var(--border)}
body.fiche .kv .row{display:flex;gap:.8rem;padding:.55rem 0;border-bottom:1px solid var(--border);font-size:.86rem}
body.fiche .kv .row .k{flex:0 0 7.5rem;color:var(--sub);font-size:.78rem}
body.fiche .kv .row .v{flex:1;line-height:1.5}
body.fiche .kv .row .when{display:block;font-size:.66rem;color:var(--gold);margin-top:.15rem}
body.fiche .ways{margin-top:.6rem;display:flex;flex-direction:column;gap:.5rem}
body.fiche .way{background:#FBF8F1;border:1px solid var(--border);border-left:3px solid var(--teal);border-radius:0 8px 8px 0;padding:.55rem .75rem}
body.fiche .way .k{font-size:.7rem;font-weight:700;color:var(--teal)}
body.fiche .way .v{font-size:.85rem;line-height:1.55;margin-top:.15rem}
body.fiche .acts{margin-top:.6rem;display:flex;flex-direction:column;gap:.5rem}
body.fiche .act{border-bottom:1px solid var(--border);padding-bottom:.5rem}
body.fiche .act .t{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:.95rem}
body.fiche .act .tag{font-size:.6rem;font-weight:700;color:var(--gold);text-transform:uppercase;letter-spacing:.05em;margin-left:.4rem}
body.fiche .act .d{font-size:.84rem;color:var(--sub);line-height:1.55;margin-top:.15rem}
body.fiche .faq{margin-top:.5rem}
body.fiche .faq details{border-bottom:1px solid var(--border)}
body.fiche .faq summary{font-size:.88rem;font-weight:600;padding:.6rem 0;cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:.6rem}
body.fiche .faq summary::-webkit-details-marker{display:none}
body.fiche .faq summary::after{content:'▾';color:var(--gold);font-size:.7rem;transition:transform .2s}
body.fiche .faq details[open] summary::after{transform:rotate(180deg)}
body.fiche .faq .a{font-size:.85rem;color:var(--sub);line-height:1.65;padding-bottom:.6rem}
body.fiche .srcs{margin-top:.5rem;font-size:.78rem;line-height:1.8}
body.fiche .srcs a{color:var(--teal);word-break:break-all}
body.fiche .srcs .disc{color:var(--sub);font-size:.74rem;margin-top:.5rem;line-height:1.6}
/* sticky action bar — the three links stay reachable down a long fiche */
body.fiche{padding-bottom:4.2rem}
body.fiche .sticky{position:fixed;left:0;right:0;bottom:0;z-index:50;display:flex;gap:.4rem;justify-content:center;
  padding:.5rem .7rem;background:rgba(245,240,230,.96);backdrop-filter:blur(10px);border-top:1px solid var(--border)}
body.fiche .sticky a{flex:1;max-width:12rem;text-align:center;text-decoration:none;font-size:.8rem;font-weight:700;padding:.6rem .5rem;border-radius:8px}
body.fiche .sticky a.k1{background:var(--teal);color:var(--bg)}
body.fiche .sticky a.k2{background:#FBF8F1;color:var(--teal);border:1px solid var(--teal)}
body.fiche .sticky a.k3{background:#FBF8F1;color:var(--sub);border:1px solid var(--border)}

/* ---- provenance. A fact and its source are one unit: the value never
   renders without the page it came from and the day we read it there. ---- */
body.fiche .factval{font-size:1.1rem;font-weight:600;margin-top:.2rem}
body.fiche .srcnote{font-size:.72rem;color:var(--sub);margin-top:.35rem;line-height:1.6}
body.fiche .srcnote a{color:var(--teal);word-break:break-word}
body.fiche .srcnote .ev{display:block;margin-top:.25rem;padding-left:.6rem;border-left:2px solid var(--border);
  font-style:italic;color:var(--ink);quotes:none}
body.fiche .srcnote .ev::before,body.fiche .srcnote .ev::after{content:''}

/* Tier grid — several rates read off one page on one day, so one source line
   serves the whole grid. Auto-fit rather than a fixed column count: a venue
   with two tiers should not render three cards, one of them empty. */
body.fiche .tiers{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));
  gap:.5rem;margin-top:.5rem}
body.fiche .tier{border:1px solid var(--border);border-left:3px solid var(--gold);
  border-radius:10px;padding:.6rem .7rem;background:#FBF8F1}
body.fiche .tier .tt{font-size:.68rem;font-weight:700;color:var(--teal);
  text-transform:uppercase;letter-spacing:.06em}
body.fiche .tier .tp{font-family:'Fraunces',Georgia,serif;font-size:1.35rem;font-weight:700;
  color:var(--ink);margin-top:.15rem;line-height:1.1}
/* The venue's own wording for a tier, kept on the row whenever it carries more
   than the category — an age band, a party size, a named local card. Set below
   the category rather than beside it so a long French label cannot push the
   amount out of a 150px grid cell. dir=auto because this is the source page's
   language, which on an Arabic page is frequently Latin script. */
body.fiche .tier .tw{font-size:.7rem;color:var(--sub);margin-top:.1rem;line-height:1.4;
  font-weight:400;text-transform:none;letter-spacing:0}
body.fiche .tier .tn{font-size:.75rem;color:var(--sub);margin-top:.2rem;line-height:1.5}
body.fiche .tiers + .srcnote{margin-top:.6rem}

/* Toggle row. Place is structural; anything that is a claim about the venue
   carries a ✓ linking to the page that states it. */
body.fiche .toggles{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:1.2rem}
body.fiche .tg{display:inline-flex;align-items:center;gap:.35rem;
  border:1px solid var(--border);border-radius:999px;padding:.3rem .7rem;
  font-size:.8rem;color:var(--ink);background:#FBF8F1}
body.fiche .tg .ti{font-size:.85rem;line-height:1}
body.fiche .tg .tsrc{color:var(--teal);text-decoration:none;font-weight:700;font-size:.75rem}

/* /changes/ — the recheck log. Borrows the why page's measure and typography;
   the table is the only thing it adds. `unchanged` is the common row and is
   styled as the calm one: this page's point is that nothing moved. */
body.changes .wrap{max-width:720px}
body.changes .kicker{font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;color:var(--teal);font-weight:700;padding-top:.5rem}
body.changes h1{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.85rem;line-height:1.15;margin:.5rem 0 1.1rem}
body.changes h2{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.2rem;color:var(--ink);margin:1.9rem 0 .6rem}
body.changes .lead{font-size:1rem;line-height:1.7;color:var(--ink)}
body.changes p{font-size:.94rem;line-height:1.7;color:var(--sub);margin-bottom:1rem}
body.changes .ch-stat{border-inline-start:3px solid var(--teal);padding:.2rem 0 .2rem 1rem;margin:1.6rem 0}
body.changes .ch-n{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:2.6rem;line-height:1;color:var(--teal)}
body.changes .ch-lab{font-size:.8rem;letter-spacing:.1em;text-transform:uppercase;font-weight:700;color:var(--ink);margin-top:.35rem}
body.changes .ch-sub{font-size:.86rem;color:var(--sub);margin-top:.2rem}
body.changes .ch-note{font-size:.86rem;color:var(--sub);border-inline-start:2px solid var(--line,#E4DCCB);padding-inline-start:.8rem}
/* Wide content scrolls inside its own box; the page body never scrolls sideways. */
body.changes .ch-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
body.changes .ch-tab{width:100%;border-collapse:collapse;font-size:.88rem}
body.changes .ch-tab th{text-align:start;font-size:.7rem;letter-spacing:.09em;text-transform:uppercase;color:var(--sub);font-weight:700;padding:.5rem .6rem;border-bottom:1px solid var(--line,#E4DCCB)}
body.changes .ch-tab td{padding:.55rem .6rem;border-bottom:1px solid #EFE8DA;vertical-align:top}
body.changes .ch-tab a{color:var(--ink);text-decoration:none;font-weight:600}
body.changes .ch-tab a:hover{color:var(--teal)}
body.changes .ch-date{color:var(--sub);white-space:nowrap;font-variant-numeric:tabular-nums}
body.changes .ch-st{font-size:.78rem;font-weight:600;white-space:nowrap}
body.changes .ch-unchanged{color:var(--teal)}
body.changes .ch-unchanged::before{content:"✓ "}
body.changes .ch-drifted{color:#9A5B1E}
body.changes .ch-unreachable{color:var(--sub)}
body.changes .ch-feed a{color:var(--teal);font-weight:600;text-decoration:none;font-size:.9rem}
body.changes .ch-foot{font-size:.84rem;color:var(--sub);margin-top:1.6rem}
/* The why page earns the click to the receipts: a reader who has just read why
   this exists is the one who wants to see it re-checked. Rendered only when
   /changes/ exists in that language, so it can never point at a missing page. */
body.why .why-changes{margin-top:1.4rem;text-align:center;display:flex;gap:1.4rem;justify-content:center;flex-wrap:wrap}
body.why .why-changes a{color:var(--teal);font-weight:600;text-decoration:none;font-size:.9rem}

/* /data/ — the dataset landing page. Same measure and typography as /why/;
   what it adds is a download list and a definition list of version metadata. */
body.data .wrap{max-width:640px}
body.data .kicker{font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;color:var(--teal);font-weight:700;padding-top:.5rem}
body.data h1{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.85rem;line-height:1.15;margin:.5rem 0 1.1rem}
body.data h2{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.2rem;color:var(--ink);margin:1.9rem 0 .6rem}
body.data .lead{font-size:1rem;line-height:1.7;color:var(--ink)}
body.data p{font-size:.94rem;line-height:1.7;color:var(--sub);margin-bottom:1rem}
body.data .dt-list{list-style:none;padding:0;margin:0}
body.data .dt-list li{padding:.7rem 0;border-bottom:1px solid #EFE8DA}
body.data .dt-list a{color:var(--teal);font-weight:600;text-decoration:none;font-size:.95rem}
body.data .dt-t{font-size:.68rem;letter-spacing:.08em;text-transform:uppercase;color:var(--sub);font-weight:700;margin-inline-start:.4rem}
body.data .dt-n{font-size:.86rem;color:var(--sub);line-height:1.55;margin-top:.2rem}
body.data .dt-meta{display:grid;grid-template-columns:auto 1fr;gap:.35rem .9rem;margin:1rem 0;font-size:.88rem}
body.data .dt-meta dt{color:var(--sub);font-weight:600}
body.data .dt-meta dd{margin:0;color:var(--ink)}
body.data .dt-meta code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82rem;background:#FBF8F1;padding:.1rem .35rem;border-radius:4px}
/* A 64-character digest must wrap rather than push the page sideways. */
body.data .dt-hash{overflow-wrap:anywhere;word-break:break-all}
body.data .dt-meta a{color:var(--teal);text-decoration:none}
body.data .dt-note{font-size:.86rem;border-inline-start:2px solid var(--line,#E4DCCB);padding-inline-start:.8rem}
body.data .dt-foot{font-size:.84rem;color:var(--sub);margin-top:1.6rem}

/* The city index. 25 of 271 venues were linked from the home page; every city
   now has a line here, so nothing is more than two clicks from the front door.
   Deliberately plain — this is a directory, not another card wall. */
body.hub h1.logo{font-size:1.5rem;font-weight:700;letter-spacing:-.01em;margin:0;font-family:inherit;line-height:inherit}
.cityall{margin-top:2.2rem}
.cityall h2{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:1.05rem;color:var(--ink);margin-bottom:.7rem}
.cx-list{display:flex;flex-wrap:wrap;gap:.4rem .5rem}
.cx{display:inline-flex;align-items:baseline;gap:.35rem;padding:.32rem .6rem;border:1px solid var(--line,#E4DCCB);border-radius:999px;
  background:#FBF8F1;color:var(--ink);text-decoration:none;font-size:.85rem;line-height:1.2}
.cx:hover{border-color:var(--teal);color:var(--teal)}
.cx-n{font-size:.72rem;color:var(--sub);font-variant-numeric:tabular-nums}
.cx:hover .cx-n{color:var(--teal)}
.cx-foot{margin-top:.8rem;font-size:.82rem;color:var(--sub)}

/* THE WAY IN. A country hub was an h1, one line, and then every city as a wall
   of cards — France is 126 venues in 20 sections with no way to narrow it.
   This sits above the cards on every country and category page: types, then
   cities, both real links to real addresses. Same chips as the index above, on
   purpose — one visual vocabulary for "here is a list of places to go". */
.browse{margin:1.4rem 0 2rem;padding:1rem 1.1rem;background:#FBF8F1;border:1px solid var(--line,#E4DCCB);border-radius:12px}
.browse h2{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:.95rem;color:var(--ink);margin:0 0 .6rem}
.browse h2+.cx-list{margin-bottom:1rem}
.browse .cx-list:last-child{margin-bottom:0}
.browse .cx{background:var(--paper,#FFFDF7)}
/* The category you are already on: marked, not removed. A filter row that
   hides your own selection leaves you unable to see what you picked. */
.cx-here{border-color:var(--teal);color:var(--teal);background:var(--paper,#FFFDF7);font-weight:600}
.cx-here .cx-n{color:var(--teal)}

/* More of this kind, and more in this city — at the foot of every fiche.
   Before this a fiche's only outbound links were its city hub and three
   external buttons, so "another château near here" meant going back and
   scrolling. */
.nearby{margin:2rem 0 1rem;padding-top:1.4rem;border-top:1px solid var(--line,#E4DCCB)}
.nearby h2{font-family:'Fraunces',Georgia,serif;font-weight:700;font-size:.95rem;color:var(--ink);margin:0 0 .6rem;display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem}
.nearby h2+.cx-list{margin-bottom:1.3rem}
.nearby .cx-list:last-child{margin-bottom:0}
.cx-all{font-family:inherit;font-weight:500;font-size:.8rem;color:var(--teal);text-decoration:none}
.cx-all:hover{text-decoration:underline}

/* The venue in its own words — a quotation, and typeset as one. Never our
   prose: the attribution line is part of the content, not decoration. */
body.fiche .says{margin:1.1rem 0;padding:.9rem 1rem;background:#FBF8F1;border-inline-start:3px solid var(--teal);border-radius:0 8px 8px 0}
body.fiche .says p{margin:0;font-size:.94rem;line-height:1.65;color:var(--ink)}
body.fiche .says footer{margin-top:.5rem;font-size:.78rem;color:var(--sub)}
body.fiche .says footer a{color:var(--teal);text-decoration:none}
/* When a machine last reached this link — a different claim from the signoff
   badge beside it, and the one a reader actually needs. */
body.fiche .trust .checked{font-size:.7rem;letter-spacing:.06em;color:var(--sub);align-self:center}
