/* OLIVE — thème Piwigo autonome (parent "default" en filet de sécurité
   structurel seulement, load_parent_css=false : aucun CSS hérité).
   CSS unique, chargé en lien direct (voir header.tpl), hors pipeline
   Piwigo. Dernière section : habillage des blocs encore rendus par
   "default" (formulaires, recherche, tags, à propos, calendrier...). */

/* ---------------------------------------------------------------------
   1. Design tokens
   --------------------------------------------------------------------- */
:root{
	--olive-50:#F8F6EE;
	--olive-100:#F1EDDE;
	--olive-150:#EAE4CD;
	--olive-200:#DED5B4;
	--olive-300:#C3B98D;
	--olive-400:#9FA070;
	--olive-500:#7C8355;
	--olive-600:#5B6544;
	--olive-700:#454E34;
	--olive-800:#333A27;
	--olive-900:#22271A;
	--olive-clay:#B0764C;

	--olive-bg:var(--olive-50);
	--olive-surface:#FFFFFF;
	--olive-surface-2:var(--olive-100);
	--olive-text:var(--olive-900);
	--olive-text-muted:#6C7059;
	--olive-border:rgba(34,39,26,.11);
	--olive-border-strong:rgba(34,39,26,.2);
	--olive-accent:var(--olive-600);
	--olive-accent-strong:var(--olive-700);
	--olive-accent-soft:var(--olive-150);
	--olive-link:var(--olive-700);
	--olive-focus:#1E5B8C;
	--olive-danger:#A7402E;

	--olive-shadow-sm:0 1px 3px rgba(34,39,26,.10);
	--olive-shadow:0 8px 24px rgba(34,39,26,.12);
	--olive-shadow-lg:0 18px 40px rgba(34,39,26,.16);

	--olive-radius-lg:20px;
	--olive-radius-md:14px;
	--olive-radius-sm:10px;
	--olive-radius-pill:999px;

	--olive-font-display:'Fraunces', Georgia, 'Times New Roman', serif;
	--olive-font-body:'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;

	--olive-topbar-h:64px;
	--olive-sidebar-w:280px;
	--olive-container:1440px;
}

/* ---------------------------------------------------------------------
   2. Reset léger & typographie
   --------------------------------------------------------------------- */
.olive-body,
.olive-body #content{
	background:var(--olive-bg);
	color:var(--olive-text);
}
.olive-body{
	font-family:var(--olive-font-body);
	line-height:1.5;
	-webkit-font-smoothing:antialiased;
	min-height:100vh;
	display:flex;
	flex-direction:column;
}
.olive-body *{ box-sizing:border-box; }
.olive-body h1,.olive-body h2,.olive-body h3,.olive-body h4{
	font-family:var(--olive-font-display);
	color:var(--olive-text);
	font-weight:600;
	line-height:1.2;
	margin:0 0 .5em;
}
.olive-body a{ color:var(--olive-link); text-decoration:none; }
.olive-body a:hover{ text-decoration:underline; }
.olive-body p{ margin:0 0 1em; }
.olive-body ul,.olive-body dl,.olive-body dd{ margin:0; padding:0; list-style:none; }
.olive-body img{ max-width:100%; display:block; }
.olive-body button{ font:inherit; color:inherit; }

.olive-skip-link{
	position:absolute; left:0; top:-48px;
	background:var(--olive-accent-strong); color:#fff;
	padding:.75rem 1.25rem; z-index:1000;
	border-radius:0 0 8px 0;
	transition:top .15s ease;
}
.olive-skip-link:focus{ top:0; }

.olive-body :focus-visible{
	outline:3px solid var(--olive-focus);
	outline-offset:2px;
	border-radius:4px;
}
@media (prefers-reduced-motion: reduce){
	.olive-body,.olive-body *{
		animation-duration:.001ms !important;
		animation-iteration-count:1 !important;
		transition-duration:.001ms !important;
		scroll-behavior:auto !important;
	}
}

.olive-icon{ display:inline-block; vertical-align:middle; flex-shrink:0; }

/* Boutons génériques réutilisés partout (topbar, actions, formulaires) */
.olive-btn{
	display:inline-flex; align-items:center; justify-content:center; gap:.5em;
	font-family:var(--olive-font-body); font-size:.92rem; font-weight:600;
	padding:.65em 1.2em; border-radius:var(--olive-radius-pill);
	border:1px solid transparent; cursor:pointer;
	background:var(--olive-surface-2); color:var(--olive-text);
	transition:background-color .15s ease, color .15s ease, border-color .15s ease, box-shadow .15s ease;
}
.olive-btn:hover{ background:var(--olive-200); text-decoration:none; }
.olive-btn--primary{ background:var(--olive-accent); color:#fff; }
.olive-btn--primary:hover{ background:var(--olive-accent-strong); }
.olive-btn--ghost{ background:transparent; border-color:var(--olive-border-strong); }
.olive-btn--block{ display:flex; width:100%; }
.olive-btn--icon{ padding:.5em .75em; }

/* ---------------------------------------------------------------------
   3. Topbar
   --------------------------------------------------------------------- */
.olive-topbar{
	background:var(--olive-600);
	color:#F5F3E8;
	position:sticky; top:0; z-index:60;
	box-shadow:var(--olive-shadow-sm);
}
.olive-topbar__inner{
	max-width:var(--olive-container);
	margin:0 auto;
	height:var(--olive-topbar-h);
	display:flex; align-items:center; gap:14px;
	padding:0 20px;
}
.olive-topbar__icon-btn{
	display:inline-flex; align-items:center; justify-content:center;
	width:40px; height:40px; border-radius:var(--olive-radius-pill);
	background:transparent; border:none; color:inherit; cursor:pointer;
	list-style:none;
}
.olive-topbar__icon-btn:hover{ background:rgba(255,255,255,.12); }
.olive-topbar__icon-btn::-webkit-details-marker{ display:none; }
.olive-topbar__toggle{ display:none; }

.olive-brand{
	display:flex; align-items:center; gap:10px;
	color:#fff; min-width:0;
}
.olive-brand:hover{ text-decoration:none; }
.olive-brand__mark{
	display:inline-flex; align-items:center; justify-content:center;
	width:38px; height:38px; border-radius:var(--olive-radius-pill);
	background:rgba(255,255,255,.14); flex-shrink:0;
}
.olive-brand__text{ min-width:0; display:flex; flex-direction:column; line-height:1.25; }
.olive-brand__title{
	/* Couleur explicite (ne pas se reposer sur l'héritage de .olive-brand
	   color:#fff) : un blanc légèrement chaud (--olive-50, déjà utilisé
	   comme fond clair ailleurs dans la palette) plutôt qu'un blanc pur, et
	   graisse 700 (police chargée en 700 exprès, voir header.tpl) pour un
	   contraste net sur le fond vert olive de la topbar, sans toucher à
	   cette couleur de fond. */
	font-family:var(--olive-font-display); font-weight:700; font-size:1.05rem;
	text-transform:uppercase; letter-spacing:.03em;
	white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
	color:var(--olive-50);
}
.olive-brand__tagline{
	font-size:.8rem; color:rgba(248,246,238,.85);
	white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}

.olive-search{ margin-left:auto; position:relative; }
.olive-search > summary{ list-style:none; }
.olive-search[open] > summary{ background:rgba(255,255,255,.16); }
.olive-search__form{
	position:absolute; right:0; top:calc(100% + 8px);
	background:var(--olive-surface); color:var(--olive-text);
	border-radius:var(--olive-radius-md); box-shadow:var(--olive-shadow-lg);
	padding:8px; display:flex; gap:6px; width:min(320px, 80vw);
	border:1px solid var(--olive-border);
}
.olive-search__form input[type=text]{
	flex:1; border:1px solid var(--olive-border-strong); border-radius:var(--olive-radius-sm);
	padding:.55em .8em; font:inherit; color:inherit; background:var(--olive-bg);
}
.olive-search__submit{
	display:inline-flex; align-items:center; justify-content:center;
	width:38px; border-radius:var(--olive-radius-sm); border:none;
	background:var(--olive-accent); color:#fff; cursor:pointer;
}

/* ---------------------------------------------------------------------
   4. Layout shell (topbar + sidebar + contenu)
   --------------------------------------------------------------------- */
#olive-shell{
	max-width:var(--olive-container);
	margin:0 auto;
	display:flex;
	align-items:flex-start;
	flex:1 0 auto;
	width:100%;
}
.olive-body #content,
.olive-body #content.contentWithMenu{
	flex:1 1 auto;
	min-width:0;
	padding:24px 24px 56px;
}

.olive-overlay{
	display:none;
	position:fixed; inset:0; background:rgba(20,22,14,.45);
	z-index:70;
}

/* ---------------------------------------------------------------------
   5. Sidebar
   --------------------------------------------------------------------- */
.olive-sidebar{
	flex:0 0 var(--olive-sidebar-w);
	width:var(--olive-sidebar-w);
	padding:24px 16px 40px 24px;
	position:sticky;
	top:var(--olive-topbar-h);
	max-height:calc(100vh - var(--olive-topbar-h));
	overflow-y:auto;
}
.olive-sidebar__inner{ display:flex; flex-direction:column; gap:16px; }

/* Barre de défilement fine, discrète (couleur olive douce), quasi invisible
   au repos et plus visible au survol — plutôt que la barre grise épaisse
   par défaut du navigateur. Firefox (scrollbar-width/-color) + navigateurs
   Chromium (::-webkit-scrollbar*), dégrade proprement sur les autres. */
.olive-sidebar{
	scrollbar-width:thin;
	scrollbar-color:var(--olive-200) transparent;
}
.olive-sidebar::-webkit-scrollbar{ width:8px; }
.olive-sidebar::-webkit-scrollbar-track{ background:transparent; }
.olive-sidebar::-webkit-scrollbar-thumb{
	background-color:var(--olive-200);
	border-radius:var(--olive-radius-pill);
	border:2px solid var(--olive-bg);
}
.olive-sidebar:hover::-webkit-scrollbar-thumb,
.olive-sidebar:hover{ scrollbar-color:var(--olive-300) transparent; }
.olive-sidebar::-webkit-scrollbar-thumb:hover{ background-color:var(--olive-300); }

/* Page photo : sidebar en tiroir (hamburger) même sur desktop — sur cette
   page précise, une sidebar toujours visible prend trop de place à côté de
   l'image et pollue visuellement, contrairement aux pages catégories où
   elle reste utile en permanence (voir olive_flag_picture_page() dans
   functions.inc.php pour la classe "olive-picture-page" sur <body>).
   Reprend EXACTEMENT le mécanisme du tiroir mobile (voir plus bas,
   @media max-width:900px : bouton, transform, recouvrement, classe
   "olive-nav-open" posée par olive.js) — seulement sans le réserver à une
   largeur d'écran ici, donc actif à toute taille sur cette page. Une fois
   la sidebar retirée du flux (position:fixed), #olive-shell (flex row
   sidebar+contenu) donne naturellement toute la largeur au contenu, sans
   réglage supplémentaire. */
body.olive-picture-page .olive-topbar__toggle{ display:inline-flex; }
body.olive-picture-page .olive-sidebar{
	position:fixed; top:0; left:0; height:100vh; max-height:none;
	transform:translateX(-100%);
	z-index:80; box-shadow:var(--olive-shadow-lg);
	background:var(--olive-bg);
	transition:transform .25s ease;
	padding-top:calc(var(--olive-topbar-h) + 12px);
}
body.olive-picture-page.olive-nav-open .olive-sidebar{ transform:translateX(0); }
body.olive-picture-page.olive-nav-open .olive-overlay{ display:block; }
body.olive-picture-page.olive-nav-open{ overflow:hidden; }

.olive-panel{
	background:var(--olive-surface);
	border-radius:var(--olive-radius-md);
	box-shadow:var(--olive-shadow-sm);
	padding:16px;
}
.olive-panel__title{
	font-family:var(--olive-font-body);
	font-size:.72rem; font-weight:700; letter-spacing:.09em; text-transform:uppercase;
	color:var(--olive-text-muted);
	margin:0 0 12px;
	padding-left:10px;
	border-left:3px solid var(--olive-accent);
}
.olive-panel__all-link{
	font-size:.85rem; font-weight:600; text-align:center; padding:2px 4px;
}

.olive-account{ display:flex; gap:10px; align-items:flex-start; }
.olive-account__avatar{
	flex:0 0 auto; width:36px; height:36px; border-radius:var(--olive-radius-pill);
	display:inline-flex; align-items:center; justify-content:center;
	background:var(--olive-accent-soft); color:var(--olive-accent-strong);
}
.olive-account__hello{ font-weight:600; margin:0 0 6px; font-size:.92rem; }
.olive-account__links{ display:flex; flex-direction:column; gap:4px; }
.olive-account__links a{ font-size:.85rem; color:var(--olive-text-muted); }
.olive-account__links a:hover{ color:var(--olive-link); }

.olive-quickconnect{ margin-top:12px; padding-top:12px; border-top:1px solid var(--olive-border); }
.olive-quickconnect p{ margin:0 0 8px; }
.olive-quickconnect label{ display:block; font-size:.78rem; color:var(--olive-text-muted); margin-bottom:3px; }
.olive-quickconnect input[type=text],
.olive-quickconnect input[type=password]{
	width:100%; padding:.5em .7em; border-radius:var(--olive-radius-sm);
	border:1px solid var(--olive-border-strong); font:inherit; background:var(--olive-bg);
}
.olive-quickconnect__remember{ font-size:.8rem; display:flex; align-items:center; gap:6px; }
.olive-quickconnect__actions{ display:flex; }
.olive-quickconnect__forgot{ font-size:.78rem; }

/* Arbre des albums. Par défaut, seul le niveau racine se replie/déplie
   (bouton +/- visible uniquement sur .olive-tree__node--root ci-dessous) :
   les niveaux plus profonds n'ont alors aucun mécanisme d'ouverture propre
   et restent invisibles (max-height:0 hérité de la règle de base). Avec le
   réglage "repliage profond" (Configuration > Thèmes > Olive > Configurer),
   classe "olive-deep-tree" posée sur <body> par header.tpl, CHAQUE niveau
   ayant des enfants reçoit son propre bouton +/- fonctionnel — voir les
   règles "body.olive-deep-tree ..." plus bas, qui étendent ce mécanisme
   sans rien changer au comportement par défaut. */
.olive-tree,.olive-tree__children{ display:flex; flex-direction:column; gap:0; }
.olive-tree__children{
	max-height:0; overflow:hidden;
	padding-left:12px; margin-top:0;
	transition:max-height .25s ease;
	/* flex:0 0 100% : .olive-tree__children est un troisième enfant flex de
	   .olive-tree__node (avec .olive-tree__link et .olive-tree__trailing,
	   voir plus bas), sur la même ligne "flex" par défaut — même replié
	   (max-height:0), il resterait sinon posé À CÔTÉ du lien au lieu
	   d'être dessous, grignotant la largeur disponible et décalant le
	   nombre vers la gauche (plus du tout "aligné à droite"). Une base flex
	   de 100% force son propre saut de ligne (avec flex-wrap:wrap sur
	   .olive-tree__node), sans dépendre de sa hauteur (nulle une fois
	   replié). */
	flex:0 0 100%;
}
.olive-tree__node--root.olive-tree__node--open > .olive-tree__children{
	max-height:1200px;
}
/* Repliage profond : n'importe quel nœud ouvert (pas seulement la racine)
   déplie ses propres enfants directs. Cap plus généreux (6000px vs 1200px)
   qu'au niveau racine seul : une fois plusieurs niveaux ouverts en même
   temps (ex. "Randonnées" > "2024" > ses dizaines de sorties), la somme des
   hauteurs peut largement dépasser 1200px — un cap trop bas couperait
   silencieusement la fin de la liste. Plus spécifique que la règle
   ci-dessus (préfixée par "body.olive-deep-tree") : l'emporte aussi pour la
   racine quand ce réglage est actif. */
body.olive-deep-tree .olive-tree__node--open > .olive-tree__children{
	max-height:6000px;
}
.olive-tree__node{ position:relative; }
.olive-tree__link{
	display:flex; align-items:center; gap:8px;
	padding:5px 6px; border-radius:var(--olive-radius-sm);
	font-size:.84rem; line-height:1.25; color:var(--olive-text);
	min-width:0;
	/* flex-grow/shrink/basis définis plus bas par la règle plus spécifique
	   ".olive-tree__node > .olive-tree__link" (base 0%, pas "auto" — voir
	   le commentaire à cet endroit, important pour l'alignement à droite
	   du nombre avec les noms longs sur 2 lignes). */
}
.olive-tree__link:hover{ background:var(--olive-100); text-decoration:none; }
/* padding-left réservé pour TOUTES les racines (avec ou sans chevron) afin
   que les noms démarrent tous à la même position, que la racine ait des
   enfants (donc un chevron, voir .olive-tree__toggle plus bas) ou non
   (ex. "clota" sans sous-album) — sinon les noms seraient décalés les uns
   par rapport aux autres selon la présence du bouton. 30px = largeur du
   chevron (24px) + son décalage (left:2px) + un peu d'air. */
.olive-tree__node--root > .olive-tree__link{ font-weight:600; padding-left:30px; }
/* Même réservation d'espace, mais pour les niveaux plus profonds — utile
   seulement avec le repliage profond actif (les autres niveaux n'ont alors
   pas de bouton, voir .olive-tree__toggle plus bas, donc pas besoin de
   place pour lui). */
body.olive-deep-tree .olive-tree__node[data-has-children="1"]:not(.olive-tree__node--root) > .olive-tree__link{
	padding-left:30px;
}
.olive-tree__node--selected > .olive-tree__link{
	background:var(--olive-accent-soft); color:var(--olive-accent-strong); font-weight:700;
}
/* flex-wrap:wrap sur .olive-tree__node sert UNIQUEMENT à faire passer
   .olive-tree__children (troisième enfant flex, voir plus haut) sur sa
   propre ligne, sous le lien — jamais à faire "sauter" .olive-tree__trailing
   (rond "récent" + nombre) sur une ligne séparée quand un nom long occupe 2
   lignes. Le lien porte flex:1 1 0% (base 0, pas "auto") précisément pour
   ça : avec une base "auto", un nom long donne au lien une taille
   hypothétique = sa largeur de contenu max (très large), ce qui suffit à
   elle seule à remplir la ligne et fait passer .olive-tree__trailing sur la
   ligne suivante lors du calcul de répartition en lignes — cassant
   l'alignement à droite du nombre. Avec une base 0, le lien "part de rien"
   pour ce calcul puis grandit via flex-grow pour occuper l'espace restant,
   donc lien + trailing tiennent toujours sur la même ligne, quelle que soit
   la longueur du nom (qui peut toujours s'enrouler sur 2 lignes À
   L'INTÉRIEUR du lien, indépendamment de ce calcul). Le bouton +/- reste
   hors de ces calculs (position:absolute, voir .olive-tree__toggle). */
.olive-tree__node{ display:flex; flex-wrap:wrap; align-items:center; }
.olive-tree__node > .olive-tree__link{ flex:1 1 0%; }
/* .olive-tree__trailing regroupe le rond "récent" et le nombre de photos :
   un seul margin-left:auto sur ce conteneur les colle ensemble à droite.
   Mettre ce margin-left:auto directement sur .olive-tree__recent ET
   .olive-tree__badge séparément (au lieu du conteneur commun) les aurait
   écartés l'un de l'autre : avec plusieurs marges "auto" sur la même ligne
   flex, l'espace disponible est réparti à parts égales entre elles, donc
   chacune se retrouve poussée indépendamment au lieu de former un groupe
   compact. */
.olive-tree__trailing{ display:inline-flex; align-items:center; gap:5px; margin-left:auto; flex-shrink:0; }
.olive-tree__badge{
	font-size:.72rem; font-weight:600; color:var(--olive-text-muted);
	background:var(--olive-100); border-radius:var(--olive-radius-pill);
	padding:.15em .6em;
}
.olive-tree__node--selected .olive-tree__badge{ background:rgba(255,255,255,.55); }
.olive-tree__recent{ color:var(--olive-clay); font-size:.6rem; }
/* Le bouton +/- existe dans le HTML pour TOUT niveau ayant des enfants
   (data-has-children="1", voir olive_tree.tpl), mais reste masqué au-delà
   de la racine tant que le repliage profond n'est pas activé (ci-dessous) :
   positionné en absolute (plutôt que simplement laissé dans le flux) pour
   que le padding-left réservé ci-dessus reste identique, chevron affiché
   ou non — les noms restent alignés verticalement à chaque niveau. */
.olive-tree__toggle{
	position:absolute; left:2px; top:1px;
	width:24px; height:24px; display:inline-flex; align-items:center; justify-content:center;
	background:none; border:none; cursor:pointer; color:var(--olive-text-muted);
	border-radius:var(--olive-radius-pill);
	transition:transform .2s ease;
}
.olive-tree__toggle:hover{ background:var(--olive-100); }
.olive-tree__node--root.olive-tree__node--open > .olive-tree__toggle{ transform:rotate(180deg); }
/* Masqué par défaut au-delà de la racine (un clic ne ferait rien tant que
   le CSS de repliage profond, ci-dessous, n'est pas actif : voir aussi
   initTreeToggles() dans olive.js, qui accepte déjà tout niveau — c'est ce
   display:none qui empêche réellement l'interaction, pas le JS). */
.olive-tree__node:not(.olive-tree__node--root) > .olive-tree__toggle{ display:none; }
body.olive-deep-tree .olive-tree__node:not(.olive-tree__node--root) > .olive-tree__toggle{
	display:inline-flex;
}
body.olive-deep-tree .olive-tree__node--open > .olive-tree__toggle{ transform:rotate(180deg); }
.olive-tree__children .olive-tree__link{ font-weight:400; font-size:.82rem; }

/* Blocs natifs restants (mots-clés, explorer, liens) : rendus via leur
   propre gabarit "default" (dt/dd), simplement enveloppés pour hériter du
   style .olive-panel — restylage générique, pas de duplication de gabarit. */
.olive-panel--native dt{
	font-size:.72rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase;
	color:var(--olive-text-muted); margin-bottom:8px; padding-left:10px;
	border-left:3px solid var(--olive-300);
}
.olive-panel--native dd ul{ display:flex; flex-direction:column; gap:2px; font-size:.85rem; }
.olive-panel--native dd ul ul{ padding-left:14px; margin-top:2px; }
.olive-panel--native dd li{ display:flex; flex-wrap:wrap; align-items:center; }
.olive-panel--native dd a{ display:block; flex:1 1 auto; padding:6px 8px; border-radius:var(--olive-radius-sm); font-size:.85rem; color:var(--olive-text); }
.olive-panel--native dd a:hover{ background:var(--olive-100); text-decoration:none; }
.olive-panel--native dd li.selected > a{ font-weight:600; color:var(--olive-accent-strong); background:var(--olive-100); }
.olive-panel--native #menuTagCloud{ display:flex; flex-wrap:wrap; gap:6px; }
.olive-panel--native #menuTagCloud a{ font-size:.78rem; padding:4px 10px; border-radius:var(--olive-radius-pill); background:var(--olive-100); }

/* Bloc "Menu" natif (mbMenu) : recherche rapide native + liste Tags/
   Recherche/À propos/Notification — le formulaire hérite déjà du style
   générique des <input> (section 12), on ajuste juste l'espacement. */
.olive-panel--native form#quicksearch{ margin-bottom:10px; }
.olive-panel--native form#quicksearch p{ margin:0; }
.olive-panel--native form#quicksearch input{ width:100% !important; }

/* Badges de compteur (bloc "Albums" natif en repli, "Albums liés"...) :
   mêmes proportions que .olive-tree__badge pour rester cohérent visuellement
   même quand le gabarit natif brut est utilisé. */
.olive-panel--native .badge,
.olive-panel--native .menuInfoCat,
.olive-panel--native .menuInfoCatByChild{
	display:inline-flex; align-items:center; justify-content:center;
	min-width:1.6em; padding:.1em .5em; margin-left:6px;
	border-radius:var(--olive-radius-pill); background:var(--olive-100);
	color:var(--olive-text-muted); font-size:.72rem; font-weight:600;
	flex:0 0 auto;
}
.olive-panel--native .totalImages{
	display:flex; align-items:center; gap:8px; margin-top:10px; padding:4px 8px;
	font-size:.82rem; color:var(--olive-text-muted);
}
.olive-panel--native dt .menubarFilter{
	display:inline-flex; align-items:center; justify-content:center;
	width:22px; height:22px; margin-right:6px; border-radius:50%;
	color:var(--olive-text-muted); vertical-align:middle;
}
.olive-panel--native dt .menubarFilter:hover{ background:var(--olive-100); }
.olive-panel--native dt .menubarFilter .pwg-icon{ width:.85em; height:.85em; }

.olive-sidebar__total{
	display:flex; align-items:center; gap:8px;
	font-size:.82rem; color:var(--olive-text-muted);
	padding:4px 10px;
}

/* ---------------------------------------------------------------------
   6. Barre d'outils / fil d'ariane (index.tpl "default", restylé en CSS)
   --------------------------------------------------------------------- */
.olive-body .titrePage{ margin-bottom:20px; }
.olive-body .titrePage .categoryActions{
	display:flex; align-items:center; gap:6px; flex-wrap:wrap;
	margin:0 0 12px; float:none;
}
.olive-body .titrePage .categoryActions li{ display:inline-flex; list-style:none; }
.olive-body .titrePage .categoryActions .pwg-button{
	display:inline-flex; align-items:center; gap:.4em;
	padding:.5em .85em; border-radius:var(--olive-radius-pill);
	background:var(--olive-surface); border:1px solid var(--olive-border);
	font-size:.82rem; color:var(--olive-text); box-shadow:var(--olive-shadow-sm);
}
.olive-body .titrePage .categoryActions .pwg-button:hover{ background:var(--olive-100); text-decoration:none; }
.olive-body .titrePage .categoryActions .pwg-button-text{ white-space:nowrap; }

.olive-view-toggle{
	display:inline-flex; background:var(--olive-surface); border:1px solid var(--olive-border);
	border-radius:var(--olive-radius-pill); padding:3px; box-shadow:var(--olive-shadow-sm);
	order:5; margin-left:auto;
}
.olive-view-btn{
	display:inline-flex; align-items:center; justify-content:center;
	width:32px; height:30px; border:none; background:none; border-radius:var(--olive-radius-pill);
	color:var(--olive-text-muted); cursor:pointer;
}
.olive-view-btn[aria-pressed="true"]{ background:var(--olive-accent); color:#fff; }

#sortOrderLink{ order:6; }

/* Sélecteur natif "Tailles de photo" (page catégorie/miniatures,
   index.tpl de "default", jamais dupliqué par Olive) : masqué par défaut —
   Olive sert alors toujours le dérivé "Carré" pour les miniatures (voir
   olive_square_thumb_derivative(), functions.inc.php), sans choix possible
   côté visiteur. Réapparaît, restylé comme les autres boutons de la barre
   d'outils (.pwg-button/.switchBox déjà génériques ci-dessus), dès que le
   réglage admin "Autoriser les visiteurs à choisir la taille" est coché
   (classe "olive-sizes-enabled" sur <body>, voir header.tpl). */
body:not(.olive-sizes-enabled) #derivativeSwitchLink{ display:none; }

/* "Rechercher dans ce lot" apparaît deux fois dans index.tpl de "default",
   contrôlé par DEUX variables indépendantes : $SEARCH_IN_SET_ACTION (le
   bouton #cmdSearchInSet dans .categoryActions, la barre d'outils du haut —
   celui qu'on garde) ET $SEARCH_IN_SET_BUTTON, plus bas dans le gabarit,
   sous le titre/calendrier (.action-buttons .search-in-set-button) — les
   deux peuvent être vraies en même temps selon le contexte (recherche/
   filtre), d'où le doublon visuel. On masque le second, jamais dupliqué
   par Olive lui-même (pas d'override d'index.tpl, restylage CSS seul). */
.olive-body .action-buttons .search-in-set-button{ display:none; }

#breadcrumb{ display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; }
#breadcrumb h2{
	font-size:1.4rem; margin:0; display:flex; align-items:baseline; gap:8px;
}
#breadcrumb .badge{
	font-size:.75rem; font-weight:600; color:var(--olive-text-muted);
	background:var(--olive-100); border-radius:var(--olive-radius-pill); padding:.15em .65em;
}

/* ---------------------------------------------------------------------
   Chronologie / calendrier (chronology.tpl + month_calendar.tpl de
   "default", jamais surchargés par Olive — restylage CSS pur comme le
   reste de la barre d'outils, section 6). Ces classes n'étaient couvertes
   par aucune règle précédente : tout s'affichait en texte brut (numéros
   de jours collés les uns aux autres, sans distinction jour avec/sans
   photo). Les <div style="float:left/right"> précédent/suivant, posés en
   inline par le gabarit natif, sont volontairement laissés tels quels
   (pas de display:flex sur .calendarBar, qui les aurait cassés) — un
   simple clearfix suffit. */
.calendarViews{
	display:flex; align-items:center; gap:8px; flex-wrap:wrap;
	margin:0 0 14px; font-size:.85rem; color:var(--olive-text-muted);
}
.calendarViews #calendarViewSwitchLink{ font-weight:600; color:var(--olive-accent-strong); cursor:pointer; }
.calendarViews #calendarViewSwitchLink:hover{ text-decoration:underline; }

.calendarTitle{
	font-family:var(--olive-font-display); font-size:1.3rem; font-weight:600;
	margin:0 0 14px;
}
.calendarTitle a{ color:var(--olive-text); }
.calendarTitle .calInHere{ color:var(--olive-accent-strong); }

.calendarBar{ margin:0 0 20px; line-height:2.6; }
.calendarBar::after{ content:""; display:table; clear:both; }
.calItem{
	display:inline-flex; align-items:center; justify-content:center;
	min-width:2em; height:2em; padding:0 .35em; margin:0 2px 4px 0;
	border-radius:var(--olive-radius-pill); font-size:.82rem; font-weight:600; vertical-align:middle;
}
a.calItem{ background:var(--olive-surface); color:var(--olive-text); box-shadow:var(--olive-shadow-sm); }
a.calItem:hover{ background:var(--olive-accent); color:#fff; text-decoration:none; }
span.calItem{ color:var(--olive-text-muted); opacity:.5; }

.calendarCalBar{ margin:0 0 14px; font-size:.85rem; }
.calCalHead{ font-weight:700; display:block; margin-bottom:4px; }
.calCal,.calCalEmpty{ display:inline-block; margin:0 8px 4px 0; color:var(--olive-text-muted); }
.calCal a{ color:var(--olive-text); font-weight:600; }

.calMonth{ width:100%; border-collapse:separate; border-spacing:4px; margin-bottom:20px; }
.calMonth th{ font-size:.75rem; text-transform:uppercase; color:var(--olive-text-muted); padding:4px; }
.calMonth td{ vertical-align:top; border-radius:var(--olive-radius-sm); background:var(--olive-100); }
.calDayCellEmpty{ text-align:center; color:var(--olive-text-muted); font-size:.8rem; padding:8px 0; }
.calDayCellFull{ position:relative; padding:0; overflow:hidden; border-radius:var(--olive-radius-md); }
.calBackDate{ display:none; }
.calForeDate{
	position:absolute; top:4px; left:6px; z-index:2;
	font-size:.72rem; font-weight:700; color:#fff;
	text-shadow:0 1px 3px rgba(0,0,0,.6);
}
.calImg{ display:block; height:100%; }
.calImg a{ display:block; height:100%; }
.calImg img{ width:100%; height:100%; object-fit:cover; display:block; }

/* Plugin tiers piwigo-openstreetmap : son CSS inline pose "width: autopx"
   (typo du plugin, ignorée par le navigateur) — on force une largeur
   pleine et un habillage cohérent avec le reste du contenu. */
#osmmap{ margin:20px 0; }
.olive-body #map{ width:100% !important; border-radius:var(--olive-radius-md); overflow:hidden; box-shadow:var(--olive-shadow-sm); }

/* IMPORTANT : ces boîtes sont ouvertes/fermées par le script natif
   "default" themes/default/js/switchbox.js (chargé via {combine_script}
   dans index.tpl, indépendamment de load_parent_css), qui utilise
   jQuery .toggle()/.hide() sur left/top calculés en JS. Sans CSS de
   "default" (load_parent_css=false), rien ne les masque par défaut : un
   <div> est display:block au chargement, donc la boîte reste dépliée
   dans le flux normal tant qu'on n'a pas interagi une première fois. Il
   faut donc explicitement fournir l'état fermé (display:none) ET le
   positionnement flottant (position:absolute) que "default" fournissait. */
.switchBox{
	display:none;
	position:absolute;
	min-width:200px; max-width:280px;
	background:var(--olive-surface); border:1px solid var(--olive-border);
	border-radius:var(--olive-radius-md); box-shadow:var(--olive-shadow-lg);
	padding:12px 14px; font-size:.85rem; z-index:50; line-height:1.9;
}
.switchBoxTitle{ font-weight:700; margin-bottom:8px; font-size:.78rem; text-transform:uppercase; letter-spacing:.06em; color:var(--olive-text-muted); }
.switchBox a{ color:var(--olive-text); }
.switchBox a:hover{ color:var(--olive-accent-strong); }

/* ---------------------------------------------------------------------
   7. Grille d'albums (page catégorie)
   --------------------------------------------------------------------- */
/* minmax(280px,...) plutôt que 250px : le conteneur de contenu fait au
   maximum ~1112px (#olive-shell plafonne à --olive-container:1440px, moins
   la sidebar 280px et le padding de #content) — avec 250px la grille
   passait à 4 colonnes sur les écrans larges (1112px permet 4×250px+3×16px
   de marge), alors que la demande est 3 colonnes "confortables" sans les
   multiplier. Vérifié empiriquement (Playwright) : 280px donne bien 3
   colonnes de ~360px sur un écran large, 2 sur un écran plus étroit, jamais
   4 — voir aussi le point 6 (responsive). */
.olive-albums{
	display:grid;
	/* minmax(X, X) plutôt que minmax(X, 1fr) : une carte ne doit jamais être
	   plus large que sa vignette (X = --olive-album-thumb-size, posée en
	   style inline par mainpage_categories.tpl = résolution réelle du
	   dérivé, 250px ou 120px — voir .olive-album-card__media plus bas, même
	   variable). Avec "1fr" en borne haute, une carte pouvait s'étirer
	   au-delà de sa vignette sur un écran large avec peu d'albums,
	   laissant un bord vide autour de l'image (signalé par le client) ;
	   avec deux bornes identiques, l'espace en trop reste en simple marge
	   après la dernière carte de chaque ligne, jamais à l'intérieur d'une
	   carte. min(X, 100%) : repli sur la largeur disponible si elle est
	   plus étroite que X (mobile) plutôt qu'un débordement horizontal. 280px
	   : repli si la variable est absente (voir .olive-album-card__media). */
	grid-template-columns:repeat(auto-fill, minmax(min(var(--olive-album-thumb-size, 280px), 100%), min(var(--olive-album-thumb-size, 280px), 100%)));
	gap:16px;
}
/* .olive-album-card (le <li>) porte l'habillage visuel de la carte entière
   (fond, ombre, coins arrondis) : la description (.olive-album-card__desc,
   texte libre pouvant contenir son propre lien — voir mainpage_categories.
   tpl) est une sœur du lien, PAS un descendant, donc jamais de <a> imbriqué
   dans un <a>. .olive-album-card__link ne reste que le lien cliquable
   (vignette + titre + compteur) — flex:1 pour absorber l'étirement de
   hauteur de grille (align-items:stretch par défaut), exactement le rôle
   que jouait .olive-album-card__link seul avant que .olive-album-card__desc
   n'en sorte. */
.olive-album-card{
	display:flex; flex-direction:column; height:100%;
	background:var(--olive-surface); border-radius:var(--olive-radius-lg);
	overflow:hidden; box-shadow:var(--olive-shadow-sm);
	transition:box-shadow .18s ease, transform .18s ease;
}
.olive-album-card:hover{ box-shadow:var(--olive-shadow); transform:translateY(-2px); }
.olive-album-card__link{
	display:flex; flex-direction:column; flex:1 1 auto; min-height:0;
	color:var(--olive-text);
}
.olive-album-card__link:hover{ text-decoration:none; }
.olive-album-card__media{
	display:block;
	/* 1/1 : la vignette est toujours carrée (dérivé "Carré" IMG_SQUARE OU
	   dérivé dédié aux cartes d'album, recadrés tous deux côté serveur —
	   voir olive_index_category_thumbnails(), functions.inc.php), aucun
	   décalage de recadrage géré ici. object-fit:cover ci-dessous n'absorbe
	   donc qu'un éventuel écart d'arrondi, jamais un vrai recadrage.
	   width : plafonnée à --olive-album-thumb-size (même variable que
	   .olive-albums ci-dessus, posée en style inline par mainpage_
	   categories.tpl = résolution réelle du dérivé, 250px ou 120px) plutôt
	   qu'étirée sans limite : sans ce plafond, la vignette était
	   visiblement agrandie au-delà de sa résolution (signalé par le
	   client). La carte ne dépassant elle-même jamais cette même largeur
	   (voir .olive-albums, minmax(X, X) : borne haute et basse identiques),
	   ce plafond et le margin:0 auto ci-dessous sont désormais redondants
	   avec la largeur de la carte en usage normal — conservés en filet de
	   sécurité. Le repli "9999px" n'a d'effet que si la variable est
	   absente (gabarit hérité de "default" pour d'autres pages qui
	   n'affichent pas de cartes d'album carrées) : équivaut alors à 100%,
	   aucun plafond. */
	width:min(var(--olive-album-thumb-size, 9999px), 100%);
	margin:0 auto;
	position:relative; aspect-ratio:1/1; overflow:hidden; background:var(--olive-100);
}
.olive-album-card__img{ position:absolute; width:100%; height:100%; object-fit:cover; }
.olive-album-card__recent{
	position:absolute; top:10px; right:10px; width:10px; height:10px; border-radius:50%;
	background:var(--olive-clay); box-shadow:0 0 0 3px rgba(255,255,255,.7);
}
.olive-album-card__body{ padding:12px 14px 14px; display:flex; flex-direction:column; gap:3px; flex:1; }
.olive-album-card__title{ font-family:var(--olive-font-display); font-weight:600; font-size:1.02rem; }
.olive-album-card__meta{ font-size:.78rem; color:var(--olive-text-muted); }
/* 3 lignes (pas 2) avant troncature "…", pour ne pas systématiquement
   masquer le contenu utile de la description (traces GPX, participants...).
   Toujours en dehors du lien de la carte (.olive-album-card__link, voir
   mainpage_categories.tpl) : la description peut contenir son propre <a>
   (ex. lien VisuGPX), un <a> ne peut jamais en contenir un autre. */
.olive-album-card__desc{
	display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
	padding:0 14px 14px; font-size:.85rem; line-height:1.35; color:var(--olive-text-muted);
}
.olive-album-card__desc a{ color:var(--olive-accent-strong); }

/* Vue liste (bascule via [data-olive-view=list] sur <body>) : plusieurs
   colonnes responsives (2 à 3 selon la largeur disponible) plutôt qu'une
   colonne unique pleine largeur — sur un grand écran, une seule colonne
   laissait un vide énorme à droite de chaque carte. */
body[data-olive-view="list"] .olive-albums{ grid-template-columns:repeat(auto-fill, minmax(340px, 1fr)); gap:10px; }
body[data-olive-view="list"] .olive-album-card{ border-radius:var(--olive-radius-md); }
body[data-olive-view="list"] .olive-album-card__link{ flex-direction:row; align-items:center; }
body[data-olive-view="list"] .olive-album-card__media{ aspect-ratio:1/1; width:76px; flex:0 0 76px; }
body[data-olive-view="list"] .olive-album-card__body{ padding:8px 14px; }
/* 2 lignes (pas 1) en vue liste aussi : un clamp à 1 ligne masquait quasi
   systématiquement tout le contenu de la description. */
body[data-olive-view="list"] .olive-album-card__desc{ -webkit-line-clamp:2; }

/* Repli hérité de "default" (page hors section "categories", voir
   olive_index_category_thumbnails() dans functions.inc.php) */
.thumbnailCategories{ display:grid; grid-template-columns:repeat(auto-fill,minmax(240px,1fr)); gap:20px; list-style:none; }
.thumbnailCategories .thumbnailCategory{ background:var(--olive-surface); border-radius:var(--olive-radius-md); overflow:hidden; box-shadow:var(--olive-shadow-sm); }
.thumbnailCategories .illustration img{ width:100%; height:auto; }
.thumbnailCategories .description{ padding:12px 14px; }

/* ---------------------------------------------------------------------
   8. Grille de miniatures (vue d'un album)
   --------------------------------------------------------------------- */
/* Mode par défaut : une seule taille de miniature (dérivé "Carré",
   IMG_SQUARE — voir olive_square_thumb_derivative(), functions.inc.php),
   simple CSS Grid régulier, aucun JavaScript de mise en page. Toutes les
   photos étant déjà recadrées en carré côté serveur (centre d'intérêt
   respecté), une grille régulière suffit et n'a besoin d'aucun calcul
   dynamique. Voir plus bas ("mode élastique") pour le second mode, activé
   par le réglage admin "Tailles de photo". */
.olive-body ul.thumbnails,
.olive-body #thumbnails{
	display:grid;
	grid-template-columns:repeat(auto-fill, minmax(160px, 1fr));
	gap:10px;
	padding:0; margin:0 0 24px;
}
/* Piwigo affiche un loader (spinner) pendant le chargement différé des
   miniatures non encore en cache — masqué par défaut par le CSS de
   "default" (non chargé ici, load_parent_css=false). Sans cette règle, le
   <div class="loader"><img ...ajax_loader.gif></div> reste visible en
   permanence, non dimensionné, au-dessus de la grille. */
.olive-body .loader{ display:none; }

.olive-thumb{ list-style:none; }
/* .olive-thumb__media est un <span> (inline par défaut) : sans display:block
   ici, aspect-ratio n'a aucun effet sur un élément inline et l'image
   (positionnée en absolute) se retrouve dans une boîte de hauteur nulle —
   donc invisible. Même chose pour .olive-album-card__media (qui fonctionne
   par accident car flex-item de .olive-album-card__link, "blockifié"
   automatiquement) : display:block explicite pour ne pas en dépendre. */
.olive-thumb__link{ display:block; position:relative; }
.olive-thumb__media{
	display:block;
	position:relative; aspect-ratio:1/1; overflow:hidden;
	border-radius:var(--olive-radius-md); background:var(--olive-100);
	box-shadow:var(--olive-shadow-sm);
	transition:box-shadow .15s ease;
}
.olive-thumb__link:hover .olive-thumb__media{ box-shadow:var(--olive-shadow); }
/* object-fit:cover n'absorbe qu'un éventuel écart d'arrondi entre la case
   et le dérivé "Carré" (déjà recadré carré côté serveur) — jamais un vrai
   recadrage supplémentaire. */
.olive-thumb__img{ position:absolute; inset:0; width:100%; height:100%; object-fit:cover; }
.olive-thumb__recent{ position:absolute; top:7px; right:7px; width:7px; height:7px; border-radius:50%; background:var(--olive-clay); box-shadow:0 0 0 2px #fff; }
/* Légende (nom + stats) toujours affichée sous la vignette, dans le flux
   normal — jamais en survol/incrustation : plus lisible, accessible sans
   souris/au clavier, cohérent avec la vue liste (déjà dans le flux) et
   avec les cartes album (.olive-album-card__body, jamais en survol non
   plus). */
.olive-thumb__legend{ display:block; margin-top:5px; font-size:.76rem; line-height:1.25; color:var(--olive-text-muted); }
.olive-thumb__name{ display:block; color:var(--olive-text); }
.olive-thumb__meta{ display:inline-block; margin-right:8px; }
.olive-thumb__meta--zero{ opacity:.6; }

/* Mode "élastique" (réglage admin "Tailles de photo" activé, classe
   "olive-sizes-enabled" sur <body>, voir header.tpl) : le visiteur a choisi
   une taille de dérivé qui n'est pas forcément carrée (ex. "Moyen",
   "Grand"...). Chaque photo garde alors ses proportions réelles — jamais
   recadrée, jamais agrandie au-delà de sa résolution native — centrée dans
   une boîte dimensionnée sur le format cible (largeur/hauteur posées par
   thumbnails.tpl via {html_style}, calculées côté serveur depuis
   $derivative_params). La photo REMPLIT cette boîte (comme le mode "Carré"
   ci-dessus, object-fit:contain plutôt que cover : jamais recadrée, mais
   agrandie/rétrécie à l'écran pour occuper tout l'espace prévu par la
   taille choisie) : c'est un agrandissement purement visuel (le navigateur
   étire l'affichage du <img>), le fichier dérivé livré par le serveur n'est
   JAMAIS regénéré au-delà de la résolution native de la photo (toujours
   DerivativeImage côté PHP, aucun changement ici). Avant cette règle,
   width/height:auto laissait le <img> à sa taille intrinsèque : une photo
   dont la résolution native est plus petite que la taille choisie restait
   minuscule dans une boîte correctement dimensionnée ("taille figée",
   signalé par le client). Vue liste non concernée (voir plus bas,
   :not([data-olive-view="list"])) : elle garde sa case carrée compacte,
   quel que soit ce réglage. */
body.olive-sizes-enabled:not([data-olive-view="list"]) .olive-thumb__media{
	/* aspect-ratio/width : posés par thumbnails.tpl ({html_style}, calculés
	   depuis $derivative_params) — même sélecteur, jamais répété ici pour
	   ne pas risquer de les écraser selon l'ordre de chargement. */
	max-width:100%;
	display:flex; align-items:center; justify-content:center;
}
body.olive-sizes-enabled:not([data-olive-view="list"]) .olive-thumb__img{
	position:static; inset:auto;
	width:100%; height:100%;
	object-fit:contain;
}

/* Mode "emboîté" façon Google Photos (dérivé large/panoramique ou de
   petite hauteur non recadré, voir la condition dans thumbnails.tpl).
   Squelette de mise en page (float, position, marges) posé en inline par
   olive_thumbs_justified() (functions.inc.php, {html_style} calculé selon
   la hauteur de rangée cible — repris de "modus") ; ici, seulement
   l'habillage visuel Olive (légende en survol) et le script de mise en
   page fin (js/thumb-justified.js, RVGTLine/RVGThumbs — repris de
   "modus", voir ce fichier).
   La bascule grille/liste (data-olive-view, voir olive.js) EST
   fonctionnelle ici (signalé par le client, qui la trouvait auparavant sans
   effet) : voir plus bas "Vue liste en mode emboîté", qui neutralise en
   !important les styles inline posés par thumb-justified.js pour revenir à
   une rangée classique (nom + vignette) — thumb-justified.js met de son
   côté son propre calcul de rangées en pause tant que cette vue est active
   (écoute l'événement "olive:viewchange" émis par olive.js), pour ne pas
   se battre inutilement contre ce CSS à chaque redimensionnement. */
.olive-thumb-justified__item{ border-radius:10px; overflow:hidden; box-shadow:var(--olive-shadow-sm); background:var(--olive-100); transition:box-shadow .15s ease; }
.olive-thumb-justified__item:hover{ box-shadow:var(--olive-shadow); }
.olive-thumb-justified__link{ display:block; }
.olive-thumb-justified__item img{ display:block; }
.olive-thumb-justified__caption{
	position:absolute; left:0; right:0; bottom:-2.2em;
	overflow:hidden; white-space:nowrap; text-overflow:ellipsis;
	padding:6px 10px; font-size:.78rem; font-weight:600;
	color:#fff; text-shadow:0 1px 3px rgba(0,0,0,.7);
	background:linear-gradient(to top, rgba(20,18,14,.78), rgba(20,18,14,0));
	transition:bottom .2s ease-out;
	pointer-events:none; /* la case entière est déjà cliquable via .olive-thumb-justified__link */
}
.olive-thumb-justified__item:hover .olive-thumb-justified__caption,
.olive-thumb-justified__item:focus-within .olive-thumb-justified__caption{
	bottom:0;
}

/* Vue liste en mode emboîté (data-olive-view="list" sur <body> pendant que
   thumbnails.tpl a choisi le mode "emboîté", voir plus haut) : rangée
   classique (vignette carrée fixe + légende toujours visible à droite),
   même esprit que "Vue liste" ci-dessous pour le mode élastique/carré.
   `!important` nécessaire : olive_thumbs_justified() et thumb-justified.js
   posent `float`/`width`/`height`/`top`/`left` en style INLINE (calcul de
   rangée emboîtée), seule façon de le battre en CSS — voir le commentaire
   du constructeur RVGThumbs dans thumb-justified.js. */
body[data-olive-view="list"] #thumbnails{
	display:block !important;
	text-align:left !important;
}
body[data-olive-view="list"] .olive-thumb-justified__item{
	float:none !important;
	width:auto !important; height:auto !important;
	display:flex; align-items:center; gap:12px;
	margin:0 0 6px !important;
	padding:6px 8px;
	box-shadow:none; background:none; border-radius:var(--olive-radius-sm);
}
body[data-olive-view="list"] .olive-thumb-justified__item:hover{
	background:var(--olive-surface); box-shadow:none;
}
body[data-olive-view="list"] .olive-thumb-justified__link{
	position:static !important; top:auto !important; left:auto !important;
	display:block;
	flex:0 0 96px; width:96px; height:96px;
	border-radius:var(--olive-radius-sm); overflow:hidden;
}
body[data-olive-view="list"] .olive-thumb-justified__item img{
	width:100%; height:100%; object-fit:cover;
}
body[data-olive-view="list"] .olive-thumb-justified__caption{
	position:static !important; bottom:auto !important;
	flex:1 1 auto; min-width:0;
	overflow:hidden; white-space:nowrap; text-overflow:ellipsis;
	padding:0; font-size:.85rem; font-weight:600;
	color:var(--olive-text); text-shadow:none;
	background:none;
	pointer-events:auto;
}

/* Vue liste (bascule via [data-olive-view=list] sur <body>) : plusieurs
   colonnes responsives plutôt qu'une colonne unique, pour éviter le grand
   vide sur écran large — même principe que .olive-albums ci-dessus. */
body[data-olive-view="list"] ul.thumbnails,
body[data-olive-view="list"] #thumbnails{
	grid-template-columns:repeat(auto-fill, minmax(300px, 1fr)); gap:6px 14px;
}
body[data-olive-view="list"] .olive-thumb__link{ display:flex; align-items:center; gap:12px; padding:6px 8px; border-radius:var(--olive-radius-sm); }
body[data-olive-view="list"] .olive-thumb__link:hover{ background:var(--olive-surface); }
/* 96px fixe : la vue liste sert un autre usage que la vue grille — voir
   toutes les infos (nom, stats) d'un coup d'œil, pas admirer une grande
   vignette — donc une seule taille de case, tout le temps. */
body[data-olive-view="list"] .olive-thumb__media{ width:96px; flex:0 0 96px; }
/* Sans flex:1 + min-width:0 ici, .olive-thumb__legend garde sa largeur
   "auto" naturelle (valeur initiale des enfants flex) : le nom/les
   métadonnées restent collés contre la vignette au lieu d'occuper l'espace
   disponible à droite — d'où le texte tronqué/superposé signalé en vue
   liste. min-width:0 est nécessaire pour que text-overflow:ellipsis
   fonctionne dans un enfant flex (sinon son min-width implicite empêche
   tout rétrécissement sous la largeur du texte). */
body[data-olive-view="list"] .olive-thumb__legend{
	display:flex; flex-direction:column; justify-content:center; gap:2px;
	flex:1 1 auto; min-width:0; margin-top:0;
}
body[data-olive-view="list"] .olive-thumb__name{
	overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
}
body[data-olive-view="list"] .olive-thumb__meta{ white-space:nowrap; }
body[data-olive-view="list"] .olive-thumb__legend{ margin-top:0; }

/* ---------------------------------------------------------------------
   9. Page photo
   --------------------------------------------------------------------- */
.olive-picture-header{ margin-bottom:16px; }
.olive-breadcrumb{ font-size:.85rem; color:var(--olive-text-muted); display:flex; align-items:center; gap:8px; }
.olive-breadcrumb a{ color:var(--olive-text-muted); }
.olive-breadcrumb__current{ color:var(--olive-text); font-weight:600; }

.olive-picture-layout{
	display:grid;
	grid-template-columns:minmax(0,1fr) 340px;
	gap:28px;
	align-items:start;
}

.olive-picture-toolbar{
	display:flex; align-items:center; justify-content:space-between;
	margin-bottom:10px;
}
.olive-picture-counter{ font-size:.82rem; color:var(--olive-text-muted); font-weight:600; }
.olive-actions-more{ position:relative; }
.olive-actions-more > summary{ list-style:none; }
.olive-actions-more > summary::-webkit-details-marker{ display:none; }
.olive-actions-more__panel{
	position:absolute; right:0; top:calc(100% + 6px);
	background:var(--olive-surface); border:1px solid var(--olive-border);
	border-radius:var(--olive-radius-md); box-shadow:var(--olive-shadow-lg);
	padding:8px; display:flex; flex-direction:column; min-width:180px; z-index:40;
}
.olive-actions-more__link{
	padding:8px 10px; border-radius:var(--olive-radius-sm); font-size:.85rem; color:var(--olive-text);
}
.olive-actions-more__link:hover{ background:var(--olive-100); text-decoration:none; }

.olive-picture-frame{
	position:relative; display:flex; align-items:center; justify-content:center;
	background:var(--olive-900); border-radius:var(--olive-radius-lg);
	overflow:hidden; min-height:260px;
}
.olive-picture-image{ display:flex; align-items:center; justify-content:center; width:100%; }
.olive-picture-image img{ max-height:78vh; width:auto; height:auto; margin:0 auto; }
.olive-picture-nav{
	position:absolute; top:50%; transform:translateY(-50%);
	width:44px; height:44px; border-radius:50%;
	display:inline-flex; align-items:center; justify-content:center;
	background:rgba(255,255,255,.92); color:var(--olive-900);
	box-shadow:var(--olive-shadow); z-index:5;
}
.olive-picture-nav:hover{ background:#fff; text-decoration:none; }
.olive-picture-nav--prev{ left:14px; }
.olive-picture-nav--next{ right:14px; }
.olive-picture-nav--disabled{ opacity:.45; pointer-events:none; }

.olive-picture-comment{ margin-top:12px; font-style:italic; color:var(--olive-text-muted); }

.olive-filmstrip{ display:flex; gap:10px; margin-top:14px; justify-content:center; }
.olive-filmstrip__item{
	display:block; width:64px; height:64px; border-radius:var(--olive-radius-sm);
	overflow:hidden; box-shadow:var(--olive-shadow-sm); opacity:.65;
	transition:opacity .15s ease, box-shadow .15s ease;
}
.olive-filmstrip__item img{ width:100%; height:100%; object-fit:cover; }
a.olive-filmstrip__item:hover{ opacity:1; }
.olive-filmstrip__item--current{
	opacity:1; width:78px; height:78px;
	box-shadow:0 0 0 3px var(--olive-accent);
}

.olive-picture-side{
	background:var(--olive-surface); border-radius:var(--olive-radius-lg);
	box-shadow:var(--olive-shadow-sm); padding:20px;
}
.olive-picture-title{ font-size:1.15rem; margin-bottom:2px; }
.olive-picture-position{ font-size:.8rem; color:var(--olive-text-muted); margin-bottom:16px; }

.olive-info-rows{ display:flex; flex-direction:column; gap:8px; margin-bottom:16px; }
.olive-info-row{ display:flex; justify-content:space-between; gap:10px; font-size:.85rem; padding-bottom:8px; border-bottom:1px solid var(--olive-border); }
.olive-info-row dt{ color:var(--olive-text-muted); }
.olive-info-row dd{ color:var(--olive-text); font-weight:500; text-align:right; }
.olive-info-rows--compact .olive-info-row{ padding-bottom:6px; font-size:.8rem; }

.olive-info-block{ margin-bottom:18px; }
.olive-info-block__title{
	font-size:.72rem; font-weight:700; letter-spacing:.08em; text-transform:uppercase;
	color:var(--olive-text-muted); margin-bottom:10px;
}
.olive-tag-list{ display:flex; flex-wrap:wrap; gap:6px; }
.olive-tag{
	font-size:.78rem; padding:5px 12px; border-radius:var(--olive-radius-pill);
	background:var(--olive-100); color:var(--olive-text);
}
.olive-tag:hover{ background:var(--olive-200); text-decoration:none; }
.olive-related-albums li{ font-size:.85rem; padding:4px 0; }

.olive-rate-form{ display:flex; flex-wrap:wrap; gap:6px; }
.rateButton,.rateButtonSelected{
	min-width:32px; height:32px; border-radius:var(--olive-radius-sm);
	border:1px solid var(--olive-border-strong); background:var(--olive-surface);
	cursor:pointer; font-size:.82rem;
}
.rateButtonSelected{ background:var(--olive-accent); color:#fff; border-color:var(--olive-accent); }

.olive-download{ margin-top:4px; }

/* ---------------------------------------------------------------------
   10. Commentaires
   --------------------------------------------------------------------- */
.olive-comments{
	margin-top:32px; padding-top:24px; border-top:1px solid var(--olive-border);
}
.olive-comments h3{ font-size:1.05rem; }
#commentAdd{ background:var(--olive-surface); border-radius:var(--olive-radius-md); padding:16px; margin-bottom:18px; box-shadow:var(--olive-shadow-sm); }
#commentAdd input[type=text],#commentAdd textarea{
	width:100%; padding:.6em .8em; border-radius:var(--olive-radius-sm);
	border:1px solid var(--olive-border-strong); font:inherit; margin-bottom:10px; background:var(--olive-bg);
}
.commentsList,.olive-comments .comment{ background:var(--olive-surface); border-radius:var(--olive-radius-md); padding:14px 16px; margin-bottom:10px; box-shadow:var(--olive-shadow-sm); }

/* ---------------------------------------------------------------------
   11. Footer
   --------------------------------------------------------------------- */
.olive-footer{
	margin-top:32px; border-top:1px solid var(--olive-border);
	background:var(--olive-100);
}
.olive-footer__inner{
	max-width:var(--olive-container); margin:0 auto; padding:20px 24px;
	display:flex; flex-direction:column; gap:6px;
	font-size:.78rem; color:var(--olive-text-muted);
}
.olive-footer__sep{ margin:0 6px; }

/* ---------------------------------------------------------------------
   12. Éléments hérités de "default" non listés ci-dessus (formulaires,
   pagination, recherche, tags, à propos, calendrier, messages...)
   --------------------------------------------------------------------- */
.header_msgs{ background:#FFF6E0; border-bottom:1px solid var(--olive-border); padding:10px 20px; font-size:.85rem; text-align:center; }
#infos,#errors,.infos,.errors{
	border-radius:var(--olive-radius-md); padding:12px 16px; margin-bottom:16px; font-size:.88rem;
}
#infos,.infos{ background:#EAF3E4; color:#3B5C2A; }
#errors,.errors{ background:#FBEAE6; color:var(--olive-danger); }

.navigationBar{
	display:flex; align-items:center; gap:6px; flex-wrap:wrap;
	margin:24px 0; font-size:.85rem;
}
.navigationBar a,.navigationBar .pageNumberSelected,.navigationBar span{
	display:inline-flex; align-items:center; justify-content:center;
	min-width:30px; height:30px; padding:0 8px; border-radius:var(--olive-radius-pill);
}
.navigationBar a{ background:var(--olive-surface); box-shadow:var(--olive-shadow-sm); }
.navigationBar a:hover{ background:var(--olive-100); text-decoration:none; }
.navigationBar .pageNumberSelected{ background:var(--olive-accent); color:#fff; font-weight:700; }

.olive-body form p{ margin:0 0 12px; }
.olive-body input[type=text],.olive-body input[type=password],.olive-body input[type=email],
.olive-body textarea,.olive-body select{
	font:inherit; padding:.6em .8em; border-radius:var(--olive-radius-sm);
	border:1px solid var(--olive-border-strong); background:var(--olive-surface); color:var(--olive-text);
}
.olive-body input[type=submit],.olive-body button[type=submit]{
	font:inherit; font-weight:600; padding:.65em 1.3em; border-radius:var(--olive-radius-pill);
	border:none; background:var(--olive-accent); color:#fff; cursor:pointer;
}
.olive-body input[type=submit]:hover,.olive-body button[type=submit]:hover{ background:var(--olive-accent-strong); }
.olive-body table{ border-collapse:collapse; width:100%; margin-bottom:16px; font-size:.88rem; }
.olive-body table th,.olive-body table td{ padding:8px 10px; border-bottom:1px solid var(--olive-border); text-align:left; }

#quickSearch,.searchForm,#searchForm{ background:var(--olive-surface); border-radius:var(--olive-radius-md); padding:16px; box-shadow:var(--olive-shadow-sm); }
#tagCloud,.tagCloud{ display:flex; flex-wrap:wrap; gap:8px; }
#tagCloud a,.tagCloud a{ font-size:.85rem; padding:6px 12px; border-radius:var(--olive-radius-pill); background:var(--olive-surface); box-shadow:var(--olive-shadow-sm); }

.calendarTitle,.calendarTitleBar{ margin-top:6px; }
#calendarBar table{ width:auto; }

/* Page "diaporama" (slideshow.tpl de "default", jamais surchargé par
   Olive — voir README) : gabarit natif intact, restylé en CSS uniquement
   comme le reste de cette section 12. Boutons génériques .pwg-button /
   .pwg-state-default / .pwg-state-disabled utilisés ici par
   picture_nav_buttons.tpl (précédent/suivant/lecture/pause/vitesse). */
#slideshow{ max-width:100%; }
#slideshow #imageHeaderBar{
	display:flex; align-items:center; justify-content:space-between;
	gap:12px; margin-bottom:14px;
}
#slideshow .browsePath{ display:flex; align-items:baseline; gap:14px; flex-wrap:wrap; }
#slideshow .showtitle{ font-size:1.25rem; margin:0; }
#slideshow #imageToolBar{
	display:flex; align-items:center; justify-content:center;
	gap:8px; flex-wrap:wrap; margin-bottom:16px;
}
#slideshow .imageNumber{
	font-size:.82rem; color:var(--olive-text-muted); order:-1; width:100%; text-align:center;
}
#slideshow #theImage{ text-align:center; }
#slideshow #theImage img{ max-width:100%; height:auto; border-radius:var(--olive-radius-md); }
#slideshow .showlegend{ margin-top:14px; color:var(--olive-text-muted); text-align:center; }

.navigationButtons{ display:flex; align-items:center; justify-content:center; gap:8px; flex-wrap:wrap; }
.pwg-button{
	display:inline-flex; align-items:center; gap:.4em;
	padding:.5em .85em; border-radius:var(--olive-radius-pill);
	background:var(--olive-surface); border:1px solid var(--olive-border);
	font-size:.82rem; color:var(--olive-text); box-shadow:var(--olive-shadow-sm);
}
a.pwg-button:hover{ background:var(--olive-100); text-decoration:none; color:var(--olive-text); }
.pwg-state-disabled.pwg-button{ opacity:.4; }
.pwg-button-text{ white-space:nowrap; }
/* "Rechercher dans ce lot" (#cmdSearchInSet, index.tpl de "default") : son
   icône vient de la police fontello "gallery-icon" (span vide + ::before),
   pas du système de masques pwg-icon-* d'Olive — le gap:.4em de .pwg-button
   ci-dessus laissait l'ensemble trop serré visuellement. */
.pwg-button .gallery-icon-search-folder{ margin-right:.3em; }

/* ---------------------------------------------------------------------
   13. Responsive
   --------------------------------------------------------------------- */
@media (max-width: 1100px){
	.olive-picture-layout{ grid-template-columns:1fr; }
	.olive-picture-side{ order:2; }
}

@media (max-width: 900px){
	:root{ --olive-sidebar-w:280px; }

	.olive-topbar__toggle{ display:inline-flex; }
	.olive-brand__tagline{ display:none; }

	.olive-sidebar{
		position:fixed; top:0; left:0; height:100vh; max-height:none;
		transform:translateX(-100%);
		z-index:80; box-shadow:var(--olive-shadow-lg);
		background:var(--olive-bg);
		transition:transform .25s ease;
		padding-top:calc(var(--olive-topbar-h) + 12px);
	}
	body.olive-nav-open .olive-sidebar{ transform:translateX(0); }
	body.olive-nav-open .olive-overlay{ display:block; }
	body.olive-nav-open{ overflow:hidden; }

	#olive-shell{ display:block; }
	.olive-body #content{ padding:18px 16px 40px; }

	/* Même principe que la règle de base (voir plus haut) : bornes hautes et
	   basses identiques, la carte ne dépasse jamais sa vignette. */
	.olive-albums{ grid-template-columns:repeat(auto-fill, minmax(min(var(--olive-album-thumb-size, 200px), 100%), min(var(--olive-album-thumb-size, 200px), 100%))); gap:14px; }
	/* 130px (repli) : remonté depuis 110px, même raison qu'en desktop
	   ci-dessus (voir section 8). */
	.olive-body ul.thumbnails,.olive-body #thumbnails{ grid-template-columns:repeat(auto-fill, minmax(130px, 1fr)); gap:8px; }
}

@media (max-width: 560px){
	.olive-topbar__inner{ padding:0 12px; gap:8px; }
	.olive-brand__title{ font-size:.92rem; }
	.olive-albums{ grid-template-columns:repeat(2, 1fr); }
	.olive-picture-nav{ width:36px; height:36px; }
}

/* ---------------------------------------------------------------------
   14. Icônes pwg-icon-* natives (barre d'outils album/photo, filtre du
   bloc "Albums"...) — Piwigo core génère des <span class="pwg-icon
   pwg-icon-xxx"></span> VIDES, normalement habillés par le CSS de base
   de "default" (icônes ou police dédiée). load_parent_css=false désactive
   ce CSS : sans ces règles, tous les pwg-icon-* restent invisibles.
   masque CSS (currentColor) plutôt qu'une police à sous-ensembler.
   --------------------------------------------------------------------- */
.olive-body .pwg-icon{
	display:inline-block; width:1em; height:1em; vertical-align:-.15em;
	background-color:currentColor;
}
/* Cas particulier : "Tags liés" (index.tpl de "default", jamais surchargé
   par Olive) rend <span class="pwg-icon gallery-icon-tag">, combinant NOTRE
   classe pwg-icon (masque CSS, ci-dessus) ET une classe gallery-icon-*
   (police fontello, autonome — voir le commentaire sur
   .gallery-icon-search-folder plus bas). Comme aucune règle .pwg-icon-tag
   n'existe (le nom ne correspond à aucun masque défini ici), l'élément ne
   recevait QUE le fond plein currentColor ci-dessus, sans masque : un carré
   opaque uni, exactement de la même couleur que le glyphe fontello dessiné
   par-dessus (::before, lui aussi en currentColor) — le glyphe "tag" était
   donc invisible, noyé dans son propre fond. Vérifié empiriquement
   (Playwright, capture zoomée : aucun détail visible, juste un carré plat).
   Les icônes gallery-icon-* n'ont pas besoin du traitement .pwg-icon
   (masque) : elles s'affichent déjà seules via leur police, donc on
   neutralise juste le fond/la taille imposés par .pwg-icon pour elles. */
.olive-body .pwg-icon[class*="gallery-icon-"]{
	background-color:transparent; width:auto; height:auto; vertical-align:middle;
}
.olive-body .pwg-icon-filter{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='13' r='8'/%3E%3Cpolyline points='12 9 12 13 15 15'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='13' r='8'/%3E%3Cpolyline points='12 9 12 13 15 15'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-filter-del{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='13' r='7.5'/%3E%3Cpolyline points='11 9.5 11 13 13.8 14.8'/%3E%3Cline x1='16' y1='4' x2='22' y2='10'/%3E%3Cline x1='22' y1='4' x2='16' y2='10'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='11' cy='13' r='7.5'/%3E%3Cpolyline points='11 9.5 11 13 13.8 14.8'/%3E%3Cline x1='16' y1='4' x2='22' y2='10'/%3E%3Cline x1='22' y1='4' x2='16' y2='10'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-sort{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='8' y1='4' x2='8' y2='18'/%3E%3Cpolyline points='5 7 8 4 11 7'/%3E%3Cline x1='16' y1='20' x2='16' y2='6'/%3E%3Cpolyline points='13 17 16 20 19 17'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='8' y1='4' x2='8' y2='18'/%3E%3Cpolyline points='5 7 8 4 11 7'/%3E%3Cline x1='16' y1='20' x2='16' y2='6'/%3E%3Cpolyline points='13 17 16 20 19 17'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-sizes{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='12' height='12' rx='1.5'/%3E%3Crect x='9' y='9' width='12' height='12' rx='1.5'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='3' width='12' height='12' rx='1.5'/%3E%3Crect x='9' y='9' width='12' height='12' rx='1.5'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-favorite-add{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20.5s-7.2-4.4-9.6-8.7C.8 8.3 2.3 4.6 6 4.1c2.1-.3 4.1.9 6 3.1 1.9-2.2 3.9-3.4 6-3.1 3.7.5 5.2 4.2 3.6 7.7-2.4 4.3-9.6 8.7-9.6 8.7z'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20.5s-7.2-4.4-9.6-8.7C.8 8.3 2.3 4.6 6 4.1c2.1-.3 4.1.9 6 3.1 1.9-2.2 3.9-3.4 6-3.1 3.7.5 5.2 4.2 3.6 7.7-2.4 4.3-9.6 8.7-9.6 8.7z'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-favorite-del{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20.5s-7.2-4.4-9.6-8.7C.8 8.3 2.3 4.6 6 4.1c2.1-.3 4.1.9 6 3.1 1.9-2.2 3.9-3.4 6-3.1 3.7.5 5.2 4.2 3.6 7.7-2.4 4.3-9.6 8.7-9.6 8.7z'/%3E%3Cline x1='4' y1='4' x2='20' y2='20'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 20.5s-7.2-4.4-9.6-8.7C.8 8.3 2.3 4.6 6 4.1c2.1-.3 4.1.9 6 3.1 1.9-2.2 3.9-3.4 6-3.1 3.7.5 5.2 4.2 3.6 7.7-2.4 4.3-9.6 8.7-9.6 8.7z'/%3E%3Cline x1='4' y1='4' x2='20' y2='20'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-caddie-add{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 8h16l-1.4 9.2A2 2 0 0 1 16.6 19H7.4a2 2 0 0 1-2-1.8L4 8z'/%3E%3Cpath d='M8 8l1-4h6l1 4'/%3E%3Cline x1='9' y1='11' x2='9' y2='15'/%3E%3Cline x1='15' y1='11' x2='15' y2='15'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 8h16l-1.4 9.2A2 2 0 0 1 16.6 19H7.4a2 2 0 0 1-2-1.8L4 8z'/%3E%3Cpath d='M8 8l1-4h6l1 4'/%3E%3Cline x1='9' y1='11' x2='9' y2='15'/%3E%3Cline x1='15' y1='11' x2='15' y2='15'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-category-edit{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 20l.8-3.4L14.6 6.8l2.6 2.6L7.4 19.2 4 20z'/%3E%3Cline x1='13.2' y1='8.2' x2='15.8' y2='10.8'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 20l.8-3.4L14.6 6.8l2.6 2.6L7.4 19.2 4 20z'/%3E%3Cline x1='13.2' y1='8.2' x2='15.8' y2='10.8'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-edit{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 20l.8-3.4L14.6 6.8l2.6 2.6L7.4 19.2 4 20z'/%3E%3Cline x1='13.2' y1='8.2' x2='15.8' y2='10.8'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 20l.8-3.4L14.6 6.8l2.6 2.6L7.4 19.2 4 20z'/%3E%3Cline x1='13.2' y1='8.2' x2='15.8' y2='10.8'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-save{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3v12'/%3E%3Cpolyline points='7 10 12 15 17 10'/%3E%3Cline x1='5' y1='20' x2='19' y2='20'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 3v12'/%3E%3Cpolyline points='7 10 12 15 17 10'/%3E%3Cline x1='5' y1='20' x2='19' y2='20'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-slideshow{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpolygon points='10 8 16 12 10 16' fill='%23000' stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpolygon points='10 8 16 12 10 16' fill='%23000' stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-category-view-flat{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 3 21 8 12 13 3 8'/%3E%3Cpolyline points='3 13 12 18 21 13'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 3 21 8 12 13 3 8'/%3E%3Cpolyline points='3 13 12 18 21 13'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-category-view-normal{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6.5A1.5 1.5 0 0 1 5.5 5h4l2 2h7A1.5 1.5 0 0 1 20 8.5v9A1.5 1.5 0 0 1 18.5 19h-13A1.5 1.5 0 0 1 4 17.5z'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6.5A1.5 1.5 0 0 1 5.5 5h4l2 2h7A1.5 1.5 0 0 1 20 8.5v9A1.5 1.5 0 0 1 18.5 19h-13A1.5 1.5 0 0 1 4 17.5z'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-calendar{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3Cline x1='8' y1='3' x2='8' y2='7'/%3E%3Cline x1='16' y1='3' x2='16' y2='7'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3Cline x1='8' y1='3' x2='8' y2='7'/%3E%3Cline x1='16' y1='3' x2='16' y2='7'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-camera-calendar{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3Cline x1='8' y1='3' x2='8' y2='7'/%3E%3Cline x1='16' y1='3' x2='16' y2='7'/%3E%3Ccircle cx='12' cy='15' r='2.4'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='16' rx='2'/%3E%3Cline x1='3' y1='10' x2='21' y2='10'/%3E%3Cline x1='8' y1='3' x2='8' y2='7'/%3E%3Cline x1='16' y1='3' x2='16' y2='7'/%3E%3Ccircle cx='12' cy='15' r='2.4'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-globe{
	/* Utilisé par le plugin tiers piwigo-openstreetmap (bouton "Carte" de la
	   barre d'outils photo) — absent des masques ci-dessus jusqu'ici, d'où
	   un carré vide. */
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cellipse cx='12' cy='12' rx='4' ry='9'/%3E%3Cline x1='3' y1='12' x2='21' y2='12'/%3E%3Cpath d='M5 6.5c1.8 1.3 4.3 2 7 2s5.2-.7 7-2'/%3E%3Cpath d='M5 17.5c1.8-1.3 4.3-2 7-2s5.2.7 7 2'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cellipse cx='12' cy='12' rx='4' ry='9'/%3E%3Cline x1='3' y1='12' x2='21' y2='12'/%3E%3Cpath d='M5 6.5c1.8 1.3 4.3 2 7 2s5.2-.7 7-2'/%3E%3Cpath d='M5 17.5c1.8-1.3 4.3-2 7-2s5.2.7 7 2'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-close{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='6' y1='6' x2='18' y2='18'/%3E%3Cline x1='18' y1='6' x2='6' y2='18'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-camera-info{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cline x1='12' y1='11' x2='12' y2='16.5'/%3E%3Ccircle cx='12' cy='7.6' r='.9' fill='%23000' stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cline x1='12' y1='11' x2='12' y2='16.5'/%3E%3Ccircle cx='12' cy='7.6' r='.9' fill='%23000' stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-representative{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 2.5 14.8 9 21.8 9.6 16.4 14.2 18 21 12 17.3 6 21 7.6 14.2 2.2 9.6 9.2 9'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='12 2.5 14.8 9 21.8 9.6 16.4 14.2 18 21 12 17.3 6 21 7.6 14.2 2.2 9.6 9.2 9'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-help{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M9.6 9.3a2.6 2.6 0 1 1 3.6 2.4c-.9.4-1.4 1-1.4 1.9v.4'/%3E%3Ccircle cx='12' cy='17.2' r='.9' fill='%23000' stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M9.6 9.3a2.6 2.6 0 1 1 3.6 2.4c-.9.4-1.4 1-1.4 1.9v.4'/%3E%3Ccircle cx='12' cy='17.2' r='.9' fill='%23000' stroke='none'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-register{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9.5' cy='8.4' r='3.3'/%3E%3Cpath d='M2.8 20.2c1-3.5 3.7-5.3 6.7-5.3'/%3E%3Cline x1='18' y1='9' x2='18' y2='15'/%3E%3Cline x1='15' y1='12' x2='21' y2='12'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='9.5' cy='8.4' r='3.3'/%3E%3Cpath d='M2.8 20.2c1-3.5 3.7-5.3 6.7-5.3'/%3E%3Cline x1='18' y1='9' x2='18' y2='15'/%3E%3Cline x1='15' y1='12' x2='21' y2='12'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-lost-password{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='7.5' cy='15' r='3.2'/%3E%3Cline x1='9.8' y1='12.7' x2='19.5' y2='3'/%3E%3Cline x1='15.2' y1='7.3' x2='17.4' y2='9.5'/%3E%3Cline x1='17.7' y1='4.8' x2='19.8' y2='6.9'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='7.5' cy='15' r='3.2'/%3E%3Cline x1='9.8' y1='12.7' x2='19.5' y2='3'/%3E%3Cline x1='15.2' y1='7.3' x2='17.4' y2='9.5'/%3E%3Cline x1='17.7' y1='4.8' x2='19.8' y2='6.9'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-cloud{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 18a4 4 0 0 1-.6-7.95A5 5 0 0 1 16 8.5 4 4 0 0 1 17 18H7z'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M7 18a4 4 0 0 1-.6-7.95A5 5 0 0 1 16 8.5 4 4 0 0 1 17 18H7z'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-letters{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' y1='6' x2='11' y2='6'/%3E%3Cline x1='4' y1='12' x2='16' y2='12'/%3E%3Cline x1='4' y1='18' x2='8' y2='18'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='4' y1='6' x2='11' y2='6'/%3E%3Cline x1='4' y1='12' x2='16' y2='12'/%3E%3Cline x1='4' y1='18' x2='8' y2='18'/%3E%3C/svg%3E") center/contain no-repeat;
}

/* Icônes utilisées par picture_nav_buttons.tpl / slideshow.tpl de
   "default" (jamais surchargés par Olive, voir README) : mêmes
   principe et gabarit que les icônes ci-dessus. */
.olive-body .pwg-icon-arrow-n{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='12' y1='19' x2='12' y2='5'/%3E%3Cpolyline points='6 11 12 5 18 11'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='12' y1='19' x2='12' y2='5'/%3E%3Cpolyline points='6 11 12 5 18 11'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-arrow-w{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='19' y1='12' x2='5' y2='12'/%3E%3Cpolyline points='11 6 5 12 11 18'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='19' y1='12' x2='5' y2='12'/%3E%3Cpolyline points='11 6 5 12 11 18'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-arrow-e{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'/%3E%3Cpolyline points='13 6 19 12 13 18'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='5' y1='12' x2='19' y2='12'/%3E%3Cpolyline points='13 6 19 12 13 18'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-play{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='6 4 20 12 6 20 6 4'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolygon points='6 4 20 12 6 20 6 4'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-pause{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='8' y1='4' x2='8' y2='20'/%3E%3Cline x1='16' y1='4' x2='16' y2='20'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cline x1='8' y1='4' x2='8' y2='20'/%3E%3Cline x1='16' y1='4' x2='16' y2='20'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-clock-minus{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='10' cy='14' r='7'/%3E%3Cpolyline points='10 10 10 14 13 16'/%3E%3Cline x1='15' y1='4' x2='21' y2='4'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='10' cy='14' r='7'/%3E%3Cpolyline points='10 10 10 14 13 16'/%3E%3Cline x1='15' y1='4' x2='21' y2='4'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-clock-plus{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='10' cy='14' r='7'/%3E%3Cpolyline points='10 10 10 14 13 16'/%3E%3Cline x1='18' y1='1' x2='18' y2='7'/%3E%3Cline x1='15' y1='4' x2='21' y2='4'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='10' cy='14' r='7'/%3E%3Cpolyline points='10 10 10 14 13 16'/%3E%3Cline x1='18' y1='1' x2='18' y2='7'/%3E%3Cline x1='15' y1='4' x2='21' y2='4'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-repeat-play{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='17 2 21 6 17 10'/%3E%3Cpath d='M3 12v-2a4 4 0 0 1 4-4h14'/%3E%3Cpolyline points='7 22 3 18 7 14'/%3E%3Cpath d='M21 12v2a4 4 0 0 1-4 4H3'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='17 2 21 6 17 10'/%3E%3Cpath d='M3 12v-2a4 4 0 0 1 4-4h14'/%3E%3Cpolyline points='7 22 3 18 7 14'/%3E%3Cpath d='M21 12v2a4 4 0 0 1-4 4H3'/%3E%3C/svg%3E") center/contain no-repeat;
}
.olive-body .pwg-icon-repeat-stop{
	-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='17 2 21 6 17 10'/%3E%3Cpath d='M3 12v-2a4 4 0 0 1 4-4h14'/%3E%3Cpolyline points='7 22 3 18 7 14'/%3E%3Cpath d='M21 12v2a4 4 0 0 1-4 4H3'/%3E%3Cline x1='4' y1='4' x2='20' y2='20'/%3E%3C/svg%3E") center/contain no-repeat;
	mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='17 2 21 6 17 10'/%3E%3Cpath d='M3 12v-2a4 4 0 0 1 4-4h14'/%3E%3Cpolyline points='7 22 3 18 7 14'/%3E%3Cpath d='M21 12v2a4 4 0 0 1-4 4H3'/%3E%3Cline x1='4' y1='4' x2='20' y2='20'/%3E%3C/svg%3E") center/contain no-repeat;
}
