/* Thème etagere : socle commun (variables jour et soir, typographie, en-tête, pied, fiche, barres de défilement). */
/* Unité : 1rem = 10 px par défaut (62,5 % de la taille du navigateur). L'accueil la fait suivre l'écran ; l'en-tête et le pied restent en px. */
html { font-size: 62.5%; }

/* Couleurs et textures. Le soir, seule la lumiere change (calque --light en multiply). */
:root {
  --wall: #e4d9c4; --ink: #2a2119; --dim: #6e6253; --focus: #8c2f22;
  --weave: #a9844f; --floor: #6a4a32;
  /* Cadre commun : hauteur de l'en-tête et du pied (plancher), marge latérale. Identiques sur toutes les pages. */
  --head-h: 56px; --foot-h: 44px; --gut: 24px; --bar-bg: var(--wall);
  --card: #fbf8ef; --card-ink: #29231d; --rule: rgba(70, 110, 150, .2); --red: rgba(180, 64, 52, .6);
  --light: radial-gradient(ellipse 120% 110% at 0% 12%, #fff 0%, #fdf9f1 38%, #eadfcd 100%);
  --cast: .55; --side: .4; --drop: .45; --sx: 1;
  --lime: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='600' height='600'><filter id='n' x='0' y='0' width='100%' height='100%'><feTurbulence type='fractalNoise' baseFrequency='.006' numOctaves='4' seed='4' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .45 0 0 0 0 .32 0 0 0 0 .2 0 0 0 .5 -.18'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  --fib-v: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='60' height='600'><filter id='a' x='0' y='0' width='100%' height='100%'><feTurbulence type='fractalNoise' baseFrequency='.5 .006' numOctaves='3' seed='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .3 0 0 0 0 .2 0 0 0 0 .05 1.2 0 0 0 -.62'/></filter><rect width='100%' height='100%' filter='url(%23a)'/></svg>");
  --fib-h: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='600' height='60'><filter id='a' x='0' y='0' width='100%' height='100%'><feTurbulence type='fractalNoise' baseFrequency='.006 .5' numOctaves='3' seed='8' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .3 0 0 0 0 .2 0 0 0 0 .05 1.2 0 0 0 -.62'/></filter><rect width='100%' height='100%' filter='url(%23a)'/></svg>");
  --twill: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24'><defs><linearGradient id='h' x1='0' y1='0' x2='0' y2='1'><stop offset='0' stop-color='%23000' stop-opacity='.5'/><stop offset='.25' stop-color='%23fff' stop-opacity='.18'/><stop offset='.55' stop-color='%23fff' stop-opacity='.04'/><stop offset='1' stop-color='%23000' stop-opacity='.42'/></linearGradient><linearGradient id='v' x1='0' y1='0' x2='1' y2='0'><stop offset='0' stop-color='%23000' stop-opacity='.58'/><stop offset='.3' stop-color='%23fff' stop-opacity='.1'/><stop offset='.6' stop-color='%23000' stop-opacity='.06'/><stop offset='1' stop-color='%23000' stop-opacity='.5'/></linearGradient></defs><rect x='0' y='0' width='6' height='6' fill='url(%23h)'/><rect x='0' y='0' width='1' height='6' fill='%23000' fill-opacity='.35'/><rect x='6' y='0' width='6' height='6' fill='url(%23h)'/><rect x='12' y='0' width='6' height='6' fill='url(%23v)'/><rect x='12' y='0' width='6' height='6' fill='%23000' fill-opacity='.08'/><rect x='12' y='0' width='6' height='1' fill='%23000' fill-opacity='.35'/><rect x='18' y='0' width='6' height='6' fill='url(%23v)'/><rect x='18' y='0' width='6' height='6' fill='%23000' fill-opacity='.08'/><rect x='0' y='6' width='6' height='6' fill='url(%23h)'/><rect x='6' y='6' width='6' height='6' fill='url(%23v)'/><rect x='6' y='6' width='6' height='6' fill='%23000' fill-opacity='.08'/><rect x='6' y='6' width='6' height='1' fill='%23000' fill-opacity='.35'/><rect x='12' y='6' width='6' height='6' fill='url(%23v)'/><rect x='12' y='6' width='6' height='6' fill='%23000' fill-opacity='.08'/><rect x='18' y='6' width='6' height='6' fill='url(%23h)'/><rect x='18' y='6' width='1' height='6' fill='%23000' fill-opacity='.35'/><rect x='0' y='12' width='6' height='6' fill='url(%23v)'/><rect x='0' y='12' width='6' height='6' fill='%23000' fill-opacity='.08'/><rect x='0' y='12' width='6' height='1' fill='%23000' fill-opacity='.35'/><rect x='6' y='12' width='6' height='6' fill='url(%23v)'/><rect x='6' y='12' width='6' height='6' fill='%23000' fill-opacity='.08'/><rect x='12' y='12' width='6' height='6' fill='url(%23h)'/><rect x='12' y='12' width='1' height='6' fill='%23000' fill-opacity='.35'/><rect x='18' y='12' width='6' height='6' fill='url(%23h)'/><rect x='0' y='18' width='6' height='6' fill='url(%23v)'/><rect x='0' y='18' width='6' height='6' fill='%23000' fill-opacity='.08'/><rect x='6' y='18' width='6' height='6' fill='url(%23h)'/><rect x='6' y='18' width='1' height='6' fill='%23000' fill-opacity='.35'/><rect x='12' y='18' width='6' height='6' fill='url(%23h)'/><rect x='18' y='18' width='6' height='6' fill='url(%23v)'/><rect x='18' y='18' width='6' height='6' fill='%23000' fill-opacity='.08'/><rect x='18' y='18' width='6' height='1' fill='%23000' fill-opacity='.35'/></svg>");
  --fine: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='1.1' numOctaves='2' seed='5' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1.1 0 0 0 -.42'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  --paper: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' seed='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .3 0 0 0 0 .22 0 0 0 0 .1 .28 0 0 0 -.08'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
  --fiber: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.55' numOctaves='3' seed='9' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .2 0 0 0 0 .13 0 0 0 0 .06 1.6 0 0 0 -.82'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
}
/* Soir : lampe chaude a droite, au-dessus du pupitre ; le reste de la piece tombe dans l'ombre. */
html.dark {
  --ink: #f0e6d2; --dim: #cdbb9f; --focus: #f0c27a;
  --card: #f1e6cf; --rule: rgba(70, 100, 130, .2);
  --light: linear-gradient(180deg, rgba(30, 18, 10, .5) 0, rgba(30, 18, 10, 0) 9rem), radial-gradient(ellipse 92% 120% at 86% 52%, #fff0d2 0%, #f0cc96 20%, #c9a073 46%, #a3815f 74%, #8a6b50 100%);
  --cast: .72; --side: .58; --drop: .65; --sx: -1;
  /* Hors accueil (pas de calque de lumiere) : le mur lui-meme s'assombrit. L'accueil remet #e4d9c4. */
  --wall: #2e241b;
  /* Plancher plus sombre le soir ; l'accueil le remet (son calque de lumière l'assombrit). */
  --floor: #3f2c1e;
}
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body { background: var(--lime), var(--wall); color: var(--ink); font: 1.6rem/1.45 'Source Serif 4', Georgia, serif; }
/* Soir hors accueil : mur uni, sans les taches de chaux. */
html.dark body { background: var(--wall); }
a { color: inherit; }
:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
html:not(.js) #card { display: none; }
noscript p { max-width: 736px; margin: 2rem auto; padding: 0 16px; }
.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }

/* Cadre commun (écran large) : en-tête, main, plancher. La page ne défile pas ; main défile.
   Une page qui fait défiler un enfant met son main en overflow: hidden. */
@media (min-width: 720px) {
  body { display: grid; grid-template-rows: var(--head-h) minmax(0, 1fr) var(--foot-h); height: 100dvh; overflow: hidden; }
  body > .bar { grid-row: 1; }
  body > main { grid-row: 2; min-height: 0; overflow: auto; }
  body > .foot { grid-row: 3; }
}

/* En-tete : tailles en px, identiques sur toutes les pages. */
.bar { position: relative; z-index: 6; height: var(--head-h); padding: 18px var(--gut) 0; display: flex; align-items: baseline; gap: 15px; font-size: 16px; }
.who { font-weight: 600; font-size: 22px; text-decoration: none; }
.who i { font-weight: 400; font-size: 15px; color: var(--dim); margin-left: .6em; }
.bar nav { margin-left: auto; display: flex; align-items: baseline; gap: .7em; font-style: italic; font-size: 15.5px; }
.bar nav a { color: var(--dim); text-decoration: none; }
.bar nav a:hover { color: var(--ink); }
.bar .dot { color: var(--dim); }
/* Boutons d'icône de l'en-tête : recherche (loupe) et bascule jour/soir. */
.theme, .find { border: 0; background: none; cursor: pointer; color: var(--dim); display: inline-flex; align-self: center; }
.theme:hover, .find:hover { color: var(--ink); }
.theme svg, .find svg { width: 16px; height: 16px; }
.theme .sun { display: none; }
html.dark .theme .sun { display: block; }
html.dark .theme .moon { display: none; }

/* Pied : bande de plancher en bois (joints de lames, fibres, ombre du mur), liens sociaux et copyright a gauche.
   Sans z-index : sur l'accueil, la scene passe devant et le calque de lumiere l'eclaire ; le texte reste au-dessus. */
.foot { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 15px; min-height: var(--foot-h); padding: 12px var(--gut) 0; font: 12px/16px 'Courier Prime', 'Courier New', monospace; color: rgba(240, 222, 190, .82);
  background:
    linear-gradient(180deg, rgba(20, 12, 4, .45) 0, rgba(20, 12, 4, .12) 3px, transparent 14px),
    repeating-linear-gradient(90deg, transparent 0 156px, rgba(20, 12, 4, .35) 156px 157px, rgba(255, 230, 190, .06) 157px 159px, transparent 159px 160px),
    linear-gradient(180deg, rgba(255, 230, 190, .08), rgba(20, 12, 4, .25)),
    var(--fib-h) 0 0 / 600px 100% repeat-x,
    var(--floor); }
.foot > * { position: relative; z-index: 6; }
.foot nav { display: flex; flex-wrap: wrap; align-items: baseline; gap: .7em; }
.foot a { color: inherit; text-decoration: none; }
.foot a:hover { color: #f6ead2; text-decoration: underline; }

/* Fiche : étiquette en papier Antemoro (.tag, classe commune plus bas), nouée au livre choisi par un fil de raphia.
   .card est le cadre placé par books.js et archive.js (ils réécrivent sa classe : at-top, at-bottom, at-left, at-right).
   L'œillet (.eye) est sur le bord tourné vers le livre ; books.js place son centre et donne au fil (.tie) sa longueur et son angle
   (--len, --ang) jusqu'au livre. Sans côté (panneau des archives) : œillet en haut au milieu, pas de fil (étiquette posée).
   Le papier prend une teinte légère de la reliure du livre (--bk, donnée par books.js), avec un fondu. Aucun filtre : la fiche bouge. */
@property --bk { syntax: '<color>'; inherits: true; initial-value: #8a6b50; }
.card { position: absolute; z-index: 10; width: 34rem;
  opacity: 0; visibility: hidden; transition: opacity .15s ease, visibility 0s linear .15s, --bk .3s ease; }
.card.show { opacity: 1; visibility: visible; transition: opacity .15s ease, --bk .3s ease; }
.card > .tag { padding: 2.4rem 2.6rem; color: var(--card-ink);
  --ant-seed: 17; --fringe-top: 10px; --fringe-right: 10px; --fringe-bottom: 10px; --fringe-left: 10px;
  --ant-pulp: color-mix(in oklab, var(--bk) 12%, #f1e6ca);
  --ant-shadow: 0 .2rem .4rem rgba(60, 40, 20, .25), 0 2.2rem 3.6rem -1.6rem rgba(30, 18, 8, .55); }
/* Image de l'article : petit tirage à bord blanc, tenu aux quatre coins par des coins photo en kraft (dans la boîte : rien ne dépasse vers l'œillet). */
.pic { position: relative; margin-bottom: 1.4rem; padding: .4rem; background: #fffdf7; box-shadow: 0 0 0 1px rgba(60, 40, 20, .12), 0 1px 3px rgba(40, 25, 10, .25); }
.pic::before { content: ''; position: absolute; z-index: 1; inset: -.2rem; pointer-events: none; background:
    linear-gradient(135deg, #c7a670 0 1rem, rgba(70, 45, 15, .4) 1rem 1.08rem, transparent 1.1rem) 0 0 / 1.8rem 1.8rem no-repeat,
    linear-gradient(225deg, #c7a670 0 1rem, rgba(70, 45, 15, .4) 1rem 1.08rem, transparent 1.1rem) 100% 0 / 1.8rem 1.8rem no-repeat,
    linear-gradient(45deg, #c7a670 0 1rem, rgba(70, 45, 15, .4) 1rem 1.08rem, transparent 1.1rem) 0 100% / 1.8rem 1.8rem no-repeat,
    linear-gradient(315deg, #c7a670 0 1rem, rgba(70, 45, 15, .4) 1rem 1.08rem, transparent 1.1rem) 100% 100% / 1.8rem 1.8rem no-repeat; }
.pic[hidden] { display: none; }
.pic img { display: block; width: 100%; }
.pic.wide img { height: auto; max-height: 14rem; min-height: 6.4rem; object-fit: contain; }
.pic.tall img { height: 14rem; object-fit: cover; object-position: 50% 0; }
.pic.photo img { height: 16rem; object-fit: cover; }
.pic.logo { padding: 1.6rem 2.6rem; }
.pic.logo img { height: 5.6rem; object-fit: contain; }
.card h3 { font-size: 1.85rem; font-weight: 600; line-height: 1.25; margin-bottom: .6rem; }
.meta { margin-bottom: .8rem; font: 1.25rem/1.8rem 'Courier Prime', 'Courier New', monospace; color: #54493b; }
.meta span { display: block; }
.meta .ser:empty { display: none; }
.ex { font-size: 1.45rem; line-height: 2.1rem; display: -webkit-box; -webkit-line-clamp: 4; -webkit-box-orient: vertical; overflow: hidden; }
.read { display: block; width: max-content; margin: .6rem 0 0 auto; font: 700 1.25rem/2rem 'Courier Prime', 'Courier New', monospace; letter-spacing: .06em; text-underline-offset: 3px; color: #7a281e; }
.read:hover { color: var(--card-ink); }
.read:focus-visible { outline-color: #8c2f22; }
/* Œillet renforcé (rondelle de kraft, trou sombre), même dessin que les étiquettes de rayon. Position par son centre. */
.eye { position: absolute; z-index: 1; left: 50%; top: 1.5rem; width: 1.6rem; height: 1.6rem; translate: -50% -50%; border-radius: 50%;
  background: radial-gradient(circle, #2e2114 0 .28rem, #8a6a3e .3rem .36rem, #d8bf8c .38rem .62rem, rgba(110, 80, 40, .55) .64rem .72rem, transparent .74rem); }
.at-top .eye { top: calc(100% - 1.5rem); }
.at-right .eye { left: 1.5rem; }
.at-left .eye { left: calc(100% - 1.5rem); }
.card:not(.at-top, .at-bottom, .at-left, .at-right) .eye { left: 50% !important; top: 1.5rem !important; }
/* Fil de raphia : part du trou, va jusqu'au livre, petit nœud au bout. Longueur et angle par défaut : fiche dans la pile (mobile). */
.tie { display: none; position: absolute; left: 50%; top: 50%; width: var(--len, 3.1rem); height: .36rem; margin-top: -.18rem; transform-origin: 0 50%; rotate: var(--ang, 90deg); border-radius: .2rem;
  background: repeating-linear-gradient(90deg, transparent 0 .7rem, rgba(90, 64, 28, .3) .7rem .8rem), linear-gradient(180deg, #a88c55, #e8d9ac 50%, #b9a06a); box-shadow: 0 1px 1px rgba(30, 18, 6, .35); }
.tie::after { content: ''; position: absolute; right: -.25rem; top: 50%; width: .7rem; height: .6rem; translate: 0 -50%; border-radius: 45%; background: radial-gradient(circle at 40% 35%, #eadcb0, #b39760 70%); box-shadow: 0 1px 1px rgba(30, 18, 6, .4); }
:is(.at-top, .at-bottom, .at-left, .at-right) .tie { display: block; }
.at-bottom .eye { --ang: -90deg; }
.at-right .eye { --ang: 180deg; }
.at-left .eye { --ang: 0deg; }

/* Barres de défilement : un chaume de bambou comme pouce (volume rond, nœuds), rail discret (fine rainure). 10 px : facile à attraper.
   Chrome : pseudo-éléments ::-webkit-scrollbar (ignorés si scrollbar-width ou scrollbar-color est défini, d'où le @supports).
   Firefox : scrollbar-color seul (couleurs, pas de dessin ; largeur du système, plus facile à attraper que thin). Toutes les zones qui défilent du site. */
@supports not selector(::-webkit-scrollbar) {
  * { scrollbar-color: #b98b4c rgba(60, 40, 20, .1); }
  html.dark:not(.home) * { scrollbar-color: #a87d45 rgba(240, 220, 180, .1); }
}
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track:vertical { background: linear-gradient(90deg, transparent 4px, rgba(60, 40, 20, .2) 4px 6px, transparent 6px); }
::-webkit-scrollbar-track:horizontal { background: linear-gradient(180deg, transparent 4px, rgba(60, 40, 20, .2) 4px 6px, transparent 6px); }
::-webkit-scrollbar-corner { background: transparent; }
::-webkit-scrollbar-thumb { border: 1px solid transparent; border-radius: 5px; background-clip: padding-box; box-shadow: inset 0 0 0 1px rgba(70, 45, 15, .35); }
::-webkit-scrollbar-thumb:vertical { background-image:
    repeating-linear-gradient(180deg, transparent 0 52px, rgba(70, 45, 15, .55) 52px 54px, rgba(255, 244, 214, .6) 54px 55px, transparent 55px 64px),
    linear-gradient(90deg, rgba(70, 45, 15, .35), rgba(255, 244, 214, .45) 35%, transparent 60%, rgba(70, 45, 15, .3)); background-color: #c39454; }
::-webkit-scrollbar-thumb:horizontal { background-image:
    repeating-linear-gradient(90deg, transparent 0 52px, rgba(70, 45, 15, .55) 52px 54px, rgba(255, 244, 214, .6) 54px 55px, transparent 55px 64px),
    linear-gradient(180deg, rgba(70, 45, 15, .35), rgba(255, 244, 214, .45) 35%, transparent 60%, rgba(70, 45, 15, .3)); background-color: #c39454; }
::-webkit-scrollbar-thumb:hover { background-color: #ad7f42; }
/* Soir hors accueil (mur sombre) : rainure claire, chaume un peu plus sombre. */
html.dark:not(.home) ::-webkit-scrollbar-track:vertical { background: linear-gradient(90deg, transparent 4px, rgba(240, 220, 180, .14) 4px 6px, transparent 6px); }
html.dark:not(.home) ::-webkit-scrollbar-track:horizontal { background: linear-gradient(180deg, transparent 4px, rgba(240, 220, 180, .14) 4px 6px, transparent 6px); }
html.dark:not(.home) ::-webkit-scrollbar-thumb { background-color: #a87d45; }
html.dark:not(.home) ::-webkit-scrollbar-thumb:hover { background-color: #c39454; }

/* Mobile : flux normal, en-tete collant en haut, plancher a la fin de la page. */
@media not all and (min-width: 720px) {
  :root { --gut: 16px; }
  body { display: flex; flex-direction: column; min-height: 100dvh; overflow-x: clip; }
  body > main { flex: 1 0 auto; }
  .bar { position: sticky; top: 0; height: 76px; flex-wrap: wrap; row-gap: 2px; padding-top: 14px; background: var(--bar-bg); }
  .who { font-size: 18.5px; line-height: 1.2; }
  .who i { font-size: 13px; }
  .bar nav { font-size: 14.5px; }
  .foot { padding-bottom: 12px; }
}
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition: none !important; } }

/* main reçoit le focus pour le défilement au clavier : pas de cadre. */
main[tabindex="-1"]:focus { outline: none; }

/* ------------------------------------------------------------------------------------------------
   Papier Antemoro (papier artisanal malgache, écorce d'avoha). Réutilisable : citations, fiche, archives.
   Pâte crème irrégulière, longues fibres au hasard, zones plus fines et plus claires, bord frangé, ombre douce.
   Usage : class="antemoro" sur un bloc ; class="antemoro aged" pour du papier ancien (jauni, taches, bords bruns).
   ::before peint le papier (fond + masque du bord), ::after porte l'ombre (rectangle caché sous le papier, sans arête dure au bord frangé).
   Ne pas mettre de fond, de box-shadow, de ::before ni de ::after sur l'élément.
   Variables (sur l'élément) :
     --ant-pulp   couleur de la pâte ;
     --ant-seed   nombre (0 à 99) : décale fibres, taches et bord, pour que deux feuilles ne soient pas identiques ;
     --fringe-top, --fringe-right, --fringe-bottom, --fringe-left : profondeur du bord frangé (en px, 0px = bord droit) ;
     --ant-shadow ombre portée (valeur de box-shadow, none possible).
   .antemoro.flat : aucun bord frangé, aucun masque (grande feuille coupée par une zone qui défile).
   Coût : images SVG statiques en data URI, rastérisées une fois et partagées par toutes les feuilles. Aucun filtre CSS ou SVG
   sur l'élément (règle anti-défauts Chrome : les filtres sur un élément tourné ou qui défile laissent des copies fantômes). */
:root {
  --ant-fib-a: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='420' height='420'><g fill='none' stroke-linecap='round'><path d='M190 235.1Q131.6 248.8 73.3 263.4' stroke='%23a8865a' stroke-width='0.6' opacity='.30'/><path d='M264.6 333.1Q315.8 328.3 355.6 360.8' stroke='%23a8865a' stroke-width='0.8' opacity='.21'/><path d='M412.5 405.2Q400.5 482.6 343.6 536.4' stroke='%23fffbf2' stroke-width='0.8' opacity='.36'/><path d='M412.5 405.2Q400.5 482.6 343.6 536.4' stroke='%23fffbf2' stroke-width='0.8' opacity='.36' transform='translate(0 -420)'/><path d='M79.9 101.6Q139.8 103.7 199.1 112.9' stroke='%23a8865a' stroke-width='0.7' opacity='.33'/><path d='M209.9 278.2Q193.4 326.8 222.2 369.3' stroke='%23a8865a' stroke-width='0.8' opacity='.34'/><path d='M132.4 96.5Q147.1 130.9 177 153.6' stroke='%23fffbf2' stroke-width='1' opacity='.45'/><path d='M402.4 355.9Q444.3 373.2 486.3 356' stroke='%23fffbf2' stroke-width='1.1' opacity='.45'/><path d='M402.4 355.9Q444.3 373.2 486.3 356' stroke='%23fffbf2' stroke-width='1.1' opacity='.45' transform='translate(-420 0)'/><path d='M30.7 264.4Q7.8 307.9 -39.1 322.6' stroke='%23fffbf2' stroke-width='1.1' opacity='.54'/><path d='M30.7 264.4Q7.8 307.9 -39.1 322.6' stroke='%23fffbf2' stroke-width='1.1' opacity='.54' transform='translate(420 0)'/><path d='M49.6 103.5Q80.4 124.8 117.8 125.9' stroke='%23fffbf2' stroke-width='0.8' opacity='.46'/><path d='M80.1 307.4Q162.5 311.1 221.2 369' stroke='%23fffbf2' stroke-width='0.6' opacity='.42'/><path d='M407.8 337.4Q493.1 405.6 528.9 508.7' stroke='%23fffbf2' stroke-width='1' opacity='.51'/><path d='M407.8 337.4Q493.1 405.6 528.9 508.7' stroke='%23fffbf2' stroke-width='1' opacity='.51' transform='translate(-420 -420)'/><path d='M407.8 337.4Q493.1 405.6 528.9 508.7' stroke='%23fffbf2' stroke-width='1' opacity='.51' transform='translate(-420 0)'/><path d='M407.8 337.4Q493.1 405.6 528.9 508.7' stroke='%23fffbf2' stroke-width='1' opacity='.51' transform='translate(0 -420)'/><path d='M42.1 415.5Q69.6 452.9 112.3 471.1' stroke='%23fffbf2' stroke-width='0.7' opacity='.37'/><path d='M42.1 415.5Q69.6 452.9 112.3 471.1' stroke='%23fffbf2' stroke-width='0.7' opacity='.37' transform='translate(0 -420)'/><path d='M37.8 244.7Q96.8 288.3 142.8 345.2' stroke='%23fffbf2' stroke-width='1.1' opacity='.47'/><path d='M241.3 363.9Q265.6 398.7 307.3 406.6' stroke='%23a8865a' stroke-width='0.6' opacity='.24'/><path d='M310.6 395Q377.9 495.9 495.3 526.2' stroke='%23a8865a' stroke-width='0.7' opacity='.22'/><path d='M310.6 395Q377.9 495.9 495.3 526.2' stroke='%23a8865a' stroke-width='0.7' opacity='.22' transform='translate(-420 -420)'/><path d='M310.6 395Q377.9 495.9 495.3 526.2' stroke='%23a8865a' stroke-width='0.7' opacity='.22' transform='translate(-420 0)'/><path d='M310.6 395Q377.9 495.9 495.3 526.2' stroke='%23a8865a' stroke-width='0.7' opacity='.22' transform='translate(0 -420)'/><path d='M16.3 404.3Q91.3 446.3 138.6 518.1' stroke='%23a8865a' stroke-width='0.7' opacity='.26'/><path d='M16.3 404.3Q91.3 446.3 138.6 518.1' stroke='%23a8865a' stroke-width='0.7' opacity='.26' transform='translate(0 -420)'/><path d='M73.7 302.5Q115.1 314.3 157.7 321' stroke='%23a8865a' stroke-width='0.7' opacity='.26'/><path d='M385.3 85.7Q430.8 85.6 476 90.4' stroke='%23fffbf2' stroke-width='0.6' opacity='.44'/><path d='M385.3 85.7Q430.8 85.6 476 90.4' stroke='%23fffbf2' stroke-width='0.6' opacity='.44' transform='translate(-420 0)'/><path d='M240.3 55.3Q238.6 172.5 329 247.1' stroke='%23a8865a' stroke-width='0.8' opacity='.32'/><path d='M58.9 14.7Q165.7 42.5 274.8 26.9' stroke='%23a8865a' stroke-width='0.5' opacity='.33'/><path d='M202.5 306.8Q310 380.4 331.7 508.9' stroke='%23fffbf2' stroke-width='0.9' opacity='.58'/><path d='M202.5 306.8Q310 380.4 331.7 508.9' stroke='%23fffbf2' stroke-width='0.9' opacity='.58' transform='translate(0 -420)'/><path d='M309.6 295.6Q232.7 374.1 136.4 427.1' stroke='%23a8865a' stroke-width='0.8' opacity='.37'/><path d='M309.6 295.6Q232.7 374.1 136.4 427.1' stroke='%23a8865a' stroke-width='0.8' opacity='.37' transform='translate(0 -420)'/></g></svg>");
  --ant-fib-b: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='260' height='260'><g fill='none' stroke-linecap='round'><path d='M240.5 246.6Q236.2 247.7 232.2 249.5' stroke='%23fffbf2' stroke-width='0.6' opacity='.32'/><path d='M49.9 115.6Q60 118.2 64.4 127.6' stroke='%23fffbf2' stroke-width='0.7' opacity='.38'/><path d='M133.3 190.9Q134 195.2 136.9 198.5' stroke='%23a8865a' stroke-width='0.5' opacity='.24'/><path d='M252.4 94.3Q246.3 99.3 241 105.1' stroke='%23a8865a' stroke-width='0.4' opacity='.15'/><path d='M123.3 186.7Q119.4 195.2 118.1 204.4' stroke='%23fffbf2' stroke-width='0.4' opacity='.36'/><path d='M212.1 50.9Q217 50.5 220.5 54' stroke='%23fffbf2' stroke-width='0.6' opacity='.46'/><path d='M86 96.1Q88.7 102.7 94.4 106.9' stroke='%23a8865a' stroke-width='0.4' opacity='.16'/><path d='M203.8 183.9Q198.6 186.7 193.6 189.9' stroke='%23a8865a' stroke-width='0.5' opacity='.29'/><path d='M43.5 253.5Q52.8 250.9 60.6 256.5' stroke='%23a8865a' stroke-width='0.5' opacity='.30'/><path d='M209.3 246.7Q201 268.5 203.8 291.6' stroke='%23fffbf2' stroke-width='0.8' opacity='.37'/><path d='M209.3 246.7Q201 268.5 203.8 291.6' stroke='%23fffbf2' stroke-width='0.8' opacity='.37' transform='translate(0 -260)'/><path d='M50.3 19.7Q48.5 25.4 51.4 30.5' stroke='%23a8865a' stroke-width='0.4' opacity='.16'/><path d='M137.5 44.1Q139.4 62.2 132.7 79.1' stroke='%23fffbf2' stroke-width='0.8' opacity='.38'/><path d='M89.1 232Q70.5 239.9 55.9 254' stroke='%23fffbf2' stroke-width='0.7' opacity='.46'/><path d='M166.3 62Q169.5 70.2 176.5 75.7' stroke='%23a8865a' stroke-width='0.5' opacity='.27'/><path d='M28.2 164.1Q30.6 176 39.7 184' stroke='%23fffbf2' stroke-width='0.8' opacity='.31'/><path d='M146.1 140.9Q154.9 148.4 163.2 156.4' stroke='%23fffbf2' stroke-width='0.7' opacity='.29'/><path d='M98.1 204.3Q117.8 207.4 132.6 220.8' stroke='%23a8865a' stroke-width='0.4' opacity='.21'/><path d='M109.9 21.3Q102.6 28.2 98.3 37.3' stroke='%23a8865a' stroke-width='0.5' opacity='.22'/><path d='M77.4 233.7Q94.2 245.7 114.8 244.1' stroke='%23fffbf2' stroke-width='0.7' opacity='.43'/><path d='M157.3 75.8Q162.6 81.4 165.4 88.5' stroke='%23a8865a' stroke-width='0.4' opacity='.20'/><path d='M109.1 212.3Q112.7 223.4 110.7 235' stroke='%23fffbf2' stroke-width='0.4' opacity='.34'/><path d='M68.6 221.6Q68.7 226.2 68.5 230.7' stroke='%23fffbf2' stroke-width='0.6' opacity='.38'/><path d='M223.2 67.4Q216.5 67.5 212.4 72.9' stroke='%23a8865a' stroke-width='0.4' opacity='.27'/><path d='M71.7 94.2Q91.4 95.6 104.5 110.5' stroke='%23a8865a' stroke-width='0.5' opacity='.25'/><path d='M76.2 20.4Q64.2 28.3 49.9 27.5' stroke='%23a8865a' stroke-width='0.6' opacity='.17'/><path d='M5 158.9Q19.2 165 33.1 172' stroke='%23a8865a' stroke-width='0.5' opacity='.26'/><path d='M213.6 156.8Q214.1 164.4 209.6 170.5' stroke='%23fffbf2' stroke-width='0.7' opacity='.33'/><path d='M110.9 82.4Q103.2 91.1 102.9 102.7' stroke='%23fffbf2' stroke-width='0.5' opacity='.43'/><path d='M193.6 240.6Q196.7 262.2 215.6 273.3' stroke='%23a8865a' stroke-width='0.4' opacity='.20'/><path d='M193.6 240.6Q196.7 262.2 215.6 273.3' stroke='%23a8865a' stroke-width='0.4' opacity='.20' transform='translate(0 -260)'/><path d='M201.2 216.1Q209.2 218.9 217.7 218.1' stroke='%23a8865a' stroke-width='0.5' opacity='.17'/><path d='M105.8 15.2Q108.2 24.2 115.5 30.1' stroke='%23a8865a' stroke-width='0.5' opacity='.18'/><path d='M82 174.4Q81.2 179.8 83.7 184.5' stroke='%23a8865a' stroke-width='0.6' opacity='.23'/><path d='M162 111.2Q145.8 127.3 148.3 150' stroke='%23a8865a' stroke-width='0.5' opacity='.15'/><path d='M218.5 101.8Q221.8 105 221.5 109.6' stroke='%23fffbf2' stroke-width='0.8' opacity='.45'/><path d='M184.3 173.8Q187.2 178 191 181.5' stroke='%23fffbf2' stroke-width='0.6' opacity='.40'/><path d='M141 31.5Q151.3 30.2 160.1 35.7' stroke='%23a8865a' stroke-width='0.4' opacity='.24'/><path d='M195.1 157.7Q195.3 163.1 194 168.5' stroke='%23a8865a' stroke-width='0.4' opacity='.19'/><path d='M128.3 141.9Q121.1 143.6 117.6 150.1' stroke='%23fffbf2' stroke-width='0.7' opacity='.41'/><path d='M234.3 39.8Q219.3 55.5 210.3 75.3' stroke='%23fffbf2' stroke-width='0.8' opacity='.49'/><path d='M28.8 215.1Q32.7 217.4 37.2 217.2' stroke='%23a8865a' stroke-width='0.6' opacity='.24'/><path d='M133 70.7Q124.6 92.2 122.7 115.1' stroke='%23a8865a' stroke-width='0.4' opacity='.26'/><path d='M190.3 18.4Q186.7 22.4 181.5 24' stroke='%23fffbf2' stroke-width='0.6' opacity='.32'/><path d='M253.7 0Q239.6 8.2 226.9 18.3' stroke='%23a8865a' stroke-width='0.6' opacity='.24'/><path d='M36.2 207.2Q41.4 218 46.9 228.7' stroke='%23a8865a' stroke-width='0.5' opacity='.28'/><path d='M21.3 84.8Q11.2 93.5 8.3 106.6' stroke='%23fffbf2' stroke-width='0.7' opacity='.46'/><path d='M37.2 36.4Q29 57.2 25.6 79.4' stroke='%23fffbf2' stroke-width='0.6' opacity='.46'/><path d='M135.8 139.6Q135.3 140.3 135.3 141.2' stroke='%236b4f30' stroke-width='2.4' opacity='.35'/><path d='M156 214Q155.2 214.4 154.9 215.3' stroke='%236b4f30' stroke-width='1.6' opacity='.40'/><path d='M93 53.3Q92.8 54.2 93 55.1' stroke='%236b4f30' stroke-width='1.5' opacity='.35'/><path d='M96.1 230.1Q96.1 230.5 96.2 230.8' stroke='%236b4f30' stroke-width='1.7' opacity='.31'/><path d='M154.1 257.6Q153.7 258.3 153 258.6' stroke='%236b4f30' stroke-width='2.1' opacity='.43'/><path d='M197.4 116.1Q198.2 116.1 199 116.4' stroke='%236b4f30' stroke-width='2.3' opacity='.39'/><path d='M202.6 87.8Q203.1 87.9 203.5 88.1' stroke='%236b4f30' stroke-width='2.4' opacity='.38'/></g></svg>");
  --ant-edge-t: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='420' height='14'><path d='M0 9.5L3.2 9.2L6.4 8.6L9.6 8.7L12.8 7.6L16 6.7L19.2 5.8L22.4 7.4L25.6 6.2L28.9 6.5L32.1 6.1L35.3 6.6L38.5 7.3L41.7 6.6L44.9 7.9L48.1 6.9L51.3 8.5L54.5 6.8L57.7 6.9L60.9 5.8L64.1 4.5L67.3 4.8L70.5 5.9L73.7 7.3L76.9 8L80.2 7.1L83.4 7.7L86.6 7.7L89.8 6.9L93 7.8L96.2 7.1L99.4 8.7L102.6 8.6L105.8 7.1L109 6.7L112.2 6.7L115.4 6.3L118.6 7.2L121.8 8.7L125 10.4L128.2 10.2L131.5 9.6L134.7 9.7L137.9 8.1L141.1 8.1L144.3 9.1L147.5 9.5L150.7 9.6L153.9 8.8L157.1 8.7L160.3 8.3L163.5 8.5L166.7 9L169.9 10L173.1 10.4L176.3 10.3L179.5 10.4L182.7 9.9L186 8.3L189.2 7.7L192.4 7.7L195.6 7.5L198.8 9.1L202 9.2L205.2 8.3L208.4 8L211.6 7.9L214.8 8.2L218 9L221.2 8.2L224.4 8.7L227.6 6.8L230.8 7.4L234 5.3L237.3 5.3L240.5 6.4L243.7 6L246.9 7L250.1 7.6L253.3 7L256.5 7.6L259.7 6.9L262.9 6L266.1 5.4L269.3 5.9L272.5 5.4L275.7 5.9L278.9 5.5L282.1 5.7L285.3 6.2L288.5 6.4L291.8 7.2L295 7.3L298.2 8L301.4 8.6L304.6 8.3L307.8 7.9L311 6.5L314.2 6.6L317.4 6.7L320.6 7L323.8 7.1L327 8.6L330.2 9.3L333.4 7.8L336.6 8.9L339.8 8.8L343.1 9.6L346.3 10L349.5 9.9L352.7 8.5L355.9 8.4L359.1 7.9L362.3 8.7L365.5 8.9L368.7 8.7L371.9 10.4L375.1 10.4L378.3 10.2L381.5 10L384.7 10.1L387.9 8.8L391.1 9.4L394.4 10L397.6 9.9L400.8 9.4L404 8.1L407.2 7.5L410.4 7.8L413.6 8.8L416.8 8.6L420 9.5L420 1L0 1Z' opacity='.3'/><path d='M0 8.1L3.2 6.6L6.4 6.1L9.6 7.3L12.8 5.6L16 3.7L19.2 4.6L22.4 5.5L25.6 4.4L28.9 3.6L32.1 4.5L35.3 4.4L38.5 4.6L41.7 5L44.9 5L48.1 4.4L51.3 6.1L54.5 4.2L57.7 5.3L60.9 4.2L64.1 2.7L67.3 2.9L70.5 3.2L73.7 4.3L76.9 5.4L80.2 5.6L83.4 5.5L86.6 6.3L89.8 4L93 5.3L96.2 5.2L99.4 6.3L102.6 7L105.8 4.5L109 4L112.2 5.3L115.4 3.3L118.6 5.7L121.8 6.2L125 8.3L128.2 7.6L131.5 7.7L134.7 7.3L137.9 6.7L141.1 5.6L144.3 6.2L147.5 7.8L150.7 6.6L153.9 7.5L157.1 7L160.3 7L163.5 5.7L166.7 6.7L169.9 8.4L173.1 8.7L176.3 8.3L179.5 8.3L182.7 7.9L186 5.9L189.2 5.2L192.4 6.3L195.6 4.9L198.8 6.2L202 7L205.2 5.5L208.4 6L211.6 6L214.8 6.2L218 6.8L221.2 5.6L224.4 6L227.6 4.4L230.8 5.7L234 2.7L237.3 3.4L240.5 4.5L243.7 4.4L246.9 4.6L250.1 5L253.3 5.4L256.5 5.6L259.7 4L262.9 4.5L266.1 3.4L269.3 3.9L272.5 4.2L275.7 3.3L278.9 2.6L282.1 3.8L285.3 4.6L288.5 3.7L291.8 5.4L295 5L298.2 6.1L301.4 5.7L304.6 6.2L307.8 6.1L311 4L314.2 5L317.4 4L320.6 4.5L323.8 4.2L327 6.8L330.2 6.7L333.4 6.1L336.6 5.9L339.8 7.5L343.1 8.3L346.3 7.9L349.5 8.4L352.7 5.8L355.9 6.4L359.1 5.5L362.3 6L365.5 7.1L368.7 7.4L371.9 9.1L375.1 7.6L378.3 8.3L381.5 7.1L384.7 7.4L387.9 6.2L391.1 7.5L394.4 7.5L397.6 7.4L400.8 7.4L404 5.5L407.2 6.1L410.4 5L413.6 7.3L416.8 7L420 7.7L420 1L0 1Z'/></svg>");
  --ant-edge-b: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='420' height='14'><path d='M0 7.7L3.2 7.7L6.4 7L9.6 7.8L12.8 7.3L16 7.7L19.2 5.4L22.4 6.2L25.6 5.9L28.9 7.3L32.1 7.3L35.3 5.7L38.5 6.3L41.7 7.7L44.9 7L48.1 5.8L51.3 5L54.5 3.6L57.7 4.6L60.9 3.7L64.1 4.7L67.3 4.2L70.5 4.4L73.7 5.5L76.9 5.7L80.2 7.1L83.4 6.3L86.6 5.3L89.8 5.4L93 6.3L96.2 5.7L99.4 5.2L102.6 6.4L105.8 5.5L109 8.2L112.2 8.4L115.4 8.4L118.6 8.9L121.8 8.2L125 7.8L128.2 8.5L131.5 7.6L134.7 6L137.9 5.2L141.1 5.9L144.3 5.6L147.5 6L150.7 5.6L153.9 4.8L157.1 4.9L160.3 5L163.5 4.7L166.7 4.7L169.9 3.6L173.1 3.7L176.3 3.6L179.5 4.3L182.7 5.4L186 4.4L189.2 5.6L192.4 5.6L195.6 7.5L198.8 7L202 5.6L205.2 6L208.4 6.5L211.6 5.8L214.8 7.5L218 6.2L221.2 7.2L224.4 8.2L227.6 7.7L230.8 8.3L234 8.3L237.3 8.1L240.5 6.8L243.7 6.4L246.9 6.3L250.1 6L253.3 5.3L256.5 3.8L259.7 5.8L262.9 5.9L266.1 5.4L269.3 5.9L272.5 5.7L275.7 5.2L278.9 4.3L282.1 3.9L285.3 3.9L288.5 4.1L291.8 4.6L295 4.8L298.2 6.4L301.4 6.7L304.6 6.6L307.8 6.9L311 7.8L314.2 8.1L317.4 7.4L320.6 6.5L323.8 5.5L327 6.2L330.2 7.4L333.4 6.5L336.6 7.2L339.8 7.2L343.1 7.4L346.3 8L349.5 7.5L352.7 7L355.9 4.6L359.1 5.7L362.3 4.3L365.5 5.6L368.7 4.6L371.9 3.6L375.1 3.6L378.3 5.9L381.5 5.4L384.7 5.4L387.9 4.4L391.1 4.9L394.4 4.7L397.6 4.3L400.8 4.1L404 4.9L407.2 4.5L410.4 5.1L413.6 6.9L416.8 7.4L420 7.7L420 13L0 13Z' opacity='.3'/><path d='M0 10.7L3.2 10.3L6.4 9.1L9.6 10.7L12.8 9.2L16 10.4L19.2 6.7L22.4 8.3L25.6 8.2L28.9 9.6L32.1 9.8L35.3 8.4L38.5 8.5L41.7 9L44.9 8.9L48.1 7.4L51.3 7.2L54.5 4.8L57.7 7.5L60.9 5.4L64.1 7L67.3 5.5L70.5 5.9L73.7 7.2L76.9 7.7L80.2 9.5L83.4 7.9L86.6 6.7L89.8 6.8L93 8.5L96.2 8.1L99.4 6.9L102.6 8L105.8 6.9L109 9.7L112.2 10.6L115.4 10.2L118.6 11.6L121.8 9.7L125 9.2L128.2 10.2L131.5 9.2L134.7 8.2L137.9 7.8L141.1 8.1L144.3 7.8L147.5 8.5L150.7 7.9L153.9 7.1L157.1 6.6L160.3 6.6L163.5 7.3L166.7 6.3L169.9 5.5L173.1 5.6L176.3 6.4L179.5 6.5L182.7 8L186 6.1L189.2 7.7L192.4 8.2L195.6 9.6L198.8 9.1L202 7L205.2 8.9L208.4 8L211.6 8.5L214.8 10.2L218 7.9L221.2 8.5L224.4 10.3L227.6 9.2L230.8 10.4L234 10.7L237.3 9.8L240.5 9.1L243.7 8.4L246.9 8L250.1 8.2L253.3 8L256.5 5.3L259.7 7.4L262.9 7.8L266.1 6.8L269.3 8.6L272.5 8.1L275.7 7.7L278.9 7.1L282.1 6.6L285.3 5.1L288.5 6.6L291.8 6.9L295 7.3L298.2 9L301.4 9.4L304.6 9.1L307.8 9.7L311 9.7L314.2 10.2L317.4 9.9L320.6 8.3L323.8 7.3L327 7.6L330.2 8.9L333.4 9.3L336.6 9L339.8 9.9L343.1 10.1L346.3 10L349.5 9.3L352.7 9.5L355.9 7.4L359.1 7.5L362.3 7L365.5 7.8L368.7 7.6L371.9 6.3L375.1 5.5L378.3 8.1L381.5 7.9L384.7 7.3L387.9 6.4L391.1 7.8L394.4 6.8L397.6 6.6L400.8 6.7L404 7L407.2 7.4L410.4 7.6L413.6 8.8L416.8 8.9L420 9.6L420 13L0 13Z'/></svg>");
  --ant-edge-l: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='360'><path d='M8.5 0L8.6 3.2L9.7 6.4L10.4 9.6L10.4 12.9L8.3 16.1L8.7 19.3L8.7 22.5L7.5 25.7L6.4 28.9L6.6 32.1L5.9 35.4L5.2 38.6L5.7 41.8L6.5 45L5 48.2L6.5 51.4L6.8 54.6L8.7 57.9L7.1 61.1L7 64.3L7.2 67.5L6.9 70.7L7.7 73.9L6.9 77.1L6.6 80.4L7.3 83.6L7.5 86.8L7.9 90L9.4 93.2L8.2 96.4L9.1 99.6L10.4 102.9L10.4 106.1L10.4 109.3L9 112.5L10 115.7L9.5 118.9L9.8 122.1L7.4 125.4L6.9 128.6L7.5 131.8L8.2 135L8.8 138.2L7.3 141.4L6.9 144.6L8.7 147.9L8.2 151.1L7.4 154.3L6.4 157.5L5.6 160.7L6.6 163.9L6.5 167.1L6.5 170.4L5.6 173.6L5.4 176.8L6.6 180L7.5 183.2L7.7 186.4L6.5 189.6L8.1 192.9L9.3 196.1L10.1 199.3L8.1 202.5L8.2 205.7L8.8 208.9L8.9 212.1L9.3 215.4L7.7 218.6L8.2 221.8L8.2 225L9.1 228.2L10.4 231.4L9.1 234.6L10.1 237.9L9.3 241.1L10 244.3L9.6 247.5L7.9 250.7L7.1 253.9L7.6 257.1L7.9 260.4L6.2 263.6L5.8 266.8L6.6 270L6.8 273.2L7.7 276.4L7.9 279.6L7.1 282.9L6.4 286.1L7.5 289.3L8.1 292.5L6.6 295.7L5.1 298.9L4.9 302.1L7.2 305.4L7.2 308.6L7 311.8L6.2 315L8 318.2L8.2 321.4L10.2 324.6L10.1 327.9L9.8 331.1L10.4 334.3L10.4 337.5L10.4 340.7L9.8 343.9L8.9 347.1L8.3 350.4L9.8 353.6L9.1 356.8L8.5 360L1 360L1 0Z' opacity='.3'/><path d='M6.1 0L6.7 3.2L7.4 6.4L8 9.6L8.4 12.9L6.8 16.1L7.2 19.3L6.4 22.5L4.9 25.7L3.7 28.9L5 32.1L3.4 35.4L2.8 38.6L2.8 41.8L3.5 45L3.2 48.2L4.2 51.4L4 54.6L6.9 57.9L4.7 61.1L4.6 64.3L5.3 67.5L5.5 70.7L5.2 73.9L4.4 77.1L3.8 80.4L5.5 83.6L6.2 86.8L5.2 90L6.8 93.2L5.8 96.4L6.3 99.6L7.9 102.9L8.4 106.1L7.5 109.3L7 112.5L7.5 115.7L7.5 118.9L8.2 122.1L4.9 125.4L4.1 128.6L4.6 131.8L5.4 135L6.3 138.2L5.8 141.4L5.4 144.6L7.4 147.9L6 151.1L5.6 154.3L3.9 157.5L2.6 160.7L4.1 163.9L4.4 167.1L3.7 170.4L4.3 173.6L2.5 176.8L4.5 180L6 183.2L5.1 186.4L4.4 189.6L6.3 192.9L6.5 196.1L8.3 199.3L5.3 202.5L5.5 205.7L7.1 208.9L7.1 212.1L6.8 215.4L5.6 218.6L6.5 221.8L6.2 225L7.1 228.2L7.7 231.4L6.4 234.6L7.6 237.9L6.8 241.1L7.3 244.3L7.7 247.5L5.2 250.7L4.4 253.9L6.2 257.1L5.8 260.4L3.5 263.6L4.5 266.8L4.1 270L5.3 273.2L5.5 276.4L5.8 279.6L4.6 282.9L4.9 286.1L4.9 289.3L5.4 292.5L4.2 295.7L3.2 298.9L2.4 302.1L4.8 305.4L5.3 308.6L5.7 311.8L4.4 315L6.5 318.2L6.8 321.4L8.4 324.6L8.4 327.9L8.3 331.1L7.4 334.3L8 337.5L7.6 340.7L8.1 343.9L6.3 347.1L6.7 350.4L7.8 353.6L6.3 356.8L6.5 360L1 360L1 0Z'/></svg>");
  --ant-edge-r: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='360'><path d='M5.2 0L4.9 3.2L4.6 6.4L3.6 9.6L3.6 12.9L4.7 16.1L4.3 19.3L5 22.5L4.9 25.7L5.4 28.9L7 32.1L7.5 35.4L7.6 38.6L5.6 41.8L5.6 45L7.5 48.2L6.5 51.4L5.6 54.6L5.2 57.9L5.2 61.1L6.9 64.3L8.3 67.5L7.1 70.7L7.3 73.9L8.6 77.1L8 80.4L9.5 83.6L7.7 86.8L6.8 90L6 93.2L7.8 96.4L7.8 99.6L7 102.9L6.4 106.1L6 109.3L7.7 112.5L6.6 115.7L6.9 118.9L6 122.1L6.9 125.4L7 128.6L6.7 131.8L5.5 135L4.5 138.2L4.7 141.4L4.5 144.6L4.5 147.9L4.2 151.1L4.1 154.3L4.4 157.5L4.2 160.7L4.8 163.9L4.9 167.1L5.7 170.4L4.9 173.6L5.5 176.8L6 180L4.7 183.2L3.7 186.4L3.6 189.6L3.6 192.9L5.2 196.1L5.5 199.3L4.4 202.5L4.7 205.7L6 208.9L7.2 212.1L7.7 215.4L6.6 218.6L6.7 221.8L6.7 225L7.1 228.2L7.4 231.4L6.6 234.6L5 237.9L5.7 241.1L6.7 244.3L7.7 247.5L6.9 250.7L7.4 253.9L7.8 257.1L8.8 260.4L9.5 263.6L8 266.8L7 270L7.5 273.2L6.7 276.4L6.3 279.6L5.5 282.9L5.3 286.1L6.3 289.3L6.8 292.5L7.8 295.7L7.7 298.9L6.2 302.1L6.8 305.4L6.6 308.6L7.4 311.8L6.6 315L5.1 318.2L4.6 321.4L4.3 324.6L5.2 327.9L3.8 331.1L4.4 334.3L3.7 337.5L4 340.7L5.7 343.9L6.3 347.1L4.4 350.4L4.7 353.6L4.4 356.8L5.2 360L13 360L13 0Z' opacity='.3'/><path d='M7.9 0L7 3.2L6.6 6.4L6.3 9.6L6.2 12.9L6.2 16.1L7 19.3L6.4 22.5L7 25.7L7.7 28.9L9.2 32.1L8.8 35.4L10.5 38.6L7.3 41.8L7.7 45L10.2 48.2L9.4 51.4L7 54.6L7.8 57.9L7 61.1L9.4 64.3L11 67.5L8.4 70.7L9.2 73.9L10.8 77.1L10.2 80.4L11.6 83.6L10.7 86.8L8.1 90L8.3 93.2L9.2 96.4L10.2 99.6L9.7 102.9L8.6 106.1L7.2 109.3L10.5 112.5L8 115.7L9.9 118.9L8.8 122.1L9.4 125.4L9.9 128.6L9.4 131.8L7.4 135L5.8 138.2L7.6 141.4L7 144.6L6.2 147.9L7 151.1L5.9 154.3L6 157.5L6.7 160.7L7.2 163.9L6.5 167.1L7.3 170.4L7.9 173.6L7.5 176.8L7.3 180L7 183.2L6.6 186.4L6.5 189.6L5.3 192.9L7.8 196.1L6.7 199.3L5.8 202.5L6.3 205.7L7.2 208.9L9 212.1L9.2 215.4L9.1 218.6L8 221.8L9.2 225L9.5 228.2L9.9 231.4L8.2 234.6L7.1 237.9L7.4 241.1L8.4 244.3L9.7 247.5L9.4 250.7L10.1 253.9L10.3 257.1L11 260.4L11.6 263.6L10.7 266.8L8.3 270L10.3 273.2L9.5 276.4L8 279.6L7.8 282.9L7.4 286.1L8.4 289.3L8.6 292.5L9.7 295.7L9.2 298.9L8 302.1L9.5 305.4L8.6 308.6L10 311.8L8.7 315L8.1 318.2L6.9 321.4L5.6 324.6L8 327.9L5.4 331.1L7.3 334.3L6.2 337.5L5.7 340.7L8.5 343.9L7.9 347.1L7.1 350.4L6.1 353.6L6.1 356.8L7.8 360L13 360L13 0Z'/></svg>");
  --ant-spots: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='640' height='640'><defs><radialGradient id='s'><stop offset='0' stop-color='%237a4a1c' stop-opacity='.55'/><stop offset='.6' stop-color='%238a5a26' stop-opacity='.25'/><stop offset='1' stop-color='%238a5a26' stop-opacity='0'/></radialGradient><radialGradient id='w'><stop offset='.7' stop-color='%239a6a30' stop-opacity='0'/><stop offset='.93' stop-color='%239a6a30' stop-opacity='.16'/><stop offset='1' stop-color='%239a6a30' stop-opacity='0'/></radialGradient></defs><ellipse cx='292.2' cy='455.3' rx='6.4' ry='7.5' fill='url(%23s)' opacity='.71'/><ellipse cx='549.2' cy='23.5' rx='5.5' ry='4.3' fill='url(%23s)' opacity='1.00'/><ellipse cx='475.2' cy='108.3' rx='2.9' ry='2.6' fill='url(%23s)' opacity='.66'/><ellipse cx='324.8' cy='414.1' rx='2.3' ry='1.9' fill='url(%23s)' opacity='.80'/><ellipse cx='178.1' cy='57.9' rx='9.4' ry='9.7' fill='url(%23s)' opacity='.65'/><ellipse cx='497.3' cy='485.7' rx='2.9' ry='2.6' fill='url(%23s)' opacity='.89'/><ellipse cx='613' cy='146' rx='3.4' ry='2.6' fill='url(%23s)' opacity='.42'/><ellipse cx='33.1' cy='306' rx='6' ry='5.4' fill='url(%23s)' opacity='.60'/><ellipse cx='90.4' cy='590' rx='3.6' ry='2.9' fill='url(%23s)' opacity='.72'/><ellipse cx='303.6' cy='334.8' rx='5.1' ry='6' fill='url(%23s)' opacity='.50'/><ellipse cx='473.7' cy='271.1' rx='3.2' ry='2.8' fill='url(%23s)' opacity='.45'/><ellipse cx='146.5' cy='294.7' rx='5.1' ry='4.2' fill='url(%23s)' opacity='.59'/><ellipse cx='399.3' cy='311.5' rx='6.5' ry='5.3' fill='url(%23s)' opacity='.90'/><ellipse cx='115.6' cy='608' rx='2.2' ry='1.9' fill='url(%23s)' opacity='.65'/><ellipse cx='157.2' cy='360.8' rx='6.3' ry='6.7' fill='url(%23s)' opacity='.72'/><ellipse cx='443.9' cy='164.7' rx='2.9' ry='3' fill='url(%23s)' opacity='.97'/><ellipse cx='399.9' cy='364.7' rx='86.9' ry='56.3' fill='url(%23w)'/><ellipse cx='514.8' cy='247' rx='82.5' ry='51.1' fill='url(%23w)'/></svg>");
  /* Pâte : taches brunes larges (épaisseur inégale) et zones plus fines, plus claires. */
  --ant-cloud: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' width='520' height='520'><filter id='m' x='0' y='0' width='100%' height='100%'><feTurbulence type='fractalNoise' baseFrequency='.009' numOctaves='3' seed='7' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 .55 0 0 0 0 .4 0 0 0 0 .22 0 0 0 .42 -.17'/></filter><filter id='t' x='0' y='0' width='100%' height='100%'><feTurbulence type='fractalNoise' baseFrequency='.0115' numOctaves='2' seed='19' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 .98 0 0 0 0 .93 -1.5 0 0 0 .64'/></filter><rect width='100%' height='100%' filter='url(%23m)'/><rect width='100%' height='100%' filter='url(%23t)'/></svg>");
}
.antemoro { --ant-pulp: #efe3c6; --ant-seed: 0; --fringe-top: 12px; --fringe-right: 12px; --fringe-bottom: 12px; --fringe-left: 12px;
  --ant-shadow: 0 .2rem .4rem rgba(60, 40, 20, .22), 0 1.2rem 2.4rem -1rem rgba(60, 40, 20, .38);
  position: relative; isolation: isolate; color: #2b2118; }
.antemoro::before { content: ''; position: absolute; z-index: -1; inset: 0; pointer-events: none;
  /* Bordure transparente (un sixième de frange) et background-clip: padding-box : le papier n'est pas peint au ras de la boîte.
     Sans elle, Chrome laisse un liseré au bord de la boîte d'une feuille tournée, même là où le masque vaut 0. */
  border: solid transparent; border-width: calc(var(--fringe-top) / 6) calc(var(--fringe-right) / 6) calc(var(--fringe-bottom) / 6) calc(var(--fringe-left) / 6);
  background:
    var(--ant-light, linear-gradient(transparent 0 0)),
    var(--ant-age, linear-gradient(transparent 0 0)),
    var(--ant-fib-a) calc(var(--ant-seed) * 53px) calc(var(--ant-seed) * 31px) / 420px,
    var(--ant-fib-b) calc(var(--ant-seed) * -29px) calc(var(--ant-seed) * 47px) / 260px,
    var(--ant-cloud) calc(var(--ant-seed) * 71px) calc(var(--ant-seed) * -43px) / 520px,
    var(--paper),
    var(--ant-pulp);
  background-clip: padding-box;
  /* Bord à la cuve : feuille moins les zones coupées des quatre bords (union des coupes, puis soustraction).
     Chaque tuile de bord a une marge vide d'un sixième côté extérieur, placée hors de la feuille : pas de couture au raccord. */
  mask:
    linear-gradient(#000 0 0),
    var(--ant-edge-t) calc(var(--ant-seed) * -37px) calc(var(--fringe-top) / -6) / 420px calc(var(--fringe-top) * 7 / 6) repeat-x,
    var(--ant-edge-b) calc(var(--ant-seed) * 23px) calc(100% + var(--fringe-bottom) / 6) / 420px calc(var(--fringe-bottom) * 7 / 6) repeat-x,
    var(--ant-edge-l) calc(var(--fringe-left) / -6) calc(var(--ant-seed) * 19px) / calc(var(--fringe-left) * 7 / 6) 360px repeat-y,
    var(--ant-edge-r) calc(100% + var(--fringe-right) / 6) calc(var(--ant-seed) * -41px) / calc(var(--fringe-right) * 7 / 6) 360px repeat-y;
  mask-composite: subtract, add, add, add, add; }
.antemoro::after { content: ''; position: absolute; z-index: -2; inset: calc(var(--fringe-top) * .7) calc(var(--fringe-right) * .7) calc(var(--fringe-bottom) * .7) calc(var(--fringe-left) * .7); pointer-events: none; box-shadow: var(--ant-shadow); }
.antemoro.flat { --fringe-top: 0px; --fringe-right: 0px; --fringe-bottom: 0px; --fringe-left: 0px; }
.antemoro.flat::before { mask: none; }
/* Papier ancien : pâte jaunie, taches de rousseur et auréoles, bords brunis. */
.antemoro.aged { --ant-pulp: #e7d2a2;
  --ant-age: var(--ant-spots) calc(var(--ant-seed) * 61px) calc(var(--ant-seed) * 37px) / 640px, radial-gradient(ellipse 130% 110% at 40% 30%, transparent 45%, rgba(150, 100, 40, .2)); }
.antemoro.aged::before { box-shadow: inset 0 0 2.4rem rgba(140, 92, 38, .3), inset 0 0 .8rem rgba(110, 70, 28, .4); }
/* Soir : le papier reste crème, éclairé chaud par la lampe, sur un mur sombre. */
html.dark .antemoro { --ant-light: radial-gradient(ellipse 90% 80% at 78% 10%, rgba(255, 214, 150, .2), transparent 70%), radial-gradient(ellipse 80% 80% at 50% 50%, transparent 55%, rgba(80, 50, 20, .2));
  --ant-shadow: 0 .6rem 1.2rem rgba(0, 0, 0, .5), 0 0 3.2rem rgba(255, 186, 110, .12); }

/* ------------------------------------------------------------------------------------------------
   Transitions entre pages (navigateurs qui les prennent en charge ; ailleurs, navigation normale). Coupées si mouvement réduit.
   Toute navigation du site : fondu court. Entre l'étagère (ou un rayon) et un article en vue Book : le livre s'ouvre.
   Aller (html.vt-open, posé par l'article) : le dos cliqué (nom « book », shelf.js) pivote et grandit jusqu'au livre ouvert (nom « book », post.ejs),
   qui se déplie depuis sa reliure. Retour (html.vt-close, posé par l'étagère) : l'inverse, le livre se referme et reprend sa place.
   Le groupe garde le déplacement du navigateur ; les images ancienne et nouvelle remplissent le groupe (fill) et n'animent que transform et opacity. */
@media (prefers-reduced-motion: no-preference) {
  @view-transition { navigation: auto; }
}
::view-transition-old(root), ::view-transition-new(root) { animation-duration: .2s; }
/* Le groupe se déplace lentement au départ (le dos pivote sur place), puis grandit jusqu'au livre ouvert. */
::view-transition-group(book) { animation-duration: .6s; animation-timing-function: cubic-bezier(.55, 0, .25, 1); }
::view-transition-image-pair(book) { perspective: 1600px; }
::view-transition-old(book), ::view-transition-new(book) { height: 100%; object-fit: fill; animation-duration: .6s; animation-timing-function: linear; }
html.vt-open::view-transition-old(book) { animation-name: vt-spine-out; transform-origin: 0 50%; }
html.vt-open::view-transition-new(book) { animation-name: vt-book-in; }
html.vt-close::view-transition-old(book) { animation-name: vt-book-out; }
html.vt-close::view-transition-new(book) { animation-name: vt-spine-in; transform-origin: 0 50%; }
/* Aller : le dos tourne sur sa charnière en s'effaçant ; le livre ouvert se déplie depuis sa reliure. Retour : l'inverse. */
@keyframes vt-spine-out { 0% { opacity: 1; transform: none; } 18% { opacity: 1; } 34%, 100% { opacity: 0; transform: rotateY(-80deg); } }
@keyframes vt-book-in { 0%, 20% { opacity: 0; transform: scaleX(.15); } 55% { opacity: 1; } 100% { opacity: 1; transform: none; } }
@keyframes vt-book-out { 0% { opacity: 1; transform: none; } 60% { opacity: 1; transform: scaleX(.15); } 78%, 100% { opacity: 0; transform: scaleX(.15); } }
@keyframes vt-spine-in { 0%, 62% { opacity: 0; transform: rotateY(-80deg); } 100% { opacity: 1; transform: none; } }

/* ------------------------------------------------------------------------------------------------
   Recherche (js/search.js, _partial/search.ejs) : dialog modal ouvert par la loupe de l'en-tête ou Ctrl+K (Cmd+K).
   La pièce s'assombrit (::backdrop, comme la visionneuse d'images) ; une feuille de papier Antemoro (classe commune, sans filtre)
   porte le champ, le nombre de livres trouvés et la liste des résultats, qui défile seule. Le dialog couvre l'écran, transparent :
   un clic hors de la feuille le ferme. Tailles en px : même fenêtre sur toutes les pages (l'accueil fait suivre l'écran à rem).
   Apparition : fondu court (opacity, transform), coupé par prefers-reduced-motion (règle commune plus haut). */
html:has(.finder[open]) { overflow: hidden; }
.finder { position: fixed; inset: 0; width: 100%; max-width: none; height: 100dvh; max-height: none; margin: 0; padding: 72px 24px 56px; border: 0; background: transparent; overflow: hidden; color: #2b2118; }
.finder[open] { display: flex; flex-direction: column; align-items: center; }
.finder::backdrop { background: rgba(22, 14, 8, .62); transition: opacity .15s ease; }
@starting-style { .finder[open]::backdrop { opacity: 0; } }
.fd-sheet { --ant-seed: 41; --fringe-top: 10px; --fringe-right: 10px; --fringe-bottom: 10px; --fringe-left: 10px;
  display: flex; flex-direction: column; width: min(640px, 100%); max-height: 100%; min-height: 0; padding: 20px 24px 14px; transition: opacity .15s ease, transform .15s ease; }
@starting-style { .finder[open] .fd-sheet { opacity: 0; transform: translateY(-8px); } }
/* Champ : loupe et texte sur le papier, filet d'encre dessous (rouge au focus : le contour du champ est retiré). */
.fd-field { display: flex; align-items: center; gap: 10px; padding: 2px 2px 8px; border-bottom: 2px solid rgba(60, 40, 20, .22); color: #6e5a43; }
.fd-field:focus-within { border-bottom-color: #8c2f22; }
.fd-field svg { flex: none; width: 18px; height: 18px; }
.fd-field input { flex: 1; min-width: 0; border: 0; padding: 0; background: none; font: 20px/30px 'Source Serif 4', Georgia, serif; color: #2b2118; outline: none; -webkit-appearance: none; appearance: none; }
.fd-field input::placeholder { color: #8a7660; font-style: italic; opacity: 1; }
.fd-field input::-webkit-search-cancel-button { -webkit-appearance: none; }
.fd-n { padding: 6px 2px 0; font: 12px/18px 'Courier Prime', 'Courier New', monospace; letter-spacing: .04em; color: #5b4a36; }
.fd-n:empty { display: none; }
/* Résultats : bout de dos du livre, titre, méta (rayon, série et tome, date), un ou deux extraits. Ligne active : fond teinté, titre rouge. */
.fd-list { min-height: 0; margin: 6px -12px 0; padding: 0 0 4px; overflow: auto; overscroll-behavior: contain; list-style: none; }
.fd-list[hidden] { display: none; }
.fd-list li + li { border-top: 1px solid rgba(60, 40, 20, .12); }
.fd-list a { display: grid; grid-template-columns: 13px minmax(0, 1fr); column-gap: 14px; padding: 10px 12px; border-radius: 2px; color: inherit; text-decoration: none; }
.fd-list a > :not(.bit) { grid-column: 2; }
.fd-list .bit { grid-row: 1 / span 4; margin-top: 2px; }
.fd-list a:hover, .fd-list a[aria-selected="true"] { background: rgba(140, 70, 30, .1); }
.fd-list a[aria-selected="true"] .fd-t { color: #7d2a20; }
.fd-t { font: 600 17px/24px 'Source Serif 4', Georgia, serif; }
.fd-m { font: 12px/18px 'Courier Prime', 'Courier New', monospace; color: #5b4a36; }
.fd-x { margin-top: 4px; font-size: 14px; line-height: 20px; color: #3d3226; }
/* Mots trouvés : trait de surligneur ocre posé sur le bas de la ligne, comme au crayon gras sur le papier. */
.finder mark { color: inherit; background: linear-gradient(transparent 45%, rgba(201, 140, 58, .42) 45% 90%, transparent 90%); }
@media not all and (min-width: 720px) {
  .finder { padding: 8px; }
  .fd-sheet { flex: 1; width: 100%; padding: 16px 18px 10px; }
  .fd-field input { font-size: 18px; }
  .fd-list { margin: 6px -6px 0; }
  .fd-list a { column-gap: 12px; padding: 10px 6px; }
}

/* Bout de dos dans la matière du rayon : registre des archives et résultats de la recherche. Teinte posée par le script (bitStyle, search.js) ;
   sans script, teinte de la matière. En px : même taille sur l'accueil. */
.bit { display: block; width: 13px; height: 26px; border-radius: 1px; background-color: var(--c, #56635a); background-image: linear-gradient(90deg, rgba(0, 0, 0, .3), rgba(255, 240, 220, .15) 40%, rgba(0, 0, 0, .25)), var(--fine);
  box-shadow: 1px 1px 2px rgba(0, 0, 0, .35); }
.bit.m-leather { --c0: #5c201b; background-color: var(--c, var(--c0)); background-image: linear-gradient(180deg, transparent 0 4px, rgba(217, 185, 111, .85) 4px 5px, transparent 5px 7px, rgba(217, 185, 111, .85) 7px 8px, transparent 8px calc(100% - 8px), rgba(217, 185, 111, .85) calc(100% - 8px) calc(100% - 7px), transparent calc(100% - 7px)), linear-gradient(90deg, rgba(0, 0, 0, .45), rgba(255, 238, 215, .2) 35%, rgba(0, 0, 0, .45)), var(--fine); }
.bit.m-cloth { --c0: #2c405f; background-color: var(--c, var(--c0)); background-image: linear-gradient(180deg, transparent 0 calc(100% - 8px), var(--s1, #b5832c) calc(100% - 8px) calc(100% - 6px), #e6d8b8 calc(100% - 6px) calc(100% - 5px), var(--s2, #505b34) calc(100% - 5px) calc(100% - 2px), transparent calc(100% - 2px)), repeating-linear-gradient(0deg, rgba(255, 255, 255, .07) 0 1px, transparent 1px 2px), linear-gradient(90deg, rgba(0, 0, 0, .3), transparent 40%, rgba(0, 0, 0, .3)); }
.bit.m-board { background-image: linear-gradient(180deg, transparent 0 5px, #ebe3cf 5px 13px, transparent 13px), linear-gradient(90deg, rgba(0, 0, 0, .25), rgba(255, 240, 220, .12) 40%, rgba(0, 0, 0, .2)), var(--fine); }
.bit.m-kraft { --c0: #b38e5e; background-color: var(--c, var(--c0)); background-image: repeating-linear-gradient(180deg, #f1e6cc 0 3px, transparent 3px 5.5px), linear-gradient(90deg, rgba(0, 0, 0, .2), rgba(255, 245, 225, .15) 40%, rgba(0, 0, 0, .2)), var(--fiber); background-size: 1.5px 100%, auto, auto; background-position: 50% 0, 0 0, 0 0; background-repeat: no-repeat, repeat, repeat; }

